81 lines
3.4 KiB
Nix
81 lines
3.4 KiB
Nix
{
|
|
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))
|
|
]))
|
|
];
|
|
}
|