Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 4 additions & 11 deletions src/libcmd/common-eval-args.cc
Original file line number Diff line number Diff line change
Expand Up @@ -19,13 +19,8 @@

namespace nix {

fetchers::Settings fetchSettings;

static GlobalConfig::Register rFetchSettings(&fetchSettings);

EvalSettings evalSettings{
settings.readOnlyMode,
{
static GlobalConfig::Register rEvalSettings(&evalSettings, [] {
evalSettings.lookupPathHooks = {
{
"flake",
[](EvalState & state, std::string_view rest) {
Expand All @@ -45,10 +40,8 @@ EvalSettings evalSettings{
return state.storePath(storePath);
},
},
},
};

static GlobalConfig::Register rEvalSettings(&evalSettings);
};
});

flake::Settings flakeSettings;

Expand Down
17 changes: 9 additions & 8 deletions src/libexpr-c/nix_api_expr.cc
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
#include "nix/expr/eval-gc.hh"
#include "nix/store/globals.hh"
#include "nix/expr/eval-settings.hh"
#include "nix/fetchers/fetch-settings.hh"
#include "nix/util/ref.hh"

#include "nix_api_expr.h"
Expand Down Expand Up @@ -132,8 +133,8 @@ nix_eval_state_builder * nix_eval_state_builder_new(nix_c_context * context, Sto
return unsafe_new_with_self<nix_eval_state_builder>([&](auto * self) {
return nix_eval_state_builder{
.store = nix::ref<nix::Store>(store->ptr),
.settings = nix::EvalSettings{/* &bool */ self->readOnlyMode},
.fetchSettings = nix::fetchers::Settings{},
.settings = &nix::evalSettings,
.fetchSettings = &nix::fetchSettings,
.readOnlyMode = true,
};
});
Expand All @@ -154,9 +155,9 @@ nix_err nix_eval_state_builder_load(nix_c_context * context, nix_eval_state_buil
context->last_err_code = NIX_OK;
try {
// TODO: load in one go?
builder->settings.readOnlyMode = nix::settings.readOnlyMode;
loadConfFile(builder->settings);
loadConfFile(builder->fetchSettings);
builder->settings->readOnlyMode = nix::settings.readOnlyMode;
loadConfFile(*builder->settings);
loadConfFile(*builder->fetchSettings);
}
NIXC_CATCH_ERRS
}
Expand All @@ -183,9 +184,9 @@ EvalState * nix_eval_state_build(nix_c_context * context, nix_eval_state_builder
try {
return unsafe_new_with_self<EvalState>([&](auto * self) {
return EvalState{
.fetchSettings = std::move(builder->fetchSettings),
.settings = std::move(builder->settings),
.state = nix::EvalState(builder->lookupPath, builder->store, self->fetchSettings, self->settings),
.fetchSettings = builder->fetchSettings,
.settings = builder->settings,
.state = nix::EvalState(builder->lookupPath, builder->store, *self->fetchSettings, *self->settings),
};
});
}
Expand Down
8 changes: 4 additions & 4 deletions src/libexpr-c/nix_api_expr_internal.h
Original file line number Diff line number Diff line change
Expand Up @@ -13,17 +13,17 @@ extern "C" {
struct nix_eval_state_builder
{
nix::ref<nix::Store> store;
nix::EvalSettings settings;
nix::fetchers::Settings fetchSettings;
nix::EvalSettings * settings;
nix::fetchers::Settings * fetchSettings;
nix::LookupPath lookupPath;
// TODO: make an EvalSettings setting own this instead?
bool readOnlyMode;
};

struct EvalState
{
nix::fetchers::Settings fetchSettings;
nix::EvalSettings settings;
nix::fetchers::Settings * fetchSettings;
nix::EvalSettings * settings;
nix::EvalState state;
};

Expand Down
5 changes: 5 additions & 0 deletions src/libexpr/eval-settings.cc
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
#include "nix/util/users.hh"
#include "nix/util/config-global.hh"
#include "nix/store/globals.hh"
#include "nix/store/profiles.hh"
#include "nix/expr/eval.hh"
Expand Down Expand Up @@ -108,4 +109,8 @@ std::filesystem::path getNixDefExpr()
return settings.useXDGBaseDirectories ? getStateDir() / "defexpr" : getHome() / ".nix-defexpr";
}

EvalSettings evalSettings{settings.readOnlyMode};

static GlobalConfig::Register rEvalSettings(&evalSettings);

} // namespace nix
5 changes: 5 additions & 0 deletions src/libexpr/include/nix/expr/eval-settings.hh
Original file line number Diff line number Diff line change
Expand Up @@ -368,4 +368,9 @@ struct EvalSettings : Config
*/
std::filesystem::path getNixDefExpr();

/**
* EvalSettings instance from libexpr.
*/
extern EvalSettings evalSettings;

} // namespace nix
9 changes: 9 additions & 0 deletions src/libfetchers/fetch-settings.cc
Original file line number Diff line number Diff line change
@@ -1,7 +1,16 @@
#include "nix/fetchers/fetch-settings.hh"
#include "nix/util/config-global.hh"

namespace nix::fetchers {

Settings::Settings() {}

} // namespace nix::fetchers

namespace nix {

fetchers::Settings fetchSettings;

static GlobalConfig::Register rFetchSettings(&fetchSettings);

} // namespace nix
9 changes: 9 additions & 0 deletions src/libfetchers/include/nix/fetchers/fetch-settings.hh
Original file line number Diff line number Diff line change
Expand Up @@ -138,3 +138,12 @@ private:
};

} // namespace nix::fetchers

namespace nix {

/**
* @todo Get rid of global settings variables
*/
extern fetchers::Settings fetchSettings;

} // namespace nix
2 changes: 1 addition & 1 deletion src/libflake-c/nix_api_flake.cc
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ nix_err nix_flake_settings_add_to_eval_state_builder(
{
nix_clear_err(context);
try {
settings->settings->configureEvalSettings(builder->settings);
settings->settings->configureEvalSettings(*builder->settings);
}
NIXC_CATCH_ERRS
}
Expand Down
11 changes: 10 additions & 1 deletion src/libutil/config-global.cc
Original file line number Diff line number Diff line change
Expand Up @@ -61,7 +61,16 @@ GlobalConfig globalConfig;

GlobalConfig::Register::Register(Config * config)
{
configRegistrations().emplace_back(config);
auto regs = configRegistrations();
if (std::find(regs.begin(), regs.end(), config) == regs.end()) {
configRegistrations().emplace_back(config);
}
}

GlobalConfig::Register::Register(Config * config, std::function<void()> && callback)
: Register(config)
{
callback();
}

ExperimentalFeatureSettings experimentalFeatureSettings;
Expand Down
1 change: 1 addition & 0 deletions src/libutil/include/nix/util/config-global.hh
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@ struct GlobalConfig : public AbstractConfig
struct Register
{
Register(Config * config);
Register(Config * config, std::function<void()> && callback);
};
};

Expand Down
Loading