Setup .envrc
Standard provides an extension to the stdlib
via direnv_lib.sh
.
The integrity hash below ensures it is downloaded only once and cached from there on.
#! /bin/sh
# SPDX-FileCopyrightText: 2022 David Arnold <[email protected]>
# SPDX-FileCopyrightText: 2022 Kevin Amado <[email protected]>
#
# SPDX-License-Identifier: Unlicense
source "$(
nix eval \
--no-update-lock-file \
--no-write-lock-file \
--no-warn-dirty \
--accept-flake-config \
.#__std.direnv_lib 2>/dev/null \
|| nix eval .#__std.direnv_lib # show the errors
)"
use std cells //_automation/devshells:default
NOTE: In the above code
use std
cells
//std/...
refers to the folder where Cells are grown from. If your folder is e.g.nix
, adapt touse std
nix
//...
and so forth.
It is used to automatically set up file watches on files that could modify the current devshell, discoverable through these or similar logs during loading:
direnv: loading https://raw.githubusercontent.com/divnix/std/...
direnv: using std cells //_automation/devshells:default
direnv: Watching: cells/_automation/devshells.nix
direnv: Watching: cells/_automation/devshells (recursively)
For reference, the above example loads the default
devshell from:
{
inputs,
cell,
}: let
l = nixpkgs.lib // builtins;
inherit (inputs) nixpkgs;
inherit (inputs.cells) std lib;
in
l.mapAttrs (_: lib.dev.mkShell) rec {
default = {...}: {
name = "Standard";
nixago = [
(std.nixago.conform {configData = {inherit (inputs) cells;};})
cell.nixago.treefmt
cell.nixago.editorconfig
cell.nixago.just
cell.nixago.githubsettings
std.nixago.lefthook
std.nixago.adrgen
];
commands =
[
{
package = nixpkgs.reuse;
category = "legal";
}
{
package = nixpkgs.delve;
category = "cli-dev";
name = "dlv";
}
{
package = nixpkgs.go;
category = "cli-dev";
}
{
package = nixpkgs.gotools;
category = "cli-dev";
}
{
package = nixpkgs.gopls;
category = "cli-dev";
}
]
++ l.optionals nixpkgs.stdenv.isLinux [
{
package = nixpkgs.golangci-lint;
category = "cli-dev";
}
];
imports = [std.devshellProfiles.default book];
};
book = {...}: {
nixago = [cell.nixago.mdbook];
};
checks = {...}: {
name = "checks";
imports = [std.devshellProfiles.default];
commands = [
{
name = "blocktype-data";
command = "cat $(std //_tests/data/example:write)";
}
{
name = "blocktype-devshells";
command = "std //_automation/devshell/default:enter -- echo OK";
}
{
name = "blocktype-runnables";
command = "std //std/cli/default:run -- std OK";
}
];
};
}