安装Nix

sudo pacman -S nix
nix --version

基于ArchLinux安装Nix,通用安装过程参见Nix官方安装页面

配置Nix基础环境

# 将Nix基础环境写入全局配置
sudo tee -a /etc/nix/nix.conf << EOF
# 启用 nix-command 和 flakes 的实验性功能
experimental-features = nix-command flakes
# 设置镜像源
substituters = https://mirrors.ustc.edu.cn/nix-channels/store https://cache.nixos.org/
EOF

# 启动nix-daemon,并设置开机自启
sudo systemctl enable --now nix-daemon

# 后续调整配置后,重启nix-daemon
sudo systemctl restart nix-daemon

在用户配置~/.config/nix/nix.conf中设置substituters,需要在全局配置/etc/nix/nix.conf中增加trusted-users配置才能生效,为了避免配置分散,直接使用全局配置。

初始化Home Manager与Flakes

nix run home-manager/master -- init --switch
home-manager --version

参见Home Manager官方安装页面

如果nix命令时找不到/nix/store,尝试手工创建/nix/store目录:sudo mkdir -p /nix/store(不知道为什么nix没有自己创建这个目录)。

执行上述命令后,会自动在~/.config/home-manager目录下生成home.nixflake.nixflake.lock)配置文件。

配置Home Manager

修改home.nix配置:

cd ~/.config/home-manager
mv home.nix home.nix.bak

cat > home.nix << EOF
{ config, pkgs, ... }:

{
  home.username = "luanrz";
  home.homeDirectory = "/home/luanrz";
  home.stateVersion = "26.05";

  home.packages = with pkgs; [
    hello
    git
    vim
    htop
    curl
  ];  

  home.file = {
  };

  home.sessionVariables = {
  };

  programs.home-manager.enable = true;
  
  programs.zsh = {
    enable = true;
    initExtra = ''
      alias ll='ls -la'
    '';
  };
}
EOF

更新home-manager:

home-manager switch

如果新文件与原文件有冲突会报错,可以使用-b backup参数备份原文件:home-manager switch -b backup

如果出现error: creating directory "/nix/var/nix/builds/nix-xxx": Permission denied的报错,可以为当前用户授权:sudo chown $USER:nixbld /nix/var/nix/builds

配置Flakes

更新home-manager时不会自动更新flake,如果修改了~/.config/home-manager下的flake.nix配置,可执行下述命令更新flake:

cd ~/.config/home-manager
nix flake update