feat(niri): split config into modules and port hyprlua keybinds
Split monolithic config.kdl into modules/ (input, outputs, layout, animations, environment, autostart, window-rules, binds), mirroring the hyprlua modular structure. Keybind additions and fixes: - Port all missing hyprlua binds (Mod+0, mouse drag/resize, Mod+Ctrl+M, Mod+Shift+Return→overview, Mod+Shift+Alt group move aliases) - Enforce modifier semantics: Shift=move window, Ctrl=workspace, Alt=resize across all directional keys - Add Mod+Ctrl+J/K/Down/Up → focus-workspace-down/up - Add Mod+Ctrl+Shift+J/K/Down/Up → move-column-to-workspace-down/up - Fix Mod+Ctrl+K/Up (was toggle-overview, now focus-workspace-up) - Fix Mod+Ctrl+Shift+Up (was move-to-recent, now move-to-workspace-up) - Relocate toggle-overview to Mod+Ctrl+Space - Remove Mod+Shift+Alt+* aliases (violated Alt=resize rule) Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>main
parent
814080cc04
commit
0fcb9fb193
|
|
@ -1,421 +1,15 @@
|
|||
// ~/.config/niri/config.kdl
|
||||
// Niri scrollable-tiling Wayland compositor — CyberQueer config
|
||||
// Translated from hyprlua setup: https://github.com/the_miro/Dotfiles
|
||||
// https://github.com/YaLTeR/niri/wiki/Configuration:-Overview
|
||||
|
||||
// ── Input ─────────────────────────────────────────────────────────────────────
|
||||
input {
|
||||
keyboard {
|
||||
xkb {
|
||||
layout "de"
|
||||
options "caps:swapescape"
|
||||
}
|
||||
repeat-delay 300
|
||||
repeat-rate 50
|
||||
track-layout "window"
|
||||
}
|
||||
include "modules/input.kdl"
|
||||
include "modules/outputs.kdl"
|
||||
include "modules/layout.kdl"
|
||||
include "modules/animations.kdl"
|
||||
include "modules/environment.kdl"
|
||||
include "modules/autostart.kdl"
|
||||
include "modules/window-rules.kdl"
|
||||
include "modules/binds.kdl"
|
||||
|
||||
touchpad {
|
||||
tap
|
||||
natural-scroll
|
||||
accel-speed 0.0
|
||||
accel-profile "flat"
|
||||
}
|
||||
|
||||
mouse {
|
||||
left-handed
|
||||
accel-speed 0.0
|
||||
accel-profile "flat"
|
||||
}
|
||||
|
||||
warp-mouse-to-focus
|
||||
focus-follows-mouse max-scroll-amount="0%"
|
||||
}
|
||||
|
||||
// ── Outputs ───────────────────────────────────────────────────────────────────
|
||||
// Niri auto-detects monitors. Uncomment and adjust for fixed setups:
|
||||
// output "eDP-1" {
|
||||
// scale 2.0
|
||||
// position x=0 y=0
|
||||
// }
|
||||
// output "HDMI-A-1" {
|
||||
// scale 1.0
|
||||
// position x=1920 y=0
|
||||
// }
|
||||
|
||||
// ── Layout ────────────────────────────────────────────────────────────────────
|
||||
layout {
|
||||
gaps 6
|
||||
|
||||
center-focused-column "never"
|
||||
|
||||
// Preset widths cycled by Mod+Backspace
|
||||
preset-column-widths {
|
||||
proportion 0.333
|
||||
proportion 0.5
|
||||
proportion 0.667
|
||||
proportion 1.0
|
||||
}
|
||||
|
||||
default-column-width { proportion 0.5; }
|
||||
|
||||
// CyberQueer focus ring
|
||||
focus-ring {
|
||||
width 4
|
||||
active-color "#E40046"
|
||||
inactive-color "#5018DD"
|
||||
active-gradient from="#E40046" to="#f50505" angle=35 relative-to="window"
|
||||
inactive-gradient from="#5018DD" to="#5018DD" angle=35 relative-to="window"
|
||||
}
|
||||
|
||||
border {
|
||||
off
|
||||
}
|
||||
|
||||
shadow {
|
||||
on
|
||||
softness 30
|
||||
spread 5
|
||||
offset x=0 y=5
|
||||
color "#00000080"
|
||||
}
|
||||
|
||||
// Reserve space for the eww bar
|
||||
struts {
|
||||
top 30
|
||||
}
|
||||
}
|
||||
|
||||
// ── Animations ────────────────────────────────────────────────────────────────
|
||||
animations {
|
||||
window-open {
|
||||
spring damping-ratio=0.9 stiffness=800 epsilon=0.0001
|
||||
}
|
||||
window-close {
|
||||
spring damping-ratio=0.9 stiffness=800 epsilon=0.0001
|
||||
}
|
||||
window-movement {
|
||||
spring damping-ratio=0.9 stiffness=800 epsilon=0.0001
|
||||
}
|
||||
horizontal-view-movement {
|
||||
spring damping-ratio=0.9 stiffness=800 epsilon=0.0001
|
||||
}
|
||||
workspace-switch {
|
||||
spring damping-ratio=0.9 stiffness=800 epsilon=0.0001
|
||||
}
|
||||
config-notification-open-close {
|
||||
spring damping-ratio=0.9 stiffness=800 epsilon=0.0001
|
||||
}
|
||||
screenshot-ui-open {
|
||||
duration-ms 200
|
||||
curve "ease-out-cubic"
|
||||
}
|
||||
}
|
||||
|
||||
// ── Environment Variables ─────────────────────────────────────────────────────
|
||||
environment {
|
||||
GTK_THEME "cyberqueer"
|
||||
XCURSOR_SIZE "40"
|
||||
XCURSOR_THEME "Nordzy-cursors-lefthand"
|
||||
QT_QPA_PLATFORMTHEME "gtk3"
|
||||
QT_WAYLAND_DISABLE_WINDOWDECORATION "1"
|
||||
MOZ_ENABLE_WAYLAND "1"
|
||||
ELECTRON_OZONE_PLATFORM_HINT "auto"
|
||||
NIXOS_OZONE_WL "1"
|
||||
GDK_SCALE "2"
|
||||
}
|
||||
|
||||
// ── Cursor ────────────────────────────────────────────────────────────────────
|
||||
cursor {
|
||||
xcursor-theme "Nordzy-cursors-lefthand"
|
||||
xcursor-size 40
|
||||
hide-after-inactive-ms 5000
|
||||
hide-when-typing
|
||||
}
|
||||
|
||||
// ── Prefer no client-side decorations ─────────────────────────────────────────
|
||||
prefer-no-csd
|
||||
|
||||
// ── Screenshot path ───────────────────────────────────────────────────────────
|
||||
screenshot-path "~/Pictures/Screenshots/Screenshot from %Y-%m-%d %H-%M-%S.png"
|
||||
|
||||
// ── Autostart ─────────────────────────────────────────────────────────────────
|
||||
spawn-at-startup "bash" "-c" "~/.config/scripts/monitorhandler.sh"
|
||||
spawn-at-startup "bash" "-c" "vicinae server"
|
||||
spawn-at-startup "bash" "-c" "~/.config/scripts/bluetooth-applet.sh"
|
||||
spawn-at-startup "bash" "-c" "~/.config/scripts/ulwatchdog.sh"
|
||||
spawn-at-startup "udiskie" "-t" "-m" "nested" "-n"
|
||||
spawn-at-startup "xfce-polkit"
|
||||
spawn-at-startup "bash" "-c" "gammastep -O 4500"
|
||||
spawn-at-startup "nm-applet"
|
||||
spawn-at-startup "dunst"
|
||||
spawn-at-startup "bash" "-c" "swayidle -w timeout 300 'swaylock -f' timeout 600 'systemctl suspend' before-sleep 'swaylock -f'"
|
||||
spawn-at-startup "blueman-applet"
|
||||
|
||||
// ── Window Rules ──────────────────────────────────────────────────────────────
|
||||
|
||||
// Launcher / utility floating windows
|
||||
window-rule {
|
||||
match app-id=r"^ulauncher$"
|
||||
open-floating true
|
||||
}
|
||||
|
||||
window-rule {
|
||||
match app-id=r"^vicinae$"
|
||||
open-floating true
|
||||
}
|
||||
|
||||
window-rule {
|
||||
match app-id=r"^org\.gnome\.Calculator$"
|
||||
open-floating true
|
||||
default-column-width { fixed 400; }
|
||||
}
|
||||
|
||||
window-rule {
|
||||
match app-id=r"^qalculate-gtk$"
|
||||
open-floating true
|
||||
default-column-width { fixed 600; }
|
||||
}
|
||||
|
||||
// Mixer — top-right float (approximating tag+mixer behavior)
|
||||
window-rule {
|
||||
match app-id=r"^pavucontrol$"
|
||||
open-floating true
|
||||
default-column-width { fixed 800; }
|
||||
}
|
||||
|
||||
window-rule {
|
||||
match app-id=r"^nm-connection-editor$"
|
||||
open-floating true
|
||||
default-column-width { fixed 800; }
|
||||
}
|
||||
|
||||
window-rule {
|
||||
match app-id=r"^blueman-manager$"
|
||||
open-floating true
|
||||
default-column-width { fixed 700; }
|
||||
}
|
||||
|
||||
// File manager dialogs
|
||||
window-rule {
|
||||
match app-id=r"^thunar$" title=r"^(Copy|Move|Rename|Delete|Progress)"
|
||||
open-floating true
|
||||
}
|
||||
|
||||
window-rule {
|
||||
match app-id=r"^xfce4-terminal$"
|
||||
open-floating true
|
||||
default-column-width { fixed 900; }
|
||||
}
|
||||
|
||||
// Global window dimming — all windows at 85% opacity by default
|
||||
window-rule {
|
||||
opacity 0.85
|
||||
}
|
||||
|
||||
// Firefox — no transparency
|
||||
window-rule {
|
||||
match app-id=r"^firefox$"
|
||||
opacity 1.0
|
||||
}
|
||||
|
||||
window-rule {
|
||||
match app-id=r"^zen$"
|
||||
opacity 1.0
|
||||
}
|
||||
|
||||
// Screen sharing / video — exclude from dimming
|
||||
window-rule {
|
||||
match app-id=r"^vesktop$"
|
||||
opacity 1.0
|
||||
}
|
||||
|
||||
// ── Keybindings ───────────────────────────────────────────────────────────────
|
||||
binds {
|
||||
// ── Applications ──────────────────────────────────────────────────────────
|
||||
Mod+T { spawn "kitty"; }
|
||||
Mod+Shift+T { spawn "bash" "-c" "cool-retro-term -p ~/Dotfiles/desktopenvs/niri/CRT"; }
|
||||
Mod+M { spawn "bash" "-c" "kitty -e nvim"; }
|
||||
Mod+E { spawn "thunar"; }
|
||||
Mod+Alt+E { spawn "pcmanfm-qt"; }
|
||||
Mod+X { spawn "bash" "-c" "wofi --show=run"; }
|
||||
Mod+N { spawn "nextcloud"; }
|
||||
Mod+I { spawn "bash" "-c" "iwmenu --launcher walker"; }
|
||||
Mod+Alt+I { spawn "bash" "-c" "bzmenu --launcher walker"; }
|
||||
Mod+Shift+I { spawn "nm-connection-editor"; }
|
||||
Mod+R { spawn "bash" "-c" "vicinae toggle"; }
|
||||
Mod+Return { spawn "bash" "-c" "vicinae toggle"; }
|
||||
Mod+Shift+R { spawn "bash" "-c" "wofi --show drun"; }
|
||||
Ctrl+Shift+R { spawn "bash" "-c" "vicinae toggle"; }
|
||||
|
||||
Mod+F { spawn "bash" "-c" "~/.config/scripts/wofi-file-search.sh"; }
|
||||
Mod+Shift+F { spawn "bash" "-c" "~/.config/scripts/foldersearch.sh"; }
|
||||
Mod+Alt+F { spawn "wofi-calc"; }
|
||||
|
||||
Mod+S { spawn "pavucontrol"; }
|
||||
Mod+U { spawn "bash" "-c" "kitty -e btop"; }
|
||||
Mod+W { spawn "bash" "-c" "kitty -e ~/.config/scripts/wallpaper-picker ~/Pictures"; }
|
||||
Mod+Ctrl+R { spawn "bash" "-c" "kitty -e ~/.config/scripts/amssh"; }
|
||||
Mod+F1 { spawn "bash" "-c" "kitty -e ~/.config/scripts/helpmenu.sh"; }
|
||||
Mod+Ctrl+T { spawn "bash" "-c" "kitty -e ~/.config/scripts/timer-pick"; }
|
||||
// Edit niri config directly:
|
||||
Mod+Shift+F1 { spawn "bash" "-c" "kitty -e nvim ~/.config/niri/config.kdl"; }
|
||||
|
||||
Mod+Ctrl+P { spawn "bash" "-c" "~/.config/scripts/screenrec.sh"; }
|
||||
|
||||
// App drawer
|
||||
Mod+D { spawn "bash" "-c" "~/.config/scripts/drawer.sh"; }
|
||||
Mod+Shift+A { spawn "bash" "-c" "~/.config/scripts/drawer.sh"; }
|
||||
|
||||
// ── Screenshots ───────────────────────────────────────────────────────────
|
||||
Print { screenshot; }
|
||||
Mod+P { screenshot; }
|
||||
Mod+Shift+P { screenshot-screen; }
|
||||
// Mod+Ctrl+P is screenrec (defined above)
|
||||
|
||||
// ── Window Management ─────────────────────────────────────────────────────
|
||||
Mod+Q { close-window; }
|
||||
Mod+Shift+Q { close-window; }
|
||||
|
||||
Mod+V { toggle-window-floating; }
|
||||
Mod+Shift+V { center-column; }
|
||||
Mod+C { center-column; }
|
||||
|
||||
// ── Niri-native layout actions ─────────────────────────────────────────────
|
||||
Mod+Backspace { switch-preset-column-width; }
|
||||
Mod+Shift+Backspace { maximize-column; }
|
||||
Mod+Ctrl+Backspace { fullscreen-window; }
|
||||
|
||||
// Consume/expel from column (Niri's grouping analog)
|
||||
Mod+A { consume-window-into-column; }
|
||||
Mod+Y { expel-window-from-column; }
|
||||
Mod+Alt+C { consume-or-expel-window-left; }
|
||||
Mod+Alt+V { consume-or-expel-window-right; }
|
||||
|
||||
// ── Focus ─────────────────────────────────────────────────────────────────
|
||||
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+Tab { focus-window-down-or-column-right; }
|
||||
Mod+Shift+Tab { focus-window-up-or-column-left; }
|
||||
|
||||
// ── Move Window ───────────────────────────────────────────────────────────
|
||||
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; }
|
||||
|
||||
// ── Resize ────────────────────────────────────────────────────────────────
|
||||
Mod+Alt+L { set-column-width "+10%"; }
|
||||
Mod+Alt+H { set-column-width "-10%"; }
|
||||
Mod+Alt+K { set-window-height "-10%"; }
|
||||
Mod+Alt+J { set-window-height "+10%"; }
|
||||
Mod+Alt+Right { set-column-width "+10%"; }
|
||||
Mod+Alt+Left { set-column-width "-10%"; }
|
||||
Mod+Alt+Up { set-window-height "-10%"; }
|
||||
Mod+Alt+Down { set-window-height "+10%"; }
|
||||
|
||||
// ── Workspaces ────────────────────────────────────────────────────────────
|
||||
// Note: Niri workspaces are vertical (stacked top-to-bottom per output)
|
||||
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-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; }
|
||||
|
||||
// Relative workspace navigation (Ctrl+L/R → down/up in vertical stack)
|
||||
Mod+Ctrl+Right { focus-workspace-down; }
|
||||
Mod+Ctrl+Left { focus-workspace-up; }
|
||||
Mod+Ctrl+L { focus-workspace-down; }
|
||||
Mod+Ctrl+H { focus-workspace-up; }
|
||||
|
||||
Mod+Ctrl+Shift+Right { move-column-to-workspace-down; }
|
||||
Mod+Ctrl+Shift+Left { move-column-to-workspace-up; }
|
||||
Mod+Ctrl+Shift+L { move-column-to-workspace-down; }
|
||||
Mod+Ctrl+Shift+H { move-column-to-workspace-up; }
|
||||
|
||||
// Scroll workspaces
|
||||
Mod+WheelScrollDown cooldown-ms=150 { focus-workspace-down; }
|
||||
Mod+WheelScrollUp cooldown-ms=150 { focus-workspace-up; }
|
||||
Mod+Shift+WheelScrollDown { move-column-to-workspace-down; }
|
||||
Mod+Shift+WheelScrollUp { move-column-to-workspace-up; }
|
||||
|
||||
// Horizontal scroll → horizontal column navigation
|
||||
Mod+WheelScrollRight { focus-column-right; }
|
||||
Mod+WheelScrollLeft { focus-column-left; }
|
||||
|
||||
// Volume keys as workspace nav (when Mod held)
|
||||
Mod+XF86AudioRaiseVolume { focus-workspace-down; }
|
||||
Mod+XF86AudioLowerVolume { focus-workspace-up; }
|
||||
Mod+Shift+XF86AudioRaiseVolume { move-column-to-workspace-down; }
|
||||
Mod+Shift+XF86AudioLowerVolume { move-column-to-workspace-up; }
|
||||
|
||||
// Scratchpad-equivalent: focus the most recently visited workspace
|
||||
Mod+Space { focus-workspace-with-recent-window; }
|
||||
Mod+Shift+Space { move-column-to-workspace-with-recent-window; }
|
||||
|
||||
// ── Bar / UI ──────────────────────────────────────────────────────────────
|
||||
Mod+Z { spawn "bash" "-c" "~/.config/scripts/togglebar.sh"; }
|
||||
Mod+Ctrl+B { spawn "bash" "-c" "eww reload"; }
|
||||
|
||||
// ── Audio ─────────────────────────────────────────────────────────────────
|
||||
XF86AudioRaiseVolume allow-when-locked=true { spawn "wpctl" "set-volume" "-l" "1.4" "@DEFAULT_AUDIO_SINK@" "5%+"; }
|
||||
XF86AudioLowerVolume allow-when-locked=true { spawn "wpctl" "set-volume" "-l" "1.4" "@DEFAULT_AUDIO_SINK@" "5%-"; }
|
||||
XF86AudioMute allow-when-locked=true { spawn "wpctl" "set-mute" "@DEFAULT_AUDIO_SINK@" "toggle"; }
|
||||
XF86AudioMicMute allow-when-locked=true { spawn "wpctl" "set-mute" "@DEFAULT_AUDIO_SOURCE@" "toggle"; }
|
||||
XF86AudioPlay allow-when-locked=true { spawn "playerctl" "play-pause" "-p" "spotify,vlc"; }
|
||||
|
||||
// ── Brightness ────────────────────────────────────────────────────────────
|
||||
XF86MonBrightnessUp allow-when-locked=true { spawn "bri" "--up"; }
|
||||
XF86MonBrightnessDown allow-when-locked=true { spawn "bri" "--down"; }
|
||||
|
||||
// ── Color temperature (gammastep presets) ─────────────────────────────────
|
||||
Mod+Ctrl+X { spawn "bash" "-c" "killall gammastep; gammastep -O 6500"; } // neutral / reset
|
||||
Mod+Ctrl+W { spawn "bash" "-c" "killall gammastep; gammastep -O 5000"; } // warm
|
||||
Mod+Ctrl+A { spawn "bash" "-c" "killall gammastep; gammastep -O 4000"; } // warmer
|
||||
Mod+Ctrl+Q { spawn "bash" "-c" "killall gammastep; gammastep -O 3000"; } // very warm
|
||||
Mod+Ctrl+S { spawn "bash" "-c" "killall gammastep; gammastep -O 2700"; } // night mode
|
||||
|
||||
// ── Misc ──────────────────────────────────────────────────────────────────
|
||||
Mod+Ctrl+I { spawn "chamel" "toggle"; }
|
||||
Mod+Ctrl+U { spawn "chamel" "clear"; }
|
||||
Mod+Ctrl+Z { spawn "chamel" "clear-and-deactivate"; }
|
||||
Mod+Ctrl+C { spawn "dunstctl" "close-all"; }
|
||||
Mod+Ctrl+G { spawn "bash" "-c" "~/.config/scripts/onscreenkb.sh"; }
|
||||
Mod+Shift+C { spawn "bash" "-c" "~/.config/scripts/caffeine.sh"; }
|
||||
Mod+Shift+X { spawn "bash" "-c" "~/.config/scripts/niri-toggle-touchpad.sh"; }
|
||||
|
||||
Mod+Ctrl+E { spawn "bash" "-c" "~/.config/scripts/screenrotationwcw.sh"; }
|
||||
Mod+Ctrl+D { spawn "bash" "-c" "~/.config/scripts/screenrotationacw.sh"; }
|
||||
|
||||
// ── Lock / Exit ───────────────────────────────────────────────────────────
|
||||
Mod+O { spawn "swaylock" "-f"; }
|
||||
Mod+Shift+O { quit; }
|
||||
Mod+Ctrl+O { spawn "systemctl" "poweroff"; }
|
||||
Mod+Alt+O { spawn "bash" "-c" "~/.config/scripts/pwr-dmenu.sh"; }
|
||||
Mod+Alt+Ctrl+Shift+End { quit; }
|
||||
}
|
||||
|
|
|
|||
|
|
@ -0,0 +1,25 @@
|
|||
// ── Animations ────────────────────────────────────────────────────────────────
|
||||
animations {
|
||||
window-open {
|
||||
spring damping-ratio=0.9 stiffness=800 epsilon=0.0001
|
||||
}
|
||||
window-close {
|
||||
spring damping-ratio=0.9 stiffness=800 epsilon=0.0001
|
||||
}
|
||||
window-movement {
|
||||
spring damping-ratio=0.9 stiffness=800 epsilon=0.0001
|
||||
}
|
||||
horizontal-view-movement {
|
||||
spring damping-ratio=0.9 stiffness=800 epsilon=0.0001
|
||||
}
|
||||
workspace-switch {
|
||||
spring damping-ratio=0.9 stiffness=800 epsilon=0.0001
|
||||
}
|
||||
config-notification-open-close {
|
||||
spring damping-ratio=0.9 stiffness=800 epsilon=0.0001
|
||||
}
|
||||
screenshot-ui-open {
|
||||
duration-ms 200
|
||||
curve "ease-out-cubic"
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,12 @@
|
|||
// ── Autostart ─────────────────────────────────────────────────────────────────
|
||||
spawn-at-startup "bash" "-c" "~/.config/scripts/monitorhandler.sh"
|
||||
spawn-at-startup "bash" "-c" "vicinae server"
|
||||
spawn-at-startup "bash" "-c" "~/.config/scripts/bluetooth-applet.sh"
|
||||
spawn-at-startup "bash" "-c" "~/.config/scripts/ulwatchdog.sh"
|
||||
spawn-at-startup "udiskie" "-t" "-m" "nested" "-n"
|
||||
spawn-at-startup "xfce-polkit"
|
||||
spawn-at-startup "bash" "-c" "gammastep -O 4500"
|
||||
spawn-at-startup "nm-applet"
|
||||
spawn-at-startup "dunst"
|
||||
spawn-at-startup "bash" "-c" "swayidle -w timeout 300 'swaylock -f' timeout 600 'systemctl suspend' before-sleep 'swaylock -f'"
|
||||
spawn-at-startup "blueman-applet"
|
||||
|
|
@ -0,0 +1,218 @@
|
|||
// ── Keybindings ───────────────────────────────────────────────────────────────
|
||||
//
|
||||
// Modifier semantics (directional keys):
|
||||
// Mod + dir → focus (window or column)
|
||||
// Mod + Shift + dir → move selected window/column
|
||||
// Mod + Ctrl + dir → navigate workspaces
|
||||
// Mod + Ctrl+Shift + dir → move window to workspace
|
||||
// Mod + Alt + dir → resize (column width / window height)
|
||||
//
|
||||
binds {
|
||||
// ── Applications ──────────────────────────────────────────────────────────
|
||||
Mod+T { spawn "kitty"; }
|
||||
Mod+Shift+T { spawn "bash" "-c" "cool-retro-term -p ~/Dotfiles/desktopenvs/niri/CRT"; }
|
||||
Mod+M { spawn "bash" "-c" "kitty -e nvim"; }
|
||||
Mod+E { spawn "thunar"; }
|
||||
Mod+Alt+E { spawn "pcmanfm-qt"; }
|
||||
Mod+X { spawn "bash" "-c" "wofi --show=run"; }
|
||||
Mod+N { spawn "nextcloud"; }
|
||||
Mod+I { spawn "bash" "-c" "iwmenu --launcher walker"; }
|
||||
Mod+Alt+I { spawn "bash" "-c" "bzmenu --launcher walker"; }
|
||||
Mod+Shift+I { spawn "nm-connection-editor"; }
|
||||
Mod+R { spawn "bash" "-c" "vicinae toggle"; }
|
||||
Mod+Return { spawn "bash" "-c" "vicinae toggle"; }
|
||||
Mod+Shift+R { spawn "bash" "-c" "wofi --show drun"; }
|
||||
Ctrl+Shift+R { spawn "bash" "-c" "vicinae toggle"; }
|
||||
|
||||
Mod+F { spawn "bash" "-c" "~/.config/scripts/wofi-file-search.sh"; }
|
||||
Mod+Shift+F { spawn "bash" "-c" "~/.config/scripts/foldersearch.sh"; }
|
||||
Mod+Alt+F { spawn "wofi-calc"; }
|
||||
|
||||
Mod+S { spawn "pavucontrol"; }
|
||||
Mod+U { spawn "bash" "-c" "kitty -e btop"; }
|
||||
Mod+W { spawn "bash" "-c" "kitty -e ~/.config/scripts/wallpaper-picker ~/Pictures"; }
|
||||
Mod+Ctrl+R { spawn "bash" "-c" "kitty -e ~/.config/scripts/amssh"; }
|
||||
Mod+F1 { spawn "bash" "-c" "kitty -e ~/.config/scripts/helpmenu.sh"; }
|
||||
Mod+Ctrl+T { spawn "bash" "-c" "kitty -e ~/.config/scripts/timer-pick"; }
|
||||
Mod+Shift+F1 { spawn "bash" "-c" "kitty -e nvim ~/.config/niri/config.kdl"; }
|
||||
|
||||
Mod+Ctrl+P { spawn "bash" "-c" "~/.config/scripts/screenrec.sh"; }
|
||||
|
||||
// App drawer
|
||||
Mod+D { spawn "bash" "-c" "~/.config/scripts/drawer.sh"; }
|
||||
Mod+Shift+A { spawn "bash" "-c" "~/.config/scripts/drawer.sh"; }
|
||||
|
||||
// ── Screenshots ───────────────────────────────────────────────────────────
|
||||
Print { screenshot; }
|
||||
Mod+P { screenshot; }
|
||||
Mod+Shift+P { screenshot-screen; }
|
||||
|
||||
// ── Window Management ─────────────────────────────────────────────────────
|
||||
Mod+Q { close-window; }
|
||||
Mod+Shift+Q { close-window; }
|
||||
|
||||
Mod+V { toggle-window-floating; }
|
||||
Mod+Shift+V { center-column; }
|
||||
Mod+C { center-column; }
|
||||
|
||||
Mod+Ctrl+M { switch-layout "next"; }
|
||||
|
||||
// ── Niri layout actions ───────────────────────────────────────────────────
|
||||
Mod+Backspace { switch-preset-column-width; }
|
||||
Mod+Shift+Backspace { maximize-column; }
|
||||
Mod+Ctrl+Backspace { fullscreen-window; }
|
||||
|
||||
// Consume/expel from column (hyprlua group analog)
|
||||
Mod+A { consume-window-into-column; }
|
||||
Mod+Y { expel-window-from-column; }
|
||||
Mod+Alt+C { consume-or-expel-window-left; }
|
||||
Mod+Alt+V { consume-or-expel-window-right; }
|
||||
|
||||
// ── Focus ─────────────────────────────────────────────────────────────────
|
||||
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+Tab { focus-window-down-or-column-right; }
|
||||
Mod+Shift+Tab { focus-window-up-or-column-left; }
|
||||
Mod+Shift+Return { toggle-overview; }
|
||||
|
||||
// ── Move Window ───────────────────────────────────────────────────────────
|
||||
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; }
|
||||
|
||||
// Mouse drag / resize
|
||||
Mod+Button272 { move-window-with-pointer; }
|
||||
Mod+Button273 { resize-window-with-pointer; }
|
||||
Mod+Shift+Button272 { resize-window-with-pointer; }
|
||||
|
||||
// ── Resize ────────────────────────────────────────────────────────────────
|
||||
Mod+Alt+L { set-column-width "+10%"; }
|
||||
Mod+Alt+H { set-column-width "-10%"; }
|
||||
Mod+Alt+K { set-window-height "-10%"; }
|
||||
Mod+Alt+J { set-window-height "+10%"; }
|
||||
Mod+Alt+Right { set-column-width "+10%"; }
|
||||
Mod+Alt+Left { set-column-width "-10%"; }
|
||||
Mod+Alt+Up { set-window-height "-10%"; }
|
||||
Mod+Alt+Down { set-window-height "+10%"; }
|
||||
|
||||
// ── Workspaces — direct ───────────────────────────────────────────────────
|
||||
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+0 { focus-workspace 10; }
|
||||
|
||||
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+Shift+0 { move-column-to-workspace 10; }
|
||||
|
||||
// ── Workspaces — relative navigation (Ctrl + direction) ──────────────────
|
||||
// J/K and Down/Up are the canonical vertical workspace nav
|
||||
Mod+Ctrl+J { focus-workspace-down; }
|
||||
Mod+Ctrl+K { focus-workspace-up; }
|
||||
Mod+Ctrl+Down { focus-workspace-down; }
|
||||
Mod+Ctrl+Up { focus-workspace-up; }
|
||||
// H/L and Left/Right mirror the above for horizontal-habit users
|
||||
Mod+Ctrl+L { focus-workspace-down; }
|
||||
Mod+Ctrl+H { focus-workspace-up; }
|
||||
Mod+Ctrl+Right { focus-workspace-down; }
|
||||
Mod+Ctrl+Left { focus-workspace-up; }
|
||||
|
||||
// ── Workspaces — move window (Ctrl+Shift + direction) ────────────────────
|
||||
Mod+Ctrl+Shift+J { move-column-to-workspace-down; }
|
||||
Mod+Ctrl+Shift+K { move-column-to-workspace-up; }
|
||||
Mod+Ctrl+Shift+Down { move-column-to-workspace-down; }
|
||||
Mod+Ctrl+Shift+Up { move-column-to-workspace-up; }
|
||||
Mod+Ctrl+Shift+L { move-column-to-workspace-down; }
|
||||
Mod+Ctrl+Shift+H { move-column-to-workspace-up; }
|
||||
Mod+Ctrl+Shift+Right { move-column-to-workspace-down; }
|
||||
Mod+Ctrl+Shift+Left { move-column-to-workspace-up; }
|
||||
|
||||
// Scroll workspaces
|
||||
Mod+WheelScrollDown cooldown-ms=150 { focus-workspace-down; }
|
||||
Mod+WheelScrollUp cooldown-ms=150 { focus-workspace-up; }
|
||||
Mod+Shift+WheelScrollDown { move-column-to-workspace-down; }
|
||||
Mod+Shift+WheelScrollUp { move-column-to-workspace-up; }
|
||||
|
||||
// Horizontal scroll → column navigation
|
||||
Mod+WheelScrollRight { focus-column-right; }
|
||||
Mod+WheelScrollLeft { focus-column-left; }
|
||||
|
||||
// Volume keys as workspace nav
|
||||
Mod+XF86AudioRaiseVolume { focus-workspace-down; }
|
||||
Mod+XF86AudioLowerVolume { focus-workspace-up; }
|
||||
Mod+Shift+XF86AudioRaiseVolume { move-column-to-workspace-down; }
|
||||
Mod+Shift+XF86AudioLowerVolume { move-column-to-workspace-up; }
|
||||
|
||||
// ── Overview / scratchpad analog ──────────────────────────────────────────
|
||||
Mod+Space { focus-workspace-with-recent-window; }
|
||||
Mod+Shift+Space { move-column-to-workspace-with-recent-window; }
|
||||
Mod+Ctrl+Space { toggle-overview; }
|
||||
Mod+XF86AudioMute { toggle-overview; }
|
||||
Mod+Shift+XF86AudioMute { move-column-to-workspace-with-recent-window; }
|
||||
|
||||
// ── Bar / UI ──────────────────────────────────────────────────────────────
|
||||
Mod+Z { spawn "bash" "-c" "~/.config/scripts/togglebar.sh"; }
|
||||
Mod+Ctrl+B { spawn "bash" "-c" "eww reload"; }
|
||||
|
||||
// ── Audio ─────────────────────────────────────────────────────────────────
|
||||
XF86AudioRaiseVolume allow-when-locked=true { spawn "wpctl" "set-volume" "-l" "1.4" "@DEFAULT_AUDIO_SINK@" "5%+"; }
|
||||
XF86AudioLowerVolume allow-when-locked=true { spawn "wpctl" "set-volume" "-l" "1.4" "@DEFAULT_AUDIO_SINK@" "5%-"; }
|
||||
XF86AudioMute allow-when-locked=true { spawn "wpctl" "set-mute" "@DEFAULT_AUDIO_SINK@" "toggle"; }
|
||||
XF86AudioMicMute allow-when-locked=true { spawn "wpctl" "set-mute" "@DEFAULT_AUDIO_SOURCE@" "toggle"; }
|
||||
XF86AudioPlay allow-when-locked=true { spawn "playerctl" "play-pause" "-p" "spotify,vlc"; }
|
||||
|
||||
// ── Brightness ────────────────────────────────────────────────────────────
|
||||
XF86MonBrightnessUp allow-when-locked=true { spawn "bri" "--up"; }
|
||||
XF86MonBrightnessDown allow-when-locked=true { spawn "bri" "--down"; }
|
||||
|
||||
// ── Color temperature (gammastep presets) ─────────────────────────────────
|
||||
Mod+Ctrl+X { spawn "bash" "-c" "killall gammastep; gammastep -O 6500"; }
|
||||
Mod+Ctrl+W { spawn "bash" "-c" "killall gammastep; gammastep -O 5000"; }
|
||||
Mod+Ctrl+A { spawn "bash" "-c" "killall gammastep; gammastep -O 4000"; }
|
||||
Mod+Ctrl+Q { spawn "bash" "-c" "killall gammastep; gammastep -O 3000"; }
|
||||
Mod+Ctrl+S { spawn "bash" "-c" "killall gammastep; gammastep -O 2700"; }
|
||||
|
||||
// ── Misc ──────────────────────────────────────────────────────────────────
|
||||
Mod+Ctrl+I { spawn "chamel" "toggle"; }
|
||||
Mod+Ctrl+U { spawn "chamel" "clear"; }
|
||||
Mod+Ctrl+Z { spawn "chamel" "clear-and-deactivate"; }
|
||||
Mod+Ctrl+C { spawn "dunstctl" "close-all"; }
|
||||
Mod+Ctrl+G { spawn "bash" "-c" "~/.config/scripts/onscreenkb.sh"; }
|
||||
Mod+Shift+C { spawn "bash" "-c" "~/.config/scripts/caffeine.sh"; }
|
||||
Mod+Shift+X { spawn "bash" "-c" "~/.config/scripts/niri-toggle-touchpad.sh"; }
|
||||
|
||||
Mod+Ctrl+E { spawn "bash" "-c" "~/.config/scripts/screenrotationwcw.sh"; }
|
||||
Mod+Ctrl+D { spawn "bash" "-c" "~/.config/scripts/screenrotationacw.sh"; }
|
||||
|
||||
// ── Lock / Exit ───────────────────────────────────────────────────────────
|
||||
Mod+O { spawn "swaylock" "-f"; }
|
||||
Mod+Shift+O { quit; }
|
||||
Mod+Ctrl+O { spawn "systemctl" "poweroff"; }
|
||||
Mod+Alt+O { spawn "bash" "-c" "~/.config/scripts/pwr-dmenu.sh"; }
|
||||
Mod+Alt+Ctrl+Shift+End { quit; }
|
||||
}
|
||||
|
|
@ -0,0 +1,20 @@
|
|||
// ── Environment Variables ─────────────────────────────────────────────────────
|
||||
environment {
|
||||
GTK_THEME "cyberqueer"
|
||||
XCURSOR_SIZE "40"
|
||||
XCURSOR_THEME "Nordzy-cursors-lefthand"
|
||||
QT_QPA_PLATFORMTHEME "gtk3"
|
||||
QT_WAYLAND_DISABLE_WINDOWDECORATION "1"
|
||||
MOZ_ENABLE_WAYLAND "1"
|
||||
ELECTRON_OZONE_PLATFORM_HINT "auto"
|
||||
NIXOS_OZONE_WL "1"
|
||||
GDK_SCALE "2"
|
||||
}
|
||||
|
||||
// ── Cursor ────────────────────────────────────────────────────────────────────
|
||||
cursor {
|
||||
xcursor-theme "Nordzy-cursors-lefthand"
|
||||
xcursor-size 40
|
||||
hide-after-inactive-ms 5000
|
||||
hide-when-typing
|
||||
}
|
||||
|
|
@ -0,0 +1,28 @@
|
|||
// ── Input ─────────────────────────────────────────────────────────────────────
|
||||
input {
|
||||
keyboard {
|
||||
xkb {
|
||||
layout "de"
|
||||
options "caps:swapescape"
|
||||
}
|
||||
repeat-delay 300
|
||||
repeat-rate 50
|
||||
track-layout "window"
|
||||
}
|
||||
|
||||
touchpad {
|
||||
tap
|
||||
natural-scroll
|
||||
accel-speed 0.0
|
||||
accel-profile "flat"
|
||||
}
|
||||
|
||||
mouse {
|
||||
left-handed
|
||||
accel-speed 0.0
|
||||
accel-profile "flat"
|
||||
}
|
||||
|
||||
warp-mouse-to-focus
|
||||
focus-follows-mouse max-scroll-amount="0%"
|
||||
}
|
||||
|
|
@ -0,0 +1,42 @@
|
|||
// ── Layout ────────────────────────────────────────────────────────────────────
|
||||
layout {
|
||||
gaps 6
|
||||
|
||||
center-focused-column "never"
|
||||
|
||||
// Preset widths cycled by Mod+Backspace
|
||||
preset-column-widths {
|
||||
proportion 0.333
|
||||
proportion 0.5
|
||||
proportion 0.667
|
||||
proportion 1.0
|
||||
}
|
||||
|
||||
default-column-width { proportion 0.5; }
|
||||
|
||||
// CyberQueer focus ring
|
||||
focus-ring {
|
||||
width 4
|
||||
active-color "#E40046"
|
||||
inactive-color "#5018DD"
|
||||
active-gradient from="#E40046" to="#f50505" angle=35 relative-to="window"
|
||||
inactive-gradient from="#5018DD" to="#5018DD" angle=35 relative-to="window"
|
||||
}
|
||||
|
||||
border {
|
||||
off
|
||||
}
|
||||
|
||||
shadow {
|
||||
on
|
||||
softness 30
|
||||
spread 5
|
||||
offset x=0 y=5
|
||||
color "#00000080"
|
||||
}
|
||||
|
||||
// Reserve space for the eww bar
|
||||
struts {
|
||||
top 30
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,10 @@
|
|||
// ── Outputs ───────────────────────────────────────────────────────────────────
|
||||
// Niri auto-detects monitors. Uncomment and adjust for fixed setups:
|
||||
// output "eDP-1" {
|
||||
// scale 2.0
|
||||
// position x=0 y=0
|
||||
// }
|
||||
// output "HDMI-A-1" {
|
||||
// scale 1.0
|
||||
// position x=1920 y=0
|
||||
// }
|
||||
|
|
@ -0,0 +1,75 @@
|
|||
// ── Window Rules ──────────────────────────────────────────────────────────────
|
||||
|
||||
// Launcher / utility floating windows
|
||||
window-rule {
|
||||
match app-id=r"^ulauncher$"
|
||||
open-floating true
|
||||
}
|
||||
|
||||
window-rule {
|
||||
match app-id=r"^vicinae$"
|
||||
open-floating true
|
||||
}
|
||||
|
||||
window-rule {
|
||||
match app-id=r"^org\.gnome\.Calculator$"
|
||||
open-floating true
|
||||
default-column-width { fixed 400; }
|
||||
}
|
||||
|
||||
window-rule {
|
||||
match app-id=r"^qalculate-gtk$"
|
||||
open-floating true
|
||||
default-column-width { fixed 600; }
|
||||
}
|
||||
|
||||
window-rule {
|
||||
match app-id=r"^pavucontrol$"
|
||||
open-floating true
|
||||
default-column-width { fixed 800; }
|
||||
}
|
||||
|
||||
window-rule {
|
||||
match app-id=r"^nm-connection-editor$"
|
||||
open-floating true
|
||||
default-column-width { fixed 800; }
|
||||
}
|
||||
|
||||
window-rule {
|
||||
match app-id=r"^blueman-manager$"
|
||||
open-floating true
|
||||
default-column-width { fixed 700; }
|
||||
}
|
||||
|
||||
// File manager dialogs
|
||||
window-rule {
|
||||
match app-id=r"^thunar$" title=r"^(Copy|Move|Rename|Delete|Progress)"
|
||||
open-floating true
|
||||
}
|
||||
|
||||
window-rule {
|
||||
match app-id=r"^xfce4-terminal$"
|
||||
open-floating true
|
||||
default-column-width { fixed 900; }
|
||||
}
|
||||
|
||||
// Global window dimming — all windows at 85% opacity by default
|
||||
window-rule {
|
||||
opacity 0.85
|
||||
}
|
||||
|
||||
// No transparency for browser / media apps
|
||||
window-rule {
|
||||
match app-id=r"^firefox$"
|
||||
opacity 1.0
|
||||
}
|
||||
|
||||
window-rule {
|
||||
match app-id=r"^zen$"
|
||||
opacity 1.0
|
||||
}
|
||||
|
||||
window-rule {
|
||||
match app-id=r"^vesktop$"
|
||||
opacity 1.0
|
||||
}
|
||||
Loading…
Reference in New Issue