direnv로 환경 자동 활성화하기

direnv로 환경 자동 활성화하기#

프로젝트마다 환경을 수동으로 활성화하는 대신, 프로젝트 디렉터리에 들어가거나 그 안의 shell.nix를 변경할 때마다 선언적 셸을 다시 로드하도록 할 수 있습니다.

  1. nix-direnv를 사용할 수 있게 하십시오

  2. 셸에 훅으로 연결하십시오

예를 들어, 다음 내용으로 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!