Skip to content

Repository files navigation

mirrors-nix

一个 NixOS flake 模块, 把"镜像站" (provider) 与"软件" (software) 正交分离, 一处声明偏好顺序, 统一配置 nix / pip / npm / cargo / rustup / goproxy / docker / huggingface 等常用镜像源。

为什么需要它

国内 NixOS 用户通常需要配置镜像源 以 解决各开发软件下载依赖库时的网络问题.

但是这些配置通常是繁琐的, 我审视了这个配置过程, 发现我们实际上只是在表达正交的五个维度的信息:

  1. 我信任哪些镜像站
  2. 当有多个选择时,我偏好选择哪个镜像站
  3. 我要为哪些软件配置镜像站
  4. 我怎么在 NixOS 中对不同软件配置镜像站
  5. 各镜像站对于不同软件的准确下载地址是哪

而这五部分信息中, 我发现实际上需要我们定制的信息相当少:

  1. 我信任哪些镜像站 -- 有定制需求, 但仍然有很强的共性
  2. 当有多个选择时,我偏好选择哪个镜像站 -- 这可能是最需要定制的
  3. 我要为哪些软件配置镜像站 -- 这实际上完全可以通过 NixOS 的模块系统自动获知
  4. 我怎么在 NixOS 中对不同软件配置镜像站 -- 这是公共知识, 完全没必要让每个用户都自己研究和折腾一遍
  5. 各镜像站对于不同软件的准确下载地址是哪 -- 这是公共知识, 完全没必要让每个用户都自己研究和折腾一遍

因此, 我设计了这个 NixOS 模块, 它允许你正交地表达各维度的偏好, 并且给出了合理的默认值, 因此你得以轻松地为所有软件配置镜像站.

mirrors-nix 内置了 10+ 个常用 provider 预设 (tuna / ustc / aliyun / tencent / bfsu / sjtu / daocloud / hf-mirror / goproxy.cn / goproxy.io), 你只需声明偏好顺序, 模块自动解析出每个软件可用的镜像, 并添加对应的 NixOS 配置。

快速上手

Flake 安装:

# flake.nix
inputs.mirrors-nix.url = "github:luochen1990/mirrors-nix";

# configuration.nix (modules 数组)
inputs.mirrors-nix.nixosModules.default

一行启用全部默认镜像:

mirrors.enable = true;

启用规则: 对于支持指定多个镜像站的软件 (nix / docker / goproxy), mirrors-nix 会把已启用镜像站中所有兼容的条目都加入软件源列表; 对于只支持单镜像站的软件 (pip / npm / cargo / rustup / huggingface), 则取列表中首个兼容的镜像站。

需要更细粒度的控制时:

# 1. 只启用你信任的镜像站 (列表顺序即优先级, 不在列表内的内置 provider 不会被使用)
mirrors.providers = ["ustc" "tuna" "aliyun" "tencent" "bfsu" "sjtu"];

# 2. 禁用某个软件的镜像支持 (其余软件不受影响)
mirrors.cargo.enable = false;

# 3. 精确地为某个软件指定镜像站 (覆盖 mirrors.providers 全局设置, 不影响其他软件)
mirrors.pip.providers = ["aliyun" "tuna"];

# 4. 添加自定义镜像站 (与内置预设自动合并, 名字需出现在 mirrors.providers 中才会生效)
mirrors.providerPresets.my-cache.nix = {
  url = "https://my-cache.example.com";
  trusted-public-keys = ["my-cache-1:abc123..."];
};
mirrors.providers = ["my-cache" "ustc" "tuna"];

完整示例见 example/

答谢

本项目的横向配置思路受 catppuccin/nix 启发。

镜像数据来自以下 provider 长期提供的开源服务 (URL 即 providers.nix 中引用的入口):

各 provider 的镜像覆盖状况可通过 mirrorz 一站式查询; 本项目的 URL 巡检脚本 (scripts/verify_mirrors.py) 也以 mirrorz 数据为一致性基准。没有这些镜像站长期提供的开源服务, 本项目毫无意义。

docker 提示: 国内免费 Docker Hub registry 镜像大多于 2024-06 关停, 目前仅 DaoCloud 仍可用且有限流 (1 MiB/s, 20 req/min), 故 mirrors.docker.enable 默认关闭。生产环境建议自建 registry 或使用云厂商付费服务。

License

MIT

About

配置软件镜像源的 NixOS flake

Topics

Resources

Stars

2 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages