{ lib, pkgs, flakeRoot, ... }: let # --- Define user locally --- username = "henrov"; # --- Eww config directory in flake --- ewwAssetsDir = "${flakeRoot}/assets/system/conf/eww"; # --- Read all files in ewwAssetsDir dynamically --- ewwFiles = builtins.attrNames (builtins.readDir ewwAssetsDir); # --- Generate xdg.configFile entries for all files --- ewwConfigs = lib.genAttrs ewwFiles (name: { text = builtins.readFile "${ewwAssetsDir}/${name}"; }); # --- Full config directory path in user's config home --- ewwConfigDir = "/home/${username}/.config/eww"; in { flake.nixosModules.eww = { config, pkgs, lib, ... }: { options.mySystem.apps.eww.enable = lib.mkEnableOption "Enable Eww widgets"; config = lib.mkIf (config.mySystem.apps.eww.enable or false) { mySystem = { apps.wallpaper = { enable = true; packages = [ "eww" ]; # symbolic, actual package below }; }; # --- Home Manager user config --- home-manager.users.${username} = { home.stateVersion = "25.11"; home.username = username; home.homeDirectory = "/home/${username}"; # Deploy eww configs home.file."${ewwConfigDir}" = { source = ewwAssetsDir; recursive = true; }; # Session variables home.sessionVariables = { EWW_BIN = "${pkgs.eww}/bin/eww"; }; # Wayland/Hyprland startup hooks wayland.windowManager.hyprland.settings = lib.mkForce { exec-once = [ "eww daemon" ]; exec = [ "eww open-many ${ewwConfigDir}/widgets" ]; }; }; }; }; }