最近将 MacBook 上的 homebrew 给卸载了,转投了 Nix。其中遇到几个问题,一直不知道怎么解决。
希望在 Mac 上使用过 Nix的朋友指点一下迷津。
我是通过 nix-darwin + home-manager 来进行配置的管理。
这是我目前的 Nix 配置
GitHub - Eason0210/nix: My personal nix config for Mac Big Sur
问题1: 直接通过 /Application
下的 Emacs App 图片启动 Emacs 时,无法识别 home-manager
中设置的变量(sessionVariables), 但是从终端启动就可以正常识别。
比如:从 Application 中启动的 Emacs 就没法识别 aspell 的词典,home-manager 中 aspell 设置如下,
home.sessionVariables = {
ASPELL_CONF = "conf ${config.xdg.configHome}/aspell/config;";
};
xdg = {
enable = true;
configFile."aspell/config".text = ''
local-data-dir ${pkgs.aspell}/lib/aspell
data-dir ${pkgs.aspellDicts.en}/lib/aspell
personal ${config.xdg.configHome}/aspell/en_US.personal
repl ${config.xdg.configHome}/aspell/en_US.repl
'';
};
问题2: 如果通过 Nix 安装 GUI APP ?
我目前对于 hammerspoon,Skim 等图像界面的应用都是单独下载 dmg 安装包进行安装。
rua
2
好巧, aspell 这个我也遇到过,后来还是不折腾 nix 了,因为想了想换到 linux 也是用 arch, nix 没有太明显的优势,在我已经有自己的安装脚本的情况下。
ps:GUI 可一在 nix-darwin 中设置 brew 安装。。
我是想着在 Mac 上先用好了 Nix,以后 Linux 和 WSL 可以搞一套 NixOS 配置,这样三个平台就统一了。
用 Nix 就是不想装 Brew 了 ,实在没好的办法的话,其实手动安装 GUI 的 App 其实也没什么,可以开着自动检查更新。
这个包我用了,测试过,PATH 的路径是全部继承了,就是设置的 session variable 没继承过来。
我这两天也准备换 nix ,等踩到这坑了我查查:see_no_evil:
ixnij
7
Nix 给我用怕了,我上次卸载不干净 nix,结果重装了两次系统 (蒙特雷到大瑟尔)
啊,搞的那么严重!。
官方有卸载的脚本,我卸载过一次,然后重现安装。Nix 安装的内容都在 /Nix 下面,还有/etc/static
文件夹,以及 .config
下面的一些配置(如果开启了xdg)。
另外,这里也有一个安装与卸载的指导
1 个赞
ixnij
9
哎,我还是太冲动。。。。我还重装了 macOS,没想到。
不过给了一条退路,我也可以放心地折腾 nix 了
在 Mac 里尝试新东西的时候可以考虑新建一个卷宗,这样不管咋搞不会伤到现有的设置。
3 个赞
ixnij
12
我现在遇到一个问题:
wu@ThomasdeMacBook-Pro ~/Projects/Repositories/doom-emacs (git)-[develop] % nix-shell -p nix-info --run "nix-info -m"
...
x/store/63n7mnabxy9q8rq87qm814pgbaqn9aah-source.drv
/nix/store/wxs90qjcl8hb63pkphb3a76n110hsw5g-brotli-1.0.9.drv
/nix/store/any81sfaaj8wisgrn42m9cdsx910wkj1-curl-7.76.1.drv
/nix/store/f3rfr7f90r6byndh0dmpabmhqrg196ra-cctools-binutils-darwin-wrapper-949.0.1.drv
/nix/store/hbil2bi9nrmw1rgnv912s1scwn9xygz3-clang-wrapper-11.1.0.drv
/nix/store/cl45rsz7ln7chbb9ymn4pz82r850nn7z-stdenv-darwin.drv
building '/nix/store/72ryiw4v8jcn357z5gfwhif820j2z64a-v6.2.tar.gz.drv'...
waiting for locks or build slots...
trying http://tarballs.nixos.org/sha256/15r2456g0mlq2q7gh2z52vl6zv6y0z8sdchrs80kg4idqd8sm8fd
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0
100 3251k 100 3251k 0 0 53471 0 0:01:02 0:01:02 --:--:-- 47193
building '/nix/store/9y9zj4cvqa6kndh2ng7afc69vdl2j9f5-c-ares-1.17.2.tar.gz.drv'..
trying https://c-ares.haxx.se/download/c-ares-1.17.2.tar.gz
一直卡在这里。这个 nix-shell 不吃 http_proxy 和 https_proxy 呀
网络问题解决了,现在等他 build。
之前提的这个安装和卸载指导有点过时了,现在 Nix 发布了最新的 2.4 版本,在 Mac 上不再支持单用户版本了。
安装也比较简单,直接执行下面脚本即可安装多用户版本:
curl -L https://nixos.org/nix/install | sh
卸载可以参考官方指南中的多用户版本部分,说的很清楚了。
https://nixos.org/manual/nix/stable/installation/installing-binary.html
ixnij
14
不错,更新得好。这样我就没必要使用 brew 了。
我是彻底不用 brew 了。GUI 的应用(比如 Karabiner 和 hammer-spoon)就直接 dmg 安装,反正这些应用都有自动更新,还更方便,这些工具程序也不影响 Nix。
注意,因为 Nix 2.4 只支持多用户,所以必须开启 nix-daemon
services = {
nix-daemon.enable = true;
};
这样会导致没法在终端中设置代理给 Nix 用,要到 daemon 中设置。
两种解决方案:
- 通过修改
/Library/LaunchDaemons
文件下的 org.nixos.nix-daemon.plist
实现, 参考 Nix on macOS, Made Easy - 知乎
修改前先执行 sudo launchctl unload org.nixos.nix-daemon.plist
停止服务,增加以下的 http_proxy 和 https_proxy 代理配置:
<key>EnvironmentVariables</key>
<dict>
<key>NIX_SSL_CERT_FILE</key>
<string>/etc/ssl/certs/ca-certificates.crt</string>
<key>OBJC_DISABLE_INITIALIZE_FORK_SAFETY</key>
<string>YES</string>
# start here ----------------------------------------------
<key>http_proxy</key>
<string>socks5://127.0.0.1:1080</string>
<key>https_proxy</key>
<string>socks5://127.0.0.1:1080</string>
# ends here --------------------------------------------------
</dict>
最后再执行 sudo launchctl load org.nixos.nix-daemon.plist
启动服务即可。
- 直接使用国内的Nix 镜像,比如清华源
1 个赞
ixnij
16
不错,也推荐一下 sjtug 的镜像,他也同步了 Nix(包括 Darwin)。
1 个赞
ddaren
17
Guix 还不支持 Mac 平台,只能用在 Linux 上。