diff options
| author | Leander Scherer <leander@schererleander.de> | 2026-01-08 02:48:11 +0100 |
|---|---|---|
| committer | Leander Scherer <leander@schererleander.de> | 2026-01-08 19:08:12 +0100 |
| commit | 6174f3650cf42aaf008012e828d5a1f8e2ce037f (patch) | |
| tree | 9bbbd99680cd5adb56596a14734d4896bc6af733 /modules/hosts/desktop/sway | |
| parent | c582c4d0675aada46fa196b7af1941ed753d055f (diff) | |
refactor(modules): separate nixos/home-manager modules, use standard option conventions
Diffstat (limited to 'modules/hosts/desktop/sway')
| -rw-r--r-- | modules/hosts/desktop/sway/default.nix | 119 | ||||
| -rw-r--r-- | modules/hosts/desktop/sway/swayidle.nix | 49 | ||||
| -rw-r--r-- | modules/hosts/desktop/sway/swaylock.nix | 30 |
3 files changed, 198 insertions, 0 deletions
diff --git a/modules/hosts/desktop/sway/default.nix b/modules/hosts/desktop/sway/default.nix new file mode 100644 index 0000000..c149c21 --- /dev/null +++ b/modules/hosts/desktop/sway/default.nix @@ -0,0 +1,119 @@ +{ + config, + username, + lib, + pkgs, + ... +}: + +let + inherit (lib) mkEnableOption mkIf mkOptionDefault; + mod = config.home-manager.users.${username}.wayland.windowManager.sway.config.modifier; + cfg = config.nx.desktop.sway; +in +{ + imports = [ + ./swayidle.nix + ./swaylock.nix + ]; + + options.nx.desktop.sway.enable = mkEnableOption "Enable sway and setup"; + config = mkIf cfg.enable { + home-manager.users.${username} = { + home.packages = with pkgs; [ + wmenu + swaybg + sway-contrib.grimshot + wl-clipboard + xdg-utils + ]; + + wayland.windowManager.sway = { + enable = true; + systemd = { + enable = true; + xdgAutostart = true; + }; + config = { + input = { + "*" = { + xkb_layout = "de"; + }; + }; + + output = { + DP-1 = { + resolution = "1920x1080@240Hz"; + bg = "/etc/nixos/images/pond.jpg fill"; + }; + }; + + gaps = { + inner = 15; + }; + + window = { + titlebar = false; + border = 0; + }; + + modifier = "Mod4"; + + keybindings = mkOptionDefault { + "${mod}+q" = "kill"; + "${mod}+Shift+s" = "exec grimshot savecopy area"; + "XF86AudioPlay" = "exec playerctl play-pause"; + "XF86AudioPrev" = "exec playerctl previous"; + "XF86AudioNext" = "exec playerctl next"; + "XF86AudioRaiseVolume" = "exec wpctl set-volume @DEFAULT_AUDIO_DEVICE@ +5%"; + "XF86AudioLowerVolume" = "exec wpctl set-volume @DEFAULT_AUDIO_DEVICE@ -5%"; + "XF86AudioMute" = "exec wpctl set-mute @DEFAULT_AUDIO_DEVICE@ toggle"; + }; + + menu = "${pkgs.wmenu}/bin/wmenu-run -b -N 000000E6"; + terminal = "${pkgs.foot}/bin/foot"; + defaultWorkspace = "workspace number 1"; + + bars = [ + { + "command" = "${pkgs.waybar}/bin/waybar"; + } + ]; + }; + checkConfig = false; + wrapperFeatures.base = true; + wrapperFeatures.gtk = true; + }; + + home.sessionVariables = { + XDG_CURRENT_DESKTOP = "sway"; + XDG_SCREENSHOTS_DIR = "~/Pictures/Screenshots/"; + }; + + gtk = { + enable = true; + theme = { + name = "Adwaita-dark"; + package = pkgs.gnome-themes-extra; + }; + gtk3.extraConfig = { + Settings = '' + gtk-application-prefer-dark-theme=1 + ''; + }; + gtk4.extraConfig = { + Settings = '' + gtk-application-prefer-dark-theme=1 + ''; + }; + }; + + home.pointerCursor = { + gtk.enable = true; + name = "Adwaita"; + package = pkgs.adwaita-icon-theme; + size = 24; + }; + }; + }; +} diff --git a/modules/hosts/desktop/sway/swayidle.nix b/modules/hosts/desktop/sway/swayidle.nix new file mode 100644 index 0000000..df8dbdc --- /dev/null +++ b/modules/hosts/desktop/sway/swayidle.nix @@ -0,0 +1,49 @@ +{ + config, + lib, + pkgs, + username, + ... +}: + +let + inherit (lib) mkEnableOption mkIf; + cfg = config.nx.desktop.swayidle; +in +{ + options.nx.desktop.swayidle.enable = mkEnableOption "Enable swayidle configuration" // { + default = config.nx.desktop.sway.enable; + }; + config = mkIf cfg.enable { + home-manager.users."${username}" = { + services.swayidle = { + enable = true; + timeouts = [ + { + timeout = 300; + command = "${pkgs.swaylock}/bin/swaylock -f -c 000000"; + } + { + timeout = 600; + command = "${pkgs.sway}/bin/swaymsg 'output * dpms off"; + resumeCommand = "${pkgs.sway}/bin/swaymsg output * dpms on"; + } + { + timeout = 900; + command = "${pkgs.systemd}/bin/systemctl suspend"; + } + ]; + events = [ + { + event = "after-resume"; + command = "${pkgs.sway}/bin/swaymsg output * dpms on"; + } + { + event = "before-sleep"; + command = "${pkgs.swaylock}/bin/swaylock -f -c 000000"; + } + ]; + }; + }; + }; +} diff --git a/modules/hosts/desktop/sway/swaylock.nix b/modules/hosts/desktop/sway/swaylock.nix new file mode 100644 index 0000000..9ba43a1 --- /dev/null +++ b/modules/hosts/desktop/sway/swaylock.nix @@ -0,0 +1,30 @@ +{ + config, + username, + lib, + ... +}: + +let + inherit (lib) mkEnableOption mkIf; + cfg = config.nx.desktop.swaylock; +in +{ + options.nx.desktop.swaylock.enable = mkEnableOption "Enable and setup swaylock" // { + default = config.nx.desktop.sway.enable; + }; + config = mkIf cfg.enable { + home-manager.users."${username}" = { + programs.swaylock = { + enable = true; + settings = { + font = "monospace 12"; + color = "00000000"; + ring-color = "ffffffff"; + key-hl-color = "ff0000ff"; + bs-hl-color = "ff0000ff"; + }; + }; + }; + }; +} |
