feat: dev env

This commit is contained in:
Ryan Yin 2024-04-17 22:10:21 +08:00
parent a59b8f63a1
commit 3ae3f70da4
4 changed files with 40 additions and 19 deletions

View file

@ -1,5 +1,20 @@
# Dev Environments
On NixOS, in the global environment (home-manager), you can install only some general
development tools and SDKs, such as `git`, `vim`, `emacs`, `tmux`, `zsh`, etc. For the
dependencies of the project itself, it is best to have a separate `flake.nix` for each
project to manage their respective development environments.
For simplicity, you might also consider creating some general `flake.nix` templates for
common languages in advance, which can be copied and modified as needed.
Various plugins for editors like `neovim` will also have their own dependencies. These
dependencies can be considered to be added to the IDE's own environment through parameters
like `programs.neovim.extraPackages` in home-manager, ensuring that the IDE itself can run
properly without polluting the global environment.
## Templates for Development Environments
We have learned how to build development environments, but it's a bit tedious to write
`flake.nix` for each project.
@ -7,8 +22,8 @@ Luckily, some people in the community have done this for us. The following repos
contains development environment templates for most programming languages. Just copy and
paste them:
- [dev-templates](https://github.com/the-nix-way/dev-templates)
- [MordragT/nix-templates](https://github.com/MordragT/nix-templates)
- [the-nix-way/dev-templates](https://github.com/the-nix-way/dev-templates)
If you think the structure of `flake.nix` is still too complicated and want a simpler way,
you can consider using the following project, which encapsulates Nix more thoroughly and
@ -81,7 +96,7 @@ this:
> is located in the `/nix/store` directory, and these modification commands can only be
> executed during the Nix build phase.
- [DavHau/mach-nix](https://github.com/DavHau/mach-nix) (currently unmaintained)
- [python venv demo](https://github.com/MordragT/nix-templates/blob/master/python-venv/flake.nix)
- [poetry2nix](https://github.com/nix-community/poetry2nix)
The advantage of these tools is that they utilize the lock mechanism of Nix Flakes to

View file

@ -4,14 +4,6 @@ NixOS's reproducibility makes it ideal for building development environments. Ho
you're used to other distros, you may encounter problems because NixOS has its own logic.
We'll briefly explain this below.
On NixOS, it's recommended to only install common tools in the global environment, such as
`git`, `vim`, `emacs`, `tmux`, `zsh`, etc. The development environment of each language
should be an independent environment for each project.
You should NOT install the development environment of each language in the global
environment. The project environment should be completely isolated from each other and
will not affect each other.
In the following sections, we'll introduce how the development environment works in NixOS.
## Creating a Custom Shell Environment with `nix shell`

View file

@ -1,13 +1,26 @@
# Dev Environments
在 NixOS 上全局环境中home-manager可以只安装一些通用的开发工具与 SDK比如
`git`、`vim`、`emacs`、`tmux`、`zsh` 等等。对于项目本身的依赖,最好是每个项目都有一个独立
`flake.nix` 用于管理各自的开发环境。
为了简便,你也可以考虑提前为常用语言创建一些通用的 `flake.nix` 模板,在需要的时候复制模板
改一改就能用了。
`neovim` 等编辑器的各种插件本身也会有各种依赖,这些依赖可以考虑通过 home-manager 的
`programs.neovim.extraPackages` 等参数来将其加入到 IDE 本身的环境中,这样就能保证 IDE 本身
能正常运行,又不会污染全局环境。
## 开发环境的配置模板
前面我们已经学习了构建开发环境的实现原理,但是每次都要自己写一堆重复性较高的 `flake.nix`
略显繁琐。
幸运的是,社区已经有人为我们做好了这件事,如下这个仓库中包含了绝大多数编程语言的开发环境模
板,直接复制粘贴下来就能用:
- [the-nix-way/dev-templates](https://github.com/the-nix-way/dev-templates)
- [MordragT/nix-templates](https://github.com/MordragT/nix-templates)
- [the-nix-way/dev-templates](https://github.com/the-nix-way/dev-templates)
如果你觉得 `flake.nix` 的结构还是太复杂了,希望能有更简单的方法,也可以考虑使用下面这个项
目,它对 Nix 做了更彻底的封装,对用户提供了更简单的定义:
@ -68,7 +81,7 @@ source ./env/bin/activate
> `flake.nix` 来安装 Python 依赖!因为数据还是在 `/nix/store` 中,这类修改命令必须在 Nix的
> 构建阶段才能执行...
- [DavHau/mach-nix](https://github.com/DavHau/mach-nix)
- [python venv demo](https://github.com/MordragT/nix-templates/blob/master/python-venv/flake.nix)
- [poetry2nix](https://github.com/nix-community/poetry2nix)
这俩工具的好处是,能利用上 Nix Flakes 的锁机制来提升可复现能力,缺点是多了一层封装,底层变
@ -76,3 +89,11 @@ source ./env/bin/activate
最后,在一些更复杂的项目上,上述两种方案可能都行不通,这时候最佳的解决方案,就是改用容器
了,比如 Docker、Podman 等,容器的限制没 Nix 这么严格,能提供最佳的兼容性。
## Go 开发环境
Go 是静态链接,天然就少了很多麻烦,基本能在 NixOS 上无痛使用,不需要额外处理。
## 其他开发环境
TODO

View file

@ -4,13 +4,6 @@
的环境搭建经验用在 NixOS 上,可能会遇到许多问题,因为 NixOS 有自己的一套逻辑在,下面我们先
对此稍作说明。
在 NixOS 上,全局环境中只建议安装一些通用的工具,比如 `git`、`vim`、`emacs`、`tmux`、`zsh`
等等,而各语言的开发环境,最好是每个项目都有一个独立的环境。为了简便,你也可以考虑提前为常
用语言创建一些通用的开发环境,在需要时切换进去。
总而言之NixOS 上的开发环境不要一股脑都装在全局,弄成一个个相互隔离、不会互相影响的项目环
境会优雅很多。
在本章中我们先学习一下 Nix Flakes 开发环境的实现原理,后面的章节再按使用场景介绍一些更具体
的内容。