treefmt
treefmt copied to clipboard
Dev shell environment fails to build on macOS
Describe the bug
Unable to enter the the dev shell on an M1 MacBook Pro
To Reproduce
Steps to reproduce the behavior:
- Get yourself an M1 MacBook Pro, however I suspect macOS BigSur in general is all that's required
- Try to enter the dev shell by running
nix-shellfrom the root of the repository.
Expected behavior
$ nix-shell --show-trace 1 ↵
error: while evaluating the attribute 'args' of the derivation 'treefmt' at /nix/store/qq9vbals3s6dyry604sji10jix15fk8h-source/nix/mkNakedShell.nix:31:10:
while evaluating the attribute 'buildInputs' of the derivation 'coreutils-8.32' at /nix/store/zz4q0z1jj8m72k9qbcp4vs4rj954w64q-source/pkgs/stdenv/generic/make-derivation.nix:192:11:
while evaluating the attribute 'depsBuildBuild' of the derivation 'gmp-6.2.1' at /nix/store/zz4q0z1jj8m72k9qbcp4vs4rj954w64q-source/pkgs/development/libraries/gmp/6.x.nix:15:3:
while evaluating 'getOutput' at /nix/store/zz4q0z1jj8m72k9qbcp4vs4rj954w64q-source/lib/attrsets.nix:482:23, called from undefined position:
while evaluating anonymous function at /nix/store/zz4q0z1jj8m72k9qbcp4vs4rj954w64q-source/pkgs/stdenv/generic/make-derivation.nix:133:17, called from undefined position:
while evaluating the attribute 'stdenv.cc' at /nix/store/zz4q0z1jj8m72k9qbcp4vs4rj954w64q-source/pkgs/stdenv/generic/default.nix:166:14:
while evaluating the attribute 'cc' at /nix/store/zz4q0z1jj8m72k9qbcp4vs4rj954w64q-source/pkgs/stdenv/generic/default.nix:166:14:
while evaluating the attribute 'cc' at /nix/store/zz4q0z1jj8m72k9qbcp4vs4rj954w64q-source/pkgs/stdenv/native/default.nix:122:5:
anonymous function at /nix/store/zz4q0z1jj8m72k9qbcp4vs4rj954w64q-source/pkgs/build-support/cc-wrapper/default.nix:8:1 called without required argument 'lib', at /nix/store
System information
Running this from latest master on macOS Big Sur 11.4, M1 Chip.
Can you try with #130 ? I have seen that issue before and I think it has been fixed in nixos-unstable.
Different failure now:
strip is /nix/store/0zcf6wnk2zrpdz6q4rqk4y90yfcw7mvn-clang-wrapper-11.1.0/bin/strip
patching script interpreter paths in /nix/store/mgqgsdsjdvqrb67b7bm8b6mxf6jc9f4a-ormolu-0.1.4.1-data
strip is /nix/store/0zcf6wnk2zrpdz6q4rqk4y90yfcw7mvn-clang-wrapper-11.1.0/bin/strip
patching script interpreter paths in /nix/store/8ai2rsfpx9gc43d5jxawm53wqll13ql5-ormolu-0.1.4.1-doc
strip is /nix/store/0zcf6wnk2zrpdz6q4rqk4y90yfcw7mvn-clang-wrapper-11.1.0/bin/strip
stripping (with command strip and flags -S) in /nix/store/gl2832pyfc7l1pzji6hbckfkqyhqi1qz-ormolu-0.1.4.1-bin/bin
patching script interpreter paths in /nix/store/gl2832pyfc7l1pzji6hbckfkqyhqi1qz-ormolu-0.1.4.1-bin
cycle detected in the references of '/nix/store/gl2832pyfc7l1pzji6hbckfkqyhqi1qz-ormolu-0.1.4.1-bin' from '/nix/store/llpjv8kzb16r8hw19wd8wqx0srcvr5ll-ormolu-0.1.4.1'
cannot build derivation '/nix/store/lzsqfzy8zqgw974z00ap75qlw1sm5cki-devshell-dir.drv': 1 dependencies couldn't be built
cannot build derivation '/nix/store/ddiwqrf2c3h9qg6f5dmwc8719ilv2lp0-treefmt-entrypoint.drv': 1 dependencies couldn't be built
error: build of '/nix/store/ddiwqrf2c3h9qg6f5dmwc8719ilv2lp0-treefmt-entrypoint.drv' failed
Earlier in the compilation I was seeing a lot of this from various packages:
'apple-a7' is not a recognized processor for this target (ignoring processor)`
That's because aarch64-darwin is not quite there yet. You can try nix-shell --system x86_64-darwin
I literally just had a look at the flake and saw the architectures listed and realised it didn't have a aarch64-darwin.
Tried with x86_64-darwin but ran into this:
warning: ignoring the user-specified setting 'system', because it is a restricted setting and you are not a trusted user
I'm using Nix Darwin, so I'm trying to figure out how to make my user a trusted user.
That's because aarch64-darwin is not quite there yet. You can try
nix-shell --system x86_64-darwin
As an aside, where can I track the effort to add ARM support?
I was able to activate flake support and successfully built 😄
Is there a way to set x86_64-darwin as the default system system wide? An env variable or something?
You want to set system = "x86_64-darwin" in /etc/nix/nix.conf. In nix-darwin, this can be achieved by adding it to the nix.extraOptions attribute. See https://github.com/LnL7/nix-darwin/blob/e1a3f7292f085fd588d11f94ed0f47968c16df0c/modules/nix/default.nix#L126-L134
I'm not sure if there is a meta ticket for M1. There is https://github.com/NixOS/nixpkgs/issues/116341 or search for M1 or aarch64-darwin on the issue tracker. I think https://github.com/NixOS/nixpkgs/pull/136049 might be related to the error you were seeing, ormolu is the code formatter for Haskell.
Thanks for this! Just wanted to add that you want to set system = x86_64-darwin in /etc/nix/nix.conf without the quotes around x86_64-darwin 😃
I cloned this repo for the first time on aarch64-darwin, ran direnv allow upon entering the repo, and the devshell built without issues. nix develop also works.
Edit:
System info: latest master, M2 MacBook Air, [email protected]
FWIW, I already had extra-platforms = x86_64-darwin aarch64-darwin in my /etc/nix/nix.conf, managed by a nix-darwin flake.
Yeah this can be closed, I forgot about it 😅