不能再这样了… 我知道,我是个爱哭的人。但以后可不能像今天这样哭下去了。毕竟,我一穗灯花,可是号称文韬武略,天下第一的人,至少要做出一份坚强的样子啊。如果像这样软弱的话,怎么去保护大家……
—— 一穗灯花,2022 年 8 月 8 日
Flake 简介
Flake 是 Nix 的一个实验性功能,它支持一系列 Nix 命令,以及在配置文件中定义软件源 URL 版本,使其实现 Nix 的可复现性,便于批量部署。很多第三方的软件仓库和模块(如 NixOS-CN)也是利用 Flake 实现的。
启用 Nix Flake
在 configuration.nix
中添加如下的内容:
1 2 3 4 5 6
| nix = { package = pkgs.nixUnstable; extraOptions = '' experimental-features = nix-command flakes ''; };
|
配置 Nix Flake
在 /etc/nixos/
下新建一个名为 flake.nix
的文件。并向编辑文件,写入如下内容:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
| { description = "随便写,不写也行";
inputs = { nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable"; };
outputs = { self, nixpkgs }: let system = "x86_64-linux"; in { nixosConfigurations."你的主机名" = nixpkgs.lib.nixosSystem { inherit system; modules = [ ./configuration.nix ]; }; };
}
|
配置完成后,使用 nixos-rebuild
更新 NixOS 以及使用 nix flake
命令更新 flake:
1 2
| sudo nixos-rebuild switch sudo nix flake update
|
使用 NixOS-CN 及 NUR 第三方仓库
在启用 Flake 功能之后,在 flake.nix
中添加如下内容:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65
| { description = "随便写,不写也行";
inputs = { nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
# 添加 NixOS CN 仓库 nixos-cn.url = "github:nixos-cn/flakes"; # 强制 nixos-cn 和该 flake 使用相同版本的 nixpkgs nixos-cn.inputs.nixpkgs.follows = "nixpkgs"; # 添加 NUR 仓库 nur.url = "github:nix-community/NUR"; # 强制 NUR 和该 flake 使用相同版本的 nixpkgs nur.inputs.nixpkgs.follows = "nixpkgs";
};
# 在 outputs 中添加 nixos-cn 以及 nur
outputs = { self, nixpkgs, nixos-cn, nur }: let system = "x86_64-linux"; in { nixosConfigurations."你的主机名" = nixpkgs.lib.nixosSystem { inherit system; modules = [ ./configuration.nix # NixOS CN ({ ... }: { # 使用 nixos-cn flake 提供的包 environment.systemPackages = [ nixos-cn.legacyPackages.${system}.wechat-uos]; # 使用 nixos-cn 的 binary cache nix.binaryCaches = [ "https://nixos-cn.cachix.org" ]; nix.binaryCachePublicKeys = [ "nixos-cn.cachix.org-1:L0jEaL6w7kwQOPlLoCR3ADx+E3Q8SEFEcB9Jaibl0Xg=" ];
imports = [ # 将nixos-cn flake提供的registry添加到全局registry列表中 # 可在`nixos-rebuild switch`之后通过`nix registry list`查看 nixos-cn.nixosModules.nixos-cn-registries
# 引入nixos-cn flake提供的NixOS模块 nixos-cn.nixosModules.nixos-cn ]; })
# 启用 NUR nur.nixosModules.nur ({ config, ... }: { # 使用 NUR 提供的包,这里以 hyfetch 为例 environment.systemPackages = [ config.nur.repos.YisuiMilena.hyfetch ]; })
]; }; }; }
|
运行 hyfetch
以检验软件是否正确安装:
