!lTqhfnNvIkcEackxxk:matrix.org

Nix Bindings

71 Members
Nix C API https://github.com/NixOS/nix/blob/master/doc/manual/src/c-api.md, language-specific bindings, and their use cases (currently broken link: https://nixos.org/manual/nix/unstable/c-api)19 Servers

Load older messages


SenderMessageTime
17 Mar 2025
@acidbong:envs.net@acidbong:envs.net joined the room.11:38:50
@acidbong:envs.net@acidbong:envs.netafternoon, fellers and felines i hope this is the right channel to ask: is there a language-agnostic API for Nix daemon or does it require C bindings? i'd love to try to use a different language instead of Nix11:44:47
@roberthensing:matrix.orgRobert Hensing (roberth)Reimplementations exist, but I don't have recommendations. Using the C API would be possible, but the store layer C API is very minimal at the moment; just enough to supplement the evaluator C API; not much more than the ability to have a Store, a StorePath and build a derivation20:31:18
@acidbong:envs.net@acidbong:envs.netgot it and I just realized that i'd rather use a transpiler to Nix to do what i want anyway, thx20:34:16
@acidbong:envs.net@acidbong:envs.net left the room.20:34:22
19 Mar 2025
@o-santi:matrix.orgLeonardo Santiagoshould I be able to copy derivation closures between remote stores without passing through my own local machine?12:08:35
@o-santi:matrix.orgLeonardo SantiagoI tried doing it through the FFI but it grinds to a halt and never returns12:08:52
@xokdvium:matrix.orgSergei Zimmerman (xokdvium) changed their display name from xokdvium to Sergei Zimmerman (xokdvium).21:12:16
22 Mar 2025
@yorickvp:matrix.orgyorickvp joined the room.14:18:57
@yorickvp:matrix.orgyorickvpin theory yes, in practice I think the copying code does some calls that aren't efficient if both stores are remote14:20:54
28 Mar 2025
@roberthensing:matrix.orgRobert Hensing (roberth)Heads-up regarding libflake initialization breaking in 2.28 https://github.com/roberth/nix/blob/0c75581d8b7cfbfa7a8db9b5dcbf0cbf0709009f/doc/manual/rl-next/c-api-flake-init.md18:06:59
@roberthensing:matrix.orgRobert Hensing (roberth)I've decided to keep it simple and break this, since the changed solution is a recent addition, and C API progress is slow enough as is. Contributions welcome :)18:09:40
2 Apr 2025
@roberthensing:matrix.orgRobert Hensing (roberth) PR adding exposing flake locking functionality in the C API 16:17:09
4 Apr 2025
@roberthensing:matrix.orgRobert Hensing (roberth)rfr ^14:46:50
@roberthensing:matrix.orgRobert Hensing (roberth) we don't have a solution for actually loading settings yet 14:47:30
@o-santi:matrix.orgLeonardo Santiago I'm getting SIGSEGV when calling nix_get_attr_byname with (what it seems to me are) completely valid arguments, that shouldn't even throw an error. 16:15:40
@o-santi:matrix.orgLeonardo Santiago

This is as much information as I can gather from gdb, as I don't know how to enable debug information on the nix C API, for some reason setting dontStrip = true doesn't work for the nix-{x}-c packages.

Program received signal SIGSEGV, Segmentation fault.
0x00007ffff6aaee5a in nix::ExprVar::eval(nix::EvalState&, nix::Env&, nix::Value&) ()
   from /nix/store/8dlfn55w3b3szqsph1dp2i2jqg0di1gr-nix-expr-2.27.0/lib/libnixexpr.so
16:17:55
@o-santi:matrix.orgLeonardo SantiagoNot sure how to improve this report, the nix expression is fairly complex and I can't include it, but the program itself should just call eval on an expression from file then access its attributes one by one in a list. I'd like to get some line number information going on but I don't seem to be able to.16:20:23
@o-santi:matrix.orgLeonardo Santiago *

This is as much information as I can gather from gdb, as I don't know how to enable debug information on the nix C API .so libraries, for some reason setting dontStrip = true doesn't work for the nix-{x}-c packages.

Program received signal SIGSEGV, Segmentation fault.
0x00007ffff6aaee5a in nix::ExprVar::eval(nix::EvalState&, nix::Env&, nix::Value&) ()
   from /nix/store/8dlfn55w3b3szqsph1dp2i2jqg0di1gr-nix-expr-2.27.0/lib/libnixexpr.so
16:20:44
@o-santi:matrix.orgLeonardo Santiago *

