【问题标题】:Override scripts in nix derivations在 nix 派生中覆盖脚本
【发布时间】:2017-01-04 14:05:19
【问题描述】:

有没有一种方法可以覆盖现有派生中的脚本和/或配置,而无需重新编译整个包?

我想创建一个新版本的 gnome-session 并修改了 $out/share/gnome-session/sessions/gnome.session。使用 overridePackage 我可以更改 preFixup 阶段,但这会导致整个 gnome-session 包被重新编译。

【问题讨论】:

    标签: nix nixos


    【解决方案1】:

    解决问题的一个简单方法是创建一个没有任何来源的新派生。诀窍是创建指向基础派生中每个文件和目录的链接,但需要修改的任何文件除外。这些文件根据需要显式处理。

    下面的 sn-p 显示了如何使用 xmonad 而不是 gnome-shell 创建新的 gnome-session。

    { nixpkgs ? import <nixpkgs> {} }:
    let
      inherit (nixpkgs) pkgs;  
    in
      pkgs.stdenv.mkDerivation {
        name = "gnome-session";
        builder = pkgs.writeText "builder.sh" ''
          # source standard environment
          . $stdenv/setup
    
          # shorthands
          refpkg=${pkgs.gnome3.gnome_session}
          file=share/gnome-session/sessions/gnome.session
    
          # create output dirs for new derivation
          mkdir -p $out/share
          mkdir -p $out/share/gnome-session/sessions
    
          # link unchanged files from the original gnome-session 
          ln -sf $refpkg/bin $out
          ln -sf $refpkg/libexec $out
          find $refpkg/share -maxdepth 1 \
            -not -name gnome-session -exec ln -sf {} $out/share \;
    
         # change gnome-shell to xmonad
          sed 's/org.gnome.Shell/xmonad/' $refpkg/$file > $out/$file
        '';
         # make sure gnome-session is installed before deriving it!
        buildInputs = [ pkgs.gnome3.gnome_session ];
      }
    

    【讨论】:

      猜你喜欢
      • 2019-12-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-04
      • 1970-01-01
      • 2020-07-28
      • 2020-04-04
      • 1970-01-01
      相关资源
      最近更新 更多