Files
dotfiles/config/niri/config.kdl
2025-10-25 12:14:47 +02:00

443 lines
12 KiB
Plaintext

/************************Input************************/
input {
keyboard {
xkb {
layout "de"
}
numlock
}
touchpad {
tap
natural-scroll
scroll-method "two-finger"
}
mouse {
accel-speed 0.25
}
trackpoint {
off
}
// Make the mouse warp to the center of newly focused windows.
warp-mouse-to-focus
// Focus windows and outputs automatically when moving the mouse into them.
focus-follows-mouse max-scroll-amount="99%"
}
/************************Output************************/
output "eDP-1" {
mode "2560x1600@240"
scale 1.25
background-color "#1e1e2e"
backdrop-color "#1e1e2e"
}
output "eDP-2" {
mode "2560x1600@240"
scale 1.25
background-color "#1e1e2e"
backdrop-color "#1e1e2e"
}
/************************Layout************************/
layout {
gaps 0
center-focused-column "never"
preset-column-widths {
proportion 0.3
proportion 0.5
proportion 0.7
}
preset-window-heights {
proportion 0.5
proportion 0.75
proportion 1.0
}
default-column-width { proportion 0.7; }
focus-ring {
width 2
active-color "#89b4fa"
inactive-color "#1e1e2e"
}
border {
off
}
shadow {
on
softness 30
spread 5
offset x=0 y=5
color "#0007"
}
struts {
top 2
right 2
bottom 3
left 2
}
background-color "#1e1e2e"
}
// Disable the "Important Hotkeys" pop-up at startup.
hotkey-overlay {
skip-at-startup
}
prefer-no-csd
animations {
// off
// slowdown 3.0
}
layer-rule {
match namespace="^swww-daemonbackdrop$"
place-within-backdrop true
}
/************************Autostart************************/
// Switch configs
spawn-sh-at-startup "config-switch niri"
// Wallpaper
spawn-at-startup "wallpaper-daemon"
// Not necessary maybe ...
spawn-at-startup "fcitx5"
// Core
spawn-at-startup "nm-applet"
spawn-sh-at-startup "gnome-keyring-daemon --start --components=secrets"
spawn-at-startup "/usr/lib/polkit-gnome/polkit-gnome-authentication-agent-1"
// Clipboard history
spawn-sh-at-startup "wl-paste --type text --watch cliphist store"
spawn-sh-at-startup "wl-paste --type image --watch cliphist store"
// Logitech
spawn-sh-at-startup "solaar -w hide"
// Application associations
spawn-at-startup "kbuildsycoca6"
// Some other heavy apps
spawn-at-startup "sunshine"
// spawn-at-startup "spotify"
// spawn-at-startup "thunderbird"
// Idle
spawn-at-startup "hypridle"
// QuickShell
spawn-at-startup "quickshell"
/************************Envs************************/
environment {
// Input Method
QT_IM_MODULE "fcitx"
XMODIFIERS "@im=fcitx"
SDL_IM_MODULE "fcitx"
GLFW_IM_MODULE "ibus"
INPUT_METHOD "fcitx"
// Themes
QT_QPA_PLATFORM "wayland"
QT_QPA_PLATFORMTHEME "kde"
QT_STYLE_OVERRIDE "Breeze"
// Nvidia
LIBVA_DRIVER_NAME "nvidia"
__GLX_VENDOR_LIBRARY_NAME "nvidia"
NVD_BACKEND "nvidia"
// Others
XCURSOR_SIZE "24"
ELECTRON_OZONE_PLATFORM_HINT "wayland"
}
/************************Rules************************/
// Picture-in-Picture
window-rule {
match title="^([Pp]icture[-\\s]?[Ii]n[-\\s]?[Pp]icture)(.*)$"
open-floating true
}
// Dialog windows
window-rule {
match title="^(Open File)(.*)$"
match title="^(Select a File)(.*)$"
match title="^(Choose wallpaper)(.*)$"
match title="^(Open Folder)(.*)$"
match title="^(Save As)(.*)$"
match title="^(Library)(.*)$"
match title="^(File Upload)(.*)$"
open-floating true
}
// FLoating terminal
window-rule {
match app-id="com.mitchellh.ghostty"
open-floating true
default-column-width { proportion 0.5; }
}
// Normal terminal
window-rule {
match app-id="kitty"
default-column-width { proportion 0.5; }
}
// Scrcpy
window-rule {
match app-id="scrcpy"
default-column-width { proportion 0.3; }
}
// Editor
window-rule {
match app-id="org.gnome.TextEditor"
default-column-width { proportion 0.3; }
}
// Other floating
window-rule {
match app-id="blueberry"
match app-id="blueman-manager"
match app-id="org.pulseaudio.pavucontrol"
match app-id="com.saivert.pwvucontrol"
match app-id="Waydroid"
match app-id="org.kde.kcalc"
match app-id="org.kde.kalk"
match app-id="org.gnome.NautilusPreviewer"
match app-id="coin"
match app-id="wallpaper-carousel"
match app-id="be.alexandervanhee.gradia"
match title="^(图片查看器)(.*)$" // QQ
open-floating true
}
// Block from recording
window-rule {
match app-id="thunderbird"
block-out-from "screen-capture"
}
// workspace "first"
// workspace "second"
// Startup in "second" workspace
window-rule {
// match at-startup=true app-id="Spotify"
// match at-startup=true app-id="thunderbird"
open-on-workspace "second"
}
// I love round corners
window-rule {
geometry-corner-radius 14
clip-to-geometry true
}
/************************Others************************/
cursor {
xcursor-theme "Bibata-Modern-Ice"
xcursor-size 24
hide-when-typing
}
debug {
render-drm-device "/dev/dri/card0"
}
screenshot-path "~/Pictures/Screenshots/.niri_screenshot.png"
// gestures {
// hot-corners {
// off
// }
// }
/************************Keybindings************************/
binds {
// Apps
Mod+C { spawn-sh "code --password-store=gnome-libsecret"; }
Mod+E { spawn-sh "nautilus --new-window"; }
Mod+W { spawn-sh "zen || zen-browser"; }
Mod+X { spawn "gnome-text-editor" "--new-window"; }
Mod+B { spawn-sh "pkill -x -n btop || ghostty -e btop"; }
Mod+T { spawn "kitty"; }
Mod+Return { spawn "kitty"; }
Mod+Shift+T { spawn "ghostty"; }
Mod+Shift+Return { spawn "ghostty"; }
Mod+Shift+W { spawn "wallpaper-carousel"; }
Mod+P { spawn-sh "pkill -x -n pwvucontrol || pwvucontrol"; }
// Quickshell
Mod+Space { spawn-sh "qs ipc call panels toggleControlCenter"; }
Mod+Shift+D { spawn-sh "qs ipc call panels toggleCalendar"; }
Mod+Shift+L { spawn-sh "qs ipc call lyrics toggleBarLyrics"; }
Mod+Shift+K { spawn-sh "pkill -x quickshell || quickshell"; }
Mod+I { spawn-sh "qs ipc call idleInhibitor toggleInhibitor"; }
Mod+Alt+R { spawn-sh "qs ipc call recording startOrStopRecording"; }
// Rofi
Mod+D { spawn-sh "pkill -x rofi || rofi -show run"; }
Alt+Space { spawn-sh "pkill -x rofi || rofi -show drun"; }
// Actions
Mod+V { spawn-sh "pkill -x rofi || rofi-cliphist"; }
Mod+Period { spawn-sh "pkill -x rofi || rofi-emoji"; }
Ctrl+Alt+Delete { spawn-sh "pkill -x wlogout || wlogout -p layer-shell"; }
Print { spawn-sh "screenshot full"; }
Mod+Shift+S { spawn-sh "screenshot area"; }
Mod+Ctrl+Shift+S { spawn-sh "screenshot window"; }
Mod+Shift+C { spawn-sh "hyprpicker -a"; }
// Session
Mod+L { spawn-sh "loginctl lock-session"; }
// Media
XF86AudioRaiseVolume allow-when-locked=true { spawn-sh "wpctl set-volume -l 1 @DEFAULT_AUDIO_SINK@ 5%+"; }
XF86AudioLowerVolume allow-when-locked=true { spawn-sh "wpctl set-volume -l 1 @DEFAULT_AUDIO_SINK@ 5%-"; }
XF86AudioMute allow-when-locked=true { spawn-sh "wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle"; }
XF86AudioMicMute allow-when-locked=true { spawn-sh "wpctl set-mute @DEFAULT_AUDIO_SOURCE@ toggle"; }
XF86AudioPlay allow-when-locked=true { spawn-sh "playerctl play-pause"; }
XF86AudioPause allow-when-locked=true { spawn-sh "playerctl play-pause"; }
XF86AudioNext allow-when-locked=true { spawn-sh "playerctl next"; }
XF86AudioPrev allow-when-locked=true { spawn-sh "playerctl previous"; }
// Brightness
XF86MonBrightnessUp allow-when-locked=true { spawn "set-brightness" "+10%"; }
XF86MonBrightnessDown allow-when-locked=true { spawn "set-brightness" "10%-"; }
// Window management
Mod+Tab repeat=false { toggle-overview; }
Mod+Q repeat=false { close-window; }
Mod+Left { focus-column-left; }
Mod+Down { focus-window-or-workspace-down; }
Mod+Up { focus-window-or-workspace-up; }
Mod+Right { focus-column-right; }
Mod+Shift+Left { move-column-left; }
Mod+Shift+Down { move-window-down-or-to-workspace-down; }
Mod+Shift+Up { move-window-up-or-to-workspace-up; }
Mod+Shift+Right { move-column-right; }
Mod+Home { focus-column-first; }
Mod+End { focus-column-last; }
Mod+Shift+Home { move-column-to-first; }
Mod+Shift+End { move-column-to-last; }
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+Shift+Ctrl+Left { move-window-to-monitor-left; }
Mod+Shift+Ctrl+Down { move-window-to-monitor-down; }
Mod+Shift+Ctrl+Up { move-window-to-monitor-up; }
Mod+Shift+Ctrl+Right { move-window-to-monitor-right; }
Mod+Page_Down { focus-workspace-down; }
Mod+Page_Up { focus-workspace-up; }
Mod+Shift+Page_Down { move-window-to-workspace-down; }
Mod+Shift+Page_Up { move-window-to-workspace-up; }
Mod+Ctrl+Shift+Page_Down { move-workspace-down; }
Mod+Ctrl+Shift+Page_Up { move-workspace-up; }
Mod+WheelScrollDown cooldown-ms=150 { focus-workspace-down; }
Mod+WheelScrollUp cooldown-ms=150 { focus-workspace-up; }
Mod+Shift+WheelScrollDown cooldown-ms=150 { move-column-to-workspace-down; }
Mod+Shift+WheelScrollUp cooldown-ms=150 { move-column-to-workspace-up; }
Mod+WheelScrollRight cooldown-ms=150 { focus-column-right; }
Mod+WheelScrollLeft cooldown-ms=150 { focus-column-left; }
Mod+Shift+WheelScrollRight { move-column-right; }
Mod+Shift+WheelScrollLeft { move-column-left; }
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+Alt+1 { move-window-to-workspace 1; }
Mod+Alt+2 { move-window-to-workspace 2; }
Mod+Alt+3 { move-window-to-workspace 3; }
Mod+Alt+4 { move-window-to-workspace 4; }
Mod+Alt+5 { move-window-to-workspace 5; }
Mod+Alt+6 { move-window-to-workspace 6; }
Mod+Alt+7 { move-window-to-workspace 7; }
Mod+Alt+8 { move-window-to-workspace 8; }
Mod+Alt+9 { move-window-to-workspace 9; }
Mod+Alt+Left { consume-or-expel-window-left; }
Mod+Alt+Right { consume-or-expel-window-right; }
Mod+Shift+Comma { consume-window-into-column; }
Mod+Shift+Period { expel-window-from-column; }
Mod+Shift+M { toggle-column-tabbed-display; }
Mod+R { switch-preset-column-width; }
Mod+Shift+R { switch-preset-window-height; }
Mod+Ctrl+R { reset-window-height; }
Mod+F { maximize-column; }
Mod+Shift+F { fullscreen-window; }
Mod+Ctrl+F { expand-column-to-available-width; }
Mod+Y { center-column; }
Mod+Minus { set-column-width "-10%"; }
Mod+Plus { set-column-width "+10%"; }
Mod+Shift+Minus { set-window-height "-10%"; }
Mod+Shift+Plus { set-window-height "+10%"; }
Mod+Alt+Space { toggle-window-floating; }
Alt+Tab { switch-focus-between-floating-and-tiling; }
Mod+Ctrl+W { toggle-column-tabbed-display; }
Mod+Escape allow-inhibiting=false { toggle-keyboard-shortcuts-inhibit; }
Mod+M allow-inhibiting=false { quit; }
Mod+Shift+P { spawn-sh "(hyprlock &) && niri msg action power-off-monitors"; }
}