Add settings.json back

This commit is contained in:
Johannes Kirschbauer
2024-06-25 12:12:09 +02:00
committed by hsjobeki
parent 712ed3f738
commit 26c655ff3c
8 changed files with 158 additions and 96 deletions

View File

@@ -70,6 +70,8 @@ let
}
) machines;
}
# Will be deprecated
# {machines = lib.mapAttrs (n: _: {}) machinesDirs;}
# Deprecated interface
(if clanName != null then { meta.name = clanName; } else { })
@@ -83,6 +85,25 @@ let
# { ${machineName} :: Config }
serviceConfigs = buildInventory mergedInventory;
# machinesDirs = lib.optionalAttrs (builtins.pathExists "${directory}/machines") (
# builtins.readDir (directory + /machines)
# );
machineSettings =
machineName:
# CLAN_MACHINE_SETTINGS_FILE allows to override the settings file temporarily
# This is useful for doing a dry-run before writing changes into the settings.json
# Using CLAN_MACHINE_SETTINGS_FILE requires passing --impure to nix eval
if builtins.getEnv "CLAN_MACHINE_SETTINGS_FILE" != "" then
builtins.fromJSON (builtins.readFile (builtins.getEnv "CLAN_MACHINE_SETTINGS_FILE"))
else
lib.optionalAttrs (builtins.pathExists "${directory}/machines/${machineName}/settings.json") (
builtins.fromJSON (builtins.readFile (directory + /machines/${machineName}/settings.json))
);
machineImports =
machineSettings: map (module: clan-core.clanModules.${module}) (machineSettings.clanImports or [ ]);
deprecationWarnings = [
(lib.warnIf (
clanName != null
@@ -99,35 +120,40 @@ let
extraConfig ? { },
}:
nixpkgs.lib.nixosSystem {
modules = [
clan-core.nixosModules.clanCore
extraConfig
(machines.${name} or { })
# Inherit the inventory assertions ?
{ inherit (mergedInventory) assertions; }
{ imports = serviceConfigs.${name} or { }; }
(
{
# Settings
clan.core.clanDir = directory;
# Inherited from clan wide settings
clan.core.clanName = meta.name or clanName;
clan.core.clanIcon = meta.icon or clanIcon;
modules =
let
settings = machineSettings name;
in
(machineImports settings)
++ [
clan-core.nixosModules.clanCore
extraConfig
(machines.${name} or { })
# Inherit the inventory assertions ?
{ inherit (mergedInventory) assertions; }
{ imports = serviceConfigs.${name} or { }; }
(
{
# Settings
clan.core.clanDir = directory;
# Inherited from clan wide settings
clan.core.clanName = meta.name or clanName;
clan.core.clanIcon = meta.icon or clanIcon;
# Machine specific settings
clan.core.machineName = name;
networking.hostName = lib.mkDefault name;
nixpkgs.hostPlatform = lib.mkDefault system;
# Machine specific settings
clan.core.machineName = name;
networking.hostName = lib.mkDefault name;
nixpkgs.hostPlatform = lib.mkDefault system;
# speeds up nix commands by using the nixpkgs from the host system (especially useful in VMs)
nix.registry.nixpkgs.to = {
type = "path";
path = lib.mkDefault nixpkgs;
};
}
// lib.optionalAttrs (pkgs != null) { nixpkgs.pkgs = lib.mkForce pkgs; }
)
];
# speeds up nix commands by using the nixpkgs from the host system (especially useful in VMs)
nix.registry.nixpkgs.to = {
type = "path";
path = lib.mkDefault nixpkgs;
};
}
// lib.optionalAttrs (pkgs != null) { nixpkgs.pkgs = lib.mkForce pkgs; }
)
];
specialArgs = {
inherit clan-core;
} // specialArgs;

View File

@@ -5,7 +5,10 @@
...
}:
{
imports = [ ./jsonschema/flake-module.nix ];
imports = [
./jsonschema/flake-module.nix
./inventory/flake-module.nix
];
flake.lib = import ./default.nix {
inherit lib inputs;
inherit (inputs) nixpkgs;

View File

@@ -1,32 +0,0 @@
{ self, lib, ... }:
let
clan-core = self;
in
{
clan = clan-core.lib.buildClan {
meta.name = "kenjis clan";
# Should usually point to the directory of flake.nix
directory = self;
inventory = {
services = {
borgbackup.instance_1 = {
roles.server.machines = [ "vyr_machine" ];
roles.client.tags = [ "laptop" ];
};
};
};
# merged with
machines = {
"vyr_machine" = { };
"vi_machine" = {
clan.tags = [ "laptop" ];
};
"camina_machine" = {
clan.tags = [ "laptop" ];
clan.meta.name = "camina";
};
};
};
}

38
lib/inventory/example.nix Normal file
View File

@@ -0,0 +1,38 @@
{ self, ... }:
self.lib.buildClan {
# Name of the clan in the UI, should be unique
meta.name = "Inventory clan";
# Should usually point to the directory of flake.nix
directory = self;
inventory = {
services = {
borgbackup.instance_1 = {
roles.server.machines = [ "backup_server" ];
roles.client.tags = [ "backup" ];
};
};
};
# merged with
machines = {
"backup_server" = {
clan.tags = [ "all" ];
};
"client_1_machine" = {
clan.tags = [
"all"
"backup"
];
};
"client_2_machine" = {
clan.tags = [
"all"
"backup"
];
# Name of the machine in the UI
clan.meta.name = "camina";
};
};
}

View File

@@ -1,6 +1,5 @@
{ ... }:
{
# flake.inventory = import ./default.nix { inherit inputs self lib; };
perSystem =
{ pkgs, config, ... }:
{