{ lib, pkgs, config, ... }: let # --- Module variables --- moduleName = "kitty"; username = config.defaultUser or "henrov"; # Path to program assets (relative, self-contained) assetPath = ../../../assets/system/conf/${moduleName}; # Read all files in the assets directory programFiles = builtins.readDir assetPath; files = lib.genAttrs (builtins.attrNames programFiles) (name: { src = "${assetPath}/${name}"; }); # Top-level toggle for this module enableProgram = config.enableKitty or true; in { # --- Declare the top-level toggle --- options.enableKitty = lib.mkEnableOption "Enable Kitty terminal integration"; # --- Only apply configuration if enabled --- config = lib.mkIf enableProgram { # Install kitty package system-wide environment.systemPackages = [ pkgs.kitty ]; # Kitty program configuration (home-manager) programs.kitty.enable = true; programs.kitty.extraConfig = '' # Include the Catppuccin-Mocha theme include themes/Catppuccin-Mocha.conf ''; # Deploy all config files to user's XDG config home-manager.users.${username} = { xdg.configFile = lib.mapAttrs' (name: value: { name = "${moduleName}/${name}"; value.source = value.src; }) files; }; }; }