diff --git a/home/.gitconfig b/home/.gitconfig index 1121534..eaf4663 100644 --- a/home/.gitconfig +++ b/home/.gitconfig @@ -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 diff --git a/home/.profile b/home/.profile index a7333aa..c8f84d8 100644 --- a/home/.profile +++ b/home/.profile @@ -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 diff --git a/home/.tmux.conf b/home/.tmux.conf index b4203f8..f648fb8 100644 --- a/home/.tmux.conf +++ b/home/.tmux.conf @@ -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" diff --git a/home/.tmux/battery.sh b/home/.tmux/battery.sh index e90ce50..d46c8b0 100755 --- a/home/.tmux/battery.sh +++ b/home/.tmux/battery.sh @@ -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 diff --git a/home/.zsh/prompt.zsh b/home/.zsh/prompt.zsh index e8b09f3..f4ba577 100644 --- a/home/.zsh/prompt.zsh +++ b/home/.zsh/prompt.zsh @@ -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:-$( "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:-$( 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 diff --git a/install.d/26-bat.sh b/install.d/26-bat.sh new file mode 100644 index 0000000..a521fc8 --- /dev/null +++ b/install.d/26-bat.sh @@ -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"