{ lib, config, ... }: let # --- Program definition --- programName = "kitty"; # Assets directory (relative, self-contained) programAssets = ../../../assets/system/conf/${programName}; # Read all files in assets dir programFiles = builtins.readDir programAssets; # Map files → attrset files = lib.genAttrs (builtins.attrNames programFiles) (name: { src = "${programAssets}/${name}"; }); # Enable toggle (safe: defined before config) enableProgram = config.enableKitty or true; # Resolve user safely (top-level, not inside mkIf) user = config.defaultUser or "henrov"; in { # --- Option --- options.enableKitty = lib.mkEnableOption "Enable kitty terminal"; # --- Config --- config = lib.mkIf enableProgram { myApps.${programName} = { enable = true; assetsDir = programAssets; files = files; inherit user; # Program-specific metadata theme = "catppuccin-mocha"; }; # Actual system wiring (kept minimal + scoped) home-manager.users.${user} = { programs.kitty.enable = true; xdg.configFile = lib.mapAttrs' (name: value: { name = "kitty/${name}"; value.source = value.src; }) files; }; }; }