patched the packagesFromDirectoryRecursive function mkLocalMod uses to use default.nix instead of package.nix so we can e.g. enable a module at modules/sops/default.nix with only [prefix].sops.enable instead of [prefix].sops.default.enable. ALSO this fixed the broken users.lyn module introduced in the last commit
This commit is contained in:
parent
c09b1e8e17
commit
7848fa4d96
3 changed files with 58 additions and 2 deletions
|
@ -1,5 +1,6 @@
|
||||||
{lib, ...}:
|
{lib, ...}:
|
||||||
let
|
let
|
||||||
|
inherit (import ./packagesFromDirectoryRecursive.nix {inherit lib;} ) packagesFromDirectoryRecursive;
|
||||||
mapAttrKVs = mapFn: attrs: builtins.foldl' (acc: cur: acc // {${cur.key} = cur.value;}) {} (builtins.attrValues (builtins.mapAttrs mapFn attrs));
|
mapAttrKVs = mapFn: attrs: builtins.foldl' (acc: cur: acc // {${cur.key} = cur.value;}) {} (builtins.attrValues (builtins.mapAttrs mapFn attrs));
|
||||||
#kv = key: value: {inherit key value;};
|
#kv = key: value: {inherit key value;};
|
||||||
recurseNaive = curPath: fn: mapAttrKVs (k: v: let
|
recurseNaive = curPath: fn: mapAttrKVs (k: v: let
|
||||||
|
@ -14,7 +15,7 @@ let
|
||||||
else [{path = prefix ++ [k]; value = v;}]
|
else [{path = prefix ++ [k]; value = v;}]
|
||||||
) as);
|
) as);
|
||||||
|
|
||||||
getPathKVsRec = prefix: dir: getAttrKVsRec prefix (lib.packagesFromDirectoryRecursive { callPackage = path: x: path; directory = dir; });
|
getPathKVsRec = prefix: dir: getAttrKVsRec prefix (packagesFromDirectoryRecursive { callPackage = path: x: path; directory = dir; });
|
||||||
|
|
||||||
unifyMod = (import ./modules-extracted.nix {lib = lib;}).unifyModuleSyntax;
|
unifyMod = (import ./modules-extracted.nix {lib = lib;}).unifyModuleSyntax;
|
||||||
transformLocalMod = {path, value}: let
|
transformLocalMod = {path, value}: let
|
||||||
|
|
55
meta/packagesFromDirectoryRecursive.nix
Normal file
55
meta/packagesFromDirectoryRecursive.nix
Normal file
|
@ -0,0 +1,55 @@
|
||||||
|
{lib, ...}: with lib;{packagesFromDirectoryRecursive =
|
||||||
|
{
|
||||||
|
callPackage,
|
||||||
|
directory,
|
||||||
|
...
|
||||||
|
} :
|
||||||
|
let
|
||||||
|
# Determine if a directory entry from `readDir` indicates a package or
|
||||||
|
# directory of packages.
|
||||||
|
directoryEntryIsPackage = basename: type:
|
||||||
|
type == "directory" || hasSuffix ".nix" basename;
|
||||||
|
|
||||||
|
# List directory entries that indicate packages in the given `path`.
|
||||||
|
packageDirectoryEntries = path:
|
||||||
|
filterAttrs directoryEntryIsPackage (builtins.readDir path);
|
||||||
|
|
||||||
|
# Transform a directory entry (a `basename` and `type` pair) into a
|
||||||
|
# package.
|
||||||
|
directoryEntryToAttrPair = subdirectory: basename: type:
|
||||||
|
let
|
||||||
|
path = subdirectory + "/${basename}";
|
||||||
|
in
|
||||||
|
if type == "regular"
|
||||||
|
then
|
||||||
|
{
|
||||||
|
name = removeSuffix ".nix" basename;
|
||||||
|
value = callPackage path { };
|
||||||
|
}
|
||||||
|
else
|
||||||
|
if type == "directory"
|
||||||
|
then
|
||||||
|
{
|
||||||
|
name = basename;
|
||||||
|
value = packagesFromDirectory path;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
throw
|
||||||
|
''
|
||||||
|
lib.filesystem.packagesFromDirectoryRecursive: Unsupported file type ${type} at path ${toString subdirectory}
|
||||||
|
'';
|
||||||
|
|
||||||
|
# Transform a directory into a package but its edited to use default.nix because package.nix is nonstandard or
|
||||||
|
# set of packages (otherwise).
|
||||||
|
packagesFromDirectory = path:
|
||||||
|
let
|
||||||
|
defaultPackagePath = path + "/default.nix";
|
||||||
|
in
|
||||||
|
if pathExists defaultPackagePath
|
||||||
|
then callPackage defaultPackagePath { }
|
||||||
|
else mapAttrs'
|
||||||
|
(directoryEntryToAttrPair path)
|
||||||
|
(packageDirectoryEntries path);
|
||||||
|
in
|
||||||
|
packagesFromDirectory directory;
|
||||||
|
}
|
|
@ -1,5 +1,5 @@
|
||||||
{lib, config, pkgs, ...}: {
|
{lib, config, pkgs, ...}: {
|
||||||
lyn.sops.default.enable = true;
|
lyn.sops.enable = true;
|
||||||
nix.settings.experimental-features = [ "nix-command" "flakes" ];
|
nix.settings.experimental-features = [ "nix-command" "flakes" ];
|
||||||
nixpkgs.config.allowUnfree = true;
|
nixpkgs.config.allowUnfree = true;
|
||||||
nix.package = config.pkgsInstances.unstable.lix;
|
nix.package = config.pkgsInstances.unstable.lix;
|
||||||
|
|
Loading…
Reference in a new issue