From d97f23c7f4a0c515e2c58e9c3caeb40436b6e15d Mon Sep 17 00:00:00 2001 From: Martin Fischer Date: Fri, 2 Oct 2026 18:26:19 +0200 Subject: tweak(workstation): use niri instead of sway --- user/niri/config.kdl | 208 ++++++++++++++++++++++----------------------------- 1 file changed, 89 insertions(+), 119 deletions(-) (limited to 'user/niri') diff --git a/user/niri/config.kdl b/user/niri/config.kdl index ccad1ac..d4d88d4 100644 --- a/user/niri/config.kdl +++ b/user/niri/config.kdl @@ -1,24 +1,14 @@ // This config is in the KDL format: https://kdl.dev // "/-" comments out the following node. -// Check the wiki for a full description of the configuration: -// https://niri-wm.github.io/niri/Configuration:-Introduction +// The configuration is described in /doc/niri/Configuration:-Introduction.md. +// The configuration is automatically reloaded. // Input device configuration. -// Find the full list of options on the wiki: -// https://niri-wm.github.io/niri/Configuration:-Input +// See /doc/niri/Configuration:-Input.md. input { keyboard { xkb { - // You can set rules, model, layout, variant and options. - // For more information, see xkeyboard-config(7). - - // For example: - // layout "us,ru" - // options "grp:win_space_toggle,compose:ralt,ctrl:nocaps" - - // If this section is empty, niri will fetch xkb settings - // from org.freedesktop.locale1. You can control these using - // localectl set-x11-keymap. + file "~/config/colematik/colematik.xkb" } // Enable numlock on startup, omitting this setting disables it. @@ -35,7 +25,7 @@ input { // dwtp // drag false // drag-lock - natural-scroll + // natural-scroll // accel-speed 0.2 // accel-profile "flat" // scroll-method "two-finger" @@ -69,11 +59,22 @@ input { // focus-follows-mouse max-scroll-amount="0%" } +cursor { + xcursor-theme "Capitaine Cursors (Gruvbox)" + xcursor-size 24 +} + // You can configure outputs by their name, which you can find // by running `niri msg outputs` while inside a niri instance. // The built-in laptop monitor is usually called "eDP-1". // Find more information on the wiki: -// https://niri-wm.github.io/niri/Configuration:-Outputs +// See /doc/niri/Configuration:-Outputs.md. + +// Active laptop display configuration. +output "eDP-1" { + scale 1 +} + // Remember to uncomment the node by removing "/-"! /-output "eDP-1" { // Uncomment this line to disable this output. @@ -108,7 +109,7 @@ input { // Settings that influence how windows are positioned and sized. // Find more information on the wiki: -// https://niri-wm.github.io/niri/Configuration:-Layout +// See /doc/niri/Configuration:-Layout.md. layout { // Set gaps around windows in logical pixels. gaps 16 @@ -267,15 +268,21 @@ layout { // which may be more convenient to use. // See the binds section below for more spawn examples. -// This line starts waybar, a commonly used bar for Wayland compositors. -spawn-at-startup "waybar" +// Start the bar. +spawn-at-startup "i3bar-river" + +// Show power/battery notifications. +spawn-at-startup "poweralertd" + +// Lock the screen before the system goes to sleep. +spawn-at-startup "swayidle" "-w" "before-sleep" "swaylock -f" // To run a shell command (with variables, pipes, etc.), use spawn-sh-at-startup: // spawn-sh-at-startup "qs -c ~/source/qs/MyAwesomeShell" hotkey-overlay { - // Uncomment this line to disable the "Important Hotkeys" pop-up at startup. - // skip-at-startup + // Disable the "Important Hotkeys" pop-up at startup. + skip-at-startup } // Uncomment this line to ask the clients to omit their client-side decorations if possible. @@ -283,7 +290,7 @@ hotkey-overlay { // Additionally, clients will be informed that they are tiled, removing some client-side rounded corners. // This option will also fix border/focus ring drawing behind some semitransparent windows. // After enabling or disabling this, you need to restart the apps for this to take effect. -// prefer-no-csd +prefer-no-csd // You can change the path where screenshots are saved. // A ~ at the front will be expanded to the home directory. @@ -295,7 +302,7 @@ screenshot-path "~/Pictures/Screenshots/Screenshot from %Y-%m-%d %H-%M-%S.png" // Animation settings. // The wiki explains how to configure individual animations: -// https://niri-wm.github.io/niri/Configuration:-Animations +// See /doc/niri/Configuration:-Animations.md. animations { // Uncomment to turn off all animations. // off @@ -306,17 +313,7 @@ animations { // Window rules let you adjust behavior for individual windows. // Find more information on the wiki: -// https://niri-wm.github.io/niri/Configuration:-Window-Rules - -// Work around WezTerm's initial configure bug -// by setting an empty default-column-width. -window-rule { - // This regular expression is intentionally made as specific as possible, - // since this is the default config, and we want no false positives. - // You can get away with just app-id="wezterm" if you want. - match app-id=r#"^org\.wezfurlong\.wezterm$"# - default-column-width {} -} +// See /doc/niri/Configuration:-Window-Rules.md. // Open the Firefox picture-in-picture player as floating by default. window-rule { @@ -362,9 +359,9 @@ binds { Mod+Shift+Slash { show-hotkey-overlay; } // Suggested binds for running programs: terminal, app launcher, screen locker. - Mod+T hotkey-overlay-title="Open a Terminal: alacritty" { spawn "alacritty"; } - Mod+D hotkey-overlay-title="Run an Application: fuzzel" { spawn "fuzzel"; } - Super+Alt+L hotkey-overlay-title="Lock the Screen: swaylock" { spawn "swaylock"; } + Mod+Return hotkey-overlay-title="Open a Terminal" { spawn "foot"; } + Mod+D hotkey-overlay-title="Run an Application" { spawn "wmenu-run"; } + Super+Alt+L hotkey-overlay-title="Lock the Screen" { spawn "swaylock"; } // Use spawn-sh to run a shell command. Do this if you need pipes, multiple commands, etc. // Note: the entire command goes as a single argument. It's passed verbatim to `sh -c`. @@ -382,6 +379,7 @@ binds { // Example media keys mapping using playerctl. // This will work with any MPRIS-enabled media player. + XF86HangupPhone allow-when-locked=true { spawn-sh "playerctl play-pause"; } XF86AudioPlay allow-when-locked=true { spawn-sh "playerctl play-pause"; } XF86AudioStop allow-when-locked=true { spawn-sh "playerctl stop"; } XF86AudioPrev allow-when-locked=true { spawn-sh "playerctl previous"; } @@ -404,49 +402,44 @@ binds { Mod+Down { focus-window-down; } Mod+Up { focus-window-up; } Mod+Right { focus-column-right; } - Mod+H { focus-column-left; } - Mod+J { focus-window-down; } - Mod+K { focus-window-up; } - Mod+L { focus-column-right; } - - Mod+Ctrl+Left { move-column-left; } - Mod+Ctrl+Down { move-window-down; } - Mod+Ctrl+Up { move-window-up; } - Mod+Ctrl+Right { move-column-right; } - Mod+Ctrl+H { move-column-left; } - Mod+Ctrl+J { move-window-down; } - Mod+Ctrl+K { move-window-up; } - Mod+Ctrl+L { move-column-right; } + Mod+K { focus-column-left; } + Mod+N { focus-window-down; } + Mod+E { focus-window-up; } + Mod+I { focus-column-right; } + + Mod+Shift+Left { move-column-left; } + Mod+Shift+Down { move-window-down; } + Mod+Shift+Up { move-window-up; } + Mod+Shift+Right { move-column-right; } + Mod+Shift+K { move-column-left; } + Mod+Shift+N { move-window-down; } + Mod+Shift+E { move-window-up; } + Mod+Shift+I { move-column-right; } // Alternative commands that move across workspaces when reaching // the first or last window in a column. - // Mod+J { focus-window-or-workspace-down; } - // Mod+K { focus-window-or-workspace-up; } - // Mod+Ctrl+J { move-window-down-or-to-workspace-down; } - // Mod+Ctrl+K { move-window-up-or-to-workspace-up; } - - 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+Down { focus-monitor-down; } - Mod+Shift+Up { focus-monitor-up; } - Mod+Shift+Right { focus-monitor-right; } - Mod+Shift+H { focus-monitor-left; } - Mod+Shift+J { focus-monitor-down; } - Mod+Shift+K { focus-monitor-up; } - Mod+Shift+L { focus-monitor-right; } + // Mod+N { focus-window-or-workspace-down; } + // Mod+E { focus-window-or-workspace-up; } + // Mod+Shift+N { move-window-down-or-to-workspace-down; } + // Mod+Shift+E { move-window-up-or-to-workspace-up; } + + Mod+Ctrl+Left { focus-monitor-left; } + Mod+Ctrl+Down { focus-monitor-down; } + Mod+Ctrl+Up { focus-monitor-up; } + Mod+Ctrl+Right { focus-monitor-right; } + Mod+Ctrl+K { focus-monitor-left; } + Mod+Ctrl+N { focus-monitor-down; } + Mod+Ctrl+E { focus-monitor-up; } + Mod+Ctrl+I { focus-monitor-right; } Mod+Shift+Ctrl+Left { move-column-to-monitor-left; } Mod+Shift+Ctrl+Down { move-column-to-monitor-down; } Mod+Shift+Ctrl+Up { move-column-to-monitor-up; } Mod+Shift+Ctrl+Right { move-column-to-monitor-right; } - Mod+Shift+Ctrl+H { move-column-to-monitor-left; } - Mod+Shift+Ctrl+J { move-column-to-monitor-down; } - Mod+Shift+Ctrl+K { move-column-to-monitor-up; } - Mod+Shift+Ctrl+L { move-column-to-monitor-right; } + Mod+Shift+Ctrl+K { move-column-to-monitor-left; } + Mod+Shift+Ctrl+N { move-column-to-monitor-down; } + Mod+Shift+Ctrl+E { move-column-to-monitor-up; } + Mod+Shift+Ctrl+I { move-column-to-monitor-right; } // Alternatively, there are commands to move just a single window: // Mod+Shift+Ctrl+Left { move-window-to-monitor-left; } @@ -456,48 +449,25 @@ binds { // Mod+Shift+Ctrl+Left { move-workspace-to-monitor-left; } // ... - Mod+Page_Down { focus-workspace-down; } - Mod+Page_Up { focus-workspace-up; } - Mod+U { focus-workspace-down; } - Mod+I { focus-workspace-up; } - Mod+Ctrl+Page_Down { move-column-to-workspace-down; } - Mod+Ctrl+Page_Up { move-column-to-workspace-up; } - Mod+Ctrl+U { move-column-to-workspace-down; } - Mod+Ctrl+I { move-column-to-workspace-up; } + Mod+Page_Down { focus-workspace-down; } + Mod+Page_Up { focus-workspace-up; } + Mod+L { focus-workspace-down; } + Mod+U { focus-workspace-up; } + Mod+Shift+Page_Down { move-column-to-workspace-down; } + Mod+Shift+Page_Up { move-column-to-workspace-up; } + Mod+Shift+L { move-column-to-workspace-down; } + Mod+Shift+U { move-column-to-workspace-up; } // Alternatively, there are commands to move just a single window: - // Mod+Ctrl+Page_Down { move-window-to-workspace-down; } + // Mod+Shift+Page_Down { move-window-to-workspace-down; } // ... - Mod+Shift+Page_Down { move-workspace-down; } - Mod+Shift+Page_Up { move-workspace-up; } - Mod+Shift+U { move-workspace-down; } - Mod+Shift+I { move-workspace-up; } + Mod+Ctrl+Shift+Page_Down { move-workspace-down; } + Mod+Ctrl+Shift+Page_Up { move-workspace-up; } + Mod+Ctrl+Shift+L { move-workspace-down; } + Mod+Ctrl+Shift+U { move-workspace-up; } - // You can bind mouse wheel scroll ticks using the following syntax. - // These binds will change direction based on the natural-scroll setting. - // - // To avoid scrolling through workspaces really fast, you can use - // the cooldown-ms property. The bind will be rate-limited to this value. - // You can set a cooldown on any bind, but it's most useful for the wheel. - 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; } - - // Usually scrolling up and down with Shift in applications results in - // horizontal scrolling; these binds replicate that. - 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; } - - // Similarly, you can bind touchpad scroll "ticks". + // You can bind touchpad scroll "ticks". // Touchpad scrolling is continuous, so for these binds it is split into // discrete intervals. // These binds are also affected by touchpad's natural-scroll, so these @@ -523,15 +493,15 @@ binds { Mod+7 { focus-workspace 7; } Mod+8 { focus-workspace 8; } Mod+9 { focus-workspace 9; } - Mod+Ctrl+1 { move-column-to-workspace 1; } - Mod+Ctrl+2 { move-column-to-workspace 2; } - Mod+Ctrl+3 { move-column-to-workspace 3; } - Mod+Ctrl+4 { move-column-to-workspace 4; } - Mod+Ctrl+5 { move-column-to-workspace 5; } - Mod+Ctrl+6 { move-column-to-workspace 6; } - Mod+Ctrl+7 { move-column-to-workspace 7; } - Mod+Ctrl+8 { move-column-to-workspace 8; } - Mod+Ctrl+9 { move-column-to-workspace 9; } + Mod+Shift+1 { move-column-to-workspace 1; } + Mod+Shift+2 { move-column-to-workspace 2; } + Mod+Shift+3 { move-column-to-workspace 3; } + Mod+Shift+4 { move-column-to-workspace 4; } + Mod+Shift+5 { move-column-to-workspace 5; } + Mod+Shift+6 { move-column-to-workspace 6; } + Mod+Shift+7 { move-column-to-workspace 7; } + Mod+Shift+8 { move-column-to-workspace 8; } + Mod+Shift+9 { move-column-to-workspace 9; } // Alternatively, there are commands to move just a single window: // Mod+Ctrl+1 { move-window-to-workspace 1; } @@ -623,7 +593,7 @@ binds { Mod+Escape allow-inhibiting=false { toggle-keyboard-shortcuts-inhibit; } // The quit action will show a confirmation dialog to avoid accidental exits. - Mod+Shift+E { quit; } + Mod+Shift+Q { quit; } Ctrl+Alt+Delete { quit; } // Powers off the monitors. To turn them back on, do any input like -- cgit v1.3.1