Is your feature request related to a problem?
libmain never exposes a method of directly setting/modifying the plugin files that Nix loads on nix::initPlugins. I need this functionality for a project I'm developing currently.
I understand that this would conflict with the current nix.conf plugin-files setting, but manual control would be extremely useful. Perhaps it would be best to provide both a setPluginFiles (complete override) and addPluginFiles (avoid completely ignoring nix.conf)?
Proposed solution
Define a setPluginFiles function in libmain/plugin.cc:
void setPluginFiles(const std::list<std::filesystem::path> & pluginFiles)
{
assert(!pluginSettings.pluginFiles.pluginsLoaded);
assert(pluginSettings.pluginFiles.isAppendable());
pluginSettings.pluginFiles.assign(pluginFiles);
}
Expose setPluginFiles in libmain/include/nix/main/plugin.hh:
/**
* Set the plugin-files that will be loaded when `initPlugins` is called.
*
* This should be called after settings are initialized, but before
* anything else.
*/
void setPluginFiles(const std::list<std::filesystem::path> & pluginFiles);
Then we can define a C compatible nix_set_plugin_files function in libmain-c/nix_api_main.cc:
nix_err nix_set_plugin_files(nix_c_context * context, const char ** pluginFiles, const size_t count)
{
if (context)
context->last_err_code = NIX_OK;
if (pluginFiles == nullptr) {
return nix_set_err_msg(context, NIX_ERR_UNKNOWN, "List of plugin-files is null");
}
try {
std::list<std::filesystem::path> plugins{};
for (size_t i = 0; i < count; ++i) {
const char * path = pluginFiles[i];
if (path == nullptr) {
return nix_set_err_msg(context, NIX_ERR_UNKNOWN, "List of plugin-files contains null");
}
plugins.push_back(path);
}
nix::setPluginFiles(plugins);
}
NIXC_CATCH_ERRS
}
And similarly expose it in libmain-c/nix_api_main.h:
/**
* @brief Sets Nix's plugin-files setting.
*
* Call this once, after calling your desired init functions,
* but before calling nix_init_plugins.
*
* @param[out] context Optional, stores error information
* @param[in] pluginPaths Array of plugin-files
* @return NIX_OK if the assignment was successful, an error code otherwise.
*/
nix_err nix_set_plugin_files(nix_c_context * context, const char ** pluginFiles, const size_t count);
Checklist
Add 👍 to issues you find important.
Is your feature request related to a problem?
libmainnever exposes a method of directly setting/modifying the plugin files that Nix loads onnix::initPlugins. I need this functionality for a project I'm developing currently.I understand that this would conflict with the current
nix.confplugin-files setting, but manual control would be extremely useful. Perhaps it would be best to provide both asetPluginFiles(complete override) andaddPluginFiles(avoid completely ignoringnix.conf)?Proposed solution
Define a
setPluginFilesfunction inlibmain/plugin.cc:Expose
setPluginFilesinlibmain/include/nix/main/plugin.hh:Then we can define a C compatible
nix_set_plugin_filesfunction inlibmain-c/nix_api_main.cc:And similarly expose it in
libmain-c/nix_api_main.h:Checklist
Add 👍 to issues you find important.