73 lines
No EOL
1.6 KiB
Markdown
73 lines
No EOL
1.6 KiB
Markdown
---
|
|
title: Quick reproducible zig dev env using nix flakes
|
|
date: 2022-01-01
|
|
tags: [zig, nix]
|
|
---
|
|
|
|
Want this great feeling of entering a directory and having all your dev setup done but can never remember how to set up nix flakes ?
|
|
|
|
What you'll need is, in addition to a working [direnv](https://direnv.net/) with `nix` and `nix flake` enabled, is:
|
|
|
|
`.envrc`:
|
|
```text
|
|
use flake
|
|
```
|
|
|
|
`.gitignore`:
|
|
```text
|
|
.direnv/
|
|
```
|
|
|
|
`flake.nix` (this `nixpkgs` hash points to the first revision with zig 0.9 present):
|
|
```nix
|
|
{
|
|
inputs = {
|
|
nixpkgs = {
|
|
type = "github";
|
|
owner = "nixos";
|
|
repo = "nixpkgs";
|
|
ref = "e1eeb53e64159fbb2610ba7810ed511e4d5c10ca";
|
|
};
|
|
flake-compat = {
|
|
url = "github:edolstra/flake-compat";
|
|
flake = false;
|
|
};
|
|
};
|
|
|
|
outputs = { self, nixpkgs, flake-compat }:
|
|
let pkgs = nixpkgs.legacyPackages.x86_64-linux;
|
|
in
|
|
{
|
|
devShell.x86_64-linux =
|
|
pkgs.mkShell {
|
|
buildInputs = with pkgs;[
|
|
nixpkgs-fmt
|
|
zig
|
|
zls
|
|
];
|
|
};
|
|
};
|
|
}
|
|
```
|
|
|
|
and some `shell.nix` for this extra bit of `nix-shell` compatibility, if you'd want it:
|
|
```nix
|
|
(import
|
|
(
|
|
let
|
|
lock = builtins.fromJSON (builtins.readFile ./flake.lock);
|
|
in
|
|
fetchTarball {
|
|
url = "https://github.com/edolstra/flake-compat/archive/${lock.nodes.flake-compat.locked.rev}.tar.gz";
|
|
sha256 = lock.nodes.flake-compat.locked.narHash;
|
|
}
|
|
)
|
|
{
|
|
src = ./.;
|
|
}).shellNix
|
|
```
|
|
|
|
Don't forget to:
|
|
* `git add` all of the above, otherwise nix flake operations might not work
|
|
* `direnv allow` this directory
|
|
* have fun ! |