2024-12-23 13:03:34 -05:00
|
|
|
{
|
|
|
|
config,
|
|
|
|
inputs,
|
|
|
|
lib,
|
|
|
|
pkgs,
|
|
|
|
...
|
|
|
|
}:
|
|
|
|
with lib; let
|
|
|
|
cfg = config.custom.desktops.niri;
|
2024-12-28 13:30:52 -05:00
|
|
|
|
|
|
|
# TODO: Use let bindings for hm config everywhere
|
|
|
|
hm = config.home-manager.users.${config.custom.username};
|
2024-12-23 13:03:34 -05:00
|
|
|
in {
|
|
|
|
options.custom.desktops.niri = {
|
|
|
|
enable = mkOption {default = false;};
|
2024-12-23 14:45:36 -05:00
|
|
|
polkit = mkOption {default = false;};
|
2024-12-23 13:03:34 -05:00
|
|
|
xwayland = mkOption {default = true;};
|
|
|
|
};
|
|
|
|
|
|
|
|
config = mkIf cfg.enable {
|
2024-12-31 12:44:17 -06:00
|
|
|
custom = {
|
|
|
|
desktops = mkIf config.custom.full {
|
|
|
|
niri = {
|
|
|
|
binds.enable = true;
|
|
|
|
input.enable = true;
|
|
|
|
layout.enable = true;
|
|
|
|
misc.enable = true;
|
|
|
|
output.enable = true;
|
|
|
|
rules.enable = true;
|
|
|
|
};
|
2024-12-26 19:06:11 -05:00
|
|
|
|
2024-12-31 12:44:17 -06:00
|
|
|
gnome = {
|
|
|
|
enable = true;
|
|
|
|
minimal = true;
|
|
|
|
};
|
2024-12-26 19:06:11 -05:00
|
|
|
};
|
2024-12-31 12:44:17 -06:00
|
|
|
|
2025-01-28 15:29:01 -06:00
|
|
|
services = {
|
|
|
|
# Enable rootless Xwayland
|
|
|
|
xwayland-satellite.enable = cfg.xwayland;
|
|
|
|
};
|
2024-12-23 13:03:34 -05:00
|
|
|
};
|
|
|
|
|
|
|
|
# https://github.com/YaLTeR/niri
|
|
|
|
# https://github.com/sodiboo/niri-flake
|
|
|
|
programs.niri = {
|
|
|
|
enable = true;
|
2024-12-28 13:30:52 -05:00
|
|
|
#// package = pkgs.niri; # nixpkgs
|
|
|
|
package = inputs.niri.packages.${pkgs.system}.default;
|
2024-12-23 13:03:34 -05:00
|
|
|
};
|
|
|
|
|
2024-12-28 13:30:52 -05:00
|
|
|
nixpkgs.overlays = [inputs.niri-flake.overlays.niri];
|
2024-12-23 13:03:34 -05:00
|
|
|
|
2025-01-01 11:46:16 -06:00
|
|
|
# Disable bundled KDE polkit agent by default
|
2024-12-23 13:03:34 -05:00
|
|
|
# https://github.com/sodiboo/niri-flake?tab=readme-ov-file#additional-notes
|
2024-12-23 14:45:36 -05:00
|
|
|
systemd.user.services.niri-flake-polkit.enable = cfg.polkit;
|
2024-12-23 13:03:34 -05:00
|
|
|
|
2024-12-31 12:44:17 -06:00
|
|
|
home-manager.sharedModules = [
|
|
|
|
{
|
|
|
|
programs.niri = {
|
|
|
|
package = config.programs.niri.package;
|
2024-12-23 13:03:34 -05:00
|
|
|
|
2024-12-31 12:44:17 -06:00
|
|
|
# https://github.com/YaLTeR/niri/wiki/Configuration:-Debug-Options
|
|
|
|
# https://github.com/sodiboo/niri-flake/blob/main/docs.md#programsnirisettingsdebug
|
|
|
|
settings.debug = {
|
2025-01-18 14:27:40 -06:00
|
|
|
#// disable-cursor-plane = []; # Software cursor
|
2024-12-31 12:44:17 -06:00
|
|
|
#// disable-direct-scanout = [];
|
|
|
|
};
|
2024-12-30 13:38:52 -06:00
|
|
|
};
|
2025-02-17 16:54:11 -06:00
|
|
|
|
|
|
|
# HACK: Replace read-only finalConfig until extraConfig is supported
|
|
|
|
# https://github.com/sodiboo/niri-flake/issues/825
|
|
|
|
xdg.configFile = {
|
|
|
|
# https://github.com/sodiboo/niri-flake/blob/59ed19d431324af3fcebbf623c081eae2e67ab97/flake.nix#L395
|
|
|
|
niri-config.enable = mkForce false;
|
|
|
|
|
|
|
|
# TODO: Move to niri-flake when supported
|
|
|
|
# HACK: Merge kdl nodes into module config
|
|
|
|
# https://github.com/sodiboo/niri-flake/blob/main/settings.nix
|
|
|
|
# https://github.com/sodiboo/niri-flake/blob/main/default-config.kdl.nix
|
|
|
|
"niri/config.kdl".text = with inputs.niri-flake.lib;
|
|
|
|
kdl.serialize.nodes (forEach hm.programs.niri.config (node:
|
|
|
|
if isAttrs node && node.name == "layout"
|
|
|
|
then
|
|
|
|
recursiveUpdate node {
|
|
|
|
children = with kdl;
|
|
|
|
node.children
|
|
|
|
++ [
|
|
|
|
# https://github.com/YaLTeR/niri/wiki/Configuration:-Layout#shadow
|
2025-02-18 13:06:50 -06:00
|
|
|
# (plain "shadow" [
|
|
|
|
# (flag "on")
|
|
|
|
# (leaf "inactive-color" "#00000000")
|
|
|
|
# ])
|
2025-02-17 16:54:11 -06:00
|
|
|
|
|
|
|
# https://github.com/YaLTeR/niri/wiki/Configuration:-Layout#tab-indicator
|
|
|
|
(plain "tab-indicator" [
|
|
|
|
(flag "place-within-column")
|
|
|
|
(leaf "active-color" "#d33682")
|
|
|
|
(leaf "inactive-color" "#d3368240")
|
|
|
|
(leaf "corner-radius" config.custom.rounding)
|
|
|
|
(leaf "gap" 2)
|
|
|
|
(leaf "gaps-between-tabs" 2)
|
|
|
|
(leaf "length" {total-proportion = 0.98;})
|
|
|
|
(leaf "width" (config.custom.border + 3))
|
|
|
|
])
|
|
|
|
];
|
|
|
|
}
|
|
|
|
else node));
|
|
|
|
};
|
2024-12-31 12:44:17 -06:00
|
|
|
}
|
|
|
|
];
|
2024-12-23 13:03:34 -05:00
|
|
|
};
|
|
|
|
}
|