diff --git a/builtinModules/homeConfigurations.nix b/builtinModules/homeConfigurations.nix index f1987d2..e6f1e76 100644 --- a/builtinModules/homeConfigurations.nix +++ b/builtinModules/homeConfigurations.nix @@ -38,12 +38,15 @@ in default = { }; }; - config.outputs = mkIf (config.homeConfigurations != { }) { - homeConfigurations = configs; - checks = foldl recursiveUpdate { } (mapAttrsToList - (n: v: { - ${v.config.nixpkgs.system}."home-${n}" = v.activationPackage; - }) - configs); + config = { + outputs = mkIf (config.homeConfigurations != { }) { + homeConfigurations = configs; + checks = foldl recursiveUpdate { } (mapAttrsToList + (n: v: { + ${v.config.nixpkgs.system}."home-${n}" = v.activationPackage; + }) + configs); + }; + nixDirAliases.homeConfigurations = [ "home" ]; }; } diff --git a/builtinModules/nixDir.nix b/builtinModules/nixDir.nix index 895c9c4..100963b 100644 --- a/builtinModules/nixDir.nix +++ b/builtinModules/nixDir.nix @@ -2,76 +2,35 @@ # Copyright (C) 2023 Archit Gupta # SPDX-License-Identifier: MIT -{ config, src, lib, flakelight, moduleArgs, ... }: +{ config, options, src, lib, flakelight, ... }: let - inherit (lib) mkOption mkIf mkMerge; - inherit (flakelight) autoImport autoImportArgs; + inherit (builtins) attrNames; + inherit (lib) genAttrs mkIf mkOption subtractLists; + inherit (lib.types) attrsOf listOf str; + inherit (flakelight) autoImport; inherit (flakelight.types) path; - - autoImport' = autoImport config.nixDir; - autoImportArgs' = autoImportArgs config.nixDir moduleArgs; in { - options.nixDir = mkOption { - type = path; - default = src + /nix; + options = { + nixDir = mkOption { + type = path; + default = src + /nix; + }; + + nixDirAliases = mkOption { + type = attrsOf (listOf str); + default = { }; + }; }; - config = - let - outputs = autoImport' "outputs"; - perSystem = autoImport' "perSystem"; - withOverlays = autoImport' "withOverlays"; - package = autoImport' "package"; - packages = autoImport' "packages"; - overlays = autoImport' "overlays"; - devShell = autoImport' "devShell"; - devShells = autoImport' "devShells"; - app = autoImport' "app"; - apps = autoImport' "apps"; - checks = autoImport' "checks"; - template = autoImport' "template"; - templates = autoImport' "templates"; - formatters = autoImport' "formatters"; - bundler = autoImport' "bundler"; - bundlers = autoImport' "bundlers"; - nixosModule = autoImport' "nixosModule"; - nixosModules = autoImport' "nixosModules"; - nixosConfigurations = autoImport' [ "nixosConfigurations" "nixos" ]; - homeModule = autoImport' "homeModule"; - homeModules = autoImport' "homeModules"; - homeConfigurations = autoImport' [ "homeConfigurations" "home" ]; - flakelightModule = autoImport' "flakelightModule"; - flakelightModules = autoImport' "flakelightModules"; - lib = autoImport' "lib"; - functor = autoImport' "functor"; - in - mkMerge [ - (mkIf (outputs != null) { inherit outputs; }) - (mkIf (perSystem != null) { inherit perSystem; }) - (mkIf (withOverlays != null) { inherit withOverlays; }) - (mkIf (package != null) { inherit package; }) - (mkIf (packages != null) { inherit packages; }) - (mkIf (overlays != null) { inherit overlays; }) - (mkIf (devShell != null) { inherit devShell; }) - (mkIf (devShells != null) { inherit devShells; }) - (mkIf (app != null) { inherit app; }) - (mkIf (apps != null) { inherit apps; }) - (mkIf (checks != null) { inherit checks; }) - (mkIf (template != null) { inherit template; }) - (mkIf (templates != null) { inherit templates; }) - (mkIf (formatters != null) { inherit formatters; }) - (mkIf (bundler != null) { inherit bundler; }) - (mkIf (bundlers != null) { inherit bundlers; }) - (mkIf (nixosModule != null) { inherit nixosModule; }) - (mkIf (nixosModules != null) { inherit nixosModules; }) - (mkIf (nixosConfigurations != null) { inherit nixosConfigurations; }) - (mkIf (homeModule != null) { inherit homeModule; }) - (mkIf (homeModules != null) { inherit homeModules; }) - (mkIf (homeConfigurations != null) { inherit homeConfigurations; }) - (mkIf (flakelightModule != null) { inherit flakelightModule; }) - (mkIf (flakelightModules != null) { inherit flakelightModules; }) - (mkIf (lib != null) { inherit lib; }) - (mkIf (functor != null) { inherit functor; }) - ]; + config = genAttrs (subtractLists [ "_module" "nixDir" ] (attrNames options)) + (name: + let + internal = options.${name}.internal or false; + val = autoImport config.nixDir + (if name == "nixDirAliases" then name else + ([ name ] ++ config.nixDirAliases.${name} or [ ])); + cond = !internal && (val != null); + in + mkIf cond (if cond then val else { })); } diff --git a/builtinModules/nixosConfigurations.nix b/builtinModules/nixosConfigurations.nix index 0669f74..45b8a86 100644 --- a/builtinModules/nixosConfigurations.nix +++ b/builtinModules/nixosConfigurations.nix @@ -32,16 +32,19 @@ in default = { }; }; - config.outputs = mkIf (config.nixosConfigurations != { }) { - nixosConfigurations = configs; - checks = foldl recursiveUpdate { } (mapAttrsToList - (n: v: { - # Wrapping the drv is needed as computing its name is expensive - # If not wrapped, it slows down `nix flake show` significantly - ${v.config.nixpkgs.system}."nixos-${n}" = v.pkgs.runCommand - "check-nixos-${n}" - { } "echo ${v.config.system.build.toplevel} > $out"; - }) - configs); + config = { + outputs = mkIf (config.nixosConfigurations != { }) { + nixosConfigurations = configs; + checks = foldl recursiveUpdate { } (mapAttrsToList + (n: v: { + # Wrapping the drv is needed as computing its name is expensive + # If not wrapped, it slows down `nix flake show` significantly + ${v.config.nixpkgs.system}."nixos-${n}" = v.pkgs.runCommand + "check-nixos-${n}" + { } "echo ${v.config.system.build.toplevel} > $out"; + }) + configs); + }; + nixDirAliases.nixosConfigurations = [ "nixos" ]; }; } diff --git a/builtinModules/propagationModule.nix b/builtinModules/propagationModule.nix index 22f704f..e5c4c43 100644 --- a/builtinModules/propagationModule.nix +++ b/builtinModules/propagationModule.nix @@ -12,7 +12,7 @@ let inherit (flakelight.types) module; in { - options.propagationModule = mkOption { type = module; }; + options.propagationModule = mkOption { type = module; internal = true; }; config.propagationModule = { lib, pkgs, options, ... }: