wry, many thing

This commit is contained in:
atagen 2026-04-08 11:43:10 +10:00
parent 6e62eccfba
commit 848ed62c5d
47 changed files with 1598 additions and 1201 deletions

View file

@ -8,9 +8,59 @@
}:
let
inherit (config) rice;
inherit (inputs.niri.lib.kdl) leaf node flag serialize;
niri = getFlakePkg' inputs.niri "niri-unstable";
xwayland-satellite = getFlakePkg' inputs.niri "xwayland-satellite-unstable";
ui = rice.roles rice.palette.shortHex;
# serialize binds attrset to KDL
serializeBind = key: bind:
if bind ? action then
leaf key { action = bind.action; }
else if bind ? spawn then
leaf key bind.spawn
else
flag key;
bindsKdl = serialize.nodes [
(node "binds" [] (
lib.mapAttrsToList serializeBind config.niri.binds
))
];
niriConfig =
let
template = builtins.readFile ./niri.kdl;
baseConfig =
with rice;
lib.replaceStrings
[
"%CURSOR%"
"%ROUNDING%"
"%GAPS%"
"%BORDER%"
"%ACTIVE%"
"%INACTIVE%"
"%SATELLITE%"
]
[
cursor.name
(toString borders.rounding)
(toString borders.gaps)
(toString borders.thickness)
ui.highlight
ui.muted
(lib.getExe xwayland-satellite)
]
template;
in
baseConfig + "\n" + bindsKdl + "\n" + config.niri.extraConfig;
niriConfigFile = pkgs.writeText "niri-config.kdl" niriConfig;
niri-session-direct = pkgs.writeShellScript "niri-session-direct" ''
export NIRI_CONFIG="${niriConfigFile}"
systemctl --user import-environment
dbus-update-activation-environment --all
systemctl --user start niri-session-bridge.service &
@ -24,43 +74,25 @@ in
inputs.niri-s76.nixosModules.default
];
user.desktops.niri = {
enable = true;
config =
let
template = builtins.readFile ./niri.kdl;
baseConfig =
with rice;
lib.replaceStrings
[
"%CURSOR%"
"%ROUNDING%"
"%GAPS%"
"%BORDER%"
"%ACTIVE%"
"%INACTIVE%"
"%SATELLITE%"
]
[
cursor.name
(toString borders.rounding)
(toString borders.gaps)
(toString borders.thickness)
palette.shortHex.bright.yellow
palette.shortHex.normal.white
(lib.getExe xwayland-satellite)
]
template;
in
baseConfig;
options.niri = {
binds = lib.mkOption {
type = lib.types.attrsOf lib.types.anything;
default = { };
description = "Niri keybindings";
};
extraConfig = lib.mkOption {
type = lib.types.lines;
default = "";
description = "Extra KDL config appended to niri config";
};
};
environment.systemPackages = [
config.environment.systemPackages = [
niri
xwayland-satellite
];
environment.etc."greetd/wayland-sessions/niri.desktop".text = ''
config.environment.etc."greetd/wayland-sessions/niri.desktop".text = ''
[Desktop Entry]
Name=Niri
Comment=A scrollable-tiling Wayland compositor
@ -69,12 +101,12 @@ in
DesktopNames=niri
'';
programs.niri = {
config.programs.niri = {
enable = true;
package = niri;
};
services.niri-tag = {
config.services.niri-tag = {
enable = true;
prepopulate = 10;
strict = true;
@ -84,16 +116,16 @@ in
};
};
services.niri-s76-bridge.enable = true;
config.services.niri-s76-bridge.enable = true;
# niri runs directly from greetd (not as a user service),
# so that it stays inside the logind session scope for proper polkit/dbus access.
systemd.user.services.niri.wantedBy = lib.mkForce [ ];
systemd.user.services.niri.enable = lib.mkForce false;
config.systemd.user.services.niri.wantedBy = lib.mkForce [ ];
config.systemd.user.services.niri.enable = lib.mkForce false;
# bridge service to activate graphical-session.target for the direct-launched niri.
# waits for niri IPC readiness before pulling in the target.
systemd.user.services.niri-session-bridge = {
config.systemd.user.services.niri-session-bridge = {
unitConfig = {
Description = "Activate graphical-session.target for direct-launched niri";
BindsTo = [ "graphical-session.target" ];