{ lib, config, options, ... }: with lib; let profile = config.features.profile; has = path: lib.hasAttrByPath path options; setIf = path: value: lib.optionalAttrs (has path) (lib.setAttrByPath path value); in { options.features.profile = mkOption { type = types.enum [ "custom" "desktop" "laptop" "server" "camera" ]; default = "custom"; description = "Host feature profile. Use custom for fully explicit per-feature settings."; }; config = mkMerge [ (mkIf (profile == "desktop") (mkMerge [ (setIf [ "features" "base" "enable" ] (mkDefault true)) (setIf [ "features" "base" "preset" ] (mkDefault "full")) (setIf [ "features" "git" "enable" ] (mkDefault true)) (setIf [ "features" "dev" "enable" ] (mkDefault true)) (setIf [ "features" "dev" "preset" ] (mkDefault "full")) (setIf [ "features" "users" "enable" ] (mkDefault true)) (setIf [ "features" "network" "enable" ] (mkDefault true)) (setIf [ "features" "network" "tooling" "enable" ] (mkDefault true)) (setIf [ "features" "system" "enable" ] (mkDefault true)) (setIf [ "features" "system" "preset" ] (mkDefault "desktop")) (setIf [ "features" "sound" "enable" ] (mkDefault true)) ])) (mkIf (profile == "laptop") (mkMerge [ (setIf [ "features" "base" "enable" ] (mkDefault true)) (setIf [ "features" "base" "preset" ] (mkDefault "standard")) (setIf [ "features" "git" "enable" ] (mkDefault true)) (setIf [ "features" "dev" "enable" ] (mkDefault true)) (setIf [ "features" "dev" "preset" ] (mkDefault "standard")) (setIf [ "features" "users" "enable" ] (mkDefault true)) (setIf [ "features" "network" "enable" ] (mkDefault true)) (setIf [ "features" "network" "tooling" "enable" ] (mkDefault true)) (setIf [ "features" "system" "enable" ] (mkDefault true)) (setIf [ "features" "system" "preset" ] (mkDefault "desktop")) (setIf [ "features" "sound" "enable" ] (mkDefault true)) ])) (mkIf (profile == "server") (mkMerge [ (setIf [ "features" "users" "enable" ] (mkDefault true)) (setIf [ "features" "network" "enable" ] (mkDefault true)) (setIf [ "features" "network" "netbird" "enable" ] (mkDefault false)) (setIf [ "features" "network" "tooling" "enable" ] (mkDefault false)) (setIf [ "features" "system" "enable" ] (mkDefault true)) (setIf [ "features" "system" "preset" ] (mkDefault "minimal")) (setIf [ "features" "base" "enable" ] (mkDefault false)) (setIf [ "features" "git" "enable" ] (mkDefault false)) (setIf [ "features" "dev" "enable" ] (mkDefault false)) (setIf [ "features" "sound" "enable" ] (mkDefault false)) ])) (mkIf (profile == "camera") (mkMerge [ (setIf [ "features" "users" "enable" ] (mkDefault true)) (setIf [ "features" "network" "enable" ] (mkDefault true)) (setIf [ "features" "network" "netbird" "enable" ] (mkDefault false)) (setIf [ "features" "network" "tooling" "enable" ] (mkDefault false)) (setIf [ "features" "system" "enable" ] (mkDefault true)) (setIf [ "features" "system" "preset" ] (mkDefault "minimal")) (setIf [ "features" "base" "enable" ] (mkDefault false)) (setIf [ "features" "git" "enable" ] (mkDefault false)) (setIf [ "features" "dev" "enable" ] (mkDefault false)) (setIf [ "features" "sound" "enable" ] (mkDefault false)) ])) ]; }