Fix: forward meta attributes in flake-parts module

This fixes building machines with the flake-parts module.

Since the inventory merges the machines, the `clan.core.meta` attribute
is now a submodule and conditionally imported.

Also drops the following attributes:
- clan.core.meta.icon
- clan.core.meta.description

In favor of specifying them inside the inventory.

This doesn't use `mkRemovedOptionsModule`, because in our case it would
cause infinite recursion.
This commit is contained in:
a-kenji
2024-08-06 13:05:12 +02:00
committed by kenji
parent 989cf83897
commit 16e6b690ad
5 changed files with 29 additions and 33 deletions

View File

@@ -3,20 +3,19 @@ clan-core:
config, config,
lib, lib,
flake-parts-lib, flake-parts-lib,
self,
inputs, inputs,
... ...
}: }:
let let
inherit (lib) mkOption types; inherit (lib) types;
in in
{ {
options.clan = lib.mkOption { options.clan = lib.mkOption {
type = types.submoduleWith { type = types.submoduleWith {
# _module.args = {
# };
specialArgs = { specialArgs = {
inherit clan-core; inherit clan-core self;
inherit (inputs) nixpkgs; inherit (inputs) nixpkgs;
}; };
modules = [ modules = [

View File

@@ -11,6 +11,7 @@
directory, # The directory containing the machines subdirectory # allows to include machine-specific modules i.e. machines.${name} = { ... } directory, # The directory containing the machines subdirectory # allows to include machine-specific modules i.e. machines.${name} = { ... }
# A map from arch to pkgs, if specified this nixpkgs will be only imported once for each system. # A map from arch to pkgs, if specified this nixpkgs will be only imported once for each system.
# This improves performance, but all nipxkgs.* options will be ignored. # This improves performance, but all nipxkgs.* options will be ignored.
# deadnix: skip
inventory ? { }, inventory ? { },
## Sepcial inputs (not passed to the module system as config) ## Sepcial inputs (not passed to the module system as config)
specialArgs ? { }, # Extra arguments to pass to nixosSystem i.e. useful to make self available # A set containing clan meta: name :: string, icon :: string, description :: string specialArgs ? { }, # Extra arguments to pass to nixosSystem i.e. useful to make self available # A set containing clan meta: name :: string, icon :: string, description :: string
@@ -27,14 +28,9 @@ let
; ;
self = directory; self = directory;
}; };
meta = attrs.meta or { }; rest = builtins.removeAttrs attrs [ "specialArgs" ];
rest = builtins.removeAttrs attrs [
"meta"
"specialArgs"
];
in in
eval { eval {
inventory.meta = lib.mapAttrs (_: lib.mkDefault) meta;
imports = [ imports = [
rest rest
# implementation # implementation

View File

@@ -1,4 +1,4 @@
{ lib, ... }: { lib, self, ... }:
let let
types = lib.types; types = lib.types;
in in
@@ -7,6 +7,7 @@ in
# Required options # Required options
directory = lib.mkOption { directory = lib.mkOption {
type = types.path; type = types.path;
default = self;
description = "The directory containing the clan subdirectory"; description = "The directory containing the clan subdirectory";
}; };
@@ -26,22 +27,18 @@ in
}; };
# Meta # Meta
meta = { meta = lib.mkOption {
name = lib.mkOption { type = types.nullOr (
type = types.nullOr types.str; types.submodule {
default = null; options = {
description = "Needs to be (globally) unique, as this determines the folder name where the flake gets downloaded to."; name = lib.mkOption {
}; type = types.nullOr types.str;
icon = lib.mkOption { description = "Needs to be (globally) unique, as this determines the folder name where the flake gets downloaded to.";
type = types.nullOr types.path; };
default = null; };
description = "A path to an icon to be used for the clan in the GUI"; }
}; );
description = lib.mkOption { default = null;
type = types.nullOr types.str;
default = null;
description = "A short description of the clan";
};
}; };
pkgsForSystem = lib.mkOption { pkgsForSystem = lib.mkOption {

View File

@@ -201,6 +201,8 @@ in
imports = [ imports = [
# Merge the inventory file # Merge the inventory file
{ inventory = inventoryLoaded; } { inventory = inventoryLoaded; }
# Merge the meta attributes from the buildClan function
{ inventory.meta = if config.meta != null then config.meta else { }; }
]; ];
inherit nixosConfigurations; inherit nixosConfigurations;

View File

@@ -15,10 +15,13 @@ in
{ {
test_only_required = test_only_required =
let let
config = evalClan { directory = ./.; }; config = evalClan {
meta.name = "test";
imports = [ ./module.nix ];
};
in in
{ {
expr = config.pkgsForSystem null == null; expr = config.inventory ? meta;
expected = true; expected = true;
}; };
@@ -93,10 +96,9 @@ in
in in
{ {
expr = result.clanInternals.meta; expr = result.clanInternals.meta;
expected = { expectedError = {
description = "description"; type = "ThrownError";
icon = "icon"; msg = "";
name = "superclan";
}; };
}; };