diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..02b486a --- /dev/null +++ b/.gitignore @@ -0,0 +1,7 @@ +*.bak +*.backup +*.gho +*.ori +*.orig +*.tmp +*.swp diff --git a/README.md b/README.md index e69de29..214f9d7 100644 --- a/README.md +++ b/README.md @@ -0,0 +1,71 @@ +## Bash git prompt for Ubuntu desktop 24.04 + +This is a bash git prompt with 5 themes that displays usefull information about the current git repository. + +### Prompt Structure. +The default "Out Of The Box" theme appearance of the prompt looks like this. + +```plaintext + +``` + +### And it looks like this +

+default theme +

+ +### To display the fancy symbols DejaVuSansMono Nerd Font Mono needs to be present. + +

+extended symbols +

+ +### Install via git clone +``` +git clone https://git.x-files.dk/ubuntu-desktop/bash-git-prompt.git ~/.bash-git-prompt +``` + +### Install the required fonts used by the git-bash-prompt +```bash +cd ~/.bash-git-prompt +./install-fonts.sh +``` + +### Getting everything up and running. + +**Important:** Remove all other git prompts you have in your ~/.bashrc file. Then add the following to your ~/.bashrc file. +```bash +# Git Prompt Start +if [ -f "$HOME/.bash-git-prompt/bash-git-prompt" ]; then + export GIT_PROMPT_THEME=1 + source "$HOME/.bash-git-prompt/bash-git-prompt" +fi +# Git Prompt Stop +``` + +### Changing themes +This can be done on the fly by simply typing the command "gpchange" followed by a theme number e.g like this: + +```bash +gpchange 3 +``` + +### Themes +The image is showing the 5 themes with every git status available. I know it's not possible to have a clean and dirty state at the same time, but this is for demo / clarification purpose. The following icons are displayed in this order for demonstraion purpose. + +Branch → Staged → Changed → Untracked → Stashed → Ahead → Behind → No-Remote → Conflict → Dirty → Clean +

+extended symbols +

+ +### Set your terminal to use the DejaVuSansMono Nerd Font Mono as shown below. + +

+Terminal font settings +

