Skip to content

Commit

Permalink
feat(flake)!: convert to fs-defined modules
Browse files Browse the repository at this point in the history
Place all modules in either:
    - `modules/${manager}/${module}.nix`
    - `modules/${manager}/${module}/default.nix`

- `${manager}` - One of `nixos`, `nix-on-droid`, `nix-darwin` or `home-manager`
- `${module}` - Module name (autoimported by configurations, used for exporting)
  • Loading branch information
reo101 committed Jul 25, 2023
1 parent beff7ad commit 444d64a
Show file tree
Hide file tree
Showing 10 changed files with 80 additions and 42 deletions.
5 changes: 5 additions & 0 deletions modules/home-manager/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
Add your reusable home-manager modules to this directory (<https://nixos.wiki/wiki/Module>)

These are considered modules:
- files, ending in `.nix` (excluding `default.nix`)
- directories, containing `default.nix`
10 changes: 0 additions & 10 deletions modules/home-manager/default.nix

This file was deleted.

5 changes: 5 additions & 0 deletions modules/nix-darwin/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
Add your reusable nix-darwin modules to this directory (<https://nixos.wiki/wiki/Module>)

These are considered modules:
- files, ending in `.nix` (excluding `default.nix`)
- directories, containing `default.nix`
10 changes: 0 additions & 10 deletions modules/nix-darwin/default.nix

This file was deleted.

5 changes: 5 additions & 0 deletions modules/nix-on-droid/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
Add your reusable nix-on-droid modules to this directory (<https://nixos.wiki/wiki/Module>)

These are considered modules:
- files, ending in `.nix` (excluding `default.nix`)
- directories, containing `default.nix`
7 changes: 0 additions & 7 deletions modules/nix-on-droid/default.nix

This file was deleted.

5 changes: 5 additions & 0 deletions modules/nixos/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
Add your reusable NixOS modules to this directory (<https://nixos.wiki/wiki/Module>)

These are considered modules:
- files, ending in `.nix` (excluding `default.nix`)
- directories, containing `default.nix`
8 changes: 0 additions & 8 deletions modules/nixos/default.nix

This file was deleted.

File renamed without changes.
67 changes: 60 additions & 7 deletions util/default.nix
Original file line number Diff line number Diff line change
Expand Up @@ -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 [
Expand All @@ -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 {
Expand Down

0 comments on commit 444d64a

Please sign in to comment.