9 releases (5 breaking)

0.9.0 Nov 29, 2024
0.8.1 Nov 5, 2024
0.7.0 Oct 31, 2024
0.6.0 Aug 20, 2024
0.4.0 Jul 3, 2024

#162 in Command line utilities

Download history 310/week @ 2024-08-18 11/week @ 2024-08-25 1/week @ 2024-09-01 10/week @ 2024-09-15 6/week @ 2024-09-22 7/week @ 2024-09-29 1/week @ 2024-10-06 123/week @ 2024-10-27 294/week @ 2024-11-03 15/week @ 2024-11-10 3/week @ 2024-11-17 97/week @ 2024-11-24 28/week @ 2024-12-01

154 downloads per month

MIT license

53KB
1K SLoC

fixit

GitHub Release Build status Coverage Status

Open in GitHub Codespaces

fixit is a terminal application that fixes mistakes in your commands inspired by The Fuck. It is also designed to be fast as fuck (more about that in the motivation section).

See contributing guidelines here. If you want to help fixit move forward, see the roadmap.

demo

How it works?

When you run the fix command, it gets the last command from the shell history. Then it gets the output of this command in one of the two ways:

  • Re-running the command.
  • Retrieving the output from the emulator/multiplexer API (see the list of compatible software).

Once fixit has the command output, it runs the command and its output through a number of rules to determine appropriate fixes. After you select a fix it is run automatically and added to your shell history.

Installation

apt (Ubuntu, Debian, Mint, etc):

echo "deb [arch=$(dpkg --print-architecture) trusted=yes] https://eugene-babichenko.github.io/fixit/ppa ./" | sudo tee /etc/apt/sources.list.d/fixit.list > /dev/null
sudo apt update
sudo apt install fixit

Arch Linux:

yay -S fixit-bin

Or build from source:

yay -S fixit

macOS Homebrew/Linuxbrew:

brew install eugene-babichenko/fixit/fixit

Cargo (any system, you will need the Rust toolchain):

cargo install fixit-cli

You can also download pre-built binaries for Linux (static binaries) and macOS from Releases.

Shell setup

Add the corresponding line to your shell configuration file.

bash:

eval "$(fixit init bash)"

zsh:

eval "$(fixit init zsh)"

fish:

fixit init fish | source

Powershell:

Invoke-Expression (fixit init powershell | Out-String)

Usage

Having a command that broke? Just type fix in your shell.

A note for kitty users

You don't need to do this, if you use a terminal multiplexer inside kitty.

This is optional, but without this fixit will fall back to just re-running the command, which is going to be slower.

To make quick completions work, you need to enable remote control. This is recommended, because this application uses kitty @ get-text to retrieve the command output. For the best performance and stability you are advised to set up shell integration.

Software with quick fixes available

Terminal multiplexers:

  • tmux
  • Zellij

Teminal emulators:

  • iTerm
  • kitty
  • Wezterm
  • Terminal.app

Configuration

Alias name

You can change the name of the generated alias by providing the --name argument to the init command:

fixit init --name f fish | source

This will generate the alias named f instead of fix.

Fixing

Environment variables:

Variable Description Default Value
FIXIT_PAGE_SIZE Controls how many suggestions per page you will see on the screen 5
FIXIT_QUICK_ENABLE Enable quick fixes using terminal emulator/multiplexer API true
FIXIT_QUICK_SEARCH_DEPTH Sets the number of lines to get from the scrollback buffer in addition to what we see on the screen 1000

Logging

Environment variables:

  • FIXIT_LOG controls logging. The default log level is error. For development purposes you generally need to enable the debug level (FIXIT_LOG=debug). The logger is pretty flexible and you can learn more from the env_logger documentation page.
  • FIXIT_LOG_STYLE controls logger styling. Refer to env_logger docs for this as well.

Available rules

  • brew_update_upgrade - replace brew update with brew upgrade when trying to update a Homebrew package.
  • cargo_install_cwd - fix cargo install without arguments (it requires --path).
  • cargo_wrong_command - fix misspelled cargo commands.
  • command_not_found - search for misspelled command through $PATH.
  • cp_cwd - cp came with only one argument, maybe you want to copy to the current dir?
  • cp_dir - add -R to cp when you are attempting to copy a directory.
  • git_add_all_lowercase - correct git add -a to git add -A.
  • git_commit_no_changes - suggest using git commit -a.
  • git_no_upstream - set upstream branch when pushing.
  • git_wrong_command - fix misspelled git commands.
  • mkdir_missing_parent - suggest using mkdir -p to create missing in-between directories.
  • rm_dir - add -r to rm when trying to remove a directory.
  • sudo - prepend with sudo when permission to execute a command was denied.

Dependencies

~10–20MB
~304K SLoC