Find a file
Matthew Bauer f69820417f Set kern.curproc_arch_affinity=0 to escape Rosetta
By default, once you enter x86_64 Rosetta 2, macOS will try to run
everything in x86_64. So an x86_64 Nix will still try to use x86_64
even when system = aarch64-darwin. To avoid this we can set
kern.curproc_arch_affinity sysctl. With kern.curproc_arch_affinity=0,
we ignore this preference.

This is based on how
https://opensource.apple.com/source/system_cmds/system_cmds-880.40.5/arch.tproj/arch.c.auto.html
works. Completely undocumented, but seems to work!

Note, you can verify this works with this impure Nix expression:

```
  {
    a = derivation {
      name = "a";
      system = "aarch64-darwin";
      builder = "/bin/sh";
      args = [ "-e" (builtins.toFile "builder" ''
        [ "$(/usr/bin/arch)" = arm64 ]
        [ "$(/usr/bin/arch -arch x86_64 /bin/sh -c /usr/bin/arch)" = i386 ]
        [ "$(/usr/bin/arch -arch arm64 /bin/sh -c /usr/bin/arch)" = arm64 ]
        /usr/bin/touch $out
      '') ];
    };

    b = derivation {
      name = "b";
      system = "x86_64-darwin";
      builder = "/bin/sh";
      args = [ "-e" (builtins.toFile "builder" ''
        [ "$(/usr/bin/arch)" = i386 ]
        [ "$(/usr/bin/arch -arch x86_64 /bin/sh -c /usr/bin/arch)" = i386 ]
        [ "$(/usr/bin/arch -arch arm64 /bin/sh -c /usr/bin/arch)" = arm64 ]
        /usr/bin/touch $out
      '') ];
    };
  }
```
2021-01-11 22:40:21 -06:00
.github Bump cachix/install-nix-action from v11 to v12 (#4237) 2020-11-09 23:21:55 +00:00
config Update config.guess for proper arm64 macOS detection 2020-12-02 19:14:34 -06:00
contrib function-trace: always show the trace 2019-09-18 23:23:21 +02:00
doc/manual Tweak 2021-01-11 19:42:24 +01:00
m4
maintainers set Content-Type to "text/plain" for install script 2020-08-20 13:21:22 +02:00
misc Add some missing clean-files 2020-10-18 20:32:59 +02:00
mk Remove 'dist' target 2020-12-03 16:17:58 +01:00
nix-rust Remove 'dist' target 2020-12-03 16:17:58 +01:00
perl Make sodium a required dependency 2021-01-06 17:56:53 +01:00
scripts Use com.apple.oahd.plist for rosetta 2 detection 2020-12-04 13:28:09 -06:00
src Set kern.curproc_arch_affinity=0 to escape Rosetta 2021-01-11 22:40:21 -06:00
tests Add 'nix store delete' command 2021-01-11 19:46:59 +01:00
.dir-locals.el .dir-locals.el: Set c-block-comment-prefix 2020-07-10 11:21:06 +02:00
.editorconfig
.gitignore Generate separate manpages for each nix subcommand 2020-12-02 23:23:23 +01:00
.version Revert "Bump version to 3.0" 2020-10-26 11:30:18 +01:00
bootstrap.sh
configure.ac Make sodium a required dependency 2021-01-06 17:56:53 +01:00
COPYING
default.nix Simplify shell.nix and default.nix 2020-06-17 19:21:46 +02:00
flake.lock flake.lock: Update 2020-10-18 21:20:35 +02:00
flake.nix Include static "nix" binary in Hydra build products 2020-12-03 18:05:18 -06:00
local.mk Remove 'dist' target 2020-12-03 16:17:58 +01:00
Makefile Move <nix/fetchurl.nix> into the nix binary 2020-12-22 14:43:20 +01:00
Makefile.config.in Make sodium a required dependency 2021-01-06 17:56:53 +01:00
precompiled-headers.h Config: Use nlohmann/json 2020-08-20 11:02:16 +02:00
README.md README: fix link to hacking guide 2020-12-28 09:30:14 -08:00
shell.nix Add back flake-compat shell.nix 2020-07-17 14:58:59 +00:00

Nix

Open Collective supporters Test

Nix is a powerful package manager for Linux and other Unix systems that makes package management reliable and reproducible. Please refer to the Nix manual for more details.

Installation

On Linux and macOS the easiest way to install Nix is to run the following shell command (as a user other than root):

$ curl -L https://nixos.org/nix/install | sh

Information on additional installation methods is available on the Nix download page.

Building And Developing

See our Hacking guide in our manual for instruction on how to build nix from source with nix-build or how to get a development environment.

Additional Resources

License

Nix is released under the LGPL v2.1.