oliverdavies.uk/source/_daily_emails/2025-04-08.md

1.8 KiB

title date permalink tags cta snippet
Chaining tools for maximum benefit 2025-04-08 daily/2025/04/08/chaining
software-development
linux
nix
~ Yesterday I showed how I'm using Nix to build my presentation slide decks with rst2pdf. Today, I'm using some other tools to make it even easier.

Yesterday I showed how I'm using Nix to build my presentation slide decks with rst2pdf.

This allows me to run a simple command like nix build .#test-driven-drupal to build the slides for the given presentation.

But I can use other tools to make this even easier.

What if I wanted to have a list of the available presentations to select from, and selecting one would build it?

Following the UNIX philosophy, I can use multiple tools together to achieve this.

Firstly, I can run nix flake show --json to show the output from my flake.nix file, which looks something like this:

{
  "devShells": { ... },
  "formatter": { ... },
  "packages": {
    "x86_64-linux": {
      "build-configs": { ... },
      "sculpin": { ... },
      "shared": { ... }
    }
  }
}

The package names - a.k.a. the presentation names - are what I want to select from.

I can parse the JSON object with jq, remove any unwanted options with grep -v and use fzf to give me a list I can fuzzy search in.

In a Bash script, I can assign this to a variable:

selected=$(nix flake show --json | jq --raw-output '.packages["x86_64-linux"] | keys[]' | grep -v shared | fzf)

Once I have selected a name, I can call nix build on it.

nix build .#"$selected"

This is a simple example, but it shows how programs can be used together and output can be passed through each program to get the result you want.