| .github | ||
| clojure | ||
| csharp | ||
| cue | ||
| dhall | ||
| elixir | ||
| elm | ||
| gleam | ||
| go | ||
| hashi | ||
| haskell | ||
| java | ||
| kotlin | ||
| latex | ||
| nickel | ||
| nim | ||
| nix | ||
| node | ||
| ocaml | ||
| opa | ||
| php | ||
| protobuf | ||
| purescript | ||
| python | ||
| ruby | ||
| rust | ||
| rust-toolchain | ||
| scala | ||
| shell | ||
| zig | ||
| .editorconfig | ||
| .envrc | ||
| .gitignore | ||
| flake.lock | ||
| flake.nix | ||
| README.md | ||
Nix flake templates for easy dev environments
To initialize (where ${ENV} is listed in the table below):
nix flake init --template github:the-nix-way/dev-templates#${ENV}
Here's an example (for the rust template):
# Initialize in the current project
nix flake init --template github:the-nix-way/dev-templates#rust
# Create a new project
nix flake new --template github:the-nix-way/dev-templates#rust ${NEW_PROJECT_DIRECTORY}
Note
: All templates are pinned to the 22.11 release of Nixpkgs.
How to use the templates
Once your preferred template has been initialized, you can use the provided shell in two ways:
- If you have 
nix-direnvinstalled, you can initialize the environment by runningdirenv allow. - If you don't have 
nix-direnvinstalled, you can runnix developto open up the Nix-defined shell. 
Available templates
| Language/framework/tool | Template | 
|---|---|
| Clojure | clojure | 
| C# | csharp | 
| Cue | cue | 
| Dhall | dhall | 
| Elixir | elixir | 
| Elm | elm | 
| Gleam | gleam | 
| Go | go | 
| Hashicorp tools | hashi | 
| Java | java | 
| Kotlin | kotlin | 
| LaTeX | latex | 
| Nickel | nickel | 
| Nim | nim | 
| Nix | nix | 
| Node.js | node | 
| OCaml | ocaml | 
| Open Policy Agent | opa | 
| PHP | php | 
| Protobuf | protobuf | 
| Purescript | purescript | 
| Ruby | ruby | 
| Rust | rust | 
| Scala | scala | 
| [Shell] | shell | 
| Zig | zig | 
Template contents
The sections below list what each template includes. In all cases, you're free to add and remove packages as you see fit; the templates are just boilerplate.
clojure
csharp
- dotnet sdk 7
 - omnisharp-roslyn
 - mono
 - msbuild
 
cue
dhall
- Dhall 1.40.2
 - dhall-bash
 - dhall-csv (Linux only)
 - dhall-docs
 - dhall-json
 - dhall-lsp-server
 - dhall-nix
 - dhall-nixpkgs
 - dhall-openapi
 - dhall-text (Linux only)
 - dhall-toml
 - dhall-yaml
 
elixir
elm
gleam
- Gleam 0.22.1
 
go
- Go 1.19
 - Standard Go tools (goimports, godoc, and others)
 - golangci-lint
 
hashi
- Packer 1.8.2
 - Terraform 1.2.7
 - Nomad 1.2.9
 - Vault 1.11.2
 - nomad-autoscaler 0.3.6-dev
 - nomad-pack 0.0.1-techpreview.3
 - levant 0.3.1-dev
 - damon
 - Terragrunt 0.37.0
 - tflint 0.39.3
 
haskell
java
kotlin
latex
nickel
- Nickel 0.2.0
 
nim
nix
node
ocaml
- OCaml 4.13.1
 - Dune 3.4.1
 - odoc 2.1.1
 - ocamlformat 0.24.0
 
opa
- Open Policy Agent 0.43.0
 - Conftest 0.34.0
 
php
protobuf
purescript
python
- Python 3.11.0rc1
 - pip 22.1.2
 - Virtualenv 20.15.1
 - mach-nix
 
ruby
- Ruby 3.1.2p20, plus the standard Ruby tools (
bundle,gem, etc.) 
rust
- 
Rust, including cargo, Clippy, and the other standard tools. The Rust version is determined as follows, in order:
- From the 
rust-toolchain.tomlfile if present - From the 
rust-toolchainfile if present - Version 1.63.0 if neither is present
 
 - From the 
 - 
rust-analyzer 2022-08-01
 - 
cargo-audit 0.17.0
 - 
cargo-deny 0.12.1
 - 
cross 0.2.4
 
scala
shell
zig
- Zig 0.9.1
 
Code organization
All of the templates have only the root flake as a flake input. That root flake provides a common revision of Nixpkgs and flake-utils to all the templates.