From 1ef2e13c851d29ab2847fb1682fe64cae3023070 Mon Sep 17 00:00:00 2001 From: Johannes Kirschbauer Date: Tue, 27 May 2025 10:27:17 +0200 Subject: [PATCH] feat(nix_models): replace inventory model by holistic clan model --- lib/inventory/flake-module.nix | 8 +++++++- lib/inventory/schemas/default.nix | 13 +++++++++---- pkgs/clan-cli/clan_lib/nix_models/update.sh | 4 ++-- pkgs/clan-cli/flake-module.nix | 4 ++-- pkgs/clan-cli/shell.nix | 5 ++--- 5 files changed, 22 insertions(+), 12 deletions(-) diff --git a/lib/inventory/flake-module.nix b/lib/inventory/flake-module.nix index 9d4f48b08..4c36fb9ee 100644 --- a/lib/inventory/flake-module.nix +++ b/lib/inventory/flake-module.nix @@ -1,4 +1,9 @@ -{ self, inputs, ... }: +{ + self, + inputs, + options, + ... +}: let inputOverrides = builtins.concatStringsSep " " ( builtins.map (input: " --override-input ${input} ${inputs.${input}}") (builtins.attrNames inputs) @@ -28,6 +33,7 @@ in legacyPackages.schemas = ( import ./schemas { + flakeOptions = options; inherit pkgs self diff --git a/lib/inventory/schemas/default.nix b/lib/inventory/schemas/default.nix index 048a03ae9..65d16fe88 100644 --- a/lib/inventory/schemas/default.nix +++ b/lib/inventory/schemas/default.nix @@ -2,6 +2,7 @@ self, self', pkgs, + flakeOptions, ... }: let @@ -21,6 +22,8 @@ let import ../build-inventory/interface.nix { inherit (self) clanLib; } ); + clanSchema = jsonLib.parseOptions (flakeOptions.clan.type.getSubOptions [ "clan" ]) { }; + renderSchema = pkgs.writers.writePython3Bin "render-schema" { flakeIgnore = [ "F401" @@ -28,12 +31,12 @@ let ]; } ./render_schema.py; - inventory-schema-abstract = pkgs.stdenv.mkDerivation { - name = "inventory-schema-files"; + clan-schema-abstract = pkgs.stdenv.mkDerivation { + name = "clan-schema-files"; buildInputs = [ pkgs.cue ]; src = ./.; buildPhase = '' - export SCHEMA=${builtins.toFile "inventory-schema.json" (builtins.toJSON inventorySchema)} + export SCHEMA=${builtins.toFile "clan-schema.json" (builtins.toJSON clanSchema)} cp $SCHEMA schema.json # Also generate a CUE schema version that is derived from the JSON schema cue import -f -p compose -l '#Root:' schema.json @@ -45,11 +48,13 @@ let in { inherit + flakeOptions frontMatterSchema + clanSchema inventorySchema modulesSchema renderSchema - inventory-schema-abstract + clan-schema-abstract ; # Inventory schema, with the modules schema added per role diff --git a/pkgs/clan-cli/clan_lib/nix_models/update.sh b/pkgs/clan-cli/clan_lib/nix_models/update.sh index 10c44d2cf..123d5d19a 100755 --- a/pkgs/clan-cli/clan_lib/nix_models/update.sh +++ b/pkgs/clan-cli/clan_lib/nix_models/update.sh @@ -2,7 +2,7 @@ set -euo pipefail -jsonSchema=$(nix build .#schemas.inventory-schema-abstract --print-out-paths)/schema.json +clanSchema=$(nix build .#schemas.clan-schema-abstract --print-out-paths)/schema.json SCRIPT_DIR=$(dirname "$0") cd "$SCRIPT_DIR" -nix run .#classgen -- "$jsonSchema" "./inventory.py" +nix run .#classgen -- "$clanSchema" "./clan.py" diff --git a/pkgs/clan-cli/flake-module.nix b/pkgs/clan-cli/flake-module.nix index 95a42ab0f..c4b261606 100644 --- a/pkgs/clan-cli/flake-module.nix +++ b/pkgs/clan-cli/flake-module.nix @@ -106,10 +106,10 @@ src = ./clan_lib/nix_models; env = { - classFile = "inventory.py"; + classFile = "clan.py"; }; installPhase = '' - ${self'.packages.classgen}/bin/classgen ${self'.legacyPackages.schemas.inventory-schema-abstract}/schema.json b_classes.py + ${self'.packages.classgen}/bin/classgen ${self'.legacyPackages.schemas.clan-schema-abstract}/schema.json b_classes.py file1=$classFile file2=b_classes.py diff --git a/pkgs/clan-cli/shell.nix b/pkgs/clan-cli/shell.nix index 7057c4423..74cab1fce 100644 --- a/pkgs/clan-cli/shell.nix +++ b/pkgs/clan-cli/shell.nix @@ -46,8 +46,7 @@ mkShell { # Add clan command to PATH export PATH="$PKG_ROOT/bin":"$PATH" - # Generate classes.py from inventory schema - # This file is in .gitignore - ${self'.packages.classgen}/bin/classgen ${self'.legacyPackages.schemas.inventory-schema-abstract}/schema.json $PKG_ROOT/clan_lib/nix_models/inventory.py + # Generate classes.py from schemas + ${self'.packages.classgen}/bin/classgen ${self'.legacyPackages.schemas.clan-schema-abstract}/schema.json $PKG_ROOT/clan_lib/nix_models/clan.py ''; }