Allow for autoloading modules
Autoloads files within modules/ and makes them available by their module
type and name, e.g. `mixins-zsh`, `editor-nvim` and `users-opdavies`
when imported with `inputs.self.nixosModules`.
Based on afab322e6d/modules/default.nix
.
This assumes there will be a modules/*.nix file and currently doesn't
work with modules/*/default.nix. This is something I'd like to add in
the future.
I also want find a cleaner way to pass arguments into these shortcuts as
this also doesn't work in their implementation as far as I can see.
This commit is contained in:
parent
797d1206b0
commit
eea806e0f8
16 changed files with 140 additions and 63 deletions
57
modules/default.nix
Normal file
57
modules/default.nix
Normal file
|
@ -0,0 +1,57 @@
|
|||
# Based on https://github.com/MatthewCroughan/nixcfg/blob/afab322e6da20cc038d8577dd4a365673702d183/modules/default.nix.
|
||||
# Autoloads files within modules/ and makes them available by their module
|
||||
# type and name, e.g. `mixins-zsh`, `editor-nvim` and `users-opdavies` when
|
||||
# imported with `inputs.self.nixosModules`.
|
||||
|
||||
{ lib }:
|
||||
|
||||
let
|
||||
inherit (builtins)
|
||||
attrNames
|
||||
filter
|
||||
listToAttrs
|
||||
map
|
||||
readDir
|
||||
toString
|
||||
;
|
||||
|
||||
inherit (lib)
|
||||
filterAttrs
|
||||
foldAttrs
|
||||
hasSuffix
|
||||
mapAttrsToList
|
||||
nameValuePair
|
||||
removeSuffix
|
||||
zipListsWith
|
||||
;
|
||||
|
||||
inherit (lib.filesystem) listFilesRecursive;
|
||||
|
||||
generateModules =
|
||||
folder: prefix:
|
||||
|
||||
let
|
||||
findSuffix = suffix: dir: (filter (x: (hasSuffix suffix (toString x))) (listFilesRecursive dir));
|
||||
|
||||
allNixFiles = findSuffix ".nix" folder;
|
||||
|
||||
allModuleNames = map (removeSuffix ".nix") (map baseNameOf allNixFiles);
|
||||
|
||||
zippedList = (
|
||||
zipListsWith (x: y: nameValuePair (prefix + "-" + x) (import y)) allModuleNames allNixFiles
|
||||
);
|
||||
in
|
||||
listToAttrs zippedList;
|
||||
generateModulesAuto =
|
||||
root:
|
||||
let
|
||||
moduleFolderNames = attrNames (filterAttrs (n: v: v == "directory") (readDir (toString root)));
|
||||
moduleFolderPaths = map (x: (toString root) + "/" + x) moduleFolderNames;
|
||||
|
||||
zippedList = listToAttrs (
|
||||
zipListsWith (x: y: nameValuePair x y) moduleFolderNames moduleFolderPaths
|
||||
);
|
||||
in
|
||||
foldAttrs (item: acc: item) { } (mapAttrsToList (n: v: generateModules v n) zippedList);
|
||||
in
|
||||
generateModulesAuto ./.
|
3
modules/mixins/common.nix
Normal file
3
modules/mixins/common.nix
Normal file
|
@ -0,0 +1,3 @@
|
|||
{
|
||||
imports = [ ./common ];
|
||||
}
|
3
modules/mixins/phpactor.nix
Normal file
3
modules/mixins/phpactor.nix
Normal file
|
@ -0,0 +1,3 @@
|
|||
{
|
||||
imports = [ ./phpactor ];
|
||||
}
|
3
modules/mixins/scripts.nix
Normal file
3
modules/mixins/scripts.nix
Normal file
|
@ -0,0 +1,3 @@
|
|||
{
|
||||
imports = [ ./scripts ];
|
||||
}
|
3
modules/mixins/zsh.nix
Normal file
3
modules/mixins/zsh.nix
Normal file
|
@ -0,0 +1,3 @@
|
|||
{
|
||||
imports = [ ./zsh ];
|
||||
}
|
1
modules/profiles/dwm.nix
Normal file
1
modules/profiles/dwm.nix
Normal file
|
@ -0,0 +1 @@
|
|||
{ imports = [ ./dwm ]; }
|
12
modules/users/eric.nix
Normal file
12
modules/users/eric.nix
Normal file
|
@ -0,0 +1,12 @@
|
|||
let
|
||||
username = "eric";
|
||||
in
|
||||
{
|
||||
users.users.${username} = {
|
||||
description = "Eric Davies";
|
||||
extraGroups = [ ];
|
||||
initialPassword = "eric";
|
||||
isNormalUser = true;
|
||||
packages = [ ];
|
||||
};
|
||||
}
|
12
modules/users/luke.nix
Normal file
12
modules/users/luke.nix
Normal file
|
@ -0,0 +1,12 @@
|
|||
let
|
||||
username = "luke";
|
||||
in
|
||||
{
|
||||
users.users.${username} = {
|
||||
description = "Luke Davies";
|
||||
extraGroups = [ ];
|
||||
initialPassword = username;
|
||||
isNormalUser = true;
|
||||
packages = [ ];
|
||||
};
|
||||
}
|
29
modules/users/opdavies.nix
Normal file
29
modules/users/opdavies.nix
Normal file
|
@ -0,0 +1,29 @@
|
|||
{ lib, pkgs, ... }:
|
||||
|
||||
with lib;
|
||||
|
||||
{
|
||||
users.users.opdavies = {
|
||||
description = "Oliver Davies";
|
||||
initialPassword = "opdavies";
|
||||
isNormalUser = true;
|
||||
|
||||
extraGroups = [
|
||||
"networkmanager"
|
||||
"wheel"
|
||||
];
|
||||
|
||||
packages = with pkgs; [
|
||||
qrencode
|
||||
];
|
||||
|
||||
openssh.authorizedKeys.keys = [
|
||||
"ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQDkkbYaCD9NUIQT0NnsmlyfepwjxBYeiJSBCotOpdPTyc5inFAd29DiVw98j4skfaHdzjcqWmMFmDQWM6tGkK7eg8n0WuaABmsjdEbzTtfjHwM0tRDCIh5AtoT4IvoLhwLjEI2jKM05BGCQ2m5lS//AYJK1DjiV4UH+IjXHz6oy/3eFzQwANjxWS+mbR565p21yuAu1DKEyaGeVzT1xDhgzlnZG7Cys/rFgUYpIvYDHMOFxG6hsDB8vqyHiTXniniti5tdvGGYHgRGQcynRTU12aerrqHTIOefrElXJdf3/PA8FIY/Pd3MmZocY/vvQe0EVHXWrNtnHOF3MFQ1tFyfubKO51Dcp9KmzHnyBvO4CtvGVr/upSVWfo0I/EqkIqvCvBbdSIPeH9V5hAcyWENGF4Wf0/Yqtc0dBhfXJmPVBsC2ghZp9oERK+h5Xs7DpzkT0vtkN+wjgA5weIuG8e2UVNO29LWASzlychVqb7BVa6kNn5CyGwauyIGsYvAFnUjkyJpK8qleNM3VO5x9aw26IhSKlnSE9PAdX8p7PpdoWfxWRekKTc4h6iAe7pFOENvuokAvCNsE5LolR4VrYKXjA0m3nupDNWYexAWfR3lSeSlKd9nD3OENS0biJKayZHs11iDUTxm5u5gm/U60b4z0zDXjh1H/DI/pSCG6jjaXDpw=="
|
||||
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIHcR57U61CmPbV/QlaqeBZh3SNmWPGC7rhJpt1Ds3d3N"
|
||||
];
|
||||
};
|
||||
|
||||
age.identityPaths = [
|
||||
"/home/opdavies/.ssh/id_rsa"
|
||||
];
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue