4
70
Fork
You've already forked pay-respects
4
Command suggestions, command-not-found and thefuck replacement written in Rust
  • Rust 86.5%
  • Shell 8.7%
  • PowerShell 2.2%
  • Nushell 0.8%
  • Mermaid 0.7%
  • Other 1.1%
Peter Lindsten dcecac80aa
All checks were successful
ci/woodpecker/push/check-nightly Pipeline was successful
ci/woodpecker/tag/check-nightly Pipeline was successful
ci/woodpecker/cron/check-nightly Pipeline was successful
rules(git): git switch -c to create non-existing branch (github #135 )
2026年06月11日 17:13:33 +02:00
.github ci(fix): add fetch for mirror 2026年05月30日 18:43:14 +02:00
.woodpecker ci: update nightly check 2026年05月04日 13:34:19 +02:00
core feat: argument for prompt prefix 2026年06月03日 15:21:00 +02:00
man v0.8.8 2026年04月28日 01:31:43 +02:00
man-src v0.8.8 2026年04月28日 01:31:43 +02:00
module-request-ai chore(deps): bump askama from 0.15.6 to 0.16.0 (github #131 ) 2026年05月02日 17:28:02 +02:00
module-runtime-rules fix: don't trim spaces for command 2026年05月21日 22:56:47 +02:00
parser fix: don't trim spaces for command 2026年05月21日 22:56:47 +02:00
rules rules(git): git switch -c to create non-existing branch (github #135 ) 2026年06月11日 17:13:33 +02:00
select refactor: make the padding added by the select library itself 2026年05月14日 22:37:30 +02:00
tests (recovered): chore: accelerate tests 2026年04月23日 14:54:39 +02:00
utils feat: argument for prompt prefix 2026年06月03日 15:21:00 +02:00
.editorconfig chore: add editorconfig 2025年04月17日 19:43:48 +02:00
.gitignore flake.nix: fix build and make the derivation more maintainable (github #21 ) 2024年12月18日 08:51:48 +01:00
.rustfmt.toml init 2023年07月30日 18:40:18 +02:00
Cargo.lock chore(deps): bump rust-i18n from 4.0.0 to 4.1.0 (github #132 ) 2026年05月30日 18:39:46 +02:00
Cargo.toml chore: specify "core" as default workspace member (github #29 ) 2025年01月18日 15:46:39 +01:00
CHANGELOG.md v0.8.8 2026年04月28日 01:31:43 +02:00
config.md refactor!: renaming all sudo to privilege 2026年04月08日 00:48:19 +02:00
Cross.toml CI: disable icnremental build in cross 2024年12月10日 20:42:36 +01:00
flake.lock build(flake): update nixpkgs input (github #107 ) 2026年02月04日 11:40:29 +01:00
flake.nix build(flake): update nixpkgs input (github #107 ) 2026年02月04日 11:40:29 +01:00
flowchart.mmd feat: wezterm and kitty integrations 2026年04月05日 00:44:04 +02:00
init.fish feat: plugin files for zsh and fish (github #58 ) 2025年06月11日 11:02:20 +02:00
install.ps1 chore: update install scripts 2026年04月24日 23:24:02 +02:00
install.sh chore: update install scripts 2026年04月24日 23:24:02 +02:00
LICENSE doc: appending the full license notice 2023年08月09日 00:14:54 +02:00
Makefile chore: cleanup 2026年04月24日 02:38:39 +02:00
modules.md chore: cleanup 2026年04月24日 02:38:39 +02:00
pay-respects.plugin.zsh feat: plugin files for zsh and fish (github #58 ) 2025年06月11日 11:02:20 +02:00
README.md docs: add powershell install script to readme 2026年04月24日 22:21:10 +02:00
roadmap.md docs: update options and add flowchart 2026年04月04日 19:42:24 +02:00
rules.md docs: INLINE identifier 2026年04月04日 05:14:22 +02:00

Pay Respects

Typed a wrong command or don't know what to do? Pay Respects will suggest a fix to your console command by simply pressing F!

  • 🚀 Blazing fast suggestion: Sub-millisecond (<1ms) performance! See benchmarks.
  • 🎯 Accurate results: Suggestions are verified before being prompted to the user, no sudo suggestions when you are using doas!
  • ✏️ Easy to write rules: You don't need to know Rust. The rules are written in a TOML format that gets parsed into Rust code!
  • 🦀 Full Rust capability: Raw Rust code can be used if TOML rules are not enough for complex situations!
  • 🔩 Modular: TOML and Rust not your taste? Add sources using your favorite language with a custom module!
  • 🤖 AI Support: AI module comes in aid when there is no rule for your error!
  • 🪶 Tiny binary size: Not even 1MB for core features!

showcase

How to Pay Respects

Please follow the instruction for your shell:

Bash / Zsh / Fish

Append the following line to your configuration file (--alias no longer required for v0.7+):

eval "$(pay-respects bash --alias)"
eval "$(pay-respects zsh --alias)"
pay-respects fish --alias | source

Arguments:

  • --alias [alias]: Alias to a custom key, defaults to f
  • --nocnf: Disables command_not_found handler

Manual aliasing (REMOVED after v0.7):

alias f="$(pay-respects bash)"
alias f="$(pay-respects zsh)"
alias f="$(pay-respects fish)"
Nushell

Add the following output to your configuration file:

# replace `nu` for `nush` or `nushell` if your executable is named differently
pay-respects nu --alias [<alias>]

Or save it as a file:

pay-respects nu --alias [<alias>] | save -f ~/.pay-respects.nu

and source from your config file:

source ~/.pay-respects.nu
PowerShell

Append the following output to your profile:

# replace `pwsh` for `powershell` if your executable is named differently
pay-respects pwsh --alias [<alias>]

Or directly pipe the output to your profile:

pay-respects pwsh --alias [<alias>] >> $PROFILE
Custom initialization for arbitrary shell

pay-respects only requires 2 environment variables to work:

  • _PR_SHELL: The binary name of the current working shell
  • _PR_LAST_COMMAND: The last command

pay-respects echos back, if applicable, commands that should be evaluated by the working shell, such as cd commands to change the directory

General example:

eval $(_PR_SHELL=sh _PR_LAST_COMMAND="git comit" pay-respects)

Following variables are not required, but can be used to reduce unnecessary operations:

  • _PR_ALIAS: A list of aliases to commands. Separated by newlines with zsh-like formatting, e.g. gc=git commit
  • _PR_ERROR_MSG: Error message from the previous command. pay-respects will capture output from multiplexers or rerun previous command to get the error message if absent
  • _PR_EXECUTABLES: A space separated list of commands/executables. pay-respects will search for $PATH if absent

You can now Press F to Pay Respects !

You will also have a key-binding available on Ctrl+X for experimental inline mode, on-the-fly correction with no execution:

  • gitcommit + C-X C-Xgit commit
  • z payrespe + C-X C-Xcd /home/iff/Code/pay-respects
Integrations with other tools
  • tmux, GNU Screen, Zellij, WezTerm, kitty:
    • Command log capturing inside the session without the need to rerun commands to get error messages. Requires English locale (actually LANG=C, which output is used for matching) to guarantee correct logs.
    • Requires a prompt prefix before your command. Initialization templates set it for you automatically.
  • zoxide: Uses zoxide's database to navigate through directories.
Environment variable configurations
  • _PR_LIB: Directory of modules, analogous to PATH. If not provided, search in PATH or compile-time provided value
  • _PR_PACKAGE_MANAGER: Use defined package manager instead of auto-detecting alphabetically. Empty value disables package search functionality
    • _DEF_PR_PACKAGE_MANAGER: compile-time value

You can specify different modes to run with _PR_MODE:

  • noconfirm: Execute suggestions without confirm
  • inline: Returns best fix with no execution
  • echo: Print suggestions to stdout without executing
  • cnf: Used for command not found hook

Example usage with noconfirm:

# new versions
alias ff="__pr_main noconfirm"
# old versions
function ff() {
	(
		export _PR_MODE="noconfirm"
		f
	)
}

Relating to features:

  • _PR_NO_CONFIG: Don't load configurations
  • _PR_NO_DESPERATE: Disable desperate functions, which are slow but might give better results
  • _PR_PREFIX: Shell prefix before the command acting as identifier. Required for multiplexer command log capturing
  • Disabling integrations:
    • _PR_NO_ZOXIDE
    • _PR_NO_MULTIPLEXER: Equivalent of turning all the followings:
      • _PR_NO_TMUX
      • _PR_NO_SCREEN
      • _PR_NO_ZELLIJ
      • _PR_NO_WEZTERM
      • _PR_NO_KITTY

Installing

Install from your package manager if available:

Packaging status

Instructions for package managers
OS / Distribution Repository Instructions
Arch Linux AUR paru -S pay-respects (-bin)
Arch Linux (ARM) Arch Linux CN sudo pacman -S pay-respects
MacOS / Any timescam brew install timescam/homebrew-tap/pay-respects
NixOS / Any nixpkgs nix-env -iA nixos.pay-respects

Alternatively, install pre-built binaries from GitHub releases. Install scripts are available. For Unix:

curl -sSfL https://raw.githubusercontent.com/iffse/pay-respects/main/install.sh | sh

For Windows, with PowerShell:

irm https://raw.githubusercontent.com/iffse/pay-respects/main/install.ps1 | iex
Cargo / Compile from source (any OS/architecture supported by Rust)

This installation requires you to have Cargo (the Rust package manager) installed.

Install from crates.io, modules are optional

cargo install pay-respects
cargo install pay-respects-module-runtime-rules
cargo install pay-respects-module-request-ai

Clone from git and install, suitable for adding custom compile-time rules:

git clone --depth 1 https://github.com/iffse/pay-respects
cd pay-respects
cargo install --path core
cargo install --path module-runtime-rules
cargo install --path module-request-ai

Configuration

See configuration.

Rules & Modules

See the following pages:

AI Integration

Disclaimer: You are using AI generated content on your own risk. Please double-check its suggestions before accepting.

AI suggestions should work out of the box with request-ai module installed. You can disable it by setting _PR_AI_DISABLE:

export _PR_AI_DISABLE=1

An API key is included with the source (your distribution might have stripped them out). It should always work unless I can no longer afford this public service or rate limits are reached.

I don't track nor store anything. If it's useful to you, consider making a donation:

AI usages and API configurations

Contributing

Current option to write rules should cover most of the cases. We need more rules, contributions are welcomed!

There's also a roadmap for contribution opportunities.

This project is hosted at various sites, you can choose the one that you feel most comfortable with:

Licenses

  • Binaries: AGPL-3.0
    • Core and modules
  • Libraries: MPL-2.0
    • Parser, utils, and select

Benchmarks

Benchmark script can be executed with make bench using hyperfine. Here are the results on my potato computer (AMD Ryzen 5 5600X, DDR4 2400 MHz, HDD 7200 RPM with Btrfs transparent compression, glibc build), you can expect better results on yours.

Case Results
Initialization 493.7 μs ± 38.1 μs
Privilege 655.0 μs ± 100.4 μs
Typo: Command 5.1 ms ± 0.2 ms
Typo: File path 3.6 ms ± 0.4 ms
RegEx: Command 3.3 ms ± 0.1 ms
RegEx: Options 3.3 ms ± 0.2 ms
RegEx: Error 3.3 ms ± 0.1 ms
Desperate: Fuzzy recovery 703.5 μs ± 65.9 μs
Desperate: File look up 3.4 ms ± 0.2 ms

Caveats:

  • Integrations are turned off: In real usage you may feel a delay due to the execution of zoxide itself, for instance, which takes 50ms.
  • Binaries are optimized for size, not speed, using regex-lite instead of regex because it's smaller, although slower. A smaller binary helps in loading times, specially for cold runs.

Flowchart

Here's a flowchart on how this program works:

flowchart