Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[WIP] Add flake #2517

Closed
wants to merge 7 commits into from
Closed

[WIP] Add flake #2517

wants to merge 7 commits into from

Conversation

hamishmack
Copy link
Contributor

@hamishmack hamishmack commented Dec 4, 2020

@manveru, I found a couple of places where nix/sources.nix was still used instead of sources. Putting a dummy rev value in gets rid of one of them (I guess the iohk-nix repo is the culprit there, but you pointed out that that get git rev function won't work in a flake anyway).

I was also able to refactor some of the code back out of the flake.nix and into nix/default.nix adding some arguments and passing the nixpkgs thorough as sources.nixpkgs.

Some stuff seems to work fine ok on darwin now:

~/iohk/plutus$ nix build .#web-ghc-server
~/iohk/plutus$ ./result/bin/web-ghc-server --help
Usage: web-ghc-server [-v|--version] COMMAND

Available options:
  -h,--help                Show this help text
  -v,--version             Show the version

Available commands:
  webserver                
~/iohk/plutus$ nix run .#web-ghc -- --help
Usage: web-ghc-server [-v|--version] COMMAND

Available options:
  -h,--help                Show this help text
  -v,--version             Show the version

Available commands:
  webserver                

Sadly nix develop does segfaults:

~/iohk/plutus$ nix develop
trace: To make project.plan-nix for hoogle a fixed-output derivation but not materialized, set `plan-sha256` to the output of the 'calculateMaterializedSha' script in 'passthru'.
trace: To materialize project.plan-nix for hoogle entirely, pass a writable path as the `materialized` argument and run the 'updateMaterialized' script in 'passthru'.
Segmentation fault: 11

@hamishmack
Copy link
Contributor Author

back trace of the nix develop seg fault:

~/iohk/plutus$ lldb /Users/hamish/.nix-profile/bin/nix -- develop
(lldb) target create "/Users/hamish/.nix-profile/bin/nix"
Current executable set to '/Users/hamish/.nix-profile/bin/nix' (x86_64).
(lldb) settings set -- target.run-args  "develop"
(lldb) run
Process 76950 launched: '/Users/hamish/.nix-profile/bin/nix' (x86_64)
warning: (x86_64) /Users/hamish/.nix-profile/bin/nix address 0x0000000100000000 maps to more than one section: nix.__TEXT and nix.__TEXT
warning: (x86_64) /Users/hamish/.nix-profile/bin/nix address 0x00000001001af000 maps to more than one section: nix.__DATA and nix.__DATA
trace: To make project.plan-nix for hoogle a fixed-output derivation but not materialized, set `plan-sha256` to the output of the 'calculateMaterializedSha' script in 'passthru'.
trace: To materialize project.plan-nix for hoogle entirely, pass a writable path as the `materialized` argument and run the 'updateMaterialized' script in 'passthru'.
Process 76950 stopped
* thread #1, queue = 'com.apple.main-thread', stop reason = EXC_BAD_ACCESS (code=1, address=0x182f41000)
    frame #0: 0x000000010064ee40 libgc.1.dylib`GC_push_all_stack + 176
libgc.1.dylib`GC_push_all_stack:
->  0x10064ee40 <+176>: movq   (%rbx), %rdi
    0x10064ee43 <+179>: cmpq   %r12, %rdi
    0x10064ee46 <+182>: jb     0x10064ee52               ; <+194>
    0x10064ee48 <+184>: cmpq   %r15, %rdi
Target 0: (nix) stopped.
(lldb) bt
* thread #1, queue = 'com.apple.main-thread', stop reason = EXC_BAD_ACCESS (code=1, address=0x182f41000)
  * frame #0: 0x000000010064ee40 libgc.1.dylib`GC_push_all_stack + 176
    frame #1: 0x0000000100654f8f libgc.1.dylib`GC_push_all_stacks + 255
    frame #2: 0x0000000100642698 libgc.1.dylib`GC_mark_some + 616
    frame #3: 0x00000001006419ad libgc.1.dylib`GC_stopped_mark + 285
    frame #4: 0x000000010064136d libgc.1.dylib`GC_try_to_collect_inner + 413
    frame #5: 0x0000000100644c95 libgc.1.dylib`GC_collect_or_expand + 197
    frame #6: 0x0000000100644f1f libgc.1.dylib`GC_allocobj + 255
    frame #7: 0x000000010063b759 libgc.1.dylib`GC_generic_malloc_inner + 329
    frame #8: 0x000000010064c0c1 libgc.1.dylib`GC_generic_malloc_many + 1489
    frame #9: 0x000000010064aff7 libgc.1.dylib`GC_malloc_kind + 199
    frame #10: 0x000000010048f83e libnixexpr.dylib`nix::Expr::maybeThunk(nix::EvalState&, nix::Env&) + 30
    frame #11: 0x0000000100491751 libnixexpr.dylib`nix::ExprList::eval(nix::EvalState&, nix::Env&, nix::Value&) + 257
    frame #12: 0x0000000100492de8 libnixexpr.dylib`nix::EvalState::callFunction(nix::Value&, nix::Value&, nix::Value&, nix::Pos const&) + 1496
    frame #13: 0x0000000100520437 libnixexpr.dylib`nix::EvalState::forceList(nix::Value&, nix::Pos const&) + 71
    frame #14: 0x00000001005418f1 libnixexpr.dylib`nix::elemAt(nix::EvalState&, nix::Pos const&, nix::Value&, int, nix::Value&) + 65
    frame #15: 0x00000001004933f7 libnixexpr.dylib`nix::EvalState::callPrimOp(nix::Value&, nix::Value&, nix::Value&, nix::Pos const&) + 551
    frame #16: 0x00000001004928ff libnixexpr.dylib`nix::EvalState::callFunction(nix::Value&, nix::Value&, nix::Value&, nix::Pos const&) + 239
    frame #17: 0x00000001005308ca libnixexpr.dylib`nix::prim_filter(nix::EvalState&, nix::Pos const&, nix::Value**, nix::Value&) + 266
    frame #18: 0x00000001004933f7 libnixexpr.dylib`nix::EvalState::callPrimOp(nix::Value&, nix::Value&, nix::Value&, nix::Pos const&) + 551
    frame #19: 0x00000001004928ff libnixexpr.dylib`nix::EvalState::callFunction(nix::Value&, nix::Value&, nix::Value&, nix::Pos const&) + 239
    frame #20: 0x00000001004927e1 libnixexpr.dylib`nix::ExprApp::eval(nix::EvalState&, nix::Env&, nix::Value&) + 97
    frame #21: 0x0000000100495584 libnixexpr.dylib`nix::ExprOpConcatLists::eval(nix::EvalState&, nix::Env&, nix::Value&) + 84
    frame #22: 0x0000000100520465 libnixexpr.dylib`nix::EvalState::forceList(nix::Value&, nix::Pos const&) + 117
    frame #23: 0x0000000100530bcb libnixexpr.dylib`nix::prim_length(nix::EvalState&, nix::Pos const&, nix::Value**, nix::Value&) + 27
    frame #24: 0x00000001004933f7 libnixexpr.dylib`nix::EvalState::callPrimOp(nix::Value&, nix::Value&, nix::Value&, nix::Pos const&) + 551
    frame #25: 0x00000001004928ff libnixexpr.dylib`nix::EvalState::callFunction(nix::Value&, nix::Value&, nix::Value&, nix::Pos const&) + 239
    frame #26: 0x00000001004927e1 libnixexpr.dylib`nix::ExprApp::eval(nix::EvalState&, nix::Env&, nix::Value&) + 97
    frame #27: 0x000000010053205c libnixexpr.dylib`nix::prim_sub(nix::EvalState&, nix::Pos const&, nix::Value**, nix::Value&) + 124
    frame #28: 0x00000001004933f7 libnixexpr.dylib`nix::EvalState::callPrimOp(nix::Value&, nix::Value&, nix::Value&, nix::Pos const&) + 551
    frame #29: 0x00000001004928ff libnixexpr.dylib`nix::EvalState::callFunction(nix::Value&, nix::Value&, nix::Value&, nix::Pos const&) + 239
    frame #30: 0x00000001004927e1 libnixexpr.dylib`nix::ExprApp::eval(nix::EvalState&, nix::Env&, nix::Value&) + 97
    frame #31: 0x0000000100490e55 libnixexpr.dylib`nix::EvalState::forceValue(nix::Value&, nix::Pos const&) + 117
    frame #32: 0x0000000100496aa2 libnixexpr.dylib`nix::EvalState::forceInt(nix::Value&, nix::Pos const&) + 18
    frame #33: 0x0000000100530273 libnixexpr.dylib`nix::prim_elemAt(nix::EvalState&, nix::Pos const&, nix::Value**, nix::Value&) + 35
    frame #34: 0x00000001004933f7 libnixexpr.dylib`nix::EvalState::callPrimOp(nix::Value&, nix::Value&, nix::Value&, nix::Pos const&) + 551
    frame #35: 0x00000001004928ff libnixexpr.dylib`nix::EvalState::callFunction(nix::Value&, nix::Value&, nix::Value&, nix::Pos const&) + 239
    frame #36: 0x00000001004927e1 libnixexpr.dylib`nix::ExprApp::eval(nix::EvalState&, nix::Env&, nix::Value&) + 97
    frame #37: 0x0000000100492de8 libnixexpr.dylib`nix::EvalState::callFunction(nix::Value&, nix::Value&, nix::Value&, nix::Pos const&) + 1496
    frame #38: 0x00000001004927e1 libnixexpr.dylib`nix::ExprApp::eval(nix::EvalState&, nix::Env&, nix::Value&) + 97
    frame #39: 0x0000000100520465 libnixexpr.dylib`nix::EvalState::forceList(nix::Value&, nix::Pos const&) + 117
    frame #40: 0x0000000100530bcb libnixexpr.dylib`nix::prim_length(nix::EvalState&, nix::Pos const&, nix::Value**, nix::Value&) + 27
    frame #41: 0x00000001004933f7 libnixexpr.dylib`nix::EvalState::callPrimOp(nix::Value&, nix::Value&, nix::Value&, nix::Pos const&) + 551
    frame #42: 0x00000001004928ff libnixexpr.dylib`nix::EvalState::callFunction(nix::Value&, nix::Value&, nix::Value&, nix::Pos const&) + 239
    frame #43: 0x00000001004927e1 libnixexpr.dylib`nix::ExprApp::eval(nix::EvalState&, nix::Env&, nix::Value&) + 97
    frame #44: 0x000000010053205c libnixexpr.dylib`nix::prim_sub(nix::EvalState&, nix::Pos const&, nix::Value**, nix::Value&) + 124
    frame #45: 0x00000001004933f7 libnixexpr.dylib`nix::EvalState::callPrimOp(nix::Value&, nix::Value&, nix::Value&, nix::Pos const&) + 551
    frame #46: 0x00000001004928ff libnixexpr.dylib`nix::EvalState::callFunction(nix::Value&, nix::Value&, nix::Value&, nix::Pos const&) + 239
    frame #47: 0x00000001004927e1 libnixexpr.dylib`nix::ExprApp::eval(nix::EvalState&, nix::Env&, nix::Value&) + 97
    frame #48: 0x0000000100490e55 libnixexpr.dylib`nix::EvalState::forceValue(nix::Value&, nix::Pos const&) + 117
    frame #49: 0x0000000100496aa2 libnixexpr.dylib`nix::EvalState::forceInt(nix::Value&, nix::Pos const&) + 18
    frame #50: 0x0000000100530273 libnixexpr.dylib`nix::prim_elemAt(nix::EvalState&, nix::Pos const&, nix::Value**, nix::Value&) + 35
    frame #51: 0x00000001004933f7 libnixexpr.dylib`nix::EvalState::callPrimOp(nix::Value&, nix::Value&, nix::Value&, nix::Pos const&) + 551
    frame #52: 0x00000001004928ff libnixexpr.dylib`nix::EvalState::callFunction(nix::Value&, nix::Value&, nix::Value&, nix::Pos const&) + 239
    frame #53: 0x00000001004927e1 libnixexpr.dylib`nix::ExprApp::eval(nix::EvalState&, nix::Env&, nix::Value&) + 97
    frame #54: 0x0000000100492de8 libnixexpr.dylib`nix::EvalState::callFunction(nix::Value&, nix::Value&, nix::Value&, nix::Pos const&) + 1496
    frame #55: 0x00000001004927e1 libnixexpr.dylib`nix::ExprApp::eval(nix::EvalState&, nix::Env&, nix::Value&) + 97
    frame #56: 0x0000000100492de8 libnixexpr.dylib`nix::EvalState::callFunction(nix::Value&, nix::Value&, nix::Value&, nix::Pos const&) + 1496
    frame #57: 0x00000001004927e1 libnixexpr.dylib`nix::ExprApp::eval(nix::EvalState&, nix::Env&, nix::Value&) + 97
    frame #58: 0x000000010049501d libnixexpr.dylib`nix::ExprOpAnd::eval(nix::EvalState&, nix::Env&, nix::Value&) + 93
    frame #59: 0x00000001004950df libnixexpr.dylib`nix::ExprOpOr::eval(nix::EvalState&, nix::Env&, nix::Value&) + 95
    frame #60: 0x000000010049501d libnixexpr.dylib`nix::ExprOpAnd::eval(nix::EvalState&, nix::Env&, nix::Value&) + 93
    frame #61: 0x0000000100492de8 libnixexpr.dylib`nix::EvalState::callFunction(nix::Value&, nix::Value&, nix::Value&, nix::Pos const&) + 1496
    frame #62: 0x00000001004927e1 libnixexpr.dylib`nix::ExprApp::eval(nix::EvalState&, nix::Env&, nix::Value&) + 97
    frame #63: 0x000000010049501d libnixexpr.dylib`nix::ExprOpAnd::eval(nix::EvalState&, nix::Env&, nix::Value&) + 93
    frame #64: 0x00000001004950df libnixexpr.dylib`nix::ExprOpOr::eval(nix::EvalState&, nix::Env&, nix::Value&) + 95
    frame #65: 0x000000010049501d libnixexpr.dylib`nix::ExprOpAnd::eval(nix::EvalState&, nix::Env&, nix::Value&) + 93
    frame #66: 0x0000000100492de8 libnixexpr.dylib`nix::EvalState::callFunction(nix::Value&, nix::Value&, nix::Value&, nix::Pos const&) + 1496
    frame #67: 0x00000001004927e1 libnixexpr.dylib`nix::ExprApp::eval(nix::EvalState&, nix::Env&, nix::Value&) + 97
    frame #68: 0x0000000100492de8 libnixexpr.dylib`nix::EvalState::callFunction(nix::Value&, nix::Value&, nix::Value&, nix::Pos const&) + 1496
    frame #69: 0x00000001004927e1 libnixexpr.dylib`nix::ExprApp::eval(nix::EvalState&, nix::Env&, nix::Value&) + 97
    frame #70: 0x0000000100494ffd libnixexpr.dylib`nix::ExprOpAnd::eval(nix::EvalState&, nix::Env&, nix::Value&) + 61
    frame #71: 0x0000000100492de8 libnixexpr.dylib`nix::EvalState::callFunction(nix::Value&, nix::Value&, nix::Value&, nix::Pos const&) + 1496
    frame #72: 0x00000001004927e1 libnixexpr.dylib`nix::ExprApp::eval(nix::EvalState&, nix::Env&, nix::Value&) + 97
    frame #73: 0x0000000100492de8 libnixexpr.dylib`nix::EvalState::callFunction(nix::Value&, nix::Value&, nix::Value&, nix::Pos const&) + 1496
    frame #74: 0x00000001004927e1 libnixexpr.dylib`nix::ExprApp::eval(nix::EvalState&, nix::Env&, nix::Value&) + 97
    frame #75: 0x0000000100494ffd libnixexpr.dylib`nix::ExprOpAnd::eval(nix::EvalState&, nix::Env&, nix::Value&) + 61
    frame #76: 0x0000000100492de8 libnixexpr.dylib`nix::EvalState::callFunction(nix::Value&, nix::Value&, nix::Value&, nix::Pos const&) + 1496
    frame #77: 0x000000010053ffa3 libnixexpr.dylib`std::__1::__function::__func<nix::addPath(nix::EvalState&, nix::Pos const&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, nix::Value*, nix::FileIngestionMethod, std::__1::optional<nix::Hash>, nix::Value&)::$_7, std::__1::allocator<nix::addPath(nix::EvalState&, nix::Pos const&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, nix::Value*, nix::FileIngestionMethod, std::__1::optional<nix::Hash>, nix::Value&)::$_7>, bool (std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&)>::operator()(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&) + 307
    frame #78: 0x0000000100c98709 libnixutil.dylib`nix::dump(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, nix::Sink&, std::__1::function<bool (std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&)>&) + 3065
    frame #79: 0x0000000100cf02c1 libnixutil.dylib`void boost::context::detail::fiber_entry<boost::context::detail::fiber_record<boost::context::fiber, nix::VirtualStackAllocator, boost::coroutines2::detail::pull_coroutine<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >::control_block::control_block<nix::VirtualStackAllocator, nix::sinkToSource(std::__1::function<void (nix::Sink&)>, std::__1::function<void ()>)::SinkToSource::read(unsigned char*, unsigned long)::'lambda'(boost::coroutines2::detail::push_coroutine<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >&)>(boost::context::preallocated, nix::VirtualStackAllocator&&, nix::sinkToSource(std::__1::function<void (nix::Sink&)>, std::__1::function<void ()>)::SinkToSource::read(unsigned char*, unsigned long)::'lambda'(boost::coroutines2::detail::push_coroutine<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >&)&&)::'lambda'(boost::context::fiber&&)> >(boost::context::detail::transfer_t) + 289
    frame #80: 0x0000000100e9632f libboost_context.dylib`trampoline + 3
(lldb) 

@gilligan
Copy link
Contributor

gilligan commented Dec 4, 2020

I honestly don’t understand what we get out of adding the flake support to this repository @hamishmack , why do we need this? What is the cost-benefit ratio here?

Is there a problem that needs fixing to which flake is the answer?

One thing to note before going into any ofher details: We recently set up a nice GitHub action providing automatic PRs for when niv sources are updated. I like that. That is clearly gone then.

@hamishmack
Copy link
Contributor Author

I honestly don’t understand what we get out of adding the flake support to this repository @hamishmack , why do we need this? What is the cost-benefit ratio here?

I am not sure yet. So far trying out flakes has not been smooth sailing. There is the seg fault above and --show-trace seems not to work at all, making it hard to debug nix errors.

Is there a problem that needs fixing to which flake is the answer?

In theory better caching of evaluation results. nix develop and nix run in particular should be much faster than using nix-shell.

I'm updating the haskell.nix getting started guide and would like to include better instructions for both niv and flakes. I would also like to see if nix develop might be a good way to make haskell.nix shells work in a gitpod docker.

Other advantages:

  • Replaces Niv (but I'm not sure Niv is really broken).
  • Filters out ignored git files.
  • Gets git rev and ensuring repo is not dirty when doing so.

One thing to note before going into any ofher details: We recently set up a nice GitHub action providing automatic PRs for when niv sources are updated. I like that. That is clearly gone then.

I am also curious to know if the performance benefits of flakes require that we use flake.lock files. If we can continue using nix/sources.json (for some or all dependencies) and still get the performance improvements on flake enabled machines then that might be worth doing.

@hamishmack
Copy link
Contributor Author

Here is an example of how much faster flakes can be when the eval is cached:

Without using flakes:

~/iohk/plutus$ time "$(nix-build -A web-ghc)/bin/web-ghc-server" --help
trace: WARNING: commonLib.commitIdFromGitRepo is deprecated. Please use it from nixpkgs directly instead.
Usage: web-ghc-server [-v|--version] COMMAND

Available options:
  -h,--help                Show this help text
  -v,--version             Show the version

Available commands:
  webserver                

real	0m16.981s
user	0m16.551s
sys	0m1.076s

Using flakes:

~/iohk/plutus$ time nix run .#web-ghc -- --help
Usage: web-ghc-server [-v|--version] COMMAND

Available options:
  -h,--help                Show this help text
  -v,--version             Show the version

Available commands:
  webserver                

real	0m0.226s
user	0m0.052s
sys	0m0.093s

@gilligan
Copy link
Contributor

gilligan commented Dec 4, 2020

I honestly don’t understand what we get out of adding the flake support to this repository @hamishmack , why do we need this? What is the cost-benefit ratio here?

I am not sure yet. So far trying out flakes has not been smooth sailing. There is the seg fault above and --show-trace seems not to work at all, making it hard to debug nix errors.

Actually this segfault alone is a total blocker to me. I've never had the current Nix setup segfault on me in any way and i've done a lot of refactoring the past weeks. I am not eager to introduce something that segfaults on very basic interactions (such as nix develop), because who knows what else is going to explode down the road.

Is there a problem that needs fixing to which flake is the answer?

In theory better caching of evaluation results. nix develop and nix run in particular should be much faster than using nix-shell.

If they don't segfault... As for caching the majority of people seem to be using lorri and appear to be OK with their user experience (we talked about that in Slack just yesterday).

I'm updating the haskell.nix getting started guide and would like to include better instructions for both niv and flakes. I would also like to see if nix develop might be a good way to make haskell.nix shells work in a gitpod docker.

Other advantages:

  • Replaces Niv (but I'm not sure Niv is really broken).
  • Filters out ignored git files.
  • Gets git rev and ensuring repo is not dirty when doing so.
  • Niv: Niv is working perfectly fine, is broadly used, is documented and everyone knows how to use it. We have a GitHub action that automatically polls all our niv sources and creates PRs for us when a source can be updated (for example niv pre-commit-hooks.nix: update 431227b4 -> 1b11ce0f #2516). Flakes on the other hand have no documentation, aren't broadly adopted/used yet and I don't expect anyone from the plutus team has experience using them.
  • Filters out ignored git files: I guess that might be convenient but again we have a working solution which is gitignore.nix which just works.
  • Gets git rev..: That is a feature I guess. Not sure how relevant.

@gilligan
Copy link
Contributor

gilligan commented Dec 4, 2020

Here is an example of how much faster flakes can be when the eval is cached:

I do understand and acknowledge this. Yet I still don't think this is a valid answer to:

"What problem(s) would nix flakes solve that people working on this project have?"

Some plutus developers don't even use nix much at all, everyone else seems to be using lorri (there are also options like https://github.com/nix-community/nix-direnv or https://github.com/nmattia/sorri). I don't think that anyone is currently held back by Nix evaluation times. So Nix evaluation times don't appear to be a problem that needs fixing in the daily developer workflow.

Evaluation takes quite some time on hydra but i think that is a different matter. We might want to try and actually improve overall evaluation time. That would require profiling/evaluating bottlenecks which i haven't been able to do on my 64GB RAM desktop - @michaelpj recently created a haskell.nix on shellFor performance which might be relevant in this..

@michaelpj
Copy link
Contributor

I don't mind trying it out in a PR, but I'm with @gilligan in that flakes feel pretty alpha-quality to me now, and I'm not that interested in being an alpha-tester at the moment (considering Nix is arguably already beta-quality at best 😅 ).

However, I guess there might be a bit of missing context here. Is the point of this also so we can deploy web-ghc with https://github.com/input-output-hk/bitte, which I think David and Michael have been discussing?

@gilligan
Copy link
Contributor

gilligan commented Dec 5, 2020

Hm, does the use of bitte thus enforce flakes on any package/project that is to be deployed with it? That would seem somewhat odd.

If the actual motivation behind all of this is indeed being able to deploy something, and deploying absolutely requires a flake, i would hope that some much less intrusive shim could be provided for this purpose.

Also if it was only for deploying web-ghc (and nothing else) all the required effort maybe would not be justified? Maybe i am missing the big picture or some insight - sorry in that case.

@hamishmack
Copy link
Contributor Author

Seg fault seems likely to be this NixOS/nix#4264. It does not seem to seg fault when GC_DONT_GC=1.

@hamishmack
Copy link
Contributor Author

GC_DONT_GC=1 also seems make the problem I was having with --show-trace go away.

@gilligan
Copy link
Contributor

@hamishmack i guess we won't proceed with this for now - mind if we close this? You can keep your WIP branch around of course.

@michaelpj michaelpj closed this May 12, 2021
@gilligan gilligan mentioned this pull request May 19, 2021
11 tasks
@kwxm kwxm deleted the add-flake branch June 16, 2021 06:24
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants