Nixos

如何使用家庭管理器安裝 tarball?

  • April 25, 2021

我對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.nixnix 如何確定什麼是“包”。然後我們可以找到包類型的定義,並看到一個包是一個派生或一個包含儲存路徑的字元串。

rnix-lsp 已經是一個 nix 項目,並將其自身導出為 default.nix 中的派生。1因此,我們只需將其下載為 tarball,並將其導入到我們的配置中。home-manager然後會很高興地接受派生,建構它,並像任何其他包一樣安裝它。


1從技術上講,它被定義為flake inflake.nixdefault.nix使用 flake-compat 將其導出為派生。

引用自:https://unix.stackexchange.com/questions/646319