niri: enable blur

This commit is contained in:
2026-02-24 16:50:17 +08:00
parent 850f014a08
commit 0cefd0799d
2 changed files with 354 additions and 331 deletions
+41
View File
@@ -0,0 +1,41 @@
include "generated-config.kdl"
layout {
border {
on
}
}
blur {
passes 3
offset 4
noise 0.02
saturation 1.5
}
window-rule {
draw-border-with-background false
geometry-corner-radius 14.000000 14.000000 14.000000 14.000000
clip-to-geometry true
background-effect {
xray true
blur true
}
}
window-rule {
match is-floating=true
background-effect {
xray false
}
}
window-rule {
match app-id="kitty|foot|Alacritty|ghostty"
opacity 0.8
}
window-rule {
match app-id="org.gnome.Nautilus"
opacity 0.6
}
+313 -331
View File
@@ -3,6 +3,7 @@
lib, lib,
pkgs, pkgs,
assets, assets,
impure,
... ...
}: }:
let let
@@ -10,353 +11,334 @@ let
in in
{ {
config = lib.mkIf config.my.desktop.wm.niri.enable { config = lib.mkIf config.my.desktop.wm.niri.enable {
my.hm.programs.niri.settings = { my.hm = {
input = { xdg.configFile.niri-config.target = lib.mkForce "niri/generated-config.kdl";
focus-follows-mouse = { xdg.configFile."niri/config.kdl".source = impure.mkImpureLink ./config.kdl;
enable = true;
max-scroll-amount = "0%";
};
workspace-auto-back-and-forth = true;
};
layout = { programs.niri.settings = {
gaps = 23; input = {
center-focused-column = "on-overflow"; focus-follows-mouse = {
always-center-single-column = true; enable = true;
focus-ring.enable = false; max-scroll-amount = "0%";
border = {
enable = true;
width = 4;
inactive.color = "#2e2e3eee";
active.gradient = {
from = "#6186d6ee";
to = "#cba6f7ee";
angle = 180;
relative-to = "workspace-view";
}; };
workspace-auto-back-and-forth = true;
}; };
insert-hint = {
enable = true;
display.color = "rgba(42, 44, 54, 0.5)";
};
preset-column-widths = [
{ proportion = 0.33333; }
{ proportion = 0.4; }
{ proportion = 0.5; }
{ proportion = 0.6; }
{ proportion = 0.66667; }
{ proportion = 0.8; }
];
default-column-width.proportion = 0.8;
background-color = "transparent";
tab-indicator = {
width = 10;
place-within-column = true;
};
};
animations = { layout = {
enable = true; gaps = 23;
slowdown = 1.5; center-focused-column = "on-overflow";
workspace-switch.kind.spring = { always-center-single-column = true;
damping-ratio = 1.0; focus-ring.enable = false;
stiffness = 1000; border = {
epsilon = 0.0001; enable = true;
}; width = 4;
};
prefer-no-csd = true; inactive.color = "#2e2e3eee";
hotkey-overlay.skip-at-startup = true; active.gradient = {
from = "#6186d6ee";
clipboard.disable-primary = true; to = "#cba6f7ee";
angle = 180;
layer-rules = [ relative-to = "workspace-view";
{ };
matches = [ { namespace = "^wallpaper$"; } ];
place-within-backdrop = true;
}
{
matches = [ { namespace = "^waybar$"; } ];
opacity = 0.99;
}
];
overview.workspace-shadow.enable = false;
window-rules = [
{
geometry-corner-radius = {
bottom-left = 14.;
bottom-right = 14.;
top-left = 14.;
top-right = 14.;
}; };
clip-to-geometry = true; insert-hint = {
draw-border-with-background = false; enable = true;
} display.color = "rgba(42, 44, 54, 0.5)";
{ };
matches = [ { app-id = "kitty|foot|Alacritty|ghostty|wofi"; } ]; preset-column-widths = [
opacity = 0.8; { proportion = 0.33333; }
} { proportion = 0.4; }
{ { proportion = 0.5; }
matches = [ { app-id = "org.gnome.Nautilus"; } ]; { proportion = 0.6; }
opacity = 0.6; { proportion = 0.66667; }
} { proportion = 0.8; }
];
environment.NIXOS_OZONE_WL = "1";
spawn-at-startup = lib.mkBefore (
map (c: { command = c; }) [
(
[
"dbus-update-activation-environment"
"--systemd"
]
++ builtins.attrNames settings.environment
)
[
"${lib.getExe pkgs.swaybg}"
"-m"
"fill"
"-i"
(toString assets.wallpaper)
]
[
"wl-paste"
"--type"
"text"
"--watch"
"cliphist"
"store"
]
[
"wl-paste"
"--type"
"image"
"--watch"
"cliphist"
"store"
]
# TODO: Is there a better way?
[
"systemctl"
"restart"
"--user"
"noctalia-shell.service"
]
]
);
binds =
let
noctalia =
cmd:
[
"noctalia-shell"
"ipc"
"call"
]
++ (lib.splitString " " cmd);
in
with config.my.hm.lib.niri.actions;
{
"Mod+Return".action.spawn = [
"kitty"
"-1"
]; ];
"Mod+G".action.spawn = [ config.my.desktop.browser.default.command ]; default-column-width.proportion = 0.8;
"Mod+E".action.spawn = [ "nautilus" ]; background-color = "transparent";
"Mod+R".action.spawn = noctalia "launcher toggle"; tab-indicator = {
"Mod+V".action.spawn = noctalia "launcher clipboard"; width = 10;
"Mod+W".action.spawn = noctalia "launcher windows"; place-within-column = true;
"Ctrl+Alt+Escape".action.spawn = [ "missioncenter" ]; };
};
"XF86AudioRaiseVolume" = { animations = {
allow-when-locked = true; enable = true;
action.spawn = [ slowdown = 1.5;
"wpctl" workspace-switch.kind.spring = {
"set-volume" damping-ratio = 1.0;
"@DEFAULT_SINK@" stiffness = 1000;
"2%+" epsilon = 0.0001;
];
};
"XF86AudioLowerVolume" = {
allow-when-locked = true;
action.spawn = [
"wpctl"
"set-volume"
"@DEFAULT_SINK@"
"2%-"
];
};
"XF86AudioMute" = {
allow-when-locked = true;
action.spawn = noctalia "media playPause";
};
"Super+XF86AudioRaiseVolume" = {
allow-when-locked = true;
action.spawn = noctalia "media next";
};
"Super+XF86AudioLowerVolume" = {
allow-when-locked = true;
action.spawn = noctalia "media previous";
}; };
};
"XF86MonBrightnessUp" = { prefer-no-csd = true;
allow-when-locked = true; hotkey-overlay.skip-at-startup = true;
action.spawn = [
"brightnessctl"
"set"
"+5%"
];
};
"XF86MonBrightnessDown" = {
allow-when-locked = true;
action.spawn = [
"brightnessctl"
"set"
"5%-"
];
};
"Alt+XF86AudioRaiseVolume" = {
allow-when-locked = true;
action.spawn = [
"brightnessctl"
"set"
"+5%"
];
};
"Alt+XF86AudioLowerVolume" = {
allow-when-locked = true;
action.spawn = [
"brightnessctl"
"set"
"5%-"
];
};
"Mod+Q".action = close-window; clipboard.disable-primary = true;
"Mod+Left".action = focus-column-left; layer-rules = [
"Mod+Right".action = focus-column-right; {
"Mod+Up".action = focus-window-up; matches = [ { namespace = "^wallpaper$"; } ];
"Mod+Down".action = focus-window-down; place-within-backdrop = true;
}
];
overview.workspace-shadow.enable = false;
"Mod+Ctrl+Left".action = move-column-left; environment.NIXOS_OZONE_WL = "1";
"Mod+Ctrl+Right".action = move-column-right;
"Mod+Ctrl+Up".action = move-window-up;
"Mod+Ctrl+Down".action = move-window-down;
"Mod+Alt+Left".action = consume-or-expel-window-left; spawn-at-startup = lib.mkBefore (
"Mod+Alt+Right".action = consume-or-expel-window-right; map (c: { command = c; }) [
(
[
"dbus-update-activation-environment"
"--systemd"
]
++ builtins.attrNames settings.environment
)
"Mod+Shift+Left".action = focus-monitor-left; [
"Mod+Shift+Right".action = focus-monitor-right; "${lib.getExe pkgs.swaybg}"
"Mod+Shift+Up".action = focus-monitor-up; "-m"
"Mod+Shift+Down".action = focus-monitor-down; "fill"
"-i"
"Mod+Shift+Ctrl+Left".action = move-column-to-monitor-left; (toString assets.wallpaper)
"Mod+Shift+Ctrl+Right".action = move-column-to-monitor-right; ]
"Mod+Shift+Ctrl+Up".action = move-column-to-monitor-up; [
"Mod+Shift+Ctrl+Down".action = move-column-to-monitor-down; "wl-paste"
"--type"
"Mod+Page_Up".action = focus-workspace-up; "text"
"Mod+Page_Down".action = focus-workspace-down; "--watch"
"cliphist"
"Mod+Ctrl+Page_Up".action = move-column-to-workspace-up; "store"
"Mod+Ctrl+Page_Down".action = move-column-to-workspace-down; ]
[
"Mod+Shift+Page_Up".action = move-workspace-up; "wl-paste"
"Mod+Shift+Page_Down".action = move-workspace-down; "--type"
"image"
"Mod+L".action = switch-preset-column-width; "--watch"
"Mod+Shift+L".action = reset-window-height; "cliphist"
"Mod+M".action = maximize-column; "store"
"Mod+Shift+M".action = fullscreen-window; ]
"Mod+C".action = center-column; # TODO: Is there a better way?
"Mod+F".action = toggle-window-floating; [
"Mod+H".action = expand-column-to-available-width; "systemctl"
"Mod+T".action = toggle-column-tabbed-display; "restart"
"--user"
"Mod+Minus".action.set-column-width = "-10%"; "noctalia-shell.service"
"Mod+Equal".action.set-column-width = "+10%"; ]
"Mod+Shift+Minus".action.set-window-height = "-10%"; ]
"Mod+Shift+Equal".action.set-window-height = "+10%";
"Ctrl+Alt+A".action.screenshot = {
show-pointer = false;
};
# "Ctrl+Alt+A".action = screenshot;
"Print".action.screenshot-screen = {
show-pointer = false;
};
"Alt+Print".action.screenshot-window = [ ];
# "Alt+Print".action = screenshot-window;
"Mod+Shift+E".action = quit;
"Mod+O".action = toggle-overview;
"Super+Tab".action = toggle-overview;
"Mod+WheelScrollDown" = {
cooldown-ms = 150;
action = focus-workspace-down;
};
"Mod+WheelScrollUp" = {
cooldown-ms = 150;
action = focus-workspace-up;
};
"Mod+Ctrl+WheelScrollDown" = {
cooldown-ms = 150;
action = move-workspace-down;
};
"Mod+Ctrl+WheelScrollUp" = {
cooldown-ms = 150;
action = move-workspace-up;
};
"Mod+WheelScrollRight" = {
cooldown-ms = 150;
action = focus-column-right;
};
"Mod+WheelScrollLeft" = {
cooldown-ms = 150;
action = focus-column-left;
};
"Mod+Ctrl+WheelScrollRight" = {
cooldown-ms = 150;
action = move-column-right;
};
"Mod+Ctrl+WheelScrollLeft" = {
cooldown-ms = 150;
action = move-column-left;
};
"Mod+Shift+WheelScrollDown" = {
cooldown-ms = 150;
action = focus-column-right;
};
"Mod+Shift+WheelScrollUp" = {
cooldown-ms = 150;
action = focus-column-left;
};
"Mod+Ctrl+Shift+WheelScrollDown" = {
cooldown-ms = 150;
action = move-column-right;
};
"Mod+Ctrl+Shift+WheelScrollUp" = {
cooldown-ms = 150;
action = move-column-left;
};
}
// lib.attrsets.mergeAttrsList (
map (n: {
"Mod+${toString n}".action.focus-workspace = n;
"Mod+Shift+${toString n}".action.move-column-to-workspace = n;
}) (lib.range 0 9)
); );
binds =
let
noctalia =
cmd:
[
"noctalia-shell"
"ipc"
"call"
]
++ (lib.splitString " " cmd);
in
with config.my.hm.lib.niri.actions;
{
"Mod+Return".action.spawn = [
"kitty"
"-1"
];
"Mod+G".action.spawn = [ config.my.desktop.browser.default.command ];
"Mod+E".action.spawn = [ "nautilus" ];
"Mod+R".action.spawn = noctalia "launcher toggle";
"Mod+V".action.spawn = noctalia "launcher clipboard";
"Mod+W".action.spawn = noctalia "launcher windows";
"Ctrl+Alt+Escape".action.spawn = [ "missioncenter" ];
"XF86AudioRaiseVolume" = {
allow-when-locked = true;
action.spawn = [
"wpctl"
"set-volume"
"@DEFAULT_SINK@"
"2%+"
];
};
"XF86AudioLowerVolume" = {
allow-when-locked = true;
action.spawn = [
"wpctl"
"set-volume"
"@DEFAULT_SINK@"
"2%-"
];
};
"XF86AudioMute" = {
allow-when-locked = true;
action.spawn = noctalia "media playPause";
};
"Super+XF86AudioRaiseVolume" = {
allow-when-locked = true;
action.spawn = noctalia "media next";
};
"Super+XF86AudioLowerVolume" = {
allow-when-locked = true;
action.spawn = noctalia "media previous";
};
"XF86MonBrightnessUp" = {
allow-when-locked = true;
action.spawn = [
"brightnessctl"
"set"
"+5%"
];
};
"XF86MonBrightnessDown" = {
allow-when-locked = true;
action.spawn = [
"brightnessctl"
"set"
"5%-"
];
};
"Alt+XF86AudioRaiseVolume" = {
allow-when-locked = true;
action.spawn = [
"brightnessctl"
"set"
"+5%"
];
};
"Alt+XF86AudioLowerVolume" = {
allow-when-locked = true;
action.spawn = [
"brightnessctl"
"set"
"5%-"
];
};
"Mod+Q".action = close-window;
"Mod+Left".action = focus-column-left;
"Mod+Right".action = focus-column-right;
"Mod+Up".action = focus-window-up;
"Mod+Down".action = focus-window-down;
"Mod+Ctrl+Left".action = move-column-left;
"Mod+Ctrl+Right".action = move-column-right;
"Mod+Ctrl+Up".action = move-window-up;
"Mod+Ctrl+Down".action = move-window-down;
"Mod+Alt+Left".action = consume-or-expel-window-left;
"Mod+Alt+Right".action = consume-or-expel-window-right;
"Mod+Shift+Left".action = focus-monitor-left;
"Mod+Shift+Right".action = focus-monitor-right;
"Mod+Shift+Up".action = focus-monitor-up;
"Mod+Shift+Down".action = focus-monitor-down;
"Mod+Shift+Ctrl+Left".action = move-column-to-monitor-left;
"Mod+Shift+Ctrl+Right".action = move-column-to-monitor-right;
"Mod+Shift+Ctrl+Up".action = move-column-to-monitor-up;
"Mod+Shift+Ctrl+Down".action = move-column-to-monitor-down;
"Mod+Page_Up".action = focus-workspace-up;
"Mod+Page_Down".action = focus-workspace-down;
"Mod+Ctrl+Page_Up".action = move-column-to-workspace-up;
"Mod+Ctrl+Page_Down".action = move-column-to-workspace-down;
"Mod+Shift+Page_Up".action = move-workspace-up;
"Mod+Shift+Page_Down".action = move-workspace-down;
"Mod+L".action = switch-preset-column-width;
"Mod+Shift+L".action = reset-window-height;
"Mod+M".action = maximize-column;
"Mod+Shift+M".action = fullscreen-window;
"Mod+C".action = center-column;
"Mod+F".action = toggle-window-floating;
"Mod+H".action = expand-column-to-available-width;
"Mod+T".action = toggle-column-tabbed-display;
"Mod+Minus".action.set-column-width = "-10%";
"Mod+Equal".action.set-column-width = "+10%";
"Mod+Shift+Minus".action.set-window-height = "-10%";
"Mod+Shift+Equal".action.set-window-height = "+10%";
"Ctrl+Alt+A".action.screenshot = {
show-pointer = false;
};
# "Ctrl+Alt+A".action = screenshot;
"Print".action.screenshot-screen = {
show-pointer = false;
};
"Alt+Print".action.screenshot-window = [ ];
# "Alt+Print".action = screenshot-window;
"Mod+Shift+E".action = quit;
"Mod+O".action = toggle-overview;
"Super+Tab".action = toggle-overview;
"Mod+WheelScrollDown" = {
cooldown-ms = 150;
action = focus-workspace-down;
};
"Mod+WheelScrollUp" = {
cooldown-ms = 150;
action = focus-workspace-up;
};
"Mod+Ctrl+WheelScrollDown" = {
cooldown-ms = 150;
action = move-workspace-down;
};
"Mod+Ctrl+WheelScrollUp" = {
cooldown-ms = 150;
action = move-workspace-up;
};
"Mod+WheelScrollRight" = {
cooldown-ms = 150;
action = focus-column-right;
};
"Mod+WheelScrollLeft" = {
cooldown-ms = 150;
action = focus-column-left;
};
"Mod+Ctrl+WheelScrollRight" = {
cooldown-ms = 150;
action = move-column-right;
};
"Mod+Ctrl+WheelScrollLeft" = {
cooldown-ms = 150;
action = move-column-left;
};
"Mod+Shift+WheelScrollDown" = {
cooldown-ms = 150;
action = focus-column-right;
};
"Mod+Shift+WheelScrollUp" = {
cooldown-ms = 150;
action = focus-column-left;
};
"Mod+Ctrl+Shift+WheelScrollDown" = {
cooldown-ms = 150;
action = move-column-right;
};
"Mod+Ctrl+Shift+WheelScrollUp" = {
cooldown-ms = 150;
action = move-column-left;
};
}
// lib.attrsets.mergeAttrsList (
map (n: {
"Mod+${toString n}".action.focus-workspace = n;
"Mod+Shift+${toString n}".action.move-column-to-workspace = n;
}) (lib.range 0 9)
);
};
}; };
}; };
} }