huge refactor
This commit is contained in:
parent
03e5a47910
commit
1d4c8455ee
30 changed files with 972 additions and 697 deletions
108
moduler/features/README.md
Normal file
108
moduler/features/README.md
Normal file
|
|
@ -0,0 +1,108 @@
|
|||
# Feature Profiles
|
||||
|
||||
This directory provides a profile + overrides model for host configuration.
|
||||
|
||||
## Imports
|
||||
|
||||
Use this in host `imports`:
|
||||
|
||||
```nix
|
||||
(modulesDirectory + /features/standard)
|
||||
```
|
||||
|
||||
`features/standard` imports:
|
||||
|
||||
- `features` profile module
|
||||
- `services/users`
|
||||
- `services/network`
|
||||
- `services/system`
|
||||
- `services/sound`
|
||||
- `programs/base`
|
||||
- `programs/git`
|
||||
- `programs/dev`
|
||||
|
||||
## Profile Selection
|
||||
|
||||
Set one profile per host:
|
||||
|
||||
```nix
|
||||
features.profile = "desktop";
|
||||
```
|
||||
|
||||
Supported values:
|
||||
|
||||
- `custom`
|
||||
- `desktop`
|
||||
- `laptop`
|
||||
- `server`
|
||||
- `camera`
|
||||
|
||||
Profiles set `mkDefault` values, so you can override any option per host.
|
||||
|
||||
## Common Overrides
|
||||
|
||||
### Base packages
|
||||
|
||||
```nix
|
||||
features.base = {
|
||||
enable = true;
|
||||
preset = "minimal";
|
||||
packages.captureEnable = true;
|
||||
};
|
||||
```
|
||||
|
||||
### Dev tools
|
||||
|
||||
```nix
|
||||
features.dev = {
|
||||
enable = true;
|
||||
preset = "minimal";
|
||||
cloud.aws.enable = false;
|
||||
cloud.azure.enable = false;
|
||||
};
|
||||
```
|
||||
|
||||
### Network
|
||||
|
||||
```nix
|
||||
features.network = {
|
||||
enable = true;
|
||||
netbird.enable = false;
|
||||
tooling.enable = false;
|
||||
};
|
||||
```
|
||||
|
||||
### Sound/Bluetooth
|
||||
|
||||
```nix
|
||||
features.sound = {
|
||||
enable = true;
|
||||
bluetooth.enable = false;
|
||||
};
|
||||
```
|
||||
|
||||
### Git defaults
|
||||
|
||||
```nix
|
||||
features.git = {
|
||||
enable = true;
|
||||
userName = "myuser";
|
||||
userEmail = "me@example.com";
|
||||
};
|
||||
```
|
||||
|
||||
### Users
|
||||
|
||||
```nix
|
||||
features.users = {
|
||||
enable = true;
|
||||
name = "fw";
|
||||
fullName = "Fredrik Wastring";
|
||||
extraGroups = [ "wheel" "networkmanager" ];
|
||||
};
|
||||
```
|
||||
|
||||
## Notes
|
||||
|
||||
- If you only import `features/default.nix`, profile defaults are applied only for options that exist in imported modules.
|
||||
- `features/standard` is the easiest option for hosts that should expose all common feature knobs.
|
||||
81
moduler/features/default.nix
Normal file
81
moduler/features/default.nix
Normal file
|
|
@ -0,0 +1,81 @@
|
|||
{
|
||||
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))
|
||||
]))
|
||||
];
|
||||
}
|
||||
13
moduler/features/standard/default.nix
Normal file
13
moduler/features/standard/default.nix
Normal file
|
|
@ -0,0 +1,13 @@
|
|||
{ ... }:
|
||||
{
|
||||
imports = [
|
||||
../default.nix
|
||||
../../services/users
|
||||
../../services/network
|
||||
../../services/system
|
||||
../../services/sound
|
||||
../../programs/base
|
||||
../../programs/git
|
||||
../../programs/dev
|
||||
];
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue