https://github.com/nbari/slick
async ZSH prompt
https://github.com/nbari/slick
async git prompt shell terminal zle zsh
Last synced: 6 months ago
JSON representation
async ZSH prompt
- Host: GitHub
- URL: https://github.com/nbari/slick
- Owner: nbari
- License: bsd-3-clause
- Created: 2018-10-17T21:16:49.000Z (about 7 years ago)
- Default Branch: main
- Last Pushed: 2025-03-20T14:17:28.000Z (8 months ago)
- Last Synced: 2025-03-31T08:44:10.779Z (8 months ago)
- Topics: async, git, prompt, shell, terminal, zle, zsh
- Language: Rust
- Homepage:
- Size: 1.93 MB
- Stars: 22
- Watchers: 1
- Forks: 1
- Open Issues: 2
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- Contributing: CONTRIBUTING.md
- Funding: .github/FUNDING.yml
- License: LICENSE
Awesome Lists containing this project
- awesome-zsh-plugins - slick - Inspired by the [pure](https://github.com/sindresorhus/pure), [purs](https://github.com/xcambar/purs) and [zsh-efgit-prompt](https://github.com/ericfreese/zsh-efgit-prompt). Requires `cargo` for installation. (Themes / ZSH on Windows)
- fucking-awesome-zsh-plugins - slick - Inspired by the <b><code> 13881⭐</code></b> <b><code> 997🍴</code></b> [pure](https://github.com/sindresorhus/pure)), <b><code> 260⭐</code></b> <b><code> 34🍴</code></b> [purs](https://github.com/xcambar/purs)) and <b><code> 7⭐</code></b> <b><code> 2🍴</code></b> [zsh-efgit-prompt](https://github.com/ericfreese/zsh-efgit-prompt)). Requires `cargo` for installation. (Themes / ZSH on Windows)
README
# slick - async ZSH prompt
[](https://crates.io/crates/slick)
[](https://github.com/nbari/slick/actions/workflows/build.yml)
[](https://www.youtube.com/watch?v=ZFQ2bykpm6s)
## How to use
Install:
cargo install slick
To install cargo:
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
If in Linux you may need install this:
apt install -y build-essential libssl-dev pkg-config
check your PATH `$HOME/.cargo/bin/slick`:w
Then add this to your `.zshrc`:
```sh
zle -N zle-keymap-select
zle -N zle-line-init
zmodload zsh/datetime
autoload -Uz add-zsh-hook
add-zsh-hook precmd slick_prompt_precmd
add-zsh-hook preexec slick_prompt_preexec
typeset -g slick_prompt_data
typeset -g slick_prompt_timestamp
SLICK_PATH=$HOME/.cargo/bin/slick
function slick_prompt_refresh {
local exit_status=$?
read -r -u $1 slick_prompt_data
PROMPT=$($SLICK_PATH prompt -k "$KEYMAP" -r $exit_status -d ${slick_prompt_data:-""} -t ${slick_prompt_timestamp:-$EPOCHSECONDS})
unset slick_prompt_timestamp
zle reset-prompt
# Remove the handler and close the fd
zle -F $1
exec {1}<&-
}
function zle-line-init zle-keymap-select {
PROMPT=$($SLICK_PATH prompt -k "$KEYMAP" -d ${slick_prompt_data:-""})
zle && zle reset-prompt
}
function slick_prompt_precmd() {
slick_prompt_data=""
local fd
exec {fd}< <($SLICK_PATH precmd)
zle -F $fd slick_prompt_refresh
}
function slick_prompt_preexec() {
slick_prompt_timestamp=$EPOCHSECONDS
# Set cursor style
# 0 ⇒ blinking block.
# 1 ⇒ blinking block (default).
# 2 ⇒ steady block.
# 3 ⇒ blinking underline.
# 4 ⇒ steady underline.
# 5 ⇒ blinking bar, xterm.
# 6 ⇒ steady bar, xterm.
echo -ne "\e[4 q";
}
```
## customizations
Set this environment variables to change color/symbols, for example:
export SLICK_PROMPT_CMD_MAX_EXEC_TIME=3
export SLICK_PROMPT_ERROR_COLOR=88
export SLICK_PROMPT_GIT_ACTION_COLOR=1
export SLICK_PROMPT_GIT_BRANCH_COLOR=202
export SLICK_PROMPT_GIT_FETCH=0
export SLICK_PROMPT_GIT_MASTER_BRANCH_COLOR=white
export SLICK_PROMPT_GIT_REMOTE_AHEAD=""
export SLICK_PROMPT_GIT_REMOTE_BEHIND=""
export SLICK_PROMPT_GIT_REMOTE_COLOR=40
export SLICK_PROMPT_GIT_STAGED_COLOR=1
export SLICK_PROMPT_GIT_STATUS_COLOR=cyan
export SLICK_PROMPT_GIT_UNAME_COLOR=8
export SLICK_PROMPT_PATH_COLOR=blue
export SLICK_PROMPT_ROOT_COLOR="red"
export SLICK_PROMPT_ROOT_SYMBOL="#"
export SLICK_PROMPT_SSH_COLOR=2
export SLICK_PROMPT_SYMBOL="❯"
export SLICK_PROMPT_SYMBOL_COLOR=magenta
export SLICK_PROMPT_TIME_ELAPSED_COLOR=1
export SLICK_PROMPT_VICMD_COLOR="yellow"
export SLICK_PROMPT_VICMD_SYMBOL="❮"
export SLICK_PROMPT_NON_BREAKING_SPACE=" "
`SLICK_PROMPT_GIT_FETCH=0` prevents doing a `git fetch`
To prevent displaying the git user.name:
export SLICK_PROMPT_NO_GIT_UNAME=1
___
Inspired by:
* [pure](https://github.com/sindresorhus/pure)
* [purs](https://github.com/xcambar/purs)
* [zsh-efgit-prompt](https://github.com/ericfreese/zsh-efgit-prompt)