{ 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 fastfetch = "directory"; fcitx5 = "directory"; fontconfig = "directory"; git = "directory"; imv = "directory"; "nautilus-python" = "directory"; nomarchy = "directory"; "nomarchy-skill" = "directory"; uwsm = "directory"; wiremix = "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; # Generate the xdg.configFile attribute set makeMapping = name: type: let source = if userConfigDir != null 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 // { # mako reads ~/.config/mako/config by default. The themed Nomarchy # config (urgency rules, app filters, button handlers) lives under # nomarchy/default/mako/core.ini for organizational reasons, so wire # it explicitly here. Without this, mako silently falls back to its # built-in defaults and every Nomarchy notification customization is # inert. "mako/config".source = lib.mkDefault ./config/nomarchy/default/mako/core.ini; }; home.file.".XCompose" = lib.mkDefault { source = ./config/nomarchy/default/xcompose; }; }