config.nix/home/desktop/window-managers/niri.nix
2026-05-04 08:12:55 +02:00

171 lines
5.8 KiB
Nix

{
config,
pkgs,
lib,
inputs,
osConfig,
...
}:
let
modifier = if (osConfig.keybinds.modifier == "Meta") then "Mod" else null;
nsipc = "noctalia-shell ipc call";
kb-layout = builtins.substring 0 2 osConfig.system.locale;
in
{
config =
if osConfig.desktop.window-managers.niri.enable then
{
home.file = {
"~/.config/niri/config.kdl" = {
target = ".config/niri/config.kdl";
text = ''
input {
keyboard {
xkb {
layout "${kb-layout}"
}
repeat-delay 600
repeat-rate 20
track-layout "global"
}
touchpad {
tap
dwt
accel-profile "flat"
accel-speed 0.0
scroll-method "two-finger"
}
mouse {
accel-speed 0.5
accel-profile "flat"
}
focus-follows-mouse max-scroll-amount="0%"
}
output "Samsung Electric Company S24D330 0x5A5A5131" {
mode "1920x1080@60"
position x=0 y=1440
}
output "PNP(AOC) Q27G2WG4 0x00005F45" {
mode "2560x1440@143.912"
position x=0 y=0
variable-refresh-rate on-demand=true
focus-at-startup
}
binds {
//Applications
${modifier}+${osConfig.keybinds.hotkeys.terminal} hotkey-overlay-title="Open Terminal" { spawn "${osConfig.apps.terminal.default}";}
${modifier}+${osConfig.keybinds.hotkeys.browser} hotkey-overlay-title="Open Browser" { spawn "${osConfig.apps.internet.browsers.default}";}
${modifier}+${osConfig.keybinds.hotkeys.launcher} hotkey-overlay-title="Open Launcher" { spawn-sh "${nsipc} launcher toggle || walker";}
${modifier}+Shift+${osConfig.keybinds.hotkeys.editor} hotkey-overlay-title="Open Editor" { spawn-sh "$EDITOR";}
${modifier}+B hotkey-overlay-title="Open Password Manager" { spawn-sh "rbw unlocked || kitty --class kitty-floating -e rbw unlock; selected=$(rbw list | walker -d); wl-copy $(rbw get \"$selected\"); sleep 30; rbw lock";}
//Window Management
${modifier}+Shift+${osConfig.keybinds.hotkeys.close-window} { close-window; }
${modifier}+R { switch-preset-column-width; }
${modifier}+Shift+R { switch-preset-column-width-back; }
${modifier}+F { expand-column-to-available-width; }
${modifier}+G { toggle-window-floating; }
${modifier}+Shift+F { fullscreen-window; }
//Column Navigation
${modifier}+H { focus-column-left; }
${modifier}+L { focus-column-right; }
${modifier}+WheelScrollDown { focus-column-right; }
${modifier}+WheelScrollUp { focus-column-left; }
${modifier}+Left { focus-column-left; }
${modifier}+Right { focus-column-right; }
${modifier}+Shift+H { move-column-left; }
${modifier}+Shift+L { move-column-right; }
${modifier}+Shift+J { move-column-to-monitor-next; }
${modifier}+Shift+K { move-column-to-monitor-previous; }
${modifier}+Shift+Left { move-column-left; }
${modifier}+Shift+Right { move-column-right; }
//Workspace Navigation
${modifier}+J cooldown-ms=150 { focus-monitor-next; }
${modifier}+K cooldown-ms=150 { focus-monitor-previous; }
${modifier}+Down cooldown-ms=150 { focus-workspace-down; }
${modifier}+Up cooldown-ms=150 { focus-workspace-up; }
//Screenshots
Print { screenshot;}
//Misc
${modifier}+Shift+Y hotkey-overlay-title="Open Keyboard Cheatsheet" { spawn-sh "${nsipc} plugin:keybind-cheatsheet toggle"; }
${modifier}+P hotkey-overlay-title="Open Session Menu" { spawn-sh "${nsipc} sessionMenu toggle"; }
}
switch-events {
lid-close { spawn "noctalia-shell" "ipc" "call" "sessionMenu" "lockAndSuspend"; }
}
layout {
gaps 20
center-focused-column "always"
always-center-single-column
default-column-width { proportion 0.5; }
preset-column-widths {
proportion 0.5
proportion 0.66667
proportion 1.0
}
border {
width 5
}
shadow {
on
}
}
spawn-at-startup "elephant"
spawn-at-startup "noctalia-shell"
spawn-at-startup "walker --gapplication-service"
gestures {
hot-corners {
off
}
}
cursor {
hide-when-typing
hide-after-inactive-ms 2000
}
xwayland-satellite {
path "xwayland-satellite"
}
hotkey-overlay {
hide-not-bound
}
window-rule {
geometry-corner-radius 20
clip-to-geometry true
}
prefer-no-csd
include "noctalia.kdl"
'';
};
};
}
else
{ };
}