Update the utils & allow importing as ./utils
- Previously imports would have to be done as ./utils/utils.nix
`import ./utils/utils.nix lib`
- This has now been simplified to just ./utils
`import ./utils lib`
diff --git a/flake.nix b/flake.nix
index b527b27..701ba47 100644
--- a/flake.nix
+++ b/flake.nix
@@ -20,9 +20,12 @@
inherit (inputs) self nixpkgs flake-utils;
in
flake-utils.lib.eachDefaultSystem (system: let
- pkgs = nixpkgs.legacyPackages.${system};
+ pkgs = import nixpkgs {
+ inherit system;
+ overlays = import ./overlays nixpkgs.lib;
+ };
- utils = import ./utils/utils.nix nixpkgs.lib;
+ utils = import ./utils nixpkgs.lib;
username = "minion";
in {
@@ -33,13 +36,15 @@
modules = [
(nixpkgs.lib.pipe ./modules [
utils.nixFilesIn
- utils.importAll
(utils.interpretNonstandardModule (args:
args
// {
- home = args.config.home-manager."${username}";
+ home = args.config.home-manager.users.${username};
}))
])
+ {
+ minion = import ./config.nix;
+ }
];
specialArgs = inputs // {inherit username pkgs;};
diff --git a/utils/utils.nix b/utils/default.nix
similarity index 100%
rename from utils/utils.nix
rename to utils/default.nix
diff --git a/utils/dirsIn.nix b/utils/dirsIn.nix
new file mode 100644
index 0000000..7ef9d6a
--- /dev/null
+++ b/utils/dirsIn.nix
@@ -0,0 +1,2 @@
+# Modified from http://chriswarbo.net/projects/nixos/useful_hacks.html
+lib: dir: map (name: dir + "/${name}") (lib.attrNames (lib.filterAttrs (_: type: type == "directory") (builtins.readDir dir)))
diff --git a/utils/dirsInWithName.nix b/utils/dirsInWithName.nix
new file mode 100644
index 0000000..3da4017
--- /dev/null
+++ b/utils/dirsInWithName.nix
@@ -0,0 +1,6 @@
+# Modified from http://chriswarbo.net/projects/nixos/useful_hacks.html
+lib: dir:
+map (name: {
+ inherit name;
+ path = dir + "/${name}";
+}) (lib.attrNames (lib.filterAttrs (_: type: type == "directory") (builtins.readDir dir)))
diff --git a/utils/interpretNonstandardModule.nix b/utils/interpretNonstandardModule.nix
index 6d8de43..405c615 100644
--- a/utils/interpretNonstandardModule.nix
+++ b/utils/interpretNonstandardModule.nix
@@ -15,29 +15,87 @@
importedModule
(transformArgs args)
else importedModule;
- in
- lib.warnIfNot ((lib.pipe resolvedModule [
- builtins.attrNames
- (lib.subtractLists ["home" "config" "imports" "options"])
- ])
- == [])
- "Module ${
+ moduleName =
if builtins.typeOf module == "lambda"
then "<AnonFunction>"
- else builtins.toString module
- } had attribute names ${builtins.toJSON (builtins.attrNames resolvedModule)} but only home, config, imports and options are resolved" {
- config = lib.recursiveUpdate (resolvedModule.config or {}) {
- home-manager.users."${args.username}".imports =
- (resolvedModule.config.home-manager.users."${args.username}".imports or [])
- ++ [resolvedModule.home or {}];
- };
- imports = resolvedModule.imports or [];
- options = resolvedModule.options or {};
- };
+ else if builtins.typeOf module == "path"
+ then builtins.toString module
+ else builtins.toJSON module;
+ in
+ lib.warnIfNot
+ ((lib.pipe resolvedModule [
+ builtins.attrNames
+ (lib.subtractLists ["home" "config" "imports" "options" "traces"])
+ ])
+ == [])
+ "Module ${moduleName} had attribute names ${builtins.toJSON (builtins.attrNames resolvedModule)} but only home, config, imports and options are resolved"
+ [
+ {
+ config = lib.recursiveUpdate (resolvedModule.config or {}) {
+ home-manager.users."${args.username}".imports =
+ (resolvedModule.config.home-manager.users."${args.username}".imports or [])
+ ++ [resolvedModule.home or {}];
+ };
+ imports = resolvedModule.imports or [];
+ options = resolvedModule.options or {};
+ }
+ ]
+ ++ (builtins.map (trace: let
+ splitTrace = lib.splitString "." trace;
+ traceHead = builtins.head splitTrace;
+ traceTail = builtins.tail splitTrace;
+ resolvedTrace =
+ (
+ if traceHead == "home"
+ then ["home-manager" "users" args.username]
+ else lib.errorIfNot (traceHead == "config") []
+ )
+ ++ traceTail;
+ in
+ {config, ...}: (builtins.seq (
+ lib.pipe resolvedTrace [
+ (lib.foldl ({
+ value,
+ error,
+ }: key:
+ if builtins.hasAttr key value
+ then {
+ value = value.${key};
+ inherit error;
+ }
+ else {
+ value = {};
+ error = true;
+ }) {
+ value = {};
+ error = false;
+ })
+ (data: lib.warnIf data.error "trace@${moduleName}/${trace} is invalid; the key does not exist" data)
+ ({
+ value,
+ error,
+ }: {
+ value = builtins.toJSON value;
+ inherit error;
+ })
+ ({
+ value,
+ error,
+ }: {
+ value = "trace@${moduleName}/${trace}: ${value}";
+ inherit error;
+ })
+ ({
+ value,
+ error,
+ }:
+ lib.traceIf (!error) value null)
+ ]
+ ) {})) (resolvedModule.traces or []));
in {
imports = (
if builtins.typeOf modules == "list"
- then builtins.map resolver modules
- else [(resolver modules)]
+ then builtins.concatLists (builtins.map resolver modules)
+ else resolver modules
);
}
diff --git a/utils/nixFilesIn.nix b/utils/nixFilesIn.nix
index b5340bd..e85fa1c 100644
--- a/utils/nixFilesIn.nix
+++ b/utils/nixFilesIn.nix
@@ -1,2 +1,2 @@
# Modified from http://chriswarbo.net/projects/nixos/useful_hacks.html
-lib: dir: map (name: dir + "/${name}") (lib.attrNames (lib.filterAttrs (name: _: lib.hasSuffix ".nix" name) (builtins.readDir dir)))
+lib: dir: map (name: dir + "/${name}") (lib.attrNames (lib.filterAttrs (name: type: type == "regular" && lib.hasSuffix ".nix" name) (builtins.readDir dir)))
diff --git a/utils/nixFilesInWithName.nix b/utils/nixFilesInWithName.nix
index 41bd157..7c56abc 100644
--- a/utils/nixFilesInWithName.nix
+++ b/utils/nixFilesInWithName.nix
@@ -3,4 +3,4 @@
map (name: {
inherit name;
path = dir + "/${name}";
-}) (lib.attrNames (lib.filterAttrs (name: _: lib.hasSuffix ".nix" name) (builtins.readDir dir)))
+}) (lib.attrNames (lib.filterAttrs (name: type: lib.hasSuffix ".nix" name && type == "regular") (builtins.readDir dir)))