carapace-bin
carapace-bin is a multi-shell multi-command argument completer based on carapace-sh/carapace.
Supported shells:
Install
Manually
Download from releases and add carapace
to PATH.
AUR
Install carapace-bin from AUR.
# e.g. with pamac
pamac install carapace-bin
DEB
Install from fury.io
# /etc/apt/sources.list.d/fury.list
deb [trusted=yes] https://apt.fury.io/rsteube/ /
apt-get update && apt-get install carapace-bin
Homebrew
Install from homebrew-core
brew install carapace
Install from rsteube/homebrew-tap
brew tap rsteube/homebrew-tap
brew install rsteube/tap/carapace
Nix
Install from nixpkgs
nix-shell -p carapace
PKGX
Install from pkgx.dev
pkgx install carapace
RPM
Install from fury.io
Yum
# /etc/yum.repos.d/fury.repo
[fury]
name=Gemfury Private Repo
baseurl=https://yum.fury.io/rsteube/
enabled=1
gpgcheck=0
yum install carapace-bin
Zypper
zypper ar --gpgcheck-allow-unsigned -f https://yum.fury.io/rsteube/ carapace
zypper install carapace-bin
Scoop
Install from ScoopInstaller/Extras (recommended)
scoop bucket add extras
scoop install extras/carapace-bin
Install from rsteube/scoop-bucket
scoop bucket add rsteube https://github.com/rsteube/scoop-bucket.git
scoop install carapace-bin
Termux
WIP: repo currently manually created
Install from carapace-sh/termux (gh_pages)
Manually
# $PREFIX/etc/apt/sources.list.d
deb [trusted=yes] https://termux.carapace.sh termux extras
apt update && apt install carapace-bin
Script
curl termux.carapace.sh | sh
Winget
Install from winget-pkgs
winget install -e --id rsteube.Carapace
X-CMD
Install from x-cmd.com
x env use carapace-bin
Selfupdate
With carapace --selfupdate
specific nightly or stable releases can be installed.
Executable is installed to the GOBIN directory, essentially shadowing any system installation.
export PATH="$HOME/.local/bin:$HOME/go/bin:$PATH"
# │ │ └system installation (e.g. /usr/bin/carapace)
# │ └selfupdate/go based installation ($GOBIN)
# └user binaries
Requirements
Setup
This registers all the available completers. It is also possible to load a single one by replacing
_carapace
with the completer name (e.g.carapace chmod
).
Bash
# ~/.bashrc
export CARAPACE_BRIDGES='zsh,fish,bash,inshellisense' # optional
source <(carapace _carapace)
Elvish
# ~/.config/elvish/rc.elv
set-env CARAPACE_BRIDGES 'zsh,fish,bash,inshellisense' # optional
eval (carapace _carapace|slurp)
Fish
# ~/.config/fish/config.fish
set -Ux CARAPACE_BRIDGES 'zsh,fish,bash,inshellisense' # optional
mkdir -p ~/.config/fish/completions
carapace --list | awk '{print $1}' | xargs -I{} touch ~/.config/fish/completions/{}.fish # disable auto-loaded completions (#185)
carapace _carapace | source
Nushell
## ~/.config/nushell/env.nu
$env.CARAPACE_BRIDGES = 'zsh,fish,bash,inshellisense' # optional
mkdir ~/.cache/carapace
carapace _carapace nushell | save --force ~/.cache/carapace/init.nu
#~/.config/nushell/config.nu
source ~/.cache/carapace/init.nu
Oil
# ~/.config/oil/oshrc
export CARAPACE_BRIDGES='zsh,fish,bash,inshellisense' # optional
source <(carapace _carapace)
Powershell
# ~/.config/powershell/Microsoft.PowerShell_profile.ps1
$env:CARAPACE_BRIDGES = 'zsh,fish,bash,inshellisense' # optional
Set-PSReadLineOption -Colors @{ "Selection" = "`e[7m" }
Set-PSReadlineKeyHandler -Key Tab -Function MenuComplete
carapace _carapace | Out-String | Invoke-Expression
Tcsh
# ~/.tcshrc
export CARAPACE_BRIDGES='zsh,fish,bash,inshellisense' # optional
set autolist
eval `carapace _carapace`
Xonsh
# ~/.config/xonsh/rc.xsh
$CARAPACE_BRIDGES='zsh,fish,bash,inshellisense' # optional
$COMPLETIONS_CONFIRM=True
exec($(carapace _carapace))
Zsh
# ~/.zshrc
export CARAPACE_BRIDGES='zsh,fish,bash,inshellisense' # optional
zstyle ':completion:*' format $'\e[2;37mCompleting %d\e[m'
source <(carapace _carapace)
Order of groups can be configured with the zstyle group-order.
zstyle ':completion:*:git:*' group-order 'main commands' 'alias commands' 'external commands'
Environment
CARAPACE_BRIDGES
Which implicit bridges to enable.
CARAPACE_COVERDIR
Coverage directory for sandbox tests (internal).
CARAPACE_ENV
Whether to register get-env
, set-env
and unset-env
functions.
0
- disabled1
- enabled
CARAPACE_EXCLUDES
Which internal completers to exclude.
CARAPACE_HIDDEN
Whether to show hidden commands/flags.
0
- disabled1
- enabled
CARAPACE_LENIENT
Whether to allow unknown flags.
0
- disabled1
- enabled
CARAPACE_LOG
Whether to enable logging.
0
- disabled1
- enabled
CARAPACE_MATCH
Whether to match case insensitive.
0
- case sensitive1
- case insensitive
CARAPACE_NOSPACE
Extend suffixes that prevent space suffix.
*
- matches all
CARAPACE_SANDBOX
Mock context for sandbox tests (internal).
CARAPACE_TOOLTIP
Whether to enable tooltip style.
0
- disabled1
- enabled
Only affects Powershell.
CARAPACE_ZSH_HASH_DIRS
Zsh hash directories (internal).
Completers
- acpi Shows information from the /proc filesystem
- acpid Advanced Configuration and Power Interface event daemon
- adb Android Debug Bridge
- age simple, modern, and secure file encryption
- agg asciinema gif generator
- alsamixer soundcard mixer for ALSA soundcard driver, with ncurses interface
- ant software tool for automating software build processes
- aplay command-line sound recorder and player for ALSA soundcard driver
- apropos search the manual page names and descriptions
- apt-cache query the APT cache
- apt-get APT package handling utility
- ar create, modify, and extract from archives
- arecord command-line sound recorder and player for ALSA soundcard driver
- artisan Artisan is the command line interface included with Laravel
- asciinema Record and share your terminal sessions, the right way.
- autoconf Generate a configuration script from a TEMPLATE-FILE
- avdmanager create and manage Android Virtual Devices
- awk pattern scanning and processing language
- aws Universal Command Line Interface for Amazon Web Services
- az Azure Command-Line Interface
- baobab A graphical disk usage analyzer for the GNOME deskto
- basename strip directory and suffix from filenames
- bash-language-server A language server for Bash
- bash GNU Bourne-Again SHell
- bat a cat clone with syntax highlighting and Git integration
- batdiff Diff a file against the current git index, or display the diff between two files
- batgrep Quickly search through and highlight files using ripgrep
- batman Read system manual pages (man) using bat
- bats Bash Automated Testing System
- bc An arbitrary precision calculator language
- benthos A stream processor for mundane tasks
- black The uncompromising code formatter
- bloop Build and test Scala code
- bluetoothctl Bluetooth Control Command Line Tool
- boundary Boundary enables identity-based access management for dynamic infrastructure
- brew The missing package manager for macOS
- brotli compress or decompress files
- bru Bruno CLI
- bun a fast bundler, transpiler, JavaScript Runtime and package manager for web software
- bunx bun package manager
- calibre Comprehensive e-book software
- capslock Capslock is a capability analysis CLI for Go packages
- cargo-clippy Checks a package to catch common mistakes and improve your Rust code
- cargo-fmt format all bin and lib files of the current crate
- cargo-metadata Output the resolved dependencies of a package
- cargo-rm Remove a dependency from a Cargo.toml manifest file
- cargo-set-version Change a package's version in the local manifest file
- cargo-upgrade Update dependencies as recorded in the local lock file
- cargo-watch Watches over your Cargo project’s source
- cargo Rust's package manager
- cat concatenate files and print on the standard output
- cfdisk display or manipulate a disk partition table
- charm Do Charm stuff
- cheese tool to take pictures and videos from your webcam
- chgrp change group ownership
- chmod change file mode bits
- chown change file owner and group
- chpasswd update passwords in batch mode
- chroma Chroma is a general purpose syntax highlighter
- chromium chromium browser
- chroot run command or interactive shell with special root directory
- chsh Change your login shell
- circleci Use CircleCI from the command line
- cksum checksum and count the bytes in a file
- clamav-config clamav config
- clamav-milter milter compatible scanner
- clambc Bytecode Analysis and Testing Tool
- clamconf Clam AntiVirus configuration utility
- clamd an anti-virus daemon
- clamdscan scan files and directories for viruses using Clam AntiVirus Daemon
- clamdtop monitor the Clam AntiVirus Daemon
- clamonacc an anti-virus on-access scanning daemon and clamd client
- clamscan scan files and directories for viruses
- clamsubmit File submission utility for ClamAV
- cmus Curses based music player
- code-insiders Visual Studio Code Insiders
- code Visual Studio Code
- codecov codecov uploader
- comm compare two sorted files line by line
- conda-content-trust Signing and verification tools for Conda
- conda-env Manage conda environments
- conda conda is a tool for managing and deploying applications, environments and packages
- conky A system monitor for X originally based on the torsmo code
- consul Consul automates networking for simple and secure application delivery
- coredumpctl List or retrieve coredumps from the journal
- cp copy files and directories
- csplit split a file into sections determined by context lines
- csview A high performance csv viewer with cjk/emoji support
- cura Powerful, easy-to-use 3D printing software
- curl transfer a URL
- cut remove sections from each line of files
- dagger The Dagger CLI provides a command-line interface to Dagger.
- darktable-cli a command line darktable variant
- darktable a digital photography workflow application
- dart A command-line utility for Dart development
- date print or set the system date and time
- dbt An ELT tool for managing your SQL transformations and data models
- dc an arbitrary precision calculator
- dd convert and copy a file
- deadcode The deadcode command reports unreachable functions in Go programs
- delta A viewer for git and diff output
- deno A modern JavaScript and TypeScript runtime
- devbox Instant, easy, predictable shells and containers
- df report file system disk space usage
- dfc report file system space usage information with style
- dict Query a dictd server for the definition of a word
- diff3 compare three files line by line
- diff compare files line by line
- dig DNS lookup utility
- dir list directory contents
- dircolors color setup for ls
- direnv unclutter your .profile
- dirname strip last component from file name
- dive Docker Image Visualizer & Explorer
- dlv Delve is a debugger for the Go programming language.
- dmenu dynamic menu
- dmesg Display or control the kernel ring buffer
- dms A UPnP DLNA Digital Media Server
- dnsmasq A lightweight DHCP and caching DNS server
- doas execute a command as another user
- docker-buildx Docker Buildx
- docker-compose Docker Compose
- docker-scan A tool to scan your images
- docker A self-sufficient runtime for containers
- dockerd A self-sufficient runtime for containers
- doctl doctl is a command line interface (CLI) for the DigitalOcean API
- doing CLI for repository/issue workflow on Azure Devops
- dos2unix DOS/Mac to Unix and vice versa text file format converter
- downgrade Downgrade Arch Linux packages
- dpkg package manager for Debian
- du estimate file space usage
- ebook-convert Convert an e-book from one format to another
- egrep print lines that match patterns
- electron Build cross platform desktop apps with JavaScript, HTML, and CSS
- elvish expressive programming language and a versatile interactive shell
- env run a program in a modified environment
- envsubst Substitutes the values of environment variables
- exa a modern replacement for ls
- expand convert tabs to spaces
- expr evaluate expressions
- eza a modern replacement for ls
- faas-cli Manage your OpenFaaS functions from the command line
- factor factor numbers
- fakechroot gives a fake chroot environment
- fakeroot run a command in an environment faking root privileges for file manipulation
- fastfetch A neofetch-like tool for fetching system information and displaying them in a pretty way
- fc-cache Build font information caches
- fc-cat read font information cache files
- fc-conflist list the configuration files processed by Fontconfig
- fc-list list available fonts
- fd find entries in the filesystem
- fdisk manipulate disk partition table
- ffmpeg Hyper fast Audio and Video encoder
- fgrep print lines that match patterns
- file determine file type
- find search for files in a directory hierarchy
- firefox Firefox Browser
- fish the friendly interactive shell
- flatpak Linux application sandboxing and distribution framework
- flutter Manage your Flutter app development
- fmt simple optimal text formatter
- fold wrap each input line to fit in specified width
- foot A fast, lightweight and minimalistic Wayland terminal emulator
- freeze Generate images of code and terminal output
- ftp File Transfer Protocol client
- ftpd File Transfer Protocol daemon
- fury Command line interface to Gemfury API
- fzf a command-line fuzzy finder
- gatsby Build blazing fast, modern apps and websites with React
- gcloud manage Google Cloud Platform resources and developer workflow
- gdb This is the GNU debugger
- gdu Pretty fast disk usage analyzer written in Go
- get-env get environment variable
- gftp file transfer client for *NIX based machines
- gh-copilot Your AI command line copilot
- gh-dash A beautiful CLI dashboard for GitHub
- gh GitHub CLI
- gimp an image manipulation and paint program
- git-abort Abort current rebase, merge or cherry-pick, without the need to find exact command in history
- git-alias Define, search and show aliases
- git-archive-file Export the current HEAD of the git repository to an archive
- git-authors Generate authors report
- git-browse-ci Opens the current git repository CI page in your default web browser
- git-browse Opens the current git repository website in your default web browser
- git-clang-format run clang-format on lines that differ
- git-clear-soft Soft clean up a repository
- git-clear Rigorously clean up a repository
- git-coauthor Add a co-author to the last commit
- git-extras Awesome GIT utilities
- git-info Returns information on current repository
- git-standup Recall the commit history
- git the stupid content tracker
- gitk The Git repository browser
- gitui blazing fast terminal-ui for git
- glab A GitLab CLI tool.
- glow Render markdown on the CLI, with pizzazz!
- gnome-keyring-daemon The Gnome Keyring Daemon
- gnome-keyring The gnome-keyring commandline tool
- gnome-maps A map application for GNOME
- gnome-terminal A terminal emulator for GNOME
- go-carpet show test coverage for Go source files
- go-tool-asm go assembler
- go-tool-buildid Buildid displays or updates the build ID stored in a Go package or binary.
- go-tool-cgo Cgo enables the creation of Go packages that call C code
- go-tool-compile compiles a single Go packag
- go-tool-covdata read and manipulate coverage data files
- cover analyze coverage profiles
- go-tool-dist Dist helps bootstrap, build, and test the Go distribution
- go-tool-doc show documentation for package or symbol
- fix Fix finds Go programs that use old APIs
- go-tool-link go linker
- nm Nm lists the symbols defined or used by an object file, archive, or executabl
- go-tool-objdump Objdump disassembles executable files
- go-tool-pack Pack is a simple version of the traditional Unix ar tool
- go Go is a tool for managing Go source code
- gocyclo Calculate cyclomatic complexities of Go functions
- gofmt format Go source code
- goimports updates your Go import lines
- golangci-lint golangci-lint is a smart linters runner.
- gonew Gonew starts a new Go module by copying a template module
- google-chrome chrome browser
- gopls gopls is a Go language server
- goreleaser Deliver Go binaries as fast and easily as possible
- goweight A tool to analyze and troubleshoot a Go binary size
- gparted GNOME Partition Editor for manipulating disk partitions
- gpasswd administer /etc/group and /etc/gshadow
- gpg-agent Secret key management for GnuPG
- gpg OpenPGP encryption and signing tool
- gradle Gradle Build Tool
- grep print lines that match patterns
- groupadd create a new group
- groupdel delete a group
- groupmems administer members of a user's primary group
- groupmod modify a group definition on the system
- groups display current group names
- grype A vulnerability scanner for container images, filesystems, and SBOMs
- gsa A tool for analyzing the size of compiled Go binaries
- gulp Command Line Interface for gulp
- gum A tool for glamorous shell scripts
- gunzip Uncompress files
- gzip Compress or uncompress files
- halt halt the machine
- head output the first part of files
- helix A post-modern text editor
- helm The Helm package manager for Kubernetes.
- helmsman Helmsman is a Helm Charts as Code tool
- hexchat IRC Client
- hexdump Display file contents in hexadecimal, decimal, octal, or ascii
- hostid print the numeric identifier for the current host
- hostname show or set system host name
- htop interactive process viewer
- http command-line HTTP client for the API era
- https command-line HTTP client for the API era
- hugo hugo builds your site
- hwinfo Probe for hardware
- hx A post-modern text editor
- i3-scrot simple screenshot script
- i3 an improved dynamic, tiling window manager
- i3exit exit-script for i3
- i3lock improved screen locker
- i3status-rs A feature-rich and resource-friendly replacement for i3status, written in Rust
- i3status Generates a status line for i3bar, dzen2, xmobar or lemonbar
- id Print user and group information
- imv Image viewer for X11 and Wayland
- inkscape an SVG (Scalable Vector Graphics) editing program
- inshellisense IDE style command line auto complete
- install copy files and set attributes
- ion The Ion Shell
- jar create an archive for classes and resources
- java Launches a Java application
- javac Reads Java class and interface definitions and compiles them into bytecode and class files
- jj Jujutsu (An experimental VCS)
- join join lines of two files on a common field
- journalctl Query the journal
- jq Command-line JSON processor
- julia high-level, high-performance dynamic programming language for technical computing
- just Just a command runner
- kak-lsp Kakoune Language Server Protocol Client
- kak a vim-inspired, selection oriented code editor
- kill Forcibly terminate a process
- killall kill processes by name
- kmonad an onion of buttons
- kompose A tool helping Docker Compose users move to Kubernetes
- kotlin run Kotlin programs, scripts or REPL
- kotlinc Kotlin command-line compiler
- ktlint An anti-bikeshedding Kotlin linter with built-in formatter
- kubeadm kubeadm: easily bootstrap a secure Kubernetes cluster
- kubectl kubectl controls the Kubernetes cluster manager
- last Show a listing of last logged in users
- lastb Show a listing of last logged in users
- lastlog reports the most recent login of all users or of a given user
- lazygit simple terminal UI for git commands
- lf terminal file manager
- light a program to control backlight controllers
- lightdm a display manager
- link call the link function to create a link to a file
- ln make links between files
- lnav ncurses-based log file viewer
- lncrawl Generate and download e-books from online sources
- locale Get locale-specific information
- localectl Query or change system locale and keyboard settings
- logname print user's login name
- ls list directory contents
- lsb_release prints certain LSB (Linux Standard Base) and Distribution information
- lsblk list block devices
- lscpu display information about the CPU architecture
- lslocks List local system locks
- lslogins Display information about known users in the system
- lsmem list the ranges of available memory with their online status
- lsns List system namespaces
- lsusb list USB devices
- lua Lua interpreter
- lzcat Compress or decompress .xz and .lzma files
- lzma Compress or decompress .xz and .lzma files
- make GNU make utility to maintain groups of programs
- makepkg make packages compatible for use with pacman
- man an interface to the system reference manuals
- marp A CLI interface for Marp and Marpit based converters
- mcomix GTK Comic Book Viewer
- md5sum compute and check MD5 message digest
- mdbook Creates a book from markdown files
- meld Meld is a file and directory comparison tool
- melt melt generates a seed phrase from an SSH key
- micro A modern and intuitive terminal-based text editor
- minikube minikube quickly sets up a local Kubernetes cluster
- mitmproxy interactive, SSL/TLS-capable intercepting proxy
- mix A build automation tool for working with applications written in the Elixir programming language
- mkcert simple tool for making locally-trusted development certificates
- mkdir make directories
- mkfifo make FIFOs (named pipes)
- mkfs Make a Linux filesystem
- mknod make block or character special files
- mkswap Set up a Linux swap area
- mktemp create a temporary file or directory
- modinfo Show information about a Linux Kernel module
- modprobe Add and remove modules from the Linux Kernel
- molecule Testing framework to aid in the development of Ansible roles
- more file perusal filter for crt viewing
- mosh mobile shell with roaming and intelligent local echo
- mount mount a filesystem
- mousepad Mousepad is a simple text editor for the Xfce desktop environment
- mpv a media player
- mv move (rename) files
- mvn Apache Maven is a software project management and comprehension tool
- nano Nano's ANOther editor, inspired by Pico
- nc simple Unix utility which reads and writes data across network connections
- ncdu NCurses Disk Usage
- neomutt The NeoMutt Mail User Agent
- netcat simple Unix utility which reads and writes data across network connections
- newman Newman is a command-line collection runner for Postman
- newrelic The New Relic CLI
- nfpm Packages apps on RPM, Deb and APK formats based on a YAML configuration file
- ng The Angular CLI
- nice run a program with modified scheduling priority
- nilaway Static Analysis tool to detect potential Nil panics in Go code
- nix-build build a Nix expression
- nix-channel manage Nix channels
- nix-instantiate instantiate store derivations from Nix expression
- nix-shell start an interactive shell based on a Nix expression
- nix a tool for reproducible and declarative configuration management
- nixos-rebuild reconfigure a NixOS machine
- nl number lines of files
- nmcli command-line tool for controlling NetworkManager
- node server-side JavaScript runtime
- nohup run a command immune to hangups, with output to a non-tty
- nomad Nomad is an easy-to-use, flexible, and performant workload orchestrator
- npm the package manager for JavaScript
- ntpd NTP daemon program
- nu Nushell
- nvim edit text
- od dump files in octal and other formats
- ollama Large language model runner
- openscad script file based graphical CAD environment
- optipng Optimize Portable Network Graphics files
- packer Create identical machine images for multiple platforms from a single source configuration.
- pacman-conf query pacman's configuration file
- pacman-db-upgrade Upgrade the local pacman database to a newer format
- pacman-key Manage pacman's list of trusted keys
- pacman-mirrors generate pacman mirrorlist
- pacman package manager utility
- palemoon Pale Moon browser
- pamac package manager utility
- pandoc general markup converter
- paru Feature packed AUR helper
- pass stores, retrieves, generates, and synchronizes passwords securely
- passwd change user password
- paste merge lines of files
- patch appy a diff file to an original
- pathchk check whether file names are valid or portable
- pcmanfm A lightweight Gtk+ based file manager for X Window
- pgrep look up processes based on name and other attributes
- php PHP Command Line Interface
- picard Picard is a cross-platform music tagger written in Python
- pigz compress or expand files
- ping send ICMP ECHO_REQUEST to network hosts
- pinky lightweight finger
- pip package manager for Python packages
- pkg A tool for managing packages
- pkgsite Pkgsite extracts and generates documentation for Go programs
- pkill look up for processes based on name and other attributes
- pnpm Fast, disk space efficient package manager
- podman Simple management tool for pods, containers and images
- poweroff poweroff the machine
- powertop The Linux PowerTOP tool
- pprof pprof is a tool for visualization and analysis of profiling data
- pr convert text files for printing
- present present implements parsing and rendering of present file
- prettybat Pretty-print source code and highlight it with bat
- prettyping This script is a wrapper around the system's "ping" tool
- printenv print all or part of environment
- ps report a snapshot of the current processes
- ptx produce a permuted index of file contents
- pulumi Pulumi command line
- pwait wait for processes based on name and other attributes
- pwd Print the full filename of the current working directory
- python an interpreted, interactive, object-oriented programming language
- qmk CLI wrapper for running QMK commands
- qrencode Encode input data in a QR Code and save as a PNG or EPS image
- qutebrowser a keyboard-driven, vim-like browser based on PyQt5
- ranger visual file manager
- readlink print resolved symbolic links or canonical file names
- reboot reboot the machine
- redis-cli Redis command line interface
- restic Backup and restore files
- resume-cli command line tool for JSON Resume
- rg recursively search current directory for lines matching a pattern
- rifle ranger's file opener
- rm remove files or directories
- rmdir remove empty directories
- rmmod Simple program to remove a module from the Linux Kernel
- rsync a fast, versatile, remote (and local) file-copying tool
- run0 Elevate privileges interactively
- rust-analyzer LSP server for the Rust programming language
- rustc compiler for the Rust programming language
- rustdoc generate documentation for Rust projects
- rustup installer for the systems programming language Rust
- saw A fast, multipurpose tool for AWS CloudWatch Logs
- scp OpenSSH secure file copy
- scrot command line screen capture utility
- sdkmanager Android SDK manager
- sed stream editor for filtering and transforming text
- semver A JavaScript implementation of the https://semver.org/ specification
- seq print a sequence of numbers
- set-env set environment variable
- sftp OpenSSH secure file transfer
- sha1sum compute and check SHA1 message digest
- sha256sum compute and check SHA256 message digest
- showkey examine the codes sent by the keyboard
- shred overwrite a file to hide its contents, and optionally delete it
- shutdown Shut down the system
- sleep delay for a specified amount of time
- slides Terminal based presentation tool
- soft A self-hostable Git server for the command line
- sort sort lines of text files
- speedtest-cli Command line interface for testing internet bandwidth using speedtest.net
- split split a file into pieces
- ssh-agent OpenSSH authentication agent
- ssh-copy-id use locally available keys to authorise logins on a remote machine
- ssh-keygen OpenSSH authentication key utility
- ssh OpenSSH remote login client
- st simple terminal
- starship The cross-shell prompt for astronauts
- stat display file or file system status
- staticcheck The advanced Go linter
- strings print the sequences of printable characters in files
- stty change and print terminal line settings
- su run a command with substitute user and group ID
- sudo execute a command as another user
- sudoedit edit files as another user
- sudoreplay replay sudo session logs
- sulogin single-user login
- sum checksum and count the blocks in a file
- supervisorctl control applications run by supervisord from the cmd line
- supervisord run a set of applications as daemons
- svg-term Share terminal sessions as razor-sharp animated SVG everywhere
- svgcleaner clean up your SVG files from the unnecessary data
- sway An i3-compatible Wayland compositor
- swaybar bar for swaywm
- swaybg Background for Wayland
- swayidle Idle manager for Wayland
- swaylock Screen locker for Wayland
- swaymsg Send messages to a running instance of sway over the IPC socket
- swaynag Show a warning or error message with buttons
- syft Generate a package SBOM
- sync Synchronize cached writes to persistent storage
- sysctl configure kernel parameters at runtime
- systemctl Query or send control commands to the system manager
- tac concatenate and print files in reverse
- tail output the last part of files
- tar tar - an archiving utility
- task A task runner / simpler Make alternative written in Go
- tea command line tool to interact with Gitea
- tealdeer A fast TLDR client
- tee read from standard input and write to standard output and files
- telnet User interface to TELNET
- templ A language for writing HTML user interfaces in Go
- termux-apt-repo Create a repository with deb files
- terraform-ls Terraform Language Server
- terraform infrastructure as code software tool
- terragrunt Terragrunt is a thin wrapper for Terraform
- terramate A tool for managing terraform stacks
- tesseract command-line OCR engine
- tig text-mode interface for Git
- tinygo TinyGo is a Go compiler for small places
- tldr Python command line client for tldr
- tmate Instant terminal sharing
- tmux terminal multiplexer
- tofu The open source infrastructure as code tool
- toit.lsp start the lsp server
- toit.pkg The Toit package manager
- top display Linux processes
- tor-browser Tor Browser
- tor-gencert Generate certs and keys for Tor directory authorities
- tor-print-ed-signing-cert print expiration date of ed25519 signing certificate
- tor-resolve resolve a hostname to an IP address via tor
- torsocks Shell wrapper to simplify the use of the torsocks(8) library to transparently torify an application
- touch change file timestamps
- tox automation project
- tr translate or delete characters
- traefik Traefik is a modern HTTP reverse proxy and load balancer made to deploy microservices with ease
- transmission-cli A fast and easy BitTorrent client
- transmission-create A command-line utility to create .torrent files
- transmission-daemon A daemon-based BitTorrent client
- transmission-edit A command-line utility to modify .torrent files' announce URLs
- transmission-remote A remote control utility for transmission-daemon and transmission
- transmission-show A command-line utility to show .torrent file metadata
- tree list contents of directories in a tree-like format
- truncate Shrink or extend the size of each FILE to the specified size
- ts timestamp input
- tsc The TypeScript Compiler
- tsh Teleport Command Line Client
- tshark Dump and analyze network traffic
- tsort perform topological sort
- tty print the file name of the terminal connected to standard input
- ttyd ttyd is a tool for sharing terminal over the web
- turbo The build system that makes ship happen
- umount Unmount filesystems
- uname print system information
- unbrotli compress or decompress files
- unexpand convert spaces to tabs
- uniq report or omit repeated lines
- unlink call the unlink function to remove the specified file
- unlzma Compress or decompress .xz and .lzma files
- unpigz compress or expand files
- unset-env unset environment variable
- unxz Compress or decompress .xz and .lzma files
- unzip list, test and extract compressed files in a ZIP archive
- upower UPower command line tool
- uptime Tell how long the system has been running
- upx compress or expand executable files
- useradd create a new user or update default new user information
- userdel delete a user account and related files
- usermod modify a user account
- users print the user names of users currently logged in to the current host
- vagrant tool for building and managing virtual machine environments
- vault A tool for secrets management
- vdir list directory contents
- vercel Develop. Preview. Ship.
- vhs Run a given tape file and generates its outputs.
- vi screen oriented (visual) display editor based on ex
- viewnior simple, fast and elegant image viewer
- visudo safely edit the sudoers file
- viu View images right from the terminal
- vivid LS_COLORS manager with multiple themes
- vlc the VLC media player
- volta The JavaScript Launcher
- w Show who is logged on and what they are doing
- watch execute a program periodically, showing output fullscreen
- watchexec Execute commands when watched files change
- watchgnupg Read and print logs from a socket
- waypoint Easy application deployment for Kubernetes and Amazon ECS
- wc print newline, word, and byte counts for each file
- wezterm Wez's Terminal Emulator
- wget a non-interactive network retriever
- whereis Locate the binary, source, and manual-page files for a command
- which Write the full path of COMMAND(s) to standard output
- who show who is logged on
- whoami print effective userid
- wine run Windows programs on Unix
- wineboot perform Wine initialization, startup, and shutdown task
- winepath Tool to convert Unix paths to/from Win32 paths
- wineserver the Wine server
- winetricks manage virtual Windows environments using Wine
- wire Compile-time Dependency Injection for Go
- wireshark Interactively dump and analyze network traffic
- wishlist The SSH Directory
- wl-mirror a simple Wayland output mirror client
- woeusb A Linux program to create a Windows USB stick installer
- xargs build and execute command lines from standard input
- xbacklight adjust backlight brightness using RandR extension
- xclip command line interface to X selections
- xdotool command-line X11 automation tool
- xonsh Python-powered shell
- xz Compress or decompress .xz and .lzma files
- xzcat Compress or decompress .xz and .lzma files
- yarn Yarn is a package manager that doubles down as project manager
- yay An AUR Helper written in Go
- yes output a string repeatedly until killed
- yj Convert between YAML, TOML, JSON, and HCL
- youtube-dl download videos from youtube.com or other video platforms
- yt-dlp A youtube-dl fork with additional features and fixes
- zathura a document viewer
- zcat compress or expand files
- zip package and compress (archive) files
- zoxide A smarter cd command for your terminal
Style
Transformations can be applied to files and specific values.
This is only supported in elvish, nushell, powershell, xonsh and zsh.
File
Files can be styled with the LS_COLORS
environment variable (e.g. using vivid):
# elvish
set-env LS_COLORS (vivid generate dracula)
# powershell
$env:LS_COLORS = (vivid generate dracula)
# zsh
export LS_COLORS=$(vivid generate dracula)
Value
Values can be styled with a comma separated list of transformations:
# set
carapace --style 'carapace.Value=bold,magenta'
# clear
carapace --style 'carapace.Description='
Generic configuration like default value and description style can be found under
carapace.{key}
Scheme
How the default colors look depends on your terminal color scheme.
It is recommended to choose one with a high contrast so that every color is well readable.
Transformations
Transformations are adopted from elvish:
Each
$style-transformer
can be one of the following:
- A boolean attribute name:
- One of
bold
,dim
,italic
,underlined
,blink
andinverse
for setting the corresponding attribute.- An attribute name prefixed by
no-
for unsetting the attribute.- An attribute name prefixed by
toggle-
for toggling the attribute between set and unset.- A color name for setting the text color, which may be one of the following:
- One of the 8 basic ANSI colors:
black
,red
,green
,yellow
,blue
,magenta
,cyan
andwhite
.- The bright variant of the 8 basic ANSI colors, with a
bright-
prefix.- Any color from the xterm 256-color palette, as
colorX
(such ascolor12
).- A 24-bit RGB color written as
#RRGGBB
(such as'#778899'
). Note: You need to quote such values, since an unquoted#
introduces a comment (e.g. use'bg-#778899'
instead ofbg-#778899
).- A color name prefixed by
fg-
to set the foreground color. This has the same effect as specifying the color name without thefg-
prefix.- A color name prefixed by
bg-
to set the background color.
Bridges
With ~/.config/carapace/bridges.yaml
generic bridges can be configured for commands.
gh: cobra
opentofu: complete
tsh: kingpin
bridges.yaml
is a simpler alternative to Spec/Bridge. It has a higher precedence than CARAPACES_BRIDGES but lower than internal completers and specs. So disable an internal completer with CARAPACES_EXCLUDES if you want to replace it with a bridge.
Currently available bridges:
- argcomplete
- bash
- carapace
- clap (needs clap-rs/clap#3166)
- click
- cobra
- complete
- fish
- inshellisense
- kingpin
- powershell
- urfavecli
- yargs
- zsh
Bridging frameworks should be preferred to shells (e.g. zsh) as these generally work better and have less overhead.
Cache
The list of completers is cached to not impact shell startup time.
Clear the cache with carapace --clear-cache
if your system changes.
Spec
Custom completions can be defined using yaml files.
see carapace-spec for more documentation
# yaml-language-server: $schema=https://carapace.sh/schemas/command.json
name: mycmd
description: my command
flags:
--optarg?: optarg flag
-r, --repeatable*: repeatable flag
-v=: flag with value
persistentflags:
--help: bool flag
completion:
flag:
optarg: ["one", "two\twith description", "three\twith style\tblue"]
v: ["$files"]
commands:
- name: sub
description: subcommand
completion:
positional:
- ["$list(,)", "1", "2", "3"]
- ["$directories"]
Custom Macros
Carapace provides a range of custom macros:
carapace --macro # list macros
carapace --macro color.HexColors # show macro details
carapace --macro color.HexColors <TAB> # test macro
User
User defined Specs are automatically loaded by carapace _carapace
from ${UserConfigDir}/carapace/specs
.
Added files initially need a new shell to be started for it to be registered with
carapace _carapace
. Afterwards any change to it has an immediate effect.It is mandatory that the file name matches the name defined in the spec (e.g.
myspec.yaml
forname: myspec
).
Override
Specs override an internal completer with the same name. E.g. if the internal kubectl
completer does not work as expected it can be bridged instead:
name: kubectl
description: kubectl controls the Kubernetes cluster manager
completion:
positionalany: ["$carapace.bridge.Cobra([kubectl])"]
JSON Schema
A JSON Schema can be used by adding the following header to the Specs:
# yaml-language-server: $schema=https://carapace.sh/schemas/command.json
Bridge
Bridging completions from another engine for shells not natively supported by it is possible with the corresponding Macro.
Even when the command supports your current shell it is still beneficial to bridge it as this enables embedding like
sudo [spec.name] <TAB>
.It also avoids the issue of shell startup delay when sourcing the completion in init scripts otherwise circumvented with lazycomplete.
However, bridging is limited to supported commands/frameworks and how well it actually works.
Frameworks
Argcomplete
kislyuk/argcomplete based commands can be bridged with the bridge.Argcomplete
macro:
# yaml-language-server: $schema=https://carapace.sh/schemas/command.json
name: az
description: Azure Command-Line Interface
parsing: disabled
completion:
positionalany: ["$carapace.bridge.Argcomplete([az])"]
Carapace
carapace-sh/carapace based commands can be bridged with the bridge.Carapace
macro:
# yaml-language-server: $schema=https://carapace.sh/schemas/command.json
name: freckles
description: simple dotfile manager
parsing: disabled
completion:
positionalany: ["$carapace.bridge.Carapace([freckles])"]
CarapaceBin
Completers and Specs registered in carapace-sh/carapace-bin can be bridged with the bridge.CarapaceBin
macro:
# yaml-language-server: $schema=https://carapace.sh/schemas/command.json
name: github-cli
description: Work seamlessly with GitHub from the command line
parsing: disabled
completion:
positionalany: ["$carapace.bridge.CarapaceBin([gh])"]
Clap
clap-rs/clap based commands can be bridged with the bridge.Clap
macro:
# yaml-language-server: $schema=https://carapace.sh/schemas/command.json
name: dyamic
description: clap dynamic example
parsing: disabled
completion:
positionalany: ["$carapace.bridge.Clap([dynamic])"]
needs clap-rs/clap#3166
Click
pallets/click based commands can be bridged with the bridge.Click
macro:
# yaml-language-server: $schema=https://carapace.sh/schemas/command.json
name: watson
description: Watson is a tool aimed at helping you monitoring your time
parsing: disabled
completion:
positionalany: ["$carapace.bridge.Click([watson])"]
Cobra
spf13/cobra based commands can be bridged with the bridge.Cobra
macro:
# yaml-language-server: $schema=https://carapace.sh/schemas/command.json
name: kubectl
description: kubectl controls the Kubernetes cluster manager
parsing: disabled
completion:
positionalany: ["$carapace.bridge.Cobra([kubectl])"]
Complete
posener/complete based commands can be bridged with the bridge.Complete
macro:
# yaml-language-server: $schema=https://carapace.sh/schemas/command.json
name: vault
description: Manage Secrets & Protect Sensitive Data
parsing: disabled
completion:
positionalany: ["$carapace.bridge.Complete([vault])"]
Inshellisense
Commands provided by microsoft/inshellisense can be bridged with the bridge.Inshellisense
macro:
# yaml-language-server: $schema=https://carapace.sh/schemas/command.json
name: node
description: Run the node interpreter
parsing: disabled
completion:
positionalany: ["$carapace.bridge.Inshellisense([node])"]
Kingpin
alecthomas/kingpin based commands can be bridged with the bridge.Kingpin
macro:
# yaml-language-server: $schema=https://carapace.sh/schemas/command.json
name: tsh
description: Teleport Command Line Client
parsing: disabled
completion:
positionalany: ["$carapace.bridge.Kingpin([tsh])"]
Urfavecli
urfave/cli based commands can be bridged with the bridge.Urfavecli
macro:
# yaml-language-server: $schema=https://carapace.sh/schemas/command.json
name: tea
description: command line tool to interact with Gitea
parsing: disabled
completion:
positionalany: ["$carapace.bridge.Urfavecli([tea])"]
Yargs
yargs/yargs based commands can be bridged with the bridge.Yargs
macro:
# yaml-language-server: $schema=https://carapace.sh/schemas/command.json
name: ng
description: CLI tool for Angular
parsing: disabled
completion:
positionalany: ["$carapace.bridge.Yargs([ng])"]
Shells
For shells custom configurations are loaded from
${UserConfigDir}/carapace/bridge
. Invoking completion in shells is quite tricky though and edge cases are likely to fail.
Bash
Commands registered in bash can be bridged with the bridge.Bash
macro:
# yaml-language-server: $schema=https://carapace.sh/schemas/command.json
name: tail
description: output the last part of files
parsing: disabled
completion:
positionalany: ["$carapace.bridge.Bash([tail])"]
Fish
Commands registered in fish-shell/fish-shell can be bridged with the bridge.Fish
macro:
# yaml-language-server: $schema=https://carapace.sh/schemas/command.json
name: git
description: the stupid content tracker
parsing: disabled
completion:
positionalany: ["$carapace.bridge.Fish([git])"]
Powershell
Commands registered in powershell can be bridged with the bridge.Powershell
macro:
# yaml-language-server: $schema=https://carapace.sh/schemas/command.json
name: ConvertTo-Json
description: convert to json
parsing: disabled
completion:
positionalany: ["$carapace.bridge.Powershell([ConvertTo-Json])"]
Zsh
Commands registered in zsh can be bridged with the bridge.Zsh
macro:
# yaml-language-server: $schema=https://carapace.sh/schemas/command.json
name: git
description: the stupid content tracker
parsing: disabled
completion:
positionalany: ["$carapace.bridge.Zsh([git])"]
Embed
The bridged completion can also be embedded as subcommand.
# yaml-language-server: $schema=https://carapace.sh/schemas/command.json
name: embed
commands:
- name: git
completion:
positionalany: ["$carapace.bridge.CarapaceBin([git]) ||| $chdir(~/.password-store)"]
Plugin
Embedding is also internally used to enable plugin completion for tools like cargo-[plugin]
, gh-[plugin]
, git-[plugin]
. Simply add a Spec with the corresponding name.
E.g. the gh-repo-collab extension for GitHub CLI:
# yaml-language-server: $schema=https://carapace.sh/schemas/command.json
name: gh-repo-collab
description: manage repository collaborators
commands:
-
name: list
completion:
positional:
- ["$carapace.tools.gh.OwnerRepositories"]
-
name: add
flags:
--permission=: set permission
completion:
flag:
permission: ["pull", "triage", "push", "maintain", "admin\t\tred"]
positional:
- ["$carapace.tools.gh.OwnerRepositories"]
- ["$carapace.tools.gh.Users"]
-
name: remove
completion:
positional:
- ["$carapace.tools.gh.OwnerRepositories"]
- ["$carapace.tools.gh.Users"]
Run
Specs containing a run
field can be executed using Shims.
Alias
Alias bridges a command while retaining the argument completion.
# yaml-language-server: $schema=https://carapace.sh/schemas/command.json
name: log-by-author
run: "[git, log, --author]"
Script
Script macro is executed with sh
on unix systems and pwsh
on windows.
Flags are used for environment substitution and positional arguments are passed to the script.
# yaml-language-server: $schema=https://carapace.sh/schemas/command.json
name: ls-remote
run: "$(git ls-remote --sort='${C_FLAG_SORT:-HEAD}' $@)"
flags:
--sort=: field name to sort on
completion:
flag:
sort: [version:refname, authordate]
positional:
- ["$carapace.tools.git.RepositorySearch"]
positionalany: ["$carapace.tools.git.LsRemoteRefs({url: '${C_ARG0}', branches: true, tags: true})"]
Shim
When carapace _carapace
is invoked it creates shims in ${UserConfigDir}/carapace/bin
for runnable specs.
For unix systems this is a simple shell script, but for windows an embedded binary is used.
#!/bin/sh
carapace --run "/home/carapace-sh/.config/carapace/specs/runnable.yaml" "$@"
Scrape
Command structure from various tools can be scraped to Specs.
Clap
For clap use carapace-spec-clap.
Cobra
Kingpin
For kingpin use carapace-spec-kingpin.
Kong
For kong use carapace-spec-kong.
Man
For manpages use carapace-spec-man.
Urfavecli
For urfavecli use carapce-spec-urfavecli.
Codegen
Specs can be used to generate go code.
carapace --codegen [spec]
Examples
github.yaml
# yaml-language-server: $schema=https://carapace.sh/schemas/command.json
name: github
completion:
positional:
- ["$carapace.tools.gh.OwnerRepositories"] # ${C_ARG0}
- ["$carapace.tools.git.LsRemoteRefs({url: 'https://github.com/${C_ARG0}', branches: true, tags: true})"]
zipfile.yaml
# yaml-language-server: $schema=https://carapace.sh/schemas/command.json
name: zipfile
completion:
positional:
- ["$files([.zip])"] # ${C_ARG0}
positionalany: ["$carapace.fs.ZipFileContents(${C_ARG0})"] # ${C_ARG1},${C_ARG2},...
refs.yaml
# yaml-language-server: $schema=https://carapace.sh/schemas/command.json
name: refs
flags:
-t, --tags: include tags # ${C_FLAG_TAGS}
--localbranches: include local branches # ${C_FLAG_LOCALBRANCHES}
--c=: amount of commits # ${C_FLAG_C}
completion:
positional:
- ["$carapace.tools.git.Refs({tags: ${C_FLAG_TAGS:-false}, localbranches: ${C_FLAG_LOCALBRANCHES:-false}, commits: ${C_FLAG_C:-0}})"]
- ["$carapace.tools.git.Refs"] # default
g.yaml
# yaml-language-server: $schema=https://carapace.sh/schemas/command.json
name: g
commands:
- name: log
description: Show commit logs
group: git
run: "[git, log]"
- name: issue
description: Manage issues
group: gh
run: "[gh, issue]"
commands:
- name: bugs
description: List bugs
run: "[gh, issue, list, --label, bug]"
- name: edit
description: Edit changed files
run: "$(hx $@)"
flags:
-s, --staged: include staged files
completion:
positionalany: ["$carapace.tools.git.Changes({staged: ${C_FLAG_STAGED:-false}, unstaged: true})"]
Macros
On top of the base Macros defined in carapace-spec, carapace-bin also provides the following macros:
- bridge.Argcomplete bridges https://github.com/kislyuk/argcomplete
- bridge.Bash bridges https://www.gnu.org/software/bash/
- bridge.Carapace bridges https://github.com/carapace-sh/carapace
- bridge.CarapaceBin bridges https://github.com/carapace-sh/carapace-bin
- bridge.Clap bridges https://github.com/clap-rs/clap
- bridge.Click bridges https://github.com/pallets/click
- bridge.Cobra bridges https://github.com/spf13/cobra
- bridge.Complete bridges https://github.com/posener/complete
- bridge.Fish bridges https://fishshell.com/
- bridge.Inshellisense bridges https://github.com/microsoft/inshellisense
- bridge.Kingpin bridges https://github.com/alecthomas/kingpin
- bridge.Macro bridges macros exposed with https://github.com/carapace-sh/carapace-spec
- bridge.Powershell bridges https://microsoft.com/powershell
- bridge.Urfavecli bridges https://github.com/urfave/cli
- bridge.Yargs bridges https://github.com/yargs/yargs
- bridge.Zsh bridges https://www.zsh.org/
- color.256Colors completes 256 colors
- color.AnsiBackgroundColors completes ansi background colors
- color.AnsiForegroundColors completes ansi foreground colors
- color.HexColors completes hex color codes
- color.XtermColorNames completes xterm color names
- env.NameValues completes environment variable names and values
- env.Names completes known environment variables
- env.Values completes values for given environment variable
- fs.ArFileContents completes contents of given ar file
- fs.BlockDevices completes block devices
- fs.FileModes completes numeric or symbolic file modes
- fs.FileModesNumeric completes numeric file modes
- fs.FileModesSymbolic completes symbolic file modes
- fs.FilenameExtensions completes filename extensions
- fs.FilesystemTypes completes file system types
- fs.JarFileClasses completes classes within a jar file
- fs.Labels completes disk labels
- fs.Mounts completes file system mounts
- fs.PartitionLabels completes partition labels
- fs.PartitionUuids completes partition uuids
- fs.SubDirectories completes subdirectories of a given path
- fs.TarFileContents completes contents of given tar file
- fs.Uuids completes disk uuids
- fs.ZipFileContents completes contents of given zip file
- net.BaudRates completes baud rates
- net.Bssids completes BSSID's of local wifi networks
- net.Connections completes stored network connections
- net.Devices completes network devices
- net.Hosts completes known hosts
- net.Ipv4Addresses completes ipv4 addresses
- net.KnownPorts completes commonly used ports (opiniated)
- net.Ports completes known and used ports.
- net.Ssids completes SSID's of local wifi networks
- net.Subnets completes subnets
- net.UsedPorts completes ports currently in use
- net.http.CacheControlRequestDirectives completes Cache-Control directives for a request
- net.http.ContentEncodingTokens completes content encoding tokens
- net.http.MediaTypes completes media types
- net.http.OpenApiPaths completes api paths
- net.http.RequestHeaderNames completes http request header names
- net.http.RequestHeaderValues completes values for given request header
- net.http.RequestHeaders completes http request headers
- net.http.RequestMethods completes request methods
- net.http.StatusCodes completes http status codes
- net.http.Tags completes html tags
- net.http.TransferEncodingTokens completes transfer encoding tokens
- net.http.Urls completes known hosts and ports as urls
- net.http.UserAgents completes common user agents
- net.ssh.Ciphers completes ciphers
- net.ssh.HostKeyAlgorithms completes host key algorithms
- net.ssh.Hosts completes ssh hosts
- net.ssh.Options completes options and their values
- net.ssh.PrivateKeys completes private keys
- net.ssh.PublicKeys completes public keys
- number.Range completes a number range formatted with given (optional) format specifier
- number.SemanticVersions completes the next semantic version based on the given existing versions.
- os.Cgroups completes cgroup names
- os.Displays completes x displays
- os.EnvironmentVariables completes environment values
- os.FontFamilies completes font family names
- os.GpgKeyIds completes GPG key ids
- os.GroupMembers completes system group members
- os.Groups completes system group names
- os.KernelModules completes kernel modules
- os.KernelModulesLoaded completes currently loaded kernel modules
- os.KernelReleases completes kernel releases
- os.Languages completes languages
- os.Locales completes locales
- os.MouseButtons completes mouse button ids
- os.Screens completes sreens
- os.SessionIds completes session ids
- os.Shells completes available terminal shells
- os.SoundCards completes sound cards
- os.Terminals completes terminals
- os.UserGroup completes system user:group separately
- os.Users completes system user names
- os.usb.DeviceNumbers completes usb devices
- os.usb.ProductNumbers completes usb products
- ps.FormatSpecifiers completes format specifiers
- ps.KillSignals completes linux kill signals
- ps.ProcessExecutables completes executable names of current processes
- ps.ProcessIds completes proces IDs
- ps.ProcessStates completes linux process states
- text.Encodings completes encodings
- time.Date completes
yyyy-MM-dd
dates separately - time.Days completes
dd
days for a month - time.Months completes
MM
months - time.Time completes
hh:mm
time - time.TimeS completes
hh:mm:ss
time - tools.adb.Packages completes installed packages
- tools.adb.Users completes device user ids
- tools.apt.PackageSearch completes installable packages
- tools.apt.Packages completes installed packages
- tools.ar.Targets completes targets
- tools.asdf.Plugins completes plugins
- tools.aws.OutputFormats completes output formats
- tools.aws.Profiles completes configuration profile names
- tools.aws.Regions completes region names
- tools.bat.Languages completes languages
- tools.bat.Styles completes styles
- tools.bat.Themes completes themes
- tools.benthos.BoblangFunctions completes boblang functions
- tools.benthos.BoblangMethods completes boblang methods
- tools.benthos.Buffers completes buffers
- tools.benthos.Caches completes caches
- tools.benthos.Inputs completes inputs
- tools.benthos.Metrics completes metrics
- tools.benthos.Outputs completes outputs
- tools.benthos.Processors completes processors
- tools.benthos.RateLimits completes rate limits
- tools.benthos.Tracers completes tracers
- tools.bloop.Projects completes projects
- tools.bloop.Protocols completes protocols
- tools.bloop.Reporters completes reporters
- tools.bluetoothctl.AgentCapabilities completes agent capabilities
- tools.bluetoothctl.Controllers completes controllers
- tools.bluetoothctl.Devices completes devices
- tools.brew.AllCasks completes all casks
- tools.brew.AllFormulae completes all formulae
- tools.cargo.Dependencies completes dependencies
- tools.cargo.Features completes features
- tools.cargo.NightlyFlags completes nightly flags
- tools.cargo.clippy.Categories completes categories
- tools.cargo.clippy.Lints completes lints
- tools.charm.Databases completes databases
- tools.charm.Files completes charm cloud files
- tools.chroma.Formatters completes formatters
- tools.chroma.Lexers completes lexers
- tools.chroma.Styles completes styles
- tools.conda.EnvironmentVariables completes environment variables.
- tools.conda.Environments completes environments
- tools.dagger.Functions completes functions
- tools.dagger.Licenses completes licenses
- tools.dagger.Mods copletes local files and remote repositories
- tools.dagger.Sdks completes skds
- tools.dbt.Profiles completes profiles
- tools.dbt.Resources completes resources
- tools.delta.SyntaxThemes completes syntax themes
- tools.devbox.InstalledPackages completes installed packaages
- tools.direnv.Auths completes authorizations
- tools.docker.Configs completes config names
- tools.docker.ContainerIds completes container names
- tools.docker.ContainerPath completes container names and their file system separately
- tools.docker.ContainerPorts completes ports of a container
- tools.docker.Containers completes container names
- tools.docker.Contexts completes context names
- tools.docker.DetachKeys completes detach keys
- tools.docker.LogDrivers completes log drivers
- tools.docker.Networks completes network names
- tools.docker.Nodes completes node ids
- tools.docker.Plugins completes plugins
- tools.docker.Ports completes port(range)s and protocols
- tools.docker.Repositories completes repository names
- tools.docker.RepositoryTags completes repository names and tags separately
- tools.docker.Secrets completes secrets
- tools.docker.Services completes services
- tools.docker.Stacks completes stacks
- tools.docker.Volumes completes volume names
- tools.docker.compose.Containers completes containers
- tools.docker.compose.Files completes files within a service container
- tools.docker.compose.Services completes services
- tools.docker.compose.Users completes users within a service container
- tools.docker.compose.Volumes completes volumes
- tools.doing.WorkItemTypes completes work item types
- tools.fastfetch.Colors completes colors
- tools.fastfetch.Logos completes logos
- tools.fastfetch.Modules completes modules
- tools.fastfetch.Presets completes presets
- tools.ffmpeg.BitstreamFilters completes bitstream filters
- tools.ffmpeg.Codecs completes codecs
- tools.ffmpeg.DecodableCodecs completes codecs with decoding support
- tools.ffmpeg.Decoders completes decoders
- tools.ffmpeg.Demuxers completes demuxers
- tools.ffmpeg.Devices completes devices
- tools.ffmpeg.EncodableCodecs completes codecs with encoding support
- tools.ffmpeg.Encoders completes encoders
- tools.ffmpeg.Filters completes filters
- tools.ffmpeg.Formats completes formats
- tools.ffmpeg.HardwareAccelerations completes hardware accellerations
- tools.ffmpeg.HelpTopics completes help topics
- tools.ffmpeg.LogLevels completes log levels
- tools.ffmpeg.Muxers completes muxers
- tools.ffmpeg.Protocols completes protocols
- tools.fish.DebugCategories completes debug categories
- tools.flatpak.ApplicationColumns completes application columns
- tools.flatpak.ApplicationSearch completes installable applications
- tools.flatpak.Applications completes applications
- tools.flatpak.Arches completes architectures
- tools.flatpak.DocumentColums completes document columns
- tools.flatpak.Ellipsizations completes elipsizations
- tools.flatpak.HistoryColums completes history columns
- tools.flatpak.ProcessColums completes process columns
- tools.flatpak.RemoteColumns completes remote columns
- tools.flatpak.RemoteContentColumns completes remote content columns
- tools.flatpak.Remotes completes remotes
- tools.flatpak.SearchColumns completes search columns
- tools.fury.PackageVersions completes package versions
- tools.fury.Packages completes packages
- tools.gh.AuthScopes completes authentication scopes
- tools.gh.CacheFields completes label fields
- tools.gh.CacheRefs completes cache refs
- tools.gh.Caches completes caches
- tools.gh.CodespaceViewFields completes codespace fields for view
- tools.gh.CommitFields completes commit fields
- tools.gh.ConfigHosts completes configured hosts
- tools.gh.ConfigUsers completes configured users
- tools.gh.Contents completes contents
- tools.gh.CurrentAuthScopes completes current authentication scopes for given hostname
- tools.gh.DateFields completes date fields
- tools.gh.DeployKeyFields completes deploy key fields
- tools.gh.Emojis completes emoji names
- tools.gh.EnvironmentVariables completes environment variables
- tools.gh.GpgKeys completes gpg keys
- tools.gh.HostOwnerRepositories completes [host/]owner/repository
- tools.gh.IssueTemplates completes issue templates
- tools.gh.LabelFields completes label fields
- tools.gh.Labels completes labels
- tools.gh.Languages completes repository languages
- tools.gh.Licenses completes licenses
- tools.gh.OrganisationVariables completes organisation variables
- tools.gh.OrganizationEmails completes email for given organization
- tools.gh.Organizations completes organizations
- tools.gh.OwnerRepositories completes owner/repository
- tools.gh.Owners completes users and organizations
- tools.gh.PinnedIssues completes pinned issues
- tools.gh.ProjectItems completes project items
- tools.gh.Projects completes projects
- tools.gh.PullRequestTemplates completes pull request templates
- tools.gh.ReleaseFields completes release fields
- tools.gh.Repositories completes repositories
- tools.gh.RepositoryVariables completes repository variables
- tools.gh.Rulesets completes rulesets
- tools.gh.SecretFields completes secret fields
- tools.gh.SshKeys completes ssh keys
- tools.gh.Teams completes teams
- tools.gh.UserEmails completes email for given user
- tools.gh.Users completes users
- tools.gh.VariableFields completes variable fields
- tools.gh.WorkflowEvents completes events triggering a workflow
- tools.gh.WorkflowFields completes workflow fields.
- tools.git.Aliases completes aliases
- tools.git.Authors completes authors
- tools.git.BundleHeads completes refs in a bundle
- tools.git.CachedDiffs completes changes between stage and given ref
- tools.git.Changes completes (un)staged changes
- tools.git.CleanupMode completes cleanup modes
- tools.git.ColorConfigs completes color configs
- tools.git.ColorModes completes color modes
- tools.git.ColorMovedModes completes color moved modes
- tools.git.ColorMovedWsModes completed color moved whitespace modes
- tools.git.Colors completes colors
- tools.git.ColumnLayoutModes completions column layout modes
- tools.git.Committers completes committers
- tools.git.ConfigTypeOptions completes options for a config type
- tools.git.ConfigTypes completes config types
- tools.git.ConfigValues completes config values
- tools.git.Configs completes configs
- tools.git.CurrentBranch completes the current branch
- tools.git.DeveloperInterfaces completes developer interfaces
- tools.git.DiffAlgorithms completes diff algorithms
- tools.git.DiffFilters completes diff filters
- tools.git.DiffTools completes diff tools
- tools.git.Dirstats completes dirstats
- tools.git.FieldNames completes field names
- tools.git.HeadCommits completes recent head commits
- tools.git.Hooks completes hooks
- tools.git.LocalBranches completes local branches
- tools.git.LsRemoteRefs completes branches and tags for a remote url
- tools.git.MaintenanceTasks completes maintenance tasks
- tools.git.MergeStrategy completes merge strategies
- tools.git.MergeStrategyOptions completes merge strategy options
- tools.git.Notes completes notes
- tools.git.NotesMergeStrategies completes notes merge strategies
- tools.git.RecentCommits completes recent commits
- tools.git.RefChanges completes changes made in given ref
- tools.git.RefCommits completes commits reachable by given ref
- tools.git.RefDiffs completes changes beetween refs
- tools.git.RefFiles completes files of given ref
- tools.git.RefParents completes parents of given ref
- tools.git.RefRanges completes refs as range
- tools.git.Refs completes refs (commits, branches, tags)
- tools.git.RemoteBranchNames is like ActionRemoteBranches but skips the remote prefix
- tools.git.RemoteBranches completes remote branches
- tools.git.RemoteUrls completes remote urls
- tools.git.Remotes completes remote names
- tools.git.RepositorySearch completes repositories from github.com and gitlab.com
- tools.git.Stashes completes stash names
- tools.git.SubmoduleBranches completes brances and tags of submodules (filtered by name)
- tools.git.SubmoduleNames completes submodule names
- tools.git.SubmodulePaths completes submodules (relative path)
- tools.git.Tags completes tags
- tools.git.TextAttributes completes text attributes
- tools.git.UnmergedFiles completes unmerged files
- tools.git.Variables completes variables
- tools.git.WhitespaceModes completes whitespace modes
- tools.git.WhitespaceProblems completes whitespace problems
- tools.git.WordDiffModes completes word diff modes
- tools.git.Worktrees completes worktrees
- tools.git.WsErrorHighlightModes completes whitespace error highlight modes
- tools.glow.Styles completes styles
- tools.golang.Analyzers completes analyzers
- tools.golang.Architectures completes known architectures
- tools.golang.BuildTags completes build tags
- tools.golang.Buildmodes completes build modes
- tools.golang.EnvironmentVariables completes go environment variables.
- tools.golang.Funcs completes go funcs
- tools.golang.MethodOrFields completes methods and fields of given symbol
- tools.golang.ModuleDownloadModes completes module download modes
- tools.golang.ModuleSearch completes git repos in module format
- tools.golang.Modules completes ModuleOpts
- tools.golang.OperatingSystems completes known operating systems
- tools.golang.Packages completes packages
- tools.golang.Rewrites completes rewrites
- tools.golang.SymbolTypes completes symbol types
- tools.golang.Symbols completes symbols of given package
- tools.golang.Tests completes tests
- tools.golang.Tools completes tools
- tools.golang.UnixOperatingSystems completes known operating systems matched by the "unix" build tag
- tools.golang.Versions completes go versions
- tools.golang.WorkModules completes workspace modules
- tools.golang.WorkReplacements completes workspace replacements
- tools.golang.WorkUses completes workspace uses
- tools.golangcilint.Linters completes linters
- tools.golangcilint.OutFormats completes output formats
- tools.golangcilint.Presets completes presets
- tools.goreleaser.Builds completes build ids.
- tools.goreleaser.ReleaseSteps completes release steps.
- tools.gum.Alignments completes ActionAlignments
- tools.gum.Borders completes borders
- tools.gum.Colors completes colors
- tools.gum.CursorModes completes cursor modes
- tools.helix.Languages completes languages
- tools.helm.Charts complets charts
- tools.helm.Plugins completes plugins
- tools.helm.Releases completes releases
- tools.helm.Repositories completes repositories
- tools.helm.RepositoryCharts completes repository charts
- tools.helm.Revisions completes revisions
- tools.jaeger.SamplingTypes completes sampling types
- tools.jj.Configs
- tools.jj.Conflicts completes conflicts
- tools.jj.HeadCommits completes head commits
- tools.jj.LocalBookmarks completes local bookmarks
- tools.jj.NextCommits
- tools.jj.Operations completes operations
- tools.jj.PrevCommits completes head commits
- tools.jj.RecentCommits completes recent commits
- tools.jj.RemoteBookmarks completes remote bookmarks
- tools.jj.Remotes completes remotes
- tools.jj.RevChanges completes changes made in given revisions
- tools.jj.RevDiffs completes changes beetween revisions
- tools.jj.RevFiles completes files of given revision
- tools.jj.RevSetFunctions completes refset functions
- tools.jj.RevSets completes revision sets
- tools.jj.Revs completes refs (commits, bookmarks, tags)
- tools.jj.Tags completes tags
- tools.jj.Workspaces completes workspaces
- tools.journalctl.Outputs completes output modes
- tools.just.Recipes completes recipes
- tools.just.Variables completes variables
- tools.kak.Sessions completes kak sessions
- tools.kubectl.Annotations completes annotations
- tools.kubectl.ApiGroups completes api groups
- tools.kubectl.ApiResourceResources completes api resources and resources separately
- tools.kubectl.ApiResources completes api resources
- tools.kubectl.Clusters completes clusters
- tools.kubectl.Containers completes containers
- tools.kubectl.Contexts completes contexts
- tools.kubectl.DryRunModes completes dry run modes
- tools.kubectl.Labels completes labels
- tools.kubectl.NamespaceServiceAccounts completes namespaces and serviceaccounts separately
- tools.kubectl.OutputFormats completes output formats
- tools.kubectl.ResourceVerbs completes resource verbs
- tools.kubectl.Resources completes resources
- tools.kubectl.ValidationModes completes validation modes
- tools.make.Targets completes targets
- tools.man.Pages completes man pages
- tools.man.Sections completes sections of given manpage (or all if empty).
- tools.mitmproxy.AppendableFiles completes files with optional
+
prefix - tools.mitmproxy.ConsoleLayouts completes console layouts
- tools.mitmproxy.FlowFilters
- tools.mitmproxy.Modes completes modes
- tools.mitmproxy.ModifyBodyPattern completes body modification patterns
- tools.mitmproxy.ModifyHeaderPattern completes header modification patterns
- tools.mitmproxy.OptionNames completion option names
- tools.mitmproxy.OptionValues completes option validate_inbound_headers
- tools.mix.MixTasks completes mix tasks
- tools.molecule.Drivers completes molecule drivers
- tools.molecule.Scenarios completes molecule scenarios
- tools.mount.MountOptions completes mount options
- tools.mount.Sources completes sources
- tools.mpv.AudioDecoders completes audio decoders
- tools.mpv.AudioFilters completes audio filters
- tools.mpv.HardwareDecodingAPIs completes hardware decoding apis
- tools.mpv.VideoDecoders completes video decoders
- tools.mpv.VideoFilters completes video filters
- tools.mvn.GoalsAndPhases completes goals and phases
- tools.mvn.Profiles completes profiles
- tools.mvn.Projects completes projects
- tools.newrelic.AccountIds completes account ids
- tools.newrelic.ApplicationGuids completes application guids
- tools.newrelic.ApplicationIds completes application ids
- tools.newrelic.DiagnosticSuites completes diagnostic suites
- tools.newrelic.Profiles completes profiles
- tools.newrelic.TraceObservers completes trace observers
- tools.nix.Attributes completes attributes
- tools.nix.ChannelPackages completes local channels and their packages
- tools.nix.ConfigKeys completes config keys
- tools.nix.ConfigValues completes config values for given key
- tools.nix.DevShells completes a flake and development shells from that flake
- tools.nix.Flakes completes flakes currently available
- tools.nix.Installables completes nix packages and flakes
- tools.nix.LocalChannels completes local channels
- tools.nix.NarFileContents completes contents of given nar file
- tools.nix.Packages completes packages for given channel
- tools.nix.Paths completes paths
- tools.nix.RemoteChannels completes remote channels
- tools.nix.Templates completes the templates outputs of the system template flake
- tools.npm.Dependencies completes dependencies and their version
- tools.npm.DependencyNames completes dependencies
- tools.npm.GlobalConfigKeys completes global config keys
- tools.npm.LocalConfigKeys completes local config keys
- tools.npm.Modules completes modules
- tools.npm.Owners completes owners
- tools.npm.PackageNames completes package names for given registry
- tools.npm.PackageSearch completes packages@version for given registry
- tools.npm.PackageTags completes tags for given package
- tools.npm.PackageVersions completes versions for given package
- tools.npm.Scripts completes scripts
- tools.npm.Workspaces completes workspaces
- tools.ollama.Models completes models
- tools.pacman.Countries completes mirror countries
- tools.pacman.PackageFiles completes package files
- tools.pacman.PackageGroups completes package group names
- tools.pacman.PackageSearch completes installable packages
- tools.pacman.Packages completes installed packages
- tools.pacman.Repositories completes package repositories
- tools.pamac.InstalledPackages completes installed packages
- tools.pamac.PackageGroups completes package groups
- tools.pamac.PackageSearch completes installable packages
- tools.pandoc.Extensions completes extensions
- tools.pandoc.Formats completes formats
- tools.pandoc.HighlightStyles completes highlight styles
- tools.pandoc.InputFormats completes input formats
- tools.pandoc.OutputFormats completes output formats
- tools.paru.PackageSearch completes installable packages
- tools.pass.Directories completes password directories
- tools.pass.Passwords completes password names
- tools.pip.ConfigValues completes config values
- tools.pip.InstalledPackages completes installed packages
- tools.pip.PackageSearch completes remote packages
- tools.pnpm.Dependencies ocmpletes dependencies with their version
- tools.pnpm.DependencyNames completes dependency names
- tools.pnpm.Filter completes filter
- tools.pnpm.Loglevel completes log levels
- tools.pub.HostedExecutables completes executables from pub_cache
- tools.pub.PackageSearch completes packages from pub.dev
- tools.pub.PackageVersions completes versions of a package
- tools.python.Modules completes modules
- tools.python.WarningControls completes warning controls
- tools.python.Warnings completes warnings
- tools.rsync.DebugFlags completes debug flags
- tools.rsync.Formats completes formats
- tools.rustdoc.Lints completes lints
- tools.saw.Groups completes log groups.
- tools.saw.Streams completes log streams.
- tools.supervisor.Groups completes groups
- tools.supervisor.Processes completes processes
- tools.supervisor.Signals completes signals
- tools.sway.Outputs completes outputs
- tools.syft.OutputFormats completes output formats
- tools.syft.Sources completes sources
- tools.systemctl.EnvironmentVariables completes environment variables
- tools.systemctl.LogLevels completes log levels
- tools.systemctl.Properties completes properties for given unit
- tools.systemctl.Services completes services
- tools.systemctl.States completes states
- tools.systemctl.Targets completes targets
- tools.systemctl.UnitTypes completes unit types
- tools.systemctl.Units completes units
- tools.task.Tasks completes tasks
- tools.tea.IssueFields completes issue fields
- tools.tea.Issues completes issues
- tools.tea.Labels completes labels
- tools.tea.Logins completes logins
- tools.tea.MilestoneFields completes milestone fields
- tools.tea.NotificationFields completes notification fields
- tools.tea.NotificationStates complets notification states
- tools.tea.NotificationTypes completes notification types
- tools.tea.OutputFormats completes output formats
- tools.tea.PullrequestFields completes pullrequest fields
- tools.tea.Pullrequests completes pull requests
- tools.tea.RepositoryFields completes repository fields
- tools.tea.TimeFields completes time fields
- tools.tea.UserFields completes user fields
- tools.terraform.Resources completes resources
- tools.terraform.Workspaces completes workspaces
- tools.terramate.CloudStatus completes cloud status
- tools.terramate.Safeguards completes safeguards
- tools.terramate.Stacks completes stacks.
- tools.tinygo.Targets completes targets
- tools.tldr.Commands
- tools.tmux.ClientFlags completes client flags
- tools.tmux.Features completes features
- tools.tmux.Panes completes panes
- tools.tmux.Sessions completes sessions
- tools.tmux.Windows completes windows
- tools.tofu.Resources completes resources
- tools.tofu.Workspaces completes workspaces
- tools.tox.Environments completes tox environments
- tools.transmission.Filters completes filters
- tools.transmission.Ids completes torrent IDs, accounting for previously applied filters
- tools.transmission.TOS Completes a name for ToS values
- tools.tsh.Clusters
- tools.tsh.Formats completes formats
- tools.tshark.FileTypes completes file types
- tools.tshark.Interfaces completes interfaces
- tools.tshark.LinkTypes completes link types for given interface
- tools.tshark.Protocols completes protocols
- tools.tshark.ReadFormats completes read file formats
- tools.tshark.Selectors completes selectors
- tools.tshark.Statistics completes statistics
- tools.turbo.PipelineTasks completes pipeline tasks
- tools.upower.Devices completes devices
- tools.vagrant.Boxes completes boxes
- tools.vagrant.CloudBoxProviders completes cloud box providers
- tools.vagrant.CloudBoxSearch completes cloud boxes
- tools.vagrant.GlobalMachines completes global machines
- tools.vagrant.LocalMachines complets local machines
- tools.vagrant.Machines completes machines
- tools.vagrant.Plugins completes plugins
- tools.vagrant.Providers completes providers
- tools.vagrant.Provisioners completes provisioners
- tools.vagrant.Snapshots completes snapshots
- tools.virtualbox.Machines completes virtualbox machines
- tools.vivid.Themes completes themes
- tools.wezterm.PaneDirections completes pane directions
- tools.wezterm.Panes completes panes
- tools.wezterm.Tabs completes tabs
- tools.wezterm.Windows completes windows
- tools.winetricks.Prefixes completes prefixes
- tools.winetricks.Verbs completes verbs
- tools.xclip.Targets completes selection targets
- tools.xdotool.Desktops completes desktops
- tools.xdotool.Keys completes keys
- tools.xdotool.Properties completes properties
- tools.xdotool.Windows completes windows
- tools.yarn.Bins completes bins
- tools.yarn.ConfigKeys completes configuration keys
- tools.yarn.ConfigValues completes configuration options for given key
- tools.yarn.Dependencies completes dependencies
- tools.yarn.ErrorCodes completes error codes
- tools.yarn.Plugins completes plugins
- tools.yarn.Workspaces completes workspaces
- tools.yay.PackageSearch completes installable packages
- tools.youtubedl.Formats completes formats
- tools.youtubedl.SubLangs completes subtitle languages
- tools.ytdlp.Browsers completes browsers
- tools.ytdlp.ChapterFields completes chapter fields
- tools.ytdlp.EpisodeFields completes episode fields
- tools.ytdlp.Extractors completes extractors
- tools.ytdlp.Fields completes fields
- tools.ytdlp.Formats completes formats
- tools.ytdlp.NumericMetaFields completes numeric meta fields
- tools.ytdlp.OutputFormats completes output formats
- tools.ytdlp.PrintFields completes print fields
- tools.ytdlp.Protocols completes protocols
- tools.ytdlp.SectionFields completes section fields
- tools.ytdlp.SponsorblockCategories completes sponsorblock categories
- tools.ytdlp.SponsorblockFields completes sponsorblock fields
- tools.ytdlp.StringMetaFields completes string meta fields
- tools.ytdlp.SubtitleFormats completes subtitle formats
- tools.ytdlp.Subtitles completes subtitles
- tools.ytdlp.ThumbnailFormats completes thumbnail formats
- tools.ytdlp.TrackFields completes track fields
- tools.ytdlp.VideoFormats completes video formats
- tools.zoxide.Directories completes zoxide directories
Overlay
Overlays are essentially Spec files placed in ${UserConfigDir}/carapace/overlays
that provide additional completions.
These are merged with the existing completion and provide a workaround for issues that have yet to be fixed in upstream.
Overlays implicitly set
CARAPACE_LENIENT
to allow unknown flags.
Flag
# ~/.config/carapace/overlays/doctl.yaml
name: doctl
persistentflags:
--output=: Desired output format [text|json]
completion:
flag:
output: [text, json]
commands:
- name: compute
description: Display commands that manage infrastructure
commands:
- name: region
description: Display commands to list datacenter regions
commands:
- name: list
description: List datacenter regions
flags:
--format=: Columns for output in a comma-separated list
completion:
flag:
format: ["$uniquelist(,)", Slug, Name, Available]
Command
# ~/.config/carapace/overlays/doctl.yaml
name: doctl
commands:
- name: auth
description: Display commands for authenticating doctl with an account
group: management
- name: compute
description: Display commands that manage infrastructure
group: core
- name: custom
description: custom command
group: custom
flags:
-h, --help: show help
completion:
positional:
- [one, two, three]
Variable
Complex environment variable completion is provided with get-env
, set-env
and unset-env
.
In elvish
the completion is simply overridden.
For other shells custom functions are added.
Setting
CARAPACE_ENV=0
before sourcingcarapace _carapace
disables this behaviour.
Custom variables
Custom variables can be defined in ~/.config/carapace/variables/{group}.yaml
variables:
CUSTOM_EXAMPLE: example environment variable
CUSTOM_MACRO: macro example
HTTPS_PROXY: override existing variable
completion:
variable:
CUSTOM_EXAMPLE: ["0\tdisabled\tred", "1\tenabled\tgreen"]
CUSTOM_MACRO: ["$carapace.tools.gh.Labels({owner: rsteube, name: carapace}) ||| $uniquelist(,)"]
HTTPS_PROXY: ["https://localhost:8443\tdevelopment", "https://proxy.company:443\tproduction"]
It is also possible to define conditions.
condition: ["$Parent([.git])"]
variables:
CUSTOM_CONDITION: condition example
completion:
variable:
CUSTOM_CONDITION: ["within", "git", "repo"]
Conditions
- Arch checks if the given names contain current
runtime.GOARCH
- Os checks if the given names contain current
runtime.GOOS
- Parent checks if any parent directory contains one of the given file/directory
- Path checks if any of the given executables are in PATH
Development
Project Layout
.
├── cmd
│ ├── carapace # main application
│ ├── carapace-fmt # simple formatter
│ ├── carapace-generate # executed by `go generate`
│ ├── carapace-lint # simple linter
│ ├── carapace-parse # simple help output parser
│ └── carapace-shim # binary for runnable specs in windows
├── completers # completers
│ └── example_completer # completer for `example`
│ └── cmd
│ └── action # local (coupled) actions
├── completers_release # optimized completers
├── dist # goreleaser dist folder
├── docs # documentation
├── internal # internal packages
└── pkg # public packages
├── actions # shared actions that are also exposed as macros
│ └── tools # shared actions specific to tools
├── conditions # conditions for environment variable completion
├── env # environment variables
├── styles # style configurations
└── util # util functions
Build
Requirements
Development
cd cmd/carapace
go generate ./... # only needed once and when there are new completers or actions
go install
Release
A build with the release
tag uses completers_release
which optimizes startup times.
cd cmd/carapace
go generate ./... # always needed for `completers_release` to be updated
go install -ldflags="-s -w" -tags release
Separate
Completers can also be built (and thus maintained) separately.
cd completers/ln_completer
go install -ldflags="-s -w"
Docker
docker-compose run --rm build # build once (will be mounted from `cmd/carapace`)
docker-compose run --rm [bash|elvish|fish|ion|nushell|oil|powershell|tcsh|xonsh|zsh]
[ln|mkdir|chown...] <TAB>
Creating completers
Manually
- Copy a basic completer for simplicity.
cp -r completers/ln_completer completers/manually_completer
- Update the package name in
main.go
.
-import "github.com/carapace-sh/carapace-bin/completers/ln_completer/cmd"
+import "github.com/carapace-sh/carapace-bin/completers/manually_completer/cmd"
- Create the root command.
echo | carapace-parse -n manually > root.go
- Add subcommands.
echo | carapace-parse -n subcommand -p root > subcommand.go
-
Define flags and completions.
Parsing
Scraping
Examples
Journalctl
Updating Completers
Best Practices
Coupled Actions
Use coupled actions to avoid repetition.
Sometimes an Action depends on the same flag values for multiple subcommands. Since ActionCallback is needed to access these the code can become a bit cumbersome and bloated.
carapace.Gen(get_allCmd).PositionalCompletion(
carapace.ActionCallback(func(c carapace.Context) carapace.Action {
return helm.ActionReleases(helm.ReleasesOpts{
Namespace: rootCmd.Flag("namespace").Value.String(),
KubeContext: rootCmd.Flag("kube-context").Value.String(),
})
}),
)
An alternative to this is creating a local Action that is coupled to the command. Meaning, passing it the command and expecting specific flags to be present.
// completers/helm_completer/cmd/action/release.go
func ActionReleases(cmd *cobra.Command) carapace.Action {
return carapace.ActionCallback(func(c carapace.Context) carapace.Action {
return helm.ActionReleases(helm.ReleasesOpts{
Namespace: cmd.Root().Flag("namespace").Value.String(),
KubeContext: cmd.Root().Flag("kube-context").Value.String(),
})
})
}
Thus the call becomes quite compact.
carapace.Gen(get_allCmd).PositionalCompletion(
action.ActionReleases(get_allCmd),
)
Tools
carapace-fmt
carapace-lint
carapace-parse
carapace-generate
Release Notes
Release notes contain noteworthy changes between minor (1.x
) releases.
These aren't strictly pinned to tags. So a feature announced as
1.n
might already be present in a previous (1.{n-1}.x
) or added in a later (1.n.x
) patch release.See releases for an exact changelog.
v1.x - (nightly)
Under development.
Variable
Extracted the set-env <NAME> <VALUE>
completion as generic action.
Completions use the local environment so there are some limitations.
Spec
In specs it can be used as attached (default) or positional completion.
# yaml-language-server: $schema=https://carapace.sh/schemas/command.json
name: variable
completion:
positional:
- ["$carapace.env.NameValues"] # attached (NAME[=VALUE])
- ["$carapace.env.NameValues(true) ||| $shift(1)"] # positional (NAME)
- ["$carapace.env.NameValues(true) ||| $shift(1)"] # positional (VALUE)
- Use
shift
to skip previous arguments during positional completion.- Renamed
env.KnownEnvironmentVariables
toenv.Names
.- Renamed
env.EnvironmentVariableValues
toenv.Values
.
v1.1 - Nightly Bats
Nightly batch release straight from master.
GoReleaser
Updated goreleaser config to adopt defaults across all projects.
This changes the release artifact names slightly and might break some scripts.
Nightly
Added carapace-sh/nightly.
Nightly builds use the same goreleaser config, but in a different environment.
Selfupdate
With carapace --selfupdate
specific nightly or stable releases can be installed.
Executable is installed to the GOBIN directory, essentially shadowing any system installation.
export PATH="$HOME/.local/bin:$HOME/go/bin:$PATH"
# │ │ └system installation (e.g. /usr/bin/carapace)
# │ └selfupdate/go based installation ($GOBIN)
# └user binaries
Requirements
Homebrew
Now installable from homebrew-core.
brew install carapace
Nospace
Added CARAPACE_NOSPACE
environment variable to control space suffix behaviour.
Tooltip
Added CARAPACE_TOOLTIP
environment variable to enable tooltip style.
Only affects Powershell.
v1.0 - Moving Day
Off to a shiny new home.
Organization
Moved repositories to carapace-sh.
import (
- "github.com/rsteube/carapace"
+ "github.com/carapace-sh/carapace"
)
Diff
Added --diff command[/bridge] ...args
to track changes.
--- a/zsh/carapace --macro bridge.Zsh git log -
+++ b/carapace/carapace git export git log -
- -- (start file arguments)
--abbrev (Show the shortest prefix that is at least <n> hexdigits long that uniquely refers)
--abbrev-commit (Instead of showing the full 40-byte hexadecimal commit object name, show a prefix that names the object uniquely.)
--after (Show commits more recent than a specific date.)
--all (Pretend as if all the refs in refs/, along with HEAD, are listed on the command line as <commit>.)
--all-match (Limit the commits output to ones that match all given --grep, instead of ones that match at least one.)
+ --alternate-refs (Pretend as if all objects mentioned as ref tips of alternate repositories were listed on the command line.)
--ancestry-path (When given a range of commits to display, only display commits that exist directly on the ancestry chain.)
--anchored (Generate a diff using the "anchored diff" algorithm.)
--author (Limit the commits output to ones with author/committer header lines that match the specified pattern)
--author-date-order (Show no parents before all of its children are shown, but otherwise show commits in the author timestamp order.)
+ --basic-regexp (Consider the limiting patterns to be basic regular expressions; this is the default.)
--before (Show commits older than a specific date.)
--binary (In addition to --full-index, output a binary diff that can be applied with git-apply. Implies --patch.)
--bisect (Pretend as if the bad bisection ref refs/bisect/bad was listed and as if it was followed by --not and the good bisection refs refs/bisect/good-* on the command line.)
--boundary (Output excluded boundary commits. Boundary commits are prefixed with -.)
--branches (Pretend as if all the refs in refs/heads are listed on the command line as <commit>.)
--break-rewrites (Break complete rewrite changes into pairs of delete and create.)
- --cc (combined diff format for merge commits)
--check (Warn if changes introduce conflict markers or whitespace errors.)
--cherry (A synonym for --right-only --cherry-mark --no-merges)
The diff simply compares inserted values between completions provided by a bridge with those provided by carapace. It is just an indicator as there can be good reasons why these vary.
Clear Cache
Added --clear-cache
to remove cached completions.
Positional Arguments
Positional arguments can now be accessed as script parameters in exec macros .
# yaml-language-server: $schema=https://carapace.sh/schemas/command.json
name: positional
flags:
-b, --bool: bool flag
completion:
positionalany: ["$(echo \"$@\tall arguments\")", "$(echo \"$1\tfirst argument\")"]
v0.30 - Wiretap
Tapping into other shells for additional completions.
Implicit Bridges
With CARAPACE_BRIDGES
default bridges can be enabled for commands not provided by carapace.
set-env CARAPACE_BRIDGES 'zsh,fish,bash,inshellisense'
Order defines the precedence (e.g. if zsh has a
git
completer it will be used instead of the one in fish).
Explicit Bridges
Additionally to user specs ~/.config/carapace/bridges.yaml
provides a simpler configuration of bridges.
gh: cobra
opentofu: complete
tsh: kingpin
bridges.yaml
has a higher precedence than Implicit Bridges but lower than internal completers and specs. So disable an internal completer with Excludes if you want to replace it with a bridge.
Currently available bridges:
- argcomplete
- bash
- carapace
- clap
- click
- cobra
- complete
- fish
- inshellisense
- kingpin
- powershell
- urfavecli
- yargs
- zsh
Bridging frameworks should be preferred to shells (e.g. zsh) as these generally work better and have less overhead.
Excludes
With CARAPACE_EXCLUDES
internal completers can be excluded.
Explicit Parsing Mode
So far flag parsing was implicitly disabled for bridge macros in specs. From now on this needs to be done explicitly.
# yaml-language-server: $schema=https://carapace.sh/schemas/command.json
name: az
description: Azure Command-Line Interface
parsing: disabled
completion:
positionalany: ["$carapace.bridge.Argcomplete([az])"]
interspersed
- mixed flags and positional arguments (default)non-interspersed
- flag parsing stopped after first positional argumentdisabled
- flag parsing disabled
v0.29 - Art Exchange
One step further to exchange completions between commands.
carapace.sh
Registered the domain carapace.sh.
Root Command
Restructured the carapace
root command which was (and still is) a bit of a mess.
Some flags (subcommands) were renamed/changed for consistency.
--list=json
->--list --format json
--macros
->--macro
--scrape [spec]
->--codegen [spec]
Specs
The JSON Schema is now hosted at https://carapace.sh/schemas/command.json.
# yaml-language-server: $schema=https://carapace.sh/schemas/command.json
~/.config/carapace/schema.json
is now deprecated and can be removed.
Macro
$_
prefix in specs is now deprecated and needs to be replaced with $carapace.
If a macro name contains .
the first segment is handled as command that will be invoked.
$carapace.color.HexColors
# invokes `carapace _carapace macro color.HexColors ""`
$carapace-spec.Spec(example.yaml)
# invokes `carapace-spec _carapace macro "Spec(example.yaml)" ""`
This behaviour will change slightly in the future to support custom macros.
With the --in-place
flag of sed
the specs can be updated directly.
sed 's/$_/$carapace./g' ~/.config/carapace/specs/*.yaml
Inshellisense
Added a bridge for inshellisense (which uses fig under the hood).
Nushell
Support for colored completion (requires nushell#11442).
Xonsh
Support for colored completion.
v0.28 - Greenwashing
This one is messing with your environment.
Variable
Complex environment variable completion is provided with get-env
, set-env
and unset-env
.
In elvish
the completion is simply overridden.
For other shells custom functions are added.
Setting
CARAPACE_ENV=0
before sourcingcarapace _carapace
disables this behaviour.
Custom variables
Custom variables can be defined in ~/.config/carapace/variables/{group}.yaml
variables:
CUSTOM_EXAMPLE: example environment variable
CUSTOM_MACRO: macro example
HTTPS_PROXY: override existing variable
completion:
variable:
CUSTOM_EXAMPLE: ["0\tdisabled\tred", "1\tenabled\tgreen"]
CUSTOM_MACRO: ["$_tools.gh.Labels({owner: carapace-sh, name: carapace}) ||| $uniquelist(,)"]
HTTPS_PROXY: ["https://localhost:8443\tdevelopment", "https://proxy.company:443\tproduction"]
It is also possible to define conditions.
condition: ["$Parent([.git])"]
variables:
CUSTOM_CONDITION: condition example
completion:
variable:
CUSTOM_CONDITION: ["within", "git", "repo"]
Specific modifiers
Specs now support specific modifiers using |||
as delimiter.
name: modifier
positionalany: ["$files ||| $chdir(/tmp)"]
Git
Full support for relative refs.
v0.27 - Hulk BASH!
Contains strong changes to the bash integration.
Redirects
Support for redirects. bash passes these to the completion function, so crazy stuff like this is possible:
example action >/tmp/stdout.txt embeddedPositional1 --styles 2>/tmp/stderr.txt red 'embeddedPositional2 with space'
To make this work carapace-shlex is now used to parse COMP_LINE
when invoked from a bash completion function.
Wordbreaks
Better support for bash COMP_WORDBREAKS
using carapace-shlex.
This was originally intended to make multipart completion easier (e.g. colon separated list),
but actually makes it very complicated and error-prone.
Case insensitive matching
Added (limited) case insensitive matching.
Set environment variable CARAPACE_MATCH
to CASE_INSENSITIVE
or 1
to activate it.
You might also need to configure your shell, e.g. in elvish:
set-env CARAPACE_MATCH CASE_INSENSITIVE
set edit:completion:matcher[argument] = {|seed| edit:match-prefix $seed &ignore-case=$true }
v0.26 - Overly Attached Argument
Argument
Added support for various attached versions of passing non-optional flag arguments:
--longhand=arg
-l=arg
-larg
-abclarg
Lexer
Added a simple lexer for complex commands passed as single argument:
Nushell
Used the lexer to patch arguments as these are currently passed mostly unprocessed to the completion function. This is a workaround and has some edge cases but should overall improve the Nushell integration.
v0.25 - Window Shopping
Windows
Support for volume prefix in path completion.
v0.24 - Spring Cleaning
carapace-bridge
Moved bridge actions to carapace-bridge.
The shell bridges now use custom configs at ${UserConfigDir}/carapace/bridge
(e.g. ~/.config/carapace/bridge/fish/config.fish
instead of ~/.config/fish/config.fish
).
removed flags
Removed --bridge
and --spec
flags as user specs are preferred and there are carapace-bridge and carapace-spec as well.
v0.23 - First Amendment
Bridge Actions (BREAKING CHANGE)
Bridge actions now take multiple arguments.
Analogue to Alias this enables embedding of subcommands in macros.
Specs need to be updated though by adding []
brackets to the bridge macro arguments:
completion:
# positionalany: ["$_bridge.CarapaceBin(git)"] # OLD
positionalany: ["$_bridge.CarapaceBin([git])"] # NEW
Overlay
Overlays are essentially Spec files placed in ${UserConfigDir}/carapace/overlays
that provide additional completions.
These are merged with the existing completion and provide a workaround for issues that have yet to be fixed in upstream.
Overlays implicitly set
CARAPACE_LENIENT
to allow unknown flags.
Flag
# ~/.config/carapace/overlays/doctl.yaml
name: doctl
persistentflags:
--output=: Desired output format [text|json]
completion:
flag:
output: [text, json]
commands:
- name: compute
description: Display commands that manage infrastructure
commands:
- name: region
description: Display commands to list datacenter regions
commands:
- name: list
description: List datacenter regions
flags:
--format=: Columns for output in a comma-separated list
completion:
flag:
format: ["$uniquelist(,)", Slug, Name, Available]
Windows
Using zip as archive for windows releases for winget compability.
v0.22 - Running Man
Specs now support a run
field enabling cross shell aliases and simple nested custom commands.
Run
run
can either contain an alias ([command, arg1, arg2]
) which bridges completion or a shell macro ($(echo example)
) with custom completions / flag parsing.
name: runnable
description: runnable spec
commands:
- name: sub1
description: alias
run: "[git, log]"
- name: sub2
description: shell
run: "$(git show $1)"
completion:
positional:
- - "$(git branch --format '%(refname:short)\t%(subject)\tblue')"
- "$(git tag --format '%(refname:short)\t\tyellow')"
- name: sub3
description: shell with flags
run: "$(git log --author \"${C_FLAG_AUTHOR}\" $1)"
flags:
-a, --author=: limit to author
completion:
flag:
author: ["$(git shortlog --summary --email HEAD | sed -e 's/^.*\t//' -e 's/ </\t</')"]
positional:
- - "$(git branch --format '%(refname:short)\t%(subject)\tblue')"
- "$(git tag --format '%(refname:short)\t\tyellow')"
PATH
carapace _carapace
now prepends ${UserConfigDir}/carapace/bin
to PATH
unless it already exists.
In
nushell
this needs to be done manually (see output ofcarapace _carapace nushell
):let-env PATH = ($env.PATH | prepend "/home/rsteube/.config/carapace/bin")
Shim
It also creates Shims in ${UserConfigDir}/carapace/bin
to execute the specs.
For unix systems this is a simple shell script, but for windows an embedded binary is used.
#!/bin/sh
carapace --run "/home/rsteube/.config/carapace/specs/runnable.yaml" "$@"
The
${UserConfigDir}/carapace/bin
directory is fully managed by carapace and unrelated files within it are removed.
Nargs
Initial support for flags consuming multiple arguments as seen in argparse and various nix
commands.
XDG
XDG base directories for XDG_CACHE_HOME
and XDG_CONFIG_HOME
are now supported.
v0.21 - Heart Transplant
Replaced command traversal with a full rewrite. This provides more fine-grained control and improved logging. It is a complex core component though and while tests are looking good so far some edge cases are likely to fail.
Logging
Improved logging output (export CARAPACE_LOG=1
):
// /tmp/carapace/carapace.log
2023/01/29 11:46:28.310133 elvish []string{"/home/rsteube/go/bin/carapace", "_carapace", "elvish", "git", "-C", "../carapace-bin/", "log", "--author", ""}
2023/01/29 11:46:28.310165 elvish traverse called for "git" with args []string{"-C", "../carapace-bin/", "log", "--author", ""}
2023/01/29 11:46:28.310167 elvish executing PreRun for "git" with args []string{"-C", "../carapace-bin/", "log", "--author", ""}
2023/01/29 11:46:28.310185 elvish arg "-C" is a flag
2023/01/29 11:46:28.310207 elvish arg "../carapace-bin/" is a flag argument
2023/01/29 11:46:28.310210 elvish arg "log" is a subcommand
2023/01/29 11:46:28.310211 elvish parsing flags for "git" with args []string{"-C", "../carapace-bin/"}
2023/01/29 11:46:28.310215 elvish traverse called for "log" with args []string{"--author", ""}
2023/01/29 11:46:28.310247 elvish arg "--author" is a flag
2023/01/29 11:46:28.310259 elvish removing arg "--author" since it is a flag missing its argument
2023/01/29 11:46:28.310260 elvish parsing flags for "log" with args []string{}
2023/01/29 11:46:28.310262 elvish completing flag argument of "author" for arg ""
Yargs
Added bridge for yargs:
name: ng
description: CLI tool for Angular
completion:
positionalany: ["$_bridge.Yargs(ng)"]
v0.20 - Blinkers
Export
Contains breaking changes on the export format.
Since there is no backward compability any embedded external carapace based completion must be >= v0.31.0
.
Lenient
When environment variable CARAPACE_LENIENT
is set (e.g. export CARAPACE_LENIENT=1
) unknown flags are ignored.
Completers are supposed to be aware of all existing flags but can out of date or not yet working correctly.
This can be used to suppress the errors until issues are fixed.
v0.19 - Group Therapy
Error messages
Multiple error message are now supported.
In elvish
and zsh
these are shown separate from the completion values.
Usage message
Added Usage message which defaults to flag description / command usage.
This is only supported in elvish
and zsh
.
Since notifications are persistent in elvish
it is only shown when there are no values to complete.
Tags
Completion values can now be tagged. Based on this they are grouped in zsh
.
Command groups
Subcommands can now be grouped and will be highlighted in different colors.
Group names
Group names can be shown in zsh
with the following zstyle
.
zstyle ':completion:*' format $'\e[2;37mCompleting %d\e[m'
Group ordering
Order of the groups can be configured in zsh
with the following zstyle
.
zstyle ':completion:*:git:*' group-order 'main commands' 'alias commands' 'external commands'
_describe
_describe
is now used in zsh
which enables the grouping of tags.
With this aliased commands and flags are now also arranged side by side.
v0.18 - Spec Galore
Generate
Specs can now be generated from clap based commands with carapace-spec-clap.
Scrape
For advanced completion these can further be converted to Go code with carapace --scrape [spec]
.
Json Schema
A JSON Schema is now written to ${UserConfigDir}/carapace/schema.json
.
It can be used by adding the following header to a user spec:
# yaml-language-server: $schema=../schema.json
Windows
$(shell command)
is now executed in Powershell on windows.
v0.17 - Spec-tacular Citizen
Specs are now first-class citizens in carapace. They are integrated on root level and should behave similar to the existing completers (carapace [spec.name] <TAB>
).
List
Completers based on Specs are highlighted in shells that support colors (details: carapace --list=json
):
Bridge
Using Specs for bridging is from now on the recommended approach.
As these are auto-loaded with carapace _carapace
and provide support for embedded completion like sudo [spec.name] <TAB>
.
Existing completers with the same name will also be overridden.
E.g. kubectl
(which is currently a bit outdated) can be configured to use the official completer:
# ${UserConfigDir}/carapace/specs/kubectl.yaml
name: kubectl
description: kubectl controls the Kubernetes cluster manager
completion:
positionalany: ["$_bridge.Cobra(kubectl)"]
Note that bridging adds a slight overhead (~7-9ms?) for each invocation and is limited to supported frameworks / commands.
Plugin
Taking this one step further plugin completion like cargo-[plugin]
, gh-[plugin]
, git-[plugin]
can now also be defined by Specs.
E.g. the gh-repo-collab extension for github-cli:
# ${UserConfigDir}/carapace/specs/gh-repo-collab.yaml
name: gh-repo-collab
description: manage repository collaborators
commands:
-
name: list
completion:
positional:
- ["$_tools.gh.OwnerRepositories"]
-
name: add
flags:
--permission=: set permission
completion:
flag:
permission: ["pull", "triage", "push", "maintain", "admin\t\tred"]
positional:
- ["$_tools.gh.OwnerRepositories"]
- ["$_tools.gh.Users"]
-
name: remove
completion:
positional:
- ["$_tools.gh.OwnerRepositories"]
- ["$_tools.gh.Users"]
Nushell
With https://github.com/nushell/nushell/pull/6652 (upcoming v0.70.0) the nushell integration is now working on positional arguments.
The recommended configuration is equivalent to the example configuration in config.nu
:
let carapace_completer = {|spans|
carapace $spans.0 nushell $spans | from json
}
let-env config = {
external_completer: $carapace_completer
}
Be sure to remove the
module completions
example so that it won't override the carapace completion
v0.16 - Pandoras Box
Switched to a custom pflag fork with adaptions for non-posix variants like long shorthands (e.g. -shorthand
).
So far this has been done by patching
os.Args
which was rather hacky. Modifications to the flag parser are quite complex though, so there might be some issues.
see #1293
Spec files support non-posix flags now as well:
flags:
-np: non-posix shorthand
-np, -nonposix: non-posix shorthand and longhand
-np, --nonposix: non-posix shorthand mixed with posix longhand
v0.15 - Porcelain Shop
ZSH (this might break some stuff)
Added support for homedir (~
) and static named directories.
These are not expanded by zsh for the completion function are thus now handled by carapace.
Quoting of special characters is now also done in carapace instead of compadd to skip ~
at appropriate times.
Edge cases where this doesn't work and some initial bugs regarding special characters not yet being handled correctly are expected.
see #1277
v0.14 - In A Nutshell
Nushell
https://github.com/nushell/nushell/pull/6295 adds support for external completers to nushell.
For this config.nu
must be updated manually according to the snippet output of carapace
.
Here's an example with carapace
as default completer and a couple custom completers:
let external_completer = {|spans|
{
$spans.0: { carapace $spans.0 nushell $spans | from json } # default
example: { example _carapace nushell $spans | from json }
pkill: { carapace --spec '/home/rsteube/.config/carapace/specs/pkill.yaml' nushell $spans | from json }
vault: { carapace --bridge vault/posener nushell $spans | from json }
} | get $spans.0 | each {|it| do $it}
}
let-env config = {
external_completer: $external_completer
}
v0.13 - Furious
fury.io
DEB
and RPM
packages are now published to fury.io (Install)
v0.12 - Preinfusion
Preinvoke
Generic alteration of completion before execution which enables features like directory change in git -C <DIR>
:
Spec
Experimental support for simple completions using yaml
spec files:
name: example
description:
flags:
--dynamic=: dynamic value
-o, --optarg?: optarg flag
-s, --styled=: styled values
completion:
flag:
dynamic: ["$(git branch --all | cut -c 3- | sed 's/$/\t\tblue/')", "static value"]
optarg: ["first", "second", "third"]
styled:
- "blue\tblue\tblue"
- "cyan\tcyan\tcyan"
positional:
- ["pos1-a", "pos1-b", "pos1-c"]
- ["$_files"]
Spec Autoloading
Specs placed in ${UserConfigDir}/carapace/specs/
(UserConfigDir) are now registered with carapace _carapace
.
File name must be the command to be completed and match ^[0-9a-zA-Z_\-.]+\.yaml$
(sanity check to avoid breakage in scripts).
Custom Macros
Exposed actions as custom macros (list with carapace --macros
).
Removed the _
prefix from core macros to avoid clashes (e.g. $files
, $directories
).
Macro Arguments
Arguments are parsed as yaml
($macro(yaml)
- e.g.: $_tools.gh.Users({users: true})
).
Brackets are optional when no argument is passed ($files
instead of $files()
).
Variable Substitution
Variables are replaced using drone/envsubst for contextual completion:
name: myzip
completion:
positional:
- ["$files([.zip])"] # ${C_ARG0}
positionalany: ["$_fs.ZipFileContents(${C_ARG0})"] # ${C_ARG1},${C_ARG2},...
Flags are only added to env when their value changed (thus: ${C_FLAG_FLAGNAME:-default}
):
name: myrefs
flags:
--tags: list tags # ${C_FLAG_TAGS}
--localbranches: list local branches # ${C_FLAG_LOCALBRANCHES}
--commits=: amount of commits # ${C_FLAG_COMMITS}
completion:
positional:
- ["$_tools.git.Refs({tags: ${C_FLAG_TAGS:-false}, localbranches: ${C_FLAG_LOCALBRANCHES:-false}, commits: ${C_FLAG_COMMITS:-0}})"] # refs based on flag values with defaults
- ["$_tools.git.Refs"] # default refs
- ["$(env)"] # env
v0.11 - Puking Rainbows
This release adds color support for zsh
and elvish
and thus raises elvish
minimum version to v0.18.0
.
LS_COLORS
LS_COLORS
should now be working correctly - e.g with vivid in elvish
:
set E:LS_COLORS = (vivid generate dracula)
Style Config
Styles can now be configured with carapace --style key=value
(an empty value restores the default).
Powershell Style
Added color support for powershell.