论坛里偶尔有人讨论 NixOS 和 Guix,我也来分享下自己的配置
上面的配置使用了 Nix 生态下的一些工具来管理:
- macOS 系统配置(由 nix-darwin 支持)
- 软件包(由 nix / nix-darwin / homebrew 共同支持)
- dotfiles(由 home-manager 支持) - 包括 Bash / Emacs / Tmux 等软件的配置
- virtual machine 镜像的构建(由 nixos-generators 支持)
- virtual machine 的部署(由 morph 支持)
- ……
个人觉得 Nix 最棒的是对 reproducible ,只要配置内容不变,总可以得到相同的构建结果。换电脑变得很简单 —— 拷贝一个目录,重新构建上面的配置就够了。
Emacs 体验
我也用它来管理 Emacs 构建和配置:
- emacs-overlay 用来锁定 package 版本
- 使用
*.org
文件来做文学化的配置
传送门:https://github.com/c4710n/macos-x-nix/tree/master/modules/emacs
其他开发体验
另外,还可以用 nix 提供的工具 nix-shell 来管理开发环境。比如下面就声明了一个 Elixir 项目的运行环境:
{ pkgs ? import (fetchTarball "https://github.com/NixOS/nixpkgs/archive/856672f2ce37f47b69c31c448fb6e30f39761e66.tar.gz") { } }:
with pkgs;
mkShell {
buildInputs = [
beam.packages.erlangR24.elixir_1_13
nodePackages.npm
]
++ lib.optionals stdenv.isLinux [
# For ExUnit Notifier on Linux.
libnotify
# For file_system on Linux.
inotify-tools
]
++ lib.optionals stdenv.isDarwin ([
# For ExUnit Notifier on macOS.
terminal-notifier
# For file_system on macOS.
darwin.apple_sdk.frameworks.CoreFoundation
darwin.apple_sdk.frameworks.CoreServices
]);
配合上 direnv 之类的工具,nix-shell 可以自动启动,开发的时候用很方便。
希望可以激起大家对 Nix 兴趣~