Merge pull request #37 into main

Closes #37
This commit is contained in:
jade 2024-09-30 13:35:21 -07:00
commit ca0cc16273

View file

@ -1,16 +1,13 @@
{ lix, versionSuffix ? "" }: { lix, versionSuffix ? "" }:
final: prev: final: prev:
let let
# This is kind of scary to not override the nix version to pretend to be
# 2.18 since nixpkgs can introduce new breakage in its Nix unstable CLI
# usage.
# https://github.com/nixos/nixpkgs/blob/6afb255d976f85f3359e4929abd6f5149c323a02/nixos/modules/config/nix.nix#L121
lixPackageFromSource = final.callPackage (lix + "/package.nix") ({ lixPackageFromSource = final.callPackage (lix + "/package.nix") ({
inherit versionSuffix; inherit versionSuffix;
stdenv = final.clangStdenv; stdenv = final.clangStdenv;
}); });
# These packages depend on Nix features that Lix does not support # These packages should receive CppNix since they may link to it or otherwise
# cause problems (or even just silly mass-rebuilds) if we give them Lix
overridelist_upstream = [ overridelist_upstream = [
"attic-client" "attic-client"
"devenv" "devenv"
@ -60,12 +57,37 @@ let
# errors. This is a simple safeguard to put in at least something that might be seen. # errors. This is a simple safeguard to put in at least something that might be seen.
maybeWarnWrongMajor = x: if !(lib.hasPrefix supportedLixMajor lixPackageToUse.version) then builtins.trace wrongMajorWarning x else x; maybeWarnWrongMajor = x: if !(lib.hasPrefix supportedLixMajor lixPackageToUse.version) then builtins.trace wrongMajorWarning x else x;
overlay = # It is not enough to *just* throw whatever the default nix version is at
# anything in the "don't give lix" list, we have to *also* ensure that we
# give whatever upstream version as specified in the callPackage invocation.
#
# Unfortunately I don't think there is any actual way to directly query that,
# so we instead do something extremely evil and guess which version it
# probably was. This code is not generalizable to arbitrary derivations, so
# it will hopefully not make us cry, at least.
useCppNixOverlay =
lib.genAttrs overridelist_upstream ( lib.genAttrs overridelist_upstream (
name: if (lib.functionArgs prev.${name}.override ? "nix") then prev.${name}.override { name:
nix = final.nixVersions.stable_upstream; if (lib.functionArgs prev.${name}.override ? "nix") then
} else prev.${name} let
) // { # Get the two common inputs of a derivation/package.
inputs = prev.${name}.buildInputs ++ prev.${name}.nativeBuildInputs;
nixDependency = lib.findFirst
(drv: (drv.pname or "") == "nix")
prev.nixVersions.stable_upstream # default to stable nix if nix is not an input
inputs;
nixMajor = lib.versions.major (nixDependency.version or "");
nixMinor = lib.versions.minor (nixDependency.version or "");
nixAttr = "nix_${nixMajor}_${nixMinor}";
finalNix = final.nixVersions.${nixAttr};
in
prev.${name}.override {
nix = finalNix;
}
else prev.${name}
);
overlay = useCppNixOverlay // {
lix-overlay-present = 1; lix-overlay-present = 1;
# used for things that one wouldn't necessarily want to update, but we # used for things that one wouldn't necessarily want to update, but we
# nevertheless shove it in the overlay and fixed-point it in case one *does* # nevertheless shove it in the overlay and fixed-point it in case one *does*