Compare commits

..

55 commits

Author SHA1 Message Date
leo60228 c3f53365ce
upd8 nix-eval-jobs 2024-11-25 16:35:44 -05:00
jade aa2846680f Update n-e-j 2024-11-18 14:01:14 -08:00
jade 6391b9f659 nix-doc hacks: remove
Not required anymore :3
2024-11-18 13:05:18 -08:00
jade 691193879d update nix-eval-jobs to fix its build
Also updates the validation versions of nixpkgs and lix.
2024-11-09 12:55:31 -08:00
jade fd186f535a Merge pull request 'overlay: fix bug where prev should have been final' (#38) from fabianhjr/nixos-module:fix-bug-between-prev-final into main
Reviewed-on: lix-project/nixos-module#38
2024-10-01 03:21:01 +00:00
Fabián Heredia Montiel 81d9ff97c9 overlay: fix bug where prev should have been final 2024-09-30 18:51:33 -06:00
jade 7dd3d652a3 Fix up the flake checks 2024-09-30 13:49:18 -07:00
jade ca0cc16273 Merge pull request #37 into main
Closes lix-project/nixos-module#37
2024-09-30 13:35:21 -07:00
jade bb51b2d161 jade revision pass 2024-09-30 13:34:26 -07:00
Fabián Heredia Montiel b3457b78ac overlay: make finalNix depend on the nix version being used by a package
This should address both of the following (were 35 is more general and
36 a specific case)

- lix-project/nixos-module#35
- lix-project/nixos-module#36
2024-09-26 17:54:28 -06:00
jade b0e6f35950 overlay: clean up 2.18 stuff
Since Nix 2.24 is now the default in nixpkgs, we should remove the stuff
that assumes it's 2.18. Nothing breaks with this change, unless someone
is specifically depending on nixVersions.nix_2_18 being Lix.
2024-09-17 20:47:29 -07:00
jade daeb420858 Merge pull request 'fix: check package arguments before applying Nix 2.18 override' (#34) from devusb/nixos-module:remove-devenv-overlay into main
Reviewed-on: lix-project/nixos-module#34
2024-09-18 03:39:56 +00:00
Morgan Helton 0dda988746
fix: check package arguments before applying nix 2.18 override 2024-09-15 14:40:36 -05:00
eldritch horrors 353b25f0b6 always use clang to build lix 2024-09-09 01:05:28 +02:00
jade cecf70b775 Merge branch 'release-2.91' to mainline
This is a fake commit to trick Git into thinking the 2.91.0 tag is in
mainline.
2024-08-12 18:11:23 -07:00
jade 542fb09131 Update version to 2.92 2024-08-12 18:11:20 -07:00
jade a0427505de Update to the final 2.91.0 release 2024-08-12 18:01:44 -07:00
jade 1c291723b9 fix: use the official-release bit from the Lix sources to skip versionSuffix
I wrote that json file intending to use it for this and then forgot. lol
oops.
2024-08-12 18:01:18 -07:00
jade e350380d72 flake: delete officialRelease
officialRelease no longer needs to be in here because
lix-project/lix#406 was fixed, so we can
delete it.
2024-07-31 21:03:44 -07:00
jade 624aaf9af1 Clarify readme wording a little 2024-07-31 14:14:21 -07:00
jade 550352df73 Revert "add pegtl to overlay for 2.91-dev"
This is no longer required since nixpkgs now has a pegtl of the exact
version seen here on both 24.05 and unstable.

Fixes: #33

This reverts commit f6e6871f38.
2024-07-30 15:18:44 -07:00
jade 533223d8ee Add lixFromNixpkgs, document the module 2024-07-30 15:13:25 -07:00
jade 8d462dfd9d overlay: don't default lix to coming from nixpkgs if no arguments given
Although it is cute to not require args to be given, I can see that
implicitly using a lix from nixpkgs could confuse people. It is more
clear to require it to be explicitly set to null.
2024-07-30 15:13:25 -07:00
jade de3c854615 Warn on mismatched Lix module version
Especially with nixpkgs being an extremely uncontrolled variable, we
cannot guarantee that the module is always the right version. This will
cause support burden, so let's automatically diagnose it.
2024-07-30 15:13:24 -07:00
jade 03d62d5a74 overlay: correct n-e-j version 2024-07-30 15:12:30 -07:00
crop 05c6934e6b Allow use of lix from nixpkgs
Change behaviour of module. Allow not specifying LixSrc
and provide fallback to nixpkgs.pkgs.lix
2024-07-30 15:12:30 -07:00
jade d70318fb94 Merge pull request 'Delete prefetch-npm-deps hack since we dropped 23.11' (#31) from jade/fix-prefetchnpmdeps-hacks into main
Reviewed-on: lix-project/nixos-module#31
2024-07-11 11:02:55 +00:00
jade 587812bdb5 Delete prefetch-npm-deps hack since we dropped 23.11
The fix upstream is in 24.05 at release, so no need for the hack
anymore.
ddb94deafa
2024-06-27 13:33:12 -07:00
eldritch horrors 5d9d94089f update nix-eval-jobs for 2.91-dev 2024-06-26 00:18:57 +02:00
eldritch horrors f6e6871f38 add pegtl to overlay for 2.91-dev 2024-06-25 22:00:47 +02:00
jade 909e593ae9 Return Lix module to main, with fixes from release-2.90 work 2024-06-18 23:32:31 -07:00
jade 376ecb8038 restore back to dev state 2024-06-18 23:31:00 -07:00
jade b64814c8c1 Make a working 2.90.0-rc1 overlay 2024-06-18 23:29:08 -07:00
jade 4e25f1ab68 Fix including the overlay twice exploding nixos-option by making it idempotent 2024-06-05 21:15:44 -07:00
jade b4b38e6b5f Update nix-eval-jobs for exploding the C++ API again
lix-project/nix-eval-jobs#7
https://gerrit.lix.systems/c/lix/+/1241/5
2024-05-29 19:39:36 -07:00
jade 38f31ee7c1 Update nix-eval-jobs for fix 2024-05-27 18:40:58 -06:00
jade 12b457c433 Show revision of n-e-j better 2024-05-27 13:03:12 -06:00
jade 18fa4a89e2 update lix and n-e-j in light of lix-project/nix-eval-jobs#5 2024-05-23 16:27:31 -07:00
jade 6cd2d62a21 add dirtyShortRev to make it work better 2024-05-23 16:25:45 -07:00
puck 53d713eb48 feat: add devenv to override list
Devenv overrides the Nix source with its own version of Nix 2.21, which
conflicts with the changes made to the package, especially the build
system.
2024-05-16 18:47:30 +00:00
puck 36dbb9dbfb Fix build-release-notes being required
This allows using versions of Lix earlier from before
8822fd7dd5254e781660704858f2eca386bdf5a2 again.
2024-05-16 12:43:22 +00:00
jade fbc1c1c4da Merge pull request 'Don't pass in 'false' as the value of build-release-notes (a drv)' (#28) from midnightveil/nixos-module:build-release-notes-is-a-drv into main
Reviewed-on: lix-project/nixos-module#28
2024-05-16 02:03:47 +00:00
julia 0c38126b49
Don't pass in 'false' as the value of build-release-notes (a drv)
7cfaf057e35b7bb329ffff344e30fdfc850566c3 in lix-project changed the
default there to always build the release notes anyway, so this
caused failures to build, as false is not a derivation.
2024-05-16 11:28:12 +10:00
puck 7e8a5498db Fix prefetch-npm-deps override when functionArgs is not supported 2024-05-15 19:35:30 +00:00
raito 87b7b7e4bd pins: update nix-eval-jobs
To obtain lix-project/nix-eval-jobs#3
fix.

Signed-off-by: Raito Bezarius <raito@lix.systems>
2024-05-11 17:52:03 +02:00
jade c8ab1e79ba Merge pull request 'cherrypick: "boehmgc: disable tests on aarch64-linux"' (#21) from ckiee/nixos-module:cherry-boehm-check into main
Reviewed-on: lix-project/nixos-module#21
2024-05-09 18:11:51 +00:00
jade d15ff50703 Merge pull request 'feat: Add overrides for incompatible packages' (#27) from arcuru/nixos-module:override into main
Reviewed-on: lix-project/nixos-module#27
2024-05-08 21:11:43 +00:00
Patrick Jackson 5ef5fe6a67 feat: add reported broken packages 2024-05-08 07:58:24 -07:00
Patrick Jackson e09758962c refactor: move simple overrides to a function 2024-05-08 07:50:20 -07:00
jade aaf759cd93 Switch to tarball fetching because it is cheaper 2024-05-06 16:43:03 -07:00
jade 72060dfb08 Merge pull request 'fix: allow fetching nix-eval-jobs anonymously' (#23) from nogit-urls into main
Reviewed-on: lix-project/nixos-module#23
2024-05-06 23:06:29 +00:00
Lunaphied 10e849bdce Merge pull request 'chore(inputs): use git+https://' (#26) from flake-input-with-git into main
Reviewed-on: lix-project/nixos-module#26
2024-05-06 21:49:58 +00:00
raito ef84a1e4b3 fix: allow fetching nix-eval-jobs anonymously
Use HTTPS URL. Fixes #22.

Signed-off-by: Raito Bezarius <raito@lix.systems>
2024-05-06 23:46:37 +02:00
raito 0bb33a2305 feat: make the script autonomous in its python dependencies
Let's use a nix-shell shebang!

Signed-off-by: Raito Bezarius <raito@lix.systems>
2024-05-06 23:46:37 +02:00
mei (ckie) 9837ede4bd
cherrypick: "boehmgc: disable tests on aarch64-linux"
Is a big rebuild for upstream but here it's okay.
2024-05-06 04:28:24 +03:00
10 changed files with 262 additions and 172 deletions

View file

@ -1,5 +1,79 @@
# Lix NixOS module # Lix NixOS module
See the [beta guide][beta-guide] for details on how to use this: See the [official installation guide][install-guide] for details on usage of
release versions.
[install-guide]: https://lix.systems/install/
See the [beta guide][beta-guide] for a setup guide on how to use HEAD:
[beta-guide]: https://wiki.lix.systems/link/1 [beta-guide]: https://wiki.lix.systems/link/1
## What does this do?
This is an overlay wrapped in a NixOS module that will replace CppNix with Lix
in nixpkgs. This is useful so that `nixos-rebuild`, `nix-direnv` and similar
will use Lix.
Optionally, it can build Lix from source.
## Versioning with Lix
The version of this overlay should match the major Lix version, *and* if
running HEAD, it should be the latest available version of the overlay.
Changes breaking the overlay are shamelessly done on HEAD, and we expect people
doing such changes to have prepared corresponding fix commits to make to the
overlay immediately after submitting their changes. If your build randomly
broke when updating HEAD, try updating your overlay.
The version of Lix pinned in this flake's `flake.lock` is a version of Lix
that is expected to work, however if running HEAD, it can be assumed to work
with HEAD as well if both `lix-nixos-module` and `lix` are the latest version.
## Common pitfalls
Various flake frameworks such as flake-parts and snowfall (and possibly Colmena
in the future if they do a similar optimization) manage overlays separately
from NixOS, since they provide `pkgs` pre-imported to NixOS. This saves a
couple of seconds of evaluation time and resources, but it means that the NixOS
option `nixpkgs.overlays` **is completely ignored** on these frameworks.
If you are using such a framework, add `overlays.default` to the overlays list
for said framework.
## Flake structure and usage
The flake here has two inputs of note:
- `nixpkgs`, *which is unused for most people*. It is purely used for `checks`
in developing `lix-nixos-module` itself.
The installation instructions make it `follows` to make `flake.lock` less
confusing, but it is nonetheless unused.
- `lix`, which determines the version of Lix to do source builds for, if doing
source builds.
These are the most relevant outputs for most people:
- `nixosModules.lixFromNixpkgs` - uses Lix from nixpkgs and installs the
overlay to use Lix on a NixOS system. This is only useful for a stable
version of Lix, and cannot be used for running HEAD.
- `nixosModules.default` - uses Lix from source and installs the overlay to use
Lix on a NixOS system.
- `overlays.lixFromNixpkgs` - overlay to use Lix from nixpkgs in place of Nix.
- `overlays.default` - overlay to use Lix from source in place of Nix.
## Non-flake usage
Import `module.nix` or `overlay.nix` as desired, with the arguments `lix`
(derivation-like attribute set with the Lix sources, or `null` to use Lix from
nixpkgs) and `versionSuffix` (optional string).
It's desirable to also include a `versionSuffix` like the following while
building HEAD from source, to have `nix --version` include date and commit
information. To get such metadata, it depends on which pinning system is in
use, but `builtins.fetchGit` will provide the necessary metadata for the
following to work:
```
versionSuffix = "pre${builtins.substring 0 8 lix.lastModifiedDate}-${lix.shortRev or lix.dirtyShortRev}";
```

View file

@ -5,11 +5,11 @@
"systems": "systems" "systems": "systems"
}, },
"locked": { "locked": {
"lastModified": 1710146030, "lastModified": 1731533236,
"narHash": "sha256-SZ5L6eA7HJ/nmkzGG7/ISclqe6oZdOZTNoesiInkXPQ=", "narHash": "sha256-l0KFg5HjrsfsO/JpG+r7fRrqm12kzFHyUHqHCVpMMbI=",
"owner": "numtide", "owner": "numtide",
"repo": "flake-utils", "repo": "flake-utils",
"rev": "b1d9ab70662946ef0850d488da1c9019f3a9752a", "rev": "11707dc2f618dd54ca8739b309ec4fc024de578b",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -36,26 +36,24 @@
"lix": { "lix": {
"flake": false, "flake": false,
"locked": { "locked": {
"lastModified": 1714969435, "lastModified": 1731683711,
"narHash": "sha256-HNIT8NiSZ1qrQMQT69Cr1nIhxrIIqHNPqLlmsVdcl18=", "narHash": "sha256-bq21I1EjXJa/s5Rra9J9ot2NkPCnI0F5uNPurwYLdpE=",
"ref": "refs/heads/main", "rev": "c859d03013712b349d82ee6223948d6d03e63a8d",
"rev": "106b95904304e498cc6c72aace705441768ab240", "type": "tarball",
"revCount": 15502, "url": "https://git.lix.systems/api/v1/repos/lix-project/lix/archive/c859d03013712b349d82ee6223948d6d03e63a8d.tar.gz?rev=c859d03013712b349d82ee6223948d6d03e63a8d"
"type": "git",
"url": "https://git.lix.systems/lix-project/lix.git"
}, },
"original": { "original": {
"type": "git", "type": "tarball",
"url": "https://git.lix.systems/lix-project/lix.git" "url": "https://git.lix.systems/lix-project/lix/archive/main.tar.gz"
} }
}, },
"nixpkgs": { "nixpkgs": {
"locked": { "locked": {
"lastModified": 1714635257, "lastModified": 1731676054,
"narHash": "sha256-4cPymbty65RvF1DWQfc+Bc8B233A1BWxJnNULJKQ1EY=", "narHash": "sha256-OZiZ3m8SCMfh3B6bfGC/Bm4x3qc1m2SVEAlkV6iY7Yg=",
"owner": "nixos", "owner": "nixos",
"repo": "nixpkgs", "repo": "nixpkgs",
"rev": "63c3a29ca82437c87573e4c6919b09a24ea61b0f", "rev": "5e4fbfb6b3de1aa2872b76d49fafc942626e2add",
"type": "github" "type": "github"
}, },
"original": { "original": {

View file

@ -1,18 +1,35 @@
{ {
inputs.nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable"; inputs.nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable";
inputs.lix = { inputs.lix = {
url = "git+https://git.lix.systems/lix-project/lix.git"; url = "https://git.lix.systems/lix-project/lix/archive/main.tar.gz";
flake = false; flake = false;
}; };
inputs.flake-utils.url = "github:numtide/flake-utils"; inputs.flake-utils.url = "github:numtide/flake-utils";
inputs.flakey-profile.url = "github:lf-/flakey-profile"; inputs.flakey-profile.url = "github:lf-/flakey-profile";
outputs = inputs@{ self, nixpkgs, lix, flake-utils, flakey-profile, ... }: outputs = inputs@{ self, nixpkgs, lix, flake-utils, flakey-profile, ... }:
let versionSuffix = "pre${builtins.substring 0 8 lix.lastModifiedDate}-${lix.shortRev}"; let
in { lixVersionJson = builtins.fromJSON (builtins.readFile (lix + "/version.json"));
versionSuffix = nixpkgs.lib.optionalString (!lixVersionJson.official_release)
"-pre${builtins.substring 0 8 lix.lastModifiedDate}-${lix.shortRev or lix.dirtyShortRev}";
in
{
inherit inputs; inherit inputs;
nixosModules.default = import ./module.nix { inherit lix versionSuffix; }; nixosModules = {
overlays.default = import ./overlay.nix { inherit lix versionSuffix; }; # Use a locally built Lix
default = import ./module.nix { inherit lix versionSuffix; };
# Use Lix from nixpkgs
lixFromNixpkgs = import ./module.nix { lix = null; };
};
overlays = {
# Use a locally built Lix
default = import ./overlay.nix { inherit lix versionSuffix; };
# Use Lix from nixpkgs
lixFromNixpkgs = import ./overlay.nix { lix = null; };
};
} // flake-utils.lib.eachDefaultSystem (system: } // flake-utils.lib.eachDefaultSystem (system:
let let
pkgs = import nixpkgs { pkgs = import nixpkgs {
@ -30,17 +47,19 @@
{ {
inherit pkgs; inherit pkgs;
packages = { packages = {
default = pkgs.nixVersions.nix_2_18; default = pkgs.nix;
inherit (pkgs) nix-doc nix-eval-jobs; inherit (pkgs) nix-doc nix-eval-jobs;
}; };
packages.system-profile = import ./system-profile.nix { inherit pkgs flakey-profile; }; packages.system-profile = import ./system-profile.nix { inherit pkgs flakey-profile; };
nixosTests = pkgs.recurseIntoAttrs (pkgs.callPackage ./test-nixos.nix { lix-module = self.nixosModules.default; }); nixosTests = pkgs.recurseIntoAttrs (pkgs.callPackage ./test-nixos.nix { inherit pkgs; lix-module = self.nixosModules.default; });
checks = { checks = {
inherit (self.packages.${system}) default nix-eval-jobs; inherit (self.packages.${system}) default nix-eval-jobs;
inherit (pkgs) nixos-option nix-doc;
} // lib.optionalAttrs (lib.elem system linux64BitSystems) { } // lib.optionalAttrs (lib.elem system linux64BitSystems) {
# wrongMajor intentionally not included here since it is expected to fail
inherit (self.nixosTests.${system}) it-builds; inherit (self.nixosTests.${system}) it-builds;
}; };
}); });

View file

@ -1,64 +0,0 @@
# Temporary replacement of the nix-doc package with
# https://github.com/NixOS/nixpkgs/pull/296523 so that we can have working Lix
# with nix-doc on 23.11 and 24.05-pre
#
# Can be removed when that commit is in 23.11 and 24.05-pre, or 24.05 is
# released with the commit.
{ lib
, stdenv
, rustPlatform
, fetchFromGitHub
, boost
, nix
, pkg-config
# Whether to build the nix-doc plugin for Nix
, withPlugin ? true
}:
let
packageFlags = [ "-p" "nix-doc" ] ++ lib.optionals withPlugin [ "-p" "nix-doc-plugin" ];
in
rustPlatform.buildRustPackage rec {
pname = "nix-doc";
version = "0.6.5";
src = fetchFromGitHub {
rev = "v${version}";
owner = "lf-";
repo = "nix-doc";
sha256 = "sha256-9cuNzq+CBA2jz0LkZb7lh/WISIlKklfovGBAbSo1Mgk=";
};
doCheck = true;
buildInputs = lib.optionals withPlugin [ boost nix ];
nativeBuildInputs = lib.optionals withPlugin [ pkg-config nix ];
cargoBuildFlags = packageFlags;
cargoTestFlags = packageFlags;
# Packaging support for making the nix-doc plugin load cleanly as a no-op on
# the wrong Nix version (disabling bindnow permits loading libraries
# requiring unavailable symbols if they are unreached)
hardeningDisable = lib.optionals withPlugin [ "bindnow" ];
# Due to a Rust bug, setting -Z relro-level to anything including "off" on
# macOS will cause link errors
env = lib.optionalAttrs (withPlugin && stdenv.isLinux) {
# nix-doc does not use nightly features, however, there is no other way to
# set relro-level
RUSTC_BOOTSTRAP = 1;
RUSTFLAGS = "-Z relro-level=partial";
};
cargoSha256 = "sha256-CHagzXTG9AfrFd3WmHanQ+YddMgmVxSuB8vK98A1Mlw=";
meta = with lib; {
description = "An interactive Nix documentation tool";
longDescription = "An interactive Nix documentation tool providing a CLI for function search, a Nix plugin for docs in the REPL, and a ctags implementation for Nix script";
homepage = "https://github.com/lf-/nix-doc";
license = licenses.lgpl3Plus;
maintainers = [ maintainers.lf- ];
platforms = platforms.unix;
mainProgram = "nix-doc";
};
}

View file

@ -1,85 +1,127 @@
{ lix, versionSuffix ? "" }: { lix, versionSuffix ? "" }:
final: prev: final: prev:
let let
boehmgc-patched = ((final.boehmgc.override { lixPackageFromSource = final.callPackage (lix + "/package.nix") ({
enableLargeConfig = true; inherit versionSuffix;
}).overrideAttrs (o: { stdenv = final.clangStdenv;
patches = (o.patches or [ ]) ++ [
# for clown reasons this version is newer than the one in lix, we should
# fix this and update our nixpkgs pin
(prev.path + "/pkgs/tools/package-management/nix/patches/boehmgc-coroutine-sp-fallback.patch")
] ++ final.lib.optionals (final.lib.versionOlder o.version "8.2.6") [
# https://github.com/ivmai/bdwgc/pull/586
(builtins.path { path = lix + "/boehmgc-traceable_allocator-public.diff"; name = "boehmgc-traceable_allocator-public.patch"; })
];
})
);
# 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
lixPkg = (final.callPackage (lix + "/package.nix") {
build-release-notes = false;
versionSuffix = "-lix${versionSuffix}";
boehmgc-nix = boehmgc-patched;
}); });
# 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 = [
"attic-client"
"devenv"
"nix-du"
"nix-init"
"nix-prefetch-git"
"nixos-option"
"nurl"
"prefetch-yarn-deps" # force these onto upstream so we are not regularly rebuilding electron
];
inherit (prev) lib; inherit (prev) lib;
in
{ csi = builtins.fromJSON ''"\u001b"'';
orange = "${csi}[35;1m";
normal = "${csi}[0m";
warning = ''
${orange}warning${normal}: You have the lix overlay included into a nixpkgs import twice,
perhaps due to the NixOS module being included twice, or because of using
pkgs.nixos and also including it in imports, or perhaps some unknown
machinations of a complicated flake library.
This is completely harmless since we have no-op'd the second one if you are
seeing this message, but it would be a small style improvement to fix
it :)
P.S. If you had some hack to fix nixos-option build failures in your
configuration, that was caused by including an older version of the lix
overlay twice, which is now mitigated if you see this message, so you can
delete that.
P.P.S. This Lix has super catgirl powers.
'';
wrongMajorWarning = ''
${orange}warning${normal}: This Lix NixOS module is being built against a Lix with a
major version (got ${lixPackageToUse.version}) other than the one the
module was designed for (expecting ${supportedLixMajor}). Some downstream
packages like nix-eval-jobs may be broken by this. Consider using a
matching version of the Lix NixOS module to the version of Lix you are
using.
'';
maybeWarnDuplicate = x: if final.lix-overlay-present > 1 then builtins.trace warning x else x;
versionJson = builtins.fromJSON (builtins.readFile ./version.json);
supportedLixMajor = lib.versions.majorMinor versionJson.version;
lixPackageToUse = if lix != null then lixPackageFromSource else prev.lix;
# Especially if using Lix from nixpkgs, it is plausible that the overlay
# could be used against the wrong Lix major version and cause confusing build
# 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;
# 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 (
name:
if (lib.functionArgs prev.${name}.override ? "nix") then
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")
final.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;
# 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*
# want to do that. # want to do that.
lix-sources = import ./pins.nix; lix-sources = import ./pins.nix;
nixVersions = prev.nixVersions // rec { lix = maybeWarnWrongMajor (maybeWarnDuplicate lixPackageToUse);
# FIXME: do something less scuffed
nix_2_18 = lixPkg; nixVersions = prev.nixVersions // {
stable = nix_2_18; stable = final.lix;
nix_2_18_upstream = prev.nixVersions.nix_2_18; stable_upstream = prev.nixVersions.stable;
}; };
nix-eval-jobs = (prev.nix-eval-jobs.override { nix-eval-jobs = (prev.nix-eval-jobs.override {
# lix # lix
nix = final.nixVersions.nix_2_18; nix = final.lix;
}).overrideAttrs (old: { }).overrideAttrs (old:
let src = final.lix-sources.nix-eval-jobs;
in {
version = "2.92.0-lix-${builtins.substring 0 7 src.rev}";
# FIXME: should this be patches instead? # FIXME: should this be patches instead?
src = final.lix-sources.nix-eval-jobs; inherit src;
mesonBuildType = "debugoptimized"; mesonBuildType = "debugoptimized";
ninjaFlags = old.ninjaFlags or [ ] ++ [ "-v" ]; ninjaFlags = old.ninjaFlags or [ ] ++ [ "-v" ];
});
# force these onto upstream so we are not regularly rebuilding electron
prefetch-yarn-deps = prev.prefetch-yarn-deps.override {
nix = final.nixVersions.nix_2_18_upstream;
};
# support both having and missing https://github.com/NixOS/nixpkgs/pull/304913
prefetch-npm-deps =
if (lib.functionArgs prev.prefetch-npm-deps.override) ? nix
then prev.prefetch-npm-deps.override {
nix = final.nixVersions.nix_2_18_upstream;
} }
else prev.prefetch-npm-deps; );
nix-prefetch-git = prev.nix-prefetch-git.override { nix-doc = prev.nix-doc.override { withPlugin = false; };
nix = final.nixVersions.nix_2_18_upstream;
}; };
in
nixos-option = prev.nixos-option.override { # Make the overlay idempotent, since flakes passing nixos modules around by
nix = final.nixVersions.nix_2_18_upstream; # value and many other things make it way too easy to include the overlay
}; # twice
if (prev ? lix-overlay-present) then { lix-overlay-present = 2; } else overlay
nix-doc = prev.callPackage ./nix-doc/package.nix { withPlugin = false; };
nix-init = prev.nix-init.override {
nix = final.nixVersions.nix_2_18_upstream;
};
nurl = prev.nurl.override {
nix = final.nixVersions.nix_2_18_upstream;
};
}

View file

@ -1 +1 @@
{"nix-eval-jobs": {"kind": "git", "rev": "793841a9b7b689e37c9a7902710aab2bd6a833d5", "nar_hash": "sha256-hUYgXLE0+zOkGPXXwiVPYAZBQ5Es9OOkm800puk7a94=", "url": "git@git.lix.systems:lix-project/nix-eval-jobs", "ref": "main"}} {"nix-eval-jobs": {"kind": "tarball", "rev": "dfc286ca3dc49118c30d8d6205d6d6af76c62b7a", "nar_hash": "sha256-H94CcQ3yamG5+RMxtxXllR02YIlxQ5WD/8PcolO9yEA=", "locked_url": "https://git.lix.systems/api/v1/repos/lix-project/nix-eval-jobs/archive/dfc286ca3dc49118c30d8d6205d6d6af76c62b7a.tar.gz?rev=dfc286ca3dc49118c30d8d6205d6d6af76c62b7a", "url": "https://git.lix.systems/lix-project/nix-eval-jobs/archive/main.tar.gz"}}

View file

@ -14,11 +14,13 @@ let
narHash = args.nar_hash; narHash = args.nar_hash;
} }
else if kind == "tarball" then else if kind == "tarball" then
builtins.fetchTarball args // {
{ outPath = builtins.fetchTarball {
name = "source"; name = "source";
url = args.locked_url; url = args.locked_url;
sha256 = args.nar_hash; sha256 = args.nar_hash;
} else builtins.throw "unsupported input type ${kind}"; };
}
else builtins.throw "unsupported input type ${kind}";
in in
builtins.mapAttrs (_: fetchPin) pins builtins.mapAttrs (_: fetchPin) pins

View file

@ -1,17 +1,32 @@
{ nixos, lix-module }: { pkgs, nixos, lix-module }:
let let
pkgs' = import pkgs.path {
inherit (pkgs) system;
};
configs = { configs = {
it-builds = nixos ({ ... }: { it-builds = nixos ({ ... }: {
imports = [ lix-module ];
documentation.enable = false; documentation.enable = false;
fileSystems."/".device = "ignore-root-device"; fileSystems."/".device = "ignore-root-device";
boot.loader.grub.enable = false; boot.loader.grub.enable = false;
system.stateVersion = "24.05"; system.stateVersion = "24.05";
}); });
# Intentionally provoke the wrong major version.
# Does assume that the module is one major ahead of the release; the main
# purpose here is a manual testing fixture.
wrongMajor = pkgs'.nixos ({ ... }: {
imports = [ (import ./module.nix { lix = null; }) ];
documentation.enable = false;
fileSystems."/".device = "ignore-root-device";
boot.loader.grub.enable = false;
system.stateVersion = "24.05";
});
}; };
in in
{ {
inherit configs; inherit configs;
it-builds = configs.it-builds.config.system.build.toplevel; it-builds = configs.it-builds.config.system.build.toplevel;
wrongMajor = configs.wrongMajor.config.system.build.toplevel;
} }

View file

@ -1,4 +1,5 @@
#!/usr/bin/env python #!/usr/bin/env nix-shell
#!nix-shell -i python3 -p 'python3.withPackages (ps: [ ps.requests ])'
""" """
Updates pins in this repo to their latest version. Updates pins in this repo to their latest version.
@ -146,7 +147,7 @@ def lock_git(url, branch) -> GitPinSerialized:
PINS = { PINS = {
'nix-eval-jobs': 'nix-eval-jobs':
GitPinSpec('git@git.lix.systems:lix-project/nix-eval-jobs', 'main') TarballPinSpec('https://git.lix.systems/lix-project/nix-eval-jobs/archive/main.tar.gz')
} }

3
version.json Normal file
View file

@ -0,0 +1,3 @@
{
"version": "2.92.0-dev"
}