From 0a4cfcce7d170a8d05879a296900eb780959c61e Mon Sep 17 00:00:00 2001 From: _cry64 Date: Thu, 2 Apr 2026 23:38:56 +1000 Subject: [PATCH] add custom flake+fetchers api --- nixide-sys/libnixide-c/nixide_api_fetchers.cc | 86 ++++++++++ nixide-sys/libnixide-c/nixide_api_fetchers.h | 36 ++++ nixide-sys/libnixide-c/nixide_api_flake.cc | 154 ++++++++++++++++++ nixide-sys/libnixide-c/nixide_api_flake.h | 47 ++++++ 4 files changed, 323 insertions(+) create mode 100644 nixide-sys/libnixide-c/nixide_api_fetchers.cc create mode 100644 nixide-sys/libnixide-c/nixide_api_fetchers.h create mode 100644 nixide-sys/libnixide-c/nixide_api_flake.cc create mode 100644 nixide-sys/libnixide-c/nixide_api_flake.h diff --git a/nixide-sys/libnixide-c/nixide_api_fetchers.cc b/nixide-sys/libnixide-c/nixide_api_fetchers.cc new file mode 100644 index 0000000..a8cd4e0 --- /dev/null +++ b/nixide-sys/libnixide-c/nixide_api_fetchers.cc @@ -0,0 +1,86 @@ +#include "nix_api_util_internal.h" +#include "nix_api_fetchers_internal.hh" + +#include "nix/fetchers/fetch-settings.hh" + +extern "C" { + +// nix_err nix_fetchers_settings_add_access_token( +// nix_c_context * context, nix_fetchers_settings * settings, char * tokenName, char * tokenValue) +// { +// nix_clear_err(context); +// try { +// settings->settings->accessTokens.emplace(std::string(tokenName), std::string(tokenValue)); +// } +// NIXC_CATCH_ERRS +// } + +// nix_err +// nix_fetchers_settings_remove_access_token(nix_c_context * context, nix_fetchers_settings * settings, char * +// tokenName) +// { +// nix_clear_err(context); +// try { +// settings->settings->accessTokens.erase(std::string(tokenName)); +// } +// NIXC_CATCH_ERRS +// } + +nix_err nix_fetchers_settings_set_allow_dirty(nix_c_context * context, nix_fetchers_settings * settings, bool value) +{ + nix_clear_err(context); + try { + settings->settings->allowDirty = value; + } + NIXC_CATCH_ERRS +} + +nix_err nix_fetchers_settings_set_warn_dirty(nix_c_context * context, nix_fetchers_settings * settings, bool value) +{ + nix_clear_err(context); + try { + settings->settings->warnDirty = value; + } + NIXC_CATCH_ERRS +} + +nix_err +nix_fetchers_settings_set_allow_dirty_locks(nix_c_context * context, nix_fetchers_settings * settings, bool value) +{ + nix_clear_err(context); + try { + settings->settings->allowDirtyLocks = value; + } + NIXC_CATCH_ERRS +} + +nix_err nix_fetchers_settings_set_trust_tarballs_from_git_forges( + nix_c_context * context, nix_fetchers_settings * settings, bool value) +{ + nix_clear_err(context); + try { + settings->settings->trustTarballsFromGitForges = value; + } + NIXC_CATCH_ERRS +} + +nix_err nix_fetchers_settings_set_global_flake_registry( + nix_c_context * context, nix_fetchers_settings * settings, char * registry) +{ + nix_clear_err(context); + try { + settings->settings->flakeRegistry = registry; + } + NIXC_CATCH_ERRS +} + +nix_err nix_fetchers_settings_set_tarball_ttl(nix_c_context * context, nix_fetchers_settings * settings, uint ttl) +{ + nix_clear_err(context); + try { + settings->settings->tarballTtl = ttl; + } + NIXC_CATCH_ERRS +} + +} // extern "C" diff --git a/nixide-sys/libnixide-c/nixide_api_fetchers.h b/nixide-sys/libnixide-c/nixide_api_fetchers.h new file mode 100644 index 0000000..572eaff --- /dev/null +++ b/nixide-sys/libnixide-c/nixide_api_fetchers.h @@ -0,0 +1,36 @@ +#ifndef NIXIDE_API_FETCHERS_H +#define NIXIDE_API_FETCHERS_H + +#include "nix_api_fetchers.h" +#include + +#ifdef __cplusplus +extern "C" { +#endif + +nix_err nix_fetchers_settings_add_access_token( + nix_c_context * context, nix_fetchers_settings * settings, char * tokenName, char * tokenValue); + +nix_err +nix_fetchers_settings_remove_access_token(nix_c_context * context, nix_fetchers_settings * settings, char * tokenName); + +nix_err nix_fetchers_settings_set_allow_dirty(nix_c_context * context, nix_fetchers_settings * settings, bool value); + +nix_err nix_fetchers_settings_set_warn_dirty(nix_c_context * context, nix_fetchers_settings * settings, bool value); + +nix_err +nix_fetchers_settings_set_allow_dirty_locks(nix_c_context * context, nix_fetchers_settings * settings, bool value); + +nix_err nix_fetchers_settings_set_trust_tarballs_from_git_forges( + nix_c_context * context, nix_fetchers_settings * settings, bool value); + +nix_err nix_fetchers_settings_set_global_flake_registry( + nix_c_context * context, nix_fetchers_settings * settings, char * registry); + +nix_err nix_fetchers_settings_set_tarball_ttl(nix_c_context * context, nix_fetchers_settings * settings, uint ttl); + +#ifdef __cplusplus +} // extern "C" +#endif + +#endif // NIXIDE_API_FETCHERS_H diff --git a/nixide-sys/libnixide-c/nixide_api_flake.cc b/nixide-sys/libnixide-c/nixide_api_flake.cc new file mode 100644 index 0000000..4b9ec00 --- /dev/null +++ b/nixide-sys/libnixide-c/nixide_api_flake.cc @@ -0,0 +1,154 @@ +// #include + +// #include "nix_api_flake.h" +#include "nix_api_flake_internal.hh" +// #include "nix_api_util.h" +#include "nix_api_util_internal.h" +// #include "nix_api_expr_internal.h" +// #include "nix_api_fetchers_internal.hh" +// #include "nix_api_fetchers.h" + +#include "nix/flake/flake.hh" + +// #include "nixide_api_flake.h" + +extern "C" { + +nix_err nix_flake_lock_flags_set_recreate_lock_file(nix_c_context * context, nix_flake_lock_flags * flags, bool value) +{ + nix_clear_err(context); + try { + flags->lockFlags->recreateLockFile = value; + } + NIXC_CATCH_ERRS +} + +nix_err nix_flake_lock_flags_set_update_lock_file(nix_c_context * context, nix_flake_lock_flags * flags, bool value) +{ + nix_clear_err(context); + try { + flags->lockFlags->updateLockFile = value; + } + NIXC_CATCH_ERRS +} + +nix_err nix_flake_lock_flags_set_write_lock_file(nix_c_context * context, nix_flake_lock_flags * flags, bool value) +{ + nix_clear_err(context); + try { + flags->lockFlags->writeLockFile = value; + } + NIXC_CATCH_ERRS +} + +nix_err nix_flake_lock_flags_set_fail_on_unlocked(nix_c_context * context, nix_flake_lock_flags * flags, bool value) +{ + nix_clear_err(context); + try { + flags->lockFlags->failOnUnlocked = value; + } + NIXC_CATCH_ERRS +} + +nix_err nix_flake_lock_flags_set_use_registries(nix_c_context * context, nix_flake_lock_flags * flags, bool value) +{ + nix_clear_err(context); + try { + flags->lockFlags->useRegistries = value; + } + NIXC_CATCH_ERRS +} + +nix_err nix_flake_lock_flags_set_apply_nix_config(nix_c_context * context, nix_flake_lock_flags * flags, bool value) +{ + nix_clear_err(context); + try { + flags->lockFlags->applyNixConfig = value; + } + NIXC_CATCH_ERRS +} + +nix_err nix_flake_lock_flags_set_allow_unlocked(nix_c_context * context, nix_flake_lock_flags * flags, bool value) +{ + nix_clear_err(context); + try { + flags->lockFlags->allowUnlocked = value; + } + NIXC_CATCH_ERRS +} + +nix_err nix_flake_lock_flags_set_commit_lock_file(nix_c_context * context, nix_flake_lock_flags * flags, bool value) +{ + nix_clear_err(context); + try { + flags->lockFlags->commitLockFile = value; + } + NIXC_CATCH_ERRS +} + +nix_err +nix_flake_lock_flags_set_reference_lock_file_path(nix_c_context * context, nix_flake_lock_flags * flags, char * path) +{ + nix_clear_err(context); + try { + auto accessor = nix::getFSSourceAccessor(); + nix::CanonPath canon(path); + flags->lockFlags->referenceLockFilePath = nix::SourcePath(accessor, canon); + } + NIXC_CATCH_ERRS +} + +nix_err +nix_flake_lock_flags_set_output_lock_file_path(nix_c_context * context, nix_flake_lock_flags * flags, char * outputPath) +{ + nix_clear_err(context); + try { + flags->lockFlags->outputLockFilePath = outputPath; + } + NIXC_CATCH_ERRS +} + +nix_err +nix_flake_lock_flags_add_input_update(nix_c_context * context, nix_flake_lock_flags * flags, const char * inputPath) +{ + nix_clear_err(context); + try { + auto path = nix::flake::NonEmptyInputAttrPath::parse(inputPath); + if (!path) + throw nix::UsageError( + "input override path cannot be zero-length; it would refer to the flake itself, not an input"); + flags->lockFlags->inputUpdates.emplace(std::move(*path)); + } + NIXC_CATCH_ERRS +} + +/* nix_flake_settings */ +nix_err nix_flake_settings_set_use_registries(nix_c_context * context, nix_flake_settings * settings, bool value) +{ + nix_clear_err(context); + try { + settings->settings->useRegistries = value; + } + NIXC_CATCH_ERRS +} + +nix_err nix_flake_settings_set_accept_flake_config(nix_c_context * context, nix_flake_settings * settings, bool value) +{ + nix_clear_err(context); + try { + settings->settings->acceptFlakeConfig = value; + } + NIXC_CATCH_ERRS +} + +nix_err +nix_flake_settings_set_commit_lock_file_summary(nix_c_context * context, nix_flake_settings * settings, char * summary) +{ + nix_clear_err(context); + try { + settings->settings->commitLockFileSummary = summary; + } + NIXC_CATCH_ERRS +} + +} // extern "C" diff --git a/nixide-sys/libnixide-c/nixide_api_flake.h b/nixide-sys/libnixide-c/nixide_api_flake.h new file mode 100644 index 0000000..1cd279e --- /dev/null +++ b/nixide-sys/libnixide-c/nixide_api_flake.h @@ -0,0 +1,47 @@ +#ifndef NIXIDE_API_FLAKE_H +#define NIXIDE_API_FLAKE_H + +#include "nix_api_flake.h" + +#ifdef __cplusplus +extern "C" { +#endif + +nix_err nix_flake_lock_flags_set_recreate_lock_file(nix_c_context * context, nix_flake_lock_flags * flags, bool value); + +nix_err nix_flake_lock_flags_set_update_lock_file(nix_c_context * context, nix_flake_lock_flags * flags, bool value); + +nix_err nix_flake_lock_flags_set_write_lock_file(nix_c_context * context, nix_flake_lock_flags * flags, bool value); + +nix_err nix_flake_lock_flags_set_fail_on_unlocked(nix_c_context * context, nix_flake_lock_flags * flags, bool value); + +nix_err nix_flake_lock_flags_set_use_registries(nix_c_context * context, nix_flake_lock_flags * flags, bool value); + +nix_err nix_flake_lock_flags_set_apply_nix_config(nix_c_context * context, nix_flake_lock_flags * flags, bool value); + +nix_err nix_flake_lock_flags_set_allow_unlocked(nix_c_context * context, nix_flake_lock_flags * flags, bool value); + +nix_err nix_flake_lock_flags_set_commit_lock_file(nix_c_context * context, nix_flake_lock_flags * flags, bool value); + +nix_err +nix_flake_lock_flags_set_reference_lock_file_path(nix_c_context * context, nix_flake_lock_flags * flags, char * path); + +nix_err +nix_flake_lock_flags_set_output_lock_file_path(nix_c_context * context, nix_flake_lock_flags * flags, char * path); + +nix_err +nix_flake_lock_flags_add_input_update(nix_c_context * context, nix_flake_lock_flags * flags, const char * inputPath); + +/* nix_flake_settings */ +nix_err nix_flake_settings_set_use_registries(nix_c_context * context, nix_flake_settings * settings, bool value); + +nix_err nix_flake_settings_set_accept_flake_config(nix_c_context * context, nix_flake_settings * settings, bool value); + +nix_err +nix_flake_settings_set_commit_lock_file_summary(nix_c_context * context, nix_flake_settings * settings, char * summary); + +#ifdef __cplusplus +} // extern "C" +#endif + +#endif // NIXIDE_API_FLAKE_H