aboutsummaryrefslogtreecommitdiff
path: root/flake.nix
diff options
context:
space:
mode:
authorJohn Ericson <John.Ericson@Obsidian.Systems>2021-02-25 20:35:11 +0000
committerJohn Ericson <John.Ericson@Obsidian.Systems>2021-02-25 21:51:05 +0000
commitca0994819d68aee26a2906c37a47ae609ac46c4c (patch)
treec96805c008c22926b1eaadc340a99323d53be532 /flake.nix
parent10e81bf871551901ff0383bdede0f79325e93867 (diff)
parentc189031e8be0530d73a817571ad7f81ad5eedce6 (diff)
Merge remote-tracking branch 'upstream/master' into path-info
Diffstat (limited to 'flake.nix')
-rw-r--r--flake.nix241
1 files changed, 144 insertions, 97 deletions
diff --git a/flake.nix b/flake.nix
index 200417c3e..e59ec9a35 100644
--- a/flake.nix
+++ b/flake.nix
@@ -1,10 +1,10 @@
{
description = "The purely functional package manager";
- inputs.nixpkgs.url = "nixpkgs/nixos-20.03-small";
- inputs.lowdown-src = { url = "github:kristapsdz/lowdown"; flake = false; };
+ inputs.nixpkgs.url = "nixpkgs/nixos-20.09-small";
+ #inputs.lowdown-src = { url = "github:kristapsdz/lowdown"; flake = false; };
- outputs = { self, nixpkgs, lowdown-src }:
+ outputs = { self, nixpkgs }:
let
@@ -12,11 +12,13 @@
versionSuffix =
if officialRelease
then ""
- else "pre${builtins.substring 0 8 (self.lastModifiedDate or self.lastModified)}_${self.shortRev or "dirty"}";
+ else "pre${builtins.substring 0 8 (self.lastModifiedDate or self.lastModified or "19700101")}_${self.shortRev or "dirty"}";
officialRelease = false;
- systems = [ "x86_64-linux" "i686-linux" "x86_64-darwin" "aarch64-linux" ];
+ linux64BitSystems = [ "x86_64-linux" "aarch64-linux" ];
+ linuxSystems = linux64BitSystems ++ [ "i686-linux" ];
+ systems = linuxSystems ++ [ "x86_64-darwin" ];
forAllSystems = f: nixpkgs.lib.genAttrs systems (system: f system);
@@ -61,34 +63,42 @@
"LDFLAGS=-fuse-ld=gold"
];
- buildDeps =
- [ bison
- flex
- mdbook
- lowdown
- autoconf-archive
- autoreconfHook
- curl
+ nativeBuildDeps =
+ [
+ buildPackages.bison
+ buildPackages.flex
+ (lib.getBin buildPackages.lowdown)
+ buildPackages.mdbook
+ buildPackages.autoconf-archive
+ buildPackages.autoreconfHook
+ buildPackages.pkgconfig
+
+ # Tests
+ buildPackages.git
+ buildPackages.mercurial
+ buildPackages.jq
+ ];
+
+ buildDeps =
+ [ curl
bzip2 xz brotli zlib editline
- openssl pkgconfig sqlite
+ openssl sqlite
libarchive
boost
nlohmann_json
-
- # Tests
- git
- mercurial
- jq
+ lowdown
gmock
]
++ lib.optionals stdenv.isLinux [libseccomp utillinuxMinimal]
++ lib.optional (stdenv.isLinux || stdenv.isDarwin) libsodium
- ++ lib.optional (stdenv.isLinux || stdenv.isDarwin)
- (aws-sdk-cpp.override {
- apis = ["s3" "transfer"];
- customMemoryManagement = false;
- });
+ ++ lib.optional stdenv.isx86_64 libcpuid;
+
+ awsDeps = lib.optional (stdenv.isLinux || stdenv.isDarwin)
+ (aws-sdk-cpp.override {
+ apis = ["s3" "transfer"];
+ customMemoryManagement = false;
+ });
propagatedDeps =
[ (boehmgc.override { enableLargeConfig = true; })
@@ -100,14 +110,49 @@
];
};
+ installScriptFor = systems:
+ with nixpkgsFor.x86_64-linux;
+ runCommand "installer-script"
+ { buildInputs = [ nix ];
+ }
+ ''
+ mkdir -p $out/nix-support
+
+ # Converts /nix/store/50p3qk8kka9dl6wyq40vydq945k0j3kv-nix-2.4pre20201102_550e11f/bin/nix
+ # To 50p3qk8kka9dl6wyq40vydq945k0j3kv/bin/nix
+ tarballPath() {
+ # Remove the store prefix
+ local path=''${1#${builtins.storeDir}/}
+ # Get the path relative to the derivation root
+ local rest=''${path#*/}
+ # Get the derivation hash
+ local drvHash=''${path%%-*}
+ echo "$drvHash/$rest"
+ }
+
+ substitute ${./scripts/install.in} $out/install \
+ ${pkgs.lib.concatMapStrings
+ (system:
+ '' \
+ --replace '@tarballHash_${system}@' $(nix --experimental-features nix-command hash-file --base16 --type sha256 ${self.hydraJobs.binaryTarball.${system}}/*.tar.xz) \
+ --replace '@tarballPath_${system}@' $(tarballPath ${self.hydraJobs.binaryTarball.${system}}/*.tar.xz) \
+ ''
+ )
+ systems
+ } --replace '@nixVersion@' ${version}
+
+ echo "file installer $out/install" >> $out/nix-support/hydra-build-products
+ '';
+
in {
# A Nixpkgs overlay that overrides the 'nix' and
# 'nix.perl-bindings' packages.
overlay = final: prev: {
- nix = with final; with commonDeps pkgs; (stdenv.mkDerivation {
+ nix = with final; with commonDeps pkgs; stdenv.mkDerivation {
name = "nix-${version}";
+ inherit version;
src = self;
@@ -115,7 +160,8 @@
outputs = [ "out" "dev" "doc" ];
- buildInputs = buildDeps;
+ nativeBuildInputs = nativeBuildDeps;
+ buildInputs = buildDeps ++ awsDeps;
propagatedBuildInputs = propagatedDeps;
@@ -152,21 +198,23 @@
installCheckFlags = "sysconfdir=$(out)/etc";
separateDebugInfo = true;
- }) // {
- perl-bindings = with final; stdenv.mkDerivation {
+ passthru.perl-bindings = with final; stdenv.mkDerivation {
name = "nix-perl-${version}";
src = self;
+ nativeBuildInputs =
+ [ buildPackages.autoconf-archive
+ buildPackages.autoreconfHook
+ buildPackages.pkgconfig
+ ];
+
buildInputs =
- [ autoconf-archive
- autoreconfHook
- nix
+ [ nix
curl
bzip2
xz
- pkgconfig
pkgs.perl
boost
nlohmann_json
@@ -185,27 +233,25 @@
};
- lowdown = with final; stdenv.mkDerivation {
- name = "lowdown-0.7.1";
+ lowdown = with final; stdenv.mkDerivation rec {
+ name = "lowdown-0.8.0";
- /*
src = fetchurl {
- url = https://kristaps.bsd.lv/lowdown/snapshots/lowdown-0.7.1.tar.gz;
- hash = "sha512-1daoAQfYD0LdhK6aFhrSQvadjc5GsSPBZw0fJDb+BEHYMBLjqiUl2A7H8N+l0W4YfGKqbsPYSrCy4vct+7U6FQ==";
+ url = "https://kristaps.bsd.lv/lowdown/snapshots/${name}.tar.gz";
+ hash = "sha512-U9WeGoInT9vrawwa57t6u9dEdRge4/P+0wLxmQyOL9nhzOEUU2FRz2Be9H0dCjYE7p2v3vCXIYk40M+jjULATw==";
};
- */
- src = lowdown-src;
+ #src = lowdown-src;
- outputs = [ "out" "dev" ];
+ outputs = [ "out" "bin" "dev" ];
- buildInputs = [ which ];
+ nativeBuildInputs = [ which ];
configurePhase =
''
./configure \
PREFIX=${placeholder "dev"} \
- BINDIR=${placeholder "out"}/bin
+ BINDIR=${placeholder "bin"}/bin
'';
};
@@ -214,10 +260,12 @@
hydraJobs = {
# Binary package for various platforms.
- build = nixpkgs.lib.genAttrs systems (system: nixpkgsFor.${system}.nix);
+ build = nixpkgs.lib.genAttrs systems (system: self.packages.${system}.nix);
+
+ buildStatic = nixpkgs.lib.genAttrs linux64BitSystems (system: self.packages.${system}.nix-static);
# Perl bindings for various platforms.
- perlBindings = nixpkgs.lib.genAttrs systems (system: nixpkgsFor.${system}.nix.perl-bindings);
+ perlBindings = nixpkgs.lib.genAttrs systems (system: self.packages.${system}.nix.perl-bindings);
# Binary tarball for various platforms, containing a Nix store
# with the closure of 'nix' package, and the second half of
@@ -236,6 +284,7 @@
}
''
cp ${installerClosureInfo}/registration $TMPDIR/reginfo
+ cp ${./scripts/create-darwin-volume.sh} $TMPDIR/create-darwin-volume.sh
substitute ${./scripts/install-nix-from-closure.sh} $TMPDIR/install \
--subst-var-by nix ${nix} \
--subst-var-by cacert ${cacert}
@@ -254,6 +303,7 @@
# SC1090: Don't worry about not being able to find
# $nix/etc/profile.d/nix.sh
shellcheck --exclude SC1090 $TMPDIR/install
+ shellcheck $TMPDIR/create-darwin-volume.sh
shellcheck $TMPDIR/install-darwin-multi-user.sh
shellcheck $TMPDIR/install-systemd-multi-user.sh
@@ -269,6 +319,7 @@
fi
chmod +x $TMPDIR/install
+ chmod +x $TMPDIR/create-darwin-volume.sh
chmod +x $TMPDIR/install-darwin-multi-user.sh
chmod +x $TMPDIR/install-systemd-multi-user.sh
chmod +x $TMPDIR/install-multi-user
@@ -281,11 +332,15 @@
--absolute-names \
--hard-dereference \
--transform "s,$TMPDIR/install,$dir/install," \
+ --transform "s,$TMPDIR/create-darwin-volume.sh,$dir/create-darwin-volume.sh," \
--transform "s,$TMPDIR/reginfo,$dir/.reginfo," \
--transform "s,$NIX_STORE,$dir/store,S" \
- $TMPDIR/install $TMPDIR/install-darwin-multi-user.sh \
+ $TMPDIR/install \
+ $TMPDIR/create-darwin-volume.sh \
+ $TMPDIR/install-darwin-multi-user.sh \
$TMPDIR/install-systemd-multi-user.sh \
- $TMPDIR/install-multi-user $TMPDIR/reginfo \
+ $TMPDIR/install-multi-user \
+ $TMPDIR/reginfo \
$(cat ${installerClosureInfo}/store-paths)
'');
@@ -293,23 +348,8 @@
# to https://nixos.org/nix/install. It downloads the binary
# tarball for the user's system and calls the second half of the
# installation script.
- installerScript =
- with nixpkgsFor.x86_64-linux;
- runCommand "installer-script"
- { buildInputs = [ nix ];
- }
- ''
- mkdir -p $out/nix-support
-
- substitute ${./scripts/install.in} $out/install \
- ${pkgs.lib.concatMapStrings
- (system: "--replace '@binaryTarball_${system}@' $(nix --experimental-features nix-command hash-file --base16 --type sha256 ${self.hydraJobs.binaryTarball.${system}}/*.tar.xz) ")
- [ "x86_64-linux" "i686-linux" "x86_64-darwin" "aarch64-linux" ]
- } \
- --replace '@nixVersion@' ${version}
-
- echo "file installer $out/install" >> $out/nix-support/hydra-build-products
- '';
+ installerScript = installScriptFor [ "x86_64-linux" "i686-linux" "x86_64-darwin" "aarch64-linux" ];
+ installerScriptForGHA = installScriptFor [ "x86_64-linux" "x86_64-darwin" ];
# Line coverage analysis.
coverage =
@@ -323,7 +363,8 @@
enableParallelBuilding = true;
- buildInputs = buildDeps ++ propagatedDeps;
+ nativeBuildInputs = nativeBuildDeps;
+ buildInputs = buildDeps ++ propagatedDeps ++ awsDeps;
dontInstall = false;
@@ -364,38 +405,6 @@
inherit (self) overlay;
});
- # Test whether the binary tarball works in an Ubuntu system.
- tests.binaryTarball =
- with nixpkgsFor.x86_64-linux;
- vmTools.runInLinuxImage (runCommand "nix-binary-tarball-test"
- { diskImage = vmTools.diskImages.ubuntu1204x86_64;
- }
- ''
- set -x
- useradd -m alice
- su - alice -c 'tar xf ${self.hydraJobs.binaryTarball.x86_64-linux}/*.tar.*'
- mkdir /dest-nix
- mount -o bind /dest-nix /nix # Provide a writable /nix.
- chown alice /nix
- su - alice -c '_NIX_INSTALLER_TEST=1 ./nix-*/install'
- su - alice -c 'nix-store --verify'
- su - alice -c 'PAGER= nix-store -qR ${self.hydraJobs.build.x86_64-linux}'
-
- # Check whether 'nix upgrade-nix' works.
- cat > /tmp/paths.nix <<EOF
- {
- x86_64-linux = "${self.hydraJobs.build.x86_64-linux}";
- }
- EOF
- su - alice -c 'nix --experimental-features nix-command upgrade-nix -vvv --nix-store-paths-url file:///tmp/paths.nix'
- (! [ -L /home/alice/.profile-1-link ])
- su - alice -c 'PAGER= nix-store -qR ${self.hydraJobs.build.x86_64-linux}'
-
- mkdir -p $out/nix-support
- touch $out/nix-support/hydra-build-products
- umount /nix
- '');
-
/*
# Check whether we can still evaluate all of Nixpkgs.
tests.evalNixpkgs =
@@ -429,6 +438,43 @@
packages = forAllSystems (system: {
inherit (nixpkgsFor.${system}) nix;
+ } // nixpkgs.lib.optionalAttrs (builtins.elem system linux64BitSystems) {
+ nix-static = let
+ nixpkgs = nixpkgsFor.${system}.pkgsStatic;
+ in with commonDeps nixpkgs; nixpkgs.stdenv.mkDerivation {
+ name = "nix-${version}";
+
+ src = self;
+
+ VERSION_SUFFIX = versionSuffix;
+
+ outputs = [ "out" "dev" "doc" ];
+
+ nativeBuildInputs = nativeBuildDeps;
+ buildInputs = buildDeps ++ propagatedDeps;
+
+ configureFlags = [ "--sysconfdir=/etc" ];
+
+ enableParallelBuilding = true;
+
+ makeFlags = "profiledir=$(out)/etc/profile.d";
+
+ doCheck = true;
+
+ installFlags = "sysconfdir=$(out)/etc";
+
+ postInstall = ''
+ mkdir -p $doc/nix-support
+ echo "doc manual $doc/share/doc/nix/manual" >> $doc/nix-support/hydra-build-products
+ mkdir -p $out/nix-support
+ echo "file binary-dist $out/bin/nix" >> $out/nix-support/hydra-build-products
+ '';
+
+ doInstallCheck = true;
+ installCheckFlags = "sysconfdir=$(out)/etc";
+
+ stripAllList = ["bin"];
+ };
});
defaultPackage = forAllSystems (system: self.packages.${system}.nix);
@@ -442,7 +488,8 @@
outputs = [ "out" "dev" "doc" ];
- buildInputs = buildDeps ++ propagatedDeps ++ perlDeps;
+ nativeBuildInputs = nativeBuildDeps;
+ buildInputs = buildDeps ++ propagatedDeps ++ awsDeps ++ perlDeps;
inherit configureFlags;