2024-08-17 23:58:19 -07:00
|
|
|
# Nix development environments, for various languages
|
|
|
|
|
2024-08-18 00:03:40 -07:00
|
|
|
Those of us on NixOS never install language toolkits system-wide, unlike other distros. This means that when we
|
|
|
|
work on projects which expect you to bring your own language tools, we don't have things like `node`, `npm`, `cargo`, etc.
|
|
|
|
readily available in the shell.
|
|
|
|
|
2024-08-17 23:58:19 -07:00
|
|
|
Regrettably, many projects are not taking advantage of Nix for reproducible development environments. You should
|
|
|
|
make a big fuss about this in every open source project you are a part of and constantly evangelize about Nix.
|
|
|
|
Until Nix is universally adopted, this repository serves as a collection of flakes which provides compilers,
|
|
|
|
package managers, and basic development tools like LSPs for common languages. Simply clone this to a desired location,
|
|
|
|
then run:
|
|
|
|
|
|
|
|
```bash
|
|
|
|
nix develop <location-of-repo>#<language>
|
|
|
|
|
|
|
|
# example
|
|
|
|
nix develop ~/.devenvs#rustNightly
|
|
|
|
|
|
|
|
# provides rust-analyzer, rustc, cargo, and some others from nightly toolchain
|
|
|
|
```
|
|
|
|
|
|
|
|
## Automatic environment loading
|
|
|
|
|
|
|
|
For convenience, you can use [nix-direnv](https://github.com/nix-community/nix-direnv) to
|
|
|
|
automatically load these environments.
|
|
|
|
|
|
|
|
Simply add the following `.envrc` to the project directory:
|
|
|
|
|
|
|
|
```bash
|
|
|
|
# file: .envrc
|
|
|
|
use flake <path-to-this-repo>#<language>
|
|
|
|
```
|
|
|
|
|
|
|
|
Example:
|
|
|
|
|
|
|
|
```bash
|
|
|
|
use flake ~/.devenvs#go
|
|
|
|
```
|
|
|
|
|
|
|
|
If you don't want to commit these files, make sure to run the following:
|
|
|
|
|
|
|
|
```bash
|
|
|
|
# tell git to ignore these direnv files for this local repository
|
|
|
|
git update-index --skip-worktree .envrc .direnv
|
|
|
|
```
|
|
|
|
|
2024-08-18 00:01:48 -07:00
|
|
|
## Provided environments:
|
|
|
|
|
|
|
|
- Go
|
|
|
|
- Python (using poetry)
|
|
|
|
- Haskell (with Cabal)
|
|
|
|
- Haskell (with Stack)
|
|
|
|
- Rust (stable, nightly, and beta toolchains)
|
|
|
|
- Node/TypeScript (pnpm, yarn, and npm variants)
|
|
|
|
- Typst
|
|
|
|
- LaTeX (via texlive, with full and minimal variants)
|
|
|
|
- Zig
|