terminal tool colours
This commit is contained in:
@@ -29,13 +29,18 @@
|
||||
line-numbers = true
|
||||
paging = always
|
||||
pager = less --mouse -R -+X -+F
|
||||
syntax-theme = dots
|
||||
file-decoration-style = none
|
||||
file-style = "#2CB494" bold
|
||||
hunk-header-decoration-style = none
|
||||
line-numbers-left-style = "#2CB494"
|
||||
line-numbers-right-style = "#2CB494"
|
||||
line-numbers-left-style = "#808080"
|
||||
line-numbers-right-style = "#808080"
|
||||
line-numbers-minus-style = "#F40404"
|
||||
line-numbers-plus-style = "#2CB494"
|
||||
plus-style = syntax "#0c2a24"
|
||||
plus-emph-style = syntax "#164a3c"
|
||||
minus-style = syntax "#2a0a0a"
|
||||
minus-emph-style = syntax "#3a1a1a"
|
||||
|
||||
[merge]
|
||||
conflictstyle = zdiff3
|
||||
@@ -44,31 +49,35 @@
|
||||
ui = auto
|
||||
|
||||
[color "status"]
|
||||
added = 42
|
||||
changed = 226
|
||||
untracked = 196
|
||||
branch = 45
|
||||
added = "#2CB494"
|
||||
changed = "#F88C14"
|
||||
untracked = "#808080" italic
|
||||
branch = "#2CB494"
|
||||
header = "#CCE0D0"
|
||||
[color "diff"]
|
||||
meta = 91
|
||||
frag = 45
|
||||
old = 196
|
||||
new = 42
|
||||
context = 252
|
||||
meta = "#88409C"
|
||||
frag = "#4068D4"
|
||||
old = "#F40404"
|
||||
new = "#2CB494"
|
||||
context = "#808080"
|
||||
commit = "#F88C14"
|
||||
[color "branch"]
|
||||
current = 45
|
||||
local = 252
|
||||
remote = 27
|
||||
current = "#2CB494" bold
|
||||
local = "#CCE0D0"
|
||||
remote = "#4068D4"
|
||||
upstream = "#7290B8"
|
||||
[color "decorate"]
|
||||
branch = 45
|
||||
remoteBranch = 27
|
||||
tag = 226
|
||||
stash = 201
|
||||
branch = "#2CB494"
|
||||
remoteBranch = "#4068D4"
|
||||
tag = "#F88C14"
|
||||
stash = "#88409C"
|
||||
HEAD = "#F88C14" bold
|
||||
|
||||
[alias]
|
||||
l = log --pretty=format:"%C(yellow)%h\\ %ad%Cred%d\\ %Creset%s%Cblue\\ [%cn]" --decorate --date=short
|
||||
ls = log --pretty=format:"%C(yellow)%h%Cred%d\\ %Creset%s%Cblue\\ [%cn]" --decorate
|
||||
ll = log --pretty=format:"%C(yellow)%h%Cred%d\\ %Creset%s%Cblue\\ [%cn]" --decorate --numstat
|
||||
ld = log --pretty=format:"%C(yellow)%h\\ %ad%Cred%d\\ %Creset%s%Cblue\\ [%cn]" --decorate --date=relative
|
||||
l = log --pretty=format:"%C(#F88C14)%h\\ %ad%C(#2CB494)%d\\ %Creset%s%C(#808080)\\ [%cn]" --decorate --date=short
|
||||
ls = log --pretty=format:"%C(#F88C14)%h%C(#2CB494)%d\\ %Creset%s%C(#808080)\\ [%cn]" --decorate
|
||||
ll = log --pretty=format:"%C(#F88C14)%h%C(#2CB494)%d\\ %Creset%s%C(#808080)\\ [%cn]" --decorate --numstat
|
||||
ld = log --pretty=format:"%C(#F88C14)%h\\ %ad%C(#2CB494)%d\\ %Creset%s%C(#808080)\\ [%cn]" --decorate --date=relative
|
||||
le = log --oneline --decorate
|
||||
lg = log --graph --decorate --oneline
|
||||
d = diff
|
||||
|
||||
@@ -12,6 +12,22 @@ export VISUAL=vim
|
||||
export PAGER=less
|
||||
export BAT_THEME=dots
|
||||
|
||||
# Man pages via bat for syntax highlighting
|
||||
export MANPAGER="sh -c 'col -bx | sed -e \"s/\x1b\[[0-9;]*m//g\" | bat -l man -p'"
|
||||
|
||||
# Less colours for bold/underline (man pages fallback)
|
||||
export LESS="-R --mouse"
|
||||
export LESS_TERMCAP_mb=$'\e[1;38;2;248;140;20m'
|
||||
export LESS_TERMCAP_md=$'\e[1;38;2;64;104;212m'
|
||||
export LESS_TERMCAP_me=$'\e[0m'
|
||||
export LESS_TERMCAP_so=$'\e[38;2;26;26;26;48;2;44;180;148m'
|
||||
export LESS_TERMCAP_se=$'\e[0m'
|
||||
export LESS_TERMCAP_us=$'\e[4;38;2;44;180;148m'
|
||||
export LESS_TERMCAP_ue=$'\e[0m'
|
||||
|
||||
# Use bat as a colourised pager for less
|
||||
export LESSOPEN="| bat --color=always --style=plain %s 2>/dev/null"
|
||||
|
||||
# Homebrew
|
||||
export HOMEBREW_NO_ANALYTICS=1
|
||||
export HOMEBREW_NO_ENV_HINTS=1
|
||||
|
||||
@@ -65,8 +65,8 @@ set -g status-style "fg=#728cb8,bg=default"
|
||||
set -g status-left "#{?client_prefix,#[fg=#2cb494]● ,#[fg=#3c3c3c]● }"
|
||||
set -g status-right "#(~/.tmux/battery.sh) #[fg=#808080,bg=default]%a %d %b #[fg=#2cb494,bg=#1a1a1a] %H:%M #[default] "
|
||||
set -g status-right-length 60
|
||||
set -g window-status-format " #I #W "
|
||||
set -g window-status-current-format " #[fg=#085040]#I#[fg=#0a0a0a] #W "
|
||||
set -g window-status-format "#{?window_last_flag, #[fg=#1a7a64]#I#[fg=default] #W , #I #W }"
|
||||
set -g window-status-current-format " #[fg=#085040]#I#[fg=#0a0a0a] #W "
|
||||
set -g window-status-separator " "
|
||||
set -g window-status-style "fg=#808080,bg=#1a1a1a"
|
||||
set -g window-status-current-style "fg=#0a0a0a,bg=#2cb494,bold"
|
||||
|
||||
@@ -26,8 +26,16 @@ if [[ -n "$full" ]]; then
|
||||
echo "#[fg=#808080] AC#[default]"
|
||||
elif [[ -n "$charging" ]]; then
|
||||
echo "#[fg=#808080] ${pct}%#[default]"
|
||||
elif (( pct <= 10 )); then
|
||||
echo "#[fg=#F40404,bold] ${pct}%#[default]"
|
||||
elif (( pct <= 20 )); then
|
||||
echo "#[fg=#f88c14,bold] ${pct}%#[default]"
|
||||
echo "#[fg=#f88c14,bold] ${pct}%#[default]"
|
||||
elif (( pct <= 40 )); then
|
||||
echo "#[fg=#808080] ${pct}%#[default]"
|
||||
elif (( pct <= 60 )); then
|
||||
echo "#[fg=#808080] ${pct}%#[default]"
|
||||
elif (( pct <= 80 )); then
|
||||
echo "#[fg=#808080] ${pct}%#[default]"
|
||||
else
|
||||
echo "#[fg=#808080] ${pct}%#[default]"
|
||||
fi
|
||||
|
||||
@@ -73,9 +73,16 @@ _dots_abbrev_path() {
|
||||
}
|
||||
|
||||
_dots_session() {
|
||||
[[ -n "$CODESPACE_NAME" ]] && { print -r -- "$CODESPACE_NAME"; return }
|
||||
[[ -n "$SSH_CONNECTION" || -n "$SSH_CLIENT" || -n "$SSH_TTY" ]] && { print -r -- "%n@%m"; return }
|
||||
[[ -f /.dockerenv ]] && { print -r -- "${DEVCONTAINER_ID:-$(</etc/hostname)}"; return }
|
||||
local name=""
|
||||
if [[ -n "$CODESPACE_NAME" ]]; then
|
||||
# Strip final random suffix (e.g. "redesigned-couscous-jp5676rpq5h5wrj" -> "redesigned-couscous")
|
||||
name="${CODESPACE_NAME%-*}"
|
||||
elif [[ -n "$SSH_CONNECTION" || -n "$SSH_CLIENT" || -n "$SSH_TTY" ]]; then
|
||||
name="%n@%m"
|
||||
elif [[ -f /.dockerenv ]]; then
|
||||
name="${DEVCONTAINER_ID:-$(</etc/hostname)}"
|
||||
fi
|
||||
[[ -n "$name" ]] && print -r -- "$name"
|
||||
}
|
||||
|
||||
_dots_git_info_sync() {
|
||||
@@ -260,7 +267,7 @@ _dots_precmd() {
|
||||
(( e )) && rp_parts+=("${_dots_pc[red]}[${e}]${_dots_pc[reset]}")
|
||||
|
||||
local session="$(_dots_session)"
|
||||
[[ -n "$session" ]] && rp_parts+=("${_dots_pc[orange]}[${session}]${_dots_pc[reset]}")
|
||||
[[ -n "$session" ]] && rp_parts+=("${_dots_pc[dark_bg]}${_dots_pc[dark]}[${_dots_pc[orange]}${session}${_dots_pc[reset]}${_dots_pc[dark_bg]}${_dots_pc[dark]}]${_dots_pc[reset]}")
|
||||
|
||||
RPROMPT="${(j: :)rp_parts}"
|
||||
|
||||
|
||||
@@ -26,11 +26,48 @@ _dots_load_keybindings() {
|
||||
zle -N _dots_git_branch_widget
|
||||
bindkey '^B' _dots_git_branch_widget
|
||||
|
||||
# Ctrl+E: edit file
|
||||
# Ctrl+E: edit file (frecency + git status boost)
|
||||
_dots_edit_widget() {
|
||||
local file
|
||||
file="$(rg --files --hidden --glob '!.git' 2>/dev/null \
|
||||
| fzf --preview 'bat --color=always --style=numbers --line-range=:100 {} || head -100 {}')" || { zle reset-prompt; return; }
|
||||
local file edit_log="${XDG_DATA_HOME:-$HOME/.local/share}/edit/log"
|
||||
file="$({
|
||||
awk -v logfile="$edit_log" '
|
||||
BEGIN {
|
||||
while ((getline line < logfile) > 0) {
|
||||
idx = index(line, "\t")
|
||||
if (idx) { f = substr(line, idx+1); cnt[f]++; ts[f] = substr(line, 1, idx-1)+0 }
|
||||
}
|
||||
close(logfile)
|
||||
cmd = "git status --porcelain 2>/dev/null"
|
||||
while ((cmd | getline line) > 0) {
|
||||
st = substr(line, 1, 2); f = substr(line, 4)
|
||||
if ((i = index(f, " -> ")) > 0) f = substr(f, i+4)
|
||||
gsub(/^"|"$/, "", f)
|
||||
if (st !~ /D/) git[f] = st
|
||||
}
|
||||
close(cmd)
|
||||
for (f in cnt) {
|
||||
s = cnt[f] * 1000 + ts[f]
|
||||
if (f in git) { s += 100000; printf "%d\t%s\t%s\n", s, clr(git[f]), f; delete git[f] }
|
||||
else printf "%d\t \t%s\n", s, f
|
||||
}
|
||||
for (f in git) printf "100000\t%s\t%s\n", clr(git[f]), f
|
||||
}
|
||||
function clr(st) {
|
||||
if (st ~ /^\?\?/) return "\033[90m?\033[0m"
|
||||
if (st ~ /^R/) return "\033[36mR\033[0m"
|
||||
if (st ~ /^A/) return "\033[32mA\033[0m"
|
||||
if (st ~ /M/) return "\033[33mM\033[0m"
|
||||
return "\033[90m~\033[0m"
|
||||
}' /dev/null 2>/dev/null | sort -rn | cut -f2-
|
||||
rg --files --hidden --glob '!.git' 2>/dev/null | awk '{print " \t" $0}'
|
||||
} | awk -F'\t' '!seen[$2]++' \
|
||||
| fzf --ansi --delimiter='\t' --nth=2 \
|
||||
--preview 'bat --color=always --style=numbers --line-range=:100 {2} 2>/dev/null || head -100 {2}')" \
|
||||
|| { zle reset-prompt; return; }
|
||||
file="$(printf '%s' "$file" | cut -f2)"
|
||||
[[ -z "$file" ]] && { zle reset-prompt; return; }
|
||||
mkdir -p "${edit_log:h}"
|
||||
printf '%s\t%s\n' "$(date +%s)" "$file" >> "$edit_log"
|
||||
BUFFER="${EDITOR:-vim} ${(q)file}"
|
||||
zle reset-prompt
|
||||
zle accept-line
|
||||
|
||||
29
install.d/26-bat.sh
Normal file
29
install.d/26-bat.sh
Normal file
@@ -0,0 +1,29 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
# -----------------------------------------------------------------------------
|
||||
# Description:
|
||||
# Install bat and build theme cache from dotfiles.
|
||||
#
|
||||
|
||||
if ! command -v bat &> /dev/null; then
|
||||
case "$DOTS_PKG" in
|
||||
brew)
|
||||
brew install bat
|
||||
;;
|
||||
apt)
|
||||
sudo apt-get install -qq bat
|
||||
;;
|
||||
pacman)
|
||||
sudo pacman -S --noconfirm bat
|
||||
;;
|
||||
*)
|
||||
log_warn "Skipping bat install: no supported package manager found"
|
||||
return 0
|
||||
;;
|
||||
esac
|
||||
fi
|
||||
|
||||
bat --version | log_quote
|
||||
|
||||
bat cache --build --quiet
|
||||
log_pass "bat theme cache built"
|
||||
Reference in New Issue
Block a user