2017-01-04 22 views
0

Есть ли способ переопределить скрипты и/или конфиги в существующем деривации без необходимости перекомпилировать весь пакет?Переопределить скрипты в выводах nix

Я хотел бы создать новую версию gnome-сессии с измененным $out/share/gnome-session/sessions/gnome.session измененным. Использование overridePackage Я могу изменить фазу preFixup, но это приведет к перекомпиляции всего пакета сеанса gnome-session.

ответ

0

Простым решением проблемы является создание нового вывода без каких-либо источников. Хитрость заключается в создании ссылок на каждый файл и каталог в базовом деривации, за исключением любых файлов (ов), нуждающихся в модификации. Эти файлы обрабатываются явно в соответствии с потребностями.

В приведенном ниже фрагменте показано, как создать новую сессию gnome с помощью xmonad вместо gnome-shell.

{ 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 ]; 
    } 

 Смежные вопросы

  • Нет связанных вопросов^_^