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/default.nix | 8 ++ modules/hm/wayland/niri/binds.nix | 108 ++++++++++++++++++++++++++ modules/hm/wayland/niri/default.nix | 7 ++ modules/hm/wayland/niri/niri.nix | 72 +++++++++++++++++ modules/hm/wayland/waybar.nix | 151 ++++++++++++++++++++++++++++++++++++ 5 files changed, 346 insertions(+) create mode 100644 modules/hm/wayland/default.nix 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 create mode 100644 modules/hm/wayland/waybar.nix (limited to 'modules/hm/wayland') diff --git a/modules/hm/wayland/default.nix b/modules/hm/wayland/default.nix new file mode 100644 index 0000000..a42476b --- /dev/null +++ b/modules/hm/wayland/default.nix @@ -0,0 +1,8 @@ +{ ... }: +{ + imports = [ + ./niri/default.nix + + ./waybar.nix + ]; +} 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" ]; } + ]; + }; +} diff --git a/modules/hm/wayland/waybar.nix b/modules/hm/wayland/waybar.nix new file mode 100644 index 0000000..17a2f46 --- /dev/null +++ b/modules/hm/wayland/waybar.nix @@ -0,0 +1,151 @@ +{ lib, pkgs, ... }: +{ + programs.waybar = { + enable = true; + # settings = [ + # { + # layer = "top"; + # position = "top"; + # + # modules-center = [ "niri/workspaces" ]; + # modules-right = [ + # "idle_inhibitor" + # "pulseaudio" + # "disk" + # "battery" + # "custom/notification" + # "tray" + # "clock" + # ]; + # + # "niri/workspaces" = { + # format = "{icon} {value}"; + # format-icons = { + # active = ""; + # default = ""; + # }; + # }; + # + # "niri/window" = { + # icon = true; + # }; + # + # "pulseaudio" = { + # format = "{icon}"; + # format-bluetooth = "{icon} "; + # format-muted = "󰝟"; + # format-icons = { + # headphone = ""; + # default = [ + # "" + # "" + # ]; + # }; + # scroll-step = 1; + # on-click = "${lib.getExe pkgs.pwvucontrol}"; + # }; + # + # clock = { + # format = "{:%H:%M}  "; + # format-alt = "{:%A; %B %d, %Y (%R)}  "; + # tooltip-format = "{calendar}"; + # calendar = { + # mode = "year"; + # mode-mon-col = 3; + # weeks-pos = "right"; + # on-scroll = 1; + # on-click-right = "mode"; + # format = { + # months = "{}"; + # days = "{}"; + # weeks = "W{}"; + # weekdays = "{}"; + # today = "{}"; + # }; + # }; + # actions = { + # on-click-right = "mode"; + # on-click-forward = "tz_up"; + # on-click-backward = "tz_down"; + # on-scroll-up = "shift_up"; + # on-scroll-down = "shift_down"; + # }; + # }; + # + # battery = { + # format = "{icon}"; + # + # format-icons = [ + # "󰁺" + # "󰁻" + # "󰁼" + # "󰁽" + # "󰁾" + # "󰁿" + # "󰂀" + # "󰂁" + # "󰂂" + # "󰁹" + # ]; + # states = { + # battery-10 = 10; + # battery-20 = 20; + # battery-30 = 30; + # battery-40 = 40; + # battery-50 = 50; + # battery-60 = 60; + # battery-70 = 70; + # battery-80 = 80; + # battery-90 = 90; + # battery-100 = 100; + # }; + # + # format-plugged = "󰚥"; + # format-charging-battery-10 = "󰢜"; + # format-charging-battery-20 = "󰂆"; + # format-charging-battery-30 = "󰂇"; + # format-charging-battery-40 = "󰂈"; + # format-charging-battery-50 = "󰢝"; + # format-charging-battery-60 = "󰂉"; + # format-charging-battery-70 = "󰢞"; + # format-charging-battery-80 = "󰂊"; + # format-charging-battery-90 = "󰂋"; + # format-charging-battery-100 = "󰂅"; + # tooltip-format = "{capacity}% {timeTo}"; + # }; + # + # "custom/notification" = { + # format = "{icon} {} "; + # tooltip-format = "Left: Open Notification Center\nRight: Toggle Do not Disturb\nMiddle: Clear Notifications"; + # format-icons = { + # notification = ""; + # none = ""; + # dnd-notification = ""; + # dnd-none = ""; + # inhibited-notification = ""; + # inhibited-none = ""; + # dnd-inhibited-notification = ""; + # dnd-inhibited-none = ""; + # }; + # return-type = "json"; + # exec-if = "which swaync-client"; + # exec = "swaync-client -swb"; + # on-click = "swaync-client -t -sw"; + # on-click-right = "swaync-client -d -sw"; + # on-click-middle = "swaync-client -C"; + # escape = true; + # }; + # + # tray = { + # icon-size = 21; + # spacing = 10; + # }; + # } + # ]; + # style = '' + # #workspaces button { + # color: @base05; + # } + # ''; + }; +} -- cgit v1.3