utils: create utility functions to ease repetition
`reqImport` in particular, is useful for easily importing an entire directory of nix files into an attribute set.
This commit is contained in:
parent
7bffd55c6f
commit
ae0746a5a4
3 changed files with 75 additions and 60 deletions
|
@ -1,22 +1,12 @@
|
||||||
{ nix, nixpkgs, flake, ... }:
|
{ nix, nixpkgs, flake, utils, ... }:
|
||||||
let
|
let
|
||||||
inherit (builtins)
|
inherit (utils)
|
||||||
isAttrs
|
reqImport
|
||||||
readDir
|
vimport
|
||||||
;
|
|
||||||
|
|
||||||
inherit (nixpkgs.lib)
|
|
||||||
filterAttrs
|
|
||||||
hasSuffix
|
|
||||||
mapAttrs'
|
|
||||||
nameValuePair
|
|
||||||
removeSuffix
|
|
||||||
;
|
;
|
||||||
|
|
||||||
|
|
||||||
configs = let
|
config = self:
|
||||||
configs' = let
|
|
||||||
config = this:
|
|
||||||
nixpkgs.lib.nixosSystem rec {
|
nixpkgs.lib.nixosSystem rec {
|
||||||
system = "x86_64-linux";
|
system = "x86_64-linux";
|
||||||
|
|
||||||
|
@ -24,14 +14,16 @@ let
|
||||||
core = ../profiles/core.nix;
|
core = ../profiles/core.nix;
|
||||||
|
|
||||||
global = {
|
global = {
|
||||||
|
_module.args.utils = utils;
|
||||||
|
|
||||||
system.configurationRevision = flake.rev;
|
system.configurationRevision = flake.rev;
|
||||||
|
|
||||||
networking.hostName = "${this}";
|
networking.hostName = self;
|
||||||
|
|
||||||
nix.package = nix.defaultPackage."${system}";
|
nix.package = nix.defaultPackage."${system}";
|
||||||
};
|
};
|
||||||
|
|
||||||
local = ./. + "/${this}.nix";
|
local = vimport ./. "${self}.nix";
|
||||||
|
|
||||||
in
|
in
|
||||||
[
|
[
|
||||||
|
@ -41,32 +33,5 @@ let
|
||||||
];
|
];
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
dot = readDir ./.;
|
|
||||||
|
|
||||||
in
|
in
|
||||||
mapAttrs'
|
reqImport { dir = ./.; _import = config; }
|
||||||
(
|
|
||||||
name: value:
|
|
||||||
if
|
|
||||||
name != "default.nix"
|
|
||||||
&& hasSuffix ".nix" name
|
|
||||||
&& value == "regular"
|
|
||||||
|
|
||||||
then let
|
|
||||||
name' = removeSuffix ".nix" name;
|
|
||||||
in
|
|
||||||
nameValuePair (name') (config name')
|
|
||||||
|
|
||||||
else
|
|
||||||
nameValuePair ("") (null)
|
|
||||||
)
|
|
||||||
dot;
|
|
||||||
|
|
||||||
removeInvalid =
|
|
||||||
filterAttrs (_: value: isAttrs value);
|
|
||||||
in
|
|
||||||
removeInvalid configs';
|
|
||||||
|
|
||||||
in
|
|
||||||
configs
|
|
||||||
|
|
|
@ -9,6 +9,7 @@
|
||||||
configs = import ./configurations {
|
configs = import ./configurations {
|
||||||
inherit nix nixpkgs;
|
inherit nix nixpkgs;
|
||||||
flake = self;
|
flake = self;
|
||||||
|
utils = import ./lib/utils.nix { lib = nixpkgs.lib; };
|
||||||
};
|
};
|
||||||
|
|
||||||
in
|
in
|
||||||
|
|
|
@ -1,2 +1,51 @@
|
||||||
{ ... }:
|
{ lib, ... }:
|
||||||
{}
|
let
|
||||||
|
inherit (builtins)
|
||||||
|
attrNames
|
||||||
|
isAttrs
|
||||||
|
readDir
|
||||||
|
;
|
||||||
|
|
||||||
|
|
||||||
|
inherit (lib)
|
||||||
|
filterAttrs
|
||||||
|
hasSuffix
|
||||||
|
mapAttrs'
|
||||||
|
nameValuePair
|
||||||
|
removeSuffix
|
||||||
|
;
|
||||||
|
|
||||||
|
in
|
||||||
|
rec {
|
||||||
|
# mapFilterAttrs ::
|
||||||
|
# (name -> value -> bool )
|
||||||
|
# (name -> value -> { name = any; value = any; })
|
||||||
|
# attrs
|
||||||
|
mapFilterAttrs = seive: f: attrs:
|
||||||
|
filterAttrs seive (mapAttrs' f attrs);
|
||||||
|
|
||||||
|
vimport = path: name: import (path + "/${name}");
|
||||||
|
|
||||||
|
reqImport = {
|
||||||
|
dir,
|
||||||
|
_import ? base: vimport dir (base + ".nix")
|
||||||
|
}:
|
||||||
|
mapFilterAttrs
|
||||||
|
(_: v: v != null)
|
||||||
|
(
|
||||||
|
n: v:
|
||||||
|
if
|
||||||
|
n != "default.nix"
|
||||||
|
&& hasSuffix ".nix" n
|
||||||
|
&& v == "regular"
|
||||||
|
|
||||||
|
then let
|
||||||
|
name = removeSuffix ".nix" n;
|
||||||
|
in
|
||||||
|
nameValuePair (name) (_import name)
|
||||||
|
|
||||||
|
else
|
||||||
|
nameValuePair ("") (null)
|
||||||
|
)
|
||||||
|
(readDir dir);
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in a new issue