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
@ -1,72 +1,37 @@
|
||||
{ nix, nixpkgs, flake, ... }:
|
||||
{ nix, nixpkgs, flake, utils, ... }:
|
||||
let
|
||||
inherit (builtins)
|
||||
isAttrs
|
||||
readDir
|
||||
;
|
||||
|
||||
inherit (nixpkgs.lib)
|
||||
filterAttrs
|
||||
hasSuffix
|
||||
mapAttrs'
|
||||
nameValuePair
|
||||
removeSuffix
|
||||
inherit (utils)
|
||||
reqImport
|
||||
vimport
|
||||
;
|
||||
|
||||
|
||||
configs = let
|
||||
configs' = let
|
||||
config = this:
|
||||
nixpkgs.lib.nixosSystem rec {
|
||||
system = "x86_64-linux";
|
||||
config = self:
|
||||
nixpkgs.lib.nixosSystem rec {
|
||||
system = "x86_64-linux";
|
||||
|
||||
modules = let
|
||||
core = ../profiles/core.nix;
|
||||
modules = let
|
||||
core = ../profiles/core.nix;
|
||||
|
||||
global = {
|
||||
system.configurationRevision = flake.rev;
|
||||
global = {
|
||||
_module.args.utils = utils;
|
||||
|
||||
networking.hostName = "${this}";
|
||||
system.configurationRevision = flake.rev;
|
||||
|
||||
nix.package = nix.defaultPackage."${system}";
|
||||
};
|
||||
|
||||
local = ./. + "/${this}.nix";
|
||||
|
||||
in
|
||||
[
|
||||
core
|
||||
global
|
||||
local
|
||||
];
|
||||
networking.hostName = self;
|
||||
|
||||
nix.package = nix.defaultPackage."${system}";
|
||||
};
|
||||
|
||||
dot = readDir ./.;
|
||||
local = vimport ./. "${self}.nix";
|
||||
|
||||
in
|
||||
mapAttrs'
|
||||
(
|
||||
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
|
||||
[
|
||||
core
|
||||
global
|
||||
local
|
||||
];
|
||||
|
||||
};
|
||||
in
|
||||
configs
|
||||
reqImport { dir = ./.; _import = config; }
|
||||
|
@ -9,6 +9,7 @@
|
||||
configs = import ./configurations {
|
||||
inherit nix nixpkgs;
|
||||
flake = self;
|
||||
utils = import ./lib/utils.nix { lib = nixpkgs.lib; };
|
||||
};
|
||||
|
||||
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 New Issue
Block a user