在 Nix 中,如何从 fetchFromGitHub 中删除和替换文件?

问题描述 投票:0回答:1

有没有办法从 fetchFromGitHub 中删除配置文件?我想用我自己的配置替换默认配置。到目前为止,repo 中的所有文件都已构建并符号链接到“.config/yazelix”中,但没有运行任何 postFetch 命令。一切构建都没有任何错误。

我已将以下内容添加到“home.nix”文件的

home.file
部分:

      ".config/yazelix".source = pkgs.fetchFromGitHub {
        owner = "luccahuguet";
        repo = "yazelix";
        rev = "1093c18c22d9d9858f4cf5813bd9aa7578660af8";
        hash = "sha256-+6Mq8mR/tF1Z+GyooMz9fWGV57bFhbHXBVBDkHpUMDA="; # build and get the hash from the error
        postFetch = ''
          rm $out/zellij/config.kdl
          cp ./apps/yazelix/config.kdl $out/zellij/config.kdl
        '';
      };

有人有任何建议让它发挥作用吗?非常感谢任何帮助。

shell nix home-manager
1个回答
0
投票

您提供的

postFetch
片段应该可以正常工作。

我认为问题在于

source = pkgs.fetchFromGithub
寻找
hash
来更新商店条目。如果您构建了第一代没有
postFetch
,则在您添加或编辑postFetch阶段后,Home Manager
不会自动重建
商店条目。

手动方法

要强制更新,您应该按照以下步骤删除商店条目并重建您的主配置:

  1. 删除
    ".config/yazelix".source
    并构建新的家庭配置一代。这是删除对 Nix 存储的依赖所必需的,否则您将无法删除该条目。
  2. 使用
    home-manager remove-generation <id>
    删除之前的家庭配置生成。您可以使用
    id
    找到
    home-manager generations
  3. 使用
    nix-store --delete <path>
    删除商店条目。您可以使用
    path
    找到
    ls -dl ~/.config/yazelix
  4. 添加回来
    ".config/yazelix".source
    并构建新的家庭配置一代

自动方法

手动方法不能适应未来,因为您每次编辑时都需要再次应用它

config.kdl
。另一种方法是创建一个推导:

file = let
  myConfig = pkgs.stdenv.mkDerivation {
    name = "custom-yazelix-config";
    src = pkgs.fetchFromGitHub {
      owner = "luccahuguet";
      repo = "yazelix";
      rev = "1093c18c22d9d9858f4cf5813bd9aa7578660af8";
      hash = "sha256-+6Mq8mR/tF1Z+GyooMz9fWGV57bFhbHXBVBDkHpUMDA=";
    };
    installPhase = ''
      mkdir -p $out/zellij
      cp ${self}/apps/yazelix/config.kdl $out/zellij/config.kdl
    '';
  };
in {
  ".config/yazelix".source = myConfig;
};

这里

${self}
是提供home配置的flake的路径。

© www.soinside.com 2019 - 2024. All rights reserved.