Initial niri config.

This commit is contained in:
2026-09-23 12:49:32 +02:00
parent 83409564ef
commit 10db5ade01
2 changed files with 408 additions and 0 deletions
+256
View File
@@ -0,0 +1,256 @@
// ============================================================================
// GENERAL & SYSTEM SETTINGS
// Wiki: https://github.com/YaLTeR/niri/wiki/Configuration:-Introduction
// ============================================================================
config-notification {
disable-failed
}
hotkey-overlay {
skip-at-startup
}
prefer-no-csd
screenshot-path "~/Pictures/Screenshots/Screenshot from %Y-%m-%d %H-%M-%S.png"
debug {
honor-xdg-activation-with-invalid-serial
}
// ============================================================================
// ENVIRONMENT VARIABLES
// ============================================================================
environment {
XDG_CURRENT_DESKTOP "niri"
QT_QPA_PLATFORM "wayland;xcb"
ELECTRON_OZONE_PLATFORM_HINT "auto"
QT_QPA_PLATFORMTHEME "gtk3"
QT_QPA_PLATFORMTHEME_QT6 "gtk3"
TERMINAL "alacritty"
}
// ============================================================================
// AUTOSTART / SPAWN AT STARTUP
// ============================================================================
spawn-at-startup "dms" "run"
// Export the session env to D-Bus so xdg-desktop-portal works
spawn-at-startup "dbus-update-activation-environment" "--all"
// Audio stack
spawn-at-startup "pipewire"
// PolicyKit authentication agent (verify path: xbps-query -f mate-polkit | grep -i agent)
spawn-at-startup "sh" "-c" "/usr/libexec/polkit-mate-authentication-agent-1 &"
// Clipboard history backing store for Mod+V
spawn-at-startup "sh" "-c" "wl-paste --watch cliphist store"
// Automount removable media
spawn-at-startup "udiskie" "--no-tray"
// ============================================================================
// INPUT & GESTURES
// Wiki: https://github.com/YaLTeR/niri/wiki/Configuration:-Input
// ============================================================================
input {
keyboard {
xkb {
// If this section is empty, niri will fetch xkb settings
// from org.freedesktop.locale1. You can control these using
// localectl set-x11-keymap.
}
// Enable numlock on startup, omitting this setting disables it.
numlock
}
// Focus windows and outputs automatically when moving the mouse into them.
focus-follows-mouse max-scroll-amount="95%"
}
gestures {
hot-corners {
off
}
}
// ============================================================================
// LAYOUT & VISUAL APPEARANCE
// Wiki: https://github.com/YaLTeR/niri/wiki/Configuration:-Layout
// ============================================================================
layout {
background-color "transparent"
// When to center a column when changing focus: "never", "always", or "on-overflow"
center-focused-column "never"
// Custom widths toggled by "switch-preset-column-width" (Mod+R)
preset-column-widths {
proportion 0.5
proportion 1.0
}
default-column-width { proportion 0.5; }
border {
off
width 4
active-color "#707070" // Neutral gray
inactive-color "#d0d0d0" // Light gray
urgent-color "#cc4444" // Softer red
}
shadow {
softness 30
spread 5
offset x=0 y=5
color "#0007"
}
struts {
}
}
overview {
workspace-shadow {
off
}
}
// ============================================================================
// ANIMATIONS
// ============================================================================
animations {
workspace-switch {
spring damping-ratio=0.80 stiffness=523 epsilon=0.0001
}
window-open {
duration-ms 150
curve "ease-out-expo"
}
window-close {
duration-ms 150
curve "ease-out-quad"
}
horizontal-view-movement {
spring damping-ratio=0.85 stiffness=423 epsilon=0.0001
}
window-movement {
spring damping-ratio=0.75 stiffness=323 epsilon=0.0001
}
window-resize {
spring damping-ratio=0.85 stiffness=423 epsilon=0.0001
}
config-notification-open-close {
spring damping-ratio=0.65 stiffness=923 epsilon=0.001
}
screenshot-ui-open {
duration-ms 200
curve "ease-out-quad"
}
overview-open-close {
spring damping-ratio=0.85 stiffness=800 epsilon=0.0001
}
}
// ============================================================================
// WINDOW & LAYER RULES
// Wiki: https://github.com/YaLTeR/niri/wiki/Configuration:-Window-Rules
// ============================================================================
layer-rule {
match namespace="^quickshell$"
place-within-backdrop true
}
window-rule {
match app-id=r#"^org\.gnome\."#
draw-border-with-background false
geometry-corner-radius 12
clip-to-geometry true
}
window-rule {
match app-id=r#"^gnome-control-center$"#
match app-id=r#"^pavucontrol$"#
match app-id=r#"^nm-connection-editor$"#
default-column-width { proportion 0.5; }
open-floating false
}
window-rule {
match app-id=r#"^org\.gnome\.Calculator$"#
match app-id=r#"^gnome-calculator$"#
match app-id=r#"^galculator$"#
match app-id=r#"^blueman-manager$"#
match app-id=r#"^org\.gnome\.Nautilus$"#
match app-id=r#"^xdg-desktop-portal$"#
open-floating true
}
window-rule {
match app-id="Alacritty"
match app-id="kitty"
draw-border-with-background false
}
window-rule {
match app-id=r#"firefox$"# title="^Picture-in-Picture$"
match app-id="zoom"
open-floating true
}
// Force the Steam client, Friends List, and settings windows to float
window-rule {
match app-id="steam"
open-floating true
}
window-rule {
match app-id="steam"
match title="Friends List"
open-floating true
default-floating-position x=10 y=10 relative-to="bottom-right"
}
window-rule {
match app-id=r#"^steam$"# title=r#"^notificationtoasts_\d+_desktop$"#
default-floating-position x=10 y=10 relative-to="top-right"
open-focused false
}
// Automatically fullscreen games launched via Proton
window-rule {
// Proton games typically use "steam_app_<id>" as their app-id.
// The r#"..."# syntax tells niri to evaluate this as a regular expression.
match app-id=r#"^steam_app_\d+$"#
open-fullscreen true
}
// ============================================================================
// NAVIGATION & KEYBINDINGS
// ============================================================================
// Override to disable super+tab
recent-windows {
binds {
Alt+Tab { next-window scope="output"; }
Alt+Shift+Tab { previous-window scope="output"; }
Alt+grave { next-window filter="app-id"; }
Alt+Shift+grave { previous-window filter="app-id"; }
}
}
// ============================================================================
// INCLUDES (DMS MANAGEMENT)
// ============================================================================
// @NOTE: only dms file we could edit
include optional=true "dms/binds.kdl"
// @NOTE: Non-editable files below all managed by dms
include optional=true "dms/colors.kdl"
include optional=true "dms/layout.kdl"
include optional=true "dms/alttab.kdl"
include optional=true "dms/outputs.kdl"
include optional=true "dms/cursor.kdl"
include optional=true "dms/input.kdl"