direnv로 환경 자동 활성화하기#
프로젝트마다 환경을 수동으로 활성화하는 대신, 프로젝트 디렉터리에 들어가거나 그 안의 shell.nix를 변경할 때마다 선언적 셸을 다시 로드하도록 할 수 있습니다.
예를 들어, 다음 내용으로 shell.nix를 작성하십시오.
1let
2 nixpkgs = fetchTarball "https://github.com/NixOS/nixpkgs/tarball/nixos-23.11";
3 pkgs = import nixpkgs { config = {}; overlays = []; };
4in
5
6pkgs.mkShellNoCC {
7 packages = with pkgs; [
8 hello
9 ];
10}
프로젝트의 최상위 디렉터리에서 다음을 실행하십시오.
$ echo "use nix" > .envrc && direnv allow
다음에 터미널을 실행하고 프로젝트의 최상위 디렉터리에 들어가면 direnv가 shell.nix에 정의된 셸을 자동으로 실행합니다.
$ cd myproject
$ which hello
/nix/store/1gxz5nfzfnhyxjdyzi04r86sh61y4i00-hello-2.12.1/bin/hello
direnv는 shell.nix 파일의 변경 사항도 확인합니다.
다음 내용을 추가하십시오.
let
nixpkgs = fetchTarball "https://github.com/NixOS/nixpkgs/tarball/nixos-23.11";
pkgs = import nixpkgs { config = {}; overlays = []; };
in
pkgs.mkShellNoCC {
packages = with pkgs; [
hello
];
+
+ shellHook = ''
+ hello
+ '';
}
실행 중인 환경은 첫 번째 상호작용(아무 명령이나 실행하거나 Enter 키를 누르기) 후에 스스로 다시 로드됩니다.
Hello, world!