+ +### More guides +More guides can be found on [\[wiki.x-files.dk\]](https://wiki.nopants.dk) + +### Last tested +January 8th 2025 on Ubuntu 24.04. diff --git a/bash-git-prompt b/bash-git-prompt new file mode 100644 index 0000000..62042cd --- /dev/null +++ b/bash-git-prompt @@ -0,0 +1,202 @@ +############################################################################### +# First Created: 24062025 Author: Allan Desc: Provides a git prompt on Ubuntu # +############################################################################### + +# Default to theme 1 if not set +GIT_PROMPT_THEME="${GIT_PROMPT_THEME:-1}" + +# Define all 6 themes +set_git_prompt_theme_icons() { + case "$GIT_PROMPT_THEME" in + 2|3) + BRANCH_ICON=" " + STAGED_ICON="" + CONFLICT_ICON="✘" + CHANGED_ICON="±" + UNTRACKED_ICON="" + STASHED_ICON="" + AHEAD_ICON="" + BEHIND_ICON="" + NO_REMOTE_ICON="" + CLEAN_ICON="✔" + DIRTY_ICON="✘" + ;; + 4) + BRANCH_ICON="⎇ " + STAGED_ICON="o" + CONFLICT_ICON="!" + CHANGED_ICON="±" + UNTRACKED_ICON="…" + STASHED_ICON="☰" + AHEAD_ICON="⇡" + BEHIND_ICON="⇣" + NO_REMOTE_ICON="-" + CLEAN_ICON="✓" + DIRTY_ICON="✗" + ;; + 5) + BRANCH_ICON="::" + STAGED_ICON="+" + CONFLICT_ICON="x" + CHANGED_ICON="*" + UNTRACKED_ICON="?" + STASHED_ICON="s" + AHEAD_ICON="a" + BEHIND_ICON="b" + NO_REMOTE_ICON="no" + CLEAN_ICON="ok" + DIRTY_ICON="!" + ;; + *) + BRANCH_ICON=" " + STAGED_ICON="" + CONFLICT_ICON="✘" + CHANGED_ICON="±" + UNTRACKED_ICON="" + STASHED_ICON="" + AHEAD_ICON="" + BEHIND_ICON="" + NO_REMOTE_ICON="" + CLEAN_ICON="✔" + DIRTY_ICON="✘" + ;; + esac +} + +# Initialize icons +set_git_prompt_theme_icons + +# Git prompt logic +git_prompt_info() { + git rev-parse --is-inside-work-tree &>/dev/null || return + + local branch + branch=$(git symbolic-ref --short HEAD 2>/dev/null || echo "(detached)") + + local status + status=$(git status --porcelain=2 --branch 2>/dev/null) || return + + local staged conflicts changed untracked stashed is_clean has_remote + staged=$(grep -cE '^1 [ADMRT]' <<<"$status") + conflicts=$(grep -cE '^u ' <<<"$status") + changed=$(grep -cE '^1 .[MD]' <<<"$status") + untracked=$(grep -cE '^\? ' <<<"$status") + stashed=$(git stash list 2>/dev/null | wc -l | tr -d ' ') + + local upstream + upstream=$(git rev-parse --abbrev-ref --symbolic-full-name "@{u}" 2>/dev/null) + if [[ -n "$upstream" ]]; then + has_remote=1 + git fetch --quiet & disown + else + has_remote=0 + fi + + local ahead=0 behind=0 + if (( has_remote )); then + ahead=$(git rev-list --left-right --count "$upstream...HEAD" 2>/dev/null | awk '{print $2}') + behind=$(git rev-list --left-right --count "$upstream...HEAD" 2>/dev/null | awk '{print $1}') + fi + + is_clean=0 + if (( staged == 0 && conflicts == 0 && changed == 0 && untracked == 0 )); then + is_clean=1 + fi + + if [[ "$GIT_PROMPT_THEME" == "2" ]]; then + # Powerline Theme 2 + printf "\[\e[30;44m\]" + printf "\[\e[97;44m\] %s%s" "$BRANCH_ICON" "$branch" + ((staged > 0)) && printf " %s%d" "$STAGED_ICON" "$staged" + ((conflicts > 0)) && printf " %s%d" "$CONFLICT_ICON" "$conflicts" + ((changed > 0)) && printf " %s%d" "$CHANGED_ICON" "$changed" + ((untracked > 0)) && printf " %s%d" "$UNTRACKED_ICON" "$untracked" + ((stashed > 0)) && printf " %s%d" "$STASHED_ICON" "$stashed" + ((ahead > 0)) && printf " %s%d" "$AHEAD_ICON" "$ahead" + ((behind > 0)) && printf " %s%d" "$BEHIND_ICON" "$behind" + ((has_remote == 0)) && printf " %s" "$NO_REMOTE_ICON" + if (( is_clean )); then + printf " %s" "$CLEAN_ICON" + else + printf " %s" "$DIRTY_ICON" + fi + printf "\[\e[34;107m\]" + printf "\[\e[30;107m\] \w" + printf "\[\e[97;49m\]" + printf "\[\e[0m\]" + + elif [[ "$GIT_PROMPT_THEME" == "3" ]]; then + # Two-line theme: git info in brackets, directory outside (in gold) + printf "\n\[\e[0;37m\]┌──[\e[0m" + printf "\e[38;5;117m%s%s\e[0m" "$BRANCH_ICON" "$branch" + ((staged > 0)) && printf " \e[38;5;196m%s%d\e[0m" "$STAGED_ICON" "$staged" + ((conflicts > 0)) && printf " \e[38;5;196m%s%d\e[0m" "$CONFLICT_ICON" "$conflicts" + ((changed > 0)) && printf " \e[38;5;69m%s%d\e[0m" "$CHANGED_ICON" "$changed" + ((untracked > 0)) && printf " \e[38;5;41m%s%d\e[0m" "$UNTRACKED_ICON" "$untracked" + ((stashed > 0)) && printf " \e[38;5;226m%s%d\e[0m" "$STASHED_ICON" "$stashed" + ((ahead > 0)) && printf " \e[0;37m%s%d\e[0m" "$AHEAD_ICON" "$ahead" + ((behind > 0)) && printf " \e[0;37m%s%d\e[0m" "$BEHIND_ICON" "$behind" + ((has_remote == 0)) && printf " \e[38;5;250m%s\e[0m" "$NO_REMOTE_ICON" + if (( is_clean )); then + printf " \e[0;32m%s\e[0m" "$CLEAN_ICON" + else + printf " \e[38;5;196m%s\e[0m" "$DIRTY_ICON" + fi + printf "\e[0;37m]\e[0m" + printf " \[\e[38;5;178m\]\w\[\e[0m\]" + printf "\n\[\e[0;37m\]└──\[\e[0m\]" + + else + # Default bracket theme + printf "\e[0;37m[\e[0m" + printf "\e[38;5;117m%s%s\e[0m" "$BRANCH_ICON" "$branch" + ((staged > 0)) && printf " \e[38;5;196m%s%d\e[0m" "$STAGED_ICON" "$staged" + ((conflicts > 0)) && printf " \e[38;5;196m%s%d\e[0m" "$CONFLICT_ICON" "$conflicts" + ((changed > 0)) && printf " \e[38;5;69m%s%d\e[0m" "$CHANGED_ICON" "$changed" + ((untracked > 0)) && printf " \e[38;5;41m%s%d\e[0m" "$UNTRACKED_ICON" "$untracked" + ((stashed > 0)) && printf " \e[38;5;226m%s%d\e[0m" "$STASHED_ICON" "$stashed" + ((ahead > 0)) && printf " \e[0;37m%s%d\e[0m" "$AHEAD_ICON" "$ahead" + ((behind > 0)) && printf " \e[0;37m%s%d\e[0m" "$BEHIND_ICON" "$behind" + ((has_remote == 0)) && printf " \e[38;5;250m%s\e[0m" "$NO_REMOTE_ICON" + if (( is_clean )); then + printf " \e[0;32m%s\e[0m" "$CLEAN_ICON" + else + printf " \e[38;5;196m%s\e[0m" "$DIRTY_ICON" + fi + printf "\e[0;37m]\e[0m" + fi +} + +# Auto-updating prompt +update_git_prompt() { + local PROMPT_CHAR='$' + [[ $EUID -eq 0 ]] && PROMPT_CHAR='#' + + GIT_PS1="$(git_prompt_info)" + if [[ -n "$GIT_PS1" ]]; then + if [[ "$GIT_PROMPT_THEME" == "3" ]]; then + PS1="${GIT_PS1} ${PROMPT_CHAR} " + elif [[ "$GIT_PROMPT_THEME" == "2" ]]; then + PS1="${GIT_PS1}\[\e[0m\] ${PROMPT_CHAR} " + else + PS1='\u@\h \['"$GIT_PS1"'\] \[\e[38;5;178m\]\w\[\e[0m\] '"${PROMPT_CHAR} " + fi + else + PS1='\u@\h:\[\e[38;5;220m\]\w\[\e[0m\] '"${PROMPT_CHAR} " + fi +} + +PROMPT_COMMAND=update_git_prompt + +# Theme switch command +gpchange() { + local theme="${1:-}" + if [[ "$theme" =~ ^[1-5]$ ]]; then + export GIT_PROMPT_THEME="$theme" + set_git_prompt_theme_icons + update_git_prompt + echo "Switched to Git prompt theme $theme" + else + echo "Usage: gpchange <1-5>" + fi +} diff --git a/fonts/DejaVu-Sans-Mono-Nerd-Font-Complete-Mono.ttf b/fonts/DejaVu-Sans-Mono-Nerd-Font-Complete-Mono.ttf new file mode 100644 index 0000000..10c879b Binary files /dev/null and b/fonts/DejaVu-Sans-Mono-Nerd-Font-Complete-Mono.ttf differ diff --git a/fonts/DejaVu-Sans-Mono-Nerd-Font-Symbols.txt b/fonts/DejaVu-Sans-Mono-Nerd-Font-Symbols.txt new file mode 100644 index 0000000..3ebfdb6 --- /dev/null +++ b/fonts/DejaVu-Sans-Mono-Nerd-Font-Symbols.txt @@ -0,0 +1,114 @@ +########################################################################################################### +# First Created: 14012025 Author: Allan # +# For your convenience this file displays all symbols for DejaVu-Sans-Mono-Nerd-Font-Complete-Mono.ttf # +# For the symbols to render DejaVu-Sans-Mono-Nerd-Font-Complete-Mono need to be installed on your systenm # +########################################################################################################### +▲ △ ▴ ▵ ▶ ▷ ▸ ▹ ► ▻ ▼ ▽ ▾ ▿ ◀ ◁ ◂ ◃ ◄ ◅ ◆ ◇ ◈ ◉ ◊ ○ ◌ ◍ ◎ ● ◐ ◑ ◒ ◓ ◔ ◕ ◖ ◗ ◘ ◙ + ◚ ◛ ◜ ◝ ◞ ◟ ◠ ◡ ◢ ◣ ◤ ◥ ◦ ◧ ◨ ◩ ◪ ◫ ◬ ◭ ◮ ◯ ◰ ◱ ◲ ◳ ◴ ◵ ◶ ◷ ◸ ◹ ◺ ◻ ◼ ◽ ◾ ◿ ☀ ☁ + ☂ ☃ ☄ ★ ☆ ☇ ☈ ☉ ☊ ☋ ☌ ☍ ☎ ☏ ☐ ☑ ☒ ☓ ☔ ☕ ☖ ☗ ☘ ☙ ☚ ☛ ☜ ☝ ☞ ☟ ☠ ☡ ☢ ☣ ☤ ☥ ☦ ☧ ☨ +☩ ☪ ☫ ☬ ☭ ☮ ☯ ☰ ☱ ☲ ☳ ☴ ☵ ☶ ☷ ☸ ☹ ☺ ☻ ☼ ☽ ☾ ☿ ♀ ♁ ♂ ♃ ♄ ♅ ♆ ♇ ♈ ♉ ♊ ♋ ♌ ♍ ♎ ♏ ♐ +♑ ♒ ♓ ♔ ♕ ♖ ♗ ♘ ♙ ♚ ♛ ♜ ♝ ♞ ♟ ♠ ♡ ♢ ♣ ♤ ♥ ♦ ♧ ♨ ♩ ♪ ♫ ♬ ♭ ♮ ♯ ♰ ♱ ♲ ♳ ♴ ♵ ♶ ♷ ♸ + ♹ ♺ ♻ ♼ ♽ ♾ ♿ ⚀ ⚁ ⚂ ⚃ ⚄ ⚅ ⚆ ⚇ ⚈ ⚉ ⚊ ⚋ ⚐ ⚑ ⚒ ⚓ ⚔ ⚕ ⚖ ⚗ ⚘ ⚙ ⚚ ⚛ ⚜ ⚠ ⚡ ⚰ ⚱ ✁ ✂ ✃ +✄ ✆ ✇ ✈ ✉ ✌ ✍ ✎ ✏ ✐ ✑ ✒ ✓ ✔ ✕ ✖ ✗ ✘ ✙ ✚ ✛ ✜ ✝ ✞ ✟ ✠ ✡ ✢ ✣ ✤ ✥ ✦ ✧ ✩ ✪ ✫ ✬ ✭ ✮ ✯ +✰ ✱ ✲ ✳ ✴ ✵ ✶ ✷ ✸ ✹ ✺ ✻ ✼ ✽ ✾ ✿ ❀ ❁ ❂ ❃ ❄ ❅ ❆ ❇ ❈ ❉ ❊ ❋ ❍ ❏ ❐ ❑ ❒ ❖ ❘ ❙ ❚ ❛ ❜ ❝ + ❞ ❡ ❢ ❣ ❤ ❥ ❦ ❧ ❨ ❩ ❪ ❫ ❬ ❭ ❮ ❯ ❰ ❱ ❲ ❳ ❴ ❵ ➔ ➘ ➙ ➚ ➛ ➜ ➝ ➞ ➟ ➠ ➡ ➢ ➣ ➤ ➥ ➦ ➧ ➨ + ➩ ➪ ➫ ➬ ➭ ➮ ➯ ➱ ➲ ➳ ➴ ➵ ➶ ➷ ➸ ➹ ➺ ➻ ➼ ➽ ➾ ⟂ ⟅ ⟆ ⟜ ⟠ ⟦ ⟧ ⟨ ⟩ ⟪ ⟫ ⟵ ⟶ ⟷ ⦇ ⦈ ⦗ ⦘ +⧫ ⧺ ⧻ ⨀ ⨯ ⩪ ⩫ ⬅ ⬆ ⬇ ⬈ ⬉ ⬊ ⬋ ⬌ ⬍ ⬒ ⬓ ⬔ ⬕ ⬖ ⬗ ⬘ ⬙ ⬚ ⭘ Ɽ Ɑ Ɱ Ɐ Ɒ Ⱶ ⱶ ⱷ ⱹ ⱺ ⱼ ⱽ Ȿ Ɀ +⸘ ⸟ ⸢ ⸣ ⸤ ⸥ ⸮ ꜈ ꜉ ꜊ ꜋ ꜌ ꜍ ꜎ ꜏ ꜐ ꜑ ꜒ ꜓ ꜔ ꜕ ꜖ ꜛ ꜜ ꜝ ꜞ ꜟ Ꜣ ꜣ Ꜥ ꜥ Ꜧ ꜧ ꞉ ꞊ Ꞌ ꞌ Ɥ ꞎ Ꞑ + ꞑ Ɦ ꟸ ꟹ                                   +                                        +                                        +                                         +                                        +                                        +                                        +                                        +                                        +                                        +                                         +                                        +                                        +                                        +                                        +                                        +                                        +                                         +                                        +                                        +                                        +                                        +                                        +                                        +                                         +                                        +                                        +                                        +                                         +                                        +                                        +                                         +                                        +                                        +                                        +                                         +                                        +                                        +                                         +                                        +                                        +                                        +                                         +                                        +                                        +                                         +                                        +                                        +                                        +                                         +                                        +                                        +                                         +                                        +                                        +                                        +                                         +                                        +                                        +                                         +                                        +                                        +                                        +                                         +                                        +                      豈 更 車 賈 滑 串 句 龜 龜 契 金 喇 奈 懶 癩 羅 蘿 +螺 裸 邏 樂 洛 烙 珞 落 酪 駱 亂 卵 欄 爛 蘭 鸞 嵐 濫 藍 襤 拉 臘 蠟 廊 朗 浪 狼 郎 來 冷 勞 擄 櫓 爐 盧 老 蘆 虜 路 露 + 魯 鷺 碌 祿 綠 菉 錄 鹿 論 壟 弄 籠 聾 牢 磊 賂 雷 壘 屢 樓 淚 漏 累 縷 陋 勒 肋 凜 凌 稜 綾 菱 陵 讀 拏 樂 諾 丹 寧 +怒 率 異 北 磻 便 復 不 泌 數 索 參 塞 省 葉 說 殺 辰 沈 拾 若 掠 略 亮 兩 凉 梁 糧 良 諒 量 勵 呂 女 廬 旅 濾 礪 閭 驪 +麗 黎 力 曆 歷 轢 年 憐 戀 撚 漣 煉 璉 秊 練 聯 輦 蓮 連 鍊 列 劣 咽 烈 裂 說 廉 念 捻 殮 簾 獵 令 囹 寧 嶺 怜 玲 瑩 羚 + 聆 鈴 零 靈 領 例 禮 醴 隸 惡 了 僚 寮 尿 料 樂 燎 療 蓼 遼 龍 暈 阮 劉 杻 柳 流 溜 琉 留 硫 紐 類 六 戮 陸 倫 崙 淪 輪 + 律 慄 栗 率 隆 利 吏 履 易 李 梨 泥 理 痢 罹 裏 裡 里 離 匿 溺 吝 燐 璘 藺 隣 鱗 麟 林 淋 臨 立 笠 粒 狀 炙 識 什 茶 +刺 切 度 拓 糖 宅 洞 暴 輻 行 降 見 廓 兀 嗀 﨎 﨏 塚 﨑 晴 﨓 﨔 凞 猪 益 礼 神 祥 福 靖 精 羽 﨟 蘒 﨡 諸 﨣 﨤 逸 都 +﨧 﨨 﨩 飯 飼 館 鶴 郞 隷 侮 僧 免 勉 勤 卑 喝 嘆 器 塀 墨 層 屮 悔 慨 憎 懲 敏 既 暑 梅 海 渚 漢 煮 爫 琢 碑 社 祉 祈 + 祐 祖 祝 禍 禎 穀 突 節 練 縉 繁 署 者 臭 艹 艹 著 褐 視 謁 謹 賓 贈 辶 逸 難 響 頻 恵 𤋮 舘 﩮 﩯 並 况 全 侀 充 冀 +勇 勺 喝 啕 喙 嗢 塚 墳 奄 奔 婢 嬨 廒 廙 彩 徭 惘 慎 愈 憎 慠 懲 戴 揄 搜 摒 敖 晴 朗 望 杖 歹 殺 流 滛 滋 漢 瀞 煮 瞧 +爵 犯 猪 瑱 甆 画 瘝 瘟 益 盛 直 睊 着 磌 窱 節 类 絛 練 缾 者 荒 華 蝹 襁 覆 視 調 諸 請 謁 諾 諭 謹 變 贈 輸 遲 醙 鉶 + 陼 難 靖 韛 響 頋 頻 鬒 龜 𢡊 𢡄 𣏕 㮝 䀘 䀹 𥉉 𥳐 𧻓 齃 龎 﫚 﫛 﫜 﫝 﫞 﫟 﫠 﫡 﫢 﫣 﫤 﫥 﫦 﫧 﫨 﫩 﫪 﫫 﫬 﫭 + 﫮 﫯 﫰 﫱 﫲 﫳 﫴 﫵 﫶 﫷 﫸 﫹 﫺 﫻 﫼 﫽 﫾 﫿 ff fi fl ffi ffl ſt st ﬇ ﬈ ﬉ ﬊ ﬋ ﬌ ﬍ ﬎ ﬏ ﬐ ﬑ ﬒ ﬓ ﬔ +ﬕ ﬖ ﬗ ﬘ ﬙ ﬚ ﬛ ﬜ יִ ﬞ ײַ ﬠ ﬡ ﬢ ﬣ ﬤ ﬥ ﬦ ﬧ ﬨ ﬩ שׁ שׂ שּׁ שּׂ אַ אָ אּ בּ גּ דּ הּ וּ זּ ﬷ טּ יּ ךּ כּ לּ +﬽ מּ ﬿ נּ סּ ﭂ ףּ פּ ﭅ צּ קּ רּ שּ תּ וֹ בֿ כֿ פֿ ﭏ ﭐ ﭑ ﭒ ﭓ ﭔ ﭕ ﭖ ﭗ ﭘ ﭙ ﭚ ﭛ ﭜ ﭝ ﭞ ﭟ ﭠ ﭡ ﭢ ﭣ ﭤ + ﭥ ﭦ ﭧ ﭨ ﭩ ﭪ ﭫ ﭬ ﭭ ﭮ ﭯ ﭰ ﭱ ﭲ ﭳ ﭴ ﭵ ﭶ ﭷ ﭸ ﭹ ﭺ ﭻ ﭼ ﭽ ﭾ ﭿ ﮀ ﮁ ﮂ ﮃ ﮄ ﮅ ﮆ ﮇ ﮈ ﮉ ﮊ ﮋ +ﮌ ﮍ ﮎ ﮏ ﮐ ﮑ ﮒ ﮓ ﮔ ﮕ ﮖ ﮗ ﮘ ﮙ ﮚ ﮛ ﮜ ﮝ ﮞ ﮟ ﮠ ﮡ ﮢ ﮣ ﮤ ﮥ ﮦ ﮧ ﮨ ﮩ ﮪ ﮫ ﮬ ﮭ ﮮ ﮯ ﮰ ﮱ ﮲ ﮳ +﮴ ﮵ ﮶ ﮷ ﮸ ﮹ ﮺ ﮻ ﮼ ﮽ ﮾ ﮿ ﯀ ﯁ ﯂ ﯃ ﯄ ﯅ ﯆ ﯇ ﯈ ﯉ ﯊ ﯋ ﯌ ﯍ ﯎ ﯏ ﯐ ﯑ ﯒ ﯓ ﯔ ﯕ ﯖ ﯗ ﯘ ﯙ ﯚ ﯛ + ﯜ ﯝ ﯞ ﯟ ﯠ ﯡ ﯢ ﯣ ﯤ ﯥ ﯦ ﯧ ﯨ ﯩ ﯪ ﯫ ﯬ ﯭ ﯮ ﯯ ﯰ ﯱ ﯲ ﯳ ﯴ ﯵ ﯶ ﯷ ﯸ ﯹ ﯺ ﯻ ﯼ ﯽ ﯾ ﯿ ﰀ ﰁ ﰂ ﰃ + ﰄ ﰅ ﰆ ﰇ ﰈ ﰉ ﰊ ﰋ ﰌ ﰍ ﰎ ﰏ ﰐ ﰑ ﰒ ﰓ ﰔ ﰕ ﰖ ﰗ ﰘ ﰙ ﰚ ﰛ ﰜ ﰝ ﰞ ﰟ ﰠ ﰡ ﰢ ﰣ ﰤ ﰥ ﰦ ﰧ ﰨ ﰩ ﰪ +ﰫ ﰬ ﰭ ﰮ ﰯ ﰰ ﰱ ﰲ ﰳ ﰴ ﰵ ﰶ ﰷ ﰸ ﰹ ﰺ ﰻ ﰼ ﰽ ﰾ ﰿ ﱀ ﱁ ﱂ ﱃ ﱄ ﱅ ﱆ ﱇ ﱈ ﱉ ﱊ ﱋ ﱌ ﱍ ﱎ ﱏ ﱐ ﱑ ﱒ +ﱓ ﱔ ﱕ ﱖ ﱗ ﱘ ﱙ ﱚ ﱛ ﱜ ﱝ ﱞ ﱟ ﱠ ﱡ ﱢ ﱣ ﱤ ﱥ ﱦ ﱧ ﱨ ﱩ ﱪ ﱫ ﱬ ﱭ ﱮ ﱯ ﱰ ﱱ ﱲ ﱳ ﱴ ﱵ ﱶ ﱷ ﱸ ﱹ ﱺ + ﱻ ﱼ ﱽ ﱾ ﱿ ﲀ ﲁ ﲂ ﲃ ﲄ ﲅ ﲆ ﲇ ﲈ ﲉ ﲊ ﲋ ﲌ ﲍ ﲎ ﲏ ﲐ ﲑ ﲒ ﲓ ﲔ ﲕ ﲖ ﲗ ﲘ ﲙ ﲚ ﲛ ﲜ ﲝ ﲞ ﲟ ﲠ ﲡ +ﲢ ﲣ ﲤ ﲥ ﲦ ﲧ ﲨ ﲩ ﲪ ﲫ ﲬ ﲭ ﲮ ﲯ ﲰ ﲱ ﲲ ﲳ ﲴ ﲵ ﲶ ﲷ ﲸ ﲹ ﲺ ﲻ ﲼ ﲽ ﲾ ﲿ ﳀ ﳁ ﳂ ﳃ ﳄ ﳅ ﳆ ﳇ ﳈ ﳉ +ﳊ ﳋ ﳌ ﳍ ﳎ ﳏ ﳐ ﳑ ﳒ ﳓ ﳔ ﳕ ﳖ ﳗ ﳘ ﳙ ﳚ ﳛ ﳜ ﳝ ﳞ ﳟ ﳠ ﳡ ﳢ ﳣ ﳤ ﳥ ﳦ ﳧ ﳨ ﳩ ﳪ ﳫ ﳬ ﳭ ﳮ ﳯ ﳰ ﳱ + ﳲ ﳳ ﳴ ﳵ ﳶ ﳷ ﳸ ﳹ ﳺ ﳻ ﳼ ﳽ ﳾ ﳿ ﴀ ﴁ ﴂ ﴃ ﴄ ﴅ ﴆ ﴇ ﴈ ﴉ ﴊ ﴋ ﴌ ﴍ ﴎ ﴏ ﴐ ﴑ ﴒ ﴓ ﴔ ﴕ ﴖ ﴗ ﴘ ﴙ + ﴚ ﴛ ﴜ ﴝ ﴞ ﴟ ﴠ ﴡ ﴢ ﴣ ﴤ ﴥ ﴦ ﴧ ﴨ ﴩ ﴪ ﴫ ﴬ ﴭ ﴮ ﴯ ﴰ ﴱ ﴲ ﴳ ﴴ ﴵ ﴶ ﴷ ﴸ ﴹ ﴺ ﴻ ﴼ ﴽ ﴾ ﴿ ﵀ +﵁ ﵂ ﵃ ﵄ ﵅ ﵆ ﹰ ﹱ ﹲ ﹳ ﹴ ﹶ ﹷ ﹸ ﹹ ﹺ ﹻ ﹼ ﹽ ﹾ ﹿ ﺀ ﺁ ﺂ ﺃ ﺄ ﺅ ﺆ ﺇ ﺈ ﺉ ﺊ ﺋ ﺌ ﺍ ﺎ ﺏ ﺐ ﺑ ﺒ +ﺓ ﺔ ﺕ ﺖ ﺗ ﺘ ﺙ ﺚ ﺛ ﺜ ﺝ ﺞ ﺟ ﺠ ﺡ ﺢ ﺣ ﺤ ﺥ ﺦ ﺧ ﺨ ﺩ ﺪ ﺫ ﺬ ﺭ ﺮ ﺯ ﺰ ﺱ ﺲ ﺳ ﺴ ﺵ ﺶ ﺷ ﺸ ﺹ ﺺ + ﺻ ﺼ ﺽ ﺾ ﺿ ﻀ ﻁ ﻂ ﻃ ﻄ ﻅ ﻆ ﻇ ﻈ ﻉ ﻊ ﻋ ﻌ ﻍ ﻎ ﻏ ﻐ ﻑ ﻒ ﻓ ﻔ ﻕ ﻖ ﻗ ﻘ ﻙ ﻚ ﻛ ﻜ ﻝ ﻞ ﻟ ﻠ ﻡ ﻢ + ﻣ ﻤ ﻥ ﻦ ﻧ ﻨ ﻩ ﻪ ﻫ ﻬ ﻭ ﻮ ﻯ ﻰ ﻱ ﻲ ﻳ ﻴ ﻵ ﻶ ﻷ ﻸ ﻹ ﻺ ﻻ ﻼ diff --git a/gittheme1.png b/gittheme1.png new file mode 100644 index 0000000..71d78d6 Binary files /dev/null and b/gittheme1.png differ diff --git a/gittheme2.png b/gittheme2.png new file mode 100644 index 0000000..de9efaf Binary files /dev/null and b/gittheme2.png differ diff --git a/install-fonts.sh b/install-fonts.sh new file mode 100755 index 0000000..5c02fe5 --- /dev/null +++ b/install-fonts.sh @@ -0,0 +1,9 @@ +#!/bin/bash + +################################################################################## +# First Created: 03012025 Author: Allan Desc: Installs fonts for bash-git-prompt # +################################################################################## + + mkdir -p $HOME/.local/share/fonts + cp $HOME/.bash-git-prompt/fonts/*.ttf $HOME/.local/share/fonts + fc-cache -f diff --git a/showgitthemes b/showgitthemes new file mode 100755 index 0000000..09fc7ad --- /dev/null +++ b/showgitthemes @@ -0,0 +1,149 @@ +#!/usr/bin/env bash + +clear +echo "" + +branch="branch-name" +staged=2 +conflicts=1 +changed=3 +untracked=4 +stashed=2 +ahead=1 +behind=1 +has_remote=0 +is_clean=0 + +print_theme() { + local theme=$1 + local suppress_newline=$2 + local suppress_label=$3 + + case "$theme" in + 2|3) + BRANCH_ICON=" " + STAGED_ICON="" + CHANGED_ICON="±" + UNTRACKED_ICON="" + STASHED_ICON="" + AHEAD_ICON="" + BEHIND_ICON="" + NO_REMOTE_ICON="" + CONFLICT_ICON="✘" + DIRTY_ICON="✘" + CLEAN_ICON="✔" + ;; + 4) + BRANCH_ICON="⎇ " + STAGED_ICON="o" + CONFLICT_ICON="!" + CHANGED_ICON="±" + UNTRACKED_ICON="…" + STASHED_ICON="☰" + AHEAD_ICON="⇡" + BEHIND_ICON="⇣" + NO_REMOTE_ICON="-" + CLEAN_ICON="✓" + DIRTY_ICON="✗" + ;; + 5) + BRANCH_ICON="::" + STAGED_ICON="+" + CONFLICT_ICON="x" + CHANGED_ICON="*" + UNTRACKED_ICON="?" + STASHED_ICON="s" + AHEAD_ICON="a" + BEHIND_ICON="b" + NO_REMOTE_ICON="no" + CLEAN_ICON="ok" + DIRTY_ICON="!" + ;; + *) + BRANCH_ICON=" " + STAGED_ICON="" + CONFLICT_ICON="✘" + CHANGED_ICON="±" + UNTRACKED_ICON="" + STASHED_ICON="" + AHEAD_ICON="" + BEHIND_ICON="" + NO_REMOTE_ICON="" + CLEAN_ICON="✔" + DIRTY_ICON="✘" + ;; + esac + + if [[ "$suppress_label" != "true" ]]; then + if [[ "$theme" == "1" || "$theme" == "2" || "$theme" == "3" ]]; then + echo -e "\e[1mTheme $theme:\e[0m This theme requires DejaVuSansMono Nerd Font Mono font" + elif [[ "$theme" == "4" ]]; then + echo -e "\e[1mTheme $theme:\e[0m Unicode" + elif [[ "$theme" == "5" ]]; then + echo -e "\e[1mTheme $theme:\e[0m Terminal Safe" + else + echo -e "\e[1mTheme $theme:\e[0m" + fi + fi + + if [[ "$theme" == "2" ]]; then + printf "\e[30;44m" + printf "\e[97;44m %s%s" "$BRANCH_ICON" "$branch" + printf " %s%d" "$STAGED_ICON" "$staged" + printf " %s%d" "$CHANGED_ICON" "$changed" + printf " %s%d" "$UNTRACKED_ICON" "$untracked" + printf " %s%d" "$STASHED_ICON" "$stashed" + printf " %s%d" "$AHEAD_ICON" "$ahead" + printf " %s%d" "$BEHIND_ICON" "$behind" + (( has_remote == 0 )) && printf " %s" "$NO_REMOTE_ICON" + printf " %s%d" "$CONFLICT_ICON" "$conflicts" + printf " %s %s" "$DIRTY_ICON" "$CLEAN_ICON" + printf "\e[0m\e[34;107m" + printf "\e[30;107m ~/some-directory" + printf "\e[97;49m" + printf "\e[0m \$\n" + + elif [[ "$theme" == "3" ]]; then + printf "\e[0;37m┌──[\e[0m" + printf "\e[38;5;117m%s%s\e[0m" "$BRANCH_ICON" "$branch" + printf " \e[38;5;196m%s%d" "$STAGED_ICON" "$staged" + printf " \e[38;5;69m%s%d" "$CHANGED_ICON" "$changed" + printf " \e[38;5;41m%s%d" "$UNTRACKED_ICON" "$untracked" + printf " \e[38;5;226m%s%d" "$STASHED_ICON" "$stashed" + printf " \e[0;37m%s%d" "$AHEAD_ICON" "$ahead" + printf " \e[0;37m%s%d" "$BEHIND_ICON" "$behind" + (( has_remote == 0 )) && printf " \e[38;5;250m%s" "$NO_REMOTE_ICON" + printf " \e[38;5;196m%s%d" "$CONFLICT_ICON" "$conflicts" + printf " \e[38;5;196m%s \e[0;32m%s" "$DIRTY_ICON" "$CLEAN_ICON" + printf "\e[0;37m] \e[38;5;178m~/some-directory\e[0m\e[0m\n" + printf "\e[0;37m└─\e[0m \$\n" + + else + printf "\e[0;37m[\e[0m" + printf "\e[38;5;117m%s%s\e[0m" "$BRANCH_ICON" "$branch" + printf " \e[38;5;196m%s%d" "$STAGED_ICON" "$staged" + printf " \e[38;5;69m%s%d" "$CHANGED_ICON" "$changed" + printf " \e[38;5;41m%s%d" "$UNTRACKED_ICON" "$untracked" + printf " \e[38;5;226m%s%d" "$STASHED_ICON" "$stashed" + printf " \e[0;37m%s%d" "$AHEAD_ICON" "$ahead" + printf " \e[0;37m%s%d" "$BEHIND_ICON" "$behind" + (( has_remote == 0 )) && printf " \e[38;5;250m%s" "$NO_REMOTE_ICON" + printf " \e[38;5;196m%s%d" "$CONFLICT_ICON" "$conflicts" + printf " \e[38;5;196m%s \e[0;32m%s" "$DIRTY_ICON" "$CLEAN_ICON" + printf "\e[0;37m]\e[0m" + printf " \e[38;5;178m~/some-directory\e[0m \$\n" + fi + + [[ "$suppress_newline" != "true" ]] && echo +} + +# Print all 5 themes +for t in {1..5}; do + print_theme "$t" +done + +# Two newlines +echo -e "\n" + +# Reprint theme 1 with no label and no trailing newline +# print_theme 1 true true