docs: document new features; minor cleanup

Signed-off-by: NotAShelf <raf@notashelf.dev>
Change-Id: I6025ff8adf399a2064e316380f36fb076a6a6964
This commit is contained in:
raf 2026-05-09 20:10:26 +03:00
commit 8cf3409fdd
Signed by: NotAShelf
GPG key ID: 29D95B64378DB4BF

View file

@ -37,15 +37,31 @@ When a hash mismatch is detected in the underlying `nix build`, `eh` can
automatically update the old, broken hash with a new and correct one _directly automatically update the old, broken hash with a new and correct one _directly
in the source file_. in the source file_.
### Interactive `--ask` Flag
Pass `-a` / `--ask` to any command (`run`, `shell`, `build`, `develop`) to
enable interactive confirmation prompts. Before retrying with `--impure` or
auto-fixing a hash mismatch, `eh` will ask for confirmation:
```bash
eh build nixpkgs#steam --ask
# ? Package 'steam' has an unfree license. Retry with --impure? (Y/n)
# ? Hash mismatch detected in pkgs/hello/default.nix. Fix it? (Y/n)
```
In non-interactive mode (no TTY), `--ask` raises an error rather than silently
skipping. Without `--ask`, prompts only appear in TTY mode.
## Shell Aliases ## Shell Aliases
By default, you may run the `eh` binary akin to Nix with a nicer interface. The By default, you may run the `eh` binary akin to Nix with a nicer interface. The
supported Nix commands, i.e., nix `build`, `shell`, `run` and `develop` become supported Nix commands, i.e., nix `build`, `shell`, `run` and `develop` become
`eh build`, `eh shell`, `eh run` and `eh develop`. However, it is possible to `eh build`, `eh shell`, `eh run` and `eh develop`. However, it is possible to
symlink the `eh` binary to `nb`, `ns`, `nr`, and `nd` to invoke a specific symlink the `eh` binary to `nb`, `ns`, `nr`, `nd`, `dev`, `ni`, and `nu` to
feature. For example, `nb` will act as `eh build` and `nr` will be `eh run`. invoke a specific feature. For example, `nb` will act as `eh build`, `nr` will
be `eh run`, and `dev` is an alias for `nd`.
One special example is `eh update`, which is aliases to `nu`, that handles One special example is `eh update`, which is aliased to `nu`, that handles
interactive Nix flake updates. It is special in the sense that the usage is interactive Nix flake updates. It is special in the sense that the usage is
entirely different from its Nix counterpart, where you get to _interactively_ entirely different from its Nix counterpart, where you get to _interactively_
pick which inputs to update. pick which inputs to update.
@ -56,9 +72,34 @@ After enabling shell aliases via the NixOS module or Home Manager, you can use:
ns nixpkgs#hello # equivalent to: nix shell nixpkgs#hello ns nixpkgs#hello # equivalent to: nix shell nixpkgs#hello
nr nixpkgs#cowsay "Hello!" # nix run nixpkgs#cowsay nr nixpkgs#cowsay "Hello!" # nix run nixpkgs#cowsay
nb .#myPackage # nix build .#myPackage nb .#myPackage # nix build .#myPackage
nd .#myPackage # nix develop .#myPackage
dev .#myPackage # nix develop .#myPackage (alias for nd)
ni nixpkgs#hello # nix eval nixpkgs#hello.meta
nu # nix flake update nu # nix flake update
``` ```
### Shell Completions
Generate completions for bash, zsh, or fish:
```bash
eh completion bash
eh completion zsh
eh completion fish
```
### Shell Integration Scripts
Sourceable shell integration scripts are available in the Nix package output
under `$out/nix/integrations/`:
| File | Description |
| ----------- | ----------------------------------- |
| `bash.sh` | Aliases and completion setup (bash) |
| `zsh.sh` | Aliases and completion setup (zsh) |
| `fish.fish` | Aliases and completion setup (fish) |
| `direnvrc` | Direnv integration for flakes |
## Configuration ## Configuration
`eh` reads configuration from the first `.eh.toml` found by walking up from the `eh` reads configuration from the first `.eh.toml` found by walking up from the
@ -77,9 +118,10 @@ impure = true
impure = false impure = false
``` ```
When `impure` is absent (the default), auto-retry with `--impure` is > [!TIP]
**automatic** — `eh` will add `--impure` and the appropriate `NIXPKGS_ALLOW_*` > When `impure` is absent (the default), auto-retry with `--impure` is
variable whenever it detects an unfree, insecure, or broken package. > **automatic**. `eh` will add `--impure` and the appropriate `NIXPKGS_ALLOW_*`
> variable whenever it detects an unfree, insecure, or broken package.
<!--markdownlint-disable MD013--> <!--markdownlint-disable MD013-->