f88ff76829
Package list may have redundancies or even inconsistencies, I don't really know what I'm doing. This does seem to work for code browsing (LSP support with ccls works with doom emacs), and building / debugging a few projects I tried... |
||
---|---|---|
.github | ||
c-cpp | ||
clojure | ||
cue | ||
dhall | ||
elixir | ||
elm | ||
gleam | ||
go | ||
hashi | ||
haskell | ||
java | ||
kotlin | ||
nickel | ||
nim | ||
nix | ||
node | ||
ocaml | ||
opa | ||
php | ||
protobuf | ||
purescript | ||
python | ||
ruby | ||
rust | ||
rust-toolchain | ||
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}
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-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 |
---|---|
Clojure | clojure |
Cue | cue |
Dhall | dhall |
Elixir | elixir |
Elm | elm |
Gleam | gleam |
Go | go |
Hashicorp tools | hashi |
Java | java |
Kotlin | kotlin |
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 |
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
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
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.toml
file if present - From the
rust-toolchain
file 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
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.