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:
parent
989cf83897
commit
16e6b690ad
@ -3,20 +3,19 @@ clan-core:
|
||||
config,
|
||||
lib,
|
||||
flake-parts-lib,
|
||||
self,
|
||||
inputs,
|
||||
...
|
||||
}:
|
||||
let
|
||||
inherit (lib) mkOption types;
|
||||
inherit (lib) types;
|
||||
in
|
||||
{
|
||||
|
||||
options.clan = lib.mkOption {
|
||||
type = types.submoduleWith {
|
||||
# _module.args = {
|
||||
# };
|
||||
specialArgs = {
|
||||
inherit clan-core;
|
||||
inherit clan-core self;
|
||||
inherit (inputs) nixpkgs;
|
||||
};
|
||||
modules = [
|
||||
|
@ -11,6 +11,7 @@
|
||||
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.
|
||||
# This improves performance, but all nipxkgs.* options will be ignored.
|
||||
# deadnix: skip
|
||||
inventory ? { },
|
||||
## 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
|
||||
@ -27,14 +28,9 @@ let
|
||||
;
|
||||
self = directory;
|
||||
};
|
||||
meta = attrs.meta or { };
|
||||
rest = builtins.removeAttrs attrs [
|
||||
"meta"
|
||||
"specialArgs"
|
||||
];
|
||||
rest = builtins.removeAttrs attrs [ "specialArgs" ];
|
||||
in
|
||||
eval {
|
||||
inventory.meta = lib.mapAttrs (_: lib.mkDefault) meta;
|
||||
imports = [
|
||||
rest
|
||||
# implementation
|
||||
|
@ -1,4 +1,4 @@
|
||||
{ lib, ... }:
|
||||
{ lib, self, ... }:
|
||||
let
|
||||
types = lib.types;
|
||||
in
|
||||
@ -7,6 +7,7 @@ in
|
||||
# Required options
|
||||
directory = lib.mkOption {
|
||||
type = types.path;
|
||||
default = self;
|
||||
description = "The directory containing the clan subdirectory";
|
||||
};
|
||||
|
||||
@ -26,22 +27,18 @@ in
|
||||
};
|
||||
|
||||
# Meta
|
||||
meta = {
|
||||
name = lib.mkOption {
|
||||
type = types.nullOr types.str;
|
||||
default = null;
|
||||
description = "Needs to be (globally) unique, as this determines the folder name where the flake gets downloaded to.";
|
||||
};
|
||||
icon = lib.mkOption {
|
||||
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 {
|
||||
type = types.nullOr types.str;
|
||||
default = null;
|
||||
description = "A short description of the clan";
|
||||
};
|
||||
meta = lib.mkOption {
|
||||
type = types.nullOr (
|
||||
types.submodule {
|
||||
options = {
|
||||
name = lib.mkOption {
|
||||
type = types.nullOr types.str;
|
||||
description = "Needs to be (globally) unique, as this determines the folder name where the flake gets downloaded to.";
|
||||
};
|
||||
};
|
||||
}
|
||||
);
|
||||
default = null;
|
||||
};
|
||||
|
||||
pkgsForSystem = lib.mkOption {
|
||||
|
@ -201,6 +201,8 @@ in
|
||||
imports = [
|
||||
# Merge the inventory file
|
||||
{ inventory = inventoryLoaded; }
|
||||
# Merge the meta attributes from the buildClan function
|
||||
{ inventory.meta = if config.meta != null then config.meta else { }; }
|
||||
];
|
||||
|
||||
inherit nixosConfigurations;
|
||||
|
@ -15,10 +15,13 @@ in
|
||||
{
|
||||
test_only_required =
|
||||
let
|
||||
config = evalClan { directory = ./.; };
|
||||
config = evalClan {
|
||||
meta.name = "test";
|
||||
imports = [ ./module.nix ];
|
||||
};
|
||||
in
|
||||
{
|
||||
expr = config.pkgsForSystem null == null;
|
||||
expr = config.inventory ? meta;
|
||||
expected = true;
|
||||
};
|
||||
|
||||
@ -93,10 +96,9 @@ in
|
||||
in
|
||||
{
|
||||
expr = result.clanInternals.meta;
|
||||
expected = {
|
||||
description = "description";
|
||||
icon = "icon";
|
||||
name = "superclan";
|
||||
expectedError = {
|
||||
type = "ThrownError";
|
||||
msg = "";
|
||||
};
|
||||
};
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user