refactor(flake): assemble repository modules
This commit is contained in:
@@ -53,7 +53,7 @@ Use the simplest accurate word when a term is not listed.
|
||||
| assembly file | Nix | A Nix file under `flake/` that constructs flake outputs or arguments passed to NixOS modules. |
|
||||
| assembly function | Nix | A project function exposed under `flake` because it creates modules, systems, or assembly values. |
|
||||
| library file | Nix | A Nix file that defines reusable project functions instead of a NixOS module or flake output. |
|
||||
| library function | Nix | A pure project function exposed under `flake.lib`. |
|
||||
| library function | Nix | A pure project function exposed under `flake.util`. |
|
||||
| NixOS module | Nix | A Nix file evaluated by `nixosSystem` for a NixOS configuration. |
|
||||
| overlay | Nix | A function that modifies a Nix package set by adding or replacing packages. |
|
||||
| workspace | Window management | A named or numbered group of windows in a graphical session. Some desktop environments call this a virtual desktop. |
|
||||
|
||||
10
docs/nix.md
10
docs/nix.md
@@ -10,14 +10,14 @@ Read this document with `docs/dictionary.md`.
|
||||
|
||||
Use `lib` only for the base `nixpkgs.lib` value.
|
||||
Do not use `lib` for project functions.
|
||||
Use `flake.lib` for library functions passed through module arguments.
|
||||
Use `flake.util` for library functions passed through module arguments.
|
||||
Use `flake.mk<Name>` for assembly functions passed through module arguments.
|
||||
|
||||
Avoid:
|
||||
|
||||
```nix
|
||||
specialArgs = {
|
||||
lib = flakeLib;
|
||||
lib = util;
|
||||
};
|
||||
```
|
||||
|
||||
@@ -38,20 +38,20 @@ Then call project functions through `flake` inside modules:
|
||||
...
|
||||
}:
|
||||
{
|
||||
networking.networkmanager.unmanaged = [ "interface-name:${flake.lib.bridgeName 10}" ];
|
||||
networking.networkmanager.unmanaged = [ "interface-name:${flake.util.bridgeName 10}" ];
|
||||
}
|
||||
```
|
||||
|
||||
### Name project function namespaces by role
|
||||
|
||||
Put pure project functions under `flake.lib`.
|
||||
Put pure project functions under `flake.util`.
|
||||
Put functions that create modules, systems, or assembly values under `flake`.
|
||||
This keeps data-only functions separate from functions that carry flake context.
|
||||
|
||||
Avoid:
|
||||
|
||||
```nix
|
||||
flake.lib.mkGuest { name = "sample"; }
|
||||
flake.util.mkGuest { name = "sample"; }
|
||||
```
|
||||
|
||||
Use:
|
||||
|
||||
@@ -6,10 +6,15 @@
|
||||
let
|
||||
# TODO: refactor the registry code
|
||||
registryAssembly = import ./registry.nix { inherit lib self; };
|
||||
flakeLib = import ../lib { inherit lib; };
|
||||
# TODO: remove this after the refactor of this file is done and clean
|
||||
util = import ../lib { inherit lib; };
|
||||
mkModules = import ./modules.nix { inherit util; };
|
||||
|
||||
moduleFiles = flakeLib.collectNixFiles (self + "/modules");
|
||||
guestFiles = flakeLib.collectNixFiles (self + "/guests");
|
||||
modules = mkModules {
|
||||
root = self + "/modules";
|
||||
};
|
||||
repositoryModules = modules;
|
||||
guestFiles = util.collectNixFiles (self + "/guests");
|
||||
|
||||
collectedRegistry = registryAssembly.collect { hosts = self.nixosConfigurations; };
|
||||
|
||||
@@ -26,7 +31,7 @@ let
|
||||
inherit (hosts) mkHosts;
|
||||
inherit (guests) mkGuest;
|
||||
|
||||
lib = flakeLib;
|
||||
inherit util;
|
||||
};
|
||||
|
||||
guests = import ./guests.nix {
|
||||
@@ -35,9 +40,9 @@ let
|
||||
lib
|
||||
self
|
||||
specialArgs
|
||||
moduleFiles
|
||||
repositoryModules
|
||||
registryAssembly
|
||||
flakeLib
|
||||
util
|
||||
;
|
||||
};
|
||||
|
||||
@@ -47,7 +52,7 @@ let
|
||||
lib
|
||||
self
|
||||
specialArgs
|
||||
moduleFiles
|
||||
repositoryModules
|
||||
guestFiles
|
||||
registryAssembly
|
||||
;
|
||||
|
||||
@@ -3,9 +3,9 @@
|
||||
lib,
|
||||
self,
|
||||
specialArgs,
|
||||
moduleFiles,
|
||||
repositoryModules,
|
||||
registryAssembly,
|
||||
flakeLib,
|
||||
util,
|
||||
}:
|
||||
let
|
||||
mkGuest =
|
||||
@@ -103,7 +103,7 @@ let
|
||||
};
|
||||
mac = lib.mkOption {
|
||||
type = lib.types.str;
|
||||
default = flakeLib.deriveMac name;
|
||||
default = util.deriveMac name;
|
||||
defaultText = lib.literalMD "a stable address derived from the guest's namespace path";
|
||||
example = "bc:24:11:00:00:01";
|
||||
description = ''
|
||||
@@ -306,7 +306,7 @@ let
|
||||
}
|
||||
(lib.mkIf networked (
|
||||
let
|
||||
bridgeDevice = "sys-subsystem-net-devices-${lib.replaceStrings [ "-" ] [ "\\x2d" ] (flakeLib.bridgeName cfg.vlan)}.device";
|
||||
bridgeDevice = "sys-subsystem-net-devices-${lib.replaceStrings [ "-" ] [ "\\x2d" ] (util.bridgeName cfg.vlan)}.device";
|
||||
in
|
||||
{
|
||||
after = [ bridgeDevice ];
|
||||
@@ -319,7 +319,7 @@ let
|
||||
containers.${machineName} = lib.mkIf (cfg.backend == "container") {
|
||||
autoStart = cfg.autoStart;
|
||||
privateNetwork = lib.mkDefault true;
|
||||
hostBridge = lib.mkIf networked (flakeLib.bridgeName cfg.vlan);
|
||||
hostBridge = lib.mkIf networked (util.bridgeName cfg.vlan);
|
||||
privateUsers = lib.mkDefault "no";
|
||||
additionalCapabilities = lib.optionals cfg.nesting [ "CAP_NET_ADMIN" ];
|
||||
allowedDevices = lib.optionals cfg.nesting [
|
||||
@@ -339,7 +339,9 @@ let
|
||||
|
||||
config = {
|
||||
imports =
|
||||
moduleFiles
|
||||
[
|
||||
repositoryModules
|
||||
]
|
||||
++ [
|
||||
registryAssembly.module
|
||||
inputs.sops-nix.nixosModules.sops
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
lib,
|
||||
self,
|
||||
specialArgs,
|
||||
moduleFiles,
|
||||
repositoryModules,
|
||||
guestFiles,
|
||||
registryAssembly,
|
||||
}:
|
||||
@@ -16,7 +16,9 @@ let
|
||||
inputs.nixpkgs.lib.nixosSystem {
|
||||
inherit system specialArgs;
|
||||
modules =
|
||||
moduleFiles
|
||||
[
|
||||
repositoryModules
|
||||
]
|
||||
++ guestFiles
|
||||
++ [
|
||||
inputs.chaotic.nixosModules.default
|
||||
|
||||
5
flake/modules.nix
Normal file
5
flake/modules.nix
Normal file
@@ -0,0 +1,5 @@
|
||||
{ util }:
|
||||
{ root }:
|
||||
{
|
||||
imports = util.collectNixFiles root;
|
||||
}
|
||||
@@ -8,7 +8,7 @@
|
||||
let
|
||||
cfg = config.modules.network.vlans;
|
||||
|
||||
inherit (flake.lib) bridgeName;
|
||||
inherit (flake.util) bridgeName;
|
||||
|
||||
vlanName = id: "${cfg.trunk}.${toString id}";
|
||||
in
|
||||
|
||||
Reference in New Issue
Block a user