這是我已經有解決方案:
表達低音: nix_local/pkgs/fish_plugins/bass/default.nix
{stdenv, fetchFromGitHub}:
let
version = "0.0.1";
in
stdenv.mkDerivation rec {
name = "bass-${version}";
src = fetchFromGitHub {
owner = "edc";
repo = "bass";
rev = "1fbf1b66f52026644818016015b8fa9e0f639364";
sha256 = "12bp8zipjbikasx20yz29ci3hikw0ksqlbxbvi2xgi4g6rmj7pxp";
};
patchPhase = ''
substituteInPlace Makefile --replace \
"~/.config/fish" \
$out/.config/fish
'';
}
表達對fish_with_config: nix_local/pkgs/fish_with_config/default.nix
{stdenv, fish, bass, makeWrapper}:
let
version = "0.0.1";
in
stdenv.mkDerivation rec {
name = "fish-with-config-${version}";
src = ./.;
buildInputs = [fish bass makeWrapper];
installPhase = ''
mkdir -p $out/.config/fish/functions
cp -r $src/.config/* $out/.config
cp -r ${bass}/.config/fish/functions/* \
$out/.config/fish/functions/
mkdir -p $out/bin
ln -s ${fish}/bin/fish $out/bin/fish
wrapProgram $out/bin/fish --set XDG_CONFIG_HOME "$out/.config"
'';
}
Fish程序被封裝以便它的配置存儲在nix存儲中。這使我們能夠從Bass符號鏈接功能,並且還可以從本地$src
目錄複製任何其他配置文件。其他插件可以用相同的方式符號鏈接。
當地src
dir來推導包含以下文件:
pkgs/fish_with_config
├── .config
│ └── fish
│ ├── fishd.8c8590486f8c
│ └── functions
└── default.nix
的.config/fish/fishd.8c8590486f8c
文件是一個「萬能變量文件」,這魚需要,以便操作。在標準Fish安裝中,該文件存儲在~/config/fish/
下,並且在您首次進入交互模式時創建。隨着用戶與Fish設置進行交互,此文件的內容通常會隨着時間而改變。
fish_with_config
派生將Fish配置存儲在nix-store中,這意味着它不能在後一個日期修改(不可寫)。這意味着所有配置設置都需要預先完成,因爲任何用戶嘗試修改設置都會導致許可錯誤 - 這顯然有點不方便,但對我來說不是一個阻礙。
可能值得注意的是,通用變量文件可能會隨着Fish的不同版本而改變,因此如果我要用較新版本的Fish構建fish_with_config
,我將首先通過在nix-shell中運行魚來確定它的默認內容並在~/config/fish/
下檢查自動生成的文件。
總之上述工作很好,我有權訪問bass
和我選擇「烘烤」(pkgs/fish_with_config/.config/fish/functions
)的任何其他用戶定義功能。
如果你看到任何可以改進或處理更多地方讓我知道。
來源
2017-12-31 00:57:57
b73
你的方法聽起來不錯。我說,試試吧。 –