summaryrefslogtreecommitdiff
path: root/hm/env/niri
diff options
context:
space:
mode:
authoradikro <adikro@disroot.org>2026-03-01 19:57:16 +0100
committeradikro <adikro@disroot.org>2026-03-01 19:57:16 +0100
commit1be09af058424219de2aad4b9cc27ccf760d23f6 (patch)
treebdc1177b166e1eef36763984b6862d7755a7bde8 /hm/env/niri
parent4b41ce640c5eddcb50904331e03aac5460caa144 (diff)
...
Diffstat (limited to 'hm/env/niri')
-rw-r--r--hm/env/niri/binds.nix168
-rw-r--r--hm/env/niri/niri.nix51
2 files changed, 104 insertions, 115 deletions
diff --git a/hm/env/niri/binds.nix b/hm/env/niri/binds.nix
index e85b867..0dc4ea5 100644
--- a/hm/env/niri/binds.nix
+++ b/hm/env/niri/binds.nix
@@ -2,92 +2,111 @@
config,
lib,
pkgs,
+ osConfig,
...
}:
with config.lib.niri.actions;
let
playerctl = spawn "${pkgs.playerctl}/bin/playerctl";
- ss = "${toString config.hm.conf.xdg-dirs.storagePath}/pics/ss/$(date +%Y-%m-%d_%H-%M-%S)";
+ ssPath = "${toString config.hm.conf.xdg-dirs.storagePath}/pics/ss/$(date +%Y-%m-%d_%H-%M-%S)";
+ obsPass = osConfig.sops.secrets."obs/websocket_password".path;
in
{
+ # --- System & Media ---
+ "Mod+Shift+E".action = quit;
+ "Mod+Slash".action = show-hotkey-overlay;
+
+ # Audio (System-wide via wireplumber)
+ XF86AudioRaiseVolume.action = spawn "wpctl" "set-volume" "@DEFAULT_AUDIO_SINK@" "3%+";
+ XF86AudioLowerVolume.action = spawn "wpctl" "set-volume" "@DEFAULT_AUDIO_SINK@" "3%-";
+ XF86AudioMute.action =
+ spawn "sh" "-c"
+ "wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle && wpctl set-mute @DEFAULT_AUDIO_SOURCE@ toggle";
+ XF86Tools.action =
+ spawn "sh" "-c"
+ "wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle && wpctl set-mute @DEFAULT_AUDIO_SOURCE@ toggle";
+
+ # Media Control
+ XF86AudioPlay.action = playerctl "play-pause";
+ XF86AudioPrev.action = playerctl "previous";
+ XF86AudioNext.action = playerctl "next";
+
+ # Brightness
+ XF86MonBrightnessUp.action = spawn "light" "-A" "10";
+ XF86MonBrightnessDown.action = spawn "light" "-U" "10";
+
+ # --- Applications ---
+ "Mod+Return".action = spawn "foot";
+ "Mod+D".action = spawn "fuzzel";
+ "Mod+C".action = spawn "qalculate-gtk";
+ "Mod+Shift+D".action = spawn "sh" "-c" "cliphist list | fuzzel --dmenu | cliphist decode | wl-copy";
+ "Super+Return".action = spawn "sh" "-c" "OBS_WEBSOCKET_URL=$(cat ${obsPass}) obs-cmd replay save";
+
+ # --- Navigation: Columns & Workspaces ---
+ "Mod+H".action = focus-column-left;
+ "Mod+L".action = focus-column-right;
+ "Mod+J".action = focus-workspace-down;
+ "Mod+K".action = focus-workspace-up;
+
+ "Mod+WheelScrollDown".action = focus-column-right;
+ "Mod+WheelScrollUp".action = focus-column-left;
+ "Super+WheelScrollDown".action = focus-workspace-down;
+ "Super+WheelScrollUp".action = focus-workspace-up;
+
+ # --- Navigation: Monitors ---
+ "Super+H".action = focus-monitor-left;
+ "Super+L".action = focus-monitor-right;
+
+ # --- Window Management ---
+ "Mod+Shift+Q".action = close-window;
+ "Mod+Shift+V".action = toggle-window-floating;
"Mod+O" = {
action = toggle-overview;
repeat = false;
};
- "Mod+Slash".action = show-hotkey-overlay;
- XF86AudioRaiseVolume.action = playerctl "volume" "0.03+";
- XF86AudioLowerVolume.action = playerctl "volume" "0.03-";
- XF86AudioMute.action = spawn "sh" "-c" ''
- wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle && \
- wpctl set-mute @DEFAULT_AUDIO_SOURCE@ toggle
- '';
- XF86Tools.action = spawn "sh" "-c" ''
- wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle && \
- wpctl set-mute @DEFAULT_AUDIO_SOURCE@ toggle
- '';
+ # Moving Windows/Columns
+ "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;
+ "Super+Shift+H".action = move-column-to-monitor-left;
+ "Super+Shift+L".action = move-column-to-monitor-right;
- "Mod+WheelScrollDown".action = focus-column-right;
- "Mod+WheelScrollUp".action = focus-column-left;
"Mod+Shift+WheelScrollDown".action = move-column-right;
"Mod+Shift+WheelScrollUp".action = move-column-left;
-
- "Super+WheelScrollDown".action = focus-workspace-down;
- "Super+WheelScrollUp".action = focus-workspace-up;
"Super+Shift+WheelScrollDown".action = move-window-down-or-to-workspace-down;
"Super+Shift+WheelScrollUp".action = move-window-up-or-to-workspace-up;
+ # Container Management (Consume/Expel)
+ "Mod+BracketLeft".action = consume-or-expel-window-left;
+ "Mod+BracketRight".action = consume-or-expel-window-right;
+ "Mod+Comma".action = consume-window-into-column;
+ "Mod+Period".action = expel-window-from-column;
+
XF86Launch5.action = consume-or-expel-window-right;
XF86Launch6.action = consume-or-expel-window-left;
- XF86Launch7.action = switch-preset-column-width;
- "Super+Shift+L".action = spawn "swaylock" "-f";
- XF86AudioPlay.action = playerctl "play-pause";
- XF86AudioPrev.action = playerctl "previous";
- XF86AudioNext.action = playerctl "next";
+ # --- Layout & Sizing ---
+ "Mod+F".action = maximize-column;
+ "Mod+Shift+F".action = fullscreen-window;
+ "Mod+W".action = toggle-column-tabbed-display;
+ "Mod+R".action = switch-preset-column-width;
+ XF86Launch7.action = switch-preset-column-width;
+ "Mod+Shift+R".action = reset-window-height;
"Mod+Minus".action = set-column-width "-10%";
"Mod+Equal".action = set-column-width "+10%";
-
"Mod+Shift+Minus".action = set-window-height "-10%";
"Mod+Shift+Equal".action = set-window-height "+10%";
- "Mod+Shift+V".action = toggle-window-floating;
- "Mod+W".action = toggle-column-tabbed-display;
-
- "Mod+XF86Launch7" = {
- action = spawn "sh" "-c" ''
- wayfreeze &
- sleep 0.1
- GEOM=$(slurp)
- if [ -n "$GEOM" ]; then
- grim -g "$GEOM" - | tee ${ss}.png | wl-copy
- fi
- pkill -n wayfreeze
- '';
- repeat = false;
- };
-
- "Mod+Shift+XF86Launch7" = {
- action = spawn "sh" "-c" ''
- wayfreeze &
- sleep 0.1
- GEOM=$(slurp)
- if [ -n "$GEOM" ]; then
- grim -g "$GEOM" -t ppm - | satty --filename - --output-filename "${ss}-edited.png"
- fi
- pkill -n wayfreeze
- '';
- repeat = false;
- };
-
+ # --- Screenshots ---
"Mod+S" = {
action = spawn "sh" "-c" ''
- wayfreeze &
- sleep 0.1
+ wayfreeze & sleep 0.1
GEOM=$(slurp)
if [ -n "$GEOM" ]; then
- grim -g "$GEOM" - | tee ${ss}.png | wl-copy
+ grim -g "$GEOM" - | tee ${ssPath}.png | wl-copy
fi
pkill -n wayfreeze
'';
@@ -96,50 +115,15 @@ in
"Mod+Shift+S" = {
action = spawn "sh" "-c" ''
- wayfreeze &
- sleep 0.1
+ wayfreeze & sleep 0.1
GEOM=$(slurp)
if [ -n "$GEOM" ]; then
- grim -g "$GEOM" -t ppm - | satty --filename - --output-filename "${ss}-edited.png"
+ grim -g "$GEOM" -t ppm - | satty --filename - --output-filename "${ssPath}-edited.png"
fi
pkill -n wayfreeze
'';
repeat = false;
};
-
- "Mod+Shift+D".action = spawn "sh" "-c" ''
- cliphist list | fuzzel --dmenu | cliphist decode | wl-copy
- '';
-
- "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;
-
- "Mod+H".action = focus-column-left;
- "Mod+L".action = focus-column-right;
- "Mod+J".action = focus-workspace-down;
- "Mod+K".action = focus-workspace-up;
-
- "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;
-
- "Mod+Shift+Q".action = close-window;
-
- "Super+Return".action = spawn "obs-cmd" "replay" "save";
}
// (builtins.listToAttrs (
builtins.concatMap (
diff --git a/hm/env/niri/niri.nix b/hm/env/niri/niri.nix
index 3f66f6e..f8e1542 100644
--- a/hm/env/niri/niri.nix
+++ b/hm/env/niri/niri.nix
@@ -2,10 +2,13 @@
config,
lib,
pkgs,
+ osConfig,
...
-}: let
+}:
+let
cfg = config.hm.env.niri;
-in {
+in
+{
options.hm.env.niri.enable = lib.mkEnableOption "niri hm";
config = lib.mkIf cfg.enable {
hm.env = {
@@ -17,8 +20,15 @@ in {
};
programs.niri.settings = {
- debug.disable-cursor-plane = [];
- binds = import ./binds.nix {inherit config lib pkgs;};
+ debug.disable-cursor-plane = [ ];
+ binds = import ./binds.nix {
+ inherit
+ config
+ osConfig
+ lib
+ pkgs
+ ;
+ };
prefer-no-csd = true;
hotkey-overlay.skip-at-startup = true;
@@ -41,17 +51,6 @@ in {
};
power-key-handling.enable = false;
};
- outputs = {
- "DP-1" = {
- focus-at-startup = true;
- # backdrop-color = "";
- variable-refresh-rate = "on-demand";
- mode = {
- width = 2560;
- height = 1440;
- };
- };
- };
cursor = {
hide-when-typing = true;
size = 48;
@@ -67,14 +66,14 @@ in {
# active = <decoration>;
};
preset-column-widths = [
- {proportion = 1. / 3.;}
- {proportion = 1. / 2.;}
- {proportion = 2. / 3.;}
+ { proportion = 1. / 3.; }
+ { proportion = 1. / 2.; }
+ { proportion = 2. / 3.; }
];
preset-window-heights = [
- {proportion = 1. / 3.;}
- {proportion = 1. / 2.;}
- {proportion = 2. / 3.;}
+ { proportion = 1. / 3.; }
+ { proportion = 1. / 2.; }
+ { proportion = 2. / 3.; }
];
default-column-width.proportion = 0.5;
tab-indicator = {
@@ -85,14 +84,20 @@ in {
window-rules = [
{
matches = [
- {app-id = "Bitwarden";}
+ { app-id = "Bitwarden"; }
];
block-out-from = "screen-capture";
}
];
gestures.hot-corners.enable = false;
spawn-at-startup = [
- {command = ["obs" "--disable-missing-files-check" "--startreplaybuffer"];}
+ {
+ command = [
+ "obs"
+ "--disable-missing-files-check"
+ "--startreplaybuffer"
+ ];
+ }
];
};
home.packages = with pkgs; [