aboutsummaryrefslogtreecommitdiff
path: root/modules/hosts/desktop/sway
diff options
context:
space:
mode:
authorLeander Scherer <leander@schererleander.de>2026-01-08 02:48:11 +0100
committerLeander Scherer <leander@schererleander.de>2026-01-08 19:08:12 +0100
commit6174f3650cf42aaf008012e828d5a1f8e2ce037f (patch)
tree9bbbd99680cd5adb56596a14734d4896bc6af733 /modules/hosts/desktop/sway
parentc582c4d0675aada46fa196b7af1941ed753d055f (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.nix119
-rw-r--r--modules/hosts/desktop/sway/swayidle.nix49
-rw-r--r--modules/hosts/desktop/sway/swaylock.nix30
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";
+ };
+ };
+ };
+ };
+}