{ config, pkgs, lib, ... }: let configDir = ../../config; # Explicit list of config items to manage # This replaces dynamic builtins.readDir for clarity and faster evaluation configItems = { # Directories btop = "directory"; chromium = "directory"; elephant = "directory"; "environment.d" = "directory"; fastfetch = "directory"; fcitx5 = "directory"; fontconfig = "directory"; ghostty = "directory"; git = "directory"; hypr = "directory"; "hyprland-preview-share-picker" = "directory"; imv = "directory"; kitty = "directory"; lazygit = "directory"; nomarchy = "directory"; opencode = "directory"; systemd = "directory"; tmux = "directory"; Typora = "directory"; uwsm = "directory"; wiremix = "directory"; xournalpp = "directory"; # Files "brave-flags.conf" = "regular"; "chromium-flags.conf" = "regular"; "starship.toml" = "regular"; "xdg-terminals.list" = "regular"; }; # Files/directories handled elsewhere or not intended for ~/.config/ # - nomarchy.ttf: font file, not a config # - waybar: handled in waybar.nix # - walker: handled in walker.nix # - alacritty: handled in alacritty.nix # - swayosd: handled in swayosd.nix # Check for user overrides userConfigDir = config.nomarchy.configOverrides; hasUserOverrides = userConfigDir != null && builtins.pathExists userConfigDir; # Generate the xdg.configFile attribute set makeMapping = name: type: let hasUserOverride = hasUserOverrides && builtins.pathExists "${userConfigDir}/${name}"; source = if hasUserOverride then "${userConfigDir}/${name}" else "${configDir}/${name}"; in { inherit name; value = lib.mkDefault { inherit source; recursive = type == "directory"; }; }; configMappings = lib.mapAttrs' (name: type: makeMapping name type) configItems; in { xdg.configFile = configMappings; }