# Nix flake templates for easy dev environments [![built with nix](https://builtwithnix.org/badge.svg)](https://builtwithnix.org) To initialize (where `${ENV}` is listed in the table below): ```shell nix flake init --template github:the-nix-way/dev-templates#${ENV} ``` Here's an example (for the [`rust`](./rust) template): ```shell # 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: 1. If you have 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/tool | Template | | :--------------------------- | :--------------------------- | | [Clojure][Clojure] | [`clojure`](./clojure/) | | [C#][csharp] | [`csharp`](./csharp/) | | [Cue][Cue] | [`cue`](./cue/) | | [Dhall][Dhall] | [`dhall`](./dhall/) | | [Elixir][Elixir] | [`elixir`](./elixir/) | | [Elm][Elm] | [`elm`](./elm/) | | Empty (change at will) | [`empty`](./empty) | | [Gleam][Gleam] | [`gleam`](./gleam/) | | [Go][Go] | [`go`](./go/) | | [Hashicorp][Hashicorp] tools | [`hashi`](./hashi/) | | [Haxe][Haxe] | [`haxe`](./haxe/) | | [Java][Java] | [`java`](./java/) | | [Jupyter] | [`jupyter`](./jupyter/) | | [Kotlin][Kotlin] | [`kotlin`](./kotlin/) | | [LaTeX][LaTeX] | [`latex`](./latex/) | | [Nickel][Nickel] | [`nickel`](./nickel/) | | [Nim][Nim] | [`nim`](./nim/) | | [Nix][Nix] | [`nix`](./nix/) | | [Node.js][node] | [`node`](./node/) | | [OCaml][OCaml] | [`ocaml`](./ocaml/) | | [Open Policy Agent][opa] | [`opa`](./opa) | | [PHP][PHP] | [`php`](./php/) | | [Protobuf][Protobuf] | [`protobuf`](./protobuf/) | | [Pulumi][Pulumi] | [`pulumi`](./pulumi/) | | [Purescript][Purescript] | [`purescript`](./purescript/) | | [Ruby][Ruby] | [`ruby`](./ruby/) | | [Rust][Rust] | [`rust`](./rust/) | | [RustPython][Rust] | [`rustpython`](./rustpython/) | | [Scala][Scala] | [`scala`](./scala/) | | [Shell] | [`shell`](./shell/) | | [Vlang][Vlang] | [`vlang`](./vlang/) | | [Zig][Zig] | [`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`](./clojure/) - [Clojure][Clojure] 1.11.1.1347 - [Boot][Boot] 2.8.3 - [Leiningen][Leiningen] 2.10.0 ### [`csharp`](./csharp/) - [dotnet][dotnet] sdk 7 (7.0.305) - [omnisharp-roslyn][omnisharp-roslyn] - [Mono][Mono] 6.12.0.182 - [msbuild][msbuild] 16.10.1 ### [`cue`](./cue/) - [Cue][Cue] 0.5.0 ### [`dhall`](./dhall) - [Dhall][Dhall] 1.41.2 - [dhall-bash][dhall-bash] - [dhall-docs][dhall-docs] - [dhall-json][dhall-json] - [dhall-lsp-server][dhall-lsp-server] - [dhall-nix][dhall-nix] - [dhall-nixpkgs][dhall-nixpkgs] - [dhall-openapi][dhall-openapi] - [dhall-toml][dhall-toml] - [dhall-yaml][dhall-yaml] ### [`elixir`](./elixir/) - [Elixir][Elixir] 1.14.5, including [mix][mix] and [IEx][IEx] - [gigalixir][gigalixir] (Linux only) ### [`elm`](./elm/) - [Elm][Elm] 0.19.1 - [elm2nix][elm2nix] ### [Empty](./empty/) A dev template that's fully customizable. ### [`gleam`](./gleam/) - [Gleam][Gleam] 0.30.0 ### [`go`](./go/) - [Go][Go] 1.20.5 - Standard Go tools ([goimports][goimports], [godoc][godoc], and others) - [golangci-lint][golangci-lint] ### [`hashi`](./hashi/) - [Packer][Packer] 1.8.6 - [Terraform][Terraform] 1.5.2 - [Nomad][Nomad] 1.4.6 - [Vault][Vault] 1.13.3 - [nomad-autoscaler][nomad-autoscaler] 0.3.6-dev - [nomad-pack][nomad-pack] 0.0.1-techpreview.3 - [levant][levant] 0.3.2-dev - [damon][damon] - [Terragrunt][Terragrunt] 0.45.13 - [tflint][tflint] 0.46.1 ### [`haskell`](./haskell/) - [GHC][haskell] 9.2.8 - [cabal][cabal] 3.10.1.0 ### [`haxe`](./haxe/) - [Haxe][Haxe] 4.2.5 ### [`java`](./java) - [Java][Java] 20.0.1+9 - [Maven][Maven] 3.9.2 - [Gradle][Gradle] 9.0.1 - [jdtls][jdtls] 1.31.0 ### [`kotlin`](./kotlin/) - [Kotlin][Kotlin] 1.9.0 - [Gradle][Gradle] 8.0.1 ### [`latex`](./latex/) - [texlive][texlive] - [tectonic][tectonic] - [texlab][texlab] ### [`nickel`](./nickel/) - [Nickel][Nickel] 0.2.0 ### [`nim`](./nim) - [Nim][Nim] 1.6.14 - [nimble][nimble] 0.14.2 ### [`nix`](./nix/) - [Cachix][Cachix] 1.6 - [dhall-to-nix][dhall-to-nix] 1.1.25 - [lorri][lorri] 1.6.0 - [niv][niv] 0.2.22 - [nixfmt][nixfmt] 0.5.0 - [statix][statix] 0.5.6 - [vulnix][vulnix] ### [`node`](./node/) - [Node.js][node] 18.16.1 - [npm][npm] 9.5.1 - [pnpm][pnpm] 8.6.6 - [Yarn][Yarn] 1.22.19 - [node2nix][node2nix] 1.11.1 ### [`ocaml`](./ocaml/) - [OCaml][OCaml] 4.14.1 - [Dune][Dune] 3.9.1 - [odoc][odoc] 2.2.0 - [ocamlformat][ocamlformat] 0.25.1 ### [`opa`](./opa/) - [Open Policy Agent][opa] 0.54.0 - [Conftest][Conftest] 0.44.0 ### [`php`](./php/) - [PHP][PHP] 8.2.8 - [Composer][Composer] 2.5.8 ### [`protobuf`](./protobuf/) - The [Buf CLI][buf] 1.23.1 - [protoc][protobuf] 3.21.12 ### [`pulumi`](./pulumi/) - [Pulumi][Pulumi] 3.72.1 - [Python][Python] 3.11.4 - [Go][Go] 1.20.5 - [Node.js][node] 18.16.1 - [dotnet][dotnet] sdk 6 - [Java][Java] 19.0.1 and [Maven][Maven] 3.9.2 - [jq][jq] 1.6 ### [`purescript`](./purescript/) - [Purescript][Purescript] (purs) 0.15.9 - [Spago][Spago] 0.21.0 - [purescript-language-server][purescript-language-server] 0.17.1 - [purs-tidy][purs-tidy] 0.10.0 ### [`python`](./python/) - [Python][Python] 3.11.4 - [pip][pip] 23.0.1 ### [`ruby`](./ruby/) - [Ruby][Ruby] 3.2.2, plus the standard Ruby tools (`bundle`, `gem`, etc.) ### [`rust`](./rust/) - [Rust][Rust], including [cargo][cargo], [Clippy][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.70.0 if neither is present - [rust-analyzer][rust-analyzer] 2023-07-10 - [cargo-audit][cargo-audit] 0.17.0 - [cargo-deny][cargo-deny] 0.12.1 ### [`scala`](./scala/) - [Scala][Scala] 2.13.11 ([Java][Java] 19.0.1) - [sbt][sbt] 1.9.2 ### [`shell`](./shell/) - [shellcheck][shellcheck] 0.9.0 ### [`Vlang`](./vlang/) - [Vlang][Vlang] 0.4.4 ### [`zig`](./zig/) - [Zig][Zig] 0.10.1 ## Code organization All of the templates have only the root [flake](./flake.nix) as a flake input. That root flake provides a common revision of [Nixpkgs][Nixpkgs] and to all the templates. [boot]: https://www.boot-clj.com [buf]: https://github.com/bufbuild/buf [cabal]: https://www.haskell.org/cabal [cachix]: https://www.cachix.org [cargo]: https://doc.rust-lang.org/cargo [cargo-audit]: https://crates.io/crates/cargo-audit [cargo-deny]: https://crates.io/crates/cargo-deny [clippy]: https://github.com/rust-lang/rust-clippy [clojure]: https://clojure.org [composer]: https://getcomposer.org/ [conftest]: https://www.conftest.dev [csharp]: https://dotnet.microsoft.com/en-us/languages/csharp [cue]: https://cuelang.org [damon]: https://github.com/hashicorp/damon [dhall]: https://dhall-lang.org [dhall-bash]: https://github.com/dhall-lang/dhall-haskell/tree/master/dhall-bash [dhall-docs]: https://github.com/dhall-lang/dhall-haskell/tree/master/dhall-docs [dhall-json]: https://github.com/dhall-lang/dhall-haskell/tree/master/dhall-json [dhall-lsp-server]: https://github.com/dhall-lang/dhall-haskell/tree/master/dhall-lsp-server [dhall-nix]: https://github.com/dhall-lang/dhall-haskell/tree/master/dhall-nix [dhall-nixpkgs]: https://github.com/dhall-lang/dhall-haskell/tree/master/dhall-nixpkgs [dhall-openapi]: https://github.com/dhall-lang/dhall-haskell/tree/master/dhall-openapi [dhall-to-nix]: https://github.com/dhall-lang/dhall-haskell/tree/master/dhall-nix [dhall-toml]: https://github.com/dhall-lang/dhall-haskell/tree/master/dhall-toml [dhall-yaml]: https://github.com/dhall-lang/dhall-haskell/tree/master/dhall-yaml [dotnet]: https://dotnet.microsoft.com/en-us/ [dune]: https://dune.build [elixir]: https://elixir-lang.org [elm]: https://elm-lang.org [elm2nix]: https://github.com/cachix/elm2nix [flake-utils]: https://github.com/numtide/flake-utils [gigalixir]: https://www.gigalixir.com [gleam]: https://gleam.run [go]: https://go.dev [godoc]: https://pkg.go.dev/golang.org/x/tools/cmd/godoc [goimports]: https://pkg.go.dev/golang.org/x/tools/cmd/goimports [golangci-lint]: https://github.com/golangci/golangci-lint [gradle]: https://gradle.org [hashicorp]: https://hashicorp.com [haskell]: https://haskell.org [haxe]: https://haxe.org/ [iex]: https://hexdocs.pm/iex/IEx.html [java]: https://java.com [jdtls]: https://projects.eclipse.org/projects/eclipse.jdt.ls [jq]: https://jqlang.github.io/jq [kotlin]: https://kotlinlang.org [latex]: https://www.latex-project.org/ [leiningen]: https://leiningen.org [levant]: https://github.com/hashicorp/levant [lorri]: https://github.com/target/lorri [maven]: https://maven.apache.org [mix]: https://elixir-lang.org/getting-started/mix-otp/introduction-to-mix.html [mono]: https://www.mono-project.com/ [msbuild]: https://github.com/dotnet/msbuild [nickel]: https://nickel-lang.org [nim]: https://nim-lang.org [nimble]: https://github.com/nim-lang/nimble [niv]: https://github.com/nmattia/niv [nix]: https://nixos.org [nixfmt]: https://github.com/serokell/nixfmt [nixpkgs]: https://github.com/NixOS/nixpkgs [nix-direnv]: https://github.com/nix-community/nix-direnv [node]: https://nodejs.org [node2nix]: https://github.com/svanderburg/node2nix [nomad]: https://nomadproject.io [nomad-autoscaler]: https://github.com/hashicorp/nomad-autoscaler [nomad-pack]: https://github.com/hashicorp/nomad-pack [npm]: https://npmjs.org [ocaml]: https://ocaml.org [ocamlformat]: https://github.com/ocaml-ppx/ocamlformat [odoc]: https://github.com/ocaml/odoc [omnisharp-roslyn]: https://github.com/OmniSharp/omnisharp-roslyn [opa]: https://openpolicyagent.org [packer]: https://packer.io [pip]: https://pypi.org/project/pip [phoenix]: https://phoenixframework.org [php]: https://php.net/ [pnpm]: https://pnpm.io [protobuf]: https://developers.google.com/protocol-buffers [pulumi]: https://pulumi.com/ [purescript]: https://github.com/purescript/purescript [purescript-language-server]: https://github.com/nwolverson/purescript-language-server [purs-tidy]: https://github.com/natefaubion/purescript-tidy [python]: https://python.org [release]: https://github.com/NixOS/nixpkgs/releases/tag/22.11 [ruby]: https://ruby-lang.org [rust]: https://rust-lang.org [rust-analyzer]: https://rust-analyzer.github.io [scala]: https://scala-lang.org [shellcheck]: https://www.shellcheck.net/ [statix]: https://github.com/nerdypepper/statix [sbt]: https://www.scala-sbt.org [spago]: https://github.com/purescript/spago [tectonic]: https://tectonic-typesetting.github.io/ [terraform]: https://terraform.io [terragrunt]: https://terragrunt.gruntwork.io [texlab]: https://github.com/latex-lsp/texlab [texlive]: https://www.tug.org/texlive/ [tflint]: https://github.com/terraform-linters/tflint [vault]: https://www.vaultproject.io [vulnix]: https://github.com/flyingcircusio/vulnix [yarn]: https://yarnpkg.com [vlang]: https://vlang.io/ [zig]: https://ziglang.org