2016-09-26 6 views
2

私は自分のソフトウェアのrcファイルをNix経由で定義したいと思っています。そこで私は、configファイルが含まれますconfig.nixで新しいパッケージ定義:カスタム設定/ default.nixファイルが定義されている中で次にNix:インストールされたパッケージがユーザー環境変数を設定できますか?

{ pkgs, ... }: 
{ 
packageOverrides = pkgs : with pkgs; { 
    custom-config = import ./custom-config { 
    inherit (pkgs) stdenv; 
    }; 
}; 
} 

をインライン:

{ stdenv }: 

stdenv.mkDerivation rec { 
    name = "custom-config"; 
    stdenv.mkDerivation { 
    name = "CustomConfig"; 
    src = builtins.toFile "customrc" '' 
     # content 
     ''; 
    }; 
} 

欠けている最後の部分は次のとおりです。ユーザのデフォルトシェルに特定の環境変数を追加します。たとえば、CUSTOM_CONFIG_RCなどです。これは関連するプログラムによって尊重されます。

誰でも私にヒントを教えてもらえますか?私はちょうど言語を理解し始めている。

答えて

2

典型的なNix方法は、ユーザーのシェルを変更せずにこれを行い、代わりにmakeWrapperを使用してRCファイルを使用するプログラムをラップすることです。そうすれば、あなたの環境は、1つのプログラムだけが必要とする変数で汚染される必要はありません。

buildInputs = [ makeWrapper ]; 

postInstall = '' 
    wrapProgram "$out/bin/my-program" --set CUSTOM_CONFIG_RC "$rcFile" 
''; 

残念ながらmakeWrapper still isn't documentedですが、これは広く使用されています。私はexamples in the nixpkgs repoのためにgreppingを勧めました。


あなたが本当にあなたの導出が

postInstall = '' 
    mkdir -p $out/share 
    echo "export CUSTOM_CONFIG_RC=$rcFile" > $out/share/your-rc-setup-script.sh 
''; 

パッケージがインストールされている場合、これは~/.nix-profile/share/your-rc-setup-script.shからシンボリックリンク終わる、その後、あなたの内になるような何かを行うことができ、お使いの環境でその変数が使用可能にしたいならば.bashrcをロードすると、

source $HOME/.nix-profile/share/your-rc-setup-script.sh 
+0

と表示されます。しかし、 'makeWrapper'を使うとパケット全体のソースから再コンパイルできますが、必要な変更は実行時環境変数と追加ファイルだけです。 2番目のヒント:ええ、それはこれが好きでしたか?味わいませんでした;-)すべての仕様を1つの場所に入れたいですか?それは正しいのですか? 'config.nix'は 'configuration.nix'にある 'environment'変数に影響しませんか? –

+0

1.パッケージを変更する代わりに、再コンパイルの必要を回避するために、ラップされたプログラムを別の派生プログラムにすることができます。 「1つの場所」は、これらのスクリプトのディレクトリであってもよい。 '〜/ .nix-profile/share/rc-scripts/...'とあなたの '.bashrc'は、そのディレクトリを反復してそれらをすべて出力することができます。 3.私はまったくフォローしませんが、あなたが言っていることは正しいと思います。私の知る限りでは、あなたのベース環境をパッケージから設定するための直接的なメカニズムはありません。そして、私の意見では、それはNixの哲学を破るでしょう。 –

関連する問題