diff --git a/modules/home-manager/README.md b/modules/home-manager/README.md new file mode 100644 index 0000000..51c94e0 --- /dev/null +++ b/modules/home-manager/README.md @@ -0,0 +1,5 @@ +Add your reusable home-manager modules to this directory () + +These are considered modules: +- files, ending in `.nix` (excluding `default.nix`) +- directories, containing `default.nix` diff --git a/modules/home-manager/default.nix b/modules/home-manager/default.nix deleted file mode 100644 index b9cedd5..0000000 --- a/modules/home-manager/default.nix +++ /dev/null @@ -1,10 +0,0 @@ -# Add your reusable home-manager modules to this directory, on their own file (https://nixos.wiki/wiki/Module). -# These should be stuff you would like to share with others, not your personal configurations. - -{ - # List your module files here - # my-module = import ./my-module.nix; - reo101-shell = import ./reo101-shell; - reo101-river = import ./reo101-river; - reo101-wezterm = import ./reo101-wezterm; -} diff --git a/modules/nix-darwin/README.md b/modules/nix-darwin/README.md new file mode 100644 index 0000000..c51c812 --- /dev/null +++ b/modules/nix-darwin/README.md @@ -0,0 +1,5 @@ +Add your reusable nix-darwin modules to this directory () + +These are considered modules: +- files, ending in `.nix` (excluding `default.nix`) +- directories, containing `default.nix` diff --git a/modules/nix-darwin/default.nix b/modules/nix-darwin/default.nix deleted file mode 100644 index 4a90fa6..0000000 --- a/modules/nix-darwin/default.nix +++ /dev/null @@ -1,10 +0,0 @@ -# Add your reusable nix-darwin modules to this directory, on their own file (https://nixos.wiki/wiki/Module). -# These should be stuff you would like to share with others, not your personal configurations. - -{ - # List your module files here - # my-module = import ./my-module.nix; - brew = import ./brew; - yabai = import ./yabai; - system = import ./system; -} diff --git a/modules/nix-on-droid/README.md b/modules/nix-on-droid/README.md new file mode 100644 index 0000000..21f19db --- /dev/null +++ b/modules/nix-on-droid/README.md @@ -0,0 +1,5 @@ +Add your reusable nix-on-droid modules to this directory () + +These are considered modules: +- files, ending in `.nix` (excluding `default.nix`) +- directories, containing `default.nix` diff --git a/modules/nix-on-droid/default.nix b/modules/nix-on-droid/default.nix deleted file mode 100644 index bf1c581..0000000 --- a/modules/nix-on-droid/default.nix +++ /dev/null @@ -1,7 +0,0 @@ -# Add your reusable nix-on-droid modules to this directory, on their own file (https://nixos.wiki/wiki/Module). -# These should be stuff you would like to share with others, not your personal configurations. - -{ - # List your module files here - # my-module = import ./my-module.nix; -} diff --git a/modules/nixos/README.md b/modules/nixos/README.md new file mode 100644 index 0000000..f2dfc13 --- /dev/null +++ b/modules/nixos/README.md @@ -0,0 +1,5 @@ +Add your reusable NixOS modules to this directory () + +These are considered modules: +- files, ending in `.nix` (excluding `default.nix`) +- directories, containing `default.nix` diff --git a/modules/nixos/default.nix b/modules/nixos/default.nix deleted file mode 100644 index beb65ef..0000000 --- a/modules/nixos/default.nix +++ /dev/null @@ -1,8 +0,0 @@ -# Add your reusable NixOS modules to this directory, on their own file (https://nixos.wiki/wiki/Module). -# These should be stuff you would like to share with others, not your personal configurations. - -{ - # List your module files here - # my-module = import ./my-module.nix; - jellyfin = import ./jellyfin.nix; -} diff --git a/modules/nixos/jellyfin.nix b/modules/nixos/jellyfin/default.nix similarity index 100% rename from modules/nixos/jellyfin.nix rename to modules/nixos/jellyfin/default.nix diff --git a/util/default.nix b/util/default.nix index bc5604f..46e808a 100644 --- a/util/default.nix +++ b/util/default.nix @@ -37,7 +37,10 @@ rec { lib.isAttrs (builtins.getAttr directory attrs)) directories); + # Boolean helpers and = lib.all lib.id; + or = lib.any lib.id; + eq = x: y: x == y; # pkgs helpers forEachSystem = lib.genAttrs [ @@ -53,18 +56,68 @@ rec { (system: f nixpkgs.legacyPackages.${system}); + # Modules helpers + createModules = baseDir: { passthru ? { inherit inputs outputs; }, ... }: + lib.pipe baseDir [ + # Read given directory + builtins.readDir + # Map each entry to a module + (lib.mapAttrs' + (name: type: + let + moduleDir = baseDir + "/${name}"; + in + if and [ + (type == "directory") + (hasFiles ["default.nix"] (builtins.readDir moduleDir)) + ] then + # Classic module in a directory + lib.nameValuePair + name + (import moduleDir) + else if and [ + (type == "regular") + (lib.hasSuffix ".nix" name) + ] then + # Classic module in a file + lib.nameValuePair + (lib.removeSuffix ".nix" name) + (import moduleDir) + else + # Invalid module + lib.nameValuePair + name + null)) + # Filter invalid modules + (lib.filterAttrs + (moduleName: module: + module != null)) + # Passthru if needed + (lib.mapAttrs + (moduleName: module: + if and [ + (builtins.isFunction + module) + (eq + (lib.pipe module [builtins.functionArgs builtins.attrNames]) + (lib.pipe passthru [builtins.attrNames])) + ] + then module passthru + else module)) + ]; + # Modules - nixosModules = import ../modules/nixos; - nixOnDroidModules = import ../modules/nix-on-droid; - nixDarwinModules = import ../modules/nix-darwin; - homeManagerModules = import ../modules/home-manager; + nixosModules = createModules ../modules/nixos { }; + nixOnDroidModules = createModules ../modules/nix-on-droid { }; + nixDarwinModules = createModules ../modules/nix-darwin { }; + homeManagerModules = createModules ../modules/home-manager { }; # Machines machines = recurseDir ../machines; homeManagerMachines = machines.home-manager or { }; - nixDarwinMachines = machines.nix-darwin or { }; - nixOnDroidMachines = machines.nix-on-droid or { }; - nixosMachines = machines.nixos or { }; + nixDarwinMachines = machines.nix-darwin or { }; + nixOnDroidMachines = machines.nix-on-droid or { }; + nixosMachines = machines.nixos or { }; # Configuration helpers mkNixosHost = root: system: hostname: users: lib.nixosSystem {