Merge
This commit is contained in:
commit
248d2e1026
7445 changed files with 228735 additions and 151783 deletions
|
@ -1,7 +1,7 @@
|
|||
{
|
||||
"imageName": "octobus/heptapod",
|
||||
"imageDigest": "sha256:9c185b424273743964bc480a6cea7e0246a37cc71d9a90eec9d6d8c460bed3ab",
|
||||
"sha256": "19jfdl17nycgls5f9vpknq4q5v9hfc6k02rwgy34flgv7llnnd95",
|
||||
"imageDigest": "sha256:dc11f67809d3fa77514573219bf5167977c62500f44e0fde3c059cf1ac483d80",
|
||||
"sha256": "11bgizm83im4hxyiad38pk6ffws8lfb8prgmx8wycwblcadrw2s7",
|
||||
"finalImageName": "octobus/heptapod",
|
||||
"finalImageTag": "0.36.2"
|
||||
"finalImageTag": "0.36.3"
|
||||
}
|
||||
|
|
|
@ -4,6 +4,6 @@ pkgs.buildGoModule {
|
|||
pname = "authentik-server";
|
||||
inherit src version;
|
||||
|
||||
vendorSha256 = "sha256:1jn30nca1g0853rj0wrmqc4x3pfvr2kf8kklnxzvqg471ywlhln4";
|
||||
vendorHash = "sha256:1jn30nca1g0853rj0wrmqc4x3pfvr2kf8kklnxzvqg471ywlhln4";
|
||||
subPackages = "cmd/server";
|
||||
}
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
{ depot, src, pkgs, lib, ... }:
|
||||
|
||||
let
|
||||
inherit (pkgs) poetry2nix;
|
||||
inherit (depot.third_party) poetry2nix;
|
||||
pyproject = pkgs.runCommand "authentik-pyproject" { src = "${src}/pyproject.toml"; } ''
|
||||
sed 's/extras = \["standard"\],//' $src > $out
|
||||
'';
|
||||
|
|
|
@ -1,10 +1,10 @@
|
|||
{ fetchFromGitLab
|
||||
{ depot
|
||||
, fetchFromGitLab
|
||||
, pkgs
|
||||
, lib
|
||||
, stdenv
|
||||
, makeWrapper
|
||||
, python3
|
||||
, poetry2nix
|
||||
, nodejs-18_x
|
||||
, ossOnly ? true
|
||||
}:
|
||||
|
@ -34,6 +34,7 @@ let
|
|||
};
|
||||
|
||||
nodejs = nodejs-18_x;
|
||||
inherit (depot.third_party) poetry2nix;
|
||||
poetry2nixOverrides = poetry2nix.defaultPoetryOverrides.overrideOverlay (self: super: let
|
||||
addBuildInputs = f: buildInputs: f.overridePythonAttrs (old: {
|
||||
buildInputs = (old.buildInputs or []) ++ buildInputs;
|
||||
|
|
|
@ -14,6 +14,6 @@ pkgs.buildGoModule rec {
|
|||
sha256 = "sha256:07q4fjkjxn2qbqvj2him7p7rw1309yhc0mnlpnvfb2m9ias0infy";
|
||||
};
|
||||
|
||||
vendorSha256 = null;
|
||||
vendorHash = null;
|
||||
doCheck = false;
|
||||
}
|
||||
|
|
|
@ -44,8 +44,8 @@
|
|||
sha256 = "18miswrdy3j2y59alqcw44pc2iv3kmsx7qmvak81z5bkmj2hjrss";
|
||||
};
|
||||
|
||||
baserow-oss = pkgs.callPackages ./baserow { ossOnly = true; };
|
||||
baserow = pkgs.callPackages ./baserow { ossOnly = false; };
|
||||
baserow-oss = pkgs.callPackages ./baserow { ossOnly = true; inherit depot; };
|
||||
baserow = pkgs.callPackages ./baserow { ossOnly = false; inherit depot; };
|
||||
|
||||
common-updater-scripts = pkgs.common-updater-scripts.override {
|
||||
nix = pkgs.nix_2_3;
|
||||
|
|
|
@ -1,16 +1,16 @@
|
|||
{
|
||||
"src": {
|
||||
"url": "https://github.com/RogueMaster/flipperzero-firmware-wPlugins",
|
||||
"rev": "215b031ba8be0413c9c7b85f2a8b5a4cc1983a9a",
|
||||
"date": "2023-09-14T16:08:31-04:00",
|
||||
"path": "/nix/store/ykf4l73qfz1mf5y1qngwgpcg6vds99m8-flipperzero-firmware-wPlugins-215b031",
|
||||
"sha256": "1xqh27p9yldjzabmbqacggj0dyb13kj78ir83iq1j8s26qd8hr8v",
|
||||
"hash": "sha256-G2WIGjZCIxlwHChHdOQcYfkG5HtM4VWX+rJRn+4REPc=",
|
||||
"rev": "5a8d754c12f7ae7f754a6ceb2a49a4188d7a270d",
|
||||
"date": "2023-10-24T01:40:59-04:00",
|
||||
"path": "/nix/store/amiaaijsw6z7zsblgkh2gfz973vw9pn6-flipperzero-firmware-wPlugins-5a8d754",
|
||||
"sha256": "0v6w63a4n8bx4k94gxxik4p3ms1915715af2mpyjvbk6yshaia6b",
|
||||
"hash": "sha256-y6iooPZmri39rcKpEk4JKeg6Lpmx90fSJH0hS9Qw3Gw=",
|
||||
"fetchLFS": false,
|
||||
"fetchSubmodules": true,
|
||||
"deepClone": false,
|
||||
"leaveDotGit": false
|
||||
},
|
||||
"version": "RM0914-1718-0.90.2-215b031",
|
||||
"upstreamVersion": "0.90.2"
|
||||
"version": "RM1024-0141-0.93.1-5a8d754",
|
||||
"upstreamVersion": "0.93.1"
|
||||
}
|
||||
|
|
|
@ -24,7 +24,7 @@ in
|
|||
];
|
||||
|
||||
src = newSrc;
|
||||
vendorSha256 = null;
|
||||
vendorHash = null;
|
||||
|
||||
patches = [ ./fix-shell-path.patch ];
|
||||
|
||||
|
|
|
@ -9,7 +9,7 @@ let
|
|||
version = "0.0.1";
|
||||
|
||||
src = ./.;
|
||||
vendorSha256 = "0n8dvdgn6izb4qcjdcsqjzximkkpf5i2xb4ap5aa2n8c36w2dn5h";
|
||||
vendorHash = "sha256:0n8dvdgn6izb4qcjdcsqjzximkkpf5i2xb4ap5aa2n8c36w2dn5h";
|
||||
|
||||
subPackages = [ "." ];
|
||||
|
||||
|
|
|
@ -21,7 +21,7 @@ buildGoModule rec {
|
|||
|
||||
patches = [ ./just-add-a-sleep.patch ];
|
||||
|
||||
vendorSha256 = "sha256:1c58470n843yh9jd010xxaqzg9lrpaw9w969ygqb6h3x8k1my7jp";
|
||||
vendorHash = "sha256:1c58470n843yh9jd010xxaqzg9lrpaw9w969ygqb6h3x8k1my7jp";
|
||||
|
||||
subPackages = [
|
||||
"cmd/acme"
|
||||
|
|
|
@ -151,7 +151,10 @@ in
|
|||
mode = "802.3ad";
|
||||
};
|
||||
};
|
||||
defaultGateway6.address = "2a09:a446:1337:ffff::1";
|
||||
defaultGateway6 = {
|
||||
address = "2a09:a446:1337:ffff::1";
|
||||
interface = "bond0";
|
||||
};
|
||||
interfaces.bond0 = {
|
||||
ipv6.addresses = [
|
||||
{ address = "2a09:a446:1337::10"; prefixLength = 64; }
|
||||
|
|
|
@ -84,8 +84,14 @@
|
|||
"8.8.8.8"
|
||||
"8.8.4.4"
|
||||
];
|
||||
defaultGateway.address = "103.141.25.49";
|
||||
defaultGateway6.address = "2a07:242:800:64::1";
|
||||
defaultGateway = {
|
||||
address = "103.141.25.49";
|
||||
interface = "eno1";
|
||||
};
|
||||
defaultGateway6 = {
|
||||
address = "2a07:242:800:64::1";
|
||||
interface = "eno1";
|
||||
};
|
||||
interfaces.eno1 = {
|
||||
ipv4.addresses = [{ address = "103.141.25.50"; prefixLength = 30; }];
|
||||
ipv6.addresses = [{ address = "2a07:242:800:64::68"; prefixLength = 64; }];
|
||||
|
|
|
@ -158,7 +158,7 @@ in
|
|||
security.pam.ussh = {
|
||||
enable = true;
|
||||
control = "sufficient";
|
||||
caFile = ../../secrets/client-ca.pub;
|
||||
caFile = toString ../../secrets/client-ca.pub;
|
||||
};
|
||||
|
||||
users.mutableUsers = false;
|
||||
|
|
|
@ -15,7 +15,7 @@
|
|||
};
|
||||
|
||||
home.packages = lib.mkAfter (with pkgs; [
|
||||
google-chrome-beta
|
||||
google-chrome
|
||||
firefox
|
||||
mpv
|
||||
dino
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
#
|
||||
# SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
{ lib, config, ... }:
|
||||
{ lib, pkgs, config, ... }:
|
||||
let
|
||||
inherit (lib) mkOption types mkAfter mkIf mkDefault;
|
||||
robCfg = config.services.zfs.rollbackOnBoot;
|
||||
|
@ -33,10 +33,14 @@ in
|
|||
};
|
||||
systemd.tmpfiles.rules = mkAfter (builtins.map (x: "L ${x} - - - - /persist{x}") robCfg.keepPaths);
|
||||
|
||||
boot.initrd.postDeviceCommands = mkIf robCfg.enable
|
||||
(mkAfter ''
|
||||
boot.initrd.systemd.services.zfs-rollback = {
|
||||
wantedBy = [ "initrd.target" ];
|
||||
path = [ pkgs.zfs ];
|
||||
script = ''
|
||||
zfs rollback -r ${robCfg.snapshot}
|
||||
'');
|
||||
'';
|
||||
after = [ "zfs-import.target" ];
|
||||
};
|
||||
|
||||
my.vault.bindMountStateTo = mkIf robCfg.enable (mkDefault "/persist/var/lib/vault-agent");
|
||||
};
|
||||
|
|
|
@ -188,7 +188,7 @@ in {
|
|||
sddm = {
|
||||
enable = true;
|
||||
settings = {
|
||||
General.DisplayServer = "wayland";
|
||||
#General.DisplayServer = "wayland";
|
||||
Users.HideUsers = "deployer";
|
||||
};
|
||||
};
|
||||
|
|
12
third_party/default.nix
vendored
12
third_party/default.nix
vendored
|
@ -26,6 +26,10 @@ let
|
|||
}).overridePythonAttrs (oldAttrs: {
|
||||
doCheck = false;
|
||||
checkPhase = "";
|
||||
patches = oldAttrs.patches ++ [
|
||||
./ntfy-0001-Swap-from-inspect.getargspec-to-inspect.signature-fo.patch
|
||||
./ntfy-0003-Swap-description-file-for-description_file-to-make-s.patch
|
||||
];
|
||||
});
|
||||
delve = pkgs.delve.overrideAttrs (oldAttrs: {
|
||||
meta = oldAttrs.meta // {
|
||||
|
@ -66,6 +70,12 @@ let
|
|||
rev = "e0fe990b478a66178a58c69cf53daec0478ca6f9";
|
||||
sha256 = "sha256:0qjyfmw5v7s6ynjns4a61vlyj9cghj7vbpgrp9147ngb1f8krz2c";
|
||||
};
|
||||
poetry2nixSrc = nixpkgs.fetchFromGitHub {
|
||||
owner = "nix-community";
|
||||
repo = "poetry2nix";
|
||||
rev = "ec4364021900f8e0d425d901b6e6ff03cf201efb";
|
||||
sha256 = "02q3jwj3m78bxh9fdg33khx8w3bcxgsci5qa8ps76vkyhihy20py";
|
||||
};
|
||||
|
||||
tvlDepot = import ./tvl { nixpkgsBisectPath = ./nixpkgs; inherit nixpkgsConfig; nixpkgsSystem = system; };
|
||||
in
|
||||
|
@ -106,4 +116,6 @@ rec {
|
|||
naersk = nixpkgs.callPackage naerskSrc {};
|
||||
|
||||
crate2nix = import "${crate2nixSrc}" { pkgs = ch.depot.pkgs; };
|
||||
|
||||
poetry2nix = import "${poetry2nixSrc}" { pkgs = ch.depot.pkgs; };
|
||||
}
|
||||
|
|
26
third_party/nixpkgs/.github/CODEOWNERS
vendored
26
third_party/nixpkgs/.github/CODEOWNERS
vendored
|
@ -11,9 +11,6 @@
|
|||
# This also holds true for GitHub teams. Since almost none of our teams have write
|
||||
# permissions, you need to list all members of the team with commit access individually.
|
||||
|
||||
# This file
|
||||
/.github/CODEOWNERS @edolstra
|
||||
|
||||
# GitHub actions
|
||||
/.github/workflows @NixOS/Security @Mic92 @zowoq
|
||||
/.github/workflows/merge-staging @FRidh
|
||||
|
@ -22,12 +19,12 @@
|
|||
/.editorconfig @Mic92 @zowoq
|
||||
|
||||
# Libraries
|
||||
/lib @edolstra @infinisil
|
||||
/lib @infinisil
|
||||
/lib/systems @alyssais @ericson2314 @amjoseph-nixpkgs
|
||||
/lib/generators.nix @edolstra @Profpatsch
|
||||
/lib/cli.nix @edolstra @Profpatsch
|
||||
/lib/debug.nix @edolstra @Profpatsch
|
||||
/lib/asserts.nix @edolstra @Profpatsch
|
||||
/lib/generators.nix @infinisil @Profpatsch
|
||||
/lib/cli.nix @infinisil @Profpatsch
|
||||
/lib/debug.nix @infinisil @Profpatsch
|
||||
/lib/asserts.nix @infinisil @Profpatsch
|
||||
/lib/path.* @infinisil @fricklerhandwerk
|
||||
/lib/fileset @infinisil
|
||||
/doc/functions/fileset.section.md @infinisil
|
||||
|
@ -48,18 +45,20 @@
|
|||
/pkgs/build-support/setup-hooks/auto-patchelf.sh @layus
|
||||
/pkgs/build-support/setup-hooks/auto-patchelf.py @layus
|
||||
/pkgs/pkgs-lib @infinisil
|
||||
## Format generators/serializers
|
||||
/pkgs/pkgs-lib/formats/libconfig @ckiee
|
||||
|
||||
# pkgs/by-name
|
||||
/pkgs/test/nixpkgs-check-by-name @infinisil
|
||||
/pkgs/by-name/README.md @infinisil
|
||||
/pkgs/top-level/by-name-overlay.nix @infinisil
|
||||
/.github/workflows/check-by-name.nix @infinisil
|
||||
/.github/workflows/check-by-name.yml @infinisil
|
||||
|
||||
# Nixpkgs build-support
|
||||
/pkgs/build-support/writers @lassulus @Profpatsch
|
||||
|
||||
# Nixpkgs make-disk-image
|
||||
/doc/builders/images/makediskimage.section.md @raitobezarius
|
||||
/doc/build-helpers/images/makediskimage.section.md @raitobezarius
|
||||
/nixos/lib/make-disk-image.nix @raitobezarius
|
||||
|
||||
# Nixpkgs documentation
|
||||
|
@ -116,7 +115,6 @@
|
|||
/maintainers/scripts/update-python-libraries @FRidh
|
||||
/pkgs/development/interpreters/python @FRidh
|
||||
/doc/languages-frameworks/python.section.md @FRidh @mweinelt
|
||||
/pkgs/development/tools/poetry2nix @adisbladis
|
||||
/pkgs/development/interpreters/python/hooks @FRidh @jonringer
|
||||
|
||||
# Haskell
|
||||
|
@ -149,6 +147,8 @@
|
|||
# C compilers
|
||||
/pkgs/development/compilers/gcc @amjoseph-nixpkgs
|
||||
/pkgs/development/compilers/llvm @RaitoBezarius
|
||||
/pkgs/development/compilers/emscripten @raitobezarius
|
||||
/doc/languages-frameworks/emscripten.section.md @raitobezarius
|
||||
|
||||
# Audio
|
||||
/nixos/modules/services/audio/botamusique.nix @mweinelt
|
||||
|
@ -216,7 +216,7 @@ pkgs/development/python-modules/buildcatrust/ @ajs124 @lukegb @mweinelt
|
|||
/nixos/tests/knot.nix @mweinelt
|
||||
|
||||
# Web servers
|
||||
/doc/builders/packages/nginx.section.md @raitobezarius
|
||||
/doc/packages/nginx.section.md @raitobezarius
|
||||
/pkgs/servers/http/nginx/ @raitobezarius
|
||||
/nixos/modules/services/web-servers/nginx/ @raitobezarius
|
||||
|
||||
|
@ -269,7 +269,7 @@ pkgs/development/python-modules/buildcatrust/ @ajs124 @lukegb @mweinelt
|
|||
# Docker tools
|
||||
/pkgs/build-support/docker @roberth
|
||||
/nixos/tests/docker-tools* @roberth
|
||||
/doc/builders/images/dockertools.section.md @roberth
|
||||
/doc/build-helpers/images/dockertools.section.md @roberth
|
||||
|
||||
# Blockchains
|
||||
/pkgs/applications/blockchains @mmahut @RaghavSood
|
||||
|
|
|
@ -7,25 +7,81 @@ assignees: ''
|
|||
|
||||
---
|
||||
|
||||
Building this package twice does not produce the bit-by-bit identical result each time, making it harder to detect CI breaches. You can read more about this at https://reproducible-builds.org/ .
|
||||
<!--
|
||||
Hello dear reporter,
|
||||
|
||||
Fixing bit-by-bit reproducibility also has additional advantages, such as avoiding hard-to-reproduce bugs, making content-addressed storage more effective and reducing rebuilds in such systems.
|
||||
Thank you for bringing attention to this issue. Your insights are valuable to
|
||||
us, and we appreciate the time you took to document the problem.
|
||||
|
||||
I wanted to kindly point out that in this issue template, it would be beneficial
|
||||
to replace the placeholder `<package>` with the actual, canonical name of the
|
||||
package you're reporting the issue for. Doing so will provide better context and
|
||||
facilitate quicker troubleshooting for anyone who reads this issue in the
|
||||
future.
|
||||
|
||||
Best regards
|
||||
-->
|
||||
|
||||
Building this package multiple times does not yield bit-by-bit identical
|
||||
results, complicating the detection of Continuous Integration (CI) breaches. For
|
||||
more information on this issue, visit
|
||||
[reproducible-builds.org](https://reproducible-builds.org/).
|
||||
|
||||
Fixing bit-by-bit reproducibility also has additional advantages, such as
|
||||
avoiding hard-to-reproduce bugs, making content-addressed storage more effective
|
||||
and reducing rebuilds in such systems.
|
||||
|
||||
### Steps To Reproduce
|
||||
|
||||
```
|
||||
nix-build '<nixpkgs>' -A ... --check --keep-failed
|
||||
```
|
||||
In the following steps, replace `<package>` with the canonical name of the
|
||||
package.
|
||||
|
||||
You can use `diffoscope` to analyze the differences in the output of the two builds.
|
||||
#### 1. Build the package
|
||||
|
||||
To view the build log of the build that produced the artifact in the binary cache:
|
||||
This step will build the package. Specific arguments are passed to the command
|
||||
to keep the build artifacts so we can compare them in case of differences.
|
||||
|
||||
Execute the following command:
|
||||
|
||||
```
|
||||
nix-store --read-log $(nix-instantiate '<nixpkgs>' -A ...)
|
||||
nix-build '<nixpkgs>' -A <package> && nix-build '<nixpkgs>' -A <package> --check --keep-failed
|
||||
```
|
||||
|
||||
Or using the new command line style:
|
||||
|
||||
```
|
||||
nix build nixpkgs#<package> && nix build nixpkgs#<package> --rebuild --keep-failed
|
||||
```
|
||||
|
||||
#### 2. Compare the build artifacts
|
||||
|
||||
If the previous command completes successfully, no differences were found and
|
||||
there's nothing to do, builds are reproducible.
|
||||
If it terminates with the error message `error: derivation '<X>' may not be
|
||||
deterministic: output '<Y>' differs from '<Z>'`, use `diffoscope` to investigate
|
||||
the discrepancies between the two build outputs. You may need to add the
|
||||
`--exclude-directory-metadata recursive` option to ignore files and directories
|
||||
metadata (*e.g. timestamp*) differences.
|
||||
|
||||
```
|
||||
nix run nixpkgs#diffoscopeMinimal -- --exclude-directory-metadata recursive <Y> <Z>
|
||||
```
|
||||
|
||||
#### 3. Examine the build log
|
||||
|
||||
To examine the build log, use:
|
||||
|
||||
```
|
||||
nix-store --read-log $(nix-instantiate '<nixpkgs>' -A <package>)
|
||||
```
|
||||
|
||||
Or with the new command line style:
|
||||
|
||||
```
|
||||
nix log $(nix path-info --derivation nixpkgs#<package>)
|
||||
```
|
||||
|
||||
### Additional context
|
||||
|
||||
(please share the relevant fragment of the diffoscope output here,
|
||||
and any additional analysis you may have done)
|
||||
(please share the relevant fragment of the diffoscope output here, and any
|
||||
additional analysis you may have done)
|
||||
|
|
|
@ -14,7 +14,9 @@ For new packages please briefly describe the package or provide a link to its ho
|
|||
- [ ] aarch64-linux
|
||||
- [ ] x86_64-darwin
|
||||
- [ ] aarch64-darwin
|
||||
- [ ] For non-Linux: Is `sandbox = true` set in `nix.conf`? (See [Nix manual](https://nixos.org/manual/nix/stable/command-ref/conf-file.html))
|
||||
- For non-Linux: Is sandboxing enabled in `nix.conf`? (See [Nix manual](https://nixos.org/manual/nix/stable/command-ref/conf-file.html))
|
||||
- [ ] `sandbox = relaxed`
|
||||
- [ ] `sandbox = true`
|
||||
- [ ] Tested, as applicable:
|
||||
- [NixOS test(s)](https://nixos.org/manual/nixos/unstable/index.html#sec-nixos-tests) (look inside [nixos/tests](https://github.com/NixOS/nixpkgs/blob/master/nixos/tests))
|
||||
- and/or [package tests](https://nixos.org/manual/nixpkgs/unstable/#sec-package-tests)
|
||||
|
|
5
third_party/nixpkgs/.github/labeler.yml
vendored
5
third_party/nixpkgs/.github/labeler.yml
vendored
|
@ -37,6 +37,11 @@
|
|||
"6.topic: fetch":
|
||||
- pkgs/build-support/fetch*/**/*
|
||||
|
||||
"6.topic: flakes":
|
||||
- '**/flake.nix'
|
||||
- lib/systems/flake-systems.nix
|
||||
- nixos/modules/config/nix-flakes.nix
|
||||
|
||||
"6.topic: GNOME":
|
||||
- doc/languages-frameworks/gnome.section.md
|
||||
- nixos/modules/services/desktops/gnome/**/*
|
||||
|
|
|
@ -24,7 +24,7 @@ jobs:
|
|||
with:
|
||||
ref: ${{ github.event.pull_request.head.sha }}
|
||||
- name: Create backport PRs
|
||||
uses: korthout/backport-action@v1.3.1
|
||||
uses: korthout/backport-action@v2.1.1
|
||||
with:
|
||||
# Config README: https://github.com/korthout/backport-action#backport-action
|
||||
copy_labels_pattern: 'severity:\ssecurity'
|
||||
|
|
|
@ -18,12 +18,34 @@ jobs:
|
|||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Resolving the merge commit
|
||||
env:
|
||||
GH_TOKEN: ${{ github.token }}
|
||||
run: |
|
||||
if result=$(git ls-remote --exit-code ${{ github.event.pull_request.base.repo.clone_url }} refs/pull/${{ github.event.pull_request.number }}/merge); then
|
||||
mergedSha=$(cut -f1 <<< "$result")
|
||||
echo "The PR appears to not have any conflicts, checking the merge commit $mergedSha"
|
||||
# This checks for mergeability of a pull request as recommended in
|
||||
# https://docs.github.com/en/rest/guides/using-the-rest-api-to-interact-with-your-git-database?apiVersion=2022-11-28#checking-mergeability-of-pull-requests
|
||||
while true; do
|
||||
echo "Checking whether the pull request can be merged"
|
||||
prInfo=$(gh api \
|
||||
-H "Accept: application/vnd.github+json" \
|
||||
-H "X-GitHub-Api-Version: 2022-11-28" \
|
||||
/repos/"$GITHUB_REPOSITORY"/pulls/${{ github.event.pull_request.number }})
|
||||
mergeable=$(jq -r .mergeable <<< "$prInfo")
|
||||
mergedSha=$(jq -r .merge_commit_sha <<< "$prInfo")
|
||||
|
||||
if [[ "$mergeable" == "null" ]]; then
|
||||
# null indicates that GitHub is still computing whether it's mergeable
|
||||
# Wait a couple seconds before trying again
|
||||
echo "GitHub is still computing whether this PR can be merged, waiting 5 seconds before trying again"
|
||||
sleep 5
|
||||
else
|
||||
break
|
||||
fi
|
||||
done
|
||||
|
||||
if [[ "$mergeable" == "true" ]]; then
|
||||
echo "The PR can be merged, checking the merge commit $mergedSha"
|
||||
else
|
||||
echo "The PR may have a merge conflict"
|
||||
echo "The PR cannot be merged, it has a merge conflict"
|
||||
exit 1
|
||||
fi
|
||||
echo "mergedSha=$mergedSha" >> "$GITHUB_ENV"
|
||||
|
|
43
third_party/nixpkgs/CONTRIBUTING.md
vendored
43
third_party/nixpkgs/CONTRIBUTING.md
vendored
|
@ -322,6 +322,8 @@ All the review template samples provided in this section are generic and meant a
|
|||
|
||||
To get more information about how to review specific parts of Nixpkgs, refer to the documents linked to in the [overview section][overview].
|
||||
|
||||
If a pull request contains documentation changes that might require feedback from the documentation team, ping @NixOS/documentation-team on the pull request.
|
||||
|
||||
If you consider having enough knowledge and experience in a topic and would like to be a long-term reviewer for related submissions, please contact the current reviewers for that topic. They will give you information about the reviewing process. The main reviewers for a topic can be hard to find as there is no list, but checking past pull requests to see who reviewed or git-blaming the code to see who committed to that topic can give some hints.
|
||||
|
||||
Container system, boot system and library changes are some examples of the pull requests fitting this category.
|
||||
|
@ -352,8 +354,8 @@ In a case a contributor definitively leaves the Nix community, they should creat
|
|||
|
||||
# Flow of merged pull requests
|
||||
|
||||
After a pull requests is merged, it eventually makes it to the [official Hydra CI](https://hydra.nixos.org/).
|
||||
Hydra regularly evaluates and builds Nixpkgs, updating [the official channels](http://channels.nixos.org/) when specific Hydra jobs succeeded.
|
||||
After a pull request is merged, it eventually makes it to the [official Hydra CI](https://hydra.nixos.org/).
|
||||
Hydra regularly evaluates and builds Nixpkgs, updating [the official channels](https://channels.nixos.org/) when specific Hydra jobs succeeded.
|
||||
See [Nix Channel Status](https://status.nixos.org/) for the current channels and their state.
|
||||
Here's a brief overview of the main Git branches and what channels they're used for:
|
||||
|
||||
|
@ -465,7 +467,7 @@ Is the change [acceptable for releases][release-acceptable] and do you wish to h
|
|||
- No: Use the `master` branch, do not backport the pull request.
|
||||
- Yes: Can the change be implemented the same way on the `master` and release branches?
|
||||
For example, a packages major version might differ between the `master` and release branches, such that separate security patches are required.
|
||||
- Yes: Use the `master` branch and [backport the pull request](#backporting-changes).
|
||||
- Yes: Use the `master` branch and [backport the pull request](#how-to-backport-pull-requests).
|
||||
- No: Create separate pull requests to the `master` and `release-XX.YY` branches.
|
||||
|
||||
Furthermore, if the change causes a [mass rebuild][mass-rebuild], use the appropriate staging branch instead:
|
||||
|
@ -512,33 +514,18 @@ To get a sense for what changes are considered mass rebuilds, see [previously me
|
|||
|
||||
- If you have commits `pkg-name: oh, forgot to insert whitespace`: squash commits in this case. Use `git rebase -i`.
|
||||
|
||||
- Format the commit messages in the following way:
|
||||
- For consistency, there should not be a period at the end of the commit message's summary line (the first line of the commit message).
|
||||
|
||||
```
|
||||
(pkg-name | nixos/<module>): (from -> to | init at version | refactor | etc)
|
||||
|
||||
(Motivation for change. Link to release notes. Additional information.)
|
||||
```
|
||||
|
||||
For consistency, there should not be a period at the end of the commit message's summary line (the first line of the commit message).
|
||||
|
||||
Examples:
|
||||
|
||||
* nginx: init at 2.0.1
|
||||
* firefox: 54.0.1 -> 55.0
|
||||
|
||||
https://www.mozilla.org/en-US/firefox/55.0/releasenotes/
|
||||
* nixos/hydra: add bazBaz option
|
||||
|
||||
Dual baz behavior is needed to do foo.
|
||||
* nixos/nginx: refactor config generation
|
||||
|
||||
The old config generation system used impure shell scripts and could break in specific circumstances (see #1234).
|
||||
|
||||
When adding yourself as maintainer, in the same pull request, make a separate
|
||||
- When adding yourself as maintainer in the same pull request, make a separate
|
||||
commit with the message `maintainers: add <handle>`.
|
||||
Add the commit before those making changes to the package or module.
|
||||
See [Nixpkgs Maintainers](../maintainers/README.md) for details.
|
||||
See [Nixpkgs Maintainers](./maintainers/README.md) for details.
|
||||
|
||||
- Make sure you read about any commit conventions specific to the area you're touching. See:
|
||||
- [Commit conventions](./pkgs/README.md#commit-conventions) for changes to `pkgs`.
|
||||
- [Commit conventions](./lib/README.md#commit-conventions) for changes to `lib`.
|
||||
- [Commit conventions](./nixos/README.md#commit-conventions) for changes to `nixos`.
|
||||
- [Commit conventions](./doc/README.md#commit-conventions) for changes to `doc`, the Nixpkgs manual.
|
||||
|
||||
### Writing good commit messages
|
||||
|
||||
|
@ -565,7 +552,7 @@ Names of files and directories should be in lowercase, with dashes between words
|
|||
|
||||
- Do not use tab characters, i.e. configure your editor to use soft tabs. For instance, use `(setq-default indent-tabs-mode nil)` in Emacs. Everybody has different tab settings so it’s asking for trouble.
|
||||
|
||||
- Use `lowerCamelCase` for variable names, not `UpperCamelCase`. Note, this rule does not apply to package attribute names, which instead follow the rules in [](#sec-package-naming).
|
||||
- Use `lowerCamelCase` for variable names, not `UpperCamelCase`. Note, this rule does not apply to package attribute names, which instead follow the rules in [package naming](./pkgs/README.md#package-naming).
|
||||
|
||||
- Function calls with attribute set arguments are written as
|
||||
|
||||
|
|
22
third_party/nixpkgs/doc/README.md
vendored
22
third_party/nixpkgs/doc/README.md
vendored
|
@ -3,6 +3,7 @@
|
|||
This directory houses the sources files for the Nixpkgs manual.
|
||||
|
||||
You can find the [rendered documentation for Nixpkgs `unstable` on nixos.org](https://nixos.org/manual/nixpkgs/unstable/).
|
||||
The rendering tool is [nixos-render-docs](../pkgs/tools/nix/nixos-render-docs/src/nixos_render_docs), sometimes abbreviated `nrd`.
|
||||
|
||||
[Docs for Nixpkgs stable](https://nixos.org/manual/nixpkgs/stable/) are also available.
|
||||
|
||||
|
@ -113,3 +114,24 @@ pear
|
|||
watermelon
|
||||
: green fruit with red flesh
|
||||
```
|
||||
|
||||
## Commit conventions
|
||||
|
||||
- Make sure you read about the [commit conventions](../CONTRIBUTING.md#commit-conventions) common to Nixpkgs as a whole.
|
||||
|
||||
- If creating a commit purely for documentation changes, format the commit message in the following way:
|
||||
|
||||
```
|
||||
doc: (documentation summary)
|
||||
|
||||
(Motivation for change, relevant links, additional information.)
|
||||
```
|
||||
|
||||
Examples:
|
||||
|
||||
* doc: update the kernel config documentation to use `nix-shell`
|
||||
* doc: add information about `nix-update-script`
|
||||
|
||||
Closes #216321.
|
||||
|
||||
- If the commit contains more than just documentation changes, follow the commit message format relevant for the rest of the changes.
|
||||
|
|
28
third_party/nixpkgs/doc/build-helpers.md
vendored
Normal file
28
third_party/nixpkgs/doc/build-helpers.md
vendored
Normal file
|
@ -0,0 +1,28 @@
|
|||
# Build helpers {#part-builders}
|
||||
|
||||
A build helper is a function that produces derivations.
|
||||
|
||||
:::{.warning}
|
||||
This is not to be confused with the [`builder` argument of the Nix `derivation` primitive](https://nixos.org/manual/nix/unstable/language/derivations.html), which refers to the executable that produces the build result, or [remote builder](https://nixos.org/manual/nix/stable/advanced-topics/distributed-builds.html), which refers to a remote machine that could run such an executable.
|
||||
:::
|
||||
|
||||
Such a function is usually designed to abstract over a typical workflow for a given programming language or framework.
|
||||
This allows declaring a build recipe by setting a limited number of options relevant to the particular use case instead of using the `derivation` function directly.
|
||||
|
||||
[`stdenv.mkDerivation`](#part-stdenv) is the most widely used build helper, and serves as a basis for many others.
|
||||
In addition, it offers various options to customize parts of the builds.
|
||||
|
||||
There is no uniform interface for build helpers.
|
||||
[Trivial build helpers](#chap-trivial-builders) and [fetchers](#chap-pkgs-fetchers) have various input types for convenience.
|
||||
[Language- or framework-specific build helpers](#chap-language-support) usually follow the style of `stdenv.mkDerivation`, which accepts an attribute set or a fixed-point function taking an attribute set.
|
||||
|
||||
```{=include=} chapters
|
||||
build-helpers/fetchers.chapter.md
|
||||
build-helpers/trivial-build-helpers.chapter.md
|
||||
build-helpers/testers.chapter.md
|
||||
build-helpers/special.md
|
||||
build-helpers/images.md
|
||||
hooks/index.md
|
||||
languages-frameworks/index.md
|
||||
packages/index.md
|
||||
```
|
|
@ -1,13 +1,28 @@
|
|||
# Fetchers {#chap-pkgs-fetchers}
|
||||
|
||||
Building software with Nix often requires downloading source code and other files from the internet.
|
||||
`nixpkgs` provides *fetchers* for different protocols and services. Fetchers are functions that simplify downloading files.
|
||||
To this end, Nixpkgs provides *fetchers*: functions to obtain remote sources via various protocols and services.
|
||||
|
||||
Nixpkgs fetchers differ from built-in fetchers such as [`builtins.fetchTarball`](https://nixos.org/manual/nix/stable/language/builtins.html#builtins-fetchTarball):
|
||||
- A built-in fetcher will download and cache files at evaluation time and produce a [store path](https://nixos.org/manual/nix/stable/glossary#gloss-store-path).
|
||||
A Nixpkgs fetcher will create a ([fixed-output](https://nixos.org/manual/nix/stable/glossary#gloss-fixed-output-derivation)) [derivation](https://nixos.org/manual/nix/stable/language/derivations), and files are downloaded at build time.
|
||||
- Built-in fetchers will invalidate their cache after [`tarball-ttl`](https://nixos.org/manual/nix/stable/command-ref/conf-file#conf-tarball-ttl) expires, and will require network activity to check if the cache entry is up to date.
|
||||
Nixpkgs fetchers only re-download if the specified hash changes or the store object is not otherwise available.
|
||||
- Built-in fetchers do not use [substituters](https://nixos.org/manual/nix/stable/command-ref/conf-file#conf-substituters).
|
||||
Derivations produced by Nixpkgs fetchers will use any configured binary cache transparently.
|
||||
|
||||
This significantly reduces the time needed to evaluate the entirety of Nixpkgs, and allows [Hydra](https://nixos.org/hydra) to retain and re-distribute sources used by Nixpkgs in the [public binary cache](https://cache.nixos.org).
|
||||
For these reasons, built-in fetchers are not allowed in Nixpkgs source code.
|
||||
|
||||
The following table shows an overview of the differences:
|
||||
|
||||
| Fetchers | Download | Output | Cache | Re-download when |
|
||||
|-|-|-|-|-|
|
||||
| `builtins.fetch*` | evaluation time | store path | `/nix/store`, `~/.cache/nix` | `tarball-ttl` expires, cache miss in `~/.cache/nix`, output store object not in local store |
|
||||
| `pkgs.fetch*` | build time | derivation | `/nix/store`, substituters | output store object not available |
|
||||
|
||||
## Caveats {#chap-pkgs-fetchers-caveats}
|
||||
|
||||
Fetchers create [fixed output derivations](https://nixos.org/manual/nix/stable/#fixed-output-drvs) from downloaded files.
|
||||
Nix can reuse the downloaded files via the hash of the resulting derivation.
|
||||
|
||||
The fact that the hash belongs to the Nix derivation output and not the file itself can lead to confusion.
|
||||
For example, consider the following fetcher:
|
||||
|
||||
|
@ -243,3 +258,26 @@ or
|
|||
|
||||
***
|
||||
```
|
||||
## `fetchtorrent` {#fetchtorrent}
|
||||
|
||||
`fetchtorrent` expects two arguments. `url` which can either be a Magnet URI (Magnet Link) such as `magnet:?xt=urn:btih:dd8255ecdc7ca55fb0bbf81323d87062db1f6d1c` or an HTTP URL pointing to a `.torrent` file. It can also take a `config` argument which will craft a `settings.json` configuration file and give it to `transmission`, the underlying program that is performing the fetch. The available config options for `transmission` can be found [here](https://github.com/transmission/transmission/blob/main/docs/Editing-Configuration-Files.md#options)
|
||||
|
||||
```
|
||||
{ fetchtorrent }:
|
||||
|
||||
fetchtorrent {
|
||||
config = { peer-limit-global = 100; };
|
||||
url = "magnet:?xt=urn:btih:dd8255ecdc7ca55fb0bbf81323d87062db1f6d1c";
|
||||
sha256 = "";
|
||||
}
|
||||
```
|
||||
|
||||
### Parameters {#fetchtorrent-parameters}
|
||||
|
||||
- `url`: Magnet URI (Magnet Link) such as `magnet:?xt=urn:btih:dd8255ecdc7ca55fb0bbf81323d87062db1f6d1c` or an HTTP URL pointing to a `.torrent` file.
|
||||
|
||||
- `backend`: Which bittorrent program to use. Default: `"transmission"`. Valid values are `"rqbit"` or `"transmission"`. These are the two most suitable torrent clients for fetching in a fixed-output derivation at the time of writing, as they can be easily exited after usage. `rqbit` is written in Rust and has a smaller closure size than `transmission`, and the performance and peer discovery properties differs between these clients, requiring experimentation to decide upon which is the best.
|
||||
|
||||
- `config`: When using `transmission` as the `backend`, a json configuration can
|
||||
be supplied to transmission. Refer to the [upstream documentation](https://github.com/transmission/transmission/blob/main/docs/Editing-Configuration-Files.md) for information on how to configure.
|
||||
|
|
@ -275,7 +275,7 @@ pullImage {
|
|||
`nix-prefetch-docker` command can be used to get required image parameters:
|
||||
|
||||
```ShellSession
|
||||
$ nix run nixpkgs.nix-prefetch-docker -c nix-prefetch-docker --image-name mysql --image-tag 5
|
||||
$ nix run nixpkgs#nix-prefetch-docker -- --image-name mysql --image-tag 5
|
||||
```
|
||||
|
||||
Since a given `imageName` may transparently refer to a manifest list of images which support multiple architectures and/or operating systems, you can supply the `--os` and `--arch` arguments to specify exactly which image you want. By default it will match the OS and architecture of the host the command is run on.
|
|
@ -1,11 +1,10 @@
|
|||
# Special builders {#chap-special}
|
||||
# Special build helpers {#chap-special}
|
||||
|
||||
This chapter describes several special builders.
|
||||
This chapter describes several special build helpers.
|
||||
|
||||
```{=include=} sections
|
||||
special/fhs-environments.section.md
|
||||
special/makesetuphook.section.md
|
||||
special/mkshell.section.md
|
||||
special/darwin-builder.section.md
|
||||
special/vm-tools.section.md
|
||||
```
|
|
@ -1,6 +1,6 @@
|
|||
# pkgs.makeSetupHook {#sec-pkgs.makeSetupHook}
|
||||
|
||||
`pkgs.makeSetupHook` is a builder that produces hooks that go in to `nativeBuildInputs`
|
||||
`pkgs.makeSetupHook` is a build helper that produces hooks that go in to `nativeBuildInputs`
|
||||
|
||||
## Usage {#sec-pkgs.makeSetupHook-usage}
|
||||
|
|
@ -1,4 +1,4 @@
|
|||
# Trivial builders {#chap-trivial-builders}
|
||||
# Trivial build helpers {#chap-trivial-builders}
|
||||
|
||||
Nixpkgs provides a couple of functions that help with building derivations. The most important one, `stdenv.mkDerivation`, has already been documented above. The following functions wrap `stdenv.mkDerivation`, making it easier to use in certain cases.
|
||||
|
12
third_party/nixpkgs/doc/builders.md
vendored
12
third_party/nixpkgs/doc/builders.md
vendored
|
@ -1,12 +0,0 @@
|
|||
# Builders {#part-builders}
|
||||
|
||||
```{=include=} chapters
|
||||
builders/fetchers.chapter.md
|
||||
builders/trivial-builders.chapter.md
|
||||
builders/testers.chapter.md
|
||||
builders/special.md
|
||||
builders/images.md
|
||||
hooks/index.md
|
||||
languages-frameworks/index.md
|
||||
builders/packages/index.md
|
||||
```
|
1
third_party/nixpkgs/doc/default.nix
vendored
1
third_party/nixpkgs/doc/default.nix
vendored
|
@ -23,6 +23,7 @@ let
|
|||
{ name = "sources"; description = "source filtering functions"; }
|
||||
{ name = "cli"; description = "command-line serialization functions"; }
|
||||
{ name = "gvariant"; description = "GVariant formatted string serialization functions"; }
|
||||
{ name = "customisation"; description = "Functions to customise (derivation-related) functions, derivatons, or attribute sets"; }
|
||||
];
|
||||
};
|
||||
|
||||
|
|
|
@ -6,11 +6,8 @@ The [`lib.fileset`](#sec-functions-library-fileset) library allows you to work w
|
|||
A file set is a mathematical set of local files that can be added to the Nix store for use in Nix derivations.
|
||||
File sets are easy and safe to use, providing obvious and composable semantics with good error messages to prevent mistakes.
|
||||
|
||||
These sections apply to the entire library.
|
||||
See the [function reference](#sec-functions-library-fileset) for function-specific documentation.
|
||||
|
||||
The file set library is currently somewhat limited but is being expanded to include more functions over time.
|
||||
|
||||
## Implicit coercion from paths to file sets {#sec-fileset-path-coercion}
|
||||
|
||||
All functions accepting file sets as arguments can also accept [paths](https://nixos.org/manual/nix/stable/language/values.html#type-path) as arguments.
|
||||
|
|
|
@ -6,6 +6,6 @@ You can also specify a `runtimeDependencies` variable which lists dependencies t
|
|||
|
||||
In certain situations you may want to run the main command (`autoPatchelf`) of the setup hook on a file or a set of directories instead of unconditionally patching all outputs. This can be done by setting the `dontAutoPatchelf` environment variable to a non-empty value.
|
||||
|
||||
By default `autoPatchelf` will fail as soon as any ELF file requires a dependency which cannot be resolved via the given build inputs. In some situations you might prefer to just leave missing dependencies unpatched and continue to patch the rest. This can be achieved by setting the `autoPatchelfIgnoreMissingDeps` environment variable to a non-empty value. `autoPatchelfIgnoreMissingDeps` can be set to a list like `autoPatchelfIgnoreMissingDeps = [ "libcuda.so.1" "libcudart.so.1" ];` or to simply `[ "*" ]` to ignore all missing dependencies.
|
||||
By default `autoPatchelf` will fail as soon as any ELF file requires a dependency which cannot be resolved via the given build inputs. In some situations you might prefer to just leave missing dependencies unpatched and continue to patch the rest. This can be achieved by setting the `autoPatchelfIgnoreMissingDeps` environment variable to a non-empty value. `autoPatchelfIgnoreMissingDeps` can be set to a list like `autoPatchelfIgnoreMissingDeps = [ "libcuda.so.1" "libcudart.so.1" ];` or to `[ "*" ]` to ignore all missing dependencies.
|
||||
|
||||
The `autoPatchelf` command also recognizes a `--no-recurse` command line flag, which prevents it from recursing into subdirectories.
|
||||
|
|
1
third_party/nixpkgs/doc/hooks/index.md
vendored
1
third_party/nixpkgs/doc/hooks/index.md
vendored
|
@ -25,7 +25,6 @@ perl.section.md
|
|||
pkg-config.section.md
|
||||
postgresql-test-hook.section.md
|
||||
python.section.md
|
||||
qt-4.section.md
|
||||
scons.section.md
|
||||
tetex-tex-live.section.md
|
||||
unzip.section.md
|
||||
|
|
82
third_party/nixpkgs/doc/hooks/meson.section.md
vendored
82
third_party/nixpkgs/doc/hooks/meson.section.md
vendored
|
@ -1,25 +1,83 @@
|
|||
# Meson {#meson}
|
||||
|
||||
Overrides the configure phase to run meson to generate Ninja files. To run these files, you should accompany Meson with ninja. By default, `enableParallelBuilding` is enabled as Meson supports parallel building almost everywhere.
|
||||
[Meson](https://mesonbuild.com/) is an open source meta build system meant to be
|
||||
fast and user-friendly.
|
||||
|
||||
## Variables controlling Meson {#variables-controlling-meson}
|
||||
In Nixpkgs, meson comes with a setup hook that overrides the configure, check,
|
||||
and install phases.
|
||||
|
||||
### `mesonFlags` {#mesonflags}
|
||||
Being a meta build system, meson needs an accompanying backend. In the context
|
||||
of Nixpkgs, the typical companion backend is [Ninja](#ninja), that provides a
|
||||
setup hook registering ninja-based build and install phases.
|
||||
|
||||
Controls the flags passed to meson.
|
||||
## Variables controlling Meson {#meson-variables-controlling}
|
||||
|
||||
### `mesonBuildType` {#mesonbuildtype}
|
||||
### Meson Exclusive Variables {#meson-exclusive-variables}
|
||||
|
||||
Which [`--buildtype`](https://mesonbuild.com/Builtin-options.html#core-options) to pass to Meson. We default to `plain`.
|
||||
#### `mesonFlags` {#meson-flags}
|
||||
|
||||
### `mesonAutoFeatures` {#mesonautofeatures}
|
||||
Controls the flags passed to `meson setup` during configure phase.
|
||||
|
||||
What value to set [`-Dauto_features=`](https://mesonbuild.com/Builtin-options.html#core-options) to. We default to `enabled`.
|
||||
#### `mesonWrapMode` {#meson-wrap-mode}
|
||||
|
||||
### `mesonWrapMode` {#mesonwrapmode}
|
||||
Which value is passed as
|
||||
[`-Dwrap_mode=`](https://mesonbuild.com/Builtin-options.html#core-options)
|
||||
to. In Nixpkgs the default value is `nodownload`, so that no subproject will be
|
||||
downloaded (since network access is already disabled during deployment in
|
||||
Nixpkgs).
|
||||
|
||||
What value to set [`-Dwrap_mode=`](https://mesonbuild.com/Builtin-options.html#core-options) to. We default to `nodownload` as we disallow network access.
|
||||
Note: Meson allows pre-population of subprojects that would otherwise be
|
||||
downloaded.
|
||||
|
||||
### `dontUseMesonConfigure` {#dontusemesonconfigure}
|
||||
#### `mesonBuildType` {#meson-build-type}
|
||||
|
||||
Disables using Meson’s `configurePhase`.
|
||||
Which value is passed as
|
||||
[`--buildtype`](https://mesonbuild.com/Builtin-options.html#core-options) to
|
||||
`meson setup` during configure phase. In Nixpkgs the default value is `plain`.
|
||||
|
||||
#### `mesonAutoFeatures` {#meson-auto-features}
|
||||
|
||||
Which value is passed as
|
||||
[`-Dauto_features=`](https://mesonbuild.com/Builtin-options.html#core-options)
|
||||
to `meson setup` during configure phase. In Nixpkgs the default value is
|
||||
`enabled`, meaning that every feature declared as "auto" by the meson scripts
|
||||
will be enabled.
|
||||
|
||||
#### `mesonCheckFlags` {#meson-check-flags}
|
||||
|
||||
Controls the flags passed to `meson test` during check phase.
|
||||
|
||||
#### `mesonInstallFlags` {#meson-install-flags}
|
||||
|
||||
Controls the flags passed to `meson install` during install phase.
|
||||
|
||||
#### `mesonInstallTags` {#meson-install-tags}
|
||||
|
||||
A list of installation tags passed to Meson's commandline option
|
||||
[`--tags`](https://mesonbuild.com/Installing.html#installation-tags) during
|
||||
install phase.
|
||||
|
||||
Note: `mesonInstallTags` should be a list of strings, that will be converted to
|
||||
a comma-separated string that is recognized to `--tags`.
|
||||
Example: `mesonInstallTags = [ "emulator" "assembler" ];` will be converted to
|
||||
`--tags emulator,assembler`.
|
||||
|
||||
#### `dontUseMesonConfigure` {#dont-use-meson-configure}
|
||||
|
||||
When set to true, don't use the predefined `mesonConfigurePhase`.
|
||||
|
||||
#### `dontUseMesonCheck` {#dont-use-meson-check}
|
||||
|
||||
When set to true, don't use the predefined `mesonCheckPhase`.
|
||||
|
||||
#### `dontUseMesonInstall` {#dont-use-meson-install}
|
||||
|
||||
When set to true, don't use the predefined `mesonInstallPhase`.
|
||||
|
||||
### Honored variables {#meson-honored-variables}
|
||||
|
||||
The following variables commonly used by `stdenv.mkDerivation` are honored by
|
||||
Meson setup hook.
|
||||
|
||||
- `prefixKey`
|
||||
- `enableParallelBuilding`
|
||||
|
|
|
@ -1,3 +1,5 @@
|
|||
# ninja {#ninja}
|
||||
|
||||
Overrides the build, install, and check phase to run ninja instead of make. You can disable this behavior with the `dontUseNinjaBuild`, `dontUseNinjaInstall`, and `dontUseNinjaCheck`, respectively. Parallel building is enabled by default in Ninja.
|
||||
|
||||
Note that if the [Meson setup hook](#meson) is also active, Ninja's install and check phases will be disabled in favor of Meson's.
|
||||
|
|
|
@ -1,3 +0,0 @@
|
|||
# Qt 4 {#qt-4}
|
||||
|
||||
Sets the `QTDIR` environment variable to Qt’s path.
|
|
@ -146,7 +146,7 @@ agdaPackages.mkDerivation {
|
|||
|
||||
### Building Agda packages {#building-agda-packages}
|
||||
|
||||
The default build phase for `agdaPackages.mkDerivation` simply runs `agda` on the `Everything.agda` file.
|
||||
The default build phase for `agdaPackages.mkDerivation` runs `agda` on the `Everything.agda` file.
|
||||
If something else is needed to build the package (e.g. `make`) then the `buildPhase` should be overridden.
|
||||
Additionally, a `preBuild` or `configurePhase` can be used if there are steps that need to be done prior to checking the `Everything.agda` file.
|
||||
`agda` and the Agda libraries contained in `buildInputs` are made available during the build phase.
|
||||
|
@ -250,7 +250,7 @@ Usually, the maintainers will answer within a week or two with a new release.
|
|||
Bumping the version of that reverse dependency should be a further commit on your PR.
|
||||
|
||||
In the rare case that a new release is not to be expected within an acceptable time,
|
||||
simply mark the broken package as broken by setting `meta.broken = true;`.
|
||||
mark the broken package as broken by setting `meta.broken = true;`.
|
||||
This will exclude it from the build test.
|
||||
It can be added later when it is fixed,
|
||||
and does not hinder the advancement of the whole package set in the meantime.
|
||||
|
|
|
@ -44,7 +44,7 @@ There is also a `buildMix` helper, whose behavior is closer to that of `buildErl
|
|||
|
||||
## How to Install BEAM Packages {#how-to-install-beam-packages}
|
||||
|
||||
BEAM builders are not registered at the top level, simply because they are not relevant to the vast majority of Nix users.
|
||||
BEAM builders are not registered at the top level, because they are not relevant to the vast majority of Nix users.
|
||||
To use any of those builders into your environment, refer to them by their attribute path under `beamPackages`, e.g. `beamPackages.rebar3`:
|
||||
|
||||
::: {.example #ex-beam-ephemeral-shell}
|
||||
|
|
|
@ -8,10 +8,12 @@ It fetches its Dart dependencies automatically through `fetchDartDeps`, and (thr
|
|||
|
||||
If you are packaging a Flutter desktop application, use [`buildFlutterApplication`](#ssec-dart-flutter) instead.
|
||||
|
||||
`vendorHash`: is the hash of the output of the dependency fetcher derivation. To obtain it, simply set it to `lib.fakeHash` (or omit it) and run the build ([more details here](#sec-source-hashes)).
|
||||
`vendorHash`: is the hash of the output of the dependency fetcher derivation. To obtain it, set it to `lib.fakeHash` (or omit it) and run the build ([more details here](#sec-source-hashes)).
|
||||
|
||||
If the upstream source is missing a `pubspec.lock` file, you'll have to vendor one and specify it using `pubspecLockFile`. If it is needed, one will be generated for you and printed when attempting to build the derivation.
|
||||
|
||||
The `depsListFile` must always be provided when packaging in Nixpkgs. It will be generated and printed if the derivation is attempted to be built without one. Alternatively, `autoDepsList` may be set to `true` only when outside of Nixpkgs, as it relies on import-from-derivation.
|
||||
|
||||
The `dart` commands run can be overridden through `pubGetScript` and `dartCompileCommand`, you can also add flags using `dartCompileFlags` or `dartJitFlags`.
|
||||
|
||||
Dart supports multiple [outputs types](https://dart.dev/tools/dart-compile#types-of-output), you can choose between them using `dartOutputType` (defaults to `exe`). If you want to override the binaries path or the source path they come from, you can use `dartEntryPoints`. Outputs that require a runtime will automatically be wrapped with the relevant runtime (`dartaotruntime` for `aot-snapshot`, `dart run` for `jit-snapshot` and `kernel`, `node` for `js`), this can be overridden through `dartRuntimeCommand`.
|
||||
|
@ -31,6 +33,7 @@ buildDartApplication rec {
|
|||
};
|
||||
|
||||
pubspecLockFile = ./pubspec.lock;
|
||||
depsListFile = ./deps.json;
|
||||
vendorHash = "sha256-Atm7zfnDambN/BmmUf4BG0yUz/y6xWzf0reDw3Ad41s=";
|
||||
}
|
||||
```
|
||||
|
@ -39,9 +42,7 @@ buildDartApplication rec {
|
|||
|
||||
The function `buildFlutterApplication` builds Flutter applications.
|
||||
|
||||
The deps.json file must always be provided when packaging in Nixpkgs. It will be generated and printed if the derivation is attempted to be built without one. Alternatively, `autoDepsList` may be set to `true` when outside of Nixpkgs, as it relies on import-from-derivation.
|
||||
|
||||
A `pubspec.lock` file must be available. See the [Dart documentation](#ssec-dart-applications) for more details.
|
||||
See the [Dart documentation](#ssec-dart-applications) for more details on required files and arguments.
|
||||
|
||||
```nix
|
||||
{ flutter, fetchFromGitHub }:
|
||||
|
|
|
@ -323,7 +323,7 @@ $ nix-shell -p haskellPackages.dhall-nixpkgs nix-prefetch-git
|
|||
```
|
||||
|
||||
:::{.note}
|
||||
`nix-prefetch-git` has to be in `$PATH` for `dhall-to-nixpkgs` to work.
|
||||
`nix-prefetch-git` is added to the `nix-shell -p` invocation above, because it has to be in `$PATH` for `dhall-to-nixpkgs` to work.
|
||||
:::
|
||||
|
||||
The utility takes care of automatically detecting remote imports and converting
|
||||
|
|
|
@ -138,7 +138,9 @@ in buildDotnetModule rec {
|
|||
src = ./.;
|
||||
|
||||
projectFile = "src/project.sln";
|
||||
nugetDeps = ./deps.nix; # File generated with `nix-build -A package.passthru.fetch-deps`.
|
||||
# File generated with `nix-build -A package.passthru.fetch-deps`.
|
||||
# To run fetch-deps when this file does not yet exist, set nugetDeps to null
|
||||
nugetDeps = ./deps.nix;
|
||||
|
||||
projectReferences = [ referencedProject ]; # `referencedProject` must contain `nupkg` in the folder structure.
|
||||
|
||||
|
|
|
@ -2,168 +2,159 @@
|
|||
|
||||
[Emscripten](https://github.com/kripken/emscripten): An LLVM-to-JavaScript Compiler
|
||||
|
||||
This section of the manual covers how to use `emscripten` in nixpkgs.
|
||||
If you want to work with `emcc`, `emconfigure` and `emmake` as you are used to from Ubuntu and similar distributions,
|
||||
|
||||
Minimal requirements:
|
||||
|
||||
* nix
|
||||
* nixpkgs
|
||||
|
||||
Modes of use of `emscripten`:
|
||||
|
||||
* **Imperative usage** (on the command line):
|
||||
|
||||
If you want to work with `emcc`, `emconfigure` and `emmake` as you are used to from Ubuntu and similar distributions you can use these commands:
|
||||
|
||||
* `nix-env -f "<nixpkgs>" -iA emscripten`
|
||||
* `nix-shell -p emscripten`
|
||||
|
||||
* **Declarative usage**:
|
||||
|
||||
This mode is far more power full since this makes use of `nix` for dependency management of emscripten libraries and targets by using the `mkDerivation` which is implemented by `pkgs.emscriptenStdenv` and `pkgs.buildEmscriptenPackage`. The source for the packages is in `pkgs/top-level/emscripten-packages.nix` and the abstraction behind it in `pkgs/development/em-modules/generic/default.nix`. From the root of the nixpkgs repository:
|
||||
* build and install all packages:
|
||||
* `nix-env -iA emscriptenPackages`
|
||||
|
||||
* dev-shell for zlib implementation hacking:
|
||||
* `nix-shell -A emscriptenPackages.zlib`
|
||||
|
||||
## Imperative usage {#imperative-usage}
|
||||
```console
|
||||
nix-shell -p emscripten
|
||||
```
|
||||
|
||||
A few things to note:
|
||||
|
||||
* `export EMCC_DEBUG=2` is nice for debugging
|
||||
* `~/.emscripten`, the build artifact cache sometimes creates issues and needs to be removed from time to time
|
||||
* The build artifact cache in `~/.emscripten` sometimes creates issues and needs to be removed from time to time
|
||||
|
||||
## Declarative usage {#declarative-usage}
|
||||
## Examples {#declarative-usage}
|
||||
|
||||
Let's see two different examples from `pkgs/top-level/emscripten-packages.nix`:
|
||||
|
||||
* `pkgs.zlib.override`
|
||||
* `pkgs.buildEmscriptenPackage`
|
||||
|
||||
Both are interesting concepts.
|
||||
A special requirement of the `pkgs.buildEmscriptenPackage` is the `doCheck = true`.
|
||||
This means each Emscripten package requires that a [`checkPhase`](#ssec-check-phase) is implemented.
|
||||
|
||||
A special requirement of the `pkgs.buildEmscriptenPackage` is the `doCheck = true` is a default meaning that each emscriptenPackage requires a `checkPhase` implemented.
|
||||
* Use `export EMCC_DEBUG=2` from within a phase to get more detailed debug output what is going wrong.
|
||||
* The cache at `~/.emscripten` requires to set `HOME=$TMPDIR` in individual phases.
|
||||
This makes compilation slower but also more deterministic.
|
||||
|
||||
* Use `export EMCC_DEBUG=2` from within a emscriptenPackage's `phase` to get more detailed debug output what is going wrong.
|
||||
* ~/.emscripten cache is requiring us to set `HOME=$TMPDIR` in individual phases. This makes compilation slower but also makes it more deterministic.
|
||||
::: {.example #usage-1-pkgs.zlib.override}
|
||||
|
||||
### Usage 1: pkgs.zlib.override {#usage-1-pkgs.zlib.override}
|
||||
# Using `pkgs.zlib.override {}`
|
||||
|
||||
This example uses `zlib` from nixpkgs but instead of compiling **C** to **ELF** it compiles **C** to **JS** since we were using `pkgs.zlib.override` and changed stdenv to `pkgs.emscriptenStdenv`. A few adaptions and hacks were set in place to make it working. One advantage is that when `pkgs.zlib` is updated, it will automatically update this package as well. However, this can also be the downside...
|
||||
This example uses `zlib` from Nixpkgs, but instead of compiling **C** to **ELF** it compiles **C** to **JavaScript** since we were using `pkgs.zlib.override` and changed `stdenv` to `pkgs.emscriptenStdenv`.
|
||||
|
||||
See the `zlib` example:
|
||||
A few adaptions and hacks were put in place to make it work.
|
||||
One advantage is that when `pkgs.zlib` is updated, it will automatically update this package as well.
|
||||
|
||||
zlib = (pkgs.zlib.override {
|
||||
stdenv = pkgs.emscriptenStdenv;
|
||||
}).overrideAttrs
|
||||
(old: rec {
|
||||
buildInputs = old.buildInputs ++ [ pkg-config ];
|
||||
# we need to reset this setting!
|
||||
env = (old.env or { }) // { NIX_CFLAGS_COMPILE = ""; };
|
||||
configurePhase = ''
|
||||
# FIXME: Some tests require writing at $HOME
|
||||
HOME=$TMPDIR
|
||||
runHook preConfigure
|
||||
|
||||
#export EMCC_DEBUG=2
|
||||
emconfigure ./configure --prefix=$out --shared
|
||||
```nix
|
||||
(pkgs.zlib.override {
|
||||
stdenv = pkgs.emscriptenStdenv;
|
||||
}).overrideAttrs
|
||||
(old: rec {
|
||||
buildInputs = old.buildInputs ++ [ pkg-config ];
|
||||
# we need to reset this setting!
|
||||
env = (old.env or { }) // { NIX_CFLAGS_COMPILE = ""; };
|
||||
configurePhase = ''
|
||||
# FIXME: Some tests require writing at $HOME
|
||||
HOME=$TMPDIR
|
||||
runHook preConfigure
|
||||
|
||||
runHook postConfigure
|
||||
'';
|
||||
dontStrip = true;
|
||||
outputs = [ "out" ];
|
||||
buildPhase = ''
|
||||
emmake make
|
||||
'';
|
||||
installPhase = ''
|
||||
emmake make install
|
||||
'';
|
||||
checkPhase = ''
|
||||
echo "================= testing zlib using node ================="
|
||||
#export EMCC_DEBUG=2
|
||||
emconfigure ./configure --prefix=$out --shared
|
||||
|
||||
echo "Compiling a custom test"
|
||||
set -x
|
||||
emcc -O2 -s EMULATE_FUNCTION_POINTER_CASTS=1 test/example.c -DZ_SOLO \
|
||||
libz.so.${old.version} -I . -o example.js
|
||||
runHook postConfigure
|
||||
'';
|
||||
dontStrip = true;
|
||||
outputs = [ "out" ];
|
||||
buildPhase = ''
|
||||
emmake make
|
||||
'';
|
||||
installPhase = ''
|
||||
emmake make install
|
||||
'';
|
||||
checkPhase = ''
|
||||
echo "================= testing zlib using node ================="
|
||||
|
||||
echo "Using node to execute the test"
|
||||
${pkgs.nodejs}/bin/node ./example.js
|
||||
echo "Compiling a custom test"
|
||||
set -x
|
||||
emcc -O2 -s EMULATE_FUNCTION_POINTER_CASTS=1 test/example.c -DZ_SOLO \
|
||||
libz.so.${old.version} -I . -o example.js
|
||||
|
||||
set +x
|
||||
if [ $? -ne 0 ]; then
|
||||
echo "test failed for some reason"
|
||||
exit 1;
|
||||
else
|
||||
echo "it seems to work! very good."
|
||||
fi
|
||||
echo "================= /testing zlib using node ================="
|
||||
'';
|
||||
echo "Using node to execute the test"
|
||||
${pkgs.nodejs}/bin/node ./example.js
|
||||
|
||||
postPatch = pkgs.lib.optionalString pkgs.stdenv.isDarwin ''
|
||||
substituteInPlace configure \
|
||||
--replace '/usr/bin/libtool' 'ar' \
|
||||
--replace 'AR="libtool"' 'AR="ar"' \
|
||||
--replace 'ARFLAGS="-o"' 'ARFLAGS="-r"'
|
||||
'';
|
||||
});
|
||||
set +x
|
||||
if [ $? -ne 0 ]; then
|
||||
echo "test failed for some reason"
|
||||
exit 1;
|
||||
else
|
||||
echo "it seems to work! very good."
|
||||
fi
|
||||
echo "================= /testing zlib using node ================="
|
||||
'';
|
||||
|
||||
### Usage 2: pkgs.buildEmscriptenPackage {#usage-2-pkgs.buildemscriptenpackage}
|
||||
postPatch = pkgs.lib.optionalString pkgs.stdenv.isDarwin ''
|
||||
substituteInPlace configure \
|
||||
--replace '/usr/bin/libtool' 'ar' \
|
||||
--replace 'AR="libtool"' 'AR="ar"' \
|
||||
--replace 'ARFLAGS="-o"' 'ARFLAGS="-r"'
|
||||
'';
|
||||
})
|
||||
```
|
||||
|
||||
This `xmlmirror` example features a emscriptenPackage which is defined completely from this context and no `pkgs.zlib.override` is used.
|
||||
:::{.example #usage-2-pkgs.buildemscriptenpackage}
|
||||
|
||||
xmlmirror = pkgs.buildEmscriptenPackage rec {
|
||||
name = "xmlmirror";
|
||||
# Using `pkgs.buildEmscriptenPackage {}`
|
||||
|
||||
buildInputs = [ pkg-config autoconf automake libtool gnumake libxml2 nodejs openjdk json_c ];
|
||||
nativeBuildInputs = [ pkg-config zlib ];
|
||||
This `xmlmirror` example features an Emscripten package that is defined completely from this context and no `pkgs.zlib.override` is used.
|
||||
|
||||
src = pkgs.fetchgit {
|
||||
url = "https://gitlab.com/odfplugfest/xmlmirror.git";
|
||||
rev = "4fd7e86f7c9526b8f4c1733e5c8b45175860a8fd";
|
||||
hash = "sha256-i+QgY+5PYVg5pwhzcDnkfXAznBg3e8sWH2jZtixuWsk=";
|
||||
};
|
||||
```nix
|
||||
pkgs.buildEmscriptenPackage rec {
|
||||
name = "xmlmirror";
|
||||
|
||||
configurePhase = ''
|
||||
rm -f fastXmlLint.js*
|
||||
# a fix for ERROR:root:For asm.js, TOTAL_MEMORY must be a multiple of 16MB, was 234217728
|
||||
# https://gitlab.com/odfplugfest/xmlmirror/issues/8
|
||||
sed -e "s/TOTAL_MEMORY=234217728/TOTAL_MEMORY=268435456/g" -i Makefile.emEnv
|
||||
# https://github.com/kripken/emscripten/issues/6344
|
||||
# https://gitlab.com/odfplugfest/xmlmirror/issues/9
|
||||
sed -e "s/\$(JSONC_LDFLAGS) \$(ZLIB_LDFLAGS) \$(LIBXML20_LDFLAGS)/\$(JSONC_LDFLAGS) \$(LIBXML20_LDFLAGS) \$(ZLIB_LDFLAGS) /g" -i Makefile.emEnv
|
||||
# https://gitlab.com/odfplugfest/xmlmirror/issues/11
|
||||
sed -e "s/-o fastXmlLint.js/-s EXTRA_EXPORTED_RUNTIME_METHODS='[\"ccall\", \"cwrap\"]' -o fastXmlLint.js/g" -i Makefile.emEnv
|
||||
'';
|
||||
buildInputs = [ pkg-config autoconf automake libtool gnumake libxml2 nodejs openjdk json_c ];
|
||||
nativeBuildInputs = [ pkg-config zlib ];
|
||||
|
||||
buildPhase = ''
|
||||
HOME=$TMPDIR
|
||||
make -f Makefile.emEnv
|
||||
'';
|
||||
src = pkgs.fetchgit {
|
||||
url = "https://gitlab.com/odfplugfest/xmlmirror.git";
|
||||
rev = "4fd7e86f7c9526b8f4c1733e5c8b45175860a8fd";
|
||||
hash = "sha256-i+QgY+5PYVg5pwhzcDnkfXAznBg3e8sWH2jZtixuWsk=";
|
||||
};
|
||||
|
||||
outputs = [ "out" "doc" ];
|
||||
configurePhase = ''
|
||||
rm -f fastXmlLint.js*
|
||||
# a fix for ERROR:root:For asm.js, TOTAL_MEMORY must be a multiple of 16MB, was 234217728
|
||||
# https://gitlab.com/odfplugfest/xmlmirror/issues/8
|
||||
sed -e "s/TOTAL_MEMORY=234217728/TOTAL_MEMORY=268435456/g" -i Makefile.emEnv
|
||||
# https://github.com/kripken/emscripten/issues/6344
|
||||
# https://gitlab.com/odfplugfest/xmlmirror/issues/9
|
||||
sed -e "s/\$(JSONC_LDFLAGS) \$(ZLIB_LDFLAGS) \$(LIBXML20_LDFLAGS)/\$(JSONC_LDFLAGS) \$(LIBXML20_LDFLAGS) \$(ZLIB_LDFLAGS) /g" -i Makefile.emEnv
|
||||
# https://gitlab.com/odfplugfest/xmlmirror/issues/11
|
||||
sed -e "s/-o fastXmlLint.js/-s EXTRA_EXPORTED_RUNTIME_METHODS='[\"ccall\", \"cwrap\"]' -o fastXmlLint.js/g" -i Makefile.emEnv
|
||||
'';
|
||||
|
||||
installPhase = ''
|
||||
mkdir -p $out/share
|
||||
mkdir -p $doc/share/${name}
|
||||
buildPhase = ''
|
||||
HOME=$TMPDIR
|
||||
make -f Makefile.emEnv
|
||||
'';
|
||||
|
||||
cp Demo* $out/share
|
||||
cp -R codemirror-5.12 $out/share
|
||||
cp fastXmlLint.js* $out/share
|
||||
cp *.xsd $out/share
|
||||
cp *.js $out/share
|
||||
cp *.xhtml $out/share
|
||||
cp *.html $out/share
|
||||
cp *.json $out/share
|
||||
cp *.rng $out/share
|
||||
cp README.md $doc/share/${name}
|
||||
'';
|
||||
checkPhase = ''
|
||||
outputs = [ "out" "doc" ];
|
||||
|
||||
'';
|
||||
};
|
||||
installPhase = ''
|
||||
mkdir -p $out/share
|
||||
mkdir -p $doc/share/${name}
|
||||
|
||||
### Declarative debugging {#declarative-debugging}
|
||||
cp Demo* $out/share
|
||||
cp -R codemirror-5.12 $out/share
|
||||
cp fastXmlLint.js* $out/share
|
||||
cp *.xsd $out/share
|
||||
cp *.js $out/share
|
||||
cp *.xhtml $out/share
|
||||
cp *.html $out/share
|
||||
cp *.json $out/share
|
||||
cp *.rng $out/share
|
||||
cp README.md $doc/share/${name}
|
||||
'';
|
||||
checkPhase = ''
|
||||
|
||||
'';
|
||||
}
|
||||
```
|
||||
|
||||
:::
|
||||
|
||||
## Debugging {#declarative-debugging}
|
||||
|
||||
Use `nix-shell -I nixpkgs=/some/dir/nixpkgs -A emscriptenPackages.libz` and from there you can go trough the individual steps. This makes it easy to build a good `unit test` or list the files of the project.
|
||||
|
||||
|
@ -174,9 +165,3 @@ Use `nix-shell -I nixpkgs=/some/dir/nixpkgs -A emscriptenPackages.libz` and from
|
|||
5. `configurePhase`
|
||||
6. `buildPhase`
|
||||
7. ... happy hacking...
|
||||
|
||||
## Summary {#summary}
|
||||
|
||||
Using this toolchain makes it easy to leverage `nix` from NixOS, MacOSX or even Windows (WSL+ubuntu+nix). This toolchain is reproducible, behaves like the rest of the packages from nixpkgs and contains a set of well working examples to learn and adapt from.
|
||||
|
||||
If in trouble, ask the maintainers.
|
||||
|
|
|
@ -18,9 +18,9 @@ In the following is an example expression using `buildGoModule`, the following a
|
|||
|
||||
To avoid updating this field when dependencies change, run `go mod vendor` in your source repo and set `vendorHash = null;`
|
||||
|
||||
To obtain the actual hash, set `vendorHash = lib.fakeSha256;` and run the build ([more details here](#sec-source-hashes)).
|
||||
To obtain the actual hash, set `vendorHash = lib.fakeHash;` and run the build ([more details here](#sec-source-hashes)).
|
||||
- `proxyVendor`: Fetches (go mod download) and proxies the vendor directory. This is useful if your code depends on c code and go mod tidy does not include the needed sources to build or if any dependency has case-insensitive conflicts which will produce platform-dependent `vendorHash` checksums.
|
||||
- `modPostBuild`: Shell commands to run after the build of the goModules executes `go mod vendor`, and before calculating fixed output derivation's `vendorHash` (or `vendorSha256`). Note that if you change this attribute, you need to update `vendorHash` (or `vendorSha256`) attribute.
|
||||
- `modPostBuild`: Shell commands to run after the build of the goModules executes `go mod vendor`, and before calculating fixed output derivation's `vendorHash`. Note that if you change this attribute, you need to update `vendorHash` attribute.
|
||||
|
||||
```nix
|
||||
pet = buildGoModule rec {
|
||||
|
|
|
@ -177,7 +177,7 @@ exactly one version. Those versions need to satisfy all the version constraints
|
|||
given in the `.cabal` file of your package and all its dependencies.
|
||||
|
||||
The [Haskell builder in nixpkgs](#haskell-mkderivation) does no such thing.
|
||||
It will simply take as input packages with names off the desired dependencies
|
||||
It will take as input packages with names off the desired dependencies
|
||||
and just check whether they fulfill the version bounds and fail if they don’t
|
||||
(by default, see `jailbreak` to circumvent this).
|
||||
|
||||
|
@ -780,7 +780,7 @@ there instead.
|
|||
The top level `pkgs.haskell-language-server` attribute is just a convenience
|
||||
wrapper to make it possible to install HLS for multiple GHC versions at the
|
||||
same time. If you know, that you only use one GHC version, e.g., in a project
|
||||
specific `nix-shell` you can simply use
|
||||
specific `nix-shell` you can use
|
||||
`pkgs.haskellPackages.haskell-language-server` or
|
||||
`pkgs.haskell.packages.*.haskell-language-server` from the package set you use.
|
||||
|
||||
|
|
|
@ -13,7 +13,7 @@ If you find you are lacking inspiration for packing javascript applications, the
|
|||
### Github {#javascript-finding-examples-github}
|
||||
|
||||
- Searching Nix files for `mkYarnPackage`: <https://github.com/search?q=mkYarnPackage+language%3ANix&type=code>
|
||||
- Searching just `flake.nix` files for `mkYarnPackage`: <https://github.com/search?q=mkYarnPackage+filename%3Aflake.nix&type=code>
|
||||
- Searching just `flake.nix` files for `mkYarnPackage`: <https://github.com/search?q=mkYarnPackage+path%3A**%2Fflake.nix&type=code>
|
||||
|
||||
### Gitlab {#javascript-finding-examples-gitlab}
|
||||
|
||||
|
@ -209,6 +209,8 @@ In the default `installPhase` set by `buildNpmPackage`, it uses `npm pack --json
|
|||
* `npmPackFlags`: Flags to pass to `npm pack`.
|
||||
* `npmPruneFlags`: Flags to pass to `npm prune`. Defaults to the value of `npmInstallFlags`.
|
||||
* `makeWrapperArgs`: Flags to pass to `makeWrapper`, added to executable calling the generated `.js` with `node` as an interpreter. These scripts are defined in `package.json`.
|
||||
* `nodejs`: The `nodejs` package to build against, using the corresponding `npm` shipped with that version of `node`. Defaults to `pkgs.nodejs`.
|
||||
* `npmDeps`: The dependencies used to build the npm package. Especially useful to not have to recompute workspace depedencies.
|
||||
|
||||
#### prefetch-npm-deps {#javascript-buildNpmPackage-prefetch-npm-deps}
|
||||
|
||||
|
|
|
@ -66,7 +66,7 @@ buildPhase = ''
|
|||
To save some work of writing Nix expressions, there is a script that imports all
|
||||
the packages distributed by Quicklisp into `imported.nix`. This works by parsing
|
||||
its `releases.txt` and `systems.txt` files, which are published every couple of
|
||||
months on [quicklisp.org](http://beta.quicklisp.org/dist/quicklisp.txt).
|
||||
months on [quicklisp.org](https://beta.quicklisp.org/dist/quicklisp.txt).
|
||||
|
||||
The import process is implemented in the `import` directory as Common Lisp
|
||||
code in the `org.lispbuilds.nix` ASDF system. To run the script, one can
|
||||
|
@ -268,7 +268,7 @@ getting an environment variable for `ext:getenv`. This will load the
|
|||
|
||||
### Loading systems {#lisp-loading-systems}
|
||||
|
||||
There, you can simply use `asdf:load-system`. This works by setting the right
|
||||
There, you can use `asdf:load-system`. This works by setting the right
|
||||
values for the `CL_SOURCE_REGISTRY`/`ASDF_OUTPUT_TRANSLATIONS` environment
|
||||
variables, so that systems are found in the Nix store and pre-compiled FASLs are
|
||||
loaded.
|
||||
|
|
|
@ -134,11 +134,11 @@ The site proposes two types of packages, the `rockspec` and the `src.rock`
|
|||
|
||||
Luarocks-based packages are generated in [pkgs/development/lua-modules/generated-packages.nix](https://github.com/NixOS/nixpkgs/tree/master/pkgs/development/lua-modules/generated-packages.nix) from
|
||||
the whitelist maintainers/scripts/luarocks-packages.csv and updated by running
|
||||
the script
|
||||
[maintainers/scripts/update-luarocks-packages](https://github.com/NixOS/nixpkgs/tree/master/maintainers/scripts/update-luarocks-packages):
|
||||
the package `luarocks-packages-updater`:
|
||||
|
||||
```sh
|
||||
./maintainers/scripts/update-luarocks-packages update
|
||||
|
||||
nix-shell -p luarocks-packages-updater --run luarocks-packages-updater
|
||||
```
|
||||
|
||||
[luarocks2nix](https://github.com/nix-community/luarocks) is a tool capable of generating nix derivations from both rockspec and src.rock (and favors the src.rock).
|
||||
|
|
|
@ -53,7 +53,7 @@ After setting `maven.buildMavenPackage`, we then do standard Java `.jar` install
|
|||
|
||||
Maven defines default versions for its core plugins, e.g. `maven-compiler-plugin`. If your project does not override these versions, an upgrade of Maven will change the version of the used plugins, and therefore the derivation and hash.
|
||||
|
||||
When `maven` is upgraded, `mvnHash` for the derivation must be updated as well: otherwise, the project will simply be built on the derivation of old plugins, and fail because the requested plugins are missing.
|
||||
When `maven` is upgraded, `mvnHash` for the derivation must be updated as well: otherwise, the project will be built on the derivation of old plugins, and fail because the requested plugins are missing.
|
||||
|
||||
This clearly prevents automatic upgrades of Maven: a manual effort must be made throughout nixpkgs by any maintainer wishing to push the upgrades.
|
||||
|
||||
|
|
|
@ -58,7 +58,7 @@ php.withExtensions ({ enabled, all }:
|
|||
++ [ all.imagick ])
|
||||
```
|
||||
|
||||
To build your list of extensions from the ground up, you can simply
|
||||
To build your list of extensions from the ground up, you can
|
||||
ignore `enabled`:
|
||||
|
||||
```nix
|
||||
|
@ -140,7 +140,7 @@ Example of building `composer` with additional extensions:
|
|||
### Overriding PHP packages {#ssec-php-user-guide-overriding-packages}
|
||||
|
||||
`php-packages.nix` form a scope, allowing us to override the packages defined
|
||||
within. For example, to apply a patch to a `mysqlnd` extension, you can simply
|
||||
within. For example, to apply a patch to a `mysqlnd` extension, you can
|
||||
pass an overlay-style function to `php`’s `packageOverrides` argument:
|
||||
|
||||
```nix
|
||||
|
@ -191,7 +191,7 @@ using the `bin` attribute in `composer.json`, these binaries will be
|
|||
automatically linked and made accessible in the derivation. In this context,
|
||||
"binaries" refer to PHP scripts that are intended to be executable.
|
||||
|
||||
To use the helper effectively, simply add the `vendorHash` attribute, which
|
||||
To use the helper effectively, add the `vendorHash` attribute, which
|
||||
enables the wrapper to handle the heavy lifting.
|
||||
|
||||
Internally, the helper operates in three stages:
|
||||
|
|
|
@ -9,9 +9,10 @@
|
|||
| python27 | python2, python | CPython 2.7 |
|
||||
| python38 | | CPython 3.8 |
|
||||
| python39 | | CPython 3.9 |
|
||||
| python310 | python3 | CPython 3.10 |
|
||||
| python311 | | CPython 3.11 |
|
||||
| python310 | | CPython 3.10 |
|
||||
| python311 | python3 | CPython 3.11 |
|
||||
| python312 | | CPython 3.12 |
|
||||
| python313 | | CPython 3.13 |
|
||||
| pypy27 | pypy2, pypy | PyPy2.7 |
|
||||
| pypy39 | pypy3 | PyPy 3.9 |
|
||||
|
||||
|
@ -63,12 +64,14 @@ sets are
|
|||
* `pkgs.python39Packages`
|
||||
* `pkgs.python310Packages`
|
||||
* `pkgs.python311Packages`
|
||||
* `pkgs.python312Packages`
|
||||
* `pkgs.python313Packages`
|
||||
* `pkgs.pypyPackages`
|
||||
|
||||
and the aliases
|
||||
|
||||
* `pkgs.python2Packages` pointing to `pkgs.python27Packages`
|
||||
* `pkgs.python3Packages` pointing to `pkgs.python310Packages`
|
||||
* `pkgs.python3Packages` pointing to `pkgs.python311Packages`
|
||||
* `pkgs.pythonPackages` pointing to `pkgs.python2Packages`
|
||||
|
||||
#### `buildPythonPackage` function {#buildpythonpackage-function}
|
||||
|
@ -141,7 +144,7 @@ buildPythonPackage rec {
|
|||
|
||||
The `buildPythonPackage` mainly does four things:
|
||||
|
||||
* In the [`buildPhase`](#build-phase), it calls `${python.pythonForBuild.interpreter} setup.py bdist_wheel` to
|
||||
* In the [`buildPhase`](#build-phase), it calls `${python.pythonOnBuildForHost.interpreter} setup.py bdist_wheel` to
|
||||
build a wheel binary zipfile.
|
||||
* In the [`installPhase`](#ssec-install-phase), it installs the wheel file using `pip install *.whl`.
|
||||
* In the [`postFixup`](#var-stdenv-postFixup) phase, the `wrapPythonPrograms` bash function is called to
|
||||
|
@ -261,7 +264,7 @@ python3MyBlas = pkgs.python3.override {
|
|||
```
|
||||
|
||||
This is particularly useful for numpy and scipy users who want to gain speed with other blas implementations.
|
||||
Note that using simply `scipy = super.scipy.override { blas = super.pkgs.mkl; };` will likely result in
|
||||
Note that using `scipy = super.scipy.override { blas = super.pkgs.mkl; };` will likely result in
|
||||
compilation issues, because scipy dependencies need to use the same blas implementation as well.
|
||||
|
||||
#### `buildPythonApplication` function {#buildpythonapplication-function}
|
||||
|
@ -277,16 +280,16 @@ the packages with the version of the interpreter. Because this is irrelevant for
|
|||
applications, the prefix is omitted.
|
||||
|
||||
When packaging a Python application with [`buildPythonApplication`](#buildpythonapplication-function), it should be
|
||||
called with `callPackage` and passed `python` or `pythonPackages` (possibly
|
||||
called with `callPackage` and passed `python3` or `python3Packages` (possibly
|
||||
specifying an interpreter version), like this:
|
||||
|
||||
```nix
|
||||
{ lib
|
||||
, python3
|
||||
, python3Packages
|
||||
, fetchPypi
|
||||
}:
|
||||
|
||||
python3.pkgs.buildPythonApplication rec {
|
||||
python3Packages.buildPythonApplication rec {
|
||||
pname = "luigi";
|
||||
version = "2.7.9";
|
||||
pyproject = true;
|
||||
|
@ -297,13 +300,13 @@ python3.pkgs.buildPythonApplication rec {
|
|||
};
|
||||
|
||||
nativeBuildInputs = [
|
||||
python3.pkgs.setuptools
|
||||
python3.pkgs.wheel
|
||||
python3Packages.setuptools
|
||||
python3Packages.wheel
|
||||
];
|
||||
|
||||
propagatedBuildInputs = with python3.pkgs; [
|
||||
tornado
|
||||
python-daemon
|
||||
propagatedBuildInputs = [
|
||||
python3Packages.tornado
|
||||
python3Packages.python-daemon
|
||||
];
|
||||
|
||||
meta = with lib; {
|
||||
|
@ -319,7 +322,7 @@ luigi = callPackage ../applications/networking/cluster/luigi { };
|
|||
```
|
||||
|
||||
Since the package is an application, a consumer doesn't need to care about
|
||||
Python versions or modules, which is why they don't go in `pythonPackages`.
|
||||
Python versions or modules, which is why they don't go in `python3Packages`.
|
||||
|
||||
#### `toPythonApplication` function {#topythonapplication-function}
|
||||
|
||||
|
@ -335,7 +338,7 @@ the attribute in `python-packages.nix`, and the `toPythonApplication` shall be
|
|||
applied to the reference:
|
||||
|
||||
```nix
|
||||
youtube-dl = with pythonPackages; toPythonApplication youtube-dl;
|
||||
youtube-dl = with python3Packages; toPythonApplication youtube-dl;
|
||||
```
|
||||
|
||||
#### `toPythonModule` function {#topythonmodule-function}
|
||||
|
@ -364,8 +367,8 @@ Saving the following as `default.nix`
|
|||
```nix
|
||||
with import <nixpkgs> {};
|
||||
|
||||
python.buildEnv.override {
|
||||
extraLibs = [ pythonPackages.pyramid ];
|
||||
python3.buildEnv.override {
|
||||
extraLibs = [ python3Packages.pyramid ];
|
||||
ignoreCollisions = true;
|
||||
}
|
||||
```
|
||||
|
@ -430,7 +433,7 @@ python3.withPackages (ps: [ ps.pyramid ])
|
|||
|
||||
Now, `ps` is set to `python3Packages`, matching the version of the interpreter.
|
||||
|
||||
As [`python.withPackages`](#python.withpackages-function) simply uses [`python.buildEnv`](#python.buildenv-function) under the hood, it also
|
||||
As [`python.withPackages`](#python.withpackages-function) uses [`python.buildEnv`](#python.buildenv-function) under the hood, it also
|
||||
supports the `env` attribute. The `shell.nix` file from the previous section can
|
||||
thus be also written like this:
|
||||
|
||||
|
@ -495,9 +498,9 @@ Given a `default.nix`:
|
|||
```nix
|
||||
with import <nixpkgs> {};
|
||||
|
||||
pythonPackages.buildPythonPackage {
|
||||
python3Packages.buildPythonPackage {
|
||||
name = "myproject";
|
||||
buildInputs = with pythonPackages; [ pyramid ];
|
||||
buildInputs = with python3Packages; [ pyramid ];
|
||||
|
||||
src = ./.;
|
||||
}
|
||||
|
@ -509,7 +512,7 @@ the package would be built with `nix-build`.
|
|||
Shortcut to setup environments with C headers/libraries and Python packages:
|
||||
|
||||
```shell
|
||||
nix-shell -p pythonPackages.pyramid zlib libjpeg git
|
||||
nix-shell -p python3Packages.pyramid zlib libjpeg git
|
||||
```
|
||||
|
||||
::: {.note}
|
||||
|
@ -524,7 +527,7 @@ There is a boolean value `lib.inNixShell` set to `true` if nix-shell is invoked.
|
|||
|
||||
Several versions of the Python interpreter are available on Nix, as well as a
|
||||
high amount of packages. The attribute `python3` refers to the default
|
||||
interpreter, which is currently CPython 3.10. The attribute `python` refers to
|
||||
interpreter, which is currently CPython 3.11. The attribute `python` refers to
|
||||
CPython 2.7 for backwards-compatibility. It is also possible to refer to
|
||||
specific versions, e.g. `python311` refers to CPython 3.11, and `pypy` refers to
|
||||
the default PyPy interpreter.
|
||||
|
@ -542,7 +545,7 @@ however, are in separate sets, with one set per interpreter version.
|
|||
The interpreters have several common attributes. One of these attributes is
|
||||
`pkgs`, which is a package set of Python libraries for this specific
|
||||
interpreter. E.g., the `toolz` package corresponding to the default interpreter
|
||||
is `python.pkgs.toolz`, and the CPython 3.11 version is `python311.pkgs.toolz`.
|
||||
is `python3.pkgs.toolz`, and the CPython 3.11 version is `python311.pkgs.toolz`.
|
||||
The main package set contains aliases to these package sets, e.g.
|
||||
`pythonPackages` refers to `python.pkgs` and `python311Packages` to
|
||||
`python311.pkgs`.
|
||||
|
@ -679,7 +682,7 @@ b = np.array([3,4])
|
|||
print(f"The dot product of {a} and {b} is: {np.dot(a, b)}")
|
||||
```
|
||||
|
||||
Then we simply execute it, without requiring any environment setup at all!
|
||||
Then we execute it, without requiring any environment setup at all!
|
||||
|
||||
```sh
|
||||
$ ./foo.py
|
||||
|
@ -1681,7 +1684,7 @@ of such package using the feature is `pkgs/tools/X11/xpra/default.nix`.
|
|||
As workaround install it as an extra `preInstall` step:
|
||||
|
||||
```shell
|
||||
${python.pythonForBuild.interpreter} setup.py install_data --install-dir=$out --root=$out
|
||||
${python.pythonOnBuildForHost.interpreter} setup.py install_data --install-dir=$out --root=$out
|
||||
sed -i '/ = data\_files/d' setup.py
|
||||
```
|
||||
|
||||
|
@ -1710,7 +1713,7 @@ This is an example of a `default.nix` for a `nix-shell`, which allows to consume
|
|||
a virtual environment created by `venv`, and install Python modules through
|
||||
`pip` the traditional way.
|
||||
|
||||
Create this `default.nix` file, together with a `requirements.txt` and simply
|
||||
Create this `default.nix` file, together with a `requirements.txt` and
|
||||
execute `nix-shell`.
|
||||
|
||||
```nix
|
||||
|
@ -1834,7 +1837,7 @@ If you need to change a package's attribute(s) from `configuration.nix` you coul
|
|||
};
|
||||
```
|
||||
|
||||
`pythonPackages.twisted` is now globally overridden.
|
||||
`python3Packages.twisted` is now globally overridden.
|
||||
All packages and also all NixOS services that reference `twisted`
|
||||
(such as `services.buildbot-worker`) now use the new definition.
|
||||
Note that `python-super` refers to the old package set and `python-self`
|
||||
|
@ -1844,7 +1847,7 @@ To modify only a Python package set instead of a whole Python derivation, use
|
|||
this snippet:
|
||||
|
||||
```nix
|
||||
myPythonPackages = pythonPackages.override {
|
||||
myPythonPackages = python3Packages.override {
|
||||
overrides = self: super: {
|
||||
twisted = ...;
|
||||
};
|
||||
|
@ -2024,7 +2027,9 @@ The following rules are desired to be respected:
|
|||
disabled individually. Try to avoid disabling the tests altogether. In any
|
||||
case, when you disable tests, leave a comment explaining why.
|
||||
* Commit names of Python libraries should reflect that they are Python
|
||||
libraries, so write for example `pythonPackages.numpy: 1.11 -> 1.12`.
|
||||
libraries, so write for example `python311Packages.numpy: 1.11 -> 1.12`.
|
||||
It is highly recommended to specify the current default version to enable
|
||||
automatic build by ofborg.
|
||||
* Attribute names in `python-packages.nix` as well as `pname`s should match the
|
||||
library's name on PyPI, but be normalized according to [PEP
|
||||
0503](https://www.python.org/dev/peps/pep-0503/#normalized-names). This means
|
||||
|
|
|
@ -94,7 +94,7 @@ $ bundle lock
|
|||
$ bundix
|
||||
```
|
||||
|
||||
If you already have a `Gemfile.lock`, you can simply run `bundix` and it will work the same.
|
||||
If you already have a `Gemfile.lock`, you can run `bundix` and it will work the same.
|
||||
|
||||
To update the gems in your `Gemfile.lock`, you may use the `bundix -l` flag, which will create a new `Gemfile.lock` in case the `Gemfile` has a more recent time of modification.
|
||||
|
||||
|
@ -251,7 +251,7 @@ source 'https://rubygems.org' do
|
|||
end
|
||||
```
|
||||
|
||||
If you want to package a specific version, you can use the standard Gemfile syntax for that, e.g. `gem 'mdl', '0.5.0'`, but if you want the latest stable version anyway, it's easier to update by simply running the `bundle lock` and `bundix` steps again.
|
||||
If you want to package a specific version, you can use the standard Gemfile syntax for that, e.g. `gem 'mdl', '0.5.0'`, but if you want the latest stable version anyway, it's easier to update by running the `bundle lock` and `bundix` steps again.
|
||||
|
||||
Now you can also make a `default.nix` that looks like this:
|
||||
|
||||
|
|
|
@ -817,7 +817,7 @@ $ cargo test
|
|||
## Using community maintained Rust toolchains {#using-community-maintained-rust-toolchains}
|
||||
|
||||
::: {.note}
|
||||
Note: The following projects cannot be used within nixpkgs since [IFD](#ssec-import-from-derivation) is disallowed.
|
||||
The following projects cannot be used within Nixpkgs since [Import From Derivation](https://nixos.org/manual/nix/unstable/language/import-from-derivation) (IFD) is disallowed in Nixpkgs.
|
||||
To package things that require Rust nightly, `RUSTC_BOOTSTRAP = true;` can sometimes be used as a hack.
|
||||
:::
|
||||
|
||||
|
@ -939,3 +939,68 @@ Fenix also has examples with `buildRustPackage`,
|
|||
[crane](https://github.com/ipetkov/crane),
|
||||
[naersk](https://github.com/nix-community/naersk),
|
||||
and cross compilation in its [Examples](https://github.com/nix-community/fenix#examples) section.
|
||||
|
||||
## Using `git bisect` on the Rust compiler {#using-git-bisect-on-the-rust-compiler}
|
||||
|
||||
Sometimes an upgrade of the Rust compiler (`rustc`) will break a
|
||||
downstream package. In these situations, being able to `git bisect`
|
||||
the `rustc` version history to find the offending commit is quite
|
||||
useful. Nixpkgs makes it easy to do this.
|
||||
|
||||
First, roll back your nixpkgs to a commit in which its `rustc` used
|
||||
*the most recent one which doesn't have the problem.* You'll need
|
||||
to do this because of `rustc`'s extremely aggressive
|
||||
version-pinning.
|
||||
|
||||
Next, add the following overlay, updating the Rust version to the
|
||||
one in your rolled-back nixpkgs, and replacing `/git/scratch/rust`
|
||||
with the path into which you have `git clone`d the `rustc` git
|
||||
repository:
|
||||
|
||||
```nix
|
||||
(final: prev: /*lib.optionalAttrs prev.stdenv.targetPlatform.isAarch64*/ {
|
||||
rust_1_72 =
|
||||
lib.updateManyAttrsByPath [{
|
||||
path = [ "packages" "stable" ];
|
||||
update = old: old.overrideScope(final: prev: {
|
||||
rustc = prev.rustc.overrideAttrs (_: {
|
||||
src = lib.cleanSource /git/scratch/rust;
|
||||
# do *not* put passthru.isReleaseTarball=true here
|
||||
});
|
||||
});
|
||||
}]
|
||||
prev.rust_1_72;
|
||||
})
|
||||
```
|
||||
|
||||
If the problem you're troubleshooting only manifests when
|
||||
cross-compiling you can uncomment the `lib.optionalAttrs` in the
|
||||
example above, and replace `isAarch64` with the target that is
|
||||
having problems. This will speed up your bisect quite a bit, since
|
||||
the host compiler won't need to be rebuilt.
|
||||
|
||||
Now, you can start a `git bisect` in the directory where you checked
|
||||
out the `rustc` source code. It is recommended to select the
|
||||
endpoint commits by searching backwards from `origin/master` for the
|
||||
*commits which added the release notes for the versions in
|
||||
question.* If you set the endpoints to commits on the release
|
||||
branches (i.e. the release tags), git-bisect will often get confused
|
||||
by the complex merge-commit structures it will need to traverse.
|
||||
|
||||
The command loop you'll want to use for bisecting looks like this:
|
||||
|
||||
```bash
|
||||
git bisect {good,bad} # depending on result of last build
|
||||
git submodule update --init
|
||||
CARGO_NET_OFFLINE=false cargo vendor \
|
||||
--sync ./src/tools/cargo/Cargo.toml \
|
||||
--sync ./src/tools/rust-analyzer/Cargo.toml \
|
||||
--sync ./compiler/rustc_codegen_cranelift/Cargo.toml \
|
||||
--sync ./src/bootstrap/Cargo.toml
|
||||
nix-build $NIXPKGS -A package-broken-by-rust-changes
|
||||
```
|
||||
|
||||
The `git submodule update --init` and `cargo vendor` commands above
|
||||
require network access, so they can't be performed from within the
|
||||
`rustc` derivation, unfortunately.
|
||||
|
||||
|
|
|
@ -32,7 +32,7 @@ look for the following directories:
|
|||
(If not targeting macOS, replace `macosx` with the Xcode platform name.)
|
||||
- On other platforms: `lib/swift/linux/x86_64`
|
||||
(Where `linux` and `x86_64` are from lowercase `uname -sm`.)
|
||||
- For convenience, Nixpkgs also adds simply `lib/swift` to the search path.
|
||||
- For convenience, Nixpkgs also adds `lib/swift` to the search path.
|
||||
This can save a bit of work packaging Swift modules, because many Nix builds
|
||||
will produce output for just one target any way.
|
||||
|
||||
|
@ -123,7 +123,7 @@ swiftpmFlags = [ "--disable-dead-strip" ];
|
|||
|
||||
The default `buildPhase` already passes `-j` for parallel building.
|
||||
|
||||
If these two customization options are insufficient, simply provide your own
|
||||
If these two customization options are insufficient, provide your own
|
||||
`buildPhase` that invokes `swift build`.
|
||||
|
||||
### Running tests {#ssec-swiftpm-running-tests}
|
||||
|
|
|
@ -2,6 +2,46 @@
|
|||
|
||||
Since release 15.09 there is a new TeX Live packaging that lives entirely under attribute `texlive`.
|
||||
|
||||
## User's guide (experimental new interface) {#sec-language-texlive-user-guide-experimental}
|
||||
|
||||
Release 23.11 ships with a new interface that will eventually replace `texlive.combine`.
|
||||
|
||||
- For basic usage, use some of the prebuilt environments available at the top level, such as `texliveBasic`, `texliveSmall`. For the full list of prebuilt environments, inspect `texlive.schemes`.
|
||||
|
||||
- Packages cannot be used directly but must be assembled in an environment. To create or add packages to an environment, use
|
||||
```nix
|
||||
texliveSmall.withPackages (ps: with ps; [ collection-langkorean algorithms cm-super ])
|
||||
```
|
||||
The function `withPackages` can be called multiple times to add more packages.
|
||||
|
||||
- **Note.** Within Nixpkgs, packages should only use prebuilt environments as inputs, such as `texliveSmall` or `texliveInfraOnly`, and should not depend directly on `texlive`. Further dependencies should be added by calling `withPackages`. This is to ensure that there is a consistent and simple way to override the inputs.
|
||||
|
||||
- `texlive.withPackages` uses the same logic as `buildEnv`. Only parts of a package are installed in an environment: its 'runtime' files (`tex` output), binaries (`out` output), and support files (`tlpkg` output). Moreover, man and info pages are assembled into separate `man` and `info` outputs. To add only the TeX files of a package, or its documentation (`texdoc` output), just specify the outputs:
|
||||
```nix
|
||||
texlive.withPackages (ps: with ps; [
|
||||
texdoc # recommended package to navigate the documentation
|
||||
perlPackages.LaTeXML.tex # tex files of LaTeXML, omit binaries
|
||||
cm-super
|
||||
cm-super.texdoc # documentation of cm-super
|
||||
])
|
||||
```
|
||||
|
||||
- All packages distributed by TeX Live, which contains most of CTAN, are available and can be found under `texlive.pkgs`:
|
||||
```ShellSession
|
||||
$ nix repl
|
||||
nix-repl> :l <nixpkgs>
|
||||
nix-repl> texlive.pkgs.[TAB]
|
||||
```
|
||||
Note that the packages in `texlive.pkgs` are only provided for search purposes and must not be used directly.
|
||||
|
||||
- **Experimental and subject to change without notice:** to add the documentation for all packages in the environment, use
|
||||
```nix
|
||||
texliveSmall.__overrideTeXConfig { withDocs = true; }
|
||||
```
|
||||
This can be applied before or after calling `withPackages`.
|
||||
|
||||
The function currently support the parameters `withDocs`, `withSources`, and `requireTeXPackages`.
|
||||
|
||||
## User's guide {#sec-language-texlive-user-guide}
|
||||
|
||||
- For basic usage just pull `texlive.combined.scheme-basic` for an environment with basic LaTeX support.
|
||||
|
@ -38,6 +78,24 @@ Since release 15.09 there is a new TeX Live packaging that lives entirely under
|
|||
|
||||
- Note that the wrapper assumes that the result has a chance to be useful. For example, the core executables should be present, as well as some core data files. The supported way of ensuring this is by including some scheme, for example `scheme-basic`, into the combination.
|
||||
|
||||
- TeX Live packages are also available under `texlive.pkgs` as derivations with outputs `out`, `tex`, `texdoc`, `texsource`, `tlpkg`, `man`, `info`. They cannot be installed outside of `texlive.combine` but are available for other uses. To repackage a font, for instance, use
|
||||
|
||||
```nix
|
||||
stdenvNoCC.mkDerivation rec {
|
||||
src = texlive.pkgs.iwona;
|
||||
|
||||
inherit (src) pname version;
|
||||
|
||||
installPhase = ''
|
||||
runHook preInstall
|
||||
install -Dm644 fonts/opentype/nowacki/iwona/*.otf -t $out/share/fonts/opentype
|
||||
runHook postInstall
|
||||
'';
|
||||
}
|
||||
```
|
||||
|
||||
See `biber`, `iwona` for complete examples.
|
||||
|
||||
## Custom packages {#sec-language-texlive-custom-packages}
|
||||
|
||||
You may find that you need to use an external TeX package. A derivation for such package has to provide the contents of the "texmf" directory in its output and provide the appropriate `tlType` attribute (one of `"run"`, `"bin"`, `"doc"`, `"source"`). Dependencies on other TeX packages can be listed in the attribute `tlDeps`.
|
||||
|
|
2
third_party/nixpkgs/doc/manual.md.in
vendored
2
third_party/nixpkgs/doc/manual.md.in
vendored
|
@ -9,7 +9,7 @@ preface.chapter.md
|
|||
using-nixpkgs.md
|
||||
lib.md
|
||||
stdenv.md
|
||||
builders.md
|
||||
build-helpers.md
|
||||
development.md
|
||||
contributing.md
|
||||
```
|
||||
|
|
|
@ -1,10 +1,10 @@
|
|||
# darwin.linux-builder {#sec-darwin-builder}
|
||||
|
||||
`darwin.linux-builder` provides a way to bootstrap a Linux builder on a macOS machine.
|
||||
`darwin.linux-builder` provides a way to bootstrap a Linux remote builder on a macOS machine.
|
||||
|
||||
This requires macOS version 12.4 or later.
|
||||
|
||||
The builder runs on host port 31022 by default.
|
||||
The remote builder runs on host port 31022 by default.
|
||||
You can change it by overriding `virtualisation.darwin-builder.hostPort`.
|
||||
See the [example](#sec-darwin-builder-example-flake).
|
||||
|
||||
|
@ -15,7 +15,7 @@ words, your `/etc/nix/nix.conf` should have something like:
|
|||
extra-trusted-users = <your username goes here>
|
||||
```
|
||||
|
||||
To launch the builder, run the following flake:
|
||||
To launch the remote builder, run the following flake:
|
||||
|
||||
```ShellSession
|
||||
$ nix run nixpkgs#darwin.linux-builder
|
||||
|
@ -57,7 +57,7 @@ builders = ssh-ng://builder@linux-builder ${ARCH}-linux /etc/nix/builder_ed25519
|
|||
builders-use-substitutes = true
|
||||
```
|
||||
|
||||
To allow Nix to connect to a builder not running on port 22, you will also need to create a new file at `/etc/ssh/ssh_config.d/100-linux-builder.conf`:
|
||||
To allow Nix to connect to a remote builder not running on port 22, you will also need to create a new file at `/etc/ssh/ssh_config.d/100-linux-builder.conf`:
|
||||
|
||||
```
|
||||
Host linux-builder
|
||||
|
@ -130,11 +130,11 @@ $ sudo launchctl kickstart -k system/org.nixos.nix-daemon
|
|||
}
|
||||
```
|
||||
|
||||
## Reconfiguring the builder {#sec-darwin-builder-reconfiguring}
|
||||
## Reconfiguring the remote builder {#sec-darwin-builder-reconfiguring}
|
||||
|
||||
Initially you should not change the builder configuration else you will not be
|
||||
able to use the binary cache. However, after you have the builder running locally
|
||||
you may use it to build a modified builder with additional storage or memory.
|
||||
Initially you should not change the remote builder configuration else you will not be
|
||||
able to use the binary cache. However, after you have the remote builder running locally
|
||||
you may use it to build a modified remote builder with additional storage or memory.
|
||||
|
||||
To do this, you just need to set the `virtualisation.darwin-builder.*` parameters as
|
||||
in the example below and rebuild.
|
||||
|
@ -157,3 +157,17 @@ in the example below and rebuild.
|
|||
You may make any other changes to your VM in this attribute set. For example,
|
||||
you could enable Docker or X11 forwarding to your Darwin host.
|
||||
|
||||
## Troubleshooting the generated configuration {#sec-darwin-builder-troubleshoot}
|
||||
|
||||
The `linux-builder` package exposes the attributes `nixosConfig` and `nixosOptions` that allow you to inspect the generated NixOS configuration in the `nix repl`. For example:
|
||||
|
||||
```
|
||||
$ nix repl --file ~/src/nixpkgs --argstr system aarch64-darwin
|
||||
|
||||
nix-repl> darwin.linux-builder.nixosConfig.nix.package
|
||||
«derivation /nix/store/...-nix-2.17.0.drv»
|
||||
|
||||
nix-repl> :p darwin.linux-builder.nixosOptions.virtualisation.memorySize.definitionsWithLocations
|
||||
[ { file = "/home/user/src/nixpkgs/nixos/modules/profiles/macos-builder.nix"; value = 3072; } ]
|
||||
|
||||
```
|
|
@ -4,6 +4,7 @@ This chapter contains information about how to use and maintain the Nix expressi
|
|||
|
||||
```{=include=} sections
|
||||
citrix.section.md
|
||||
darwin-builder.section.md
|
||||
dlib.section.md
|
||||
eclipse.section.md
|
||||
elm.section.md
|
|
@ -11,7 +11,7 @@ Nix problems and constraints:
|
|||
- The `steam.sh` script in `$HOME` cannot be patched, as it is checked and rewritten by steam.
|
||||
- The steam binary cannot be patched, it's also checked.
|
||||
|
||||
The current approach to deploy Steam in NixOS is composing a FHS-compatible chroot environment, as documented [here](http://sandervanderburg.blogspot.nl/2013/09/composing-fhs-compatible-chroot.html). This allows us to have binaries in the expected paths without disrupting the system, and to avoid patching them to work in a non FHS environment.
|
||||
The current approach to deploy Steam in NixOS is composing a FHS-compatible chroot environment, as documented [here](https://sandervanderburg.blogspot.com/2013/09/composing-fhs-compatible-chroot.html). This allows us to have binaries in the expected paths without disrupting the system, and to avoid patching them to work in a non FHS environment.
|
||||
|
||||
## How to play {#sec-steam-play}
|
||||
|
|
@ -34,7 +34,7 @@ $ nix repl
|
|||
map (p: p.name) pkgs.rxvt-unicode.plugins
|
||||
```
|
||||
|
||||
Alternatively, if your shell is bash or zsh and have completion enabled, simply type `nixpkgs.rxvt-unicode.plugins.<tab>`.
|
||||
Alternatively, if your shell is bash or zsh and have completion enabled, type `nixpkgs.rxvt-unicode.plugins.<tab>`.
|
||||
|
||||
In addition to `plugins` the options `extraDeps` and `perlDeps` can be used to install extra packages. `extraDeps` can be used, for example, to provide `xsel` (a clipboard manager) to the clipboard plugin, without installing it globally:
|
||||
|
59
third_party/nixpkgs/doc/stdenv/stdenv.chapter.md
vendored
59
third_party/nixpkgs/doc/stdenv/stdenv.chapter.md
vendored
|
@ -101,25 +101,62 @@ genericBuild
|
|||
|
||||
### Building a `stdenv` package in `nix-shell` {#sec-building-stdenv-package-in-nix-shell}
|
||||
|
||||
To build a `stdenv` package in a [`nix-shell`](https://nixos.org/manual/nix/unstable/command-ref/nix-shell.html), use
|
||||
To build a `stdenv` package in a [`nix-shell`](https://nixos.org/manual/nix/unstable/command-ref/nix-shell.html), enter a shell, find the [phases](#sec-stdenv-phases) you wish to build, then invoke `genericBuild` manually:
|
||||
|
||||
Go to an empty directory, invoke `nix-shell` with the desired package, and from inside the shell, set the output variables to a writable directory:
|
||||
|
||||
```bash
|
||||
cd "$(mktemp -d)"
|
||||
nix-shell '<nixpkgs>' -A some_package
|
||||
eval "${unpackPhase:-unpackPhase}"
|
||||
cd $sourceRoot
|
||||
eval "${patchPhase:-patchPhase}"
|
||||
eval "${configurePhase:-configurePhase}"
|
||||
eval "${buildPhase:-buildPhase}"
|
||||
export out=$(pwd)/out
|
||||
```
|
||||
|
||||
Next, invoke the desired parts of the build.
|
||||
First, run the phases that generate a working copy of the sources, which will change directory to the sources for you:
|
||||
|
||||
```bash
|
||||
phases="${prePhases[*]:-} unpackPhase patchPhase" genericBuild
|
||||
```
|
||||
|
||||
Then, run more phases up until the failure is reached.
|
||||
For example, if the failure is in the build phase, the following phases would be required:
|
||||
|
||||
```bash
|
||||
phases="${preConfigurePhases[*]:-} configurePhase ${preBuildPhases[*]:-} buildPhase" genericBuild
|
||||
```
|
||||
|
||||
Re-run a single phase as many times as necessary to examine the failure like so:
|
||||
|
||||
```bash
|
||||
phases="buildPhase" genericBuild
|
||||
```
|
||||
|
||||
To modify a [phase](#sec-stdenv-phases), first print it with
|
||||
|
||||
```bash
|
||||
echo "$buildPhase"
|
||||
```
|
||||
|
||||
Or, if that is empty, for instance, if it is using a function:
|
||||
|
||||
```bash
|
||||
type buildPhase
|
||||
```
|
||||
|
||||
then change it in a text editor, and paste it back to the terminal.
|
||||
|
||||
::: {.note}
|
||||
This method may have some inconsistencies in environment variables and behaviour compared to a normal build within the [Nix build sandbox](https://nixos.org/manual/nix/unstable/language/derivations#builder-execution).
|
||||
The following is a non-exhaustive list of such differences:
|
||||
|
||||
- `TMP`, `TMPDIR`, and similar variables likely point to non-empty directories that the build might conflict with files in.
|
||||
- Output store paths are not writable, so the variables for outputs need to be overridden to writable paths.
|
||||
- Other environment variables may be inconsistent with a `nix-build` either due to `nix-shell`'s initialization script or due to the use of `nix-shell` without the `--pure` option.
|
||||
|
||||
If the build fails differently inside the shell than in the sandbox, consider using [`breakpointHook`](#breakpointhook) and invoking `nix-build` instead.
|
||||
The [`--keep-failed`](https://nixos.org/manual/nix/unstable/command-ref/conf-file#opt--keep-failed) option for `nix-build` may also be useful to examine the build directory of a failed build.
|
||||
:::
|
||||
|
||||
## Tools provided by `stdenv` {#sec-tools-of-stdenv}
|
||||
|
||||
The standard environment provides the following packages:
|
||||
|
@ -282,7 +319,7 @@ let f(h, h + 1, i) = i + (if i <= 0 then h else h)
|
|||
let f(h, h + 1, i) = i + h
|
||||
```
|
||||
|
||||
This is where “sum-like” comes in from above: We can just sum all of the host offsets to get the host offset of the transitive dependency. The target offset is the transitive dependency is simply the host offset + 1, just as it was with the dependencies composed to make this transitive one; it can be ignored as it doesn’t add any new information.
|
||||
This is where “sum-like” comes in from above: We can just sum all of the host offsets to get the host offset of the transitive dependency. The target offset is the transitive dependency is the host offset + 1, just as it was with the dependencies composed to make this transitive one; it can be ignored as it doesn’t add any new information.
|
||||
|
||||
Because of the bounds checks, the uncommon cases are `h = t` and `h + 2 = t`. In the former case, the motivation for `mapOffset` is that since its host and target platforms are the same, no transitive dependency of it should be able to “discover” an offset greater than its reduced target offsets. `mapOffset` effectively “squashes” all its transitive dependencies’ offsets so that none will ever be greater than the target offset of the original `h = t` package. In the other case, `h + 1` is skipped over between the host and target offsets. Instead of squashing the offsets, we need to “rip” them apart so no transitive dependencies’ offset is that one.
|
||||
|
||||
|
@ -491,7 +528,7 @@ If the returned array contains exactly one object (e.g. `[{}]`), all values are
|
|||
```
|
||||
:::
|
||||
|
||||
### Recursive attributes in `mkDerivation` {#mkderivation-recursive-attributes}
|
||||
### Fixed-point arguments of `mkDerivation` {#mkderivation-recursive-attributes}
|
||||
|
||||
If you pass a function to `mkDerivation`, it will receive as its argument the final arguments, including the overrides when reinvoked via `overrideAttrs`. For example:
|
||||
|
||||
|
@ -612,7 +649,7 @@ Zip files are unpacked using `unzip`. However, `unzip` is not in the standard en
|
|||
|
||||
#### Directories in the Nix store {#directories-in-the-nix-store}
|
||||
|
||||
These are simply copied to the current directory. The hash part of the file name is stripped, e.g. `/nix/store/1wydxgby13cz...-my-sources` would be copied to `my-sources`.
|
||||
These are copied to the current directory. The hash part of the file name is stripped, e.g. `/nix/store/1wydxgby13cz...-my-sources` would be copied to `my-sources`.
|
||||
|
||||
Additional file types can be supported by setting the `unpackCmd` variable (see below).
|
||||
|
||||
|
@ -751,7 +788,7 @@ Hook executed at the end of the configure phase.
|
|||
|
||||
### The build phase {#build-phase}
|
||||
|
||||
The build phase is responsible for actually building the package (e.g. compiling it). The default `buildPhase` simply calls `make` if a file named `Makefile`, `makefile` or `GNUmakefile` exists in the current directory (or the `makefile` is explicitly set); otherwise it does nothing.
|
||||
The build phase is responsible for actually building the package (e.g. compiling it). The default `buildPhase` calls `make` if a file named `Makefile`, `makefile` or `GNUmakefile` exists in the current directory (or the `makefile` is explicitly set); otherwise it does nothing.
|
||||
|
||||
#### Variables controlling the build phase {#variables-controlling-the-build-phase}
|
||||
|
||||
|
@ -1280,7 +1317,7 @@ Nix itself considers a build-time dependency as merely something that should pre
|
|||
|
||||
In order to alleviate this burden, the setup hook mechanism was written, where any package can include a shell script that \[by convention rather than enforcement by Nix\], any downstream reverse-dependency will source as part of its build process. That allows the downstream dependency to merely specify its dependencies, and lets those dependencies effectively initialize themselves. No boilerplate mirroring the list of dependencies is needed.
|
||||
|
||||
The setup hook mechanism is a bit of a sledgehammer though: a powerful feature with a broad and indiscriminate area of effect. The combination of its power and implicit use may be expedient, but isn’t without costs. Nix itself is unchanged, but the spirit of added dependencies being effect-free is violated even if the latter isn’t. For example, if a derivation path is mentioned more than once, Nix itself doesn’t care and simply makes sure the dependency derivation is already built just the same—depending is just needing something to exist, and needing is idempotent. However, a dependency specified twice will have its setup hook run twice, and that could easily change the build environment (though a well-written setup hook will therefore strive to be idempotent so this is in fact not observable). More broadly, setup hooks are anti-modular in that multiple dependencies, whether the same or different, should not interfere and yet their setup hooks may well do so.
|
||||
The setup hook mechanism is a bit of a sledgehammer though: a powerful feature with a broad and indiscriminate area of effect. The combination of its power and implicit use may be expedient, but isn’t without costs. Nix itself is unchanged, but the spirit of added dependencies being effect-free is violated even if the latter isn’t. For example, if a derivation path is mentioned more than once, Nix itself doesn’t care and makes sure the dependency derivation is already built just the same—depending is just needing something to exist, and needing is idempotent. However, a dependency specified twice will have its setup hook run twice, and that could easily change the build environment (though a well-written setup hook will therefore strive to be idempotent so this is in fact not observable). More broadly, setup hooks are anti-modular in that multiple dependencies, whether the same or different, should not interfere and yet their setup hooks may well do so.
|
||||
|
||||
The most typical use of the setup hook is actually to add other hooks which are then run (i.e. after all the setup hooks) on each dependency. For example, the C compiler wrapper’s setup hook feeds itself flags for each dependency that contains relevant libraries and headers. This is done by defining a bash function, and appending its name to one of `envBuildBuildHooks`, `envBuildHostHooks`, `envBuildTargetHooks`, `envHostHostHooks`, `envHostTargetHooks`, or `envTargetTargetHooks`. These 6 bash variables correspond to the 6 sorts of dependencies by platform (there’s 12 total but we ignore the propagated/non-propagated axis).
|
||||
|
||||
|
|
|
@ -77,7 +77,7 @@ In Nixpkgs, we have multiple implementations of the BLAS/LAPACK numerical linear
|
|||
|
||||
The Nixpkgs attribute is `openblas` for ILP64 (integer width = 64 bits) and `openblasCompat` for LP64 (integer width = 32 bits). `openblasCompat` is the default.
|
||||
|
||||
- [LAPACK reference](http://www.netlib.org/lapack/) (also provides BLAS and CBLAS)
|
||||
- [LAPACK reference](https://www.netlib.org/lapack/) (also provides BLAS and CBLAS)
|
||||
|
||||
The Nixpkgs attribute is `lapack-reference`.
|
||||
|
||||
|
@ -156,7 +156,7 @@ All programs that are built with [MPI](https://en.wikipedia.org/wiki/Message_Pas
|
|||
|
||||
- [MVAPICH](https://mvapich.cse.ohio-state.edu/), attribute name `mvapich`
|
||||
|
||||
To provide MPI enabled applications that use `MPICH`, instead of the default `Open MPI`, simply use the following overlay:
|
||||
To provide MPI enabled applications that use `MPICH`, instead of the default `Open MPI`, use the following overlay:
|
||||
|
||||
```nix
|
||||
self: super:
|
||||
|
|
20
third_party/nixpkgs/lib/README.md
vendored
20
third_party/nixpkgs/lib/README.md
vendored
|
@ -74,3 +74,23 @@ path/tests/prop.sh
|
|||
# Run the lib.fileset tests
|
||||
fileset/tests.sh
|
||||
```
|
||||
|
||||
## Commit conventions
|
||||
|
||||
- Make sure you read about the [commit conventions](../CONTRIBUTING.md#commit-conventions) common to Nixpkgs as a whole.
|
||||
|
||||
- Format the commit messages in the following way:
|
||||
|
||||
```
|
||||
lib.(section): (init | add additional argument | refactor | etc)
|
||||
|
||||
(Motivation for change. Additional information.)
|
||||
```
|
||||
|
||||
Examples:
|
||||
|
||||
* lib.getExe': check arguments
|
||||
* lib.fileset: Add an additional argument in the design docs
|
||||
|
||||
Closes #264537
|
||||
|
||||
|
|
29
third_party/nixpkgs/lib/asserts.nix
vendored
29
third_party/nixpkgs/lib/asserts.nix
vendored
|
@ -50,4 +50,33 @@ rec {
|
|||
lib.generators.toPretty {} xs}, but is: ${
|
||||
lib.generators.toPretty {} val}";
|
||||
|
||||
/* Specialized `assertMsg` for checking if every one of `vals` is one of the elements
|
||||
of the list `xs`. Useful for checking lists of supported attributes.
|
||||
|
||||
Example:
|
||||
let sslLibraries = [ "libressl" "bearssl" ];
|
||||
in assertEachOneOf "sslLibraries" sslLibraries [ "openssl" "bearssl" ]
|
||||
stderr> error: each element in sslLibraries must be one of [
|
||||
stderr> "openssl"
|
||||
stderr> "bearssl"
|
||||
stderr> ], but is: [
|
||||
stderr> "libressl"
|
||||
stderr> "bearssl"
|
||||
stderr> ]
|
||||
|
||||
Type:
|
||||
assertEachOneOf :: String -> List ComparableVal -> List ComparableVal -> Bool
|
||||
*/
|
||||
assertEachOneOf =
|
||||
# The name of the variable the user entered `val` into, for inclusion in the error message
|
||||
name:
|
||||
# The list of values of what the user provided, to be compared against the values in `xs`
|
||||
vals:
|
||||
# The list of valid values
|
||||
xs:
|
||||
assertMsg
|
||||
(lib.all (val: lib.elem val xs) vals)
|
||||
"each element in ${name} must be one of ${
|
||||
lib.generators.toPretty {} xs}, but is: ${
|
||||
lib.generators.toPretty {} vals}";
|
||||
}
|
||||
|
|
30
third_party/nixpkgs/lib/attrsets.nix
vendored
30
third_party/nixpkgs/lib/attrsets.nix
vendored
|
@ -542,6 +542,36 @@ rec {
|
|||
attrs:
|
||||
map (name: f name attrs.${name}) (attrNames attrs);
|
||||
|
||||
/*
|
||||
Deconstruct an attrset to a list of name-value pairs as expected by [`builtins.listToAttrs`](https://nixos.org/manual/nix/stable/language/builtins.html#builtins-listToAttrs).
|
||||
Each element of the resulting list is an attribute set with these attributes:
|
||||
- `name` (string): The name of the attribute
|
||||
- `value` (any): The value of the attribute
|
||||
|
||||
The following is always true:
|
||||
```nix
|
||||
builtins.listToAttrs (attrsToList attrs) == attrs
|
||||
```
|
||||
|
||||
:::{.warning}
|
||||
The opposite is not always true. In general expect that
|
||||
```nix
|
||||
attrsToList (builtins.listToAttrs list) != list
|
||||
```
|
||||
|
||||
This is because the `listToAttrs` removes duplicate names and doesn't preserve the order of the list.
|
||||
:::
|
||||
|
||||
Example:
|
||||
attrsToList { foo = 1; bar = "asdf"; }
|
||||
=> [ { name = "bar"; value = "asdf"; } { name = "foo"; value = 1; } ]
|
||||
|
||||
Type:
|
||||
attrsToList :: AttrSet -> [ { name :: String; value :: Any; } ]
|
||||
|
||||
*/
|
||||
attrsToList = mapAttrsToList nameValuePair;
|
||||
|
||||
|
||||
/* Like `mapAttrs`, except that it recursively applies itself to
|
||||
the *leaf* attributes of a potentially-nested attribute set:
|
||||
|
|
120
third_party/nixpkgs/lib/customisation.nix
vendored
120
third_party/nixpkgs/lib/customisation.nix
vendored
|
@ -13,16 +13,7 @@ rec {
|
|||
scenarios (e.g. in ~/.config/nixpkgs/config.nix). For instance,
|
||||
if you want to "patch" the derivation returned by a package
|
||||
function in Nixpkgs to build another version than what the
|
||||
function itself provides, you can do something like this:
|
||||
|
||||
mySed = overrideDerivation pkgs.gnused (oldAttrs: {
|
||||
name = "sed-4.2.2-pre";
|
||||
src = fetchurl {
|
||||
url = ftp://alpha.gnu.org/gnu/sed/sed-4.2.2-pre.tar.bz2;
|
||||
hash = "sha256-MxBJRcM2rYzQYwJ5XKxhXTQByvSg5jZc5cSHEZoB2IY=";
|
||||
};
|
||||
patches = [];
|
||||
});
|
||||
function itself provides.
|
||||
|
||||
For another application, see build-support/vm, where this
|
||||
function is used to build arbitrary derivations inside a QEMU
|
||||
|
@ -35,6 +26,19 @@ rec {
|
|||
|
||||
You should in general prefer `drv.overrideAttrs` over this function;
|
||||
see the nixpkgs manual for more information on overriding.
|
||||
|
||||
Example:
|
||||
mySed = overrideDerivation pkgs.gnused (oldAttrs: {
|
||||
name = "sed-4.2.2-pre";
|
||||
src = fetchurl {
|
||||
url = ftp://alpha.gnu.org/gnu/sed/sed-4.2.2-pre.tar.bz2;
|
||||
hash = "sha256-MxBJRcM2rYzQYwJ5XKxhXTQByvSg5jZc5cSHEZoB2IY=";
|
||||
};
|
||||
patches = [];
|
||||
});
|
||||
|
||||
Type:
|
||||
overrideDerivation :: Derivation -> ( Derivation -> AttrSet ) -> Derivation
|
||||
*/
|
||||
overrideDerivation = drv: f:
|
||||
let
|
||||
|
@ -55,6 +59,10 @@ rec {
|
|||
injects `override` attribute which can be used to override arguments of
|
||||
the function.
|
||||
|
||||
Please refer to documentation on [`<pkg>.overrideDerivation`](#sec-pkg-overrideDerivation) to learn about `overrideDerivation` and caveats
|
||||
related to its use.
|
||||
|
||||
Example:
|
||||
nix-repl> x = {a, b}: { result = a + b; }
|
||||
|
||||
nix-repl> y = lib.makeOverridable x { a = 1; b = 2; }
|
||||
|
@ -65,23 +73,25 @@ rec {
|
|||
nix-repl> y.override { a = 10; }
|
||||
{ override = «lambda»; overrideDerivation = «lambda»; result = 12; }
|
||||
|
||||
Please refer to "Nixpkgs Contributors Guide" section
|
||||
"<pkg>.overrideDerivation" to learn about `overrideDerivation` and caveats
|
||||
related to its use.
|
||||
Type:
|
||||
makeOverridable :: (AttrSet -> a) -> AttrSet -> a
|
||||
*/
|
||||
makeOverridable = f: origArgs:
|
||||
makeOverridable = f:
|
||||
let
|
||||
# Creates a functor with the same arguments as f
|
||||
mirrorArgs = lib.mirrorFunctionArgs f;
|
||||
in
|
||||
mirrorArgs (origArgs:
|
||||
let
|
||||
result = f origArgs;
|
||||
|
||||
# Creates a functor with the same arguments as f
|
||||
copyArgs = g: lib.setFunctionArgs g (lib.functionArgs f);
|
||||
# Changes the original arguments with (potentially a function that returns) a set of new attributes
|
||||
overrideWith = newArgs: origArgs // (if lib.isFunction newArgs then newArgs origArgs else newArgs);
|
||||
|
||||
# Re-call the function but with different arguments
|
||||
overrideArgs = copyArgs (newArgs: makeOverridable f (overrideWith newArgs));
|
||||
overrideArgs = mirrorArgs (newArgs: makeOverridable f (overrideWith newArgs));
|
||||
# Change the result of the function call by applying g to it
|
||||
overrideResult = g: makeOverridable (copyArgs (args: g (f args))) origArgs;
|
||||
overrideResult = g: makeOverridable (mirrorArgs (args: g (f args))) origArgs;
|
||||
in
|
||||
if builtins.isAttrs result then
|
||||
result // {
|
||||
|
@ -95,7 +105,7 @@ rec {
|
|||
lib.setFunctionArgs result (lib.functionArgs result) // {
|
||||
override = overrideArgs;
|
||||
}
|
||||
else result;
|
||||
else result);
|
||||
|
||||
|
||||
/* Call the package function in the file `fn` with the required
|
||||
|
@ -104,20 +114,29 @@ rec {
|
|||
`autoArgs`. This function is intended to be partially
|
||||
parameterised, e.g.,
|
||||
|
||||
```nix
|
||||
callPackage = callPackageWith pkgs;
|
||||
pkgs = {
|
||||
libfoo = callPackage ./foo.nix { };
|
||||
libbar = callPackage ./bar.nix { };
|
||||
};
|
||||
```
|
||||
|
||||
If the `libbar` function expects an argument named `libfoo`, it is
|
||||
automatically passed as an argument. Overrides or missing
|
||||
arguments can be supplied in `args`, e.g.
|
||||
|
||||
```nix
|
||||
libbar = callPackage ./bar.nix {
|
||||
libfoo = null;
|
||||
enableX11 = true;
|
||||
};
|
||||
```
|
||||
|
||||
<!-- TODO: Apply "Example:" tag to the examples above -->
|
||||
|
||||
Type:
|
||||
callPackageWith :: AttrSet -> ((AttrSet -> a) | Path) -> AttrSet -> a
|
||||
*/
|
||||
callPackageWith = autoArgs: fn: args:
|
||||
let
|
||||
|
@ -128,7 +147,7 @@ rec {
|
|||
# This includes automatic ones and ones passed explicitly
|
||||
allArgs = builtins.intersectAttrs fargs autoArgs // args;
|
||||
|
||||
# A list of argument names that the function requires, but
|
||||
# a list of argument names that the function requires, but
|
||||
# wouldn't be passed to it
|
||||
missingArgs = lib.attrNames
|
||||
# Filter out arguments that have a default value
|
||||
|
@ -175,7 +194,11 @@ rec {
|
|||
|
||||
/* Like callPackage, but for a function that returns an attribute
|
||||
set of derivations. The override function is added to the
|
||||
individual attributes. */
|
||||
individual attributes.
|
||||
|
||||
Type:
|
||||
callPackagesWith :: AttrSet -> ((AttrSet -> AttrSet) | Path) -> AttrSet -> AttrSet
|
||||
*/
|
||||
callPackagesWith = autoArgs: fn: args:
|
||||
let
|
||||
f = if lib.isFunction fn then fn else import fn;
|
||||
|
@ -192,7 +215,11 @@ rec {
|
|||
|
||||
|
||||
/* Add attributes to each output of a derivation without changing
|
||||
the derivation itself and check a given condition when evaluating. */
|
||||
the derivation itself and check a given condition when evaluating.
|
||||
|
||||
Type:
|
||||
extendDerivation :: Bool -> Any -> Derivation -> Derivation
|
||||
*/
|
||||
extendDerivation = condition: passthru: drv:
|
||||
let
|
||||
outputs = drv.outputs or [ "out" ];
|
||||
|
@ -226,7 +253,11 @@ rec {
|
|||
/* Strip a derivation of all non-essential attributes, returning
|
||||
only those needed by hydra-eval-jobs. Also strictly evaluate the
|
||||
result to ensure that there are no thunks kept alive to prevent
|
||||
garbage collection. */
|
||||
garbage collection.
|
||||
|
||||
Type:
|
||||
hydraJob :: (Derivation | Null) -> (Derivation | Null)
|
||||
*/
|
||||
hydraJob = drv:
|
||||
let
|
||||
outputs = drv.outputs or ["out"];
|
||||
|
@ -264,7 +295,11 @@ rec {
|
|||
called with the overridden packages. The package sets may be
|
||||
hierarchical: the packages in the set are called with the scope
|
||||
provided by `newScope` and the set provides a `newScope` attribute
|
||||
which can form the parent scope for later package sets. */
|
||||
which can form the parent scope for later package sets.
|
||||
|
||||
Type:
|
||||
makeScope :: (AttrSet -> ((AttrSet -> a) | Path) -> AttrSet -> a) -> (AttrSet -> AttrSet) -> AttrSet
|
||||
*/
|
||||
makeScope = newScope: f:
|
||||
let self = f self // {
|
||||
newScope = scope: newScope (self // scope);
|
||||
|
@ -286,13 +321,48 @@ rec {
|
|||
{ inherit otherSplices keep extra f; };
|
||||
|
||||
/* Like makeScope, but aims to support cross compilation. It's still ugly, but
|
||||
hopefully it helps a little bit. */
|
||||
hopefully it helps a little bit.
|
||||
|
||||
Type:
|
||||
makeScopeWithSplicing' ::
|
||||
{ splicePackages :: Splice -> AttrSet
|
||||
, newScope :: AttrSet -> ((AttrSet -> a) | Path) -> AttrSet -> a
|
||||
}
|
||||
-> { otherSplices :: Splice, keep :: AttrSet -> AttrSet, extra :: AttrSet -> AttrSet }
|
||||
-> AttrSet
|
||||
|
||||
Splice ::
|
||||
{ pkgsBuildBuild :: AttrSet
|
||||
, pkgsBuildHost :: AttrSet
|
||||
, pkgsBuildTarget :: AttrSet
|
||||
, pkgsHostHost :: AttrSet
|
||||
, pkgsHostTarget :: AttrSet
|
||||
, pkgsTargetTarget :: AttrSet
|
||||
}
|
||||
*/
|
||||
makeScopeWithSplicing' =
|
||||
{ splicePackages
|
||||
, newScope
|
||||
}:
|
||||
{ otherSplices
|
||||
# Attrs from `self` which won't be spliced.
|
||||
# Avoid using keep, it's only used for a python hook workaround, added in PR #104201.
|
||||
# ex: `keep = (self: { inherit (self) aAttr; })`
|
||||
, keep ? (_self: {})
|
||||
# Additional attrs to add to the sets `callPackage`.
|
||||
# When the package is from a subset (but not a subset within a package IS #211340)
|
||||
# within `spliced0` it will be spliced.
|
||||
# When using an package outside the set but it's available from `pkgs`, use the package from `pkgs.__splicedPackages`.
|
||||
# If the package is not available within the set or in `pkgs`, such as a package in a let binding, it will not be spliced
|
||||
# ex:
|
||||
# ```
|
||||
# nix-repl> darwin.apple_sdk.frameworks.CoreFoundation
|
||||
# «derivation ...CoreFoundation-11.0.0.drv»
|
||||
# nix-repl> darwin.CoreFoundation
|
||||
# error: attribute 'CoreFoundation' missing
|
||||
# nix-repl> darwin.callPackage ({ CoreFoundation }: CoreFoundation) { }
|
||||
# «derivation ...CoreFoundation-11.0.0.drv»
|
||||
# ```
|
||||
, extra ? (_spliced0: {})
|
||||
, f
|
||||
}:
|
||||
|
|
8
third_party/nixpkgs/lib/default.nix
vendored
8
third_party/nixpkgs/lib/default.nix
vendored
|
@ -74,15 +74,15 @@ let
|
|||
importJSON importTOML warn warnIf warnIfNot throwIf throwIfNot checkListOfEnum
|
||||
info showWarnings nixpkgsVersion version isInOldestRelease
|
||||
mod compare splitByAndCompare
|
||||
functionArgs setFunctionArgs isFunction toFunction
|
||||
functionArgs setFunctionArgs isFunction toFunction mirrorFunctionArgs
|
||||
toHexString toBaseDigits inPureEvalMode;
|
||||
inherit (self.fixedPoints) fix fix' converge extends composeExtensions
|
||||
composeManyExtensions makeExtensible makeExtensibleWithCustomName;
|
||||
inherit (self.attrsets) attrByPath hasAttrByPath setAttrByPath
|
||||
getAttrFromPath attrVals attrValues getAttrs catAttrs filterAttrs
|
||||
filterAttrsRecursive foldlAttrs foldAttrs collect nameValuePair mapAttrs
|
||||
mapAttrs' mapAttrsToList concatMapAttrs mapAttrsRecursive mapAttrsRecursiveCond
|
||||
genAttrs isDerivation toDerivation optionalAttrs
|
||||
mapAttrs' mapAttrsToList attrsToList concatMapAttrs mapAttrsRecursive
|
||||
mapAttrsRecursiveCond genAttrs isDerivation toDerivation optionalAttrs
|
||||
zipAttrsWithNames zipAttrsWith zipAttrs recursiveUpdateUntil
|
||||
recursiveUpdate matchAttrs overrideExisting showAttrPath getOutput getBin
|
||||
getLib getDev getMan chooseDevOutputs zipWithNames zip
|
||||
|
@ -92,7 +92,7 @@ let
|
|||
concatMap flatten remove findSingle findFirst any all count
|
||||
optional optionals toList range replicate partition zipListsWith zipLists
|
||||
reverseList listDfs toposort sort naturalSort compareLists take
|
||||
drop sublist last init crossLists unique intersectLists
|
||||
drop sublist last init crossLists unique allUnique intersectLists
|
||||
subtractLists mutuallyExclusive groupBy groupBy';
|
||||
inherit (self.strings) concatStrings concatMapStrings concatImapStrings
|
||||
intersperse concatStringsSep concatMapStringsSep
|
||||
|
|
59
third_party/nixpkgs/lib/fileset/README.md
vendored
59
third_party/nixpkgs/lib/fileset/README.md
vendored
|
@ -58,7 +58,8 @@ An attribute set with these values:
|
|||
|
||||
- `_internalBase` (path):
|
||||
Any files outside of this path cannot influence the set of files.
|
||||
This is always a directory.
|
||||
This is always a directory and should be as long as possible.
|
||||
This is used by `lib.fileset.toSource` to check that all files are under the `root` argument
|
||||
|
||||
- `_internalBaseRoot` (path):
|
||||
The filesystem root of `_internalBase`, same as `(lib.path.splitRoot _internalBase).root`.
|
||||
|
@ -143,9 +144,37 @@ Arguments:
|
|||
- (-) Leaves us with no identity element for `union` and no reasonable return value for `unions []`.
|
||||
From a set theory perspective, which has a well-known notion of empty sets, this is unintuitive.
|
||||
|
||||
### No intersection for lists
|
||||
|
||||
While there is `intersection a b`, there is no function `intersections [ a b c ]`.
|
||||
|
||||
Arguments:
|
||||
- (+) There is no known use case for such a function, it can be added later if a use case arises
|
||||
- (+) There is no suitable return value for `intersections [ ]`, see also "Nullary intersections" [here](https://en.wikipedia.org/w/index.php?title=List_of_set_identities_and_relations&oldid=1177174035#Definitions)
|
||||
- (-) Could throw an error for that case
|
||||
- (-) Create a special value to represent "all the files" and return that
|
||||
- (+) Such a value could then not be used with `fileFilter` unless the internal representation is changed considerably
|
||||
- (-) Could return the empty file set
|
||||
- (+) This would be wrong in set theory
|
||||
- (-) Inconsistent with `union` and `unions`
|
||||
|
||||
### Intersection base path
|
||||
|
||||
The base path of the result of an `intersection` is the longest base path of the arguments.
|
||||
E.g. the base path of `intersection ./foo ./foo/bar` is `./foo/bar`.
|
||||
Meanwhile `intersection ./foo ./bar` returns the empty file set without a base path.
|
||||
|
||||
Arguments:
|
||||
- Alternative: Use the common prefix of all base paths as the resulting base path
|
||||
- (-) This is unnecessarily strict, because the purpose of the base path is to track the directory under which files _could_ be in the file set. It should be as long as possible.
|
||||
All files contained in `intersection ./foo ./foo/bar` will be under `./foo/bar` (never just under `./foo`), and `intersection ./foo ./bar` will never contain any files (never under `./.`).
|
||||
This would lead to `toSource` having to unexpectedly throw errors for cases such as `toSource { root = ./foo; fileset = intersect ./foo base; }`, where `base` may be `./bar` or `./.`.
|
||||
- (-) There is no benefit to the user, since base path is not directly exposed in the interface
|
||||
|
||||
### Empty directories
|
||||
|
||||
File sets can only represent a _set_ of local files, directories on their own are not representable.
|
||||
File sets can only represent a _set_ of local files.
|
||||
Directories on their own are not representable.
|
||||
|
||||
Arguments:
|
||||
- (+) There does not seem to be a sensible set of combinators when directories can be represented on their own.
|
||||
|
@ -161,7 +190,7 @@ Arguments:
|
|||
|
||||
- `./.` represents all files in `./.` _and_ the directory itself, but not its subdirectories, meaning that at least `./.` will be preserved even if it's empty.
|
||||
|
||||
In that case, `intersect ./. ./foo` should only include files and no directories themselves, since `./.` includes only `./.` as a directory, and same for `./foo`, so there's no overlap in directories.
|
||||
In that case, `intersection ./. ./foo` should only include files and no directories themselves, since `./.` includes only `./.` as a directory, and same for `./foo`, so there's no overlap in directories.
|
||||
But intuitively this operation should result in the same as `./foo` – everything else is just confusing.
|
||||
- (+) This matches how Git only supports files, so developers should already be used to it.
|
||||
- (-) Empty directories (even if they contain nested directories) are neither representable nor preserved when coercing from paths.
|
||||
|
@ -176,7 +205,7 @@ File sets do not support Nix store paths in strings such as `"/nix/store/...-sou
|
|||
|
||||
Arguments:
|
||||
- (+) Such paths are usually produced by derivations, which means `toSource` would either:
|
||||
- Require IFD if `builtins.path` is used as the underlying primitive
|
||||
- Require [Import From Derivation](https://nixos.org/manual/nix/unstable/language/import-from-derivation) (IFD) if `builtins.path` is used as the underlying primitive
|
||||
- Require importing the entire `root` into the store such that derivations can be used to do the filtering
|
||||
- (+) The convenient path coercion like `union ./foo ./bar` wouldn't work for absolute paths, requiring more verbose alternate interfaces:
|
||||
- `let root = "/nix/store/...-source"; in union "${root}/foo" "${root}/bar"`
|
||||
|
@ -196,6 +225,9 @@ Arguments:
|
|||
This use case makes little sense for files that are already in the store.
|
||||
This should be a separate abstraction as e.g. `pkgs.drvLayout` instead, which could have a similar interface but be specific to derivations.
|
||||
Additional capabilities could be supported that can't be done at evaluation time, such as renaming files, creating new directories, setting executable bits, etc.
|
||||
- (+) An API for filtering/transforming Nix store paths could be much more powerful,
|
||||
because it's not limited to just what is possible at evaluation time with `builtins.path`.
|
||||
Operations such as moving and adding files would be supported.
|
||||
|
||||
### Single files
|
||||
|
||||
|
@ -206,11 +238,22 @@ Arguments:
|
|||
And it would be unclear how the library should behave if the one file wouldn't be added to the store:
|
||||
`toSource { root = ./file.nix; fileset = <empty>; }` has no reasonable result because returing an empty store path wouldn't match the file type, and there's no way to have an empty file store path, whatever that would mean.
|
||||
|
||||
### `fileFilter` takes a path
|
||||
|
||||
The `fileFilter` function takes a path, and not a file set, as its second argument.
|
||||
|
||||
- (-) Makes it harder to compose functions, since the file set type, the return value, can't be passed to the function itself like `fileFilter predicate fileset`
|
||||
- (+) It's still possible to use `intersection` to filter on file sets: `intersection fileset (fileFilter predicate ./.)`
|
||||
- (-) This does need an extra `./.` argument that's not obvious
|
||||
- (+) This could always be `/.` or the project directory, `intersection` will make it lazy
|
||||
- (+) In the future this will allow `fileFilter` to support a predicate property like `subpath` and/or `components` in a reproducible way.
|
||||
This wouldn't be possible if it took a file set, because file sets don't have a predictable absolute path.
|
||||
- (-) What about the base path?
|
||||
- (+) That can change depending on which files are included, so if it's used for `fileFilter`
|
||||
it would change the `subpath`/`components` value depending on which files are included.
|
||||
- (+) If necessary, this restriction can be relaxed later, the opposite wouldn't be possible
|
||||
|
||||
## To update in the future
|
||||
|
||||
Here's a list of places in the library that need to be updated in the future:
|
||||
- > The file set library is currently somewhat limited but is being expanded to include more functions over time.
|
||||
|
||||
in [the manual](../../doc/functions/fileset.section.md)
|
||||
- If/Once a function to convert `lib.sources` values into file sets exists, the `_coerce` and `toSource` functions should be updated to mention that function in the error when such a value is passed
|
||||
- If/Once a function exists that can optionally include a path depending on whether it exists, the error message for the path not existing in `_coerce` should mention the new function
|
||||
|
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Reference in a new issue