From a1d825d0a01251268b58ed436020761e7524404f Mon Sep 17 00:00:00 2001 From: DavHau Date: Sat, 2 Sep 2023 16:35:59 +0200 Subject: [PATCH] clan-config: fix: read options from nixosConfigurations instead of nixosModules --- pkgs/clan-cli/clan_cli/config/__init__.py | 11 ++--- pkgs/clan-cli/clan_cli/config/machine.py | 46 ++++++++++----------- pkgs/clan-cli/tests/machine_flake/flake.nix | 7 ++-- 3 files changed, 30 insertions(+), 34 deletions(-) diff --git a/pkgs/clan-cli/clan_cli/config/__init__.py b/pkgs/clan-cli/clan_cli/config/__init__.py index 8016ea082..f73a9dc12 100644 --- a/pkgs/clan-cli/clan_cli/config/__init__.py +++ b/pkgs/clan-cli/clan_cli/config/__init__.py @@ -108,18 +108,15 @@ def options_for_machine(machine_name: str, flake: Optional[Path] = None) -> dict let flake = builtins.getFlake (toString {flake}); lib = flake.inputs.nixpkgs.lib; - module = flake.nixosModules.machine-{machine_name}; - evaled = lib.evalModules {{ - modules = [module]; - }}; + options = flake.nixosConfigurations.{machine_name}.options; # this is actually system independent as it uses toFile docs = flake.inputs.nixpkgs.legacyPackages.x86_64-linux.nixosOptionsDoc {{ - inherit (evaled) options; + inherit options; }}; - options = builtins.fromJSON (builtins.readFile docs.optionsJSON.options); + opts = builtins.fromJSON (builtins.readFile docs.optionsJSON.options); in - options + opts """, ], ), diff --git a/pkgs/clan-cli/clan_cli/config/machine.py b/pkgs/clan-cli/clan_cli/config/machine.py index 6463bba17..83c56be9d 100644 --- a/pkgs/clan-cli/clan_cli/config/machine.py +++ b/pkgs/clan-cli/clan_cli/config/machine.py @@ -8,6 +8,7 @@ from fastapi import HTTPException from clan_cli.dirs import get_clan_flake_toplevel, nixpkgs from clan_cli.machines.folders import machine_folder, machine_settings_file +from clan_cli.nix import nix_eval def config_for_machine(machine_name: str) -> dict: @@ -42,30 +43,27 @@ def schema_for_machine(machine_name: str, flake: Optional[Path] = None) -> dict: flake = get_clan_flake_toplevel() # use nix eval to lib.evalModules .#nixosModules.machine-{machine_name} proc = subprocess.run( - [ - "nix", - "eval", - "--json", - "--impure", - "--show-trace", - "--extra-experimental-features", - "nix-command flakes", - "--expr", - f""" - let - flake = builtins.getFlake (toString {flake}); - lib = import {nixpkgs()}/lib; - module = flake.nixosModules.machine-{machine_name}; - evaled = lib.evalModules {{ - modules = [module]; - }}; - clanOptions = evaled.options.clan; - jsonschemaLib = import {Path(__file__).parent / "jsonschema"} {{ inherit lib; }}; - jsonschema = jsonschemaLib.parseOptions clanOptions; - in - jsonschema - """, - ], + nix_eval( + flags=[ + "--json", + "--impure", + "--show-trace", + "--extra-experimental-features", + "nix-command flakes", + "--expr", + f""" + let + flake = builtins.getFlake (toString {flake}); + lib = import {nixpkgs()}/lib; + options = flake.nixosConfigurations.{machine_name}.options; + clanOptions = options.clan; + jsonschemaLib = import {Path(__file__).parent / "jsonschema"} {{ inherit lib; }}; + jsonschema = jsonschemaLib.parseOptions clanOptions; + in + jsonschema + """, + ], + ), capture_output=True, text=True, ) diff --git a/pkgs/clan-cli/tests/machine_flake/flake.nix b/pkgs/clan-cli/tests/machine_flake/flake.nix index 82afd3e06..0f76e47fc 100644 --- a/pkgs/clan-cli/tests/machine_flake/flake.nix +++ b/pkgs/clan-cli/tests/machine_flake/flake.nix @@ -5,11 +5,12 @@ }; outputs = inputs: { - nixosModules.machine-machine1 = ./nixosModules/machine1.nix; nixosConfigurations.machine1 = inputs.nixpkgs.lib.nixosSystem { modules = [ - inputs.self.nixosModules.machine-machine1 - (builtins.fromJSON (builtins.readFile ./machines/machine1.json)) + ./nixosModules/machine1.nix + (if builtins.pathExists ./machines/machine1.json + then builtins.fromJSON (builtins.readFile ./machines/machine1.json) + else { }) { nixpkgs.hostPlatform = "x86_64-linux"; } ]; };