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
|
@ -150,5 +150,7 @@
|
||||||
];
|
];
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
nixosModules = import ./modules { lib = nixpkgs.lib; };
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
{ username, ... }:
|
{ inputs, username, ... }:
|
||||||
|
|
||||||
let
|
let
|
||||||
git = {
|
git = {
|
||||||
|
@ -7,26 +7,26 @@ let
|
||||||
};
|
};
|
||||||
in
|
in
|
||||||
{
|
{
|
||||||
imports = [
|
imports = with inputs.self.nixosModules; [
|
||||||
../../modules/editor/nvim.nix
|
editor-nvim
|
||||||
../../modules/mixins/common
|
mixins-common
|
||||||
../../modules/mixins/direnv.nix
|
mixins-direnv
|
||||||
../../modules/mixins/docker.nix
|
mixins-docker
|
||||||
../../modules/mixins/fzf.nix
|
mixins-fzf
|
||||||
../../modules/mixins/node.nix
|
mixins-node
|
||||||
../../modules/mixins/phpactor
|
mixins-phpactor
|
||||||
../../modules/mixins/ranger.nix
|
mixins-ranger
|
||||||
../../modules/mixins/scripts
|
mixins-scripts
|
||||||
../../modules/mixins/starship.nix
|
mixins-starship
|
||||||
../../modules/mixins/tmux.nix
|
mixins-tmux
|
||||||
../../modules/mixins/zsh
|
mixins-zsh
|
||||||
|
|
||||||
|
users-opdavies
|
||||||
|
|
||||||
(import ../../modules/mixins/git.nix { inherit git; })
|
(import ../../modules/mixins/git.nix { inherit git; })
|
||||||
|
|
||||||
./modules/notes.nix
|
./modules/notes.nix
|
||||||
./modules/wiki.nix
|
./modules/wiki.nix
|
||||||
|
|
||||||
../../users/opdavies
|
|
||||||
];
|
];
|
||||||
|
|
||||||
wsl = {
|
wsl = {
|
||||||
|
|
|
@ -1,11 +1,12 @@
|
||||||
{
|
{
|
||||||
modulesPath,
|
inputs,
|
||||||
lib,
|
lib,
|
||||||
|
modulesPath,
|
||||||
pkgs,
|
pkgs,
|
||||||
...
|
...
|
||||||
}:
|
}:
|
||||||
{
|
{
|
||||||
imports = [
|
imports = with inputs.self.nixosModules; [
|
||||||
(modulesPath + "/installer/scan/not-detected.nix")
|
(modulesPath + "/installer/scan/not-detected.nix")
|
||||||
(modulesPath + "/profiles/qemu-guest.nix")
|
(modulesPath + "/profiles/qemu-guest.nix")
|
||||||
|
|
||||||
|
@ -16,7 +17,7 @@
|
||||||
./security
|
./security
|
||||||
./services
|
./services
|
||||||
|
|
||||||
../../users/opdavies
|
../../modules/users/opdavies.nix
|
||||||
];
|
];
|
||||||
|
|
||||||
nix = {
|
nix = {
|
||||||
|
|
|
@ -1,16 +1,18 @@
|
||||||
|
{ inputs, ... }:
|
||||||
|
|
||||||
{
|
{
|
||||||
imports = [
|
imports = with inputs.self.nixosModules; [
|
||||||
./hardware-configuration.nix
|
./hardware-configuration.nix
|
||||||
./hardware.nix
|
./hardware.nix
|
||||||
./programs.nix
|
./programs.nix
|
||||||
./services.nix
|
./services.nix
|
||||||
|
|
||||||
../../modules/mixins/common
|
mixins-common
|
||||||
../../modules/mixins/zsh
|
mixins-zsh
|
||||||
|
|
||||||
../../users/opdavies
|
users-opdavies
|
||||||
../../users/eric
|
users-eric
|
||||||
../../users/luke
|
users-luke
|
||||||
];
|
];
|
||||||
|
|
||||||
# Bootloader.
|
# Bootloader.
|
||||||
|
|
|
@ -2,15 +2,19 @@
|
||||||
# your system. Help is available in the configuration.nix(5) man page
|
# your system. Help is available in the configuration.nix(5) man page
|
||||||
# and in the NixOS manual (accessible by running ‘nixos-help’).
|
# and in the NixOS manual (accessible by running ‘nixos-help’).
|
||||||
|
|
||||||
|
{ inputs, ... }:
|
||||||
|
|
||||||
{
|
{
|
||||||
imports = [
|
imports = with inputs.self.nixosModules; [
|
||||||
./hardware-configuration.nix
|
./hardware-configuration.nix
|
||||||
./secrets.nix
|
./secrets.nix
|
||||||
./services.nix
|
./services.nix
|
||||||
|
|
||||||
../../modules/mixins/common
|
mixins-common
|
||||||
../../modules/mixins/docker.nix
|
mixins-docker
|
||||||
../../modules/mixins/zsh
|
mixins-zsh
|
||||||
|
|
||||||
|
users-opdavies
|
||||||
|
|
||||||
./modules/acme.nix
|
./modules/acme.nix
|
||||||
./modules/audiobookshelf.nix
|
./modules/audiobookshelf.nix
|
||||||
|
@ -19,8 +23,6 @@
|
||||||
./modules/immich.nix
|
./modules/immich.nix
|
||||||
./modules/jellyfin.nix
|
./modules/jellyfin.nix
|
||||||
./modules/paperless.nix
|
./modules/paperless.nix
|
||||||
|
|
||||||
../../users/opdavies
|
|
||||||
];
|
];
|
||||||
|
|
||||||
nixosModules = {
|
nixosModules = {
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
{ pkgs, ... }:
|
{ inputs, pkgs, ... }:
|
||||||
|
|
||||||
let
|
let
|
||||||
git = {
|
git = {
|
||||||
|
@ -7,35 +7,35 @@ let
|
||||||
};
|
};
|
||||||
in
|
in
|
||||||
{
|
{
|
||||||
imports = [
|
imports = with inputs.self.nixosModules; [
|
||||||
./hardware-configuration.nix
|
./hardware-configuration.nix
|
||||||
./secrets.nix
|
./secrets.nix
|
||||||
|
|
||||||
../../modules/editor/nvim.nix
|
editor-nvim
|
||||||
../../modules/mixins/bluetooth.nix
|
mixins-bluetooth
|
||||||
../../modules/mixins/common
|
mixins-common
|
||||||
../../modules/mixins/direnv.nix
|
mixins-direnv
|
||||||
../../modules/mixins/docker.nix
|
mixins-docker
|
||||||
../../modules/mixins/firefox.nix
|
mixins-firefox
|
||||||
../../modules/mixins/flameshot.nix
|
mixins-flameshot
|
||||||
../../modules/mixins/fonts.nix
|
mixins-fonts
|
||||||
../../modules/mixins/fzf.nix
|
mixins-fzf
|
||||||
../../modules/mixins/gnupg.nix
|
mixins-gnupg
|
||||||
../../modules/mixins/gtk.nix
|
mixins-gtk
|
||||||
../../modules/mixins/qutebrowser.nix
|
mixins-qutebrowser
|
||||||
../../modules/mixins/mpv.nix
|
mixins-mpv
|
||||||
../../modules/mixins/node.nix
|
mixins-node
|
||||||
../../modules/mixins/phpactor
|
mixins-phpactor
|
||||||
../../modules/mixins/pipewire.nix
|
mixins-pipewire
|
||||||
../../modules/mixins/ranger.nix
|
mixins-ranger
|
||||||
../../modules/mixins/screenkey.nix
|
mixins-screenkey
|
||||||
../../modules/mixins/scripts
|
mixins-scripts
|
||||||
../../modules/mixins/starship.nix
|
mixins-starship
|
||||||
../../modules/mixins/thunar.nix
|
mixins-thunar
|
||||||
../../modules/mixins/tmux.nix
|
mixins-tmux
|
||||||
../../modules/mixins/zsh
|
mixins-zsh
|
||||||
../../modules/profiles/dwm
|
profiles-dwm
|
||||||
../../modules/profiles/xbanish.nix
|
profiles-xbanish
|
||||||
|
|
||||||
(import ../../modules/mixins/git.nix { inherit git; })
|
(import ../../modules/mixins/git.nix { inherit git; })
|
||||||
|
|
||||||
|
@ -45,7 +45,7 @@ in
|
||||||
];
|
];
|
||||||
})
|
})
|
||||||
|
|
||||||
../../users/opdavies
|
users-opdavies
|
||||||
|
|
||||||
./modules/cron.nix
|
./modules/cron.nix
|
||||||
./modules/neomutt.nix
|
./modules/neomutt.nix
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
{ pkgs, ... }:
|
{ inputs, pkgs, ... }:
|
||||||
|
|
||||||
{
|
{
|
||||||
imports = [
|
imports = with inputs.self.nixosModules; [
|
||||||
./hardware-configuration.nix
|
./hardware-configuration.nix
|
||||||
./hardware.nix
|
./hardware.nix
|
||||||
./programs.nix
|
./programs.nix
|
||||||
|
@ -9,9 +9,9 @@
|
||||||
./services
|
./services
|
||||||
./users.nix
|
./users.nix
|
||||||
|
|
||||||
../../modules/mixins/common
|
mixins-common
|
||||||
|
|
||||||
../../users/opdavies
|
users-opdavies
|
||||||
];
|
];
|
||||||
|
|
||||||
boot = {
|
boot = {
|
||||||
|
|
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 ]; }
|
Loading…
Add table
Add a link
Reference in a new issue