diff --git a/desktopenvs/niri/niri/config.kdl b/desktopenvs/niri/niri/config.kdl index 3dbf5ad..4bb4cf4 100644 --- a/desktopenvs/niri/niri/config.kdl +++ b/desktopenvs/niri/niri/config.kdl @@ -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; } -} diff --git a/desktopenvs/niri/niri/modules/animations.kdl b/desktopenvs/niri/niri/modules/animations.kdl new file mode 100644 index 0000000..a1d6e7e --- /dev/null +++ b/desktopenvs/niri/niri/modules/animations.kdl @@ -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" + } +} diff --git a/desktopenvs/niri/niri/modules/autostart.kdl b/desktopenvs/niri/niri/modules/autostart.kdl new file mode 100644 index 0000000..f89ff45 --- /dev/null +++ b/desktopenvs/niri/niri/modules/autostart.kdl @@ -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" diff --git a/desktopenvs/niri/niri/modules/binds.kdl b/desktopenvs/niri/niri/modules/binds.kdl new file mode 100644 index 0000000..b497589 --- /dev/null +++ b/desktopenvs/niri/niri/modules/binds.kdl @@ -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; } +} diff --git a/desktopenvs/niri/niri/modules/environment.kdl b/desktopenvs/niri/niri/modules/environment.kdl new file mode 100644 index 0000000..62230ef --- /dev/null +++ b/desktopenvs/niri/niri/modules/environment.kdl @@ -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 +} diff --git a/desktopenvs/niri/niri/modules/input.kdl b/desktopenvs/niri/niri/modules/input.kdl new file mode 100644 index 0000000..5f8b0b2 --- /dev/null +++ b/desktopenvs/niri/niri/modules/input.kdl @@ -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%" +} diff --git a/desktopenvs/niri/niri/modules/layout.kdl b/desktopenvs/niri/niri/modules/layout.kdl new file mode 100644 index 0000000..856f8f5 --- /dev/null +++ b/desktopenvs/niri/niri/modules/layout.kdl @@ -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 + } +} diff --git a/desktopenvs/niri/niri/modules/outputs.kdl b/desktopenvs/niri/niri/modules/outputs.kdl new file mode 100644 index 0000000..058fa23 --- /dev/null +++ b/desktopenvs/niri/niri/modules/outputs.kdl @@ -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 +// } diff --git a/desktopenvs/niri/niri/modules/window-rules.kdl b/desktopenvs/niri/niri/modules/window-rules.kdl new file mode 100644 index 0000000..92d531c --- /dev/null +++ b/desktopenvs/niri/niri/modules/window-rules.kdl @@ -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 +}