{ config, lib, ... }: let nomarchyLib = import ../../lib { inherit lib; }; themePath = ../palettes + "/${config.nomarchy.theme}"; themeAppsPath = themePath + "/apps"; nordAppsPath = ../../features/desktop/hyprland/themes/nord; hyprlandThemePath = ../../features/desktop/hyprland/themes + "/${config.nomarchy.theme}"; # Check if theme has hyprland.conf in palette apps/ or feature themes/ hasHyprlandConf = builtins.pathExists (themeAppsPath + "/hyprland.conf"); hasHyprlandFeatureConf = builtins.pathExists (hyprlandThemePath + "/hyprland.conf"); hyprlandConfSource = if hasHyprlandConf then themeAppsPath + "/hyprland.conf" else if hasHyprlandFeatureConf then hyprlandThemePath + "/hyprland.conf" else nordAppsPath + "/hyprland.conf"; # Get palette for dynamic CSS generation palette = nomarchyLib.getPalette config.nomarchy.theme; in { xdg.configFile."nomarchy/current/theme" = { source = themePath; recursive = true; }; # Generate waybar.css if it doesn't exist in the theme # This provides the @background and @foreground variables used by the default style xdg.configFile."nomarchy/current/theme/waybar.css".text = '' @define-color background #${palette.base00}; @define-color foreground #${palette.base05}; @define-color accent #${palette.base0D}; ''; # Ensure theme-specific hyprland config exists # Lookup priority: palette apps/ > feature themes/ > nord fallback xdg.configFile."nomarchy/current/theme/apps/hyprland.conf" = lib.mkIf (!hasHyprlandConf) { source = if hasHyprlandFeatureConf then hyprlandThemePath + "/hyprland.conf" else nordAppsPath + "/hyprland.conf"; }; # Legacy compatibility: symlink apps/hyprland.conf to root for scripts expecting old path xdg.configFile."nomarchy/current/theme/hyprland.conf" = { source = hyprlandConfSource; }; # Rofi fallback support xdg.configFile."rofi/config.rasi" = lib.mkIf (builtins.pathExists (themeAppsPath + "/rofi.rasi")) { source = themeAppsPath + "/rofi.rasi"; }; # Walker fallback support xdg.configFile."nomarchy/current/theme/apps/walker/style.css" = lib.mkIf (!builtins.pathExists (themeAppsPath + "/walker/style.css")) { text = '' * { color: #${palette.base05}; } #window { background-color: #${palette.base00}; } .item.active { background-color: #${palette.base03}; color: #${palette.base0B}; } ''; }; xdg.configFile."nomarchy/current/theme.name".text = config.nomarchy.theme; # Expose branding assets xdg.configFile."nomarchy/branding/logo.png".source = ../../core/branding/logo.png; xdg.configFile."nomarchy/branding/logo.txt".source = ../../core/branding/logo.txt; xdg.configFile."nomarchy/branding/logo.svg".source = ../../core/branding/logo.svg; xdg.configFile."nomarchy/branding/icon.png".source = ../../core/branding/icon.png; xdg.configFile."nomarchy/branding/icon.txt".source = ../../core/branding/icon.txt; # Expose all themes to the system via local share for script accessibility # We filter out images to prevent Nix Store bloat xdg.dataFile."nomarchy/themes".source = builtins.path { name = "nomarchy-themes-no-images"; path = ../palettes; filter = path: type: let baseName = baseNameOf path; in ! (type == "regular" && ( lib.hasSuffix ".jpg" baseName || lib.hasSuffix ".png" baseName || lib.hasSuffix ".jpeg" baseName )); }; # Nautilus python extensions xdg.dataFile."nautilus-python/extensions/localsend.py".source = ../../core/home/config/nautilus-python/extensions/localsend.py; }