2012-07-18 18:59:03 +00:00
|
|
|
#pragma once
|
2003-06-16 13:33:38 +00:00
|
|
|
|
2006-09-04 21:06:23 +00:00
|
|
|
#include "types.hh"
|
2017-04-13 18:53:23 +00:00
|
|
|
#include "config.hh"
|
2017-10-23 17:34:49 +00:00
|
|
|
#include "util.hh"
|
2006-09-04 21:06:23 +00:00
|
|
|
|
2012-07-30 23:55:41 +00:00
|
|
|
#include <map>
|
2017-09-05 18:43:42 +00:00
|
|
|
#include <limits>
|
2012-07-30 23:55:41 +00:00
|
|
|
|
2017-09-05 18:43:42 +00:00
|
|
|
#include <sys/types.h>
|
2006-09-04 21:06:23 +00:00
|
|
|
|
|
|
|
namespace nix {
|
2003-06-16 13:33:38 +00:00
|
|
|
|
2017-04-13 18:53:23 +00:00
|
|
|
typedef enum { smEnabled, smRelaxed, smDisabled } SandboxMode;
|
2003-06-16 13:33:38 +00:00
|
|
|
|
2017-04-20 14:52:53 +00:00
|
|
|
struct MaxBuildJobsSetting : public BaseSetting<unsigned int>
|
|
|
|
{
|
|
|
|
MaxBuildJobsSetting(Config * options,
|
|
|
|
unsigned int def,
|
|
|
|
const std::string & name,
|
|
|
|
const std::string & description,
|
|
|
|
const std::set<std::string> & aliases = {})
|
|
|
|
: BaseSetting<unsigned int>(def, name, description, aliases)
|
|
|
|
{
|
|
|
|
options->addSetting(this);
|
|
|
|
}
|
|
|
|
|
|
|
|
void set(const std::string & str) override;
|
|
|
|
};
|
|
|
|
|
2017-04-13 18:53:23 +00:00
|
|
|
class Settings : public Config {
|
2012-07-31 22:19:44 +00:00
|
|
|
|
2017-04-13 18:53:23 +00:00
|
|
|
unsigned int getDefaultCores();
|
2012-07-30 23:55:41 +00:00
|
|
|
|
2018-09-28 13:57:27 +00:00
|
|
|
StringSet getDefaultSystemFeatures();
|
|
|
|
|
2019-12-20 20:40:23 +00:00
|
|
|
bool isWSL1();
|
|
|
|
|
2017-04-13 18:53:23 +00:00
|
|
|
public:
|
2012-07-30 23:55:41 +00:00
|
|
|
|
2017-04-13 18:53:23 +00:00
|
|
|
Settings();
|
2012-07-30 23:55:41 +00:00
|
|
|
|
2017-04-13 18:53:23 +00:00
|
|
|
Path nixPrefix;
|
Explicitly model all settings and fail on unrecognized ones
Previously, the Settings class allowed other code to query for string
properties, which led to a proliferation of code all over the place making
up new options without any sort of central registry of valid options. This
commit pulls all those options back into the central Settings class and
removes the public get() methods, to discourage future abuses like that.
Furthermore, because we know the full set of options ahead of time, we
now fail loudly if someone enters an unrecognized option, thus preventing
subtle typos. With some template fun, we could probably also dump the full
set of options (with documentation, defaults, etc.) to the command line,
but I'm not doing that yet here.
2017-02-22 03:50:18 +00:00
|
|
|
|
2012-07-30 23:55:41 +00:00
|
|
|
/* The directory where we store sources and derived files. */
|
|
|
|
Path nixStore;
|
|
|
|
|
|
|
|
Path nixDataDir; /* !!! fix */
|
|
|
|
|
|
|
|
/* The directory where we log various operations. */
|
|
|
|
Path nixLogDir;
|
|
|
|
|
|
|
|
/* The directory where state is stored. */
|
|
|
|
Path nixStateDir;
|
|
|
|
|
2020-03-30 13:31:14 +00:00
|
|
|
/* The directory where system configuration files are stored. */
|
2012-07-30 23:55:41 +00:00
|
|
|
Path nixConfDir;
|
|
|
|
|
2020-03-30 13:31:14 +00:00
|
|
|
/* A list of user configuration files to load. */
|
|
|
|
std::vector<Path> nixUserConfFiles;
|
|
|
|
|
2012-07-30 23:55:41 +00:00
|
|
|
/* The directory where internal helper programs are stored. */
|
|
|
|
Path nixLibexecDir;
|
|
|
|
|
|
|
|
/* The directory where the main programs are stored. */
|
|
|
|
Path nixBinDir;
|
|
|
|
|
2018-02-14 22:05:55 +00:00
|
|
|
/* The directory where the man pages are stored. */
|
|
|
|
Path nixManDir;
|
|
|
|
|
2013-03-08 00:24:59 +00:00
|
|
|
/* File name of the socket the daemon listens to. */
|
|
|
|
Path nixDaemonSocketFile;
|
|
|
|
|
2019-11-22 15:06:44 +00:00
|
|
|
Setting<std::string> storeUri{this, getEnv("NIX_REMOTE").value_or("auto"), "store",
|
2017-10-23 17:34:49 +00:00
|
|
|
"The default Nix store to use."};
|
|
|
|
|
2017-04-13 18:53:23 +00:00
|
|
|
Setting<bool> keepFailed{this, false, "keep-failed",
|
|
|
|
"Whether to keep temporary directories of failed builds."};
|
2012-07-30 23:55:41 +00:00
|
|
|
|
2017-04-13 18:53:23 +00:00
|
|
|
Setting<bool> keepGoing{this, false, "keep-going",
|
|
|
|
"Whether to keep building derivations when another build fails."};
|
2012-07-30 23:55:41 +00:00
|
|
|
|
2017-08-31 12:28:25 +00:00
|
|
|
Setting<bool> tryFallback{this, false, "fallback",
|
|
|
|
"Whether to fall back to building when substitution fails.",
|
|
|
|
{"build-fallback"}};
|
2012-07-30 23:55:41 +00:00
|
|
|
|
2016-04-25 14:47:46 +00:00
|
|
|
/* Whether to show build log output in real time. */
|
|
|
|
bool verboseBuild = true;
|
|
|
|
|
2018-10-22 10:14:02 +00:00
|
|
|
Setting<size_t> logLines{this, 10, "log-lines",
|
|
|
|
"If verbose-build is false, the number of lines of the tail of "
|
|
|
|
"the log to show if a build fails."};
|
2003-06-16 13:33:38 +00:00
|
|
|
|
2017-08-31 12:28:25 +00:00
|
|
|
MaxBuildJobsSetting maxBuildJobs{this, 1, "max-jobs",
|
|
|
|
"Maximum number of parallel build jobs. \"auto\" means use number of cores.",
|
|
|
|
{"build-max-jobs"}};
|
2003-06-16 13:33:38 +00:00
|
|
|
|
2017-08-31 12:28:25 +00:00
|
|
|
Setting<unsigned int> buildCores{this, getDefaultCores(), "cores",
|
2017-04-13 18:53:23 +00:00
|
|
|
"Number of CPU cores to utilize in parallel within a build, "
|
|
|
|
"i.e. by passing this number to Make via '-j'. 0 means that the "
|
|
|
|
"number of actual CPU cores on the local host ought to be "
|
2017-08-31 12:28:25 +00:00
|
|
|
"auto-detected.", {"build-cores"}};
|
2003-07-10 13:41:28 +00:00
|
|
|
|
2012-07-30 23:55:41 +00:00
|
|
|
/* Read-only mode. Don't copy stuff to the store, don't change
|
|
|
|
the database. */
|
2017-04-13 18:53:23 +00:00
|
|
|
bool readOnlyMode = false;
|
2003-07-31 13:47:13 +00:00
|
|
|
|
2017-04-13 18:53:23 +00:00
|
|
|
Setting<std::string> thisSystem{this, SYSTEM, "system",
|
|
|
|
"The canonical Nix system name."};
|
2005-02-01 22:07:48 +00:00
|
|
|
|
2017-08-31 12:28:25 +00:00
|
|
|
Setting<time_t> maxSilentTime{this, 0, "max-silent-time",
|
2017-04-13 18:53:23 +00:00
|
|
|
"The maximum time in seconds that a builer can go without "
|
|
|
|
"producing any output on stdout/stderr before it is killed. "
|
2017-08-31 12:28:25 +00:00
|
|
|
"0 means infinity.",
|
|
|
|
{"build-max-silent-time"}};
|
2006-12-04 13:09:16 +00:00
|
|
|
|
2017-08-31 12:28:25 +00:00
|
|
|
Setting<time_t> buildTimeout{this, 0, "timeout",
|
2017-04-13 18:53:23 +00:00
|
|
|
"The maximum duration in seconds that a builder can run. "
|
2017-08-31 12:28:25 +00:00
|
|
|
"0 means infinity.", {"build-timeout"}};
|
2004-06-25 15:36:09 +00:00
|
|
|
|
2017-05-01 13:46:47 +00:00
|
|
|
PathSetting buildHook{this, true, nixLibexecDir + "/nix/build-remote", "build-hook",
|
|
|
|
"The path of the helper program that executes builds to remote machines."};
|
|
|
|
|
2017-10-24 08:52:34 +00:00
|
|
|
Setting<std::string> builders{this, "@" + nixConfDir + "/machines", "builders",
|
2017-05-02 11:44:10 +00:00
|
|
|
"A semicolon-separated list of build machines, in the format of nix.machines."};
|
|
|
|
|
2018-01-09 21:40:07 +00:00
|
|
|
Setting<bool> buildersUseSubstitutes{this, false, "builders-use-substitutes",
|
|
|
|
"Whether build machines should use their own substitutes for obtaining "
|
|
|
|
"build dependencies if possible, rather than waiting for this host to "
|
|
|
|
"upload them."};
|
|
|
|
|
2017-04-13 18:53:23 +00:00
|
|
|
Setting<off_t> reservedSize{this, 8 * 1024 * 1024, "gc-reserved-space",
|
|
|
|
"Amount of reserved disk space for the garbage collector."};
|
2004-01-13 16:35:43 +00:00
|
|
|
|
2017-04-13 18:53:23 +00:00
|
|
|
Setting<bool> fsyncMetadata{this, true, "fsync-metadata",
|
|
|
|
"Whether SQLite should use fsync()."};
|
2004-05-12 14:20:32 +00:00
|
|
|
|
2019-12-20 20:40:23 +00:00
|
|
|
Setting<bool> useSQLiteWAL{this, !isWSL1(), "use-sqlite-wal",
|
2017-04-13 18:53:23 +00:00
|
|
|
"Whether SQLite should use WAL mode."};
|
2010-06-23 14:34:08 +00:00
|
|
|
|
2017-04-13 18:53:23 +00:00
|
|
|
Setting<bool> syncBeforeRegistering{this, false, "sync-before-registering",
|
|
|
|
"Whether to call sync() before registering a path as valid."};
|
2004-10-25 14:38:23 +00:00
|
|
|
|
2018-01-04 15:57:25 +00:00
|
|
|
Setting<bool> useSubstitutes{this, true, "substitute",
|
2017-08-31 12:28:25 +00:00
|
|
|
"Whether to use substitutes.",
|
|
|
|
{"build-use-substitutes"}};
|
2014-02-08 05:05:46 +00:00
|
|
|
|
2017-04-13 18:53:23 +00:00
|
|
|
Setting<std::string> buildUsersGroup{this, "", "build-users-group",
|
|
|
|
"The Unix group that contains the build users."};
|
2014-02-19 12:05:15 +00:00
|
|
|
|
2017-08-31 12:28:25 +00:00
|
|
|
Setting<bool> impersonateLinux26{this, false, "impersonate-linux-26",
|
|
|
|
"Whether to impersonate a Linux 2.6 machine on newer kernels.",
|
|
|
|
{"build-impersonate-linux-26"}};
|
2011-06-30 15:19:13 +00:00
|
|
|
|
2017-08-31 12:28:25 +00:00
|
|
|
Setting<bool> keepLog{this, true, "keep-build-log",
|
|
|
|
"Whether to store build logs.",
|
|
|
|
{"build-keep-log"}};
|
2007-08-12 00:29:28 +00:00
|
|
|
|
2017-08-31 12:28:25 +00:00
|
|
|
Setting<bool> compressLog{this, true, "compress-build-log",
|
|
|
|
"Whether to compress logs.",
|
|
|
|
{"build-compress-log"}};
|
2007-11-16 16:15:26 +00:00
|
|
|
|
2017-08-31 12:28:25 +00:00
|
|
|
Setting<unsigned long> maxLogSize{this, 0, "max-build-log-size",
|
2017-04-13 18:53:23 +00:00
|
|
|
"Maximum number of bytes a builder can write to stdout/stderr "
|
2017-08-31 12:28:25 +00:00
|
|
|
"before being killed (0 means no limit).",
|
|
|
|
{"build-max-log-size"}};
|
2013-09-02 09:58:18 +00:00
|
|
|
|
2017-08-31 12:28:25 +00:00
|
|
|
/* When buildRepeat > 0 and verboseBuild == true, whether to print
|
|
|
|
repeated builds (i.e. builds other than the first one) to
|
2016-12-06 16:43:39 +00:00
|
|
|
stderr. Hack to prevent Hydra logs from being polluted. */
|
|
|
|
bool printRepeatedBuilds = true;
|
|
|
|
|
2017-04-13 18:53:23 +00:00
|
|
|
Setting<unsigned int> pollInterval{this, 5, "build-poll-interval",
|
|
|
|
"How often (in seconds) to poll for locks."};
|
2008-11-12 11:08:27 +00:00
|
|
|
|
2017-04-13 18:53:23 +00:00
|
|
|
Setting<bool> checkRootReachability{this, false, "gc-check-reachability",
|
|
|
|
"Whether to check if new GC roots can in fact be found by the "
|
|
|
|
"garbage collector."};
|
2008-11-12 11:08:27 +00:00
|
|
|
|
2017-08-31 12:28:25 +00:00
|
|
|
Setting<bool> gcKeepOutputs{this, false, "keep-outputs",
|
|
|
|
"Whether the garbage collector should keep outputs of live derivations.",
|
|
|
|
{"gc-keep-outputs"}};
|
2003-08-19 09:04:47 +00:00
|
|
|
|
2017-08-31 12:28:25 +00:00
|
|
|
Setting<bool> gcKeepDerivations{this, true, "keep-derivations",
|
|
|
|
"Whether the garbage collector should keep derivers of live paths.",
|
|
|
|
{"gc-keep-derivations"}};
|
2005-02-01 22:07:48 +00:00
|
|
|
|
2017-04-13 18:53:23 +00:00
|
|
|
Setting<bool> autoOptimiseStore{this, false, "auto-optimise-store",
|
|
|
|
"Whether to automatically replace files with identical contents with hard links."};
|
2006-02-16 13:58:10 +00:00
|
|
|
|
2017-08-31 12:28:25 +00:00
|
|
|
Setting<bool> envKeepDerivations{this, false, "keep-env-derivations",
|
2017-04-13 18:53:23 +00:00
|
|
|
"Whether to add derivations as a dependency of user environments "
|
2017-08-31 12:28:25 +00:00
|
|
|
"(to prevent them from being GCed).",
|
|
|
|
{"env-keep-derivations"}};
|
2005-02-14 13:07:09 +00:00
|
|
|
|
2013-09-06 14:36:56 +00:00
|
|
|
/* Whether to lock the Nix client and worker to the same CPU. */
|
|
|
|
bool lockCPU;
|
|
|
|
|
2018-11-07 16:08:28 +00:00
|
|
|
Setting<SandboxMode> sandboxMode{this,
|
|
|
|
#if __linux__
|
|
|
|
smEnabled
|
|
|
|
#else
|
|
|
|
smDisabled
|
|
|
|
#endif
|
|
|
|
, "sandbox",
|
2017-04-13 18:53:23 +00:00
|
|
|
"Whether to enable sandboxed builds. Can be \"true\", \"false\" or \"relaxed\".",
|
2017-08-31 12:28:25 +00:00
|
|
|
{"build-use-chroot", "build-use-sandbox"}};
|
Explicitly model all settings and fail on unrecognized ones
Previously, the Settings class allowed other code to query for string
properties, which led to a proliferation of code all over the place making
up new options without any sort of central registry of valid options. This
commit pulls all those options back into the central Settings class and
removes the public get() methods, to discourage future abuses like that.
Furthermore, because we know the full set of options ahead of time, we
now fail loudly if someone enters an unrecognized option, thus preventing
subtle typos. With some template fun, we could probably also dump the full
set of options (with documentation, defaults, etc.) to the command line,
but I'm not doing that yet here.
2017-02-22 03:50:18 +00:00
|
|
|
|
2017-08-31 12:28:25 +00:00
|
|
|
Setting<PathSet> sandboxPaths{this, {}, "sandbox-paths",
|
2017-04-13 18:53:23 +00:00
|
|
|
"The paths to make available inside the build sandbox.",
|
2017-08-31 12:28:25 +00:00
|
|
|
{"build-chroot-dirs", "build-sandbox-paths"}};
|
Explicitly model all settings and fail on unrecognized ones
Previously, the Settings class allowed other code to query for string
properties, which led to a proliferation of code all over the place making
up new options without any sort of central registry of valid options. This
commit pulls all those options back into the central Settings class and
removes the public get() methods, to discourage future abuses like that.
Furthermore, because we know the full set of options ahead of time, we
now fail loudly if someone enters an unrecognized option, thus preventing
subtle typos. With some template fun, we could probably also dump the full
set of options (with documentation, defaults, etc.) to the command line,
but I'm not doing that yet here.
2017-02-22 03:50:18 +00:00
|
|
|
|
2019-07-25 18:29:58 +00:00
|
|
|
Setting<bool> sandboxFallback{this, true, "sandbox-fallback",
|
|
|
|
"Whether to disable sandboxing when the kernel doesn't allow it."};
|
|
|
|
|
2017-08-31 12:28:25 +00:00
|
|
|
Setting<PathSet> extraSandboxPaths{this, {}, "extra-sandbox-paths",
|
2017-04-13 18:53:23 +00:00
|
|
|
"Additional paths to make available inside the build sandbox.",
|
2017-08-31 12:28:25 +00:00
|
|
|
{"build-extra-chroot-dirs", "build-extra-sandbox-paths"}};
|
Explicitly model all settings and fail on unrecognized ones
Previously, the Settings class allowed other code to query for string
properties, which led to a proliferation of code all over the place making
up new options without any sort of central registry of valid options. This
commit pulls all those options back into the central Settings class and
removes the public get() methods, to discourage future abuses like that.
Furthermore, because we know the full set of options ahead of time, we
now fail loudly if someone enters an unrecognized option, thus preventing
subtle typos. With some template fun, we could probably also dump the full
set of options (with documentation, defaults, etc.) to the command line,
but I'm not doing that yet here.
2017-02-22 03:50:18 +00:00
|
|
|
|
2017-08-31 12:28:25 +00:00
|
|
|
Setting<size_t> buildRepeat{this, 0, "repeat",
|
|
|
|
"The number of times to repeat a build in order to verify determinism.",
|
|
|
|
{"build-repeat"}};
|
Explicitly model all settings and fail on unrecognized ones
Previously, the Settings class allowed other code to query for string
properties, which led to a proliferation of code all over the place making
up new options without any sort of central registry of valid options. This
commit pulls all those options back into the central Settings class and
removes the public get() methods, to discourage future abuses like that.
Furthermore, because we know the full set of options ahead of time, we
now fail loudly if someone enters an unrecognized option, thus preventing
subtle typos. With some template fun, we could probably also dump the full
set of options (with documentation, defaults, etc.) to the command line,
but I'm not doing that yet here.
2017-02-22 03:50:18 +00:00
|
|
|
|
2017-04-13 18:53:23 +00:00
|
|
|
#if __linux__
|
|
|
|
Setting<std::string> sandboxShmSize{this, "50%", "sandbox-dev-shm-size",
|
|
|
|
"The size of /dev/shm in the build sandbox."};
|
2017-05-05 15:45:22 +00:00
|
|
|
|
|
|
|
Setting<Path> sandboxBuildDir{this, "/build", "sandbox-build-dir",
|
|
|
|
"The build directory inside the sandbox."};
|
2017-04-13 18:53:23 +00:00
|
|
|
#endif
|
Explicitly model all settings and fail on unrecognized ones
Previously, the Settings class allowed other code to query for string
properties, which led to a proliferation of code all over the place making
up new options without any sort of central registry of valid options. This
commit pulls all those options back into the central Settings class and
removes the public get() methods, to discourage future abuses like that.
Furthermore, because we know the full set of options ahead of time, we
now fail loudly if someone enters an unrecognized option, thus preventing
subtle typos. With some template fun, we could probably also dump the full
set of options (with documentation, defaults, etc.) to the command line,
but I'm not doing that yet here.
2017-02-22 03:50:18 +00:00
|
|
|
|
2017-04-13 18:53:23 +00:00
|
|
|
Setting<PathSet> allowedImpureHostPrefixes{this, {}, "allowed-impure-host-deps",
|
|
|
|
"Which prefixes to allow derivations to ask for access to (primarily for Darwin)."};
|
Explicitly model all settings and fail on unrecognized ones
Previously, the Settings class allowed other code to query for string
properties, which led to a proliferation of code all over the place making
up new options without any sort of central registry of valid options. This
commit pulls all those options back into the central Settings class and
removes the public get() methods, to discourage future abuses like that.
Furthermore, because we know the full set of options ahead of time, we
now fail loudly if someone enters an unrecognized option, thus preventing
subtle typos. With some template fun, we could probably also dump the full
set of options (with documentation, defaults, etc.) to the command line,
but I'm not doing that yet here.
2017-02-22 03:50:18 +00:00
|
|
|
|
2017-04-13 18:53:23 +00:00
|
|
|
#if __APPLE__
|
|
|
|
Setting<bool> darwinLogSandboxViolations{this, false, "darwin-log-sandbox-violations",
|
|
|
|
"Whether to log Darwin sandbox access violations to the system log."};
|
|
|
|
#endif
|
Explicitly model all settings and fail on unrecognized ones
Previously, the Settings class allowed other code to query for string
properties, which led to a proliferation of code all over the place making
up new options without any sort of central registry of valid options. This
commit pulls all those options back into the central Settings class and
removes the public get() methods, to discourage future abuses like that.
Furthermore, because we know the full set of options ahead of time, we
now fail loudly if someone enters an unrecognized option, thus preventing
subtle typos. With some template fun, we could probably also dump the full
set of options (with documentation, defaults, etc.) to the command line,
but I'm not doing that yet here.
2017-02-22 03:50:18 +00:00
|
|
|
|
2017-04-13 18:53:23 +00:00
|
|
|
Setting<bool> runDiffHook{this, false, "run-diff-hook",
|
|
|
|
"Whether to run the program specified by the diff-hook setting "
|
|
|
|
"repeated builds produce a different result. Typically used to "
|
|
|
|
"plug in diffoscope."};
|
Explicitly model all settings and fail on unrecognized ones
Previously, the Settings class allowed other code to query for string
properties, which led to a proliferation of code all over the place making
up new options without any sort of central registry of valid options. This
commit pulls all those options back into the central Settings class and
removes the public get() methods, to discourage future abuses like that.
Furthermore, because we know the full set of options ahead of time, we
now fail loudly if someone enters an unrecognized option, thus preventing
subtle typos. With some template fun, we could probably also dump the full
set of options (with documentation, defaults, etc.) to the command line,
but I'm not doing that yet here.
2017-02-22 03:50:18 +00:00
|
|
|
|
2017-04-13 18:53:23 +00:00
|
|
|
PathSetting diffHook{this, true, "", "diff-hook",
|
|
|
|
"A program that prints out the differences between the two paths "
|
|
|
|
"specified on its command line."};
|
Explicitly model all settings and fail on unrecognized ones
Previously, the Settings class allowed other code to query for string
properties, which led to a proliferation of code all over the place making
up new options without any sort of central registry of valid options. This
commit pulls all those options back into the central Settings class and
removes the public get() methods, to discourage future abuses like that.
Furthermore, because we know the full set of options ahead of time, we
now fail loudly if someone enters an unrecognized option, thus preventing
subtle typos. With some template fun, we could probably also dump the full
set of options (with documentation, defaults, etc.) to the command line,
but I'm not doing that yet here.
2017-02-22 03:50:18 +00:00
|
|
|
|
2017-04-13 18:53:23 +00:00
|
|
|
Setting<bool> enforceDeterminism{this, true, "enforce-determinism",
|
|
|
|
"Whether to fail if repeated builds produce different output."};
|
Explicitly model all settings and fail on unrecognized ones
Previously, the Settings class allowed other code to query for string
properties, which led to a proliferation of code all over the place making
up new options without any sort of central registry of valid options. This
commit pulls all those options back into the central Settings class and
removes the public get() methods, to discourage future abuses like that.
Furthermore, because we know the full set of options ahead of time, we
now fail loudly if someone enters an unrecognized option, thus preventing
subtle typos. With some template fun, we could probably also dump the full
set of options (with documentation, defaults, etc.) to the command line,
but I'm not doing that yet here.
2017-02-22 03:50:18 +00:00
|
|
|
|
2017-11-20 16:29:54 +00:00
|
|
|
Setting<Strings> trustedPublicKeys{this,
|
2017-04-13 18:53:23 +00:00
|
|
|
{"cache.nixos.org-1:6NCHdD59X431o0gWypbMrAURkbJ16ZPMQFGspcDShjY="},
|
2017-11-20 16:29:54 +00:00
|
|
|
"trusted-public-keys",
|
|
|
|
"Trusted public keys for secure substitution.",
|
|
|
|
{"binary-cache-public-keys"}};
|
Explicitly model all settings and fail on unrecognized ones
Previously, the Settings class allowed other code to query for string
properties, which led to a proliferation of code all over the place making
up new options without any sort of central registry of valid options. This
commit pulls all those options back into the central Settings class and
removes the public get() methods, to discourage future abuses like that.
Furthermore, because we know the full set of options ahead of time, we
now fail loudly if someone enters an unrecognized option, thus preventing
subtle typos. With some template fun, we could probably also dump the full
set of options (with documentation, defaults, etc.) to the command line,
but I'm not doing that yet here.
2017-02-22 03:50:18 +00:00
|
|
|
|
2017-04-13 18:53:23 +00:00
|
|
|
Setting<Strings> secretKeyFiles{this, {}, "secret-key-files",
|
|
|
|
"Secret keys with which to sign local builds."};
|
Explicitly model all settings and fail on unrecognized ones
Previously, the Settings class allowed other code to query for string
properties, which led to a proliferation of code all over the place making
up new options without any sort of central registry of valid options. This
commit pulls all those options back into the central Settings class and
removes the public get() methods, to discourage future abuses like that.
Furthermore, because we know the full set of options ahead of time, we
now fail loudly if someone enters an unrecognized option, thus preventing
subtle typos. With some template fun, we could probably also dump the full
set of options (with documentation, defaults, etc.) to the command line,
but I'm not doing that yet here.
2017-02-22 03:50:18 +00:00
|
|
|
|
2017-04-13 18:53:23 +00:00
|
|
|
Setting<unsigned int> tarballTtl{this, 60 * 60, "tarball-ttl",
|
2019-06-17 06:43:45 +00:00
|
|
|
"How long downloaded files are considered up-to-date."};
|
Explicitly model all settings and fail on unrecognized ones
Previously, the Settings class allowed other code to query for string
properties, which led to a proliferation of code all over the place making
up new options without any sort of central registry of valid options. This
commit pulls all those options back into the central Settings class and
removes the public get() methods, to discourage future abuses like that.
Furthermore, because we know the full set of options ahead of time, we
now fail loudly if someone enters an unrecognized option, thus preventing
subtle typos. With some template fun, we could probably also dump the full
set of options (with documentation, defaults, etc.) to the command line,
but I'm not doing that yet here.
2017-02-22 03:50:18 +00:00
|
|
|
|
2018-01-26 16:10:52 +00:00
|
|
|
Setting<bool> requireSigs{this, true, "require-sigs",
|
2017-11-20 16:44:07 +00:00
|
|
|
"Whether to check that any non-content-addressed path added to the "
|
|
|
|
"Nix store has a valid signature (that is, one signed using a key "
|
|
|
|
"listed in 'trusted-public-keys'."};
|
|
|
|
|
2018-03-16 22:50:27 +00:00
|
|
|
Setting<StringSet> extraPlatforms{this,
|
2020-06-09 21:53:53 +00:00
|
|
|
std::string{SYSTEM} == "x86_64-linux" && !isWSL1() ? StringSet{"i686-linux"} : StringSet{},
|
2018-03-16 22:50:27 +00:00
|
|
|
"extra-platforms",
|
|
|
|
"Additional platforms that can be built on the local system. "
|
|
|
|
"These may be supported natively (e.g. armv7 on some aarch64 CPUs "
|
|
|
|
"or using hacks like qemu-user."};
|
2018-02-20 12:34:50 +00:00
|
|
|
|
2018-09-28 13:57:27 +00:00
|
|
|
Setting<StringSet> systemFeatures{this, getDefaultSystemFeatures(),
|
|
|
|
"system-features",
|
|
|
|
"Optional features that this system implements (like \"kvm\")."};
|
|
|
|
|
2017-04-13 18:53:23 +00:00
|
|
|
Setting<Strings> substituters{this,
|
|
|
|
nixStore == "/nix/store" ? Strings{"https://cache.nixos.org/"} : Strings(),
|
|
|
|
"substituters",
|
|
|
|
"The URIs of substituters (such as https://cache.nixos.org/).",
|
|
|
|
{"binary-caches"}};
|
Explicitly model all settings and fail on unrecognized ones
Previously, the Settings class allowed other code to query for string
properties, which led to a proliferation of code all over the place making
up new options without any sort of central registry of valid options. This
commit pulls all those options back into the central Settings class and
removes the public get() methods, to discourage future abuses like that.
Furthermore, because we know the full set of options ahead of time, we
now fail loudly if someone enters an unrecognized option, thus preventing
subtle typos. With some template fun, we could probably also dump the full
set of options (with documentation, defaults, etc.) to the command line,
but I'm not doing that yet here.
2017-02-22 03:50:18 +00:00
|
|
|
|
2017-04-13 18:53:23 +00:00
|
|
|
// FIXME: provide a way to add to option values.
|
|
|
|
Setting<Strings> extraSubstituters{this, {}, "extra-substituters",
|
|
|
|
"Additional URIs of substituters.",
|
|
|
|
{"extra-binary-caches"}};
|
Explicitly model all settings and fail on unrecognized ones
Previously, the Settings class allowed other code to query for string
properties, which led to a proliferation of code all over the place making
up new options without any sort of central registry of valid options. This
commit pulls all those options back into the central Settings class and
removes the public get() methods, to discourage future abuses like that.
Furthermore, because we know the full set of options ahead of time, we
now fail loudly if someone enters an unrecognized option, thus preventing
subtle typos. With some template fun, we could probably also dump the full
set of options (with documentation, defaults, etc.) to the command line,
but I'm not doing that yet here.
2017-02-22 03:50:18 +00:00
|
|
|
|
2017-04-20 11:20:49 +00:00
|
|
|
Setting<StringSet> trustedSubstituters{this, {}, "trusted-substituters",
|
|
|
|
"Disabled substituters that may be enabled via the substituters option by untrusted users.",
|
|
|
|
{"trusted-binary-caches"}};
|
|
|
|
|
2017-04-13 18:53:23 +00:00
|
|
|
Setting<Strings> trustedUsers{this, {"root"}, "trusted-users",
|
|
|
|
"Which users or groups are trusted to ask the daemon to do unsafe things."};
|
Explicitly model all settings and fail on unrecognized ones
Previously, the Settings class allowed other code to query for string
properties, which led to a proliferation of code all over the place making
up new options without any sort of central registry of valid options. This
commit pulls all those options back into the central Settings class and
removes the public get() methods, to discourage future abuses like that.
Furthermore, because we know the full set of options ahead of time, we
now fail loudly if someone enters an unrecognized option, thus preventing
subtle typos. With some template fun, we could probably also dump the full
set of options (with documentation, defaults, etc.) to the command line,
but I'm not doing that yet here.
2017-02-22 03:50:18 +00:00
|
|
|
|
2018-04-06 10:05:15 +00:00
|
|
|
Setting<unsigned int> ttlNegativeNarInfoCache{this, 3600, "narinfo-cache-negative-ttl",
|
2018-04-02 16:41:49 +00:00
|
|
|
"The TTL in seconds for negative lookups in the disk cache i.e binary cache lookups that "
|
|
|
|
"return an invalid path result"};
|
|
|
|
|
2018-04-06 10:05:15 +00:00
|
|
|
Setting<unsigned int> ttlPositiveNarInfoCache{this, 30 * 24 * 3600, "narinfo-cache-positive-ttl",
|
2018-04-02 16:41:49 +00:00
|
|
|
"The TTL in seconds for positive lookups in the disk cache i.e binary cache lookups that "
|
|
|
|
"return a valid path result."};
|
|
|
|
|
Explicitly model all settings and fail on unrecognized ones
Previously, the Settings class allowed other code to query for string
properties, which led to a proliferation of code all over the place making
up new options without any sort of central registry of valid options. This
commit pulls all those options back into the central Settings class and
removes the public get() methods, to discourage future abuses like that.
Furthermore, because we know the full set of options ahead of time, we
now fail loudly if someone enters an unrecognized option, thus preventing
subtle typos. With some template fun, we could probably also dump the full
set of options (with documentation, defaults, etc.) to the command line,
but I'm not doing that yet here.
2017-02-22 03:50:18 +00:00
|
|
|
/* ?Who we trust to use the daemon in safe ways */
|
2017-04-13 18:53:23 +00:00
|
|
|
Setting<Strings> allowedUsers{this, {"*"}, "allowed-users",
|
|
|
|
"Which users or groups are allowed to connect to the daemon."};
|
Explicitly model all settings and fail on unrecognized ones
Previously, the Settings class allowed other code to query for string
properties, which led to a proliferation of code all over the place making
up new options without any sort of central registry of valid options. This
commit pulls all those options back into the central Settings class and
removes the public get() methods, to discourage future abuses like that.
Furthermore, because we know the full set of options ahead of time, we
now fail loudly if someone enters an unrecognized option, thus preventing
subtle typos. With some template fun, we could probably also dump the full
set of options (with documentation, defaults, etc.) to the command line,
but I'm not doing that yet here.
2017-02-22 03:50:18 +00:00
|
|
|
|
2017-04-13 18:53:23 +00:00
|
|
|
Setting<bool> printMissing{this, true, "print-missing",
|
|
|
|
"Whether to print what paths need to be built or downloaded."};
|
Explicitly model all settings and fail on unrecognized ones
Previously, the Settings class allowed other code to query for string
properties, which led to a proliferation of code all over the place making
up new options without any sort of central registry of valid options. This
commit pulls all those options back into the central Settings class and
removes the public get() methods, to discourage future abuses like that.
Furthermore, because we know the full set of options ahead of time, we
now fail loudly if someone enters an unrecognized option, thus preventing
subtle typos. With some template fun, we could probably also dump the full
set of options (with documentation, defaults, etc.) to the command line,
but I'm not doing that yet here.
2017-02-22 03:50:18 +00:00
|
|
|
|
2020-03-20 20:21:56 +00:00
|
|
|
Setting<std::string> preBuildHook{this, "",
|
2017-04-13 18:53:23 +00:00
|
|
|
"pre-build-hook",
|
|
|
|
"A program to run just before a build to set derivation-specific build settings."};
|
2015-04-18 20:56:02 +00:00
|
|
|
|
2019-07-11 18:23:03 +00:00
|
|
|
Setting<std::string> postBuildHook{this, "", "post-build-hook",
|
2019-12-01 00:04:14 +00:00
|
|
|
"A program to run just after each successful build."};
|
2019-07-11 18:23:03 +00:00
|
|
|
|
2017-04-13 18:53:23 +00:00
|
|
|
Setting<std::string> netrcFile{this, fmt("%s/%s", nixConfDir, "netrc"), "netrc-file",
|
|
|
|
"Path to the netrc file used to obtain usernames/passwords for downloads."};
|
2017-02-16 13:46:36 +00:00
|
|
|
|
2017-03-06 19:30:35 +00:00
|
|
|
/* Path to the SSL CA file used */
|
|
|
|
Path caFile;
|
|
|
|
|
2017-07-04 13:43:06 +00:00
|
|
|
#if __linux__
|
2017-10-12 16:21:55 +00:00
|
|
|
Setting<bool> filterSyscalls{this, true, "filter-syscalls",
|
|
|
|
"Whether to prevent certain dangerous system calls, such as "
|
|
|
|
"creation of setuid/setgid files or adding ACLs or extended "
|
|
|
|
"attributes. Only disable this if you're aware of the "
|
|
|
|
"security implications."};
|
|
|
|
|
2017-07-04 13:43:06 +00:00
|
|
|
Setting<bool> allowNewPrivileges{this, false, "allow-new-privileges",
|
|
|
|
"Whether builders can acquire new privileges by calling programs with "
|
|
|
|
"setuid/setgid bits or with file capabilities."};
|
|
|
|
#endif
|
2017-07-17 11:07:08 +00:00
|
|
|
|
|
|
|
Setting<Strings> hashedMirrors{this, {"http://tarballs.nixos.org/"}, "hashed-mirrors",
|
|
|
|
"A list of servers used by builtins.fetchurl to fetch files by hash."};
|
2017-09-05 18:43:42 +00:00
|
|
|
|
|
|
|
Setting<uint64_t> minFree{this, 0, "min-free",
|
|
|
|
"Automatically run the garbage collector when free disk space drops below the specified amount."};
|
|
|
|
|
|
|
|
Setting<uint64_t> maxFree{this, std::numeric_limits<uint64_t>::max(), "max-free",
|
|
|
|
"Stop deleting garbage when free disk space is above the specified amount."};
|
|
|
|
|
2019-08-02 15:07:33 +00:00
|
|
|
Setting<uint64_t> minFreeCheckInterval{this, 5, "min-free-check-interval",
|
|
|
|
"Number of seconds between checking free disk space."};
|
|
|
|
|
2018-02-08 16:26:18 +00:00
|
|
|
Setting<Paths> pluginFiles{this, {}, "plugin-files",
|
|
|
|
"Plugins to dynamically load at nix initialization time."};
|
2019-10-16 15:45:09 +00:00
|
|
|
|
2020-03-30 14:04:18 +00:00
|
|
|
Setting<std::string> githubAccessToken{this, "", "github-access-token",
|
|
|
|
"GitHub access token to get access to GitHub data through the GitHub API for github:<..> flakes."};
|
|
|
|
|
2019-10-16 15:45:09 +00:00
|
|
|
Setting<Strings> experimentalFeatures{this, {}, "experimental-features",
|
|
|
|
"Experimental Nix features to enable."};
|
|
|
|
|
2019-11-26 18:48:34 +00:00
|
|
|
bool isExperimentalFeatureEnabled(const std::string & name);
|
|
|
|
|
2019-10-16 15:45:09 +00:00
|
|
|
void requireExperimentalFeature(const std::string & name);
|
2020-03-30 14:04:18 +00:00
|
|
|
|
|
|
|
Setting<bool> allowDirty{this, true, "allow-dirty",
|
|
|
|
"Whether to allow dirty Git/Mercurial trees."};
|
|
|
|
|
|
|
|
Setting<bool> warnDirty{this, true, "warn-dirty",
|
|
|
|
"Whether to warn about dirty Git/Mercurial trees."};
|
2018-04-09 21:46:20 +00:00
|
|
|
|
|
|
|
Setting<size_t> narBufferSize{this, 32 * 1024 * 1024, "nar-buffer-size",
|
|
|
|
"Maximum size of NARs before spilling them to disk."};
|
2012-07-30 23:55:41 +00:00
|
|
|
};
|
2008-11-20 12:25:11 +00:00
|
|
|
|
2011-11-22 17:28:41 +00:00
|
|
|
|
2012-07-30 23:55:41 +00:00
|
|
|
// FIXME: don't use a global variable.
|
|
|
|
extern Settings settings;
|
2012-07-30 20:09:54 +00:00
|
|
|
|
2018-02-08 16:26:18 +00:00
|
|
|
/* This should be called after settings are initialized, but before
|
|
|
|
anything else */
|
|
|
|
void initPlugins();
|
|
|
|
|
2018-03-27 16:41:31 +00:00
|
|
|
void loadConfFile();
|
2011-11-22 17:28:41 +00:00
|
|
|
|
2020-03-30 13:31:14 +00:00
|
|
|
// Used by the Settings constructor
|
|
|
|
std::vector<Path> getUserConfigFiles();
|
|
|
|
|
2012-11-27 12:29:55 +00:00
|
|
|
extern const string nixVersion;
|
|
|
|
|
2006-09-04 21:06:23 +00:00
|
|
|
}
|