diff --git a/docs/development/intro.md b/docs/development/intro.md index b192c40..d00ac94 100644 --- a/docs/development/intro.md +++ b/docs/development/intro.md @@ -114,6 +114,60 @@ Here is a `flake.nix` that defines a development environment with Node.js 18 ins Create an empty folder, save the above configuration as `flake.nix`, and then execute `nix develop` (or more precisely, you can use `nix develop .#default`), you will find that you have entered a nodejs 18 development environment, you can use `node` `npm` `pnpm` `yarn` and other commands. And when you just entered, `shellHook` was also executed, outputting the current version of nodejs. + +## Using zsh/fish/... instead of bash + +`pkgs.mkShell` uses `bash` by default, but you can also use `zsh` or `fish` by add `exec ` into `shellHook`. + +Here is an example: + + +```nix +{ + description = "A Nix-flake-based Node.js development environment"; + + inputs = { + nixpkgs.url = "github:nixos/nixpkgs/nixos-23.05"; + }; + + outputs = { self , nixpkgs ,... }: let + # system should match the system you are running on + # system = "x86_64-linux"; + system = "x86_64-darwin"; + in { + devShells."${system}".default = let + pkgs = import nixpkgs { + inherit system; + overlays = [ + (self: super: rec { + nodejs = super.nodejs-18_x; + pnpm = super.nodePackages.pnpm; + yarn = (super.yarn.override { inherit nodejs; }); + }) + ]; + }; + in pkgs.mkShell { + # create an environment with nodejs-18_x, pnpm, and yarn + packages = with pkgs; [ + node2nix + nodejs + pnpm + yarn + nushell + ]; + + shellHook = '' + echo "node `${pkgs.nodejs}/bin/node --version`" + exec nu + ''; + }; + }; +} +``` + +With the above configuration, `nix develop` will enter the REPL environment of nushell. + + ## Enter the build environment of any Nix package Now let's take a look at `nix develop`, first read the help document output by `nix develop --help`: diff --git a/docs/zh/development/intro.md b/docs/zh/development/intro.md index f3188c4..f27e3ae 100644 --- a/docs/zh/development/intro.md +++ b/docs/zh/development/intro.md @@ -118,6 +118,59 @@ stdenv.mkDerivation ({ 建个空文件夹,将上面的配置保存为 `flake.nix`,然后执行 `nix develop`(或者更精确点,可以用 `nix develop .#default`),你会发现你已经进入了一个 nodejs 18 的开发环境,可以使用 `node` `npm` `pnpm` `yarn` 等命令了。而且刚进入时,`shellHook` 也被执行了,输出了当前 nodejs 的版本。 + + +## 在开发环境中使用 zhs/fhish 等其他 shell + +`pkgs.mkShell` 默认使用 `bash`,但是你也可以通过在 `shellHook` 中添加 `exec ` 来使用 `zsh` 或者 `fish` 等其他 shell。 + +示例如下: + +```nix +{ + description = "A Nix-flake-based Node.js development environment"; + + inputs = { + nixpkgs.url = "github:nixos/nixpkgs/nixos-23.05"; + }; + + outputs = { self , nixpkgs ,... }: let + # system should match the system you are running on + # system = "x86_64-linux"; + system = "x86_64-darwin"; + in { + devShells."${system}".default = let + pkgs = import nixpkgs { + inherit system; + overlays = [ + (self: super: rec { + nodejs = super.nodejs-18_x; + pnpm = super.nodePackages.pnpm; + yarn = (super.yarn.override { inherit nodejs; }); + }) + ]; + }; + in pkgs.mkShell { + # create an environment with nodejs-18_x, pnpm, and yarn + packages = with pkgs; [ + node2nix + nodejs + pnpm + yarn + nushell + ]; + + shellHook = '' + echo "node `${pkgs.nodejs}/bin/node --version`" + exec nu + ''; + }; + }; +} +``` + +使用上面的 `flake.nix` 配置,`nix develop` 将进入一个 nodejs 18 的开发环境,同时使用 `nushell` 作为交互式 shell. + ## 进入任何 Nix 包的构建环境 现在再来看看 `nix develop`,先读下 `nix develop --help` 输出的帮助文档: