d05b9f8a0e
Replace the workspace-based minimize (declared 'minimized' workspace + +1 offset + window-restore.py) with a native Sway-style scratchpad built into niri. Ships as niri-patches/0001-scratchpad.patch + a niri-scratchpad PKGBUILD. Mod+M stashes; Mod+Shift+M shows/toggles/cycles. Mod+1..9 no longer offset. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
194 lines
5.2 KiB
KDL
194 lines
5.2 KiB
KDL
layout {
|
|
gaps 0
|
|
|
|
border {
|
|
off
|
|
}
|
|
|
|
focus-ring {
|
|
off
|
|
}
|
|
}
|
|
|
|
input {
|
|
keyboard {
|
|
xkb {
|
|
layout "us"
|
|
}
|
|
}
|
|
|
|
touchpad {
|
|
tap
|
|
natural-scroll
|
|
accel-speed 0.2
|
|
accel-profile "adaptive"
|
|
scroll-method "two-finger"
|
|
disabled-on-external-mouse
|
|
}
|
|
|
|
mouse {
|
|
accel-profile "flat"
|
|
}
|
|
}
|
|
|
|
environment {
|
|
XDG_CURRENT_DESKTOP "niri:GNOME"
|
|
}
|
|
|
|
spawn-at-startup "sh" "-c" "systemctl --user import-environment XDG_CURRENT_DESKTOP && dbus-update-activation-environment XDG_CURRENT_DESKTOP"
|
|
spawn-at-startup "waybar"
|
|
spawn-at-startup "mako"
|
|
spawn-at-startup "awww-daemon"
|
|
spawn-at-startup "nm-applet" "--indicator"
|
|
spawn-at-startup "/usr/lib/polkit-gnome/polkit-gnome-authentication-agent-1"
|
|
spawn-at-startup "hypridle"
|
|
spawn-at-startup "wl-paste" "--watch" "cliphist" "store"
|
|
spawn-at-startup "wlsunset" "-l" "49.2" "-L" "-123.1"
|
|
spawn-at-startup "xwayland-satellite"
|
|
spawn-at-startup "gamemode-watch"
|
|
|
|
binds {
|
|
Mod+Q repeat=false { close-window; }
|
|
Mod+F { fullscreen-window; }
|
|
Mod+Z { maximize-column; }
|
|
Mod+V { toggle-window-floating; }
|
|
|
|
Mod+Return { spawn "alacritty"; }
|
|
Mod+D { spawn "wofi" "--show" "drun"; }
|
|
Mod+E { spawn "thunar"; }
|
|
Mod+Shift+B { spawn "waybar-restart"; }
|
|
Mod+G { spawn "gamemode-session" "toggle"; }
|
|
|
|
Mod+H { focus-column-left; }
|
|
Mod+L { focus-column-right; }
|
|
Mod+J { focus-window-down; }
|
|
Mod+K { focus-window-up; }
|
|
|
|
Mod+Left { focus-column-left; }
|
|
Mod+Right { focus-column-right; }
|
|
Mod+Down { focus-window-down; }
|
|
Mod+Up { focus-window-up; }
|
|
|
|
Mod+Shift+H { move-column-left; }
|
|
Mod+Shift+L { move-column-right; }
|
|
Mod+Shift+J { move-window-down; }
|
|
Mod+Shift+K { move-window-up; }
|
|
|
|
Mod+Shift+Left { move-column-left; }
|
|
Mod+Shift+Right { move-column-right; }
|
|
Mod+Shift+Down { move-window-down; }
|
|
Mod+Shift+Up { move-window-up; }
|
|
|
|
Mod+1 { focus-workspace 1; }
|
|
Mod+2 { focus-workspace 2; }
|
|
Mod+3 { focus-workspace 3; }
|
|
Mod+4 { focus-workspace 4; }
|
|
Mod+5 { focus-workspace 5; }
|
|
Mod+6 { focus-workspace 6; }
|
|
Mod+7 { focus-workspace 7; }
|
|
Mod+8 { focus-workspace 8; }
|
|
Mod+9 { focus-workspace 9; }
|
|
|
|
Mod+Shift+1 { move-window-to-workspace 1; }
|
|
Mod+Shift+2 { move-window-to-workspace 2; }
|
|
Mod+Shift+3 { move-window-to-workspace 3; }
|
|
Mod+Shift+4 { move-window-to-workspace 4; }
|
|
Mod+Shift+5 { move-window-to-workspace 5; }
|
|
Mod+Shift+6 { move-window-to-workspace 6; }
|
|
Mod+Shift+7 { move-window-to-workspace 7; }
|
|
Mod+Shift+8 { move-window-to-workspace 8; }
|
|
Mod+Shift+9 { move-window-to-workspace 9; }
|
|
|
|
Mod+Print { spawn "screenshot"; }
|
|
|
|
Mod+M { move-window-to-scratchpad; }
|
|
Mod+Shift+M { scratchpad-show; }
|
|
|
|
Mod+Shift+E { spawn "hyprlock"; }
|
|
Mod+Shift+P { spawn "powermenu"; }
|
|
Mod+Shift+C { spawn "clipboard-picker"; }
|
|
Mod+Shift+X { quit; }
|
|
|
|
XF86AudioRaiseVolume allow-when-locked=true { spawn "volume" "up"; }
|
|
XF86AudioLowerVolume allow-when-locked=true { spawn "volume" "down"; }
|
|
XF86AudioMute allow-when-locked=true { spawn "volume" "mute"; }
|
|
|
|
XF86MonBrightnessUp allow-when-locked=true { spawn "brightnessctl" "set" "+10%"; }
|
|
XF86MonBrightnessDown allow-when-locked=true { spawn "brightnessctl" "set" "10%-"; }
|
|
}
|
|
|
|
// ── Window Rules ─────────────────────────────────────────────────────────────
|
|
|
|
// Fullscreen games: no border, open fullscreen.
|
|
// (Re-add `variable-refresh-rate true` here if a VRR-capable external
|
|
// monitor is ever attached — the internal eDP-1 panel has no VRR.)
|
|
window-rule {
|
|
match app-id="steam_app_"
|
|
open-fullscreen true
|
|
border {
|
|
off
|
|
}
|
|
focus-ring {
|
|
off
|
|
}
|
|
}
|
|
|
|
// Wine System Tray: hide the empty host window off-screen
|
|
window-rule {
|
|
match app-id="^explorer.exe$"
|
|
match title="^Wine System Tray$"
|
|
open-floating true
|
|
default-floating-position x=-9999 y=-9999
|
|
}
|
|
|
|
// Bolt Launcher
|
|
window-rule {
|
|
match app-id="^bolt-launcher$"
|
|
open-floating true
|
|
}
|
|
|
|
// RuneLite
|
|
window-rule {
|
|
match app-id="^(net-runelite-client-RuneLite|runelite|RuneLite)$"
|
|
open-floating true
|
|
border {
|
|
off
|
|
}
|
|
focus-ring {
|
|
off
|
|
}
|
|
}
|
|
|
|
// Thunar file-operation progress dialog
|
|
window-rule {
|
|
match app-id="^thunar$" title="^File Operation Progress$"
|
|
open-floating true
|
|
}
|
|
|
|
// Steam client + child windows: float and center (friends list, settings,
|
|
// game properties, dialogs). Games (steam_app_) are handled above, unaffected.
|
|
window-rule {
|
|
match app-id="^steam$"
|
|
open-floating true
|
|
}
|
|
|
|
// Steam main library window: float large (centered by niri)
|
|
window-rule {
|
|
match app-id="^steam$" title="^Steam$"
|
|
default-column-width { proportion 0.75; }
|
|
default-window-height { proportion 0.85; }
|
|
}
|
|
|
|
// Steam notification toasts: unobtrusive, bottom-right, no border/focus-ring
|
|
window-rule {
|
|
match app-id="^steam$" title="^notificationtoasts"
|
|
open-floating true
|
|
default-floating-position x=16 y=16 relative-to="bottom-right"
|
|
border {
|
|
off
|
|
}
|
|
focus-ring {
|
|
off
|
|
}
|
|
}
|