Guided tour

From nothing installed, to fluent.

Eleven steps, in order, each one building on the last. Steps 1 to 3 install jigger and wire it in; from step 4 on, nothing is ever installed again — you type, and you watch. Every command below follows the system you pick in the header, and the recordings are what actually happens, not mock-ups.

The two ways in are both here. You keep your own commands — brew, winget, pacman — and the popup appears over them, uninvited (steps 4 to 7). Or you use one syntax for all of them, jg (steps 8 and 9). Neither replaces the other, and step 11 shows the binary answering with no shell at all.

Following the steps for macOS Windows Omarchy

1

Install the binary.

One command on macOS and Windows, where the project publishes a package. On Arch there is none, so Go builds it — jigger has no runtime dependency beyond the managers themselves, and the compiled binary is the whole of it.

macOS

brew tap yves/cocktails https://gitlab.yg-devworks.com/yves/homebrew-cocktails.git
brew install jigger

Windows

scoop bucket add jigger https://gitlab.yg-devworks.com/yves/scoop-jigger.git
scoop install jigger

Omarchy

sudo pacman -S --needed go git zsh
go install gitlab.yg-devworks.com/yves/jigger@latest
export PATH="$HOME/go/bin:$PATH"

Why these URLs, what the formula builds, how to upgrade later: the Use it page carries the detail. This tour keeps to the shortest road.

2

Wire it into your shell.

The binary alone completes nothing. What draws the popup and watches your typing is a shell plugin, and it has to be loaded by your shell — once, in your startup file.

macOS

One line in ~/.zshrc, then exec zsh. It covers every manager the machine has — the plugin doesn't need to be told which.

source "$(brew --prefix jigger)/share/jigger/jigger.plugin.zsh"

Windows

The bucket installed the binary only. The module comes from the repository, so clone it first, then import it from $PROFILE and open a new tab.

git clone https://github.com/Yves848/jigger.git $HOME\git\jigger
Import-Module $HOME\git\jigger\shell\jigger.psm1

Omarchy

The plugin is not in the Go module — clone the repository, then source it from ~/.zshrc and run exec zsh.

git clone https://github.com/Yves848/jigger.git ~/git/jigger
source ~/git/jigger/shell/jigger.plugin.zsh

3

Check it took.

The version first, then who answers. An old binary shadowing a newer install in the PATH is the most painful failure to diagnose, and one line settles it.

macOS

jigger --version
which -a jigger

Windows

jigger --version
Get-Command jigger -All

Omarchy

jigger --version
which -a jigger

Nothing at all? The plugin says so when it refuses to load: a message at shell startup reports that the binary is missing from the PATH, or that it is too old for this plugin. It never fails silently.

4

Your own command, intercepted.

This is the moment worth understanding. You do not learn a new command: you type the one you already typed, and the frame appears under your prompt on its own, narrowing with every letter. Nothing to trigger, nothing to remember — and if you ignore it, your line runs exactly as it always did.

Open a fresh shell and type the line below without pressing Enter.

macOS

brew install fire — the frame arrives on its own and tightens with every letter. Captured on macOS.

Windows

winget install fire — same frame, same keys, another catalogue: winget answers with Publisher.Package identifiers where brew shows bare formula names. Captured on Windows.

Omarchy

yay -S visual-studio — the repositories and the AUR in one list: ◆ a repository package, ▣ an AUR one, ● one already installed. Captured on Omarchy.

5

Choose, and insert.

Five keys, and they are the same everywhere — whichever manager is answering, and on all three systems.

  • ⇥ inserts the current candidate
  • ↓ enters the list, then moves down one candidate
  • ↑ moves up; on the first candidate, hands the keyboard back to the shell
  • ⏎ completes the last part and runs the line, in one keystroke
  • ^G closes the popup for this line — ⇥ reopens it

Your arrow keys are never confiscated. Until the popup holds the keyboard, ↑ and ↓ remain your shell's history, popup open or not. What they will do is written in the frame's footer, so you never have to guess which mode you are in.

6

Filter harder: ^R.

Prefix matching runs out when you don't know how the name starts. ^R switches the filter — and only the filter: the line, the frame and the keys don't move, and the title says which mode is on.

Watch the list grow at the moment of the switch: the pattern is not anchored, so it matches anywhere in a name. Then the alternation cuts it down to four — something no prefix search can express. A pattern that doesn't compile matches nothing, and the frame says so rather than spilling the whole catalogue.

macOS

