mirror of
https://github.com/the-nix-way/dev-templates
synced 2024-12-06 09:42:51 +01:00
Dev environments for numerous languages based on Nix flakes
.github | ||
bun | ||
c-cpp | ||
clojure | ||
csharp | ||
cue | ||
dhall | ||
elixir | ||
elm | ||
empty | ||
gleam | ||
go | ||
hashi | ||
haskell | ||
haxe | ||
java | ||
jupyter | ||
kotlin | ||
latex | ||
lean4 | ||
nickel | ||
nim | ||
nix | ||
node | ||
ocaml | ||
opa | ||
php | ||
platformio | ||
protobuf | ||
pulumi | ||
purescript | ||
python | ||
r | ||
ruby | ||
rust | ||
rust-toolchain | ||
scala | ||
shell | ||
swi-prolog | ||
swift | ||
vlang | ||
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 "https://flakehub.com/f/the-nix-way/dev-templates/*#${ENV}"
Here's an example (for the rust
template):
# Initialize in the current project
nix flake init --template "https://flakehub.com/f/the-nix-way/dev-templates/*#rust"
# Create a new project
nix flake new --template "https://flakehub.com/f/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 |
---|---|
Bun | bun |
C/C++ | c-cpp |
Clojure | clojure |
C# | csharp |
Cue | cue |
Dhall | dhall |
Elixir | elixir |
Elm | elm |
Empty (change at will) | empty |
Gleam | gleam |
Go | go |
Hashicorp tools | hashi |
Haskell | haskell |
Haxe | haxe |
Java | java |
Jupyter | jupyter |
Kotlin | kotlin |
LaTeX | latex |
Nickel | nickel |
Nim | nim |
Nix | nix |
Node.js | node |
OCaml | ocaml |
Open Policy Agent | opa |
PHP | php |
PlatformIO | platformio |
Protobuf | protobuf |
Pulumi | pulumi |
Purescript | purescript |
Python | python |
R | r |
Ruby | ruby |
Rust | rust |
Rust from toolchain file | rust-toolchain |
Scala | scala |
[Shell] | shell |
SWI-prolog | swi-prolog |
Swift | swift |
Vlang | vlang |
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.
bun
- bun 1.1.29
c-cpp
- clang-tools 17.0.6
- cmake 3.28.3
- codespell 2.2.6
- conan 2.0.17
- cppcheck 2.13.4
- doxygen 1.10.0
- gdb 14.1
- gtest 1.12.1
- lcov 1.0
- vcpkg
- vcpkg-tool
clojure
csharp
- dotnet sdk 7 (7.0.305)
- omnisharp-roslyn
- Mono 6.12.0.182
- msbuild 16.10.1
cue
- Cue 0.5.0
dhall
- Dhall 1.41.2
- dhall-bash
- dhall-docs
- dhall-json
- dhall-lsp-server
- dhall-nix
- dhall-nixpkgs
- dhall-openapi
- dhall-toml
- dhall-yaml
elixir
elm
Empty
A dev template that's fully customizable.
gleam
- Gleam 0.30.0
go
- Go 1.20.5
- Standard Go tools (goimports, godoc, and others)
- golangci-lint
hashi
- Packer 1.8.6
- Terraform 1.5.2
- Nomad 1.4.6
- Vault 1.13.3
- nomad-autoscaler 0.3.6-dev
- nomad-pack 0.0.1-techpreview.3
- levant 0.3.2-dev
- damon
- Terragrunt 0.45.13
- tflint 0.46.1
haskell
haxe
- Haxe 4.2.5
java
jupyter
- Jupyter core 5.7.2
kotlin
latex
lean4
- Lean 4.9.0
nickel
- Nickel 0.2.0
nim
nix
node
ocaml
- OCaml 4.14.1
- Dune 3.9.1
- odoc 2.2.0
- ocamlformat 0.25.1
opa
- Open Policy Agent 0.54.0
- Conftest 0.44.0
php
platformio
- PlatformIO 6.1.11
protobuf
pulumi
- Pulumi 3.72.1
- Python 3.11.4
- Go 1.20.5
- Node.js 18.16.1
- dotnet sdk 6
- Java 19.0.1 and Maven 3.9.2
- jq 1.6
purescript
- Purescript (purs) 0.15.9
- Spago 0.21.0
- purescript-language-server 0.17.1
- purs-tidy 0.10.0
python
r
ruby
- Ruby 3.2.2, 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.78.0 if neither is present
- From the
-
rust-analyzer 2024-04-29
-
cargo-edit 0.12.2
-
cargo-deny 0.14.23
scala
shell
- shellcheck 0.9.0
swi-prolog
- swipl 9.2.7
swift
- Swift 5.8
- sourcekit-lsp
vlang
- Vlang 0.4.4
zig
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.