mirror of
https://github.com/nix-community/flakelight.git
synced 2025-06-21 10:07:51 +02:00
Fix inf recursions in computing default package's name
This commit is contained in:
parent
62b7dba619
commit
ba7f68e4e2
@ -61,8 +61,8 @@ in
|
|||||||
(_: v: { ${system} = v; })
|
(_: v: { ${system} = v; })
|
||||||
(config.perSystem (import inputs.nixpkgs {
|
(config.perSystem (import inputs.nixpkgs {
|
||||||
inherit system;
|
inherit system;
|
||||||
config = config.nixpkgs.config;
|
inherit (config.nixpkgs) config;
|
||||||
overlays = config.withOverlays;
|
overlays = config.withOverlays ++ [ config.packageOverlay ];
|
||||||
})))
|
})))
|
||||||
config.systems);
|
config.systems);
|
||||||
};
|
};
|
||||||
|
@ -2,18 +2,17 @@
|
|||||||
# Copyright (C) 2023 Archit Gupta <archit@accelbread.com>
|
# Copyright (C) 2023 Archit Gupta <archit@accelbread.com>
|
||||||
# SPDX-License-Identifier: MIT
|
# SPDX-License-Identifier: MIT
|
||||||
|
|
||||||
{ config, lib, flakelight, ... }:
|
{ config, lib, inputs, flakelight, ... }:
|
||||||
let
|
let
|
||||||
inherit (builtins) attrNames functionArgs intersectAttrs parseDrvName;
|
inherit (builtins) parseDrvName;
|
||||||
inherit (lib) composeManyExtensions filterAttrs fix genAttrs mapAttrs mapAttrs'
|
inherit (lib) filterAttrs mapAttrs mapAttrs' mkIf mkMerge mkOption
|
||||||
mkIf mkMerge mkOption mkOrder nameValuePair optional optionalAttrs remove;
|
nameValuePair optionalAttrs;
|
||||||
inherit (lib.types) lazyAttrsOf nullOr;
|
inherit (lib.types) lazyAttrsOf nullOr uniq;
|
||||||
inherit (flakelight) supportedSystem;
|
inherit (flakelight) supportedSystem;
|
||||||
inherit (flakelight.types) packageDef;
|
inherit (flakelight.types) overlay packageDef;
|
||||||
|
|
||||||
getName = pkg: pkg.pname or (parseDrvName pkg.name).name;
|
genPkg = pkgs: pkg: pkgs.callPackage pkg { };
|
||||||
|
genPkgs = pkgs: mapAttrs (_: genPkg pkgs) config.packages;
|
||||||
callPkg = pkgs: def: def (intersectAttrs (functionArgs def) pkgs);
|
|
||||||
in
|
in
|
||||||
{
|
{
|
||||||
options = {
|
options = {
|
||||||
@ -26,6 +25,12 @@ in
|
|||||||
type = lazyAttrsOf packageDef;
|
type = lazyAttrsOf packageDef;
|
||||||
default = { };
|
default = { };
|
||||||
};
|
};
|
||||||
|
|
||||||
|
packageOverlay = mkOption {
|
||||||
|
internal = true;
|
||||||
|
type = uniq overlay;
|
||||||
|
default = _: _: { };
|
||||||
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
config = mkMerge [
|
config = mkMerge [
|
||||||
@ -34,32 +39,25 @@ in
|
|||||||
})
|
})
|
||||||
|
|
||||||
(mkIf (config.packages != { }) {
|
(mkIf (config.packages != { }) {
|
||||||
withOverlays = mkOrder 2000 (final: prev:
|
packageOverlay = final: prev:
|
||||||
let
|
let
|
||||||
pkgNames = attrNames config.packages;
|
getName = pkg: pkg.pname or (parseDrvName pkg.name).name;
|
||||||
pkgNames' = remove "default" pkgNames;
|
defaultPkgName = getName (import inputs.nixpkgs {
|
||||||
defaultName = getName (fix (self:
|
inherit (prev.stdenv.hostPlatform) system;
|
||||||
prev // (genAttrs pkgNames
|
inherit (config.nixpkgs) config;
|
||||||
(n: callPkg self config.packages.${n})))).default;
|
overlays = config.withOverlays ++ [ (final: _: genPkgs final) ];
|
||||||
|
}).default;
|
||||||
in
|
in
|
||||||
(optionalAttrs (config.packages ? default) {
|
(optionalAttrs (config.packages ? default) {
|
||||||
${defaultName} = final.callPackage config.packages.default { };
|
${defaultPkgName} = genPkg final config.packages.default;
|
||||||
}) //
|
}) // genPkgs final;
|
||||||
(genAttrs pkgNames' (n: final.callPackage config.packages.${n} { })));
|
|
||||||
|
|
||||||
overlay = final: prev:
|
overlay = final: prev: removeAttrs
|
||||||
let
|
(config.packageOverlay (final.appendOverlays config.withOverlays) prev)
|
||||||
pkgs' = fix (composeManyExtensions config.withOverlays) prev;
|
[ "default" ];
|
||||||
defaultName = getName (callPkg pkgs' config.packages.default);
|
|
||||||
pkgNames = (remove "default" (attrNames config.packages))
|
|
||||||
++ (optional (config.packages ? default) defaultName);
|
|
||||||
pkgs = final.appendOverlays config.withOverlays;
|
|
||||||
in
|
|
||||||
genAttrs pkgNames (n: pkgs.${n});
|
|
||||||
|
|
||||||
perSystem = pkgs: rec {
|
perSystem = pkgs: rec {
|
||||||
packages = filterAttrs (_: supportedSystem pkgs)
|
packages = filterAttrs (_: supportedSystem pkgs) (genPkgs pkgs);
|
||||||
(mapAttrs (_: v: pkgs.callPackage v { }) config.packages);
|
|
||||||
|
|
||||||
checks = mapAttrs' (n: nameValuePair ("packages-" + n)) packages;
|
checks = mapAttrs' (n: nameValuePair ("packages-" + n)) packages;
|
||||||
};
|
};
|
||||||
|
Loading…
x
Reference in New Issue
Block a user