fire by prefix, then ^R — arrayfire joins the list, because the pattern is not anchored. Then (bird|fly) keeps four. Captured on macOS.

Windows

winget install fire offers twenty-one candidates by prefix. ^R, then (bird|blade), keeps four. Captured on Windows.

Omarchy

The same widening, on Arch: fire by prefix, then ^R and the names carrying fire in the middle join in. (bird|fly) then keeps the firebirds and the fireflies, repositories and AUR at once. Captured on Omarchy.

7

Complete, then run — for real.

⏎ completes the last part and launches the line, in a single keystroke. From that point on jigger does nothing at all: what scrolls past is the manager's own output, relayed as is — progress bars, prompts and elevation included.

macOS

Installing through the popup behaves the same on macOS, with brew answering. There is no recording, and there will not be one: it would install packages for real on the machine doing the filming. Switch to Windows above — it runs on a VM built for it, and the gesture is identical.

Windows

jg install hexy, completed to hexyl, then run — scoop's output, relayed untouched. Captured on Windows, against a real manager.

Omarchy

Same on Arch, with yay answering — its own AUR prompts relayed as is, since jigger does nothing at all once the line is running. There is no capture, and there will not be one: filming it means installing for real, which belongs on a dedicated machine. The Windows recording does exactly that.

8

The other way in: one syntax, jg.

Everything so far kept your manager's own words. jg speaks a single language for all of them: jg install fd reaches whichever manager knows fd, without you having to know which one. The facade only adds — brew install fd keeps working exactly as before, popup included.

When several managers know the same name, jigger never chooses for you: the picker opens and you decide. When none does, it says so, with the closest neighbours.

macOS

jg install fd — the facade answers for the manager that knows the package. Captured on macOS.

Windows

jg install node — with two managers side by side, the right-hand column names which one answers for each candidate. Captured on Windows.

Omarchy

jg install fd, with a detail that belongs to Arch: pacman and yay are two doors onto the same database, so the facade lists your packages once, never twice. Captured on Omarchy.

9

Same gesture, other verbs.

Nothing here is specific to installing. upgrade, search, list and outdated are completed and run the same way — twelve verbs in all, each translated into what your manager actually expects.

macOS

It is the same on macOS, with brew doing the upgrading — and no capture either, for the same reason: upgrading for real belongs on a dedicated machine.

Windows

jg upgrade hyperf, completed to hyperfine, then run — scoop replacing 1.16.1 with 1.20.0. Captured on Windows, against a real manager.

Omarchy

Same gesture on Arch. Note that yay drives and pacman only reads, which is why jg install --pm pacman does not exist while yay is installed. No capture either, for the same reason: upgrading for real belongs on a dedicated machine.

10

Not only package managers.

Type ssh and a space: the popup offers the hosts of your ~/.ssh/config, each with its HostName alongside. Same frame, same keys — only the catalogue changed. jigger never opens the connection; it completes the line you will run yourself.

macOS

ssh and a space: the servers of your ~/.ssh/config, each with its address alongside. Captured on macOS.

Windows

The same list and the same ~/.ssh/config, under PowerShell — atelier included, which comes from an Include. Captured on Windows.

Omarchy

The very same list, on Arch — the picker reads ~/.ssh/config and nothing else, so nothing about it is platform-specific. Captured on Omarchy.

The SSH picker has a page of its own → — what it completes, what it never reads, and why a pattern is not a server.

11

Without the popup: calling jigger yourself.

The plugin is only a client. Every subcommand works on its own — which is the clearest way to see what is happening when something looks wrong, and the only way when there is no interactive shell at all: a script, a cron, a CI.

jigger complete "brew install fire"

The candidates, one per line — exactly what the popup would have drawn.

jigger render --line "brew ins" --cols 80

One popup frame, drawn once on standard output, metadata included.

jigger pick "brew uninstall 7z"

The full-screen picker — the same one JIGGER_LIVE=0 gives you on ⇥ if you would rather nothing ever appeared unasked.

jigger prompt

The cached state your prompt hook reads — how many upgrades are waiting, without a single network call.

jigger warm --all

Rebuilds the catalogues. Slow, and worth knowing about the day the frame says “building the catalog…” and never stops.

And to pick rows into a pipe, ask for it explicitly — --select draws the view on the terminal and sends only the chosen names down the pipe, one per line:

jg install $(jg search fd --select)

Nothing changes when the output isn't a terminal: jg list | grep fd prints the same plain table it always has, byte for byte, and --json is never paged — it is a machine contract.