mirror of
https://github.com/ryan4yin/nixos-and-flakes-book.git
synced 2025-06-24 05:51:20 +02:00
nix develop with custom shell
This commit is contained in:
parent
1764eaf1dd
commit
67026ff174
@ -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.
|
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 <your-shell>` 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
|
## 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`:
|
Now let's take a look at `nix develop`, first read the help document output by `nix develop --help`:
|
||||||
|
@ -118,6 +118,59 @@ stdenv.mkDerivation ({
|
|||||||
|
|
||||||
建个空文件夹,将上面的配置保存为 `flake.nix`,然后执行 `nix develop`(或者更精确点,可以用 `nix develop .#default`),你会发现你已经进入了一个 nodejs 18 的开发环境,可以使用 `node` `npm` `pnpm` `yarn` 等命令了。而且刚进入时,`shellHook` 也被执行了,输出了当前 nodejs 的版本。
|
建个空文件夹,将上面的配置保存为 `flake.nix`,然后执行 `nix develop`(或者更精确点,可以用 `nix develop .#default`),你会发现你已经进入了一个 nodejs 18 的开发环境,可以使用 `node` `npm` `pnpm` `yarn` 等命令了。而且刚进入时,`shellHook` 也被执行了,输出了当前 nodejs 的版本。
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## 在开发环境中使用 zhs/fhish 等其他 shell
|
||||||
|
|
||||||
|
`pkgs.mkShell` 默认使用 `bash`,但是你也可以通过在 `shellHook` 中添加 `exec <your-shell>` 来使用 `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 包的构建环境
|
||||||
|
|
||||||
现在再来看看 `nix develop`,先读下 `nix develop --help` 输出的帮助文档:
|
现在再来看看 `nix develop`,先读下 `nix develop --help` 输出的帮助文档:
|
||||||
|
Loading…
x
Reference in New Issue
Block a user