{ lib, flakeRoot, ... }: let programName = "eww"; # --- Path to the program's assets in the flake --- programAssets = "${flakeRoot}/assets/system/conf/${programName}"; # --- Read all files in the asset directory --- programFiles = builtins.readDir programAssets; # --- Generate attrset of file contents --- files = lib.genAttrs (builtins.attrNames programFiles) (name: { text = builtins.readFile "${programAssets}/${name}"; }); in { # --- Top-level toggle for this module --- options.enableEww = lib.mkEnableOption "Enable eww widgets"; # --- Configuration only applied if enabled --- config = let # Assign enableProgram inside config to match the toggle option enableProgram = config.enableEww or false; # Determine user safely after config exists username = config.defaultUser or "henrov"; # User's XDG config path for eww configDir = "/home/${username}/.config/${programName}"; in lib.mkIf enableProgram { # --- Top-level container for all apps --- myApps = { eww = { enable = true; assetsDir = programAssets; files = files; user = username; # Symbolic package reference; actual package should be assigned elsewhere package = "eww"; }; }; # --- Home Manager deployment --- home-manager.users.${username} = { home.stateVersion = "26.05"; home.username = username; home.homeDirectory = "/home/${username}"; # Deploy all config files recursively home.file."${configDir}" = { source = programAssets; recursive = true; }; # Session variables for the program home.sessionVariables = { EWW_BIN = "${programName}"; }; # Wayland/Hyprland startup hooks wayland.windowManager.hyprland.settings = lib.mkForce { exec-once = [ "${programName} daemon" ]; exec = [ "${programName} open-many ${configDir}/widgets" ]; }; }; }; }