Jump to the navigation menu

Chaining tools for maximum benefit

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.

- Oliver

Was this interesting?

Sign up here and get more like this delivered straight to your inbox every day.

About me

Picture of Oliver

I'm an certified Drupal Triple Expert with 18 years of experience, a Drupal core contributor, public speaker, live streamer, and host of the Beyond Blocks podcast.