From e60410393cea222b16743a1a87f29c06b9b3543b Mon Sep 17 00:00:00 2001 From: adikro Date: Thu, 18 Dec 2025 21:04:00 +0100 Subject: rewrite of system modules, hm modules are next --- modules/hm/wayland/niri/binds.nix | 108 ++++++++++++++++++++++++++++++++++++ modules/hm/wayland/niri/default.nix | 7 +++ modules/hm/wayland/niri/niri.nix | 72 ++++++++++++++++++++++++ 3 files changed, 187 insertions(+) create mode 100644 modules/hm/wayland/niri/binds.nix create mode 100644 modules/hm/wayland/niri/default.nix create mode 100644 modules/hm/wayland/niri/niri.nix (limited to 'modules/hm/wayland/niri') diff --git a/modules/hm/wayland/niri/binds.nix b/modules/hm/wayland/niri/binds.nix new file mode 100644 index 0000000..1ff3a38 --- /dev/null +++ b/modules/hm/wayland/niri/binds.nix @@ -0,0 +1,108 @@ +{ config, pkgs, ... }: +{ + programs.niri.settings.binds = with config.lib.niri.actions; + let + set-volume = spawn "wpctl" "set-volume" "@DEFAULT_AUDIO_SINK@"; + playerctl = spawn "${pkgs.playerctl}/bin/playerctl"; + in + { + # Overview / help + "Mod+O" = { + action = toggle-overview; + repeat = false; + }; + "Mod+Slash".action = show-hotkey-overlay; + + # Audio + # XF86AudioRaiseVolume.action = set-volume "2%+"; + # XF86AudioLowerVolume.action = set-volume "2%-"; + XF86AudioRaiseVolume.action = playerctl "volume" "0.02+"; + XF86AudioLowerVolume.action = playerctl "volume" "0.02-"; + XF86AudioMute.action = spawn "wpctl" "set-mute" "@DEFAULT_AUDIO_SINK@" "toggle"; + XF86AudioMicMute.action = spawn "wpctl" "set-mute" "@DEFAULT_AUDIO_SOURCE@" "toggle"; + + # Media keys + XF86AudioPlay.action = playerctl "play-pause"; + XF86AudioPrev.action = playerctl "previous"; + XF86AudioNext.action = playerctl "next"; + + # Column sizing + "Mod+Minus".action = set-column-width "-10%"; + "Mod+Equal".action = set-column-width "+10%"; + + # Finer height adjustments when in column with other windows. + "Mod+Shift+Minus".action = set-window-height "-10%"; + "Mod+Shift+Equal".action = set-window-height "+10%"; + + # Misc + "Mod+Shift+V".action = toggle-window-floating; + "Mod+Shift+P".action = power-off-monitors; + "Mod+W".action = toggle-column-tabbed-display; + + "Mod+S".action = spawn "sh" "-c" + '' + filename="/media/pics/ss/$(date +%Y-%m-%d_%H-%M-%S).png" + grim -g "$(slurp)" - | tee "$filename" | wl-copy + ''; + + "Mod+Shift+S".action = spawn "sh" "-c" + '' + filename="/media/pics/ss/$(date +%Y-%m-%d_%H-%M-%S).png" + grim -g "$(slurp)" "$filename" + + edited="/media/pics/ss/$(date +%Y-%m-%d_%H-%M-%S)-edited.png" + satty --filename "$filename" --output-filename "$edited" + ''; + + "Mod+Shift+D".action = spawn "sh" "-c" + '' + cliphist list | fuzzel --dmenu | cliphist decode | wl-copy + ''; + + # --- System / General --- + "Mod+Return".action = spawn "foot"; + "Mod+D".action = spawn "fuzzel"; + "Mod+C".action = spawn "qalculate-gtk"; + "Mod+BracketLeft".action = consume-or-expel-window-left; + "Mod+BracketRight".action = consume-or-expel-window-right; + + "Mod+R".action = switch-preset-column-width; + "Mod+Shift+R".action = reset-window-height; + "Mod+F".action = maximize-column; + "Mod+Shift+F".action = fullscreen-window; + + "Mod+Comma".action = consume-window-into-column; + "Mod+Period".action = expel-window-from-column; + + "Mod+Shift+E".action = quit; + + # --- Window Navigation (Focus) --- + "Mod+H".action = focus-column-left; + "Mod+L".action = focus-column-right; + "Mod+J".action = focus-workspace-down; + "Mod+K".action = focus-workspace-up; + + # --- Window Management (Move) --- + "Mod+Shift+H".action = move-column-left; + "Mod+Shift+L".action = move-column-right; + "Mod+Shift+J".action = move-window-down-or-to-workspace-down; + "Mod+Shift+K".action = move-window-up-or-to-workspace-up; + + # --- Window State --- + "Mod+Shift+Q".action = close-window; + + "Mod+1".action = focus-workspace 1; + "Mod+2".action = focus-workspace 2; + "Mod+3".action = focus-workspace 3; + "Mod+4".action = focus-workspace 4; + "Mod+5".action = focus-workspace 5; + "Mod+6".action = focus-workspace 6; + + "Mod+Shift+1".action.move-column-to-workspace = [ 1 ]; + "Mod+Shift+2".action.move-column-to-workspace = [ 2 ]; + "Mod+Shift+3".action.move-column-to-workspace = [ 3 ]; + "Mod+Shift+4".action.move-column-to-workspace = [ 4 ]; + "Mod+Shift+5".action.move-column-to-workspace = [ 5 ]; + "Mod+Shift+6".action.move-column-to-workspace = [ 6 ]; + }; +} diff --git a/modules/hm/wayland/niri/default.nix b/modules/hm/wayland/niri/default.nix new file mode 100644 index 0000000..61e7799 --- /dev/null +++ b/modules/hm/wayland/niri/default.nix @@ -0,0 +1,7 @@ +{ ... }: +{ + imports = [ + ./niri.nix + ./binds.nix + ]; +} diff --git a/modules/hm/wayland/niri/niri.nix b/modules/hm/wayland/niri/niri.nix new file mode 100644 index 0000000..e6c8619 --- /dev/null +++ b/modules/hm/wayland/niri/niri.nix @@ -0,0 +1,72 @@ +{ lib, pkgs, ... }: +{ + programs.niri.settings = { + prefer-no-csd = true; + hotkey-overlay.skip-at-startup = true; + input = { + mouse = { + accel-profile = "flat"; + accel-speed = -0.6; + middle-emulation = true; + scroll-factor = 1.5; + }; + focus-follows-mouse = { + enable = true; + max-scroll-amount = "10%"; + }; + mod-key = "Alt"; + keyboard = { + xkb.layout = "pl"; + repeat-delay = 400; + repeat-rate = 60; + }; + power-key-handling.enable = false; + }; + outputs = { + "DP-1" = { + focus-at-startup = true; + # backdrop-color = ""; + variable-refresh-rate = "on-demand"; + mode = { + width = 2560; + height = 1440; + refresh = 239.998; + }; + }; + }; + cursor = { + hide-when-typing = true; + size = 8; + # theme = ""; + }; + layout = { + border = { + width = 2; + # active = ; + }; + focus-ring = { + width = 2; + # active = ; + }; + preset-column-widths = [ + { proportion = 1. / 3.; } + { proportion = 1. / 2.; } + { proportion = 2. / 3.; } + ]; + preset-window-heights = [ + { proportion = 1. / 3.; } + { proportion = 1. / 2.; } + { proportion = 2. / 3.; } + ]; + default-column-width.proportion = 0.5; + tab-indicator = { + gaps-between-tabs = 3; + position = "top"; + }; + }; + spawn-at-startup = [ + { command = [ "${lib.getExe pkgs.xwayland-satellite}" ]; } + { command = [ "awww-daemon" ]; } + ]; + }; +} -- cgit v1.3