{ config, lib, pkgs, ... }: let swaylockCmd = "swaylock -c 1a1b26"; in { networking.networkmanager.enable = true; fonts.packages = builtins.filter lib.attrsets.isDerivation (builtins.attrValues pkgs.nerd-fonts); services = { xserver.enable = true; printing.enable = true; pipewire = { enable = true; pulse.enable = true; }; libinput.enable = true; desktopManager.plasma6 = { enable = true; }; blueman.enable = true; }; # sway stuff programs.ydotool.enable = true; users.users.audrey.extraGroups = [ "ydotool" ]; programs.regreet.enable = true; services.greetd.settings = { default_session.command = "${pkgs.dbus}/bin/dbus-run-session ${lib.getExe config.programs.sway.package} -c /etc/sway/greeter-config"; }; programs.regreet.settings = { background.path = "/home/audrey/Pictures/smotsgamed.jpg"; background.fit = "Fill"; GTK.application_prefer_dark_theme = true; }; environment.etc."sway/greeter-config".source = lib.mkForce (pkgs.writeText "sway-greeter-config" '' exec "${lib.getExe config.programs.regreet.package}; swaymsg exit" output * scale 2 input type:keyboard { xkb_options "caps:escape" } input type:touchpad { dwt enabled dwtp enabled tap enabled tap_button_map lrm natural_scroll enabled } # Brightness bindsym --locked XF86MonBrightnessDown exec light -U 10 bindsym --locked XF86MonBrightnessUp exec light -A 10 blur enable corner_radius 8 shadows enable shadow_blur_radius 8 ''); programs.uwsm = { enable = true; waylandCompositors.sway = { prettyName = "Sway"; binPath = "/run/current-system/sw/bin/sway"; }; }; programs.sway = { enable = true; package = pkgs.swayfx; wrapperFeatures.gtk = true; xwayland.enable = true; extraPackages = with pkgs; [ swaylock swayr pavucontrol libnotify wdisplays playerctl grim slurp wl-clipboard wlogout fuzzel gsettings-desktop-schemas adwaita-icon-theme glib kdePackages.kwallet ]; extraSessionCommands = '' export ELECTRON_OZONE_PLATFORM_HINT=wayland export SDL_VIDEODRIVER=wayland export QT_QPA_PLATFORM=wayland-egl export QT_WAYLAND_DISABLE_WINDOWDECORATION=1 ''; }; environment.sessionVariables.XDG_DATA_DIRS = [ "/run/current-system/sw/share/gsettings-schemas/${pkgs.gsettings-desktop-schemas.name}" ]; programs.light.enable = lib.mkIf config.programs.sway.enable true; security.pam.services.swaylock = {}; security.pam.loginLimits = [ { domain = "@users"; item = "rtprio"; type = "-"; value = 1; } ]; security.pam.services = { greetd.kwallet = { enable = true; package = pkgs.kdePackages.kwallet-pam; forceRun = true; }; greetd.rules.session.kwallet.settings.auto_start = true; }; programs.dconf.enable = true; systemd.user.targets.graphical-environment = lib.mkIf config.programs.sway.enable { }; systemd.user.services.kanshi = lib.mkIf config.programs.sway.enable { description = "Monitor hotswap daemon"; serviceConfig = { Type = "simple"; ExecStart = lib.getExe pkgs.kanshi; }; partOf = [ "graphical-environment.target" ]; wantedBy = [ "graphical-environment.target" ]; }; systemd.user.services.swayidle = lib.mkIf config.programs.sway.enable { description = "Idle lock + sleep manager"; serviceConfig = { Type = "simple"; ExecStart = ''${lib.getExe pkgs.swayidle} -w \ timeout 300 'swaymsg "output * dpms off"' resume 'swaymsg "output * dpms on"' \ timeout 360 '${swaylockCmd} -f' \ timeout 600 'systemctl suspend' before-sleep '${swaylockCmd} -f' ''; }; partOf = [ "graphical-environment.target" ]; wantedBy = [ "graphical-environment.target" ]; }; systemd.user.services.waybar = lib.mkIf config.programs.sway.enable { description = "Desktop status bar"; serviceConfig = { Type = "simple"; ExecStart = lib.getExe pkgs.waybar; }; path = [ "/run/current-system/sw" ]; partOf = [ "graphical-environment.target" ]; wantedBy = [ "graphical-environment.target" ]; }; systemd.user.services.networkmanagerapplet = lib.mkIf config.programs.sway.enable { description = "Networkmanager applet"; serviceConfig = { Type = "simple"; ExecStart = lib.getExe pkgs.networkmanagerapplet; }; path = [ "/run/current-system/sw" ]; partOf = [ "graphical-environment.target" ]; wantedBy = [ "graphical-environment.target" ]; }; systemd.user.services.swaynotificationcenter = lib.mkIf config.programs.sway.enable { description = "Sway Notification Center"; serviceConfig = { Type = "simple"; ExecStart = lib.getExe pkgs.swaynotificationcenter; }; path = [ "/run/current-system/sw" ]; partOf = [ "graphical-environment.target" ]; wantedBy = [ "graphical-environment.target" ]; }; systemd.user.services.pasystray = lib.mkIf config.programs.sway.enable { description = "Pulseaudio system tray icon"; serviceConfig = { Type = "simple"; ExecStart = "${lib.getExe pkgs.pasystray} --notify source --notify sink -m 100"; }; path = [ "/run/current-system/sw" ]; partOf = [ "graphical-environment.target" ]; wantedBy = [ "graphical-environment.target" ]; }; systemd.user.services.kdeconnect-indicator = lib.mkIf config.programs.sway.enable { description = "KDE connect indicator"; serviceConfig = { Type = "simple"; ExecStart = "${lib.getBin pkgs.kdePackages.kdeconnect-kde}/bin/kdeconnect-indicator"; }; path = [ "/run/current-system/sw" ]; partOf = [ "graphical-environment.target" ]; wantedBy = [ "graphical-environment.target" ]; }; systemd.user.services.swayr = lib.mkIf config.programs.sway.enable { description = "Sway MRU window switcher"; serviceConfig = { Type = "simple"; ExecStart = "${lib.getBin pkgs.swayr}/bin/swayrd"; }; path = [ "/run/current-system/sw" ]; partOf = [ "graphical-environment.target" ]; wantedBy = [ "graphical-environment.target" ]; }; virtualisation.docker = { enable = true; storageDriver = "zfs"; logDriver = "journald"; daemon.settings = { insecure-registries = [ "docker.shell.phish" "registry.finals.2025.nautilus.institute:5000" ]; }; }; programs = { chromium.enable = true; firefox.enable = true; kdeconnect.enable = true; partition-manager.enable = true; wireshark.enable = true; wireshark.package = pkgs.wireshark; foot.enable = true; obs-studio = { enable = true; plugins = with pkgs.obs-studio-plugins; [ obs-livesplit-one ]; }; }; environment.sessionVariables.TERMINAL = "foot"; environment.systemPackages = with pkgs; [ dino discord element-desktop signal-desktop slack zotero via dwarfdump kdePackages.plasma-thunderbolt ]; systemd.tmpfiles.settings.usersetup."/home/audrey/Downloads"."e!" = { user = "audrey"; group = "users"; mode = "0700"; age = "1d"; }; systemd.services.sysfs-settings = { description = "Set desktop sysfs tunables"; script = '' # https://bugzilla.kernel.org/show_bug.cgi?id=219112 test "$(cat /sys/module/kvm/parameters/nx_huge_pages)" = "never" && exit 0 || true echo "never" | tee /sys/module/kvm/parameters/nx_huge_pages ''; before = [ "boot-complete.target" ]; }; hardware.keyboard.qmk.enable = true; services.udev.packages = [ pkgs.via ]; }