clanModules/state-version: init state-version
This adds a clanModule that will initialize the `system.stateVersion` upon deploying the machine for the first time. If the machine is completely reinstalled, then the state version might be regenerated. But care should be taken if rebuilding from backups.
This commit is contained in:
@@ -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;
|
||||
|
||||
7
clanModules/state-version/README.md
Normal file
7
clanModules/state-version/README.md
Normal file
@@ -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)
|
||||
@@ -1,7 +1,14 @@
|
||||
{ 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 = [ ];
|
||||
@@ -9,4 +16,6 @@
|
||||
echo ${lib.versions.majorMinor lib.version} > $out/version
|
||||
'';
|
||||
};
|
||||
}
|
||||
];
|
||||
}
|
||||
|
||||
1
clanModules/state-version/roles/default.nix
Normal file
1
clanModules/state-version/roles/default.nix
Normal file
@@ -0,0 +1 @@
|
||||
{ }
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user