From f7f356b18532694e940eb4e089ffd06dce73f2d5 Mon Sep 17 00:00:00 2001 From: XYenon Date: Fri, 27 Mar 2026 22:18:51 +0800 Subject: [PATCH] refactor: restructure module outputs under repos.${repo}.modules. --- README.md | 14 +++++++------- flake.nix | 30 +++++++++++++++--------------- 2 files changed, 22 insertions(+), 22 deletions(-) diff --git a/README.md b/README.md index 44996cd3b..d3c44ad01 100644 --- a/README.md +++ b/README.md @@ -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..` in flakes. +These modules are then accessible as `nur.repos..modules.nixos.` 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..` in flakes. +These modules are then accessible as `nur.repos..modules.homeManager.` 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..` in flakes. +These modules are then accessible as `nur.repos..modules.darwin.` 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..` in flakes. +These modules are then accessible as `nur.repos..modules.flake.` in flakes. #### Providing Overlays diff --git a/flake.nix b/flake.nix index afe1d8d3b..03ce47739 100644 --- a/flake.nix +++ b/flake.nix @@ -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"; }; }