summaryrefslogtreecommitdiff
path: root/modules/hm/wayland
diff options
context:
space:
mode:
authoradikro <adikro@disroot.org>2025-12-18 21:04:00 +0100
committeradikro <adikro@disroot.org>2025-12-18 21:04:00 +0100
commite60410393cea222b16743a1a87f29c06b9b3543b (patch)
tree8a574048613f6b13024795bd710b824b40f5db18 /modules/hm/wayland
parentea3bf9c87ee72d6da5ea2316b229082c7fc9cdf6 (diff)
rewrite of system modules, hm modules are next
Diffstat (limited to 'modules/hm/wayland')
-rw-r--r--modules/hm/wayland/default.nix8
-rw-r--r--modules/hm/wayland/niri/binds.nix108
-rw-r--r--modules/hm/wayland/niri/default.nix7
-rw-r--r--modules/hm/wayland/niri/niri.nix72
-rw-r--r--modules/hm/wayland/waybar.nix151
5 files changed, 346 insertions, 0 deletions
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 = <decoration>;
+ };
+ focus-ring = {
+ width = 2;
+ # active = <decoration>;
+ };
+ 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 = "<tt><small>{calendar}</small></tt>";
+ # calendar = {
+ # mode = "year";
+ # mode-mon-col = 3;
+ # weeks-pos = "right";
+ # on-scroll = 1;
+ # on-click-right = "mode";
+ # format = {
+ # months = "<span color='#ffead3'><b>{}</b></span>";
+ # days = "<span color='#ecc6d9'><b>{}</b></span>";
+ # weeks = "<span color='#99ffdd'><b>W{}</b></span>";
+ # weekdays = "<span color='#ffcc66'><b>{}</b></span>";
+ # today = "<span color='#ff6699'><b><u>{}</u></b></span>";
+ # };
+ # };
+ # 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 = "<span foreground='red'><sup></sup></span>";
+ # none = "";
+ # dnd-notification = "<span foreground='red'><sup></sup></span>";
+ # dnd-none = "";
+ # inhibited-notification = "<span foreground='red'><sup></sup></span>";
+ # inhibited-none = "";
+ # dnd-inhibited-notification = "<span foreground='red'><sup></sup></span>";
+ # 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;
+ # }
+ # '';
+ };
+}