From 209d9e8e1ba545046ff0c1c8f1c0c184c1153605 Mon Sep 17 00:00:00 2001 From: Adithya Nair Date: Tue, 24 Sep 2024 20:45:46 +0530 Subject: [PATCH] skipper: setup niri keybindings --- .gitignore | 2 +- home/wm/niri/config.kdl | 184 ++++++++------------------------------- home/wm/niri/default.nix | 12 +++ 3 files changed, 47 insertions(+), 151 deletions(-) diff --git a/.gitignore b/.gitignore index a3856de..cd5d252 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,3 @@ .tmp -result +result* *.bak diff --git a/home/wm/niri/config.kdl b/home/wm/niri/config.kdl index 83cf97d..0427308 100644 --- a/home/wm/niri/config.kdl +++ b/home/wm/niri/config.kdl @@ -55,22 +55,15 @@ layout { proportion 1.0 } - default-column-width {} + default-column-width { proportion 0.7; } + focus-ring { - width 1 + width 2 active-color "#bd93f9" inactive-color "#44475a" // active-gradient from="#80c8ff" to="#bbddff" angle=45 // inactive-gradient from="#505050" to="#808080" angle=45 relative-to="workspace-view" } - - border { - width 1 - active-color "#bd93f9" - inactive-color "#44475a" - // active-gradient from="#ffbb66" to="#ffc880" angle=45 relative-to="workspace-view" - // inactive-gradient from="#505050" to="#808080" angle=45 relative-to="workspace-view" - } } prefer-no-csd @@ -82,6 +75,7 @@ binds { Mod+Shift+Q repeat=false { close-window; } Mod+Escape repeat=false { spawn "@loginctl_cmd@" "lock-session"; } + Mod+Shift+Escape repeat=false { spawn "@power_menu_cmd@"; } Mod+Shift+W repeat=false { spawn "@wpaperctl_cmd@" "next"; } @@ -89,6 +83,9 @@ binds { Mod+Shift+Return repeat=false { spawn "@kitty_cmd@"; } Mod+D repeat=false { spawn "@rofi_cmd@" "-show" "drun"; } Mod+E repeat=false { spawn "@kitty_cmd@" "--class=yazi" "@yazi_cmd@"; } + Mod+F11 repeat=false { spawn "@tmux_sessions_cmd@"; } + Mod+Shift+Y repeat=false { spawn "@youtube_cmd@"; } + Mod+Shift+B repeat=false { spawn "@bluetooth_cmd@"; } Mod+I repeat=false { spawn "@firefox_cmd@"; } Mod+Shift+I repeat=false { spawn "@librewolf_cmd@"; } @@ -97,121 +94,34 @@ binds { XF86AudioMute allow-when-locked=true { spawn "@wpctl_cmd@" "set-mute" "@DEFAULT_AUDIO_SINK@" "toggle"; } XF86AudioMicMute allow-when-locked=true { spawn "@wpctl_cmd@" "set-mute" "@DEFAULT_AUDIO_SOURCE@" "toggle"; } + XF86MonBrightnessUp allow-when-locked=true { spawn "@brightnessctl_cmd@" "--quiet" "--device=intel_backlight" "set" "+5%"; } + XF86MonBrightnessDown allow-when-locked=true { spawn "@brightnessctl_cmd@" "--quiet" "--device=intel_backlight" "set" "5%-"; } - Mod+Left { focus-column-left; } - 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+Shift+H { move-column-left; } + Mod+Shift+J { move-window-down; } + Mod+Shift+K { move-window-up; } + Mod+Shift+L { 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+Ctrl+H { focus-monitor-left; } + Mod+Ctrl+J { focus-monitor-down; } + Mod+Ctrl+K { focus-monitor-up; } + Mod+Ctrl+L { focus-monitor-right; } - 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+Ctrl+H { move-window-to-monitor-left; } + Mod+Shift+Ctrl+J { move-window-to-monitor-down; } + Mod+Shift+Ctrl+K { move-window-to-monitor-up; } + Mod+Shift+Ctrl+L { move-window-to-monitor-right; } - 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+Tab { focus-workspace-down; } + Mod+Shift+Tab { focus-workspace-up; } + Mod+Alt+Shift+J { move-window-to-workspace-down; } + Mod+Alt+Shift+K { move-window-to-workspace-up; } - 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; } - - // Alternatively, there are commands to move just a single window: - // Mod+Shift+Ctrl+Left { move-window-to-monitor-left; } - // ... - - // And you can also move a whole workspace to another monitor: - // 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; } - - // Alternatively, there are commands to move just a single window: - // Mod+Ctrl+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; } - - // 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". - // 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 - // example binds are "inverted", since we have natural-scroll enabled for - // touchpads by default. - // Mod+TouchpadScrollDown { spawn "@wpctl_cmd@" "set-volume" "@DEFAULT_AUDIO_SINK@" "0.02+"; } - // Mod+TouchpadScrollUp { spawn "@wpctl_cmd@" "set-volume" "@DEFAULT_AUDIO_SINK@" "0.02-"; } - - // You can refer to workspaces by index. However, keep in mind that - // niri is a dynamic workspace system, so these commands are kind of - // "best effort". Trying to refer to a workspace index bigger than - // the current workspace count will instead refer to the bottommost - // (empty) workspace. - // - // For example, with 2 workspaces + 1 empty, indices 3, 4, 5 and so on - // will all refer to the 3rd workspace. Mod+1 { focus-workspace 1; } Mod+2 { focus-workspace 2; } Mod+3 { focus-workspace 3; } @@ -221,21 +131,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; } - - // Alternatively, there are commands to move just a single window: - // Mod+Ctrl+1 { move-window-to-workspace 1; } - - // Switches focus between the current and the previous workspace. - // Mod+Tab { focus-workspace-previous; } + 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; } Mod+Comma { consume-window-into-column; } Mod+Period { expel-window-from-column; } @@ -251,37 +155,17 @@ binds { Mod+Shift+F { fullscreen-window; } Mod+C { center-column; } - // Finer width adjustments. - // This command can also: - // * set width in pixels: "1000" - // * adjust width in pixels: "-5" or "+5" - // * set width as a percentage of screen width: "25%" - // * adjust width as a percentage of screen width: "-10%" or "+10%" - // Pixel sizes use logical, or scaled, pixels. I.e. on an output with scale 2.0, - // set-column-width "100" will make the column occupy 200 physical screen pixels. Mod+Minus { set-column-width "-10%"; } Mod+Equal { set-column-width "+10%"; } - // Finer height adjustments when in column with other windows. Mod+Shift+Minus { set-window-height "-10%"; } Mod+Shift+Equal { set-window-height "+10%"; } - // Actions to switch layouts. - // Note: if you uncomment these, make sure you do NOT have - // a matching layout switch hotkey configured in xkb options above. - // Having both at once on the same hotkey will break the switching, - // since it will switch twice upon pressing the hotkey (once by xkb, once by niri). - // Mod+Space { switch-layout "next"; } - // Mod+Shift+Space { switch-layout "prev"; } - Print { screenshot; } Ctrl+Print { screenshot-screen; } Alt+Print { screenshot-window; } - // The quit action will show a confirmation dialog to avoid accidental exits. Mod+Shift+E { quit; } - // Powers off the monitors. To turn them back on, do any input like - // moving the mouse or pressing any other key. Mod+Shift+P { power-off-monitors; } } diff --git a/home/wm/niri/default.nix b/home/wm/niri/default.nix index 4718436..536632f 100644 --- a/home/wm/niri/default.nix +++ b/home/wm/niri/default.nix @@ -3,6 +3,12 @@ xdg.portal = { extraPortals = [ pkgs.xdg-desktop-portal-gnome ]; configPackages = [ pkgs.niri ]; + config = { + niri = { + default = [ "gnome" "gtk" ]; + "org.freedesktop.impl.portal.Secret" = [ "gnome-keyring" ]; + }; + }; }; programs.zsh.profileExtra = '' @@ -24,6 +30,12 @@ firefox_cmd = "${lib.getExe config.programs.firefox.finalPackage}"; librewolf_cmd = "${lib.getExe pkgs.librewolf}"; wpctl_cmd = "${pkgs.wireplumber}/bin/wpctl"; + brightnessctl_cmd = "${lib.getExe pkgs.brightnessctl}"; + + power_menu_cmd = "${pkgs.misc-scripts}/bin/power-menu"; + tmux_sessions_cmd = "${pkgs.misc-scripts}/bin/tmux-sessions"; + youtube_cmd = "${pkgs.youtube}/bin/youtube"; + bluetooth_cmd = "${pkgs.rofi-bluetooth}/bin/rofi-bluetooth"; screenshot_path = "${config.xdg.userDirs.pictures}/Screenshots"; };