aboutsummaryrefslogtreecommitdiff
path: root/dotfiles/.config/niri
diff options
context:
space:
mode:
Diffstat (limited to 'dotfiles/.config/niri')
-rw-r--r--dotfiles/.config/niri/config.kdl234
-rw-r--r--dotfiles/.config/niri/dms/alttab.kdl10
-rw-r--r--dotfiles/.config/niri/dms/binds.kdl88
-rw-r--r--dotfiles/.config/niri/dms/colors.kdl39
-rw-r--r--dotfiles/.config/niri/dms/cursor.kdl0
-rw-r--r--dotfiles/.config/niri/dms/layout.kdl22
-rw-r--r--dotfiles/.config/niri/dms/outputs.kdl14
-rw-r--r--dotfiles/.config/niri/dms/windowrules.kdl0
-rw-r--r--dotfiles/.config/niri/dms/wpblur.kdl9
-rw-r--r--dotfiles/.config/niri/noctalia-binds.kdl24
-rw-r--r--dotfiles/.config/niri/noctalia.kdl35
11 files changed, 351 insertions, 124 deletions
diff --git a/dotfiles/.config/niri/config.kdl b/dotfiles/.config/niri/config.kdl
index f3eb4db..cd1f636 100644
--- a/dotfiles/.config/niri/config.kdl
+++ b/dotfiles/.config/niri/config.kdl
@@ -12,7 +12,7 @@ input {
// You can set rules, model, layout, variant and options.
// For more information, see xkeyboard-config(7).
layout "us,es,ru"
- options "lv3:ralt_switch,grp:alt_shift_toggle,misc:typo,caps:escape,grp_led:caps"
+ options "lv3:ralt_switch,grp:alt_space_toggle,misc:typo,caps:escape_shifted_capslock"
}
}
@@ -65,50 +65,9 @@ cursor {
hide-when-typing
}
-
-// You can configure outputs by their name, which you can find
-// by running `niri msg outputs` while inside a niri instance.
-// The built-in laptop monitor is usually called "eDP-1".
-// Find more information on the wiki:
-// https://github.com/YaLTeR/niri/wiki/Configuration:-Outputs
-// Remember to uncomment the node by removing "/-"!
-output "eDP-1" {
- // Uncomment this line to disable this output.
- // off
-
- background-color "#000000"
-
- // Resolution and, optionally, refresh rate of the output.
- // The format is "<width>x<height>" or "<width>x<height>@<refresh rate>".
- // If the refresh rate is omitted, niri will pick the highest refresh rate
- // for the resolution.
- // If the mode is omitted altogether or is invalid, niri will pick one automatically.
- // Run `niri msg outputs` while inside a niri instance to list all outputs and their modes.
- // mode "1920x1080@120.030"
-
- // You can use integer or fractional scale, for example use 1.5 for 150% scale.
- // scale 2
-
- // Transform allows to rotate the output counter-clockwise, valid values are:
- // normal, 90, 180, 270, flipped, flipped-90, flipped-180 and flipped-270.
- // transform "normal"
-
- // Position of the output in the global coordinate space.
- // This affects directional monitor actions like "focus-monitor-left", and cursor movement.
- // The cursor can only move between directly adjacent outputs.
- // Output scale and rotation has to be taken into account for positioning:
- // outputs are sized in logical, or scaled, pixels.
- // For example, a 3840×2160 output with scale 2.0 will have a logical size of 1920×1080,
- // so to put another output directly adjacent to it on the right, set its x to 1920.
- // If the position is unset or results in an overlap, the output is instead placed
- // automatically.
- position x=0 y=800
-}
-
-output "DP-1" {
- background-color "#000000"
- position x=1536 y=0
- //mode "2560x1440@165.000"
+overview {
+ zoom 0.33
+ backdrop-color "#00807F"
}
// Settings that influence how windows are positioned and sized.
@@ -116,7 +75,9 @@ output "DP-1" {
// https://github.com/YaLTeR/niri/wiki/Configuration:-Layout
layout {
// Set gaps around windows in logical pixels.
- gaps 5
+ gaps 10
+
+ background-color "#00000000"
// When to center a column when changing focus, options are:
// - "never", default behavior, focusing an off-screen column will keep at the left
@@ -203,7 +164,7 @@ layout {
// active-color "#5b8277"
// inactive-color "#4d4d42"
- active-gradient from="#1f5c9a" to="#99d0b5" angle=60
+ active-gradient from="#89b6a0" to="#0fc0d0" angle=90
inactive-gradient from="#252832" to="#676775" angle=45
}
@@ -250,24 +211,32 @@ layout {
// off
// hide-when-single-tab
place-within-column
- gap 3
- width 6
+ gap 0
+ width 10
length total-proportion=0.8
// position "bottom"
- gaps-between-tabs 3
- // corner-radius 8
- active-color "#99d0b5"
- // inactive-color "gray"
- active-gradient from="#1f5c9a" to="#99d0b5" angle=180
- inactive-gradient from="#252832" to="#676775" angle=180
+ gaps-between-tabs 6
+ corner-radius 2
+ // active-color "#89b6a0"
+ // inactive-color "#ccbe99"
+ active-gradient from="#0fc0d0" to="#89b6a0" angle=180
+ inactive-gradient from="#000000" to="#ccbe99" angle=180
}
}
-// Add lines like this to spawn processes at startup.
-// Note that running niri as a session supports xdg-desktop-autostart,
-// which may be more convenient to use.
-// See the binds section below for more spawn examples.
-// spawn-at-startup "alacritty" "-e" "fish"
+gestures {
+ dnd-edge-view-scroll {
+ trigger-width 200
+ delay-ms 200
+ max-speed 4000
+ }
+
+ dnd-edge-workspace-switch {
+ trigger-height 100
+ delay-ms 200
+ max-speed 4000
+ }
+}
// Uncomment this line to ask the clients to omit their client-side decorations if possible.
// If the client will specifically ask for CSD, the request will be honored.
@@ -295,6 +264,12 @@ animations {
slowdown 0.4
}
+blur {
+ passes 3
+ noise 0.1
+ saturation 1.5
+}
+
// Window rules let you adjust behavior for individual windows.
// Find more information on the wiki:
// https://github.com/YaLTeR/niri/wiki/Configuration:-Window-Rules
@@ -306,12 +281,22 @@ layer-rule {
}
layer-rule {
- match namespace="notifications"
match namespace="rofi"
shadow { on; }
}
+layer-rule {
+ match layer="top"
+ match layer="overlay"
+ match namespace="notifications"
+ match namespace="rofi"
+
+ background-effect {
+ xray false
+ }
+}
+
// Work around WezTerm's initial configure bug
// by setting an empty default-column-width.
window-rule {
@@ -324,21 +309,35 @@ window-rule {
window-rule {
match app-id="GLava"
+ match app-id="com.libretro.RetroArch"
+
border { off; }
shadow { off; }
}
window-rule {
- match app-id="Alacritty"
+ match app-id=r#"^[aA]+lacritty"#
match app-id="Mattermost"
+ match app-id="org.telegram.desktop"
+
+ default-column-width { fixed 770; }
+
+ background-effect {
+ blur true
+ xray false
+ }
+}
+
+window-rule {
+ match app-id="org.pwmt.zathura"
- default-column-width { proportion 0.31; }
+ default-column-width { fixed 1100; }
}
window-rule {
match app-id="org.qutebrowser.qutebrowser"
- default-column-width { proportion 0.69; }
+ default-column-width { fixed 1150; }
}
// Example: block out two password managers from screen capture.
@@ -361,51 +360,45 @@ window-rule {
}
spawn-at-startup "pipewire-restart"
-spawn-at-startup "waybar_launch"
spawn-at-startup "playerctld" "daemon"
spawn-at-startup "mpd-restart"
spawn-at-startup "blueman-applet"
-spawn-at-startup "mako"
-spawn-at-startup "setsessionenv"
spawn-at-startup "bash" "-c" "GTK_IM_MODULE= fcitx5 -d"
spawn-at-startup "xwayland-satellite"
spawn-at-startup "setsessionenv"
+// spawn-at-startup "qs" "-c" "noctalia-shell"
+spawn-at-startup "dsearch" "serve"
+spawn-at-startup "dms" "run"
environment {
DISPLAY ":0"
TERM "alacritty"
+ QT_QPA_PLATFORM "wayland;xcb"
+ QT_QPA_PLATFORMTHEME "gtk3"
+ QT_QPA_PLATFORMTHEME_QT6 "gtk3"
}
-spawn-at-startup "gsettings" "set" "org.gnome.desktop.interface" "gtk-theme" "Breeze"
-spawn-at-startup "gsettings" "set" "org.gnome.desktop.interface" "icon-theme" "Arc"
+// spawn-at-startup "gsettings" "set" "org.gnome.desktop.interface" "gtk-theme" "Breeze"
+// spawn-at-startup "gsettings" "set" "org.gnome.desktop.interface" "icon-theme" "Arc"
spawn-at-startup "gsettings" "set" "org.gnome.desktop.interface" "font-name" "monospace 10"
spawn-at-startup "gsettings" "set" "org.gnome.desktop.interface" "color-scheme" "prefer-dark"
-spawn-at-startup "swaybg" "-i" "/home/yaroslav/.config/wall1.png" "-m" "fill"
-
-// Just a nice jingle on startup because why not
-spawn-at-startup "canberra-gtk-play" "-i" "Oxygen-Sys-App-Positive"
-
binds {
- // Keys consist of modifiers separated by + signs, followed by an XKB key name
- // in the end. To find an XKB name for a particular key, you may use a program
- // like wev.
- //
// "Mod" is a special modifier equal to Super when running on a TTY, and to Alt
// when running as a winit window.
//
// Most actions that you can bind here can also be invoked programmatically with
// `niri msg action do-something`.
- // Mod-Shift-/, which is usually the same as Mod-?,
- // shows a list of important hotkeys.
- Mod+Shift+Slash { show-hotkey-overlay; }
-
- // Suggested binds for running programs: terminal, app launcher, screen locker.
Mod+Return { spawn "alacritty"; }
- Mod+D { spawn "rofi" "-show" "drun" "-sidebar-mode" "-modi" "drun,run,filebrowser,ssh,combi"; }
- Mod+X { spawn "lock-color"; }
- Mod+Shift+X { spawn "lock-color" "screenon"; }
+
+ // Noctalia
+ Mod+S { toggle-overview; }
+ XF86VoiceCommand { toggle-overview; } // For my remote
+
+ // Keyboard pointer control
+ Mod+V { spawn "wl-kbptr" "-o" "modes=floating,click" "-o" "mode_floating.source=detect"; }
+ Mod+Shift+V { spawn "wl-kbptr" "-o" "modes=tile,bisect"; }
// Example volume keys mappings for PipeWire & WirePlumber.
// The allow-when-locked=true property makes them work even when the session is locked.
@@ -415,6 +408,10 @@ binds {
XF86AudioMicMute allow-when-locked=true { spawn "wpctl" "set-mute" "@DEFAULT_AUDIO_SOURCE@" "toggle"; }
+ XF86AudioPrev allow-when-locked=true { spawn "lmc" "prev"; }
+ XF86AudioPlay allow-when-locked=true { spawn "lmc" "toggle"; }
+ XF86AudioNext allow-when-locked=true { spawn "lmc" "next"; }
+
Mod+Shift+F5 allow-when-locked=true { spawn "lmc" "back" "5"; }
Mod+F5 allow-when-locked=true { spawn "lmc" "prev"; }
Mod+F6 allow-when-locked=true { spawn "lmc" "toggle"; }
@@ -516,22 +513,22 @@ binds {
// To avoid scrolling through workspaces really fast, you can use
// the cooldown-ms property. The bind will be rate-limited to this value.
// You can set a cooldown on any bind, but it's most useful for the wheel.
- Mod+WheelScrollDown cooldown-ms=200 { focus-workspace-down; }
- Mod+WheelScrollUp cooldown-ms=200 { focus-workspace-up; }
- Mod+Ctrl+WheelScrollDown cooldown-ms=200 { move-column-to-workspace-down; }
- Mod+Ctrl+WheelScrollUp cooldown-ms=200 { move-column-to-workspace-up; }
+ Mod+WheelScrollDown { focus-workspace-down; }
+ Mod+WheelScrollUp { focus-workspace-up; }
+ Mod+Ctrl+WheelScrollDown { move-column-to-workspace-down; }
+ Mod+Ctrl+WheelScrollUp { move-column-to-workspace-up; }
- Mod+WheelScrollRight cooldown-ms=200 { focus-column-right; }
- Mod+WheelScrollLeft cooldown-ms=200 { focus-column-left; }
- Mod+Ctrl+WheelScrollRight cooldown-ms=200 { move-column-right; }
- Mod+Ctrl+WheelScrollLeft cooldown-ms=200 { move-column-left; }
+ Mod+WheelScrollRight { focus-column-right; }
+ Mod+WheelScrollLeft { focus-column-left; }
+ Mod+Ctrl+WheelScrollRight { move-column-right; }
+ Mod+Ctrl+WheelScrollLeft { move-column-left; }
// Usually scrolling up and down with Shift in applications results in
// horizontal scrolling; these binds replicate that.
- Mod+Shift+WheelScrollDown cooldown-ms=200 { focus-column-right; }
- Mod+Shift+WheelScrollUp cooldown-ms=200 { focus-column-left; }
- Mod+Ctrl+Shift+WheelScrollDown cooldown-ms=200 { move-column-right; }
- Mod+Ctrl+Shift+WheelScrollUp cooldown-ms=200 { move-column-left; }
+ Mod+Shift+WheelScrollDown { focus-column-right; }
+ Mod+Shift+WheelScrollUp { focus-column-left; }
+ Mod+Ctrl+Shift+WheelScrollDown { move-column-right; }
+ Mod+Ctrl+Shift+WheelScrollUp { move-column-left; }
// Similarly, you can bind touchpad scroll "ticks".
// Touchpad scrolling is continuous, so for these binds it is split into
@@ -598,8 +595,9 @@ binds {
Mod+R { switch-preset-column-width; }
Mod+Shift+R { switch-preset-window-height; }
Mod+Ctrl+R { reset-window-height; }
- Mod+F { maximize-column; }
+ Mod+F { maximize-window-to-edges; }
Mod+Shift+F { fullscreen-window; }
+ Mod+Ctrl+F { maximize-column; }
Mod+C { center-column; }
// Finer width adjustments.
@@ -610,12 +608,12 @@ binds {
// * adjust width as a percentage of screen width: "-10%" or "+10%"
// Pixel sizes use logical, or scaled, pixels. I.e. on an output with scale 2.0,
// set-column-width "100" will make the column occupy 200 physical screen pixels.
- Mod+Minus { set-column-width "-10%"; }
- Mod+Equal { set-column-width "+10%"; }
+ Mod+Minus { set-column-width "-5%"; }
+ Mod+Equal { set-column-width "+5%"; }
// Finer height adjustments when in column with other windows.
- Mod+Shift+Minus { set-window-height "-10%"; }
- Mod+Shift+Equal { set-window-height "+10%"; }
+ Mod+Shift+Minus { set-window-height "-5%"; }
+ Mod+Shift+Equal { set-window-height "+5%"; }
// Switch between floating and tiling.
Mod+Shift+Space { toggle-window-floating; }
@@ -626,34 +624,16 @@ binds {
// rather than stacked on top of each other.
Mod+W { toggle-column-tabbed-display; }
- // Actions to switch layouts.
- // Note: if you uncomment these, make sure you do NOT have
- // a matching layout switch hotkey configured in xkb options above.
- // Having both at once on the same hotkey will break the switching,
- // since it will switch twice upon pressing the hotkey (once by xkb, once by niri).
- // Mod+Space { switch-layout "next"; }
- // Mod+Shift+Space { switch-layout "prev"; }
-
Print { screenshot; }
Ctrl+Print { screenshot-screen; }
Alt+Print { screenshot-window; }
- Mod+Print { spawn "swayrecord"; }
-
- // The quit action will show a confirmation dialog to avoid accidental exits.
- Mod+Shift+E { spawn "rofi" "-show" "session" "-matching" "prefix" "-modi" "session:rofisession"; }
// Powers off the monitors. To turn them back on, do any input like
// moving the mouse or pressing any other key.
Mod+Shift+P { power-off-monitors; }
- // Mako commands
- Mod+Ctrl+Space { spawn "makoctl" "dismiss"; }
- Mod+Ctrl+Shift+Space { spawn "makoctl" "restore"; }
-
// Menus/Quick actions
Mod+F1 { spawn "menuman"; }
- Mod+F2 { spawn "menumako"; }
- Mod+F3 { spawn "rofi" "-show" "display" "-modi" "display:rofidisplay"; }
Mod+F4 { spawn "menublk"; }
Mod+F10 { spawn "chcolors"; }
Mod+F12 { spawn "rofi" "-show" "tz" "-modi" "tz:rofitz"; }
@@ -666,6 +646,7 @@ binds {
Mod+M { spawn "sh" "-c" "$TERM -e ncmpcpp"; }
Mod+A { spawn "sh" "-c" "$TERM -T 'neomutt' -e neomutt"; }
Mod+N { spawn "sh" "-c" "$TERM -T 'newsboat' -e newsboat && killall -42 waybar"; }
+ Mod+B { spawn "sh" "-c" "$TERM -T 'calcurse' -e calcurse"; }
Mod+T { spawn "toggletorrent"; }
Mod+Ctrl+T { spawn "launch-transmission"; }
@@ -676,6 +657,11 @@ binds {
Mod+Ctrl+Shift+apostrophe { spawn "menupass" "-s"; }
}
-switch-events {
- lid-close { spawn "swaysession" "suspend"; }
-}
+include "local.kdl"
+// include "noctalia.kdl"
+// include "noctalia-binds.kdl"
+include "dms/binds.kdl"
+include "dms/colors.kdl"
+include "dms/layout.kdl"
+include "dms/cursor.kdl"
+include "dms/wpblur.kdl"
diff --git a/dotfiles/.config/niri/dms/alttab.kdl b/dotfiles/.config/niri/dms/alttab.kdl
new file mode 100644
index 0000000..89f82bf
--- /dev/null
+++ b/dotfiles/.config/niri/dms/alttab.kdl
@@ -0,0 +1,10 @@
+// ! DO NOT EDIT !
+ // ! AUTO-GENERATED BY DMS !
+ // ! CHANGES WILL BE OVERWRITTEN !
+ // ! PLACE YOUR CUSTOM CONFIGURATION ELSEWHERE !
+
+ recent-windows {
+ highlight {
+ corner-radius 1
+ }
+ }
diff --git a/dotfiles/.config/niri/dms/binds.kdl b/dotfiles/.config/niri/dms/binds.kdl
new file mode 100644
index 0000000..c324b2e
--- /dev/null
+++ b/dotfiles/.config/niri/dms/binds.kdl
@@ -0,0 +1,88 @@
+binds {
+ // === Application Launchers ===
+ Mod+D hotkey-overlay-title="Application Launcher" {
+ spawn "dms" "ipc" "call" "spotlight" "toggle";
+ }
+ Mod+Shift+D {
+ spawn-sh "dms ipc call widget openWith launcherButton files";
+ }
+ // Mod+V hotkey-overlay-title="Clipboard Manager" {
+ // spawn "dms" "ipc" "call" "clipboard" "toggle";
+ // }
+
+ Mod+Shift+E hotkey-overlay-title="Power Menu: Toggle" { spawn "dms" "ipc" "call" "powermenu" "toggle"; }
+
+ Ctrl+Shift+Escape hotkey-overlay-title="Task Manager" {
+ spawn "dms" "ipc" "call" "processlist" "focusOrToggle";
+ }
+ Mod+Backslash { spawn-sh "dms ipc call dash open overview"; }
+ Mod+Shift+Backslash { spawn-sh "dms ipc call dash open weather"; }
+ Mod+Ctrl+Backslash { spawn-sh "dms ipc call dash open media"; }
+ Mod+F2 { spawn-sh "dms ipc call control-center toggle"; }
+ Mod+F3 hotkey-overlay-title="Settings" {
+ spawn "dms" "ipc" "call" "settings" "focusOrToggle";
+ }
+
+ Mod+Ctrl+Space { spawn "dms" "ipc" "call" "notifications" "dismissAllPopups"; }
+ Mod+Shift+Ctrl+Space hotkey-overlay-title="Notification Center" {
+ spawn "dms" "ipc" "call" "notifications" "toggle";
+ }
+
+ // === Security ===
+ Mod+X hotkey-overlay-title="Lock Screen" {
+ spawn "dms" "ipc" "call" "lock" "lock";
+ }
+
+ // === Audio Controls ===
+ // XF86AudioRaiseVolume allow-when-locked=true {
+ // spawn "dms" "ipc" "call" "audio" "increment" "3";
+ // }
+ // XF86AudioLowerVolume allow-when-locked=true {
+ // spawn "dms" "ipc" "call" "audio" "decrement" "3";
+ // }
+ // XF86AudioMute allow-when-locked=true {
+ // spawn "dms" "ipc" "call" "audio" "mute";
+ // }
+ // XF86AudioMicMute allow-when-locked=true {
+ // spawn "dms" "ipc" "call" "audio" "micmute";
+ // }
+ // XF86AudioPause allow-when-locked=true {
+ // spawn "dms" "ipc" "call" "mpris" "playPause";
+ // }
+ // XF86AudioPlay allow-when-locked=true {
+ // spawn "dms" "ipc" "call" "mpris" "playPause";
+ // }
+ // XF86AudioPrev allow-when-locked=true {
+ // spawn "dms" "ipc" "call" "mpris" "previous";
+ // }
+ // XF86AudioNext allow-when-locked=true {
+ // spawn "dms" "ipc" "call" "mpris" "next";
+ // }
+ // Ctrl+XF86AudioRaiseVolume allow-when-locked=true {
+ // spawn "dms" "ipc" "call" "mpris" "increment" "3";
+ // }
+ // Ctrl+XF86AudioLowerVolume allow-when-locked=true {
+ // spawn "dms" "ipc" "call" "mpris" "decrement" "3";
+ // }
+
+ // === Brightness Controls ===
+ XF86MonBrightnessUp allow-when-locked=true {
+ spawn "dms" "ipc" "call" "brightness" "increment" "5" "";
+ }
+ XF86MonBrightnessDown allow-when-locked=true {
+ spawn "dms" "ipc" "call" "brightness" "decrement" "5" "";
+ }
+ Mod+Alt+Up allow-when-locked=true {
+ spawn "dms" "ipc" "call" "brightness" "increment" "5" "";
+ }
+ Mod+Alt+Down allow-when-locked=true {
+ spawn "dms" "ipc" "call" "brightness" "decrement" "5" "";
+ }
+
+ // === System Controls ===
+ Mod+Escape allow-inhibiting=false { toggle-keyboard-shortcuts-inhibit; }
+}
+
+switch-events {
+ lid-close { spawn "loginctl" "suspend"; }
+}
diff --git a/dotfiles/.config/niri/dms/colors.kdl b/dotfiles/.config/niri/dms/colors.kdl
new file mode 100644
index 0000000..37504be
--- /dev/null
+++ b/dotfiles/.config/niri/dms/colors.kdl
@@ -0,0 +1,39 @@
+// ! Auto-generated file. Do not edit directly.
+// Remove `include "dms/colors.kdl"` from your config to override.
+
+layout {
+ background-color "transparent"
+
+ focus-ring {
+ active-color "#52d7f0"
+ inactive-color "#919191"
+ urgent-color "#ffb4ab"
+ }
+
+ border {
+ active-color "#52d7f0"
+ inactive-color "#919191"
+ urgent-color "#ffb4ab"
+ }
+
+ shadow {
+ color "#00000070"
+ }
+
+ tab-indicator {
+ active-color "#52d7f0"
+ inactive-color "#919191"
+ urgent-color "#ffb4ab"
+ }
+
+ insert-hint {
+ color "#52d7f080"
+ }
+}
+
+recent-windows {
+ highlight {
+ active-color "#004e5a"
+ urgent-color "#ffb4ab"
+ }
+}
diff --git a/dotfiles/.config/niri/dms/cursor.kdl b/dotfiles/.config/niri/dms/cursor.kdl
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/dotfiles/.config/niri/dms/cursor.kdl
diff --git a/dotfiles/.config/niri/dms/layout.kdl b/dotfiles/.config/niri/dms/layout.kdl
new file mode 100644
index 0000000..224f927
--- /dev/null
+++ b/dotfiles/.config/niri/dms/layout.kdl
@@ -0,0 +1,22 @@
+// ! DO NOT EDIT !
+ // ! AUTO-GENERATED BY DMS !
+ // ! CHANGES WILL BE OVERWRITTEN !
+ // ! PLACE YOUR CUSTOM CONFIGURATION ELSEWHERE !
+
+ layout {
+ gaps 6
+
+ border {
+ width 3
+ }
+
+ focus-ring {
+ width 3
+ }
+ }
+ window-rule {
+ geometry-corner-radius 1
+ clip-to-geometry true
+ tiled-state true
+ draw-border-with-background false
+ }
diff --git a/dotfiles/.config/niri/dms/outputs.kdl b/dotfiles/.config/niri/dms/outputs.kdl
new file mode 100644
index 0000000..f56685f
--- /dev/null
+++ b/dotfiles/.config/niri/dms/outputs.kdl
@@ -0,0 +1,14 @@
+// Auto-generated by DMS - do not edit manually
+
+output "HDMI-A-1" {
+ mode "1920x1080@74.973"
+ scale 1
+ position x=0 y=360
+}
+
+output "DP-1" {
+ mode "2560x1440@165.000"
+ scale 1
+ position x=1920 y=0
+}
+
diff --git a/dotfiles/.config/niri/dms/windowrules.kdl b/dotfiles/.config/niri/dms/windowrules.kdl
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/dotfiles/.config/niri/dms/windowrules.kdl
diff --git a/dotfiles/.config/niri/dms/wpblur.kdl b/dotfiles/.config/niri/dms/wpblur.kdl
new file mode 100644
index 0000000..3d58802
--- /dev/null
+++ b/dotfiles/.config/niri/dms/wpblur.kdl
@@ -0,0 +1,9 @@
+// ! DO NOT EDIT !
+// ! AUTO-GENERATED BY DMS !
+// ! CHANGES WILL BE OVERWRITTEN !
+// ! PLACE YOUR CUSTOM CONFIGURATION ELSEWHERE !
+
+layer-rule {
+ match namespace="dms:blurwallpaper"
+ place-within-backdrop true
+}
diff --git a/dotfiles/.config/niri/noctalia-binds.kdl b/dotfiles/.config/niri/noctalia-binds.kdl
new file mode 100644
index 0000000..ca104cc
--- /dev/null
+++ b/dotfiles/.config/niri/noctalia-binds.kdl
@@ -0,0 +1,24 @@
+binds {
+ Mod+D { spawn-sh "qs -c noctalia-shell ipc call launcher toggle"; }
+ // this isn't dry but whatever
+ Menu { spawn-sh "qs -c noctalia-shell ipc call launcher toggle"; }
+
+ Mod+Ctrl+Shift+Space { spawn-sh "qs -c noctalia-shell ipc call notifications toggleHistory"; }
+ Mod+Ctrl+Space { spawn-sh "qs -c noctalia-shell ipc call notifications invokeDefaultAndDismiss"; }
+
+ Mod+Shift+E { spawn-sh "qs -c noctalia-shell ipc call sessionMenu toggle"; }
+ Mod+X { spawn-sh "qs -c noctalia-shell ipc call lockScreen lock"; }
+
+ Mod+F3 { spawn-sh "qs -c noctalia-shell ipc call settings open"; }
+ Mod+Backslash { spawn-sh "qs -c noctalia-shell ipc call controlCenter toggle"; }
+ Mod+Shift+Backslash { spawn-sh "qs -c noctalia-shell ipc call calendar toggle"; }
+}
+
+switch-events {
+ lid-close { spawn "qs" "-c" "noctalia-shell" "ipc" "call" "sessionMenu" "lockAndSuspend"; }
+}
+
+layer-rule {
+ match namespace="^noctalia-overview*"
+ place-within-backdrop true
+}
diff --git a/dotfiles/.config/niri/noctalia.kdl b/dotfiles/.config/niri/noctalia.kdl
new file mode 100644
index 0000000..872e93c
--- /dev/null
+++ b/dotfiles/.config/niri/noctalia.kdl
@@ -0,0 +1,35 @@
+layout {
+
+ focus-ring {
+ active-color "#ffc799"
+ inactive-color "#0c0c0c"
+ urgent-color "#ff8080"
+ }
+
+ border {
+ active-color "#ffc799"
+ inactive-color "#0c0c0c"
+ urgent-color "#ff8080"
+ }
+
+ shadow {
+ color "#00000070"
+ }
+
+ tab-indicator {
+ active-color "#ffc799"
+ inactive-color "#e66800"
+ urgent-color "#ff8080"
+ }
+
+ insert-hint {
+ color "#ffc79980"
+ }
+}
+
+recent-windows {
+ highlight {
+ active-color "#ffc799"
+ urgent-color "#ff8080"
+ }
+}