2019-04-08 17:28:05 +02:00
|
|
|
{
|
|
|
|
description = "The purely functional package manager";
|
|
|
|
|
2020-10-18 21:31:27 +02:00
|
|
|
inputs.nixpkgs.url = "nixpkgs/nixos-20.09-small";
|
2021-04-23 14:14:34 +02:00
|
|
|
inputs.lowdown-src = { url = "github:kristapsdz/lowdown/VERSION_0_8_4"; flake = false; };
|
2019-04-08 17:28:05 +02:00
|
|
|
|
2021-04-23 14:14:34 +02:00
|
|
|
outputs = { self, nixpkgs, lowdown-src }:
|
2019-04-08 17:28:05 +02:00
|
|
|
|
2019-10-04 10:45:33 +02:00
|
|
|
let
|
2019-05-29 17:25:41 +02:00
|
|
|
|
2020-04-01 00:20:12 +02:00
|
|
|
version = builtins.readFile ./.version + versionSuffix;
|
|
|
|
versionSuffix =
|
|
|
|
if officialRelease
|
|
|
|
then ""
|
2020-10-21 21:31:19 +02:00
|
|
|
else "pre${builtins.substring 0 8 (self.lastModifiedDate or self.lastModified or "19700101")}_${self.shortRev or "dirty"}";
|
2020-03-13 18:28:01 +01:00
|
|
|
|
2019-10-04 10:45:33 +02:00
|
|
|
officialRelease = false;
|
2019-04-08 17:28:05 +02:00
|
|
|
|
2020-10-28 06:13:18 +01:00
|
|
|
linux64BitSystems = [ "x86_64-linux" "aarch64-linux" ];
|
|
|
|
linuxSystems = linux64BitSystems ++ [ "i686-linux" ];
|
2020-07-30 22:49:52 +02:00
|
|
|
systems = linuxSystems ++ [ "x86_64-darwin" ];
|
2019-10-04 10:45:33 +02:00
|
|
|
|
Support non-x86_64-linux system types in flakes
A command like
$ nix run nixpkgs#hello
will now build the attribute 'packages.${system}.hello' rather than
'packages.hello'. Note that this does mean that the flake needs to
export an attribute for every system type it supports, and you can't
build on unsupported systems. So 'packages' typically looks like this:
packages = nixpkgs.lib.genAttrs ["x86_64-linux" "i686-linux"] (system: {
hello = ...;
});
The 'checks', 'defaultPackage', 'devShell', 'apps' and 'defaultApp'
outputs similarly are now attrsets that map system types to
derivations/apps. 'nix flake check' checks that the derivations for
all platforms evaluate correctly, but only builds the derivations in
'checks.${system}'.
Fixes #2861. (That issue also talks about access to ~/.config/nixpkgs
and --arg, but I think it's reasonable to say that flakes shouldn't
support those.)
The alternative to attribute selection is to pass the system type as
an argument to the flake's 'outputs' function, e.g. 'outputs = { self,
nixpkgs, system }: ...'. However, that approach would be at odds with
hermetic evaluation and make it impossible to enumerate the packages
provided by a flake.
2019-10-15 17:52:10 +02:00
|
|
|
forAllSystems = f: nixpkgs.lib.genAttrs systems (system: f system);
|
|
|
|
|
2019-10-04 10:45:33 +02:00
|
|
|
# Memoize nixpkgs for different platforms for efficiency.
|
Support non-x86_64-linux system types in flakes
A command like
$ nix run nixpkgs#hello
will now build the attribute 'packages.${system}.hello' rather than
'packages.hello'. Note that this does mean that the flake needs to
export an attribute for every system type it supports, and you can't
build on unsupported systems. So 'packages' typically looks like this:
packages = nixpkgs.lib.genAttrs ["x86_64-linux" "i686-linux"] (system: {
hello = ...;
});
The 'checks', 'defaultPackage', 'devShell', 'apps' and 'defaultApp'
outputs similarly are now attrsets that map system types to
derivations/apps. 'nix flake check' checks that the derivations for
all platforms evaluate correctly, but only builds the derivations in
'checks.${system}'.
Fixes #2861. (That issue also talks about access to ~/.config/nixpkgs
and --arg, but I think it's reasonable to say that flakes shouldn't
support those.)
The alternative to attribute selection is to pass the system type as
an argument to the flake's 'outputs' function, e.g. 'outputs = { self,
nixpkgs, system }: ...'. However, that approach would be at odds with
hermetic evaluation and make it impossible to enumerate the packages
provided by a flake.
2019-10-15 17:52:10 +02:00
|
|
|
nixpkgsFor = forAllSystems (system:
|
2019-10-04 10:45:33 +02:00
|
|
|
import nixpkgs {
|
|
|
|
inherit system;
|
|
|
|
overlays = [ self.overlay ];
|
|
|
|
}
|
|
|
|
);
|
|
|
|
|
|
|
|
commonDeps = pkgs: with pkgs; rec {
|
|
|
|
# Use "busybox-sandbox-shell" if present,
|
|
|
|
# if not (legacy) fallback and hope it's sufficient.
|
|
|
|
sh = pkgs.busybox-sandbox-shell or (busybox.override {
|
|
|
|
useMusl = true;
|
|
|
|
enableStatic = true;
|
|
|
|
enableMinimal = true;
|
|
|
|
extraConfig = ''
|
|
|
|
CONFIG_FEATURE_FANCY_ECHO y
|
|
|
|
CONFIG_FEATURE_SH_MATH y
|
|
|
|
CONFIG_FEATURE_SH_MATH_64 y
|
|
|
|
|
|
|
|
CONFIG_ASH y
|
|
|
|
CONFIG_ASH_OPTIMIZE_FOR_SIZE y
|
|
|
|
|
|
|
|
CONFIG_ASH_ALIAS y
|
|
|
|
CONFIG_ASH_BASH_COMPAT y
|
|
|
|
CONFIG_ASH_CMDCMD y
|
|
|
|
CONFIG_ASH_ECHO y
|
|
|
|
CONFIG_ASH_GETOPTS y
|
|
|
|
CONFIG_ASH_INTERNAL_GLOB y
|
|
|
|
CONFIG_ASH_JOB_CONTROL y
|
|
|
|
CONFIG_ASH_PRINTF y
|
|
|
|
CONFIG_ASH_TEST y
|
|
|
|
'';
|
|
|
|
});
|
|
|
|
|
|
|
|
configureFlags =
|
2019-11-06 10:44:21 +01:00
|
|
|
lib.optionals stdenv.isLinux [
|
2019-10-04 10:45:33 +02:00
|
|
|
"--with-sandbox-shell=${sh}/bin/busybox"
|
2020-09-23 16:05:47 +02:00
|
|
|
"LDFLAGS=-fuse-ld=gold"
|
2019-10-04 10:45:33 +02:00
|
|
|
];
|
|
|
|
|
2020-07-30 21:59:57 +02:00
|
|
|
|
|
|
|
nativeBuildDeps =
|
|
|
|
[
|
|
|
|
buildPackages.bison
|
|
|
|
buildPackages.flex
|
2020-09-04 04:43:56 +02:00
|
|
|
(lib.getBin buildPackages.lowdown)
|
2020-09-04 04:40:36 +02:00
|
|
|
buildPackages.mdbook
|
2020-09-04 04:30:12 +02:00
|
|
|
buildPackages.autoconf-archive
|
2020-07-30 21:59:57 +02:00
|
|
|
buildPackages.autoreconfHook
|
|
|
|
buildPackages.pkgconfig
|
|
|
|
|
|
|
|
# Tests
|
|
|
|
buildPackages.git
|
|
|
|
buildPackages.mercurial
|
2020-07-30 22:49:45 +02:00
|
|
|
buildPackages.jq
|
2021-03-24 14:50:15 +01:00
|
|
|
]
|
|
|
|
++ lib.optionals stdenv.isLinux [(pkgs.util-linuxMinimal or pkgs.utillinuxMinimal)];
|
2020-07-30 21:59:57 +02:00
|
|
|
|
2020-03-13 18:28:01 +01:00
|
|
|
buildDeps =
|
2020-09-04 04:30:12 +02:00
|
|
|
[ curl
|
2021-04-15 13:51:00 +02:00
|
|
|
bzip2 xz brotli editline
|
2020-09-04 04:30:12 +02:00
|
|
|
openssl sqlite
|
2019-12-20 12:45:58 +01:00
|
|
|
libarchive
|
2019-10-04 10:45:33 +02:00
|
|
|
boost
|
2020-03-20 13:09:11 +01:00
|
|
|
nlohmann_json
|
2020-09-04 04:40:36 +02:00
|
|
|
lowdown
|
2020-05-28 12:55:24 +02:00
|
|
|
gmock
|
2019-10-04 10:45:33 +02:00
|
|
|
]
|
2021-03-24 14:50:15 +01:00
|
|
|
++ lib.optionals stdenv.isLinux [libseccomp]
|
2021-02-16 14:32:12 +01:00
|
|
|
++ lib.optional (stdenv.isLinux || stdenv.isDarwin) libsodium
|
|
|
|
++ lib.optional stdenv.isx86_64 libcpuid;
|
2020-07-30 21:59:57 +02:00
|
|
|
|
|
|
|
awsDeps = lib.optional (stdenv.isLinux || stdenv.isDarwin)
|
|
|
|
(aws-sdk-cpp.override {
|
|
|
|
apis = ["s3" "transfer"];
|
|
|
|
customMemoryManagement = false;
|
|
|
|
});
|
2019-10-04 10:45:33 +02:00
|
|
|
|
2020-02-15 21:48:28 +01:00
|
|
|
propagatedDeps =
|
|
|
|
[ (boehmgc.override { enableLargeConfig = true; })
|
|
|
|
];
|
|
|
|
|
2019-10-04 10:45:33 +02:00
|
|
|
perlDeps =
|
|
|
|
[ perl
|
|
|
|
perlPackages.DBDSQLite
|
|
|
|
];
|
|
|
|
};
|
|
|
|
|
2021-02-15 11:20:54 +01:00
|
|
|
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
|
|
|
|
'';
|
|
|
|
|
2021-03-16 13:43:08 +01:00
|
|
|
testNixVersions = pkgs: client: daemon: with commonDeps pkgs; pkgs.stdenv.mkDerivation {
|
|
|
|
NIX_DAEMON_PACKAGE = daemon;
|
|
|
|
NIX_CLIENT_PACKAGE = client;
|
2021-03-16 16:44:42 +01:00
|
|
|
# Must keep this name short as OSX has a rather strict limit on the
|
|
|
|
# socket path length, and this name appears in the path of the
|
|
|
|
# nix-daemon socket used in the tests
|
|
|
|
name = "nix-tests";
|
2021-03-16 13:43:08 +01:00
|
|
|
inherit version;
|
|
|
|
|
|
|
|
src = self;
|
|
|
|
|
|
|
|
VERSION_SUFFIX = versionSuffix;
|
|
|
|
|
|
|
|
nativeBuildInputs = nativeBuildDeps;
|
|
|
|
buildInputs = buildDeps ++ awsDeps;
|
|
|
|
propagatedBuildInputs = propagatedDeps;
|
|
|
|
|
|
|
|
enableParallelBuilding = true;
|
|
|
|
|
|
|
|
dontBuild = true;
|
|
|
|
doInstallCheck = true;
|
|
|
|
|
|
|
|
installPhase = ''
|
|
|
|
mkdir -p $out
|
|
|
|
'';
|
|
|
|
installCheckPhase = "make installcheck";
|
|
|
|
|
|
|
|
};
|
|
|
|
|
2019-10-04 10:45:33 +02:00
|
|
|
in {
|
|
|
|
|
2019-10-04 17:25:59 +02:00
|
|
|
# A Nixpkgs overlay that overrides the 'nix' and
|
|
|
|
# 'nix.perl-bindings' packages.
|
2019-10-04 10:45:33 +02:00
|
|
|
overlay = final: prev: {
|
|
|
|
|
2020-11-10 10:43:33 +01:00
|
|
|
# An older version of Nix to test against when using the daemon.
|
|
|
|
# Currently using `nixUnstable` as the stable one doesn't respect
|
|
|
|
# `NIX_DAEMON_SOCKET_PATH` which is needed for the tests.
|
2021-03-16 13:43:08 +01:00
|
|
|
nixStable = prev.nix;
|
2020-11-10 10:43:33 +01:00
|
|
|
|
2021-01-29 18:31:40 +01:00
|
|
|
nix = with final; with commonDeps pkgs; stdenv.mkDerivation {
|
2020-03-13 18:28:01 +01:00
|
|
|
name = "nix-${version}";
|
2020-10-21 21:31:19 +02:00
|
|
|
inherit version;
|
2020-03-13 18:28:01 +01:00
|
|
|
|
|
|
|
src = self;
|
2019-10-04 10:45:33 +02:00
|
|
|
|
2020-04-01 00:20:12 +02:00
|
|
|
VERSION_SUFFIX = versionSuffix;
|
|
|
|
|
2020-03-13 18:28:01 +01:00
|
|
|
outputs = [ "out" "dev" "doc" ];
|
2019-10-07 14:02:52 +02:00
|
|
|
|
2020-07-30 21:59:57 +02:00
|
|
|
nativeBuildInputs = nativeBuildDeps;
|
|
|
|
buildInputs = buildDeps ++ awsDeps;
|
2019-10-04 10:45:33 +02:00
|
|
|
|
2020-02-15 21:48:28 +01:00
|
|
|
propagatedBuildInputs = propagatedDeps;
|
|
|
|
|
2019-10-04 10:45:33 +02:00
|
|
|
preConfigure =
|
|
|
|
''
|
2020-03-13 18:28:01 +01:00
|
|
|
# Copy libboost_context so we don't get all of Boost in our closure.
|
|
|
|
# https://github.com/NixOS/nixpkgs/issues/45462
|
2019-10-04 10:45:33 +02:00
|
|
|
mkdir -p $out/lib
|
|
|
|
cp -pd ${boost}/lib/{libboost_context*,libboost_thread*,libboost_system*} $out/lib
|
|
|
|
rm -f $out/lib/*.a
|
|
|
|
${lib.optionalString stdenv.isLinux ''
|
|
|
|
chmod u+w $out/lib/*.so.*
|
|
|
|
patchelf --set-rpath $out/lib:${stdenv.cc.cc.lib}/lib $out/lib/libboost_thread.so.*
|
|
|
|
''}
|
|
|
|
'';
|
|
|
|
|
|
|
|
configureFlags = configureFlags ++
|
|
|
|
[ "--sysconfdir=/etc" ];
|
|
|
|
|
|
|
|
enableParallelBuilding = true;
|
|
|
|
|
2020-09-21 13:28:51 +02:00
|
|
|
makeFlags = "profiledir=$(out)/etc/profile.d PRECOMPILE_HEADERS=1";
|
2019-10-04 10:45:33 +02:00
|
|
|
|
2020-03-13 18:28:01 +01:00
|
|
|
doCheck = true;
|
|
|
|
|
2019-10-04 10:45:33 +02:00
|
|
|
installFlags = "sysconfdir=$(out)/etc";
|
|
|
|
|
2020-05-28 12:55:24 +02:00
|
|
|
postInstall = ''
|
|
|
|
mkdir -p $doc/nix-support
|
|
|
|
echo "doc manual $doc/share/doc/nix/manual" >> $doc/nix-support/hydra-build-products
|
|
|
|
'';
|
|
|
|
|
2019-10-04 10:45:33 +02:00
|
|
|
doInstallCheck = true;
|
|
|
|
installCheckFlags = "sysconfdir=$(out)/etc";
|
2020-02-15 21:30:26 +01:00
|
|
|
|
|
|
|
separateDebugInfo = true;
|
2019-10-04 10:45:33 +02:00
|
|
|
|
2021-03-23 12:06:43 +01:00
|
|
|
strictDeps = true;
|
|
|
|
|
2021-01-29 18:31:40 +01:00
|
|
|
passthru.perl-bindings = with final; stdenv.mkDerivation {
|
2020-03-13 18:28:01 +01:00
|
|
|
name = "nix-perl-${version}";
|
|
|
|
|
|
|
|
src = self;
|
2019-10-04 10:45:33 +02:00
|
|
|
|
2020-09-04 04:30:12 +02:00
|
|
|
nativeBuildInputs =
|
|
|
|
[ buildPackages.autoconf-archive
|
|
|
|
buildPackages.autoreconfHook
|
|
|
|
buildPackages.pkgconfig
|
|
|
|
];
|
|
|
|
|
2019-10-04 17:25:59 +02:00
|
|
|
buildInputs =
|
2020-09-04 04:30:12 +02:00
|
|
|
[ nix
|
2020-03-13 18:28:01 +01:00
|
|
|
curl
|
|
|
|
bzip2
|
|
|
|
xz
|
|
|
|
pkgs.perl
|
|
|
|
boost
|
2020-08-25 10:33:41 +02:00
|
|
|
nlohmann_json
|
2020-03-13 18:28:01 +01:00
|
|
|
]
|
2019-10-04 17:25:59 +02:00
|
|
|
++ lib.optional (stdenv.isLinux || stdenv.isDarwin) libsodium;
|
2019-10-04 10:45:33 +02:00
|
|
|
|
2019-10-04 17:25:59 +02:00
|
|
|
configureFlags = ''
|
|
|
|
--with-dbi=${perlPackages.DBI}/${pkgs.perl.libPrefix}
|
|
|
|
--with-dbd-sqlite=${perlPackages.DBDSQLite}/${pkgs.perl.libPrefix}
|
|
|
|
'';
|
2019-10-04 10:45:33 +02:00
|
|
|
|
2019-10-04 17:25:59 +02:00
|
|
|
enableParallelBuilding = true;
|
|
|
|
|
|
|
|
postUnpack = "sourceRoot=$sourceRoot/perl";
|
|
|
|
};
|
2019-10-04 10:45:33 +02:00
|
|
|
|
|
|
|
};
|
|
|
|
|
2021-02-06 12:59:11 +01:00
|
|
|
lowdown = with final; stdenv.mkDerivation rec {
|
2021-04-23 14:14:34 +02:00
|
|
|
name = "lowdown-0.8.4";
|
2020-07-22 13:51:11 +02:00
|
|
|
|
2021-04-23 14:14:34 +02:00
|
|
|
/*
|
2020-07-22 13:51:11 +02:00
|
|
|
src = fetchurl {
|
2021-02-06 12:59:11 +01:00
|
|
|
url = "https://kristaps.bsd.lv/lowdown/snapshots/${name}.tar.gz";
|
|
|
|
hash = "sha512-U9WeGoInT9vrawwa57t6u9dEdRge4/P+0wLxmQyOL9nhzOEUU2FRz2Be9H0dCjYE7p2v3vCXIYk40M+jjULATw==";
|
2020-07-22 13:51:11 +02:00
|
|
|
};
|
2021-04-23 14:14:34 +02:00
|
|
|
*/
|
2020-08-24 21:13:39 +02:00
|
|
|
|
2021-04-23 14:14:34 +02:00
|
|
|
src = lowdown-src;
|
2020-07-22 13:51:11 +02:00
|
|
|
|
2020-09-04 04:43:56 +02:00
|
|
|
outputs = [ "out" "bin" "dev" ];
|
2020-07-22 13:51:11 +02:00
|
|
|
|
2020-09-04 04:40:36 +02:00
|
|
|
nativeBuildInputs = [ which ];
|
2020-07-22 13:51:11 +02:00
|
|
|
|
|
|
|
configurePhase =
|
|
|
|
''
|
|
|
|
./configure \
|
|
|
|
PREFIX=${placeholder "dev"} \
|
2020-09-04 04:43:56 +02:00
|
|
|
BINDIR=${placeholder "bin"}/bin
|
2020-07-22 13:51:11 +02:00
|
|
|
'';
|
|
|
|
};
|
|
|
|
|
2020-03-13 18:31:16 +01:00
|
|
|
};
|
|
|
|
|
|
|
|
hydraJobs = {
|
|
|
|
|
2019-10-04 10:45:33 +02:00
|
|
|
# Binary package for various platforms.
|
2020-07-30 21:59:57 +02:00
|
|
|
build = nixpkgs.lib.genAttrs systems (system: self.packages.${system}.nix);
|
|
|
|
|
2020-10-28 06:13:18 +01:00
|
|
|
buildStatic = nixpkgs.lib.genAttrs linux64BitSystems (system: self.packages.${system}.nix-static);
|
2019-10-04 10:45:33 +02:00
|
|
|
|
|
|
|
# Perl bindings for various platforms.
|
2020-07-30 21:59:57 +02:00
|
|
|
perlBindings = nixpkgs.lib.genAttrs systems (system: self.packages.${system}.nix.perl-bindings);
|
2019-10-04 10:45:33 +02:00
|
|
|
|
|
|
|
# Binary tarball for various platforms, containing a Nix store
|
|
|
|
# with the closure of 'nix' package, and the second half of
|
|
|
|
# the installation script.
|
|
|
|
binaryTarball = nixpkgs.lib.genAttrs systems (system:
|
|
|
|
|
|
|
|
with nixpkgsFor.${system};
|
|
|
|
|
|
|
|
let
|
|
|
|
installerClosureInfo = closureInfo { rootPaths = [ nix cacert ]; };
|
|
|
|
in
|
|
|
|
|
|
|
|
runCommand "nix-binary-tarball-${version}"
|
2019-11-06 10:44:21 +01:00
|
|
|
{ #nativeBuildInputs = lib.optional (system != "aarch64-linux") shellcheck;
|
2019-10-04 10:45:33 +02:00
|
|
|
meta.description = "Distribution-independent Nix bootstrap binaries for ${system}";
|
|
|
|
}
|
|
|
|
''
|
|
|
|
cp ${installerClosureInfo}/registration $TMPDIR/reginfo
|
2020-09-11 01:21:04 +02:00
|
|
|
cp ${./scripts/create-darwin-volume.sh} $TMPDIR/create-darwin-volume.sh
|
2019-10-04 10:45:33 +02:00
|
|
|
substitute ${./scripts/install-nix-from-closure.sh} $TMPDIR/install \
|
|
|
|
--subst-var-by nix ${nix} \
|
|
|
|
--subst-var-by cacert ${cacert}
|
|
|
|
|
|
|
|
substitute ${./scripts/install-darwin-multi-user.sh} $TMPDIR/install-darwin-multi-user.sh \
|
|
|
|
--subst-var-by nix ${nix} \
|
|
|
|
--subst-var-by cacert ${cacert}
|
|
|
|
substitute ${./scripts/install-systemd-multi-user.sh} $TMPDIR/install-systemd-multi-user.sh \
|
|
|
|
--subst-var-by nix ${nix} \
|
|
|
|
--subst-var-by cacert ${cacert}
|
|
|
|
substitute ${./scripts/install-multi-user.sh} $TMPDIR/install-multi-user \
|
|
|
|
--subst-var-by nix ${nix} \
|
|
|
|
--subst-var-by cacert ${cacert}
|
|
|
|
|
|
|
|
if type -p shellcheck; then
|
|
|
|
# SC1090: Don't worry about not being able to find
|
|
|
|
# $nix/etc/profile.d/nix.sh
|
|
|
|
shellcheck --exclude SC1090 $TMPDIR/install
|
2020-09-11 01:21:04 +02:00
|
|
|
shellcheck $TMPDIR/create-darwin-volume.sh
|
2019-10-04 10:45:33 +02:00
|
|
|
shellcheck $TMPDIR/install-darwin-multi-user.sh
|
|
|
|
shellcheck $TMPDIR/install-systemd-multi-user.sh
|
|
|
|
|
|
|
|
# SC1091: Don't panic about not being able to source
|
|
|
|
# /etc/profile
|
|
|
|
# SC2002: Ignore "useless cat" "error", when loading
|
|
|
|
# .reginfo, as the cat is a much cleaner
|
|
|
|
# implementation, even though it is "useless"
|
|
|
|
# SC2116: Allow ROOT_HOME=$(echo ~root) for resolving
|
|
|
|
# root's home directory
|
|
|
|
shellcheck --external-sources \
|
|
|
|
--exclude SC1091,SC2002,SC2116 $TMPDIR/install-multi-user
|
|
|
|
fi
|
|
|
|
|
|
|
|
chmod +x $TMPDIR/install
|
2020-09-11 01:21:04 +02:00
|
|
|
chmod +x $TMPDIR/create-darwin-volume.sh
|
2019-10-04 10:45:33 +02:00
|
|
|
chmod +x $TMPDIR/install-darwin-multi-user.sh
|
|
|
|
chmod +x $TMPDIR/install-systemd-multi-user.sh
|
|
|
|
chmod +x $TMPDIR/install-multi-user
|
|
|
|
dir=nix-${version}-${system}
|
|
|
|
fn=$out/$dir.tar.xz
|
|
|
|
mkdir -p $out/nix-support
|
|
|
|
echo "file binary-dist $fn" >> $out/nix-support/hydra-build-products
|
|
|
|
tar cvfJ $fn \
|
|
|
|
--owner=0 --group=0 --mode=u+rw,uga+r \
|
|
|
|
--absolute-names \
|
|
|
|
--hard-dereference \
|
|
|
|
--transform "s,$TMPDIR/install,$dir/install," \
|
2020-09-11 01:21:04 +02:00
|
|
|
--transform "s,$TMPDIR/create-darwin-volume.sh,$dir/create-darwin-volume.sh," \
|
2019-10-04 10:45:33 +02:00
|
|
|
--transform "s,$TMPDIR/reginfo,$dir/.reginfo," \
|
|
|
|
--transform "s,$NIX_STORE,$dir/store,S" \
|
2020-09-11 01:21:04 +02:00
|
|
|
$TMPDIR/install \
|
|
|
|
$TMPDIR/create-darwin-volume.sh \
|
|
|
|
$TMPDIR/install-darwin-multi-user.sh \
|
2019-10-04 10:45:33 +02:00
|
|
|
$TMPDIR/install-systemd-multi-user.sh \
|
2020-09-11 01:21:04 +02:00
|
|
|
$TMPDIR/install-multi-user \
|
|
|
|
$TMPDIR/reginfo \
|
2019-10-04 10:45:33 +02:00
|
|
|
$(cat ${installerClosureInfo}/store-paths)
|
|
|
|
'');
|
|
|
|
|
|
|
|
# The first half of the installation script. This is uploaded
|
|
|
|
# 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.
|
2021-02-15 11:20:54 +01:00
|
|
|
installerScript = installScriptFor [ "x86_64-linux" "i686-linux" "x86_64-darwin" "aarch64-linux" ];
|
|
|
|
installerScriptForGHA = installScriptFor [ "x86_64-linux" "x86_64-darwin" ];
|
2019-10-04 10:45:33 +02:00
|
|
|
|
|
|
|
# Line coverage analysis.
|
|
|
|
coverage =
|
|
|
|
with nixpkgsFor.x86_64-linux;
|
|
|
|
with commonDeps pkgs;
|
|
|
|
|
|
|
|
releaseTools.coverageAnalysis {
|
2020-03-13 18:28:01 +01:00
|
|
|
name = "nix-coverage-${version}";
|
|
|
|
|
|
|
|
src = self;
|
2019-10-04 10:45:33 +02:00
|
|
|
|
2020-01-21 21:18:52 +01:00
|
|
|
enableParallelBuilding = true;
|
|
|
|
|
2020-07-30 21:59:57 +02:00
|
|
|
nativeBuildInputs = nativeBuildDeps;
|
|
|
|
buildInputs = buildDeps ++ propagatedDeps ++ awsDeps;
|
2019-10-04 10:45:33 +02:00
|
|
|
|
|
|
|
dontInstall = false;
|
|
|
|
|
|
|
|
doInstallCheck = true;
|
|
|
|
|
2019-11-08 14:29:10 +01:00
|
|
|
lcovFilter = [ "*/boost/*" "*-tab.*" ];
|
2019-10-04 10:45:33 +02:00
|
|
|
|
|
|
|
# We call `dot', and even though we just use it to
|
|
|
|
# syntax-check generated dot files, it still requires some
|
|
|
|
# fonts. So provide those.
|
|
|
|
FONTCONFIG_FILE = texFunctions.fontsConf;
|
|
|
|
};
|
|
|
|
|
|
|
|
# System tests.
|
|
|
|
tests.remoteBuilds = import ./tests/remote-builds.nix {
|
|
|
|
system = "x86_64-linux";
|
|
|
|
inherit nixpkgs;
|
|
|
|
inherit (self) overlay;
|
|
|
|
};
|
|
|
|
|
|
|
|
tests.nix-copy-closure = import ./tests/nix-copy-closure.nix {
|
|
|
|
system = "x86_64-linux";
|
|
|
|
inherit nixpkgs;
|
|
|
|
inherit (self) overlay;
|
|
|
|
};
|
|
|
|
|
|
|
|
tests.githubFlakes = (import ./tests/github-flakes.nix rec {
|
|
|
|
system = "x86_64-linux";
|
|
|
|
inherit nixpkgs;
|
|
|
|
inherit (self) overlay;
|
|
|
|
});
|
|
|
|
|
|
|
|
tests.setuid = nixpkgs.lib.genAttrs
|
|
|
|
["i686-linux" "x86_64-linux"]
|
|
|
|
(system:
|
|
|
|
import ./tests/setuid.nix rec {
|
|
|
|
inherit nixpkgs system;
|
|
|
|
inherit (self) overlay;
|
|
|
|
});
|
|
|
|
|
2019-11-06 10:44:21 +01:00
|
|
|
/*
|
2019-10-04 10:45:33 +02:00
|
|
|
# Check whether we can still evaluate all of Nixpkgs.
|
|
|
|
tests.evalNixpkgs =
|
|
|
|
import (nixpkgs + "/pkgs/top-level/make-tarball.nix") {
|
|
|
|
# FIXME: fix pkgs/top-level/make-tarball.nix in NixOS to not require a revCount.
|
|
|
|
inherit nixpkgs;
|
|
|
|
pkgs = nixpkgsFor.x86_64-linux;
|
|
|
|
officialRelease = false;
|
|
|
|
};
|
|
|
|
|
|
|
|
# Check whether we can still evaluate NixOS.
|
|
|
|
tests.evalNixOS =
|
|
|
|
with nixpkgsFor.x86_64-linux;
|
|
|
|
runCommand "eval-nixos" { buildInputs = [ nix ]; }
|
|
|
|
''
|
|
|
|
export NIX_STATE_DIR=$TMPDIR
|
|
|
|
|
|
|
|
nix-instantiate ${nixpkgs}/nixos/release-combined.nix -A tested --dry-run \
|
|
|
|
--arg nixpkgs '{ outPath = ${nixpkgs}; revCount = 123; shortRev = "abcdefgh"; }'
|
|
|
|
|
|
|
|
touch $out
|
|
|
|
'';
|
2019-11-07 11:44:02 +01:00
|
|
|
*/
|
2019-10-04 10:45:33 +02:00
|
|
|
|
|
|
|
};
|
|
|
|
|
Support non-x86_64-linux system types in flakes
A command like
$ nix run nixpkgs#hello
will now build the attribute 'packages.${system}.hello' rather than
'packages.hello'. Note that this does mean that the flake needs to
export an attribute for every system type it supports, and you can't
build on unsupported systems. So 'packages' typically looks like this:
packages = nixpkgs.lib.genAttrs ["x86_64-linux" "i686-linux"] (system: {
hello = ...;
});
The 'checks', 'defaultPackage', 'devShell', 'apps' and 'defaultApp'
outputs similarly are now attrsets that map system types to
derivations/apps. 'nix flake check' checks that the derivations for
all platforms evaluate correctly, but only builds the derivations in
'checks.${system}'.
Fixes #2861. (That issue also talks about access to ~/.config/nixpkgs
and --arg, but I think it's reasonable to say that flakes shouldn't
support those.)
The alternative to attribute selection is to pass the system type as
an argument to the flake's 'outputs' function, e.g. 'outputs = { self,
nixpkgs, system }: ...'. However, that approach would be at odds with
hermetic evaluation and make it impossible to enumerate the packages
provided by a flake.
2019-10-15 17:52:10 +02:00
|
|
|
checks = forAllSystems (system: {
|
|
|
|
binaryTarball = self.hydraJobs.binaryTarball.${system};
|
|
|
|
perlBindings = self.hydraJobs.perlBindings.${system};
|
2021-03-16 13:43:08 +01:00
|
|
|
installTests =
|
|
|
|
let pkgs = nixpkgsFor.${system}; in
|
|
|
|
pkgs.runCommand "install-tests" {
|
|
|
|
againstSelf = testNixVersions pkgs pkgs.nix pkgs.pkgs.nix;
|
|
|
|
againstCurrentUnstable = testNixVersions pkgs pkgs.nix pkgs.nixUnstable;
|
|
|
|
# Disabled because the latest stable version doesn't handle
|
|
|
|
# `NIX_DAEMON_SOCKET_PATH` which is required for the tests to work
|
|
|
|
# againstLatestStable = testNixVersions pkgs pkgs.nix pkgs.nixStable;
|
|
|
|
} "touch $out";
|
Support non-x86_64-linux system types in flakes
A command like
$ nix run nixpkgs#hello
will now build the attribute 'packages.${system}.hello' rather than
'packages.hello'. Note that this does mean that the flake needs to
export an attribute for every system type it supports, and you can't
build on unsupported systems. So 'packages' typically looks like this:
packages = nixpkgs.lib.genAttrs ["x86_64-linux" "i686-linux"] (system: {
hello = ...;
});
The 'checks', 'defaultPackage', 'devShell', 'apps' and 'defaultApp'
outputs similarly are now attrsets that map system types to
derivations/apps. 'nix flake check' checks that the derivations for
all platforms evaluate correctly, but only builds the derivations in
'checks.${system}'.
Fixes #2861. (That issue also talks about access to ~/.config/nixpkgs
and --arg, but I think it's reasonable to say that flakes shouldn't
support those.)
The alternative to attribute selection is to pass the system type as
an argument to the flake's 'outputs' function, e.g. 'outputs = { self,
nixpkgs, system }: ...'. However, that approach would be at odds with
hermetic evaluation and make it impossible to enumerate the packages
provided by a flake.
2019-10-15 17:52:10 +02:00
|
|
|
});
|
2019-10-04 10:45:33 +02:00
|
|
|
|
Support non-x86_64-linux system types in flakes
A command like
$ nix run nixpkgs#hello
will now build the attribute 'packages.${system}.hello' rather than
'packages.hello'. Note that this does mean that the flake needs to
export an attribute for every system type it supports, and you can't
build on unsupported systems. So 'packages' typically looks like this:
packages = nixpkgs.lib.genAttrs ["x86_64-linux" "i686-linux"] (system: {
hello = ...;
});
The 'checks', 'defaultPackage', 'devShell', 'apps' and 'defaultApp'
outputs similarly are now attrsets that map system types to
derivations/apps. 'nix flake check' checks that the derivations for
all platforms evaluate correctly, but only builds the derivations in
'checks.${system}'.
Fixes #2861. (That issue also talks about access to ~/.config/nixpkgs
and --arg, but I think it's reasonable to say that flakes shouldn't
support those.)
The alternative to attribute selection is to pass the system type as
an argument to the flake's 'outputs' function, e.g. 'outputs = { self,
nixpkgs, system }: ...'. However, that approach would be at odds with
hermetic evaluation and make it impossible to enumerate the packages
provided by a flake.
2019-10-15 17:52:10 +02:00
|
|
|
packages = forAllSystems (system: {
|
|
|
|
inherit (nixpkgsFor.${system}) nix;
|
2020-10-28 06:13:18 +01:00
|
|
|
} // nixpkgs.lib.optionalAttrs (builtins.elem system linux64BitSystems) {
|
2020-07-30 21:59:57 +02:00
|
|
|
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
|
2020-12-04 01:03:30 +01:00
|
|
|
mkdir -p $out/nix-support
|
|
|
|
echo "file binary-dist $out/bin/nix" >> $out/nix-support/hydra-build-products
|
2020-07-30 21:59:57 +02:00
|
|
|
'';
|
|
|
|
|
|
|
|
doInstallCheck = true;
|
|
|
|
installCheckFlags = "sysconfdir=$(out)/etc";
|
|
|
|
|
|
|
|
stripAllList = ["bin"];
|
2021-03-23 12:06:43 +01:00
|
|
|
|
|
|
|
strictDeps = true;
|
2020-07-30 21:59:57 +02:00
|
|
|
};
|
Support non-x86_64-linux system types in flakes
A command like
$ nix run nixpkgs#hello
will now build the attribute 'packages.${system}.hello' rather than
'packages.hello'. Note that this does mean that the flake needs to
export an attribute for every system type it supports, and you can't
build on unsupported systems. So 'packages' typically looks like this:
packages = nixpkgs.lib.genAttrs ["x86_64-linux" "i686-linux"] (system: {
hello = ...;
});
The 'checks', 'defaultPackage', 'devShell', 'apps' and 'defaultApp'
outputs similarly are now attrsets that map system types to
derivations/apps. 'nix flake check' checks that the derivations for
all platforms evaluate correctly, but only builds the derivations in
'checks.${system}'.
Fixes #2861. (That issue also talks about access to ~/.config/nixpkgs
and --arg, but I think it's reasonable to say that flakes shouldn't
support those.)
The alternative to attribute selection is to pass the system type as
an argument to the flake's 'outputs' function, e.g. 'outputs = { self,
nixpkgs, system }: ...'. However, that approach would be at odds with
hermetic evaluation and make it impossible to enumerate the packages
provided by a flake.
2019-10-15 17:52:10 +02:00
|
|
|
});
|
2019-10-04 10:45:33 +02:00
|
|
|
|
Support non-x86_64-linux system types in flakes
A command like
$ nix run nixpkgs#hello
will now build the attribute 'packages.${system}.hello' rather than
'packages.hello'. Note that this does mean that the flake needs to
export an attribute for every system type it supports, and you can't
build on unsupported systems. So 'packages' typically looks like this:
packages = nixpkgs.lib.genAttrs ["x86_64-linux" "i686-linux"] (system: {
hello = ...;
});
The 'checks', 'defaultPackage', 'devShell', 'apps' and 'defaultApp'
outputs similarly are now attrsets that map system types to
derivations/apps. 'nix flake check' checks that the derivations for
all platforms evaluate correctly, but only builds the derivations in
'checks.${system}'.
Fixes #2861. (That issue also talks about access to ~/.config/nixpkgs
and --arg, but I think it's reasonable to say that flakes shouldn't
support those.)
The alternative to attribute selection is to pass the system type as
an argument to the flake's 'outputs' function, e.g. 'outputs = { self,
nixpkgs, system }: ...'. However, that approach would be at odds with
hermetic evaluation and make it impossible to enumerate the packages
provided by a flake.
2019-10-15 17:52:10 +02:00
|
|
|
defaultPackage = forAllSystems (system: self.packages.${system}.nix);
|
2019-10-04 10:45:33 +02:00
|
|
|
|
Support non-x86_64-linux system types in flakes
A command like
$ nix run nixpkgs#hello
will now build the attribute 'packages.${system}.hello' rather than
'packages.hello'. Note that this does mean that the flake needs to
export an attribute for every system type it supports, and you can't
build on unsupported systems. So 'packages' typically looks like this:
packages = nixpkgs.lib.genAttrs ["x86_64-linux" "i686-linux"] (system: {
hello = ...;
});
The 'checks', 'defaultPackage', 'devShell', 'apps' and 'defaultApp'
outputs similarly are now attrsets that map system types to
derivations/apps. 'nix flake check' checks that the derivations for
all platforms evaluate correctly, but only builds the derivations in
'checks.${system}'.
Fixes #2861. (That issue also talks about access to ~/.config/nixpkgs
and --arg, but I think it's reasonable to say that flakes shouldn't
support those.)
The alternative to attribute selection is to pass the system type as
an argument to the flake's 'outputs' function, e.g. 'outputs = { self,
nixpkgs, system }: ...'. However, that approach would be at odds with
hermetic evaluation and make it impossible to enumerate the packages
provided by a flake.
2019-10-15 17:52:10 +02:00
|
|
|
devShell = forAllSystems (system:
|
|
|
|
with nixpkgsFor.${system};
|
2019-10-04 10:45:33 +02:00
|
|
|
with commonDeps pkgs;
|
|
|
|
|
|
|
|
stdenv.mkDerivation {
|
|
|
|
name = "nix";
|
|
|
|
|
2020-08-28 18:16:03 +02:00
|
|
|
outputs = [ "out" "dev" "doc" ];
|
|
|
|
|
2020-07-30 21:59:57 +02:00
|
|
|
nativeBuildInputs = nativeBuildDeps;
|
|
|
|
buildInputs = buildDeps ++ propagatedDeps ++ awsDeps ++ perlDeps;
|
2019-10-04 10:45:33 +02:00
|
|
|
|
|
|
|
inherit configureFlags;
|
|
|
|
|
|
|
|
enableParallelBuilding = true;
|
|
|
|
|
|
|
|
installFlags = "sysconfdir=$(out)/etc";
|
|
|
|
|
|
|
|
shellHook =
|
|
|
|
''
|
|
|
|
PATH=$prefix/bin:$PATH
|
|
|
|
unset PYTHONPATH
|
2020-08-31 14:24:26 +02:00
|
|
|
export MANPATH=$out/share/man:$MANPATH
|
2019-10-04 10:45:33 +02:00
|
|
|
'';
|
Support non-x86_64-linux system types in flakes
A command like
$ nix run nixpkgs#hello
will now build the attribute 'packages.${system}.hello' rather than
'packages.hello'. Note that this does mean that the flake needs to
export an attribute for every system type it supports, and you can't
build on unsupported systems. So 'packages' typically looks like this:
packages = nixpkgs.lib.genAttrs ["x86_64-linux" "i686-linux"] (system: {
hello = ...;
});
The 'checks', 'defaultPackage', 'devShell', 'apps' and 'defaultApp'
outputs similarly are now attrsets that map system types to
derivations/apps. 'nix flake check' checks that the derivations for
all platforms evaluate correctly, but only builds the derivations in
'checks.${system}'.
Fixes #2861. (That issue also talks about access to ~/.config/nixpkgs
and --arg, but I think it's reasonable to say that flakes shouldn't
support those.)
The alternative to attribute selection is to pass the system type as
an argument to the flake's 'outputs' function, e.g. 'outputs = { self,
nixpkgs, system }: ...'. However, that approach would be at odds with
hermetic evaluation and make it impossible to enumerate the packages
provided by a flake.
2019-10-15 17:52:10 +02:00
|
|
|
});
|
2019-05-02 21:10:13 +02:00
|
|
|
|
2019-04-08 17:28:05 +02:00
|
|
|
};
|
|
|
|
}
|