{ lib, pkgs, config, npins, ... }: let inherit (lib) types; cfg = config.zpha.programs.niri; niri-nix = import "${npins.niri-nix}/lib" { self = npins.niri-nix; inherit lib; nixpkgs.legacyPackages."${pkgs.stdenv.hostPlatform.system}" = pkgs; }; in { options.zpha.programs.niri = { enable = lib.mkEnableOption "niri"; settings = lib.mkOption { type = with lib.types; let valueType = nullOr (oneOf [ bool int float str path (attrsOf valueType) (listOf valueType) ]) // { description = "Niri configuration value"; }; in types.submodule { freeformType = valueType; }; default = { }; }; extraConfig = lib.mkOption { type = types.lines; default = ""; }; finalConfig = lib.mkOption { type = types.lines; default = (niri-nix.mkNiriKDL cfg.settings) + "\n" + cfg.extraConfig; }; }; config = lib.mkIf cfg.enable { common.programs.niri.enable = true; users.users.zaphyra.maid = { file.xdg_config."niri/config.kdl".source = niri-nix.validatedConfigFor config.programs.niri.package cfg.finalConfig; }; }; }