我对 nix 很陌生,所以对解决方案的详细解释将不胜感激。
我正在尝试添加rnix-lsp到我的家庭配置。 github 页面上的说明只是说明要在 tarball 的 url 上运行 nix-env 命令,我不知道该怎么办。
我知道fetchTarball
,但我不知道如何以与home.packages
.我尝试过这样的事情:
home.packages = [
(import (fetchTarball “https://github.com/nix-community/rnix-lsp/archive/master.tar.gz”) {}; ).defaultNix
];
但随后我收到有关尝试调用集合的错误。有什么办法可以做我想做的事吗?
错误具体为:
error: attempt to call something which is not a function but a set, at /home/izzylan/.config/nixpkgs/home.nix:33:9
答案1
我通过深入研究源代码自己找到了答案:
import (fetchTarball “https://github.com/nix-community/rnix-lsp/archive/master.tar.gz”)
为什么这有效
我们可以看到在家庭环境.nix该家庭经理期望home.packages
期望类型为types.package
.这是在 nixpkgs 模块中定义的,因此我们可以检查types.nix
nix 如何确定什么是“包”。然后我们可以找到封装类型的定义并查看包是派生还是包含存储路径的字符串。
rnix-lsp 已经是一个 nix 项目,并将自身导出为 default.nix 中的派生版本。1因此,我们所需要做的就是将其下载为 tarball,并将其导入到我们的配置中。home-manager
然后将愉快地获取派生,构建它,并像任何其他包一样安装它。
1从技术上讲,它被定义为薄片并flake.nix
使用default.nix
flake-compat 将其作为派生导出。