This is as much information as I can gather from gdb (showing only toplevel, the callstack is 22k calls deep), as I don't know how to enable debug information on the nix C API .so libraries, for some reason setting dontStrip = true doesn't work for the nix-{x}-c packages.

Program received signal SIGSEGV, Segmentation fault.
0x00007ffff6aaee5a in nix::ExprVar::eval(nix::EvalState&, nix::Env&, nix::Value&) ()
   from /nix/store/8dlfn55w3b3szqsph1dp2i2jqg0di1gr-nix-expr-2.27.0/lib/libnixexpr.so
19:12:38
@roberthensing:matrix.orgRobert Hensing (roberth) Did you use .overrideAllMesonComponents? 22:07:19
6 Apr 2025
@o-santi:matrix.orgLeonardo SantiagoNope, and not a particular weird version of nixpkgs. Stable one, tried both with nix 2.25 and now 2.27.0 and both of them showed the same error.20:34:29
@roberthensing:matrix.orgRobert Hensing (roberth)Hmm ok. For 2.27 you'd need it because of the libraries being separate derivations, but that's not an explanation for the 2.25 behavior fwiw22:11:08
@roberthensing:matrix.orgRobert Hensing (roberth)2.27 is worth another try with that method, because it uses a different build system, so it might not have the 2.25 problem22:11:56
7 Apr 2025
@o-santi:matrix.orgLeonardo Santiago what do you mean? What does .overrideAllMesonComponents do? 14:05:11
@o-santi:matrix.orgLeonardo Santiago * what do you mean? What does .overrideAllMesonComponents do and how am I supposed to use it? 14:05:18
@o-santi:matrix.orgLeonardo Santiago Okay, it finally clicked to me that the reason that I had no line number and source information was because I was compiling nix-expr without source information. When I managed to build it with debug information, it stopped segfaulting :D 16:22:22
@o-santi:matrix.orgLeonardo Santiago

This is what I did, and if I change nix-expr-c for nix.libs.nix-expr-c it goes back to segfaulting

mkDebug = p: p.overrideAttrs (old: old // {                                                                                                           
          dontStrip = true;                                                                                                                                   
          mesonBuildType = "debugoptimized";                                                                                                                  
          NIX_CFLAGS_COMPILE = toString (old.NIX_CFLAGS_COMPILE or "") + " -ggdb -Og";                                                                        
});                                                                                                                                                   
nix-expr-c = (mkDebug nix.libs.nix-expr-c).override { nix-expr = mkDebug nix.libs.nix-expr; };
nix-deps = map mkDebug [ nix.libs.nix-store-c nix-expr-c nix.libs.nix-util-c ]; 
16:23:56
@o-santi:matrix.orgLeonardo Santiago *

This is what I did, and if I change nix-expr-c for nix.libs.nix-expr-c it goes back to segfaulting

inputs = { 
  nix.url` = "github:nixos/nix/2.27.0;
};
outputs = { ... } : { 
...
nix = inputs.nix.packages.${system}.nix;
mkDebug = p: p.overrideAttrs (old: old // {                                                                                                           
          dontStrip = true;                                                                                                                                   
          mesonBuildType = "debugoptimized";                                                                                                                  
          NIX_CFLAGS_COMPILE = toString (old.NIX_CFLAGS_COMPILE or "") + " -ggdb -Og";                                                                        
});                                                                                                                                                   
nix-expr-c = (mkDebug nix.libs.nix-expr-c).override { nix-expr = mkDebug nix.libs.nix-expr; };
nix-deps = map mkDebug [ nix.libs.nix-store-c nix-expr-c nix.libs.nix-util-c ]; 
16:24:48
@o-santi:matrix.orgLeonardo Santiago *

This is what I did, and if I change nix-expr-c for nix.libs.nix-expr-c it goes back to segfaulting

inputs = { 
  nix.url` = "github:nixos/nix/2.27.0";
};
outputs = { ... } : { 
...
nix = inputs.nix.packages.${system}.nix;
mkDebug = p: p.overrideAttrs (old: old // {                                                                                                           
          dontStrip = true;                                                                                                                                   
          mesonBuildType = "debugoptimized";                                                                                                                  
          NIX_CFLAGS_COMPILE = toString (old.NIX_CFLAGS_COMPILE or "") + " -ggdb -Og";                                                                        
});                                                                                                                                                   
nix-expr-c = (mkDebug nix.libs.nix-expr-c).override { nix-expr = mkDebug nix.libs.nix-expr; };
nix-deps = map mkDebug [ nix.libs.nix-store-c nix-expr-c nix.libs.nix-util-c ]; 
16:24:52

Show newer messages


Back to Room ListRoom Version: 10