Fish autocomplete from the Fig completion specs

fish already suggests a command from your history and completes with Tab. Figxit adds a list that opens while you type, with the Fig completion specs for 700+ tools and the targets and scripts of your own project.

Apple Silicon, macOS 13 or later. zsh, bash 5, or fish 4. tmux is optional. No account, no AI chat, no telemetry.

What fish does by default

fish shows an autosuggestion in grey after the cursor, taken from your history and its completions. Tab opens a completion list with descriptions, many of them made from the man pages. This is more than zsh and bash do with no setup.

What Figxit adds to fish

  • A list with no Tab press. The rows are on screen while you type, so you see the subcommands and options before you choose one.
  • The Fig completion specs. Open source specs for 700+ tools, for example git, docker, npm, and kubectl, with a description on each subcommand and option.
  • Makefile targets with their help text. make lists the targets of the Makefile in the current folder. The text after ## on a target is its description, and ##@ starts a section.
  • package.json scripts with their commands. npm run , pnpm , yarn , and bun run list the scripts, with the command each one runs.
  • Ranking for each project. With Atuin installed, a word scores higher when you used it in the same folder, in the same repository, or recently.
  • A red icon for production. A target, script, or SSH host with prod in its name, or a name in capitals, gets a red icon. Enter inserts that row and does not run it.

The list is a native macOS window. It does not take keyboard focus, and nothing is drawn inside your terminal.

fish prompt with npm run typed and a list of package.json scripts with the command each one runs

Set up fish

  1. Download Figxit.dmg, open it, and drag Figxit to Applications.
  2. Open Figxit. The setup window shows the line for your login shell and can add it. To add the fish line yourself, put it in ~/.config/fish/conf.d/figxit.fish.
  3. Open a new terminal and type a command.
status is-interactive; and '/Applications/Figxit.app/Contents/MacOS/figxit-engine' init fish | source

How it works in fish

Figxit adds a hook to the key bindings that fish already has. Each fish session starts one bridge process, which holds the connection to the Figxit engine. The adapter uses shell builtins only, so no process starts for a key.

fish has no pipe that stays open, so the adapter appends each line to a file in ~/.local/state/figxit/ that the bridge watches, and reads the replies from files in the same folder.

Limits in fish

  • The list is off in vi mode.
  • Outside tmux, a key that is not text, Enter, Tab, or Backspace is lost, with the keys typed after it, if it arrives in the short time in which the bridge reads the cursor position.
  • Each fish session keeps one bridge process, about 28 MB.

Questions and answers

Does Figxit replace fish autosuggestions?

No. The grey fish autosuggestion proposes one line from your history. Figxit lists what the command on the line can take: its subcommands, its options, the scripts of package.json, and the targets of the Makefile.

Which fish version does it need?

fish 4.

Do the fish completions still work?

Yes. When the Figxit list is closed, Tab opens the fish completions, as before.

Does it work in fish vi mode?

No. In fish, the list is off in vi mode.

More about Figxit