OFFSET偏移
← 文章目录OFFSET / FIELD NOTESNO. 028

外部 Flake 引用与协作

连接外部模块和软件包,并检查依赖版本之间的关系。

所在专题Flakes:项目与依赖管理 ↗
约 4 分钟阅读开始阅读

如何引用外部资源?#

在 flake.nix 的 inputs 部分,你可以定义各种外部来源。

1. 常见的 URL 类型

  • GitHub/GitLab:github:user/repo/rev
  • 本地路径:path:../other-flake
  • Tarball:https://example.com/archive.tar.gz

实战案例:引用他人的 Nix 配置#

1. 引用 Hyprland 的官方 Flake

Hyprland 更新极快,NixOS 官方仓库可能不够新。你可以直接引用它的 Flake:

inputs.hyprland.url = "github:hyprwm/Hyprland";

outputs = { self, nixpkgs, hyprland, ... }: {
  nixosConfigurations.my-pc = nixpkgs.lib.nixosSystem {
    modules = [
      ./configuration.nix
      { programs.hyprland = {
          enable = true;
          package = hyprland.packages.x86_64-linux.hyprland;
          portalPackage = hyprland.packages.x86_64-linux.xdg-desktop-portal-hyprland;
        }; } # 官方文档的包与 portal 配对方式
    ];
  };
};

2. 引用他人的 Neovim 配置

假设有人把自己的 Neovim 打包成了一个 Flake:

inputs.my-neovim.url = "github:someone/neovim-flake";

# 在 configuration.nix 里:
environment.systemPackages = [ inputs.my-neovim.packages.x86_64-linux.default ];

🔄 协作与依赖冲突#

当你引用多个 Flake 时,每个 Flake 可能都依赖于不同版本的 nixpkgs。共享版本前需检查外部项目的兼容要求。

使用 follows 解决!

如果外部 Flake 支持当前 nixpkgs,可让指定输入跟随主配置的版本:

inputs = {
  nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable";
  home-manager = {
    url = "github:nix-community/home-manager";
    inputs.nixpkgs.follows = "nixpkgs"; # 强制跟随主 nixpkgs
  };
};

协作工作流#

  1. 添加 Input:修改 flake.nix。
  2. 锁定版本:运行 nix flake lock(会自动更新 flake.lock)。
  3. 使用 Output:在代码中通过变量名引用对应的输出。

总结#

学会引用外部 Flake,你就拥有了整个 Nix 社区的武器库。无论是桌面环境、编辑器还是特定的开发工具,都能实现“开箱即用”。

参考与延伸

  1. Nix Flake 手册 ↗
  2. Nix flake update ↗
  3. Nix flake check ↗
  4. Hyprland 官方 NixOS 文档 ↗

根据技术笔记重新整理,示例使用通用名称。

沿专题继续阅读

Flakes:项目与依赖管理

  1. 01Flake 结构:inputs 与 outputs
  2. 02flake.lock 与可复现性
  3. 03Flake Utils 与项目模板
  4. 04外部 Flake 引用与协作
  5. 05将 NixOS 配置迁移到 Flakes
  6. 06Flakes 项目与依赖管理教程
  7. 07Flake 更新机制
  8. 08flake.lock 回退与手动编辑
CONTINUE READING / 下一篇将 NixOS 配置迁移到 Flakes

从已有配置建立 Flake 入口,分别完成检查、构建和激活。