.github | ||
cue | ||
dhall | ||
elixir | ||
elm | ||
gleam | ||
go1.17 | ||
go1.18 | ||
hashi | ||
haskell | ||
java | ||
kotlin | ||
nickel | ||
nim | ||
nix | ||
node | ||
opa | ||
protobuf | ||
python | ||
ruby | ||
rust | ||
scala | ||
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}
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-direnv
installed, you can initialize the environment by runningdirenv allow
. - If you don't have
nix-direnv
installed, you can runnix develop
to open up the Nix-defined shell.
Available templates
Language/framework/tool | Template |
---|---|
Cue | cue |
Dhall | dhall |
Elixir | elixir |
Elm | elm |
Gleam | gleam |
Go 1.17 | go1_17 |
Go 1.18 | go1_18 |
Hashicorp tools | hashi |
Java | java |
Kotlin | kotlin |
Nickel | nickel |
Nim | nim |
Nix | nix |
Node.js | node |
Open Policy Agent | opa |
Protobuf | protobuf |
Ruby | ruby |
Rust | rust |
Scala | scala |
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.
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
- Elixir 1.13.4, including mix and IEx
- gigalixir (Linux only)
- Node.js 18.7.0 (largely for Phoenix projects)
elm
gleam
- Gleam 0.22.1
go1.17
- Go 1.17
- Standard Go tools (goimports, godoc, and others)
- golangci-lint
go1.18
- Go 1.18
- Standard Go tools (goimports, godoc, and others)
- golangci-lint
hashi
- Terraform 1.2.6
- Packer 1.8.2
- Nomad 1.2.9
- nomad-autoscaler 0.3.6-dev
- nomad-pack 0.0.1-techpreview.3
- levant 0.3.1
- damon
- Terragrunt 0.37.0
haskell
java
kotlin
nickel
- Nickel 0.1.0
nim
nix
node
opa
- Open Policy Agent 0.43.0
- Conftest 0.33.2
protobuf
python
- Python 3.11.0b4
- pip
- Virtualenv
- 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.toml
file if present - From the
rust-toolchain
file if present - Version 1.6.2 if neither is present
- From the
-
rust-analyzer 2022-07-11
-
cargo-audit 0.17.0
-
cargo-deny 0.12.1
-
cross 0.2.4
scala
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.