Merge pull request 'clanModules/state-version: init state-version' (#2077) from kenji/clan-core:state-version into main

Reviewed-on: https://git.clan.lol/clan/clan-core/pulls/2077
This commit is contained in:
kenji
2024-09-12 13:53:21 +00:00
6 changed files with 62 additions and 11 deletions

View File

@@ -21,6 +21,7 @@
postgresql = ./postgresql; postgresql = ./postgresql;
root-password = ./root-password; root-password = ./root-password;
single-disk = ./single-disk; single-disk = ./single-disk;
state-version = ./state-version;
sshd = ./sshd; sshd = ./sshd;
static-hosts = ./static-hosts; static-hosts = ./static-hosts;
sunshine = ./sunshine; sunshine = ./sunshine;

View 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)

View File

@@ -1,7 +1,14 @@
{ config, lib, ... }: { 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 = { clan.core.vars.generators.state-version = {
files.version.secret = false; files.version.secret = false;
runtimeInputs = [ ]; runtimeInputs = [ ];
@@ -10,3 +17,5 @@
''; '';
}; };
} }
];
}

View File

@@ -0,0 +1 @@
{ }

View File

@@ -60,24 +60,24 @@ nav:
- reference/clanModules/borgbackup.md - reference/clanModules/borgbackup.md
- reference/clanModules/deltachat.md - reference/clanModules/deltachat.md
- reference/clanModules/dyndns.md - reference/clanModules/dyndns.md
- reference/clanModules/nginx.md
- reference/clanModules/vaultwarden.md
- reference/clanModules/ergochat.md - reference/clanModules/ergochat.md
- reference/clanModules/garage.md - reference/clanModules/garage.md
- reference/clanModules/golem-provider.md - reference/clanModules/golem-provider.md
- reference/clanModules/heisenbridge.md
- reference/clanModules/index.md - reference/clanModules/index.md
- reference/clanModules/iwd.md - reference/clanModules/iwd.md
- reference/clanModules/localbackup.md - reference/clanModules/localbackup.md
- reference/clanModules/localsend.md - reference/clanModules/localsend.md
- reference/clanModules/matrix-synapse.md - reference/clanModules/matrix-synapse.md
- reference/clanModules/heisenbridge.md
- reference/clanModules/moonlight.md - reference/clanModules/moonlight.md
- reference/clanModules/mumble.md - reference/clanModules/mumble.md
- reference/clanModules/nginx.md
- reference/clanModules/packages.md - reference/clanModules/packages.md
- reference/clanModules/postgresql.md - reference/clanModules/postgresql.md
- reference/clanModules/root-password.md - reference/clanModules/root-password.md
- reference/clanModules/single-disk.md - reference/clanModules/single-disk.md
- reference/clanModules/sshd.md - reference/clanModules/sshd.md
- reference/clanModules/state-version.md
- reference/clanModules/static-hosts.md - reference/clanModules/static-hosts.md
- reference/clanModules/sunshine.md - reference/clanModules/sunshine.md
- reference/clanModules/syncthing-static-peers.md - reference/clanModules/syncthing-static-peers.md
@@ -85,6 +85,7 @@ nav:
- reference/clanModules/thelounge.md - reference/clanModules/thelounge.md
- reference/clanModules/trusted-nix-caches.md - reference/clanModules/trusted-nix-caches.md
- reference/clanModules/user-password.md - reference/clanModules/user-password.md
- reference/clanModules/vaultwarden.md
- reference/clanModules/xfce.md - reference/clanModules/xfce.md
- reference/clanModules/zerotier-static-peers.md - reference/clanModules/zerotier-static-peers.md
- reference/clanModules/zt-tcp-relay.md - reference/clanModules/zt-tcp-relay.md

View File

@@ -218,6 +218,37 @@ class ServiceSingleDisk:
machines: dict[str, ServiceSingleDiskMachine] = field(default_factory = dict) 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 @dataclass
class Service: class Service:
admin: dict[str, ServiceAdmin] = field(default_factory = dict) admin: dict[str, ServiceAdmin] = field(default_factory = dict)
@@ -225,6 +256,7 @@ class Service:
iwd: dict[str, ServiceIwd] = field(default_factory = dict) iwd: dict[str, ServiceIwd] = field(default_factory = dict)
packages: dict[str, ServicePackage] = 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"}) 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 @dataclass