2017-11-04 16 views
1

変数dotfiles_dirを宣言して、他のすべてのファイルがそのファイルを参照して使用できるようにしたいとします。 /etc/nixos/configuration.nixで例えばnixファイルでグローバル変数(または関数)を作る方法は?

(動作しない)

(それのルートファイル、右?)

dotfiles_dir="/home/bjorn/.config/dotfiles"; 

import "${dotfiles_dir}/nixos/root/default.nix" 

と(https://github.com/rycee/home-managerと)~/.config/nixpkgs/home.nixでも、それを使用

import "${dotfiles_dir}/nixos/home/default.nix" 

答えて

2

変数dotfiles_dirを宣言して、他のすべてのファイルがそれを見て使用できるようにしたいと思います。

申し訳ありませんが、それはできません。 Nixでは、グローバル変数のようなものはありません。存在する場合、Nix式は宣言されていない入力にアクセスできるため、再現可能なビルドを提供する能力は損なわれます。

/etc/nixos/configuration.nixは、グローバルストア情​​報ではなく、技術的にはNixOSモジュールです。しかしもっと重要なのは、それが機能だということです。

ただし、ある場所で値を定義し、必要な場所で値を使用する方法があります。このような何か:

/etc/nixos/dotfiles-dir.nix

"/home/bjorn/.config/dotfiles" 

〜/ .configを/ nixpkgs/home.nix

let 
    dotfiles_dir = import /etc/nixos/dotfiles-dir.nix; 
    dotfiles = import (builtins.toPath "${dotfiles_dir}/nixos/home/default.nix"); 
in 
... 

また得ることができますより多くの空想...

/etc/nixos/my-settings.nix

{ dotfiles_dir = "/home/bjorn/.config/dotfiles"; 
, some_other_value = "whatever"; 
} 

〜/ .configを/ nixpkgs/home.nix

let 
    dotfiles_dir = (import /etc/nixos/my-settings.nix).dirfiles_dir; 
    dotfiles = import (builtins.toPath "${dotfiles_dir}/nixos/home/default.nix"); 
in 
... 
+0

このよう私は私の設定にどこにでもパスを運ぶために持っています。ヘッダ( '{pkgs、mysettings、...}'のようなもの)にインポートすることは可能でしょうか? – bjornmelgaard

+1

これは、関数の構文であり、インポートではありません。関数に引数としてmysettingsを追加することはできますが、関数の呼び出し側は値を提供する必要があります。これはパッケージでも動作する方法です。トップレベルの表現ではやや魔法になりました。 Nixでは、「どこでもこの価値を利用可能にする」と言っても意味がありません。 –

関連する問題