refactor: restructure module outputs under repos.${repo}.modules.<class>

This commit is contained in:
XYenon 2026-03-27 22:18:51 +08:00
parent ee7462f2c6
commit f7f356b185
2 changed files with 22 additions and 22 deletions

View file

@ -164,8 +164,8 @@ Using overlays and modules from NUR in your configuration is fairly straightforw
modules = [
# Adds the NUR overlay
nur.modules.nixos.default
# NUR modules can be imported directly via nixosModules:
nur.nixosModules.repos.iopq.xraya
# NUR modules can be imported directly:
nur.repos.iopq.modules.nixos.xraya
# Or via legacyPackages (legacy path):
# nur.legacyPackages."${system}".repos.iopq.modules.xraya
# This adds the NUR nixpkgs overlay.
@ -189,7 +189,7 @@ When using flakes, Home Manager modules can be accessed directly:
```nix
# In your Home Manager configuration
{
imports = lib.attrValues nur.homeModules.repos.moredhel;
imports = lib.attrValues nur.repos.moredhel.modules.homeManager;
services.unison = {
enable = true;
@ -435,7 +435,7 @@ NixOS modules should be placed in the `nixosModules` attribute:
}
```
These modules are then accessible as `nur.nixosModules.repos.<repo>.<module>` in flakes.
These modules are then accessible as `nur.repos.<repo>.modules.nixos.<module>` in flakes.
The legacy `modules` attribute is also supported as a fallback for `nixosModules`.
@ -452,7 +452,7 @@ Home Manager modules should be placed in the `homeModules` attribute:
}
```
These modules are then accessible as `nur.homeModules.repos.<repo>.<module>` in flakes.
These modules are then accessible as `nur.repos.<repo>.modules.homeManager.<module>` in flakes.
#### Providing Darwin modules
@ -464,7 +464,7 @@ Darwin (nix-darwin) modules should be placed in the `darwinModules` attribute:
}
```
These modules are then accessible as `nur.darwinModules.repos.<repo>.<module>` in flakes.
These modules are then accessible as `nur.repos.<repo>.modules.darwin.<module>` in flakes.
#### Providing flake-parts modules
@ -476,7 +476,7 @@ Flake-parts modules should be placed in the `flakeModules` attribute:
}
```
These modules are then accessible as `nur.flakeModules.repos.<repo>.<module>` in flakes.
These modules are then accessible as `nur.repos.<repo>.modules.flake.<module>` in flakes.
#### Providing Overlays

View file

@ -46,7 +46,6 @@
pkgs = null;
}
) manifest;
collectModules = attrName: lib.mapAttrs (name: _: repos.${name}.${attrName} or { }) manifest;
in
flake-parts.lib.mkFlake { inherit inputs; } {
systems = builtins.filter (
@ -61,6 +60,21 @@
nixpkgs.overlays = [ overlay ];
};
});
repos = lib.mapAttrs (
name: _:
let
r = repos.${name};
in
{
modules = {
nixos = r.nixosModules or r.modules or { };
homeManager = r.homeModules or { };
darwin = r.darwinModules or { };
flake = r.flakeModules or { };
};
overlays = r.overlays or { };
}
) manifest;
};
imports = [
inputs.flake-parts.flakeModules.modules
@ -89,19 +103,5 @@
# This trick with the overlay is used because it allows NUR packages to depend on other NUR packages
legacyPackages = (pkgs.extend overlay).nur;
};
}
// {
# Expose modules from individual NUR repos as standard flake outputs.
# Merged outside flake-parts to avoid deferredModule type wrapping.
nixosModules.repos = lib.mapAttrs (
name: _:
let
r = repos.${name};
in
r.nixosModules or r.modules or { }
) manifest;
homeModules.repos = collectModules "homeModules";
darwinModules.repos = collectModules "darwinModules";
flakeModules.repos = collectModules "flakeModules";
};
}