2017-11-04 14 views
1

다른 모든 파일을보고 사용할 수 있도록 변수 dotfiles_dir을 선언하고 싶습니다.nix 파일에서 전역 변수 (또는 함수)를 만드는 방법은 무엇입니까?

(작동하지 않는) 예를 /etc/nixos/configuration.nix에서

(그것의 루트 파일, 맞죠?)

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

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

를 들어

하고 또한 그것을 사용 ~/.config/nixpkgs/home.nix

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

답변

2

(https://github.com/rycee/home-manager 포함) 다른 모든 파일이 그것을보고 사용할 수 있도록 변수 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에서 "이 값을 모든 곳에서 사용할 수있게하십시오"라고 말할 방법이 없습니다. –