Nixos
如何使用家庭管理器安裝 tarball?
我對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
我通過深入研究原始碼自己找到了答案:
import (fetchTarball “https://github.com/nix-community/rnix-lsp/archive/master.tar.gz”)
為什麼這有效
我們可以在home-environment.nix中看到 home-manager 期望
home.packages
的類型是types.package
. 這是在 nixpkgs 模組中定義的,因此我們可以檢查types.nix
nix 如何確定什麼是“包”。然後我們可以找到包類型的定義,並看到一個包是一個派生或一個包含儲存路徑的字元串。rnix-lsp 已經是一個 nix 項目,並將其自身導出為 default.nix 中的派生。1因此,我們只需將其下載為 tarball,並將其導入到我們的配置中。
home-manager
然後會很高興地接受派生,建構它,並像任何其他包一樣安裝它。1從技術上講,它被定義為flake in
flake.nix
並default.nix
使用 flake-compat 將其導出為派生。