diff --git a/clanModules/flake-module.nix b/clanModules/flake-module.nix index 648e91b47..24ce7cd2e 100644 --- a/clanModules/flake-module.nix +++ b/clanModules/flake-module.nix @@ -21,6 +21,7 @@ postgresql = ./postgresql; root-password = ./root-password; single-disk = ./single-disk; + state-version = ./state-version; sshd = ./sshd; static-hosts = ./static-hosts; sunshine = ./sunshine; diff --git a/clanModules/state-version/README.md b/clanModules/state-version/README.md new file mode 100644 index 000000000..3322d4f1d --- /dev/null +++ b/clanModules/state-version/README.md @@ -0,0 +1,7 @@ +--- +description = "Automatically generate the state version of the nixos installation." +--- + +This module generates the `system.stateVersion` of the nixos installation automatically. + +Options: [system.stateVersion](https://search.nixos.org/options?channel=unstable&show=system.stateVersion&from=0&size=50&sort=relevance&type=packages&query=stateVersion) diff --git a/clanModules/state-version/default.nix b/clanModules/state-version/default.nix index 7370b7325..d52fae9b5 100644 --- a/clanModules/state-version/default.nix +++ b/clanModules/state-version/default.nix @@ -1,12 +1,21 @@ { config, lib, ... }: +let + var = config.clan.core.vars.generators.state-version.files.version or { }; +in { - system.stateVersion = config.clan.core.vars.generators.state-version.files.version.value; + config = lib.mkMerge [ + (lib.mkIf ((var.value or null) != null) { + system.stateVersion = lib.mkDefault (lib.removeSuffix "\n" var.value); + }) - clan.core.vars.generators.state-version = { - files.version.secret = false; - runtimeInputs = [ ]; - script = '' - echo ${lib.versions.majorMinor lib.version} > $out/version - ''; - }; + { + clan.core.vars.generators.state-version = { + files.version.secret = false; + runtimeInputs = [ ]; + script = '' + echo ${lib.versions.majorMinor lib.version} > $out/version + ''; + }; + } + ]; } diff --git a/clanModules/state-version/roles/default.nix b/clanModules/state-version/roles/default.nix new file mode 100644 index 000000000..ffcd4415b --- /dev/null +++ b/clanModules/state-version/roles/default.nix @@ -0,0 +1 @@ +{ } diff --git a/docs/mkdocs.yml b/docs/mkdocs.yml index eaee14bac..f6fd03a79 100644 --- a/docs/mkdocs.yml +++ b/docs/mkdocs.yml @@ -60,24 +60,24 @@ nav: - reference/clanModules/borgbackup.md - reference/clanModules/deltachat.md - reference/clanModules/dyndns.md - - reference/clanModules/nginx.md - - reference/clanModules/vaultwarden.md - reference/clanModules/ergochat.md - reference/clanModules/garage.md - reference/clanModules/golem-provider.md + - reference/clanModules/heisenbridge.md - reference/clanModules/index.md - reference/clanModules/iwd.md - reference/clanModules/localbackup.md - reference/clanModules/localsend.md - reference/clanModules/matrix-synapse.md - - reference/clanModules/heisenbridge.md - reference/clanModules/moonlight.md - reference/clanModules/mumble.md + - reference/clanModules/nginx.md - reference/clanModules/packages.md - reference/clanModules/postgresql.md - reference/clanModules/root-password.md - reference/clanModules/single-disk.md - reference/clanModules/sshd.md + - reference/clanModules/state-version.md - reference/clanModules/static-hosts.md - reference/clanModules/sunshine.md - reference/clanModules/syncthing-static-peers.md @@ -85,6 +85,7 @@ nav: - reference/clanModules/thelounge.md - reference/clanModules/trusted-nix-caches.md - reference/clanModules/user-password.md + - reference/clanModules/vaultwarden.md - reference/clanModules/xfce.md - reference/clanModules/zerotier-static-peers.md - reference/clanModules/zt-tcp-relay.md diff --git a/pkgs/clan-cli/clan_cli/inventory/classes.py b/pkgs/clan-cli/clan_cli/inventory/classes.py index f48a8df34..bfb9433dc 100644 --- a/pkgs/clan-cli/clan_cli/inventory/classes.py +++ b/pkgs/clan-cli/clan_cli/inventory/classes.py @@ -218,6 +218,37 @@ class ServiceSingleDisk: machines: dict[str, ServiceSingleDiskMachine] = field(default_factory = dict) +@dataclass +class StateVersionConfig: + pass + +@dataclass +class ServiceStateVersionMachine: + config: StateVersionConfig = field(default_factory = StateVersionConfig) + imports: list[str] = field(default_factory = list) + + +@dataclass +class ServiceStateVersionRoleDefault: + config: StateVersionConfig = field(default_factory = StateVersionConfig) + imports: list[str] = field(default_factory = list) + machines: list[str] = field(default_factory = list) + tags: list[str] = field(default_factory = list) + + +@dataclass +class ServiceStateVersionRole: + default: ServiceStateVersionRoleDefault + + +@dataclass +class ServiceStateVersion: + meta: ServiceMeta + roles: ServiceStateVersionRole + config: StateVersionConfig = field(default_factory = StateVersionConfig) + machines: dict[str, ServiceStateVersionMachine] = field(default_factory = dict) + + @dataclass class Service: admin: dict[str, ServiceAdmin] = field(default_factory = dict) @@ -225,6 +256,7 @@ class Service: iwd: dict[str, ServiceIwd] = field(default_factory = dict) packages: dict[str, ServicePackage] = field(default_factory = dict) single_disk: dict[str, ServiceSingleDisk] = field(default_factory = dict, metadata = {"alias": "single-disk"}) + state_version: dict[str, ServiceStateVersion] = field(default_factory = dict, metadata = {"alias": "state-version"}) @dataclass