1
0
forked from clan/clan-core

clan template: reduce autogenerate code to a minimum

This commit is contained in:
Jörg Thalheim 2023-08-29 15:00:03 +02:00 committed by Mic92
parent bf19e51c9f
commit a4e182debf
6 changed files with 41 additions and 59 deletions

View File

@ -0,0 +1,28 @@
{ nixpkgs, clan, lib }:
{ directory # The directory containing the machines subdirectory
, specialArgs ? { } # Extra arguments to pass to nixosSystem i.e. useful to make self available
, machines ? { } # allows to include machine-specific modules i.e. machines.${name} = { ... }
}:
let
machinesDirs =
if builtins.pathExists (directory + /machines)
then builtins.readDir (directory + /machines)
else { };
machineSettings = machineName:
if builtins.pathExists (directory + /machines/${machineName}/settings.json)
then builtins.fromJSON (builtins.readFile (directory + /machines/${machineName}/settings.json))
else { };
nixosConfigurations = lib.mapAttrs
(name: _mod:
nixpkgs.lib.nixosSystem {
modules = [
(machineSettings name)
(machines.${name} or { })
] ++ lib.attrValues clan.clanModules;
specialArgs = specialArgs;
})
machinesDirs;
in
nixosConfigurations

View File

@ -1,4 +1,4 @@
{ lib, ... }:
{ lib, clan, nixpkgs, ... }:
{
findNixFiles = folder:
lib.mapAttrs'
@ -13,4 +13,6 @@
(builtins.readDir folder);
jsonschema = import ./jsonschema { inherit lib; };
buildClan = import ./build-clan { inherit lib clan nixpkgs; };
}

View File

@ -1,8 +1,12 @@
{ lib
, inputs
, ...
}: {
imports = [
./jsonschema/flake-module.nix
];
flake.lib = import ./default.nix { inherit lib; };
flake.lib = import ./default.nix {
inherit lib;
inherit (inputs) clan nixpkgs;
};
}

View File

@ -1,46 +0,0 @@
# AUTOMATICALLY GENERATED by clan
# TODO: move this code to a flakeModule in clan-core and import it via flake input
{ self, lib, inputs, ... }:
let
evalConfig = import (self.inputs.nixpkgs + /lib/eval-config.nix);
evalMachine = machineModule: evalConfig {
modules = [ machineModule ];
};
machinesDirs =
if builtins.pathExists ./machines
then builtins.readDir ./machines
else { };
machineSettings = machineName:
if builtins.pathExists ./machines/${machineName}/settings.json
then (builtins.fromJSON (builtins.readFile ./machines/${machineName}/settings.json))
else { };
# load all clan modules by default
machineModule = machineName: {
imports =
(lib.attrValues inputs.clan.clanModules)
++ [ (machineSettings machineName) ];
};
# autoamtically generate machine modules for all directories under ./machines
machineModulesGenerated =
lib.flip lib.mapAttrs' machinesDirs (name: _: {
name = "machine-${name}";
value = machineModule name;
});
# re-read the machine modules from the flake outputs, to allow amchines being
# defined by custom mechanisms
machineModules =
lib.filterAttrs (name: _: lib.hasPrefix "machine-" name) self.nixosModules;
in
{
flake.nixosModules = machineModulesGenerated;
# generate nixosConfigurations for all machines under self.nixosModules.machines-{machine_name}
flake.nixosConfigurations =
lib.mapAttrs (_: mod: evalMachine mod) machineModules;
}

View File

@ -1,16 +1,11 @@
{
description = "<Put your description here>";
inputs = {
clan-core.url = "git+https://git.clan.lol/clan/clan-core";
flake-parts.url = "github:hercules-ci/flake-parts";
};
inputs.clan-core.url = "git+https://git.clan.lol/clan/clan-core";
outputs = inputs @ { flake-parts, ... }:
flake-parts.lib.mkFlake { inherit inputs; } {
systems = [ "x86_64-linux" ];
imports = [
./clan-flake-module.nix
];
outputs = { clan-core, ... }: {
nixosConfigurations = clan-core.lib.buildClan {
directory = ./.;
};
};
}

View File

@ -1 +0,0 @@
["x86_64-linux"]