From b7e9a69dd82f8f5ee0dbe0ffc4656a88697e80a6 Mon Sep 17 00:00:00 2001 From: _cry64 Date: Fri, 10 Apr 2026 10:13:26 +1000 Subject: [PATCH] support a nixide C API extension --- nixide-sys/libnixide-c/nixide_api_expr.cc | 0 nixide-sys/libnixide-c/nixide_api_expr.h | 12 ++++++++ nixide-sys/libnixide-c/nixide_api_fetchers.cc | 6 ++-- nixide-sys/libnixide-c/nixide_api_fetchers.h | 3 +- nixide-sys/libnixide-c/nixide_api_flake.cc | 14 ++++----- nixide-sys/libnixide-c/nixide_api_flake.h | 2 +- nixide-sys/libnixide-c/nixide_api_main.cc | 30 +++++++++++++++++++ nixide-sys/libnixide-c/nixide_api_main.h | 17 +++++++++++ nixide-sys/libnixide-c/nixide_api_store.cc | 0 nixide-sys/libnixide-c/nixide_api_store.h | 12 ++++++++ nixide-sys/libnixide-c/nixide_api_util.cc | 0 nixide-sys/libnixide-c/nixide_api_util.h | 12 ++++++++ 12 files changed, 96 insertions(+), 12 deletions(-) create mode 100644 nixide-sys/libnixide-c/nixide_api_expr.cc create mode 100644 nixide-sys/libnixide-c/nixide_api_expr.h create mode 100644 nixide-sys/libnixide-c/nixide_api_main.cc create mode 100644 nixide-sys/libnixide-c/nixide_api_main.h create mode 100644 nixide-sys/libnixide-c/nixide_api_store.cc create mode 100644 nixide-sys/libnixide-c/nixide_api_store.h create mode 100644 nixide-sys/libnixide-c/nixide_api_util.cc create mode 100644 nixide-sys/libnixide-c/nixide_api_util.h diff --git a/nixide-sys/libnixide-c/nixide_api_expr.cc b/nixide-sys/libnixide-c/nixide_api_expr.cc new file mode 100644 index 0000000..e69de29 diff --git a/nixide-sys/libnixide-c/nixide_api_expr.h b/nixide-sys/libnixide-c/nixide_api_expr.h new file mode 100644 index 0000000..d082784 --- /dev/null +++ b/nixide-sys/libnixide-c/nixide_api_expr.h @@ -0,0 +1,12 @@ +#ifndef NIXIDE_API_EXPR_H +#define NIXIDE_API_EXPR_H + +#ifdef __cplusplus +extern "C" { +#endif + +#ifdef __cplusplus +} // extern "C" +#endif + +#endif // NIXIDE_API_EXPR_H diff --git a/nixide-sys/libnixide-c/nixide_api_fetchers.cc b/nixide-sys/libnixide-c/nixide_api_fetchers.cc index a8cd4e0..6dbbd03 100644 --- a/nixide-sys/libnixide-c/nixide_api_fetchers.cc +++ b/nixide-sys/libnixide-c/nixide_api_fetchers.cc @@ -1,7 +1,7 @@ -#include "nix_api_util_internal.h" -#include "nix_api_fetchers_internal.hh" +#include +#include -#include "nix/fetchers/fetch-settings.hh" +#include extern "C" { diff --git a/nixide-sys/libnixide-c/nixide_api_fetchers.h b/nixide-sys/libnixide-c/nixide_api_fetchers.h index 572eaff..7e906e4 100644 --- a/nixide-sys/libnixide-c/nixide_api_fetchers.h +++ b/nixide-sys/libnixide-c/nixide_api_fetchers.h @@ -1,9 +1,10 @@ #ifndef NIXIDE_API_FETCHERS_H #define NIXIDE_API_FETCHERS_H -#include "nix_api_fetchers.h" #include +#include + #ifdef __cplusplus extern "C" { #endif diff --git a/nixide-sys/libnixide-c/nixide_api_flake.cc b/nixide-sys/libnixide-c/nixide_api_flake.cc index 4b9ec00..45ad079 100644 --- a/nixide-sys/libnixide-c/nixide_api_flake.cc +++ b/nixide-sys/libnixide-c/nixide_api_flake.cc @@ -1,12 +1,12 @@ // #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 +#include +// #include +#include +// #include +// #include +// #include #include "nix/flake/flake.hh" diff --git a/nixide-sys/libnixide-c/nixide_api_flake.h b/nixide-sys/libnixide-c/nixide_api_flake.h index 1cd279e..b51518d 100644 --- a/nixide-sys/libnixide-c/nixide_api_flake.h +++ b/nixide-sys/libnixide-c/nixide_api_flake.h @@ -1,7 +1,7 @@ #ifndef NIXIDE_API_FLAKE_H #define NIXIDE_API_FLAKE_H -#include "nix_api_flake.h" +#include #ifdef __cplusplus extern "C" { diff --git a/nixide-sys/libnixide-c/nixide_api_main.cc b/nixide-sys/libnixide-c/nixide_api_main.cc new file mode 100644 index 0000000..5e6fd92 --- /dev/null +++ b/nixide-sys/libnixide-c/nixide_api_main.cc @@ -0,0 +1,30 @@ +#include + +#include +#include + +#include + +extern "C" { + +nix_err nixide_register_plugin(nix_c_context * context, char * plugin) +{ + if (context) + context->last_err_code = NIX_OK; + if (plugin == nullptr) { + // TODO: should this be `NIX_ERR_RECOVERABLE` or `NIX_ERR_UNKNOWN`? + return nix_set_err_msg(context, NIX_ERR_RECOVERABLE, "Plugin is null"); + } + + void * handle = dlopen("libnixmainc.so", RTLD_LAZY | RTLD_GLOBAL); + if (!handle) { + return nix_set_err_msg(context, NIX_ERR_UNKNOWN, dlerror()); + } + + void * sym_addr = dlsym(handle, "pluginSettings"); + + try { + } + NIXC_CATCH_ERRS +} +} diff --git a/nixide-sys/libnixide-c/nixide_api_main.h b/nixide-sys/libnixide-c/nixide_api_main.h new file mode 100644 index 0000000..0962cf5 --- /dev/null +++ b/nixide-sys/libnixide-c/nixide_api_main.h @@ -0,0 +1,17 @@ +#ifndef NIXIDE_API_MAIN_H +#define NIXIDE_API_MAIN_H + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +// NOTE: all plugins should be registered BEFORE `nix_init_plugins` is run +nix_err nixide_register_plugin(nix_c_context * context, char * plugin); + +#ifdef __cplusplus +} // extern "C" +#endif + +#endif // NIXIDE_API_MAIN_H diff --git a/nixide-sys/libnixide-c/nixide_api_store.cc b/nixide-sys/libnixide-c/nixide_api_store.cc new file mode 100644 index 0000000..e69de29 diff --git a/nixide-sys/libnixide-c/nixide_api_store.h b/nixide-sys/libnixide-c/nixide_api_store.h new file mode 100644 index 0000000..51baab0 --- /dev/null +++ b/nixide-sys/libnixide-c/nixide_api_store.h @@ -0,0 +1,12 @@ +#ifndef NIXIDE_API_STORE_H +#define NIXIDE_API_STORE_H + +#ifdef __cplusplus +extern "C" { +#endif + +#ifdef __cplusplus +} // extern "C" +#endif + +#endif // NIXIDE_API_STORE_H diff --git a/nixide-sys/libnixide-c/nixide_api_util.cc b/nixide-sys/libnixide-c/nixide_api_util.cc new file mode 100644 index 0000000..e69de29 diff --git a/nixide-sys/libnixide-c/nixide_api_util.h b/nixide-sys/libnixide-c/nixide_api_util.h new file mode 100644 index 0000000..4d610c3 --- /dev/null +++ b/nixide-sys/libnixide-c/nixide_api_util.h @@ -0,0 +1,12 @@ +#ifndef NIXIDE_API_UTIL_H +#define NIXIDE_API_UTIL_H + +#ifdef __cplusplus +extern "C" { +#endif + +#ifdef __cplusplus +} // extern "C" +#endif + +#endif // NIXIDE_API_UTIL_H