Nix flake templates for easy dev environments

June 7, 2026 ยท View on GitHub

built with nix

To initialize (where ${ENV} is listed in the table below):

nix flake init --template "https://flakehub.com/f/the-nix-way/dev-templates/*#${ENV}"

You can also use the shorter GitHub form:

nix flake init -t github: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"

# or with the short GitHub form
nix flake init -t github: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:

  1. If you have nix-direnv installed, you can initialize the environment by running direnv allow.
  2. If you don't have nix-direnv installed, you can run nix develop to open up the Nix-defined shell.

Available templates

Language/framework/toolTemplate
Bunbun
C / C++c-cpp
Clojureclojure
C#csharp
Cuecue
Denodeno
Dhalldhall
Elixirelixir
Elmelm
Empty (change at will)empty
Gleamgleam
Gogo
Hashicorp toolshashi
Haskellhaskell
Haxehaxe
Javajava
Jupyterjupyter
Kotlinkotlin
LaTeXlatex
Nickelnickel
Nimnim
Nixnix
Node.jsnode
OCamlocaml
Odinodin
Open Policy Agentopa
PHPphp
PlatformIOplatformio
Presentermpresenterm
PowerShellpowershell
Protobufprotobuf
Pulumipulumi
Purescriptpurescript
Pythonpython
Rr
Rubyruby
Rustrust
Scalascala
Shellshell
SWI-prologswi-prolog
Swiftswift
Typsttypst
Vlangvlang
Zigzig

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

c-cpp

clojure

csharp

  • dotnet
  • [omnisharp-roslyn]
  • [Mono]
  • [msbuild]

cue

dhall

elixir

elm

Empty

A dev template that's fully customizable.

gleam

go

hashi

haskell

haxe

java

jupyter

kotlin

latex

lean4

nickel

nim

nix

node

ocaml

odin

opa

php

platformio

Presenterm

powershell

protobuf

pulumi

purescript

python

r

ruby

  • Ruby, 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
  • rust-analyzer
  • cargo-edit
  • cargo-deny

scala

shell

swi-prolog

swift

typst

vlang

zig