From c9a260c3192ca22d234168d61d3309219329bc61 Mon Sep 17 00:00:00 2001 From: Bas Grolleman Date: Thu, 7 May 2026 08:56:34 +0200 Subject: [PATCH] Add my niri config for CachyOS --- niri/cfg/animation.kdl | 32 ++++++++++ niri/cfg/autostart.kdl | 4 ++ niri/cfg/display.kdl | 9 +++ niri/cfg/input.kdl | 31 +++++++++ niri/cfg/keybinds.kdl | 139 +++++++++++++++++++++++++++++++++++++++++ niri/cfg/layout.kdl | 17 +++++ niri/cfg/misc.kdl | 25 ++++++++ niri/cfg/rules.kdl | 22 +++++++ niri/config.kdl | 8 +++ setup.sh | 8 +-- 10 files changed, 291 insertions(+), 4 deletions(-) create mode 100644 niri/cfg/animation.kdl create mode 100644 niri/cfg/autostart.kdl create mode 100644 niri/cfg/display.kdl create mode 100644 niri/cfg/input.kdl create mode 100644 niri/cfg/keybinds.kdl create mode 100644 niri/cfg/layout.kdl create mode 100644 niri/cfg/misc.kdl create mode 100644 niri/cfg/rules.kdl create mode 100644 niri/config.kdl diff --git a/niri/cfg/animation.kdl b/niri/cfg/animation.kdl new file mode 100644 index 0000000..4c9a913 --- /dev/null +++ b/niri/cfg/animation.kdl @@ -0,0 +1,32 @@ + animations { + workspace-switch { + spring damping-ratio=1.0 stiffness=1000 epsilon=0.0001 + } + window-open { + duration-ms 200 + curve "ease-out-quad" + } + window-close { + duration-ms 200 + curve "ease-out-cubic" + } + horizontal-view-movement { + spring damping-ratio=1.0 stiffness=900 epsilon=0.0001 + } + window-movement { + spring damping-ratio=1.0 stiffness=800 epsilon=0.0001 + } + window-resize { + spring damping-ratio=1.0 stiffness=1000 epsilon=0.0001 + } + config-notification-open-close { + spring damping-ratio=0.6 stiffness=1200 epsilon=0.001 + } + screenshot-ui-open { + duration-ms 300 + curve "ease-out-quad" + } + overview-open-close { + spring damping-ratio=1.0 stiffness=900 epsilon=0.0001 + } + } diff --git a/niri/cfg/autostart.kdl b/niri/cfg/autostart.kdl new file mode 100644 index 0000000..f6f0187 --- /dev/null +++ b/niri/cfg/autostart.kdl @@ -0,0 +1,4 @@ +// ────────────── Startup Applications ────────────── +// https://github.com/YaLTeR/niri/wiki/Configuration:-Miscellaneous#spawn-sh-at-startup + + spawn-sh-at-startup "qs -c noctalia-shell" diff --git a/niri/cfg/display.kdl b/niri/cfg/display.kdl new file mode 100644 index 0000000..89f338b --- /dev/null +++ b/niri/cfg/display.kdl @@ -0,0 +1,9 @@ +// ────────────── Output Configuration ────────────── +// You can run `niri msg outputs` to get the correct name for your displays. +// You will have to remove "/-" and edit it before it takes effect. +// https://github.com/YaLTeR/niri/wiki/Configuration:-Outputs + +/- output "DP-1" { + mode "2560x1440@359.979" // Set resolution and refresh rate + scale 1 // No scaling (use 2 for HiDPI) +} \ No newline at end of file diff --git a/niri/cfg/input.kdl b/niri/cfg/input.kdl new file mode 100644 index 0000000..93d6dde --- /dev/null +++ b/niri/cfg/input.kdl @@ -0,0 +1,31 @@ +// ────────────── Input Configuration ────────────── +// https://github.com/YaLTeR/niri/wiki/Configuration:-Input + +input { + keyboard { + xkb { + //If you want to overwrite your keyboard layout, + // uncomment the line below and change the layout accordingly. + //layout "us" // Use the American keyboard layout + } + numlock // Enable numlock on startup + } + + touchpad { + //tap // Enable tap-to-click + dwt + scroll-method "two-finger" + tap-button-map "left-right-middle" + natural-scroll // Enable natural (macOS-style) scrolling + } + + mouse { + // If you want to disable Mouse Acceleration, + // uncomment the lines below. + //accel-profile "flat" + //accel-speed 0.0 + } + + //focus-follows-mouse // Automatically focus windows under the mouse pointer + //workspace-auto-back-and-forth // Enable workspace back & forth switching +} diff --git a/niri/cfg/keybinds.kdl b/niri/cfg/keybinds.kdl new file mode 100644 index 0000000..edd20a4 --- /dev/null +++ b/niri/cfg/keybinds.kdl @@ -0,0 +1,139 @@ +binds { + + // ────────────── Keybindings ────────────── + // https://github.com/YaLTeR/niri/wiki/Configuration:-Key-Bindings + + // ─── noctalia-shell keybinds ─── + // https://docs.noctalia.dev/getting-started/keybinds/ + + Mod+Shift+ESCAPE { show-hotkey-overlay; } + Mod+Shift+S { spawn-sh "flameshot gui"; } + + // ─── Applications ─── + Mod+Return hotkey-overlay-title="Open Terminal: Alacritty" { spawn "alacritty"; } + Mod+CTRL+Return hotkey-overlay-title="Open App Launcher: noctalia launcher" { spawn-sh "qs -c noctalia-shell ipc call launcher toggle"; } + Mod+Space hotkey-overlay-title="Open App Launcher: noctalia launcher" { spawn-sh "qs -c noctalia-shell ipc call launcher toggle"; } + Mod+B hotkey-overlay-title="Open Browser: helium" { spawn "helium-browser"; } + Mod+ALT+L hotkey-overlay-title="Lock Screen: noctalia lock" { spawn-sh "qs -c noctalia-shell ipc call lockScreen lock"; } + Mod+Shift+Q hotkey-overlay-title="Session Menu: noctalia sessionMenu" { spawn-sh "qs -c noctalia-shell ipc call sessionMenu toggle"; } + + // Please choose your own file manager. + Mod+E hotkey-overlay-title="File Manager: Nautilus" { spawn "nautilus"; } + + // ─── Media Controls ─── + XF86AudioRaiseVolume allow-when-locked=true { spawn-sh "qs -c noctalia-shell ipc call volume increase"; } + XF86AudioLowerVolume allow-when-locked=true { spawn-sh "qs -c noctalia-shell ipc call volume decrease"; } + XF86AudioMute allow-when-locked=true { spawn-sh "qs -c noctalia-shell ipc call volume muteOutput"; } + XF86AudioMicMute allow-when-locked=true { spawn-sh "qs -c noctalia-shell ipc call volume muteInput"; } + XF86AudioNext allow-when-locked=true { spawn-sh "qs -c noctalia-shell ipc call media next"; } + XF86AudioPrev allow-when-locked=true { spawn-sh "qs -c noctalia-shell ipc call media previous"; } + XF86AudioPlay allow-when-locked=true { spawn-sh "qs -c noctalia-shell ipc call media playPause"; } + XF86AudioPause allow-when-locked=true { spawn-sh "qs -c noctalia-shell ipc call media playPause"; } + + // ─── Brightness Controls ─── + XF86MonBrightnessUp allow-when-locked=true { spawn-sh "qs -c noctalia-shell ipc call brightness increase"; } + XF86MonBrightnessDown allow-when-locked=true { spawn-sh "qs -c noctalia-shell ipc call brightness decrease"; } + + // ─── Window Movement and Focus ─── + Mod+Q { close-window; } + + Mod+Left { focus-column-left; } + Mod+H { focus-column-left; } + Mod+Right { focus-column-right; } + Mod+L { focus-column-right; } + Mod+Up { focus-window-up; } + Mod+K { focus-window-up; } + Mod+Down { focus-window-down; } + Mod+J { focus-window-down; } + + Mod+CTRL+Left { move-column-left; } + Mod+CTRL+H { move-column-left; } + Mod+CTRL+Right { move-column-right; } + Mod+CTRL+L { move-column-right; } + Mod+CTRL+UP { move-window-up; } + Mod+CTRL+K { move-window-up; } + Mod+CTRL+Down { move-window-down; } + Mod+CTRL+J { move-window-down; } + + Mod+Home { focus-column-first; } + Mod+End { focus-column-last; } + Mod+CTRL+Home { move-column-to-first; } + Mod+CTRL+End { move-column-to-last; } + + Mod+Shift+Left { focus-monitor-left; } + Mod+Shift+Right { focus-monitor-right; } + Mod+Shift+UP { focus-monitor-up; } + Mod+Shift+Down { focus-monitor-down; } + + Mod+Shift+CTRL+Left { move-column-to-monitor-left; } + Mod+Shift+CTRL+Right { move-column-to-monitor-right; } + Mod+Shift+CTRL+UP { move-column-to-monitor-up; } + Mod+Shift+CTRL+Down { move-column-to-monitor-down; } + + // ─── Workspace Switching ─── + Mod+WheelScrollDown cooldown-ms=150 { focus-workspace-down; } + Mod+WheelScrollUp cooldown-ms=150 { focus-workspace-up; } + Mod+CTRL+WheelScrollDown cooldown-ms=150 { move-column-to-workspace-down; } + Mod+CTRL+WheelScrollUp cooldown-ms=150 { move-column-to-workspace-up; } + + Mod+WheelScrollRight { focus-column-right; } + Mod+WheelScrollLeft { focus-column-left; } + Mod+CTRL+WheelScrollRight { move-column-right; } + Mod+CTRL+WheelScrollLeft { move-column-left; } + + Mod+Shift+WheelScrollDown { focus-column-right; } + Mod+Shift+WheelScrollUp { focus-column-left; } + Mod+CTRL+Shift+WheelScrollDown { move-column-right; } + Mod+CTRL+Shift+WheelScrollUp { move-column-left; } + + Alt+1 { focus-workspace 1; } + Alt+2 { focus-workspace 2; } + Alt+3 { focus-workspace 3; } + Alt+4 { focus-workspace 4; } + Alt+5 { focus-workspace 5; } + Alt+6 { focus-workspace 6; } + Alt+7 { focus-workspace 7; } + Alt+8 { focus-workspace 8; } + Alt+9 { focus-workspace 9; } + + Alt+Shift+1 { move-column-to-workspace 1; } + Alt+Shift+2 { move-column-to-workspace 2; } + Alt+Shift+3 { move-column-to-workspace 3; } + Alt+Shift+4 { move-column-to-workspace 4; } + Alt+Shift+5 { move-column-to-workspace 5; } + Alt+Shift+6 { move-column-to-workspace 6; } + Alt+Shift+7 { move-column-to-workspace 7; } + Alt+Shift+8 { move-column-to-workspace 8; } + Alt+Shift+9 { move-column-to-workspace 9; } + + Mod+TAB { focus-workspace-previous; } + + // ─── Layout Controls ─── + Mod+CTRL+F { expand-column-to-available-width; } + Mod+C { center-column; } + Mod+CTRL+C { center-visible-columns; } + Mod+Minus { set-column-width "-10%"; } + Mod+Equal { set-column-width "+10%"; } + Mod+Shift+Minus { set-window-height "-10%"; } + Mod+Shift+Equal { set-window-height "+10%"; } + + // ─── Modes ─── + Mod+T { toggle-window-floating; } + Mod+F { fullscreen-window; } + Mod+W { toggle-column-tabbed-display; } + + // ─── Screenshots ─── + CTRL+Shift+1 { screenshot; } + CTRL+Shift+2 { screenshot-screen; } + CTRL+Shift+3 { screenshot-window; } + + // ─── Emergency Escape Key ─── + // Use this when a fullscreen app blocks your keybinds. + // It disables any active keyboard shortcut inhibitor, restoring control. + Mod+ESCAPE allow-inhibiting=false { toggle-keyboard-shortcuts-inhibit; } + + // ─── Exit / Power ─── + CTRL+ALT+Delete { quit; } // Also quits Niri + Mod+Shift+P { power-off-monitors; } // Turn off screens (useful for OLED or privacy) + Mod+O repeat=false { toggle-overview; } +} diff --git a/niri/cfg/layout.kdl b/niri/cfg/layout.kdl new file mode 100644 index 0000000..b66d29a --- /dev/null +++ b/niri/cfg/layout.kdl @@ -0,0 +1,17 @@ + layout { + gaps 16 // Gap between windows + center-focused-column "always" // Don’t auto-center focused column + + background-color "transparent" // <- needed for noctalia-shell to set wallpaper + + //default-column-width { proportion 0.95; } + default-column-width { proportion 0.40; } + + preset-column-widths { + proportion 0.33333 + proportion 0.5 + proportion 0.66667 + } + + struts {} + } diff --git a/niri/cfg/misc.kdl b/niri/cfg/misc.kdl new file mode 100644 index 0000000..9df0c68 --- /dev/null +++ b/niri/cfg/misc.kdl @@ -0,0 +1,25 @@ + prefer-no-csd + screenshot-path null + + environment { + ELECTRON_OZONE_PLATFORM_HINT "auto" + QT_QPA_PLATFORM "wayland" + QT_QPA_PLATFORMTHEME "gtk3" + QT_WAYLAND_DISABLE_WINDOWDECORATION "1" + XDG_CURRENT_DESKTOP "niri" + XDG_SESSION_TYPE "wayland" + } + + cursor { + xcursor-theme "capitaine-cursors" + xcursor-size 24 + } + + debug { + // Allows notification actions and window activation from Noctalia. + honor-xdg-activation-with-invalid-serial + } + + hotkey-overlay { + skip-at-startup + } diff --git a/niri/cfg/rules.kdl b/niri/cfg/rules.kdl new file mode 100644 index 0000000..4dd5bec --- /dev/null +++ b/niri/cfg/rules.kdl @@ -0,0 +1,22 @@ + window-rule { + geometry-corner-radius 5 // Set every window radius to 20 + clip-to-geometry true + } + + // if you use steam you will probably like these + window-rule { + match app-id="steam" + exclude title=r#"^[Ss]team$"# + open-floating true + } + + window-rule { + match app-id="steam" title=r#"^notificationtoasts_\d+_desktop$"# + default-floating-position x=10 y=10 relative-to="bottom-right" + open-focused false + } + + layer-rule { + match namespace="^noctalia-wallpaper*" + place-within-backdrop true + } diff --git a/niri/config.kdl b/niri/config.kdl new file mode 100644 index 0000000..b8c53ca --- /dev/null +++ b/niri/config.kdl @@ -0,0 +1,8 @@ +include "./cfg/animation.kdl" +include "./cfg/autostart.kdl" +include "./cfg/keybinds.kdl" +include "./cfg/input.kdl" +include "./cfg/display.kdl" +include "./cfg/layout.kdl" +include "./cfg/rules.kdl" +include "./cfg/misc.kdl" diff --git a/setup.sh b/setup.sh index 7a804cb..bfbab32 100755 --- a/setup.sh +++ b/setup.sh @@ -15,16 +15,16 @@ link() { fi } configlink() { - link ~/.config/$1 ~/dotfiles/$1 + link ~/.config/$1 ~/.dotfiles/$1 } checkdir ~/.config -link ~/.dotfiles ~/dotfiles -link ~/.profile ~/dotfiles/profile -link ~/.config/i3 ~/dotfiles/i3 +link ~/.profile ~/.dotfiles/profile +link ~/.config/i3 ~/.dotfiles/i3 configlink tmux configlink nvim configlink kitty configlink polybar configlink picom.conf +configlink niri