如何引用外部资源?#
在 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
};
};协作工作流#
- 添加 Input:修改
flake.nix。 - 锁定版本:运行
nix flake lock(会自动更新flake.lock)。 - 使用 Output:在代码中通过变量名引用对应的输出。
总结#
学会引用外部 Flake,你就拥有了整个 Nix 社区的武器库。无论是桌面环境、编辑器还是特定的开发工具,都能实现“开箱即用”。
参考与延伸
根据技术笔记重新整理,示例使用通用名称。