{ lib, pkgs, flakeRoot, ... }: let # --- Program-specific variables --- programName = "eww"; username = "henrov"; # Assets directory in the flake programAssets = "${flakeRoot}/assets/system/conf/${programName}"; # Read all files dynamically programFiles = builtins.attrNames (builtins.readDir programAssets); # Generate attributes for each file files = lib.genAttrs programFiles (name: { src = "${programAssets}/${name}"; }); # Default enable toggle (can be overridden) enableProgram = true; in { # --- Top-level toggle option --- options.enable${lib.str.capitalize programName} = lib.mkEnableOption "Enable ${programName} widgets"; # --- Apply configuration only if enabled --- config = lib.mkIf enableProgram { # Container for all apps/services myApps = { ${programName} = { enable = true; assetsDir = programAssets; files = files; # User for home-manager deployment user = "henrov"; # Packages needed (symbolic reference) packages = [ "eww" ]; # Home Manager deployment homeManagerUsers = { "${username}" = { home.stateVersion = "26.05"; home.username = username; home.homeDirectory = "/home/${username}"; # Deploy all eww configs recursively home.file."${programAssets}" = { source = programAssets; 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 ${programAssets}/widgets" ]; }; }; }; }; }; }; }