1
0
Fork 0
mirror of https://github.com/NixOS/nix synced 2025-07-01 20:51:48 +02:00

Merge remote-tracking branch 'detsys-priv/detsys-main' into sync-2.24.2

This commit is contained in:
Eelco Dolstra 2024-08-08 16:57:22 +02:00
commit 27a36255bf
37 changed files with 41 additions and 178 deletions

View file

@ -36,11 +36,6 @@ let
let
result = ''
> **Warning** \
> This program is
> [**experimental**](@docroot@/development/experimental-features.md#xp-feature-nix-command)
> and its interface is subject to change.
# Name
`${command}` - ${details.description}

View file

@ -35,7 +35,7 @@ dummy-env = env -i \
NIX_STATE_DIR=/dummy \
NIX_CONFIG='cores = 0'
nix-eval = $(dummy-env) $(doc_nix) eval --experimental-features nix-command -I nix=doc/manual --store dummy:// --impure --raw
nix-eval = $(dummy-env) $(doc_nix) eval -I nix=doc/manual --store dummy:// --impure --raw
# re-implement mdBook's include directive to make it usable for terminal output and for proper @docroot@ substitution
define process-includes
@ -121,7 +121,7 @@ $(d)/nix.json: $(doc_nix)
@mv $@.tmp $@
$(d)/conf-file.json: $(doc_nix)
$(trace-gen) $(dummy-env) $(doc_nix) config show --json --experimental-features nix-command > $@.tmp
$(trace-gen) $(dummy-env) $(doc_nix) config show --json > $@.tmp
@mv $@.tmp $@
$(d)/src/development/experimental-feature-descriptions.md: $(d)/xp-features.json $(d)/utils.nix $(d)/generate-xp-features.nix $(doc_nix)

View file

@ -1,66 +1,4 @@
# Building Nix
This section provides some notes on how to start hacking on Nix.
To get the latest version of Nix from GitHub:
```console
$ git clone https://github.com/NixOS/nix.git
$ cd nix
```
> **Note**
>
> The following instructions assume you already have some version of Nix installed locally, so that you can use it to set up the development environment.
> If you don't have it installed, follow the [installation instructions](../installation/index.md).
To build all dependencies and start a shell in which all environment variables are set up so that those dependencies can be found:
```console
$ nix-shell
```
To get a shell with one of the other [supported compilation environments](#compilation-environments):
```console
$ nix-shell --attr devShells.x86_64-linux.native-clangStdenvPackages
```
> **Note**
>
> You can use `native-ccacheStdenvPackages` to drastically improve rebuild time.
> By default, [ccache](https://ccache.dev) keeps artifacts in `~/.cache/ccache/`.
To build Nix itself in this shell:
```console
[nix-shell]$ autoreconfPhase
[nix-shell]$ ./configure $configureFlags --prefix=$(pwd)/outputs/out
[nix-shell]$ make -j $NIX_BUILD_CORES
```
To install it in `$(pwd)/outputs` and test it:
```console
[nix-shell]$ make install
[nix-shell]$ make installcheck -j $NIX_BUILD_CORES
[nix-shell]$ ./outputs/out/bin/nix --version
nix (Nix) 2.12
```
To build a release version of Nix for the current operating system and CPU architecture:
```console
$ nix-build
```
You can also build Nix for one of the [supported platforms](#platforms).
## Building Nix with flakes
This section assumes you are using Nix with the [`nix-command`] experimental feature enabled.
[`nix-command`]: @docroot@/development/experimental-features.md#xp-nix-command
## Building Nix
To build all dependencies and start a shell in which all environment variables are set up so that those dependencies can be found:
@ -154,12 +92,6 @@ platform. Common solutions include [remote build machines] and [binary format em
Given such a setup, executing the build only requires selecting the respective attribute.
For example, to compile for `aarch64-linux`:
```console
$ nix-build --attr packages.aarch64-linux.default
```
or for Nix with the [`flakes`] and [`nix-command`] experimental features enabled:
```console
$ nix build .#packages.aarch64-linux.default
```
@ -241,20 +173,12 @@ To build with one of those environments, you can use
$ nix build .#nix-ccacheStdenv
```
for flake-enabled Nix, or
```console
$ nix-build --attr nix-ccacheStdenv
```
for classic Nix.
You can use any of the other supported environments in place of `nix-ccacheStdenv`.
## Editor integration
The `clangd` LSP server is installed by default on the `clang`-based `devShell`s.
See [supported compilation environments](#compilation-environments) and instructions how to set up a shell [with flakes](#nix-with-flakes) or in [classic Nix](#classic-nix).
See [supported compilation environments](#compilation-environments) and instructions how to [set up a shell with flakes](#nix-with-flakes).
To use the LSP with your editor, you first need to [set up `clangd`](https://clangd.llvm.org/installation#project-setup) by running:

View file

@ -1,11 +1,5 @@
# Derivation JSON Format
> **Warning**
>
> This JSON format is currently
> [**experimental**](@docroot@/development/experimental-features.md#xp-feature-nix-command)
> and subject to change.
The JSON serialization of a
[derivations](@docroot@/glossary.md#gloss-store-derivation)
is a JSON object with the following fields:

View file

@ -1,11 +1,5 @@
# Store object info JSON format
> **Warning**
>
> This JSON format is currently
> [**experimental**](@docroot@/development/experimental-features.md#xp-feature-nix-command)
> and subject to change.
Info about a [store object].
* `path`:

View file

@ -25,7 +25,7 @@ runCommand "installer-script" {
(tarball: let
inherit (tarball.stdenv.hostPlatform) system;
in '' \
--replace '@tarballHash_${system}@' $(nix --experimental-features nix-command hash-file --base16 --type sha256 ${tarball}/*.tar.xz) \
--replace '@tarballHash_${system}@' $(nix hash-file --base16 --type sha256 ${tarball}/*.tar.xz) \
--replace '@tarballPath_${system}@' $(tarballPath ${tarball}/*.tar.xz) \
''
)

View file

@ -988,9 +988,7 @@ Goal::Co DerivationGoal::buildDone()
msg += line;
msg += "\n";
}
auto nixLogCommand = experimentalFeatureSettings.isEnabled(Xp::NixCommand)
? "nix log"
: "nix-store -l";
auto nixLogCommand = "nix log";
msg += fmt("For full logs, run '" ANSI_BOLD "%s %s" ANSI_NORMAL "'.",
nixLogCommand,
worker.store.printStorePath(drvPath));

View file

@ -582,7 +582,7 @@ Strings argvToStrings(int argc, char * * argv)
std::optional<ExperimentalFeature> Command::experimentalFeature ()
{
return { Xp::NixCommand };
return {};
}
MultiCommand::MultiCommand(std::string_view commandName, const Commands & commands_)

View file

@ -386,7 +386,7 @@ struct ExperimentalFeatureSettings : Config {
Example:
```
experimental-features = nix-command
experimental-features = ca-derivations
```
The following experimental features are available:

View file

@ -86,15 +86,6 @@ constexpr std::array<ExperimentalFeatureDetails, numXpFeatures> xpFeatureDetails
)",
.trackingUrl = "https://github.com/NixOS/nix/milestone/31",
},
{
.tag = Xp::NixCommand,
.name = "nix-command",
.description = R"(
Enable the new `nix` subcommands. See the manual on
[`nix`](@docroot@/command-ref/new-cli/nix.md) for details.
)",
.trackingUrl = "https://github.com/NixOS/nix/milestone/28",
},
{
.tag = Xp::GitHashing,
.name = "git-hashing",
@ -310,7 +301,7 @@ static_assert(
* A set of previously experimental features that are now considered
* stable. We don't warn if users have these in `experimental-features`.
*/
std::set<std::string> stabilizedFeatures{"flakes"};
std::set<std::string> stabilizedFeatures{"flakes", "nix-command"};
const std::optional<ExperimentalFeature> parseExperimentalFeature(const std::string_view & name)
{

View file

@ -19,7 +19,6 @@ enum struct ExperimentalFeature
CaDerivations,
ImpureDerivations,
FetchTree,
NixCommand,
GitHashing,
RecursiveNix,
NoUrlLiterals,

View file

@ -122,7 +122,6 @@ struct NixArgs : virtual MultiCommand, virtual MixCommonArgs, virtual RootArgs
.description = "Print full build logs on standard error.",
.category = loggingCategory,
.handler = {[&]() { logger->setPrintBuildLogs(true); }},
.experimentalFeature = Xp::NixCommand,
});
addFlag({
@ -138,7 +137,6 @@ struct NixArgs : virtual MultiCommand, virtual MixCommonArgs, virtual RootArgs
.description = "Disable substituters and consider all previously downloaded files up-to-date.",
.category = miscCategory,
.handler = {[&]() { useNet = false; }},
.experimentalFeature = Xp::NixCommand,
});
addFlag({
@ -146,7 +144,6 @@ struct NixArgs : virtual MultiCommand, virtual MixCommonArgs, virtual RootArgs
.description = "Consider all previously downloaded files out-of-date.",
.category = miscCategory,
.handler = {[&]() { refresh = true; }},
.experimentalFeature = Xp::NixCommand,
});
}

View file

@ -48,11 +48,6 @@ manual](https://nixos.org/manual/nix/stable/).
# Installables
> **Warning** \
> Installables are part of the unstable
> [`nix-command` experimental feature](@docroot@/development/experimental-features.md#xp-feature-nix-command),
> and subject to change without notice.
Many `nix` subcommands operate on one or more *installables*.
These are command line arguments that represent something that can be realised in the Nix store.
@ -72,11 +67,6 @@ That is, Nix will operate on the default flake output attribute of the flake in
### Flake output attribute
> **Warning** \
> Flake output attribute installables depend on the
> [`nix-command`](@docroot@/development/experimental-features.md#xp-feature-nix-command)
> experimental feature, and subject to change without notice.
Example: `nixpkgs#hello`
These have the form *flakeref*[`#`*attrpath*], where *flakeref* is a

View file

@ -19,7 +19,7 @@ drvPath3=$(nix derivation add --dry-run < "$TEST_HOME"/foo.json)
[[ ! -e "$drvPath3" ]]
# But the JSON is rejected without the experimental feature
expectStderr 1 nix derivation add < "$TEST_HOME"/foo.json --experimental-features nix-command | grepQuiet "experimental Nix feature 'ca-derivations' is disabled"
expectStderr 1 nix derivation add < "$TEST_HOME"/foo.json --experimental-features '' | grepQuiet "experimental Nix feature 'ca-derivations' is disabled"
# Without --dry-run it is actually written
drvPath4=$(nix derivation add < "$TEST_HOME"/foo.json)

View file

@ -4,7 +4,7 @@ source common.sh
requireDaemonNewerThan "2.4pre20210626"
enableFeatures "ca-derivations nix-command"
enableFeatures "ca-derivations"
export NIX_TESTS_CA_BY_DEFAULT=1
cd ..

View file

@ -12,7 +12,6 @@ if isTestOnNixOS; then
! test -e "$test_nix_conf"
cat > "$test_nix_conf_dir/nix.conf" <<EOF
# TODO: this is not needed for all tests and prevents stable commands from be tested in isolation
experimental-features = nix-command
flake-registry = $TEST_ROOT/registry.json
show-trace = true
EOF
@ -47,7 +46,7 @@ cat > "$NIX_CONF_DIR"/nix.conf <<EOF
build-users-group =
keep-derivations = false
sandbox = false
experimental-features = nix-command
experimental-features =
gc-reserved-space = 0
substituters =
flake-registry = $TEST_ROOT/registry.json

View file

@ -123,7 +123,8 @@ startDaemon() {
fi
# Start the daemon, wait for the socket to appear.
rm -f $NIX_DAEMON_SOCKET_PATH
PATH=$DAEMON_PATH nix --extra-experimental-features 'nix-command' daemon &
# TODO: remove the nix-command feature when we're no longer testing against old daemons.
PATH=$DAEMON_PATH nix daemon --extra-experimental-features nix-command &
_NIX_TEST_DAEMON_PID=$!
export _NIX_TEST_DAEMON_PID
for ((i = 0; i < 300; i++)); do

View file

@ -54,12 +54,12 @@ var=$(nix config show | grep '^allowed-uris =' | cut -d '=' -f 2 | xargs)
# Test that we can !include a file.
export NIX_USER_CONF_FILES=$here/config/nix-with-bang-include.conf
var=$(nix config show | grep '^experimental-features =' | cut -d '=' -f 2 | xargs)
[[ $var == nix-command ]]
var=$(nix config show | grep '^fsync-metadata =' | cut -d '=' -f 2 | xargs)
[[ $var == true ]]
# Test that it's possible to load config from the environment
prev=$(nix config show | grep '^cores' | cut -d '=' -f 2 | xargs)
export NIX_CONFIG="cores = 4242"$'\n'"experimental-features = nix-command"
export NIX_CONFIG="cores = 4242"$'\n'
exp_cores=$(nix config show | grep '^cores' | cut -d '=' -f 2 | xargs)
exp_features=$(nix config show | grep '^experimental-features' | cut -d '=' -f 2 | xargs)
[[ $prev != $exp_cores ]]

View file

@ -1,2 +1,2 @@
experimental-features = nix-command
fsync-metadata = true
!include ./missing-extra-config.conf

View file

@ -1,2 +1 @@
experimental-features = nix-command
include ./extra-config.conf

View file

@ -1,2 +1 @@
experimental-features = nix-command
substituters = https://example.com

View file

@ -3,7 +3,7 @@
source ./common.sh
# Without the dynamic-derivations XP feature, we don't have the builtin.
nix --experimental-features 'nix-command' eval --impure --expr \
nix --experimental-features '' eval --impure --expr \
'assert ! (builtins ? outputOf); ""'
# Test that a string is required.
@ -12,14 +12,14 @@ nix --experimental-features 'nix-command' eval --impure --expr \
# object that could be coerced to a string. We might liberalise this in
# the future so it does work, but there are some design questions to
# resolve first. Adding a test so we don't liberalise it by accident.
expectStderr 1 nix --experimental-features 'nix-command dynamic-derivations' eval --impure --expr \
expectStderr 1 nix --experimental-features 'dynamic-derivations' eval --impure --expr \
'builtins.outputOf (import ../dependencies.nix {}) "out"' \
| grepQuiet "expected a string but found a set"
# Test that "DrvDeep" string contexts are not supported at this time
#
# Like the above, this is a restriction we could relax later.
expectStderr 1 nix --experimental-features 'nix-command dynamic-derivations' eval --impure --expr \
expectStderr 1 nix --experimental-features 'dynamic-derivations' eval --impure --expr \
'builtins.outputOf (import ../dependencies.nix {}).drvPath "out"' \
| grepQuiet "has a context which refers to a complete source and binary closure. This is not supported at this time"

View file

@ -11,7 +11,7 @@ mkDerivation rec {
drv = builtins.unsafeDiscardOutputDependency (import ./text-hashed-output.nix).hello.drvPath;
buildCommand = ''
export NIX_CONFIG='experimental-features = nix-command ca-derivations'
export NIX_CONFIG='experimental-features = ca-derivations'
PATH=${builtins.getEnv "EXTRA_PATH"}:$PATH

View file

@ -11,12 +11,12 @@ source common.sh
# # With flakes, flake options should show up
#
# function grep_both_ways {
# nix --experimental-features 'nix-command' "$@" | grepQuietInverse flake
# nix --experimental-features 'nix-command' "$@" | grepQuiet flake
# nix --experimental-features '' "$@" | grepQuietInverse flake
# nix --experimental-features '' "$@" | grepQuiet flake
#
# # Also, the order should not matter
# nix "$@" --experimental-features 'nix-command' | grepQuietInverse flake
# nix "$@" --experimental-features 'nix-command' | grepQuiet flake
# nix "$@" --experimental-features '' | grepQuietInverse flake
# nix "$@" --experimental-features '' | grepQuiet flake
# }
#
# # Simple case, the configuration effects the running command
@ -34,7 +34,7 @@ gatedSetting=auto-allocate-uids
# Experimental feature is disabled before, ignore and warn.
NIX_CONFIG="
experimental-features = nix-command
experimental-features =
$gatedSetting = true
" expect 1 nix config show $gatedSetting 1>"$TEST_ROOT"/stdout 2>"$TEST_ROOT"/stderr
[[ $(cat "$TEST_ROOT/stdout") = '' ]]
@ -43,14 +43,14 @@ grepQuiet "error: could not find setting '$gatedSetting'" "$TEST_ROOT/stderr"
# Experimental feature is disabled after, ignore and warn.
NIX_CONFIG="
$gatedSetting = true
experimental-features = nix-command
experimental-features =
" expect 1 nix config show $gatedSetting 1>"$TEST_ROOT"/stdout 2>"$TEST_ROOT"/stderr
[[ $(cat "$TEST_ROOT/stdout") = '' ]]
grepQuiet "error: could not find setting '$gatedSetting'" "$TEST_ROOT/stderr"
# Experimental feature is enabled before, process.
NIX_CONFIG="
experimental-features = nix-command $xpFeature
experimental-features = $xpFeature
$gatedSetting = true
" nix config show $gatedSetting 1>"$TEST_ROOT"/stdout 2>"$TEST_ROOT"/stderr
grepQuiet "true" "$TEST_ROOT/stdout"
@ -58,18 +58,18 @@ grepQuiet "true" "$TEST_ROOT/stdout"
# Experimental feature is enabled after, process.
NIX_CONFIG="
$gatedSetting = true
experimental-features = nix-command $xpFeature
experimental-features = $xpFeature
" nix config show $gatedSetting 1>"$TEST_ROOT"/stdout 2>"$TEST_ROOT"/stderr
grepQuiet "true" "$TEST_ROOT/stdout"
grepQuietInverse "Ignoring setting '$gatedSetting'" "$TEST_ROOT/stderr"
function exit_code_both_ways {
expect 1 nix --experimental-features 'nix-command ' "$@" 1>/dev/null
nix --experimental-features "nix-command $xpFeature" "$@" 1>/dev/null
expect 1 nix --experimental-features '' "$@" 1>/dev/null
nix --experimental-features "$xpFeature" "$@" 1>/dev/null
# Also, the order should not matter
expect 1 nix "$@" --experimental-features 'nix-command' 1>/dev/null
nix "$@" --experimental-features "nix-command $xpFeature" 1>/dev/null
expect 1 nix "$@" --experimental-features '' 1>/dev/null
nix "$@" --experimental-features "$xpFeature" 1>/dev/null
}
exit_code_both_ways config show --auto-allocate-uids
@ -79,12 +79,3 @@ nix --experimental-features '' --help 1>/dev/null
nix --experimental-features '' doctor --help 1>/dev/null
nix --experimental-features '' repl --help 1>/dev/null
nix --experimental-features '' upgrade-nix --help 1>/dev/null
# These 3 arguments are currently given to all commands, which is wrong (as not
# all care). To deal with fixing later, we simply make them require the
# nix-command experimental features --- it so happens that the commands we wish
# stabilizing to do not need them anyways.
for arg in '--print-build-logs' '--offline' '--refresh'; do
nix --experimental-features 'nix-command' "$arg" --help 1>/dev/null
expect 1 nix --experimental-features '' "$arg" --help 1>/dev/null
done

View file

@ -21,7 +21,7 @@ drvPath2=$(nix derivation add < $TEST_HOME/impure-drv.json)
[[ "$drvPath" = "$drvPath2" ]]
# But only with the experimental feature!
expectStderr 1 nix derivation add < $TEST_HOME/impure-drv.json --experimental-features nix-command | grepQuiet "experimental Nix feature 'impure-derivations' is disabled"
expectStderr 1 nix derivation add < $TEST_HOME/impure-drv.json --experimental-features '' | grepQuiet "experimental Nix feature 'impure-derivations' is disabled"
nix build --dry-run --json --file ./impure-derivations.nix impure.all
json=$(nix build -L --no-link --json --file ./impure-derivations.nix impure.all)

View file

@ -14,7 +14,7 @@ mkDerivation rec {
buildCommand = ''
mkdir $out
opts="--experimental-features nix-command ${if (NIX_TESTS_CA_BY_DEFAULT == "1") then "--extra-experimental-features ca-derivations" else ""}"
opts="${if (NIX_TESTS_CA_BY_DEFAULT == "1") then "--extra-experimental-features ca-derivations" else ""}"
PATH=${builtins.getEnv "NIX_BIN_DIR"}:$PATH

View file

@ -13,7 +13,7 @@ rm -f $TEST_ROOT/result
export unreachable=$(nix store add-path ./recursive.sh)
NIX_BIN_DIR=$(dirname $(type -p nix)) nix --extra-experimental-features 'nix-command recursive-nix' build -o $TEST_ROOT/result -L --impure --file ./recursive.nix
NIX_BIN_DIR=$(dirname $(type -p nix)) nix --extra-experimental-features 'recursive-nix' build -o $TEST_ROOT/result -L --impure --file ./recursive.nix
[[ $(cat $TEST_ROOT/result/inner1) =~ blaat ]]

View file

@ -224,7 +224,7 @@ let
source /etc/bashrc || true
nix-env --version
nix --extra-experimental-features nix-command store info
nix store info
out=\$(nix-build --no-substitute -E 'derivation { name = "foo"; system = "x86_64-linux"; builder = "/bin/sh"; args = ["-c" "echo foobar > \$out"]; }')
[[ \$(cat \$out) = foobar ]]

View file

@ -10,8 +10,6 @@
users.users.alice.isNormalUser = true;
users.users.bob.isNormalUser = true;
users.users.mallory.isNormalUser = true;
nix.settings.experimental-features = "nix-command";
};
testScript =

View file

@ -18,7 +18,7 @@
nix.settings.substituters = lib.mkForce [ ];
nix.extraOptions =
''
extra-experimental-features = nix-command auto-allocate-uids cgroups
extra-experimental-features = auto-allocate-uids cgroups
extra-system-features = uid-range
'';
nix.nixPath = [ "nixpkgs=${nixpkgs}" ];

View file

@ -74,7 +74,6 @@ in
environment.variables = {
_NIX_FORCE_HTTP = "1";
};
nix.settings.experimental-features = ["nix-command" "flakes"];
};
setupScript = ''
'';

View file

@ -20,7 +20,6 @@
{
programs.ssh.extraConfig = "ConnectTimeout 30";
environment.systemPackages = [ pkgs.git ];
nix.extraOptions = "experimental-features = nix-command flakes";
};
};

View file

@ -143,7 +143,6 @@ in
virtualisation.additionalPaths = [ pkgs.hello pkgs.fuse ];
virtualisation.memorySize = 4096;
nix.settings.substituters = lib.mkForce [ ];
nix.extraOptions = "experimental-features = nix-command";
networking.hosts.${(builtins.head nodes.github.networking.interfaces.eth1.ipv4.addresses).address} =
[ "channels.nixos.org" "api.github.com" "github.com" ];
security.pki.certificateFiles = [ "${cert}/ca.crt" ];

View file

@ -23,7 +23,6 @@ in {
{ virtualisation.writableStore = true;
virtualisation.additionalPaths = [ pkgA pkgD.drvPath ];
nix.settings.substituters = lib.mkForce [ ];
nix.settings.experimental-features = [ "nix-command" ];
services.getty.autologinUser = "root";
programs.ssh.extraConfig = ''
Host *

View file

@ -104,7 +104,6 @@ in
virtualisation.memorySize = 4096;
nix.settings.substituters = lib.mkForce [ ];
nix.extraOptions = ''
experimental-features = nix-command
flake-registry = https://git.sr.ht/~NixOS/flake-registry/blob/master/flake-registry.json
'';
environment.systemPackages = [ pkgs.jq ];

View file

@ -51,7 +51,6 @@ in
virtualisation.additionalPaths = [ pkgs.hello pkgs.fuse ];
virtualisation.memorySize = 4096;
nix.settings.substituters = lib.mkForce [ ];
nix.extraOptions = "experimental-features = nix-command";
};
};

View file

@ -10,7 +10,7 @@ runCommand "repl-completion" {
];
expectScript = ''
# Regression https://github.com/NixOS/nix/pull/10778
spawn nix repl --offline --extra-experimental-features nix-command
spawn nix repl --offline
expect "nix-repl>"
send "foo = import ./does-not-exist.nix\n"
expect "nix-repl>"
@ -37,4 +37,4 @@ runCommand "repl-completion" {
nix-store --init
expect $expectScriptPath
touch $out
''
''