2019-04-08 15:28:05 +00:00
|
|
|
|
{
|
|
|
|
|
description = "The purely functional package manager";
|
|
|
|
|
|
2021-12-15 12:49:05 +00:00
|
|
|
|
inputs.nixpkgs.url = "nixpkgs/nixos-21.05-small";
|
2021-09-24 13:21:41 +00:00
|
|
|
|
inputs.lowdown-src = { url = "github:kristapsdz/lowdown"; flake = false; };
|
2019-04-08 15:28:05 +00:00
|
|
|
|
|
2021-04-23 12:14:34 +00:00
|
|
|
|
outputs = { self, nixpkgs, lowdown-src }:
|
2019-04-08 15:28:05 +00:00
|
|
|
|
|
2019-10-04 08:45:33 +00:00
|
|
|
|
let
|
2019-05-29 15:25:41 +00:00
|
|
|
|
|
2020-03-31 22:20:12 +00:00
|
|
|
|
version = builtins.readFile ./.version + versionSuffix;
|
|
|
|
|
versionSuffix =
|
|
|
|
|
if officialRelease
|
|
|
|
|
then ""
|
2020-10-21 19:31:19 +00:00
|
|
|
|
else "pre${builtins.substring 0 8 (self.lastModifiedDate or self.lastModified or "19700101")}_${self.shortRev or "dirty"}";
|
2020-03-13 17:28:01 +00:00
|
|
|
|
|
2019-10-04 08:45:33 +00:00
|
|
|
|
officialRelease = false;
|
2019-04-08 15:28:05 +00:00
|
|
|
|
|
2020-10-28 05:13:18 +00:00
|
|
|
|
linux64BitSystems = [ "x86_64-linux" "aarch64-linux" ];
|
|
|
|
|
linuxSystems = linux64BitSystems ++ [ "i686-linux" ];
|
2021-05-29 17:40:56 +00:00
|
|
|
|
systems = linuxSystems ++ [ "x86_64-darwin" "aarch64-darwin" ];
|
2019-10-04 08:45:33 +00:00
|
|
|
|
|
2021-02-06 00:22:34 +00:00
|
|
|
|
crossSystems = [ "armv6l-linux" "armv7l-linux" ];
|
2021-02-06 00:07:48 +00:00
|
|
|
|
|
2021-07-08 15:01:51 +00:00
|
|
|
|
stdenvs = [ "gccStdenv" "clangStdenv" "clang11Stdenv" "stdenv" ];
|
|
|
|
|
|
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 15:52:10 +00:00
|
|
|
|
forAllSystems = f: nixpkgs.lib.genAttrs systems (system: f system);
|
2021-07-08 15:01:51 +00:00
|
|
|
|
forAllSystemsAndStdenvs = f: forAllSystems (system:
|
|
|
|
|
nixpkgs.lib.listToAttrs
|
|
|
|
|
(map
|
|
|
|
|
(n:
|
|
|
|
|
nixpkgs.lib.nameValuePair "${n}Packages" (
|
|
|
|
|
f system n
|
|
|
|
|
)) stdenvs
|
|
|
|
|
)
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
forAllStdenvs = stdenvs: f: nixpkgs.lib.genAttrs stdenvs (stdenv: f stdenv);
|
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 15:52:10 +00:00
|
|
|
|
|
2019-10-04 08:45:33 +00:00
|
|
|
|
# Memoize nixpkgs for different platforms for efficiency.
|
2021-07-08 15:01:51 +00:00
|
|
|
|
nixpkgsFor =
|
|
|
|
|
let stdenvsPackages = forAllSystemsAndStdenvs
|
|
|
|
|
(system: stdenv:
|
|
|
|
|
import nixpkgs {
|
|
|
|
|
inherit system;
|
|
|
|
|
overlays = [
|
|
|
|
|
(overlayFor (p: p.${stdenv}))
|
|
|
|
|
];
|
|
|
|
|
}
|
|
|
|
|
);
|
|
|
|
|
in
|
|
|
|
|
# Add the `stdenvPackages` at toplevel, both because these are the ones
|
|
|
|
|
# we want most of the time and for backwards compatibility
|
|
|
|
|
forAllSystems (system: stdenvsPackages.${system} // stdenvsPackages.${system}.stdenvPackages);
|
2019-10-04 08:45:33 +00:00
|
|
|
|
|
|
|
|
|
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 09:44:21 +00:00
|
|
|
|
lib.optionals stdenv.isLinux [
|
2021-10-23 13:32:48 +00:00
|
|
|
|
"--with-boost=${boost}/lib"
|
2019-10-04 08:45:33 +00:00
|
|
|
|
"--with-sandbox-shell=${sh}/bin/busybox"
|
2020-09-23 14:05:47 +00:00
|
|
|
|
"LDFLAGS=-fuse-ld=gold"
|
2019-10-04 08:45:33 +00:00
|
|
|
|
];
|
|
|
|
|
|
2020-07-30 19:59:57 +00:00
|
|
|
|
|
|
|
|
|
nativeBuildDeps =
|
|
|
|
|
[
|
|
|
|
|
buildPackages.bison
|
|
|
|
|
buildPackages.flex
|
2021-09-27 08:31:13 +00:00
|
|
|
|
(lib.getBin buildPackages.lowdown-nix)
|
2020-09-04 02:40:36 +00:00
|
|
|
|
buildPackages.mdbook
|
2020-09-04 02:30:12 +00:00
|
|
|
|
buildPackages.autoconf-archive
|
2020-07-30 19:59:57 +00:00
|
|
|
|
buildPackages.autoreconfHook
|
|
|
|
|
buildPackages.pkgconfig
|
|
|
|
|
|
|
|
|
|
# Tests
|
|
|
|
|
buildPackages.git
|
2021-10-06 16:29:20 +00:00
|
|
|
|
buildPackages.mercurial # FIXME: remove? only needed for tests
|
2020-07-30 20:49:45 +00:00
|
|
|
|
buildPackages.jq
|
2021-03-24 13:50:15 +00:00
|
|
|
|
]
|
2021-06-25 20:51:02 +00:00
|
|
|
|
++ lib.optionals stdenv.hostPlatform.isLinux [(buildPackages.util-linuxMinimal or buildPackages.utillinuxMinimal)];
|
2020-07-30 19:59:57 +00:00
|
|
|
|
|
2020-03-13 17:28:01 +00:00
|
|
|
|
buildDeps =
|
2020-09-04 02:30:12 +00:00
|
|
|
|
[ curl
|
2021-04-15 11:51:00 +00:00
|
|
|
|
bzip2 xz brotli editline
|
2020-09-04 02:30:12 +00:00
|
|
|
|
openssl sqlite
|
2019-12-20 11:45:58 +00:00
|
|
|
|
libarchive
|
2019-10-04 08:45:33 +00:00
|
|
|
|
boost
|
2021-09-27 08:31:13 +00:00
|
|
|
|
lowdown-nix
|
2021-11-22 16:57:30 +00:00
|
|
|
|
gtest
|
2019-10-04 08:45:33 +00:00
|
|
|
|
]
|
2021-03-24 13:50:15 +00:00
|
|
|
|
++ lib.optionals stdenv.isLinux [libseccomp]
|
2021-02-16 13:32:12 +00:00
|
|
|
|
++ lib.optional (stdenv.isLinux || stdenv.isDarwin) libsodium
|
2021-03-09 17:40:16 +00:00
|
|
|
|
++ lib.optional stdenv.hostPlatform.isx86_64 libcpuid;
|
2020-07-30 19:59:57 +00:00
|
|
|
|
|
|
|
|
|
awsDeps = lib.optional (stdenv.isLinux || stdenv.isDarwin)
|
|
|
|
|
(aws-sdk-cpp.override {
|
|
|
|
|
apis = ["s3" "transfer"];
|
|
|
|
|
customMemoryManagement = false;
|
|
|
|
|
});
|
2019-10-04 08:45:33 +00:00
|
|
|
|
|
2020-02-15 20:48:28 +00:00
|
|
|
|
propagatedDeps =
|
2021-06-24 16:02:51 +00:00
|
|
|
|
[ ((boehmgc.override {
|
|
|
|
|
enableLargeConfig = true;
|
|
|
|
|
}).overrideAttrs(o: {
|
|
|
|
|
patches = (o.patches or []) ++ [
|
|
|
|
|
./boehmgc-coroutine-sp-fallback.diff
|
|
|
|
|
];
|
|
|
|
|
}))
|
2020-02-15 20:48:28 +00:00
|
|
|
|
];
|
|
|
|
|
|
2019-10-04 08:45:33 +00:00
|
|
|
|
perlDeps =
|
|
|
|
|
[ perl
|
|
|
|
|
perlPackages.DBDSQLite
|
|
|
|
|
];
|
|
|
|
|
};
|
|
|
|
|
|
2021-02-15 10:20:54 +00:00
|
|
|
|
installScriptFor = systems:
|
|
|
|
|
with nixpkgsFor.x86_64-linux;
|
|
|
|
|
runCommand "installer-script"
|
|
|
|
|
{ buildInputs = [ nix ];
|
|
|
|
|
}
|
|
|
|
|
''
|
|
|
|
|
mkdir -p $out/nix-support
|
|
|
|
|
|
2021-10-05 12:50:55 +00:00
|
|
|
|
# Converts /nix/store/50p3qk8k...-nix-2.4pre20201102_550e11f/bin/nix to 50p3qk8k.../bin/nix.
|
2021-02-15 10:20:54 +00:00
|
|
|
|
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
|
2021-06-26 05:12:03 +00:00
|
|
|
|
(system: let
|
|
|
|
|
tarball = if builtins.elem system crossSystems then self.hydraJobs.binaryTarballCross.x86_64-linux.${system} else self.hydraJobs.binaryTarball.${system};
|
|
|
|
|
in '' \
|
|
|
|
|
--replace '@tarballHash_${system}@' $(nix --experimental-features nix-command hash-file --base16 --type sha256 ${tarball}/*.tar.xz) \
|
|
|
|
|
--replace '@tarballPath_${system}@' $(tarballPath ${tarball}/*.tar.xz) \
|
2021-02-15 10:20:54 +00:00
|
|
|
|
''
|
|
|
|
|
)
|
|
|
|
|
systems
|
|
|
|
|
} --replace '@nixVersion@' ${version}
|
|
|
|
|
|
|
|
|
|
echo "file installer $out/install" >> $out/nix-support/hydra-build-products
|
|
|
|
|
'';
|
|
|
|
|
|
2021-10-05 12:50:55 +00:00
|
|
|
|
testNixVersions = pkgs: client: daemon: with commonDeps pkgs; with pkgs.lib; pkgs.stdenv.mkDerivation {
|
2021-03-16 12:43:08 +00:00
|
|
|
|
NIX_DAEMON_PACKAGE = daemon;
|
|
|
|
|
NIX_CLIENT_PACKAGE = client;
|
2021-10-05 12:50:55 +00:00
|
|
|
|
name =
|
|
|
|
|
"nix-tests"
|
|
|
|
|
+ optionalString
|
|
|
|
|
(versionAtLeast daemon.version "2.4pre20211005" &&
|
|
|
|
|
versionAtLeast client.version "2.4pre20211005")
|
|
|
|
|
"-${client.version}-against-${daemon.version}";
|
2021-03-16 12:43:08 +00: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
|
|
|
|
|
'';
|
|
|
|
|
|
2021-09-14 09:34:17 +00:00
|
|
|
|
installCheckPhase = "make installcheck -j$NIX_BUILD_CORES -l$NIX_BUILD_CORES";
|
2021-03-16 12:43:08 +00:00
|
|
|
|
};
|
|
|
|
|
|
2021-06-26 05:12:03 +00:00
|
|
|
|
binaryTarball = buildPackages: nix: pkgs: let
|
|
|
|
|
inherit (pkgs) cacert;
|
|
|
|
|
installerClosureInfo = buildPackages.closureInfo { rootPaths = [ nix cacert ]; };
|
|
|
|
|
in
|
|
|
|
|
|
|
|
|
|
buildPackages.runCommand "nix-binary-tarball-${version}"
|
|
|
|
|
{ #nativeBuildInputs = lib.optional (system != "aarch64-linux") shellcheck;
|
|
|
|
|
meta.description = "Distribution-independent Nix bootstrap binaries for ${pkgs.system}";
|
|
|
|
|
}
|
|
|
|
|
''
|
|
|
|
|
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}
|
|
|
|
|
|
|
|
|
|
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
|
|
|
|
|
shellcheck $TMPDIR/create-darwin-volume.sh
|
|
|
|
|
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
|
|
|
|
|
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
|
|
|
|
|
dir=nix-${version}-${pkgs.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," \
|
|
|
|
|
--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/create-darwin-volume.sh \
|
|
|
|
|
$TMPDIR/install-darwin-multi-user.sh \
|
|
|
|
|
$TMPDIR/install-systemd-multi-user.sh \
|
|
|
|
|
$TMPDIR/install-multi-user \
|
|
|
|
|
$TMPDIR/reginfo \
|
|
|
|
|
$(cat ${installerClosureInfo}/store-paths)
|
|
|
|
|
'';
|
|
|
|
|
|
2021-07-08 15:01:51 +00:00
|
|
|
|
overlayFor = getStdenv: final: prev:
|
|
|
|
|
let currentStdenv = getStdenv final; in
|
|
|
|
|
{
|
2021-03-16 12:43:08 +00:00
|
|
|
|
nixStable = prev.nix;
|
2020-11-10 09:43:33 +00:00
|
|
|
|
|
2021-09-20 12:37:09 +00:00
|
|
|
|
# Forward from the previous stage as we don’t want it to pick the lowdown override
|
|
|
|
|
nixUnstable = prev.nixUnstable;
|
|
|
|
|
|
2021-07-08 15:01:51 +00:00
|
|
|
|
nix = with final; with commonDeps pkgs; currentStdenv.mkDerivation {
|
2020-03-13 17:28:01 +00:00
|
|
|
|
name = "nix-${version}";
|
2020-10-21 19:31:19 +00:00
|
|
|
|
inherit version;
|
2020-03-13 17:28:01 +00:00
|
|
|
|
|
|
|
|
|
src = self;
|
2019-10-04 08:45:33 +00:00
|
|
|
|
|
2020-03-31 22:20:12 +00:00
|
|
|
|
VERSION_SUFFIX = versionSuffix;
|
|
|
|
|
|
2020-03-13 17:28:01 +00:00
|
|
|
|
outputs = [ "out" "dev" "doc" ];
|
2019-10-07 12:02:52 +00:00
|
|
|
|
|
2020-07-30 19:59:57 +00:00
|
|
|
|
nativeBuildInputs = nativeBuildDeps;
|
|
|
|
|
buildInputs = buildDeps ++ awsDeps;
|
2019-10-04 08:45:33 +00:00
|
|
|
|
|
2020-02-15 20:48:28 +00:00
|
|
|
|
propagatedBuildInputs = propagatedDeps;
|
|
|
|
|
|
2019-10-04 08:45:33 +00:00
|
|
|
|
preConfigure =
|
|
|
|
|
''
|
2020-03-13 17:28:01 +00: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 08:45:33 +00:00
|
|
|
|
mkdir -p $out/lib
|
|
|
|
|
cp -pd ${boost}/lib/{libboost_context*,libboost_thread*,libboost_system*} $out/lib
|
|
|
|
|
rm -f $out/lib/*.a
|
2021-07-08 15:01:51 +00:00
|
|
|
|
${lib.optionalString currentStdenv.isLinux ''
|
2019-10-04 08:45:33 +00:00
|
|
|
|
chmod u+w $out/lib/*.so.*
|
2021-07-08 15:01:51 +00:00
|
|
|
|
patchelf --set-rpath $out/lib:${currentStdenv.cc.cc.lib}/lib $out/lib/libboost_thread.so.*
|
2019-10-04 08:45:33 +00:00
|
|
|
|
''}
|
|
|
|
|
'';
|
|
|
|
|
|
|
|
|
|
configureFlags = configureFlags ++
|
|
|
|
|
[ "--sysconfdir=/etc" ];
|
|
|
|
|
|
|
|
|
|
enableParallelBuilding = true;
|
|
|
|
|
|
2020-09-21 11:28:51 +00:00
|
|
|
|
makeFlags = "profiledir=$(out)/etc/profile.d PRECOMPILE_HEADERS=1";
|
2019-10-04 08:45:33 +00:00
|
|
|
|
|
2020-03-13 17:28:01 +00:00
|
|
|
|
doCheck = true;
|
|
|
|
|
|
2019-10-04 08:45:33 +00:00
|
|
|
|
installFlags = "sysconfdir=$(out)/etc";
|
|
|
|
|
|
2020-05-28 10:55:24 +00:00
|
|
|
|
postInstall = ''
|
|
|
|
|
mkdir -p $doc/nix-support
|
|
|
|
|
echo "doc manual $doc/share/doc/nix/manual" >> $doc/nix-support/hydra-build-products
|
|
|
|
|
'';
|
|
|
|
|
|
2019-10-04 08:45:33 +00:00
|
|
|
|
doInstallCheck = true;
|
|
|
|
|
installCheckFlags = "sysconfdir=$(out)/etc";
|
2020-02-15 20:30:26 +00:00
|
|
|
|
|
|
|
|
|
separateDebugInfo = true;
|
2019-10-04 08:45:33 +00:00
|
|
|
|
|
2021-03-23 11:06:43 +00:00
|
|
|
|
strictDeps = true;
|
|
|
|
|
|
2021-07-08 15:01:51 +00:00
|
|
|
|
passthru.perl-bindings = with final; currentStdenv.mkDerivation {
|
2020-03-13 17:28:01 +00:00
|
|
|
|
name = "nix-perl-${version}";
|
|
|
|
|
|
|
|
|
|
src = self;
|
2019-10-04 08:45:33 +00:00
|
|
|
|
|
2020-09-04 02:30:12 +00:00
|
|
|
|
nativeBuildInputs =
|
|
|
|
|
[ buildPackages.autoconf-archive
|
|
|
|
|
buildPackages.autoreconfHook
|
|
|
|
|
buildPackages.pkgconfig
|
|
|
|
|
];
|
|
|
|
|
|
2019-10-04 15:25:59 +00:00
|
|
|
|
buildInputs =
|
2020-09-04 02:30:12 +00:00
|
|
|
|
[ nix
|
2020-03-13 17:28:01 +00:00
|
|
|
|
curl
|
|
|
|
|
bzip2
|
|
|
|
|
xz
|
|
|
|
|
pkgs.perl
|
|
|
|
|
boost
|
|
|
|
|
]
|
2021-07-08 15:01:51 +00:00
|
|
|
|
++ lib.optional (currentStdenv.isLinux || currentStdenv.isDarwin) libsodium
|
|
|
|
|
++ lib.optional currentStdenv.isDarwin darwin.apple_sdk.frameworks.Security;
|
2019-10-04 08:45:33 +00:00
|
|
|
|
|
2019-10-04 15:25:59 +00:00
|
|
|
|
configureFlags = ''
|
|
|
|
|
--with-dbi=${perlPackages.DBI}/${pkgs.perl.libPrefix}
|
|
|
|
|
--with-dbd-sqlite=${perlPackages.DBDSQLite}/${pkgs.perl.libPrefix}
|
|
|
|
|
'';
|
2019-10-04 08:45:33 +00:00
|
|
|
|
|
2019-10-04 15:25:59 +00:00
|
|
|
|
enableParallelBuilding = true;
|
|
|
|
|
|
|
|
|
|
postUnpack = "sourceRoot=$sourceRoot/perl";
|
|
|
|
|
};
|
2019-10-04 08:45:33 +00:00
|
|
|
|
|
|
|
|
|
};
|
|
|
|
|
|
2021-07-08 15:01:51 +00:00
|
|
|
|
lowdown-nix = with final; currentStdenv.mkDerivation rec {
|
2021-09-24 13:21:41 +00:00
|
|
|
|
name = "lowdown-0.9.0";
|
2020-07-22 11:51:11 +00:00
|
|
|
|
|
2021-04-23 12:14:34 +00:00
|
|
|
|
src = lowdown-src;
|
2020-07-22 11:51:11 +00:00
|
|
|
|
|
2020-09-04 02:43:56 +00:00
|
|
|
|
outputs = [ "out" "bin" "dev" ];
|
2020-07-22 11:51:11 +00:00
|
|
|
|
|
2021-02-06 00:07:48 +00:00
|
|
|
|
nativeBuildInputs = [ buildPackages.which ];
|
2020-07-22 11:51:11 +00:00
|
|
|
|
|
2021-05-27 10:05:13 +00:00
|
|
|
|
configurePhase = ''
|
2021-07-08 15:01:51 +00:00
|
|
|
|
${if (currentStdenv.isDarwin && currentStdenv.isAarch64) then "echo \"HAVE_SANDBOX_INIT=false\" > configure.local" else ""}
|
2020-07-22 11:51:11 +00:00
|
|
|
|
./configure \
|
|
|
|
|
PREFIX=${placeholder "dev"} \
|
2020-09-04 02:43:56 +00:00
|
|
|
|
BINDIR=${placeholder "bin"}/bin
|
2021-07-08 15:01:51 +00:00
|
|
|
|
'';
|
2020-07-22 11:51:11 +00:00
|
|
|
|
};
|
2020-03-13 17:31:16 +00:00
|
|
|
|
};
|
|
|
|
|
|
2021-07-08 15:01:51 +00:00
|
|
|
|
in {
|
|
|
|
|
|
|
|
|
|
# A Nixpkgs overlay that overrides the 'nix' and
|
|
|
|
|
# 'nix.perl-bindings' packages.
|
|
|
|
|
overlay = overlayFor (p: p.stdenv);
|
|
|
|
|
|
2020-03-13 17:31:16 +00:00
|
|
|
|
hydraJobs = {
|
|
|
|
|
|
2019-10-04 08:45:33 +00:00
|
|
|
|
# Binary package for various platforms.
|
2020-07-30 19:59:57 +00:00
|
|
|
|
build = nixpkgs.lib.genAttrs systems (system: self.packages.${system}.nix);
|
|
|
|
|
|
2020-10-28 05:13:18 +00:00
|
|
|
|
buildStatic = nixpkgs.lib.genAttrs linux64BitSystems (system: self.packages.${system}.nix-static);
|
2019-10-04 08:45:33 +00:00
|
|
|
|
|
2021-02-06 00:07:48 +00:00
|
|
|
|
buildCross = nixpkgs.lib.genAttrs crossSystems (crossSystem:
|
2021-06-30 02:46:54 +00:00
|
|
|
|
nixpkgs.lib.genAttrs ["x86_64-linux"] (system: self.packages.${system}."nix-${crossSystem}"));
|
2021-02-06 00:07:48 +00:00
|
|
|
|
|
2019-10-04 08:45:33 +00:00
|
|
|
|
# Perl bindings for various platforms.
|
2020-07-30 19:59:57 +00:00
|
|
|
|
perlBindings = nixpkgs.lib.genAttrs systems (system: self.packages.${system}.nix.perl-bindings);
|
2019-10-04 08:45:33 +00:00
|
|
|
|
|
|
|
|
|
# Binary tarball for various platforms, containing a Nix store
|
|
|
|
|
# with the closure of 'nix' package, and the second half of
|
|
|
|
|
# the installation script.
|
2021-06-28 20:08:17 +00:00
|
|
|
|
binaryTarball = nixpkgs.lib.genAttrs systems (system: binaryTarball nixpkgsFor.${system} nixpkgsFor.${system}.nix nixpkgsFor.${system});
|
2021-06-26 05:12:03 +00:00
|
|
|
|
|
2021-06-30 02:46:54 +00:00
|
|
|
|
binaryTarballCross = nixpkgs.lib.genAttrs ["x86_64-linux"] (system: builtins.listToAttrs (map (crossSystem: {
|
2021-06-26 05:12:03 +00:00
|
|
|
|
name = crossSystem;
|
|
|
|
|
value = let
|
|
|
|
|
nixpkgsCross = import nixpkgs {
|
|
|
|
|
inherit system crossSystem;
|
|
|
|
|
overlays = [ self.overlay ];
|
|
|
|
|
};
|
|
|
|
|
in binaryTarball nixpkgsFor.${system} self.packages.${system}."nix-${crossSystem}" nixpkgsCross;
|
|
|
|
|
}) crossSystems));
|
2019-10-04 08:45:33 +00:00
|
|
|
|
|
|
|
|
|
# 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-06-26 05:12:03 +00:00
|
|
|
|
installerScript = installScriptFor [ "x86_64-linux" "i686-linux" "aarch64-linux" "x86_64-darwin" "aarch64-darwin" "armv6l-linux" "armv7l-linux" ];
|
2021-06-26 05:14:54 +00:00
|
|
|
|
installerScriptForGHA = installScriptFor [ "x86_64-linux" "x86_64-darwin" "armv6l-linux" "armv7l-linux"];
|
2019-10-04 08:45:33 +00:00
|
|
|
|
|
2021-10-30 22:22:35 +00:00
|
|
|
|
# docker image with Nix inside
|
|
|
|
|
dockerImage = nixpkgs.lib.genAttrs linux64BitSystems (system:
|
2021-11-23 10:31:05 +00:00
|
|
|
|
let
|
2021-10-30 22:22:35 +00:00
|
|
|
|
pkgs = nixpkgsFor.${system};
|
2021-11-23 10:31:05 +00:00
|
|
|
|
image = import ./docker.nix { inherit pkgs; tag = version; };
|
|
|
|
|
in pkgs.runCommand "docker-image-tarball-${version}"
|
|
|
|
|
{ meta.description = "Docker image with Nix for ${system}";
|
|
|
|
|
}
|
|
|
|
|
''
|
|
|
|
|
mkdir -p $out/nix-support
|
|
|
|
|
image=$out/image.tar.gz
|
2021-11-24 08:18:33 +00:00
|
|
|
|
ln -s ${image} $image
|
2021-11-23 10:31:05 +00:00
|
|
|
|
echo "file binary-dist $image" >> $out/nix-support/hydra-build-products
|
|
|
|
|
'');
|
2021-10-30 22:22:35 +00:00
|
|
|
|
|
2019-10-04 08:45:33 +00:00
|
|
|
|
# Line coverage analysis.
|
|
|
|
|
coverage =
|
|
|
|
|
with nixpkgsFor.x86_64-linux;
|
|
|
|
|
with commonDeps pkgs;
|
|
|
|
|
|
|
|
|
|
releaseTools.coverageAnalysis {
|
2020-03-13 17:28:01 +00:00
|
|
|
|
name = "nix-coverage-${version}";
|
|
|
|
|
|
|
|
|
|
src = self;
|
2019-10-04 08:45:33 +00:00
|
|
|
|
|
2020-01-21 20:18:52 +00:00
|
|
|
|
enableParallelBuilding = true;
|
|
|
|
|
|
2020-07-30 19:59:57 +00:00
|
|
|
|
nativeBuildInputs = nativeBuildDeps;
|
|
|
|
|
buildInputs = buildDeps ++ propagatedDeps ++ awsDeps;
|
2019-10-04 08:45:33 +00:00
|
|
|
|
|
|
|
|
|
dontInstall = false;
|
|
|
|
|
|
|
|
|
|
doInstallCheck = true;
|
|
|
|
|
|
2019-11-08 13:29:10 +00:00
|
|
|
|
lcovFilter = [ "*/boost/*" "*-tab.*" ];
|
2019-10-04 08:45:33 +00: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;
|
|
|
|
|
};
|
|
|
|
|
|
2021-10-07 16:58:15 +00:00
|
|
|
|
tests.nssPreload = (import ./tests/nss-preload.nix rec {
|
|
|
|
|
system = "x86_64-linux";
|
|
|
|
|
inherit nixpkgs;
|
|
|
|
|
inherit (self) overlay;
|
|
|
|
|
});
|
|
|
|
|
|
2019-10-04 08:45:33 +00:00
|
|
|
|
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 09:44:21 +00:00
|
|
|
|
/*
|
2019-10-04 08:45:33 +00: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 10:44:02 +00:00
|
|
|
|
*/
|
2019-10-04 08:45:33 +00:00
|
|
|
|
|
2021-10-15 10:36:29 +00:00
|
|
|
|
installTests = forAllSystems (system:
|
2021-03-16 12:43:08 +00:00
|
|
|
|
let pkgs = nixpkgsFor.${system}; in
|
|
|
|
|
pkgs.runCommand "install-tests" {
|
|
|
|
|
againstSelf = testNixVersions pkgs pkgs.nix pkgs.pkgs.nix;
|
2021-10-06 11:17:39 +00:00
|
|
|
|
againstCurrentUnstable =
|
|
|
|
|
# FIXME: temporarily disable this on macOS because of #3605.
|
|
|
|
|
if system == "x86_64-linux"
|
|
|
|
|
then testNixVersions pkgs pkgs.nix pkgs.nixUnstable
|
|
|
|
|
else null;
|
2021-03-16 12:43:08 +00:00
|
|
|
|
# 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;
|
2021-10-15 10:36:29 +00:00
|
|
|
|
} "touch $out");
|
|
|
|
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
checks = forAllSystems (system: {
|
|
|
|
|
binaryTarball = self.hydraJobs.binaryTarball.${system};
|
|
|
|
|
perlBindings = self.hydraJobs.perlBindings.${system};
|
|
|
|
|
installTests = self.hydraJobs.installTests.${system};
|
2021-11-25 13:45:47 +00:00
|
|
|
|
} // (if system == "x86_64-linux" then {
|
2021-11-24 08:19:29 +00:00
|
|
|
|
dockerImage = self.hydraJobs.dockerImage.${system};
|
2021-11-25 13:45:47 +00:00
|
|
|
|
} else {}));
|
2019-10-04 08:45:33 +00: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 15:52:10 +00:00
|
|
|
|
packages = forAllSystems (system: {
|
|
|
|
|
inherit (nixpkgsFor.${system}) nix;
|
2021-02-06 00:07:48 +00:00
|
|
|
|
} // (nixpkgs.lib.optionalAttrs (builtins.elem system linux64BitSystems) {
|
2020-07-30 19:59:57 +00: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 00:03:30 +00:00
|
|
|
|
mkdir -p $out/nix-support
|
|
|
|
|
echo "file binary-dist $out/bin/nix" >> $out/nix-support/hydra-build-products
|
2020-07-30 19:59:57 +00:00
|
|
|
|
'';
|
|
|
|
|
|
|
|
|
|
doInstallCheck = true;
|
|
|
|
|
installCheckFlags = "sysconfdir=$(out)/etc";
|
|
|
|
|
|
|
|
|
|
stripAllList = ["bin"];
|
2021-03-23 11:06:43 +00:00
|
|
|
|
|
|
|
|
|
strictDeps = true;
|
2021-06-30 02:48:07 +00:00
|
|
|
|
|
|
|
|
|
hardeningDisable = [ "pie" ];
|
2020-07-30 19:59:57 +00:00
|
|
|
|
};
|
2021-02-06 00:07:48 +00:00
|
|
|
|
} // builtins.listToAttrs (map (crossSystem: {
|
|
|
|
|
name = "nix-${crossSystem}";
|
|
|
|
|
value = let
|
|
|
|
|
nixpkgsCross = import nixpkgs {
|
|
|
|
|
inherit system crossSystem;
|
|
|
|
|
overlays = [ self.overlay ];
|
|
|
|
|
};
|
|
|
|
|
in with commonDeps nixpkgsCross; nixpkgsCross.stdenv.mkDerivation {
|
|
|
|
|
name = "nix-${version}";
|
|
|
|
|
|
|
|
|
|
src = self;
|
|
|
|
|
|
|
|
|
|
VERSION_SUFFIX = versionSuffix;
|
|
|
|
|
|
|
|
|
|
outputs = [ "out" "dev" "doc" ];
|
|
|
|
|
|
|
|
|
|
nativeBuildInputs = nativeBuildDeps;
|
|
|
|
|
buildInputs = buildDeps ++ propagatedDeps;
|
|
|
|
|
|
|
|
|
|
configureFlags = [ "--sysconfdir=/etc" "--disable-doc-gen" ];
|
|
|
|
|
|
|
|
|
|
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";
|
|
|
|
|
};
|
2021-07-08 15:01:51 +00:00
|
|
|
|
}) crossSystems)) // (builtins.listToAttrs (map (stdenvName:
|
|
|
|
|
nixpkgsFor.${system}.lib.nameValuePair
|
|
|
|
|
"nix-${stdenvName}"
|
|
|
|
|
nixpkgsFor.${system}."${stdenvName}Packages".nix
|
|
|
|
|
) stdenvs))
|
|
|
|
|
);
|
2019-10-04 08:45:33 +00: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 15:52:10 +00:00
|
|
|
|
defaultPackage = forAllSystems (system: self.packages.${system}.nix);
|
2019-10-04 08:45:33 +00:00
|
|
|
|
|
2021-07-08 15:01:51 +00:00
|
|
|
|
devShell = forAllSystems (system: self.devShells.${system}.stdenvPackages);
|
|
|
|
|
|
|
|
|
|
devShells = forAllSystemsAndStdenvs (system: stdenv:
|
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 15:52:10 +00:00
|
|
|
|
with nixpkgsFor.${system};
|
2019-10-04 08:45:33 +00:00
|
|
|
|
with commonDeps pkgs;
|
|
|
|
|
|
2021-07-08 15:01:51 +00:00
|
|
|
|
nixpkgsFor.${system}.${stdenv}.mkDerivation {
|
2019-10-04 08:45:33 +00:00
|
|
|
|
name = "nix";
|
|
|
|
|
|
2020-08-28 16:16:03 +00:00
|
|
|
|
outputs = [ "out" "dev" "doc" ];
|
|
|
|
|
|
2020-07-30 19:59:57 +00:00
|
|
|
|
nativeBuildInputs = nativeBuildDeps;
|
|
|
|
|
buildInputs = buildDeps ++ propagatedDeps ++ awsDeps ++ perlDeps;
|
2019-10-04 08:45:33 +00:00
|
|
|
|
|
|
|
|
|
inherit configureFlags;
|
|
|
|
|
|
|
|
|
|
enableParallelBuilding = true;
|
|
|
|
|
|
|
|
|
|
installFlags = "sysconfdir=$(out)/etc";
|
|
|
|
|
|
|
|
|
|
shellHook =
|
|
|
|
|
''
|
|
|
|
|
PATH=$prefix/bin:$PATH
|
|
|
|
|
unset PYTHONPATH
|
2020-08-31 12:24:26 +00:00
|
|
|
|
export MANPATH=$out/share/man:$MANPATH
|
2019-10-04 08:45:33 +00: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 15:52:10 +00:00
|
|
|
|
});
|
2019-05-02 19:10:13 +00:00
|
|
|
|
|
2019-04-08 15:28:05 +00:00
|
|
|
|
};
|
|
|
|
|
}
|