wry, many thing
This commit is contained in:
parent
6e62eccfba
commit
848ed62c5d
47 changed files with 1598 additions and 1201 deletions
|
|
@ -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" ];
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue