Remove prefetch-npm-deps override #18

Closed
k900 wants to merge 45 commits from k900/nixos-module:prefetch-npm-fix into main
11 changed files with 278 additions and 42 deletions

2
.gitignore vendored Normal file
View file

@ -0,0 +1,2 @@
result
result-*

19
LICENSE Normal file
View file

@ -0,0 +1,19 @@
MIT License
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is furnished
to do so, subject to the following conditions:
The above copyright notice and this permission notice (including the next
paragraph) shall be included in all copies or substantial portions of the
Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS
OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF
OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

10
default.nix Normal file
View file

@ -0,0 +1,10 @@
(import
(
let lock = builtins.fromJSON (builtins.readFile ./flake.lock); in
fetchTarball {
url = lock.nodes.flake-compat.locked.url or "https://git.lix.systems/lix-project/flake-compat/archive/${lock.nodes.flake-compat.locked.rev}.tar.gz";
sha256 = lock.nodes.flake-compat.locked.narHash;
}
)
{ src = ./.; }
).defaultNix

View file

@ -1,5 +1,20 @@
{ {
"nodes": { "nodes": {
"flake-compat": {
"locked": {
"lastModified": 1696426674,
"narHash": "sha256-kvjfFW7WAETZlt09AgDn1MrtKzP7t90Vf7vypd3OL1U=",
"ref": "refs/heads/master",
"rev": "0f9255e01c2351cc7d116c072cb317785dd33b33",
"revCount": 57,
"type": "git",
"url": "ssh://git@git.lix.systems/lix-project/flake-compat"
},
"original": {
"type": "git",
"url": "ssh://git@git.lix.systems/lix-project/flake-compat"
}
},
"flake-utils": { "flake-utils": {
"inputs": { "inputs": {
"systems": "systems" "systems": "systems"
@ -18,19 +33,35 @@
"type": "github" "type": "github"
} }
}, },
"lix": { "flakey-profile": {
"locked": { "locked": {
"lastModified": 1709811453, "lastModified": 1711325813,
"narHash": "sha256-UOyTAdUAJv80w3s6rrgYB5tQjp43u5Zp2dlM94uud04=", "narHash": "sha256-ygJR5VikyCfK0CUJHboOKJVr6s9HQ1RXcvFEFnv+KIk=",
"owner": "lf-",
"repo": "flakey-profile",
"rev": "3b32c4a71f89b874fe0be2dc125eacb9c3473204",
"type": "github"
},
"original": {
"owner": "lf-",
"repo": "flakey-profile",
"type": "github"
}
},
"lix": {
"flake": false,
"locked": {
"lastModified": 1713222580,
"narHash": "sha256-wWUZtNf1mSaO8B9mYWSR0AoYVQhryTZIW+b1yIYkAcs=",
"ref": "refs/heads/main", "ref": "refs/heads/main",
"rev": "8a268359b06471b463a8f3fc46c83a1fced8ab75", "rev": "866c76c7f93442993eb84b4268811bc101b4d447",
"revCount": 15077, "revCount": 15403,
"type": "git", "type": "git",
"url": "ssh://gerrit.lix.systems:2022/lix" "url": "ssh://git@git.lix.systems/lix-project/lix.git"
}, },
"original": { "original": {
"type": "git", "type": "git",
"url": "ssh://gerrit.lix.systems:2022/lix" "url": "ssh://git@git.lix.systems/lix-project/lix.git"
} }
}, },
"nixpkgs": { "nixpkgs": {
@ -51,7 +82,9 @@
}, },
"root": { "root": {
"inputs": { "inputs": {
"flake-compat": "flake-compat",
"flake-utils": "flake-utils", "flake-utils": "flake-utils",
"flakey-profile": "flakey-profile",
"lix": "lix", "lix": "lix",
"nixpkgs": "nixpkgs" "nixpkgs": "nixpkgs"
} }

View file

@ -1,25 +1,33 @@
{ {
# fixme: use the forgejo address
inputs.nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable"; inputs.nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable";
inputs.lix = { inputs.lix = {
url = "git+ssh://gerrit.lix.systems:2022/lix"; url = "git+ssh://git@git.lix.systems/lix-project/lix.git";
flake = false; flake = false;
}; };
inputs.flake-utils.url = "github:numtide/flake-utils"; inputs.flake-utils.url = "github:numtide/flake-utils";
inputs.flake-compat.url = "git+ssh://git@git.lix.systems/lix-project/flake-compat";
inputs.flakey-profile.url = "github:lf-/flakey-profile";
outputs = { self, nixpkgs, lix, flake-utils }: { outputs = inputs@{ self, nixpkgs, lix, flake-utils, flakey-profile, ... }:
nixosModules.default = import ./module.nix { inherit lix; }; let versionSuffix = "pre${builtins.substring 0 8 lix.lastModifiedDate}-${lix.shortRev}";
overlays.default = import ./overlay.nix { inherit lix; }; in {
} // flake-utils.lib.eachDefaultSystem (system: inherit inputs;
let nixosModules.default = import ./module.nix { inherit lix versionSuffix; };
pkgs = import nixpkgs { overlays.default = import ./overlay.nix { inherit lix versionSuffix; };
inherit system; } // flake-utils.lib.eachDefaultSystem (system:
overlays = [ self.overlays.default ]; let
}; pkgs = import nixpkgs {
in inherit system;
{ overlays = [ self.overlays.default ];
inherit pkgs; };
packages.default = pkgs.nixVersions.nix_2_18; in
packages.nix-doc = pkgs.nix-doc; {
}); inherit pkgs;
packages = {
default = pkgs.nixVersions.nix_2_18;
inherit (pkgs) nix-doc nix-eval-jobs;
};
packages.system-profile = import ./system-profile.nix { inherit pkgs flakey-profile; };
});
} }

View file

@ -1,5 +1,5 @@
{ lix }: { lix, versionSuffix ? "" }:
{ pkgs, config, ... }: { pkgs, config, ... }:
{ {
nixpkgs.overlays = [ (import ./overlay.nix { inherit lix; }) ]; nixpkgs.overlays = [ (import ./overlay.nix { inherit lix versionSuffix; }) ];
} }

64
nix-doc/package.nix Normal file
View file

@ -0,0 +1,64 @@
# 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";
};
}

47
npins/default.nix Normal file
View file

@ -0,0 +1,47 @@
# Generated by npins. Do not modify; will be overwritten regularly
let
data = builtins.fromJSON (builtins.readFile ./sources.json);
version = data.version;
mkSource = spec:
assert spec ? type; let
path =
if spec.type == "Git" then mkGitSource spec
else if spec.type == "GitRelease" then mkGitSource spec
else if spec.type == "PyPi" then mkPyPiSource spec
else if spec.type == "Channel" then mkChannelSource spec
else builtins.throw "Unknown source type ${spec.type}";
in
spec // { outPath = path; };
mkGitSource = { repository, revision, url ? null, hash, ... }:
assert repository ? type;
# At the moment, either it is a plain git repository (which has an url), or it is a GitHub/GitLab repository
# In the latter case, there we will always be an url to the tarball
if url != null then
(builtins.fetchTarball {
inherit url;
sha256 = hash; # FIXME: check nix version & use SRI hashes
})
else assert repository.type == "Git"; builtins.fetchGit {
url = repository.url;
rev = revision;
# hash = hash;
};
mkPyPiSource = { url, hash, ... }:
builtins.fetchurl {
inherit url;
sha256 = hash;
};
mkChannelSource = { url, hash, ... }:
builtins.fetchTarball {
inherit url;
sha256 = hash;
};
in
if version == 3 then
builtins.mapAttrs (_: mkSource) data.pins
else
throw "Unsupported format version ${toString version} in sources.json. Try running `npins upgrade`"

16
npins/sources.json Normal file
View file

@ -0,0 +1,16 @@
{
"pins": {
"nix-eval-jobs": {
"type": "Git",
"repository": {
"type": "Git",
"url": "git+ssh://git@git.lix.systems/lix-project/nix-eval-jobs"
},
"branch": "main",
"revision": "793841a9b7b689e37c9a7902710aab2bd6a833d5",
"url": null,
"hash": "1pkb7glscd6dkfjf7x1cj51l21k09wjw5mzm32j37yrln5f20il5"
}
},
"version": 3
}

View file

@ -1,4 +1,4 @@
{ lix }: { lix, versionSuffix ? "" }:
final: prev: final: prev:
let let
boehmgc-patched = ((final.boehmgc.override { boehmgc-patched = ((final.boehmgc.override {
@ -10,38 +10,65 @@ let
(prev.path + "/pkgs/tools/package-management/nix/patches/boehmgc-coroutine-sp-fallback.patch") (prev.path + "/pkgs/tools/package-management/nix/patches/boehmgc-coroutine-sp-fallback.patch")
# https://github.com/ivmai/bdwgc/pull/586 # https://github.com/ivmai/bdwgc/pull/586
(lix + "/boehmgc-traceable_allocator-public.diff") (builtins.path { path = lix + "/boehmgc-traceable_allocator-public.diff"; name = "boehmgc-traceable_allocator-public.patch"; })
]; ];
}) })
); );
lixPkg = (final.callPackage (lix + "/package.nix") {
build-release-notes = false;
versionSuffix = "-lix${versionSuffix}";
boehmgc-nix = boehmgc-patched;
}).overrideAttrs {
# Note: load-bearing version override. Nixpkgs does version detection to determine
# what commands and whatnot we support, so tell Nixpkgs that we're 2.18 (ish).
version = "2.18.3-lix${versionSuffix}";
};
in in
{ {
# 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*
# want to do that.
lix-sources = import ./npins;
nixVersions = prev.nixVersions // rec { nixVersions = prev.nixVersions // rec {
# FIXME: do something less scuffed # FIXME: do something less scuffed
nix_2_18 = (prev.nixVersions.nix_2_18.override { boehmgc = boehmgc-patched; }).overrideAttrs (old: { nix_2_18 = lixPkg;
src = lix;
version = "2.18.3-lix";
VERSION_SUFFIX = "-lix";
patches = [ ];
});
stable = nix_2_18; stable = nix_2_18;
nix_2_18_upstream = prev.nixVersions.nix_2_18; nix_2_18_upstream = prev.nixVersions.nix_2_18;
}; };
nix-eval-jobs = (prev.nix-eval-jobs.override {
# lix
nix = final.nixVersions.nix_2_18;
}).overrideAttrs (old: {
# FIXME: should this be patches instead?
src = final.lix-sources.nix-eval-jobs;
mesonBuildType = "debugoptimized";
ninjaFlags = old.ninjaFlags or [ ] ++ [ "-v" ];
});
# force these onto upstream so we are not regularly rebuilding electron # force these onto upstream so we are not regularly rebuilding electron
prefetch-yarn-deps = prev.prefetch-yarn-deps.override { prefetch-yarn-deps = prev.prefetch-yarn-deps.override {
nix = final.nixVersions.nix_2_18_upstream; nix = final.nixVersions.nix_2_18_upstream;
}; };
prefetch-npm-deps = prev.prefetch-npm-deps.override {
nix = final.nixVersions.nix_2_18_upstream;
};
nix-prefetch-git = prev.nix-prefetch-git.override { nix-prefetch-git = prev.nix-prefetch-git.override {
nix = final.nixVersions.nix_2_18_upstream; nix = final.nixVersions.nix_2_18_upstream;
}; };
nix-doc = prev.nix-doc.overrideAttrs (old: { nixos-option = prev.nixos-option.override {
# for the purposes of nix C++ API for nix-doc, lix is Nix 2.20 nix = final.nixVersions.nix_2_18_upstream;
NIX_CFLAGS_COMPILE = [ "-DNIX_2_20_0" ]; };
});
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;
};
} }

10
system-profile.nix Normal file
View file

@ -0,0 +1,10 @@
{ pkgs, flakey-profile }:
flakey-profile.lib.mkProfile {
inherit pkgs;
paths = with pkgs; [
cacert
nix
];
name = "system-profile";
extraSwitchArgs = [ "--profile" "/nix/var/nix/profiles/default" ];
}