Merge pull request #178 from JaKooLit/main

main to development
This commit is contained in:
Ja.KooLit 2025-02-20 23:35:12 +09:00 committed by GitHub
commit 8692d72565
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
17 changed files with 2188 additions and 69 deletions

View File

@ -1,5 +1,10 @@
## Changelogs ## Changelogs
## 18 Feb 2025
- Change default zsh theme to adnosterzak
- pokemon coloscript integrated with fastfetch when opted with pokemon to add some bling
- additional external oh-my-zsh theme
## 06 Feb 2025 ## 06 Feb 2025
- added semi-unattended function. - added semi-unattended function.
- move all the initial questions at the beginning - move all the initial questions at the beginning

View File

@ -56,6 +56,12 @@ https://github.com/user-attachments/assets/49bc12b2-abaf-45de-a21c-67aacd9bb872
### NOTE: Ubuntu-Hyprland install script has its own repo now ### NOTE: Ubuntu-Hyprland install script has its own repo now
- [`Ubuntu-Hyprland LINK`](https://github.com/JaKooLit/Ubuntu-Hyprland) - [`Ubuntu-Hyprland LINK`](https://github.com/JaKooLit/Ubuntu-Hyprland)
### Gallery and Videos
#### 🎥 Feb 2025 Video explanation of installation with preset
- [YOUTUBE-LINK](https://youtu.be/wQ70lo7P6vA?si=_QcbrNKh_Bg0L3wC)
- [YOUTUBE-Hyprland-Playlist](https://youtube.com/playlist?list=PLDtGd5Fw5_GjXCznR0BzCJJDIQSZJRbxx&si=iaNjLulFdsZ6AV-t)
> [!IMPORTANT] > [!IMPORTANT]
> install a backup tool like `snapper` or `timeshift`. and Backup your system before installing hyprland using this script. This script does NOT include uninstallation of packages > install a backup tool like `snapper` or `timeshift`. and Backup your system before installing hyprland using this script. This script does NOT include uninstallation of packages
@ -79,7 +85,6 @@ sudo nano /etc/apt/sources.list
- If you have login Manager already like GDM (gnome login manager), I highly advice not to install SDDM. But if you decide to install SDDM, see here [`Issue 2 - SDDM`](https://github.com/JaKooLit/Debian-Hyprland/issues/2) - If you have login Manager already like GDM (gnome login manager), I highly advice not to install SDDM. But if you decide to install SDDM, see here [`Issue 2 - SDDM`](https://github.com/JaKooLit/Debian-Hyprland/issues/2)
> [!IMPORTANT] > [!IMPORTANT]
> If you are using Gnome already, DO NOT install the SDDM. The GDM Login Manager works well with Hyprland. For some reason, during installation, you will be asked which login manager you wanted to use. But during my test, nothing happened. > If you are using Gnome already, DO NOT install the SDDM. The GDM Login Manager works well with Hyprland. For some reason, during installation, you will be asked which login manager you wanted to use. But during my test, nothing happened.
@ -88,49 +93,6 @@ sudo nano /etc/apt/sources.list
> You will encounter issues. See [`Issue 2 - SDDM`](https://github.com/JaKooLit/Debian-Hyprland/issues/2) > You will encounter issues. See [`Issue 2 - SDDM`](https://github.com/JaKooLit/Debian-Hyprland/issues/2)
### Gallery and Videos
<details>
<summary>
📷 Screenshots
</summary>
<p align="center">
<img align="center" width="49%" src="https://raw.githubusercontent.com/JaKooLit/screenshots/main/Distro-Hyprland/Debian/debian.png" /> <img align="center" width="49%" src="https://raw.githubusercontent.com/JaKooLit/screenshots/main/Distro-Hyprland/Debian/debian2.png" />
</p>
<p align="center">
<img align="center" width="49%" src="https://raw.githubusercontent.com/JaKooLit/screenshots/main/Hyprland-Dots-Showcase/default-waybar.png" /> <img align="center" width="49%" src="https://raw.githubusercontent.com/JaKooLit/screenshots/main/Distro-Hyprland/Debian/debian4.png" />
<img align="center" width="49%" src="https://raw.githubusercontent.com/JaKooLit/screenshots/main/Hyprland-Dots-Showcase/wlogout-dark.png" /> <img align="center" width="49%" src="https://raw.githubusercontent.com/JaKooLit/screenshots/main/Distro-Hyprland/Debian/hyprlock.png"" />
<img align="center" width="49%" src="https://raw.githubusercontent.com/JaKooLit/screenshots/main/Hyprland-Dots-Showcase/waybar-layout.png" /> <img align="center" width="49%" src="https://raw.githubusercontent.com/JaKooLit/screenshots/main/Hyprland-Dots-Showcase/waybar-style.png"" />
</p>
#### ❕ Installed on Kali Linux 😈
![alt text](https://github.com/JaKooLit/screenshots/blob/main/Hyprland-ScreenShots/Debian/Kali-Linux1.png)
#### 📷 More updated Screenshots Here [`Link`](https://github.com/JaKooLit/screenshots/tree/main/Hyprland-Dots-Showcase)
#### 📷 Older Screenshots: v1[`Link`](https://github.com/JaKooLit/screenshots/tree/main/Hyprland-ScreenShots/Debian) & v2[`Link`](https://github.com/JaKooLit/screenshots/tree/main/Hyprland-ScreenShots/Debian-v2)
</details>
<details>
<summary>
📽️ Youtube Videos
</summary>
#### ✨ Youtube presentation [`V1`](https://youtu.be/hGEWOif5D4Y?si=WQ-PrPwEhM5Og76Q)
#### ✨ Youtube presentation [`V2`](https://youtu.be/Qc4VP9JFh2Y)
#### ✨ A video walk through my dotfiles[`Link`](https://youtu.be/fO-RBHvVEcc?si=ijqxxnq_DLiyO8xb)
#### ✨ A video walk through of My Hyprland-Dots v2[`Link`](https://youtu.be/yaVurRoXc-s?si=iDnBC5S3thPBX3ZE)
#### 💯💯 Check out Installation Video coverage by KSK royal (Kali Linux xfce + nvidia). He have details regarding installing timeshift and switching to sddm from lightdm. He also covers removal of nouveau in favor of proprietary nvidia drivers
- [`Link`](https://youtu.be/NtpRtSBjz3I?si=YGkS75u_7cW5D_zu)
</details>
### 🪧🪧🪧 ANNOUNCEMENT 🪧🪧🪧 ### 🪧🪧🪧 ANNOUNCEMENT 🪧🪧🪧
- This Repo does not contain Hyprland Dots or configs! Pre-configured Dotfiles are on [`Hyprland-Dots`](https://github.com/JaKooLit/Hyprland-Dots) . During installation, if you opt to copy pre-configured dots, it will be downloaded from that centralized repo. - This Repo does not contain Hyprland Dots or configs! Pre-configured Dotfiles are on [`Hyprland-Dots`](https://github.com/JaKooLit/Hyprland-Dots) . During installation, if you opt to copy pre-configured dots, it will be downloaded from that centralized repo.
@ -174,7 +136,7 @@ chmod +x install.sh
<img align="center" width="100%" src="https://raw.githubusercontent.com/JaKooLit/Debian-Hyprland/main/Debian-Install.png" /> <img align="center" width="100%" src="https://raw.githubusercontent.com/JaKooLit/Debian-Hyprland/main/Debian-Install.png" />
### 🤟 semi-unattended installation (new for 2025) ### 🤟 semi-unattended installation (new for Feb 2025)
- edit preset.sh to modify what packages you want. Make sure to change only with Y or N - edit preset.sh to modify what packages you want. Make sure to change only with Y or N
- to use preset instead of usual `./install.sh` you can ran like this - to use preset instead of usual `./install.sh` you can ran like this
@ -240,15 +202,22 @@ source ~/.zshrc
> [!NOTE] > [!NOTE]
> This script does not setup audio. Kindly set up. If you have not, I recommend pipewire. `sudo apt install -y pipewire` > This script does not setup audio. Kindly set up. If you have not, I recommend pipewire. `sudo apt install -y pipewire`
#### 🫥 Improving performance for Older Nvidia Cards using driver 470 #### 🎞️ AGS Overview DEMO
- [`SEE HERE`](https://github.com/JaKooLit/Hyprland-Dots/discussions/123#discussion-6035205) - in case you wonder, here is a short demo of AGS overview [Youtube LINK](https://youtu.be/zY5SLNPBJTs)
#### 🙋 Got a questions regarding the Hyprland Dots configurations? 🙋 #### ✨ TO DO once installation done and dotfiles copied
- Head over to Hyprland-Dots wiki Link [`KooL's DOTS WIKI`](https://github.com/JaKooLit/Hyprland-Dots/wiki) - SUPER H for HINT or click on the waybar HINT! Button
- Head over to [KooL Hyprland WIKI](https://github.com/JaKooLit/Hyprland-Dots/wiki)
#### 🙋 Got a questions regarding the Hyprland Dots or configurations? 🙋
- Head over to wiki Link [`WIKI`](https://github.com/JaKooLit/Hyprland-Dots/wiki)
#### ⌨ Keybinds #### ⌨ Keybinds
- Keybinds [`CLICK`](https://github.com/JaKooLit/Hyprland-Dots/wiki/Keybinds) - Keybinds [`CLICK`](https://github.com/JaKooLit/Hyprland-Dots/wiki/Keybinds)
> [!TIP]
> KooL Hyprland has a searchable keybind function via rofi. (SUPER SHIFT K) or right click the `HINTS` waybar button
#### 🙋 👋 Having issues or questions? #### 🙋 👋 Having issues or questions?
- for the install part, kindly open issue on this repo - for the install part, kindly open issue on this repo
- for the Pre-configured Hyprland dots / configuration, submit issue [`here`](https://github.com/JaKooLit/Hyprland-Dots/issues) - for the Pre-configured Hyprland dots / configuration, submit issue [`here`](https://github.com/JaKooLit/Hyprland-Dots/issues)
@ -291,6 +260,9 @@ env = GBM_BACKEND,nvidia-drm
env = WLR_RENDERER_ALLOW_SOFTWARE,1 env = WLR_RENDERER_ALLOW_SOFTWARE,1
``` ```
#### 🫥 Improving performance for Older Nvidia Cards using driver 470
- [`SEE HERE`](https://github.com/JaKooLit/Hyprland-Dots/discussions/123#discussion-6035205)
#### ❗ other known issues #### ❗ other known issues
> [!NOTE] > [!NOTE]

View File

@ -16,7 +16,8 @@ source $ZSH/oh-my-zsh.sh
# Display Pokemon-colorscripts # Display Pokemon-colorscripts
# Project page: https://gitlab.com/phoneybadger/pokemon-colorscripts#on-other-distros-and-macos # Project page: https://gitlab.com/phoneybadger/pokemon-colorscripts#on-other-distros-and-macos
#pokemon-colorscripts --no-title -s -r #pokemon-colorscripts --no-title -s -r #without fastfetch
#pokemon-colorscripts --no-title -s -r | fastfetch -c $HOME/.config/fastfetch/config-pokemon.jsonc --logo-type file-raw --logo-height 10 --logo-width 5 --logo -
# fastfetch. Will be disabled if above colorscript was chosen to install # fastfetch. Will be disabled if above colorscript was chosen to install
fastfetch -c $HOME/.config/fastfetch/config-compact.jsonc fastfetch -c $HOME/.config/fastfetch/config-compact.jsonc

View File

@ -0,0 +1,370 @@
# vim:ft=zsh ts=2 sw=2 sts=2
#
# agnoster's Theme - https://gist.github.com/3712874
# A Powerline-inspired theme for ZSH
#
# # README
#
# In order for this theme to render correctly, you will need a
# [Powerline-patched font](https://gist.github.com/1595572).
#
# In addition, I recommend the
# [Solarized theme](https://github.com/altercation/solarized/) and, if you're
# using it on Mac OS X, [iTerm 2](http://www.iterm2.com/) over Terminal.app -
# it has significantly better color fidelity.
#
# # Goals
#
# The aim of this theme is to only show you *relevant* information. Like most
# prompts, it will only show git information when in a git working directory.
# However, it goes a step further: everything from the current user and
# hostname to whether the last call exited with an error to whether background
# jobs are running in this shell will all be displayed automatically when
# appropriate.
### Segment drawing
# A few utility functions to make it easy and re-usable to draw segmented prompts
CURRENT_BG='NONE'
# Characters
SEGMENT_SEPARATOR="\ue0b0"
PLUSMINUS="\u00b1"
BRANCH="\ue0a0"
DETACHED="\u27a6"
CROSS="\u2718"
LIGHTNING="\u26a1"
GEAR="\u2699"
# Begin a segment
# Takes two arguments, background and foreground. Both can be omitted,
# rendering default background/foreground.
prompt_segment() {
local bg fg
[[ -n $1 ]] && bg="%K{$1}" || bg="%k"
[[ -n $2 ]] && fg="%F{$2}" || fg="%f"
if [[ $CURRENT_BG != 'NONE' && $1 != $CURRENT_BG ]]; then
print -n " %{$bg%F{$CURRENT_BG}%}$SEGMENT_SEPARATOR%{$fg%} "
else
print -n "%{$bg%}%{$fg%} "
fi
CURRENT_BG=$1
[[ -n $3 ]] && print -n $3
}
# End the prompt, closing any open segments
prompt_end() {
if [[ -n $CURRENT_BG ]]; then
print -n " %{%k%F{$CURRENT_BG}%}$SEGMENT_SEPARATOR"
else
print -n "%{%k%}"
fi
print -n "%{%f%}"
CURRENT_BG=''
}
### Prompt components
# Each component will draw itself, and hide itself if no information needs to be shown
# Context: user@hostname (who am I and where am I)
prompt_context() {
if [[ -n "$SSH_CLIENT" ]]; then
prompt_segment magenta white "%{$fg_bold[white]%(!.%{%F{white}%}.)%}$USER@%m%{$fg_no_bold[white]%}"
else
prompt_segment yellow magenta "%{$fg_bold[magenta]%(!.%{%F{magenta}%}.)%}@$USER%{$fg_no_bold[magenta]%}"
fi
}
# Battery Level
prompt_battery() {
HEART='♥ '
if [[ $(uname) == "Darwin" ]] ; then
function battery_is_charging() {
[ $(ioreg -rc AppleSmartBattery | grep -c '^.*"ExternalConnected"\ =\ No') -eq 1 ]
}
function battery_pct() {
local smart_battery_status="$(ioreg -rc "AppleSmartBattery")"
typeset -F maxcapacity=$(echo $smart_battery_status | grep '^.*"MaxCapacity"\ =\ ' | sed -e 's/^.*"MaxCapacity"\ =\ //')
typeset -F currentcapacity=$(echo $smart_battery_status | grep '^.*"CurrentCapacity"\ =\ ' | sed -e 's/^.*CurrentCapacity"\ =\ //')
integer i=$(((currentcapacity/maxcapacity) * 100))
echo $i
}
function battery_pct_remaining() {
if battery_is_charging ; then
battery_pct
else
echo "External Power"
fi
}
function battery_time_remaining() {
local smart_battery_status="$(ioreg -rc "AppleSmartBattery")"
if [[ $(echo $smart_battery_status | grep -c '^.*"ExternalConnected"\ =\ No') -eq 1 ]] ; then
timeremaining=$(echo $smart_battery_status | grep '^.*"AvgTimeToEmpty"\ =\ ' | sed -e 's/^.*"AvgTimeToEmpty"\ =\ //')
if [ $timeremaining -gt 720 ] ; then
echo "::"
else
echo "~$((timeremaining / 60)):$((timeremaining % 60))"
fi
fi
}
b=$(battery_pct_remaining)
if [[ $(ioreg -rc AppleSmartBattery | grep -c '^.*"ExternalConnected"\ =\ No') -eq 1 ]] ; then
if [ $b -gt 50 ] ; then
prompt_segment green white
elif [ $b -gt 20 ] ; then
prompt_segment yellow white
else
prompt_segment red white
fi
echo -n "%{$fg_bold[white]%}$HEART$(battery_pct_remaining)%%%{$fg_no_bold[white]%}"
fi
fi
if [[ $(uname) == "Linux" && -d /sys/module/battery ]] ; then
function battery_is_charging() {
! [[ $(acpi 2&>/dev/null | grep -c '^Battery.*Discharging') -gt 0 ]]
}
function battery_pct() {
if (( $+commands[acpi] )) ; then
echo "$(acpi | cut -f2 -d ',' | tr -cd '[:digit:]')"
fi
}
function battery_pct_remaining() {
if [ ! $(battery_is_charging) ] ; then
battery_pct
else
echo "External Power"
fi
}
function battery_time_remaining() {
if [[ $(acpi 2&>/dev/null | grep -c '^Battery.*Discharging') -gt 0 ]] ; then
echo $(acpi | cut -f3 -d ',')
fi
}
b=$(battery_pct_remaining)
if [[ $(acpi 2&>/dev/null | grep -c '^Battery.*Discharging') -gt 0 ]] ; then
if [ $b -gt 40 ] ; then
prompt_segment green white
elif [ $b -gt 20 ] ; then
prompt_segment yellow white
else
prompt_segment red white
fi
echo -n "%{$fg_bold[white]%}$HEART$(battery_pct_remaining)%%%{$fg_no_bold[white]%}"
fi
fi
}
# Git: branch/detached head, dirty status
prompt_git() {
#«»±˖˗‑‐‒ ━ ✚‐↔←↑↓→↭⇎⇔⋆━◂▸◄►◆☀★☗☊✔✖❮❯⚑⚙
local PL_BRANCH_CHAR
() {
local LC_ALL="" LC_CTYPE="en_US.UTF-8"
PL_BRANCH_CHAR="$BRANCH"
}
local ref dirty mode repo_path clean has_upstream
local modified untracked added deleted tagged stashed
local ready_commit git_status bgclr fgclr
local commits_diff commits_ahead commits_behind has_diverged to_push to_pull
repo_path=$(git rev-parse --git-dir 2>/dev/null)
if $(git rev-parse --is-inside-work-tree >/dev/null 2>&1); then
dirty=$(parse_git_dirty)
git_status=$(git status --porcelain 2> /dev/null)
ref=$(git symbolic-ref HEAD 2> /dev/null) || ref="➦ $(git rev-parse --short HEAD 2> /dev/null)"
if [[ -n $dirty ]]; then
clean=''
bgclr='yellow'
fgclr='magenta'
else
clean=' ✔'
bgclr='green'
fgclr='white'
fi
local upstream=$(git rev-parse --symbolic-full-name --abbrev-ref @{upstream} 2> /dev/null)
if [[ -n "${upstream}" && "${upstream}" != "@{upstream}" ]]; then has_upstream=true; fi
local current_commit_hash=$(git rev-parse HEAD 2> /dev/null)
local number_of_untracked_files=$(\grep -c "^??" <<< "${git_status}")
# if [[ $number_of_untracked_files -gt 0 ]]; then untracked=" $number_of_untracked_files◆"; fi
if [[ $number_of_untracked_files -gt 0 ]]; then untracked=" $number_of_untracked_files☀"; fi
local number_added=$(\grep -c "^A" <<< "${git_status}")
if [[ $number_added -gt 0 ]]; then added=" $number_added✚"; fi
local number_modified=$(\grep -c "^.M" <<< "${git_status}")
if [[ $number_modified -gt 0 ]]; then
modified=" $number_modified●"
bgclr='red'
fgclr='white'
fi
local number_added_modified=$(\grep -c "^M" <<< "${git_status}")
local number_added_renamed=$(\grep -c "^R" <<< "${git_status}")
if [[ $number_modified -gt 0 && $number_added_modified -gt 0 ]]; then
modified="$modified$((number_added_modified+number_added_renamed))±"
elif [[ $number_added_modified -gt 0 ]]; then
modified=" ●$((number_added_modified+number_added_renamed))±"
fi
local number_deleted=$(\grep -c "^.D" <<< "${git_status}")
if [[ $number_deleted -gt 0 ]]; then
deleted=" $number_deleted"
bgclr='red'
fgclr='white'
fi
local number_added_deleted=$(\grep -c "^D" <<< "${git_status}")
if [[ $number_deleted -gt 0 && $number_added_deleted -gt 0 ]]; then
deleted="$deleted$number_added_deleted±"
elif [[ $number_added_deleted -gt 0 ]]; then
deleted=" $number_added_deleted±"
fi
local tag_at_current_commit=$(git describe --exact-match --tags $current_commit_hash 2> /dev/null)
if [[ -n $tag_at_current_commit ]]; then tagged=" ☗$tag_at_current_commit "; fi
local number_of_stashes="$(git stash list -n1 2> /dev/null | wc -l)"
if [[ $number_of_stashes -gt 0 ]]; then
stashed=" ${number_of_stashes##*( )}⚙"
bgclr='magenta'
fgclr='white'
fi
if [[ $number_added -gt 0 || $number_added_modified -gt 0 || $number_added_deleted -gt 0 ]]; then ready_commit=' ⚑'; fi
local upstream_prompt=''
if [[ $has_upstream == true ]]; then
commits_diff="$(git log --pretty=oneline --topo-order --left-right ${current_commit_hash}...${upstream} 2> /dev/null)"
commits_ahead=$(\grep -c "^<" <<< "$commits_diff")
commits_behind=$(\grep -c "^>" <<< "$commits_diff")
upstream_prompt="$(git rev-parse --symbolic-full-name --abbrev-ref @{upstream} 2> /dev/null)"
upstream_prompt=$(sed -e 's/\/.*$/ ☊ /g' <<< "$upstream_prompt")
fi
has_diverged=false
if [[ $commits_ahead -gt 0 && $commits_behind -gt 0 ]]; then has_diverged=true; fi
if [[ $has_diverged == false && $commits_ahead -gt 0 ]]; then
if [[ $bgclr == 'red' || $bgclr == 'magenta' ]] then
to_push=" $fg_bold[white]↑$commits_ahead$fg_bold[$fgclr]"
else
to_push=" $fg_bold[black]↑$commits_ahead$fg_bold[$fgclr]"
fi
fi
if [[ $has_diverged == false && $commits_behind -gt 0 ]]; then to_pull=" $fg_bold[magenta]↓$commits_behind$fg_bold[$fgclr]"; fi
if [[ -e "${repo_path}/BISECT_LOG" ]]; then
mode=" <B>"
elif [[ -e "${repo_path}/MERGE_HEAD" ]]; then
mode=" >M<"
elif [[ -e "${repo_path}/rebase" || -e "${repo_path}/rebase-apply" || -e "${repo_path}/rebase-merge" || -e "${repo_path}/../.dotest" ]]; then
mode=" >R>"
fi
prompt_segment $bgclr $fgclr
print -n "%{$fg_bold[$fgclr]%}${ref/refs\/heads\//$PL_BRANCH_CHAR $upstream_prompt}${mode}$to_push$to_pull$clean$tagged$stashed$untracked$modified$deleted$added$ready_commit%{$fg_no_bold[$fgclr]%}"
fi
}
prompt_hg() {
local rev status
if $(hg id >/dev/null 2>&1); then
if $(hg prompt >/dev/null 2>&1); then
if [[ $(hg prompt "{status|unknown}") = "?" ]]; then
# if files are not added
prompt_segment red white
st='±'
elif [[ -n $(hg prompt "{status|modified}") ]]; then
# if any modification
prompt_segment yellow black
st='±'
else
# if working copy is clean
prompt_segment green black
fi
print -n $(hg prompt "☿ {rev}@{branch}") $st
else
st=""
rev=$(hg id -n 2>/dev/null | sed 's/[^-0-9]//g')
branch=$(hg id -b 2>/dev/null)
if `hg st | grep -q "^\?"`; then
prompt_segment red black
st='±'
elif `hg st | grep -q "^[MA]"`; then
prompt_segment yellow black
st='±'
else
prompt_segment green black
fi
print -n "☿ $rev@$branch" $st
fi
fi
}
# Dir: current working directory
prompt_dir() {
prompt_segment cyan white "%{$fg_bold[white]%}%~%{$fg_no_bold[white]%}"
}
# Virtualenv: current working virtualenv
prompt_virtualenv() {
local virtualenv_path="$VIRTUAL_ENV"
if [[ -n $virtualenv_path && -n $VIRTUAL_ENV_DISABLE_PROMPT ]]; then
prompt_segment blue black "(`basename $virtualenv_path`)"
fi
}
prompt_time() {
prompt_segment blue white "%{$fg_bold[white]%}%D{%a %e %b - %H:%M}%{$fg_no_bold[white]%}"
}
# Status:
# - was there an error
# - am I root
# - are there background jobs?
prompt_status() {
local symbols
symbols=()
[[ $RETVAL -ne 0 ]] && symbols+="%{%F{red}%}$CROSS"
[[ $UID -eq 0 ]] && symbols+="%{%F{yellow}%}$LIGHTNING"
[[ $(jobs -l | wc -l) -gt 0 ]] && symbols+="%{%F{cyan}%}$GEAR"
[[ -n "$symbols" ]] && prompt_segment black default "$symbols"
}
## Main prompt
build_prompt() {
RETVAL=$?
print -n "\n"
prompt_status
#prompt_battery
prompt_time
prompt_virtualenv
prompt_dir
prompt_git
prompt_hg
prompt_end
CURRENT_BG='NONE'
print -n "\n"
prompt_context
prompt_end
}
PROMPT='%{%f%b%k%}$(build_prompt) '

View File

@ -0,0 +1,392 @@
###
### You can re-define the following variables in your .zshrc file
### in order to customize the appearance of the prompt
###
# The indentation of the rprompt
ZLE_RPROMPT_INDENT=${ZLE_RPROMPT_INDENT:-0}
# Whether to use oh-my-zsh's git-prompt plugin
# or the builtin logic written in this file
ZSH_ANTARES_USE_OHMYZSH_GIT_PROMPT=""
# Whether to gather additional details about the git status
# This option only applies when using the builtin logic
# Usefull when dealing with huge repositories to speed things up
ZSH_ANTARES_USE_LIGHT_GIT_MODE=""
# The colors to use for the various elements of the prompt
ZSH_ANTARES_FG_EXECTIME="#dd00ff"
ZSH_ANTARES_FG_ERRVAL="#c31a1a"
ZSH_ANTARES_FG_DECO="#ffffff"
ZSH_ANTARES_FG_PWD_OK="#ffffff"
ZSH_ANTARES_BG_PWD_OK="#0055ff"
ZSH_ANTARES_FG_PWD_ERR="#ffffff"
ZSH_ANTARES_BG_PWD_ERR="#c31a1a"
ZSH_ANTARES_FG_GIT_INIT="#000000"
ZSH_ANTARES_BG_GIT_INIT="#b5f3a1"
ZSH_ANTARES_FG_GIT_BARE="#000000"
ZSH_ANTARES_BG_GIT_BARE="#b07a4e"
ZSH_ANTARES_FG_GIT_BRANCH="#000000"
ZSH_ANTARES_BG_GIT_BRANCH="#47cc2b"
ZSH_ANTARES_FG_GIT_DETACH="#000000"
ZSH_ANTARES_BG_GIT_DETACH="#eeaa22"
ZSH_ANTARES_FG_GIT_CONFLICT="#000000"
ZSH_ANTARES_BG_GIT_CONFLICT="#c31a1a"
ZSH_ANTARES_FG_GIT_AHEAD="#cfcfcf"
ZSH_ANTARES_FG_GIT_BEHIND="#9f9f9f"
ZSH_ANTARES_FG_GIT_STAGED="#6cc6ee"
ZSH_ANTARES_FG_GIT_ADDED="#04c304"
ZSH_ANTARES_FG_GIT_DELETED="#e7165a"
ZSH_ANTARES_FG_GIT_CHANGED="#ee9931"
ZSH_ANTARES_FG_GIT_CONFLICTS="#ff0000"
ZSH_ANTARES_FG_GIT_UNTRACKED="#bbffff"
ZSH_ANTARES_FG_GIT_STASHED="#eaa0ff"
ZSH_ANTARES_FG_GIT_TAG="#ffffff"
ZSH_ANTARES_FG_JOBS="#9f9f9f"
ZSH_ANTARES_FG_PRIVILEDGES="#ffdd44"
# The characters (or strings, by will) to use for some of the elements
ZSH_ANTARES_STR_GIT_BARE="⛁"
ZSH_ANTARES_STR_GIT_AHEAD="↑"
ZSH_ANTARES_STR_GIT_BEHIND="↓"
ZSH_ANTARES_STR_GIT_STAGED="●"
ZSH_ANTARES_STR_GIT_ADDED="✚"
ZSH_ANTARES_STR_GIT_DELETED="━"
ZSH_ANTARES_STR_GIT_CHANGED="✱"
ZSH_ANTARES_STR_GIT_CONFLICTS="✖"
ZSH_ANTARES_STR_GIT_UNTRACKED="❍"
ZSH_ANTARES_STR_GIT_STASHED="⚑"
ZSH_ANTARES_STR_GIT_TAG="🏲"
ZSH_ANTARES_STR_JOBS="⚙"
ZSH_ANTARES_STR_ROOT="#"
ZSH_ANTARES_STR_USER="$"
# The path expansion to use to display the pwd
ZSH_ANTARES_PATHVAR='%~'
# The minimum amount of time (in seconds) a command shall take to complete
# in order to display the execution time in the prompt
ZSH_ANTARES_MIN_EXEC_TIME=0
# The control character used to insert a new line
# You shouldn't edit this variable, but if you really want to...
ZSH_ANTARES_LINEFEED=$'\n'
###
### End of the re-definable section
###
antares_update_git_status()
{
ZSH_ANTARES_GIT_STATUS=""
ZSH_ANTARES_GIT_IN_WORKING_TREE=0
ZSH_ANTARES_GIT_IS_INIT_REPO=0
ZSH_ANTARES_GIT_IS_BARE_REPO=0
ZSH_ANTARES_GIT_IS_DETACHED_HEAD=0
ZSH_ANTARES_GIT_HAS_CONFLICTS=0
ZSH_ANTARES_GIT_HAS_TAGS=0
ZSH_ANTARES_GIT_TAG=""
if ( $(git rev-parse --is-inside-work-tree 1>/dev/null 2>/dev/null) )
then
ZSH_ANTARES_GIT_IN_WORKING_TREE=1
private branch_name="$(git branch --show-current)"
if [ -n "$branch_name" ]
then
if [ -z "$ZSH_ANTARES_USE_OHMYZSH_GIT_PROMPT" ]
then
GIT_BRANCH="$branch_name"
fi
if ( ! $(git rev-parse --verify HEAD 1>/dev/null 2>/dev/null) )
then
ZSH_ANTARES_GIT_IS_INIT_REPO=1
fi
if [ $(git rev-parse --is-bare-repository) = "true" ]
then
ZSH_ANTARES_GIT_IS_BARE_REPO=1
GIT_BRANCH="$ZSH_ANTARES_STR_GIT_BARE"
fi
else
ZSH_ANTARES_GIT_IS_DETACHED_HEAD=1
if [ -z "$ZSH_ANTARES_USE_OHMYZSH_GIT_PROMPT" ]
then
GIT_BRANCH="$(git rev-parse --short HEAD)"
if [ -z "$ZSH_ANTARES_USE_LIGHT_GIT_MODE" ]
then
private git_tag="$(git tag --points-at=HEAD)"
if [ -n "$git_tag" ]
then
ZSH_ANTARES_GIT_HAS_TAGS=1
private n_tags="$(echo "$git_tag" | wc -l)"
if (( n_tags == 1 ))
then
ZSH_ANTARES_GIT_TAG=" $ZSH_ANTARES_STR_GIT_TAG $git_tag"
elif (( n_tags > 1 ))
then
ZSH_ANTARES_GIT_TAG=" $ZSH_ANTARES_STR_GIT_TAG $n_tags"
else
fi
fi
fi
fi
fi
else
antares_reset_git_info
return
fi
if (( ZSH_ANTARES_GIT_IS_BARE_REPO ))
then
antares_reset_git_counts
GIT_AHEAD=$(git rev-list --left-only HEAD..FETCH_HEAD --count)
GIT_BEHIND=$(git rev-list --right-only HEAD..FETCH_HEAD --count)
return
fi
if [ -n "$ZSH_ANTARES_USE_OHMYZSH_GIT_PROMPT" ]
then
GIT_ADDED=0
elif [ -n "$ZSH_ANTARES_USE_LIGHT_GIT_MODE" ]
then
antares_reset_git_counts
return
else
private git_status="$(git status -sb)"
if [ -n "$git_status" ]
then
GIT_STAGED=$(echo $git_status | grep '^[AMD]. ' | wc -l)
GIT_ADDED=$(echo $git_status | grep '^A ' | wc -l)
GIT_DELETED=$(echo $git_status | grep -E '^(D |.D) ' | wc -l)
GIT_CHANGED=$(echo $git_status | grep -E '^(M |.M) ' | wc -l)
GIT_CONFLICTS=$(echo $git_status | grep '^U. ' | wc -l)
GIT_UNTRACKED=$(echo $git_status | grep '^?? ' | wc -l)
GIT_STASHED=$(git stash list | wc -l)
if (( ZSH_ANTARES_GIT_IS_DETACHED_HEAD ))
then
GIT_AHEAD=0
GIT_BEHIND=0
elif (( ! ZSH_ANTARES_GIT_IS_INIT_REPO ))
then
private left_right=$(echo $git_status | grep '^## ' | cut -d" " -f2)
GIT_AHEAD=$(git rev-list --left-only $left_right --count)
GIT_BEHIND=$(git rev-list --right-only $left_right --count)
fi
fi
fi
ZSH_ANTARES_GIT_HAS_CONFLICTS=$(( GIT_CONFLICTS > 0 ))
}
antares_reset_git_info()
{
if [ -z "$ZSH_ANTARES_USE_OHMYZSH_GIT_PROMPT" ]
then
GIT_BRANCH=""
fi
antares_reset_git_counts
}
antares_reset_git_counts()
{
if [ -n "$ZSH_ANTARES_USE_OHMYZSH_GIT_PROMPT" ]
then
GIT_ADDED=0
else
GIT_AHEAD=0
GIT_BEHIND=0
GIT_STAGED=0
GIT_ADDED=0
GIT_DELETED=0
GIT_CHANGED=0
GIT_CONFLICTS=0
GIT_UNTRACKED=0
GIT_STASHED=0
fi
}
antares_update_prompt()
{
ZSH_ANTARES_RETURN=""
if [ -n "$ZSH_ANTARES_EXEC_FLAG" ]
then
if (( ZSH_ANTARES_MIN_EXEC_TIME >= 0 ))
then
private exec_time=$(( SECONDS - ZSH_ANTARES_EXEC_START ))
if (( exec_time >= ZSH_ANTARES_MIN_EXEC_TIME ))
then
ZSH_ANTARES_RETURN+="%F{$ZSH_ANTARES_FG_EXECTIME}%B⤷%b $exec_time%f"
fi
fi
if [[ "$ZSH_ANTARES_ERR_CODE" != "0" ]]
then
if [ -z "$ZSH_ANTARES_RETURN" ]
then
ZSH_ANTARES_RETURN+="%F{$ZSH_ANTARES_FG_ERRVAL}%B⤷%b%f"
fi
ZSH_ANTARES_RETURN+=" %F{$ZSH_ANTARES_FG_ERRVAL}✘%B${ZSH_ANTARES_ERR_CODE}%b%f"
fi
[ -n "$ZSH_ANTARES_RETURN" ] && ZSH_ANTARES_RETURN+="$ZSH_ANTARES_LINEFEED"
fi
ZSH_ANTARES_FILLER=""
private fillchar=" "
private width=$(( COLUMNS - ${ZLE_RPROMPT_INDENT:-1} ))
private decosize=7
private pwdsize=${#${(%):-$ZSH_ANTARES_PATHVAR}}
private pwdcut=""
private gitsize=${#${(%):-$GIT_BRANCH$ZSH_ANTARES_GIT_TAG}}
private gitcut=""
if (( pwdsize + gitsize + (decosize * 2) > width )); then
private half_width=$(( width / 2 ))
private pwd_over_half=$(( (pwdsize + decosize) > half_width ))
private git_over_half=$(( (gitsize + decosize) > half_width ))
if (( pwd_over_half > 0 )) && (( git_over_half > 0 ))
then
(( pwdcut = half_width - decosize ))
(( gitcut = half_width - decosize ))
elif (( pwd_over_half > 0 ))
then
(( pwdcut = width - gitsize - (decosize * 2) ))
ZSH_ANTARES_FILLER="\${(l:$(( width - pwdcut - gitsize - (decosize * 2) ))::$fillchar:)}"
elif (( git_over_half > 0 ))
then
(( gitcut = width - pwdsize - (decosize * 2) ))
ZSH_ANTARES_FILLER="\${(l:$(( width - pwdsize - gitcut - (decosize * 2) ))::$fillchar:)}"
else
ZSH_ANTARES_FILLER="\${(l:$(( width - pwdsize - gitsize - (decosize * 2) ))::$fillchar:)}"
fi
else
ZSH_ANTARES_FILLER="\${(l:$(( width - pwdsize - gitsize - (decosize * 2) ))::$fillchar:)}"
fi
if [ -n "$ZSH_ANTARES_EXEC_FLAG" ]
then
private pwd_fg_color="%(?.${ZSH_ANTARES_FG_PWD_OK}.${ZSH_ANTARES_FG_PWD_ERR})"
private pwd_bg_color="%(?.${ZSH_ANTARES_BG_PWD_OK}.${ZSH_ANTARES_BG_PWD_ERR})"
else
private pwd_fg_color="$ZSH_ANTARES_FG_PWD_OK"
private pwd_bg_color="$ZSH_ANTARES_BG_PWD_OK"
fi
ZSH_ANTARES_PWD="%K{$pwd_bg_color}%F{$pwd_fg_color} %${pwdcut}<...<${ZSH_ANTARES_PATHVAR}%<< %f%k%F{$pwd_bg_color}▓▒░%f"
ZSH_ANTARES_GIT_BRANCH=""
if (( ZSH_ANTARES_GIT_IN_WORKING_TREE ))
then
if (( ZSH_ANTARES_GIT_HAS_CONFLICTS ))
then
ZSH_ANTARES_GIT_BRANCH+="%F{$ZSH_ANTARES_BG_GIT_CONFLICT}░▒▓%f%K{$ZSH_ANTARES_BG_GIT_CONFLICT}%F{$ZSH_ANTARES_FG_GIT_CONFLICT}"
elif (( ZSH_ANTARES_GIT_IS_DETACHED_HEAD ))
then
ZSH_ANTARES_GIT_BRANCH+="%F{$ZSH_ANTARES_BG_GIT_DETACH}░▒▓%f%K{$ZSH_ANTARES_BG_GIT_DETACH}%F{$ZSH_ANTARES_FG_GIT_DETACH}"
if (( ZSH_ANTARES_GIT_HAS_TAGS ))
then
GIT_BRANCH+="%F{$ZSH_ANTARES_FG_GIT_TAG}${ZSH_ANTARES_GIT_TAG}%f"
fi
elif (( ZSH_ANTARES_GIT_IS_BARE_REPO ))
then
ZSH_ANTARES_GIT_BRANCH+="%F{$ZSH_ANTARES_BG_GIT_BARE}░▒▓%f%K{$ZSH_ANTARES_BG_GIT_BARE}%F{$ZSH_ANTARES_FG_GIT_BARE}"
elif (( ZSH_ANTARES_GIT_IS_INIT_REPO ))
then
ZSH_ANTARES_GIT_BRANCH+="%F{$ZSH_ANTARES_BG_GIT_INIT}░▒▓%f%K{$ZSH_ANTARES_BG_GIT_INIT}%F{$ZSH_ANTARES_FG_GIT_INIT}"
else
ZSH_ANTARES_GIT_BRANCH+="%F{$ZSH_ANTARES_BG_GIT_BRANCH}░▒▓%f%K{$ZSH_ANTARES_BG_GIT_BRANCH}%F{$ZSH_ANTARES_FG_GIT_BRANCH}"
fi
ZSH_ANTARES_GIT_BRANCH+=" %${gitcut}>...>$GIT_BRANCH%>> %f%k"
if [ -n "$ZSH_ANTARES_USE_LIGHT_GIT_MODE" ]
then
ZSH_ANTARES_GIT_BRANCH+="%F{$ZSH_ANTARES_FG_DECO}├╼%f"
else
ZSH_ANTARES_GIT_BRANCH+="%F{$ZSH_ANTARES_FG_DECO}├╮%f"
fi
fi
ZSH_ANTARES_JOBS="%(1j.%F{$ZSH_ANTARES_FG_JOBS}${ZSH_ANTARES_STR_JOBS}%j%f .)"
ZSH_ANTARES_PRIVILEDGES="%F{$ZSH_ANTARES_FG_PRIVILEDGES}%B%(!.${ZSH_ANTARES_STR_ROOT}.${ZSH_ANTARES_STR_USER})%b%f"
}
antares_update_rprompt()
{
ZSH_ANTARES_GIT_STATUS=""
[ -n "$ZSH_ANTARES_USE_LIGHT_GIT_MODE" ] && return
(( ZSH_ANTARES_GIT_IN_WORKING_TREE )) || return
if (( GIT_CONFLICTS > 0 ))
then
ZSH_ANTARES_GIT_STATUS+=" %F{$ZSH_ANTARES_FG_GIT_CONFLICTS}${ZSH_ANTARES_STR_GIT_CONFLICTS}${GIT_CONFLICTS}%f"
fi
if (( GIT_STAGED > 0 ))
then
ZSH_ANTARES_GIT_STATUS+=" %F{$ZSH_ANTARES_FG_GIT_STAGED}${ZSH_ANTARES_STR_GIT_STAGED}${GIT_STAGED}%f"
fi
if (( GIT_DELETED > 0 ))
then
ZSH_ANTARES_GIT_STATUS+=" %F{$ZSH_ANTARES_FG_GIT_DELETED}${ZSH_ANTARES_STR_GIT_DELETED}${GIT_DELETED}%f"
fi
if (( GIT_CHANGED > 0 ))
then
ZSH_ANTARES_GIT_STATUS+=" %F{$ZSH_ANTARES_FG_GIT_CHANGED}${ZSH_ANTARES_STR_GIT_CHANGED}${GIT_CHANGED}%f"
fi
if (( GIT_ADDED > 0 ))
then
ZSH_ANTARES_GIT_STATUS+=" %F{$ZSH_ANTARES_FG_GIT_ADDED}${ZSH_ANTARES_STR_GIT_ADDED}${GIT_ADDED}%f"
fi
if (( GIT_UNTRACKED > 0 ))
then
ZSH_ANTARES_GIT_STATUS+=" %F{$ZSH_ANTARES_FG_GIT_UNTRACKED}${ZSH_ANTARES_STR_GIT_UNTRACKED}${GIT_UNTRACKED}%f"
fi
if (( GIT_STASHED > 0 ))
then
ZSH_ANTARES_GIT_STATUS+=" %F{$ZSH_ANTARES_FG_GIT_STASHED}${ZSH_ANTARES_STR_GIT_STASHED}${GIT_STASHED}%f"
fi
if (( ! ZSH_ANTARES_GIT_IS_DETACHED_HEAD ))
then
private ahead_behind=""
if (( GIT_AHEAD > 0 ))
then
ahead_behind+="%F{$ZSH_ANTARES_FG_GIT_AHEAD}${ZSH_ANTARES_STR_GIT_AHEAD}${GIT_AHEAD}%f"
fi
if (( GIT_BEHIND > 0 ))
then
ahead_behind+="%F{$ZSH_ANTARES_FG_GIT_BEHIND}${ZSH_ANTARES_STR_GIT_BEHIND}${GIT_BEHIND}%f"
fi
if [ -n "$ahead_behind" ]
then
ZSH_ANTARES_GIT_STATUS+=" $ahead_behind"
fi
fi
ZSH_ANTARES_GIT_STATUS+=" %F{$ZSH_ANTARES_FG_DECO}╾─╯%f"
}
antares_precmd()
{
ZSH_ANTARES_ERR_CODE="$?"
antares_update_git_status
antares_update_prompt
antares_update_rprompt
ZSH_ANTARES_EXEC_FLAG=""
}
antares_preexec()
{
ZSH_ANTARES_EXEC_FLAG="+"
ZSH_ANTARES_EXEC_START=$SECONDS
}
autoload -U add-zsh-hook
add-zsh-hook precmd antares_precmd
add-zsh-hook preexec antares_preexec
PROMPT='${ZSH_ANTARES_RETURN}\
%F{$ZSH_ANTARES_FG_DECO}╭┤%f${ZSH_ANTARES_PWD}${(e)ZSH_ANTARES_FILLER}${ZSH_ANTARES_GIT_BRANCH}
%F{$ZSH_ANTARES_FG_DECO}╰─╼%f ${ZSH_ANTARES_JOBS}${ZSH_ANTARES_PRIVILEDGES} '
RPROMPT='${ZSH_ANTARES_GIT_STATUS}'

View File

@ -0,0 +1,696 @@
# README
#
# In order for this theme to render correctly, you will need a
# [Powerline-patched font](https://github.com/Lokaltog/powerline-fonts).
#
# In addition, I recommend the
# [Tomorrow Night theme](https://github.com/chriskempson/tomorrow-theme) and, if
# you're using it on Mac OS X, [iTerm 2](http://www.iterm2.com/) over
# Terminal.app - it has significantly better color fidelity.
# ------------------------------------------------------------------------------
# CONFIGURATION
# The default configuration, that can be overwrite in your .zshrc file
# ------------------------------------------------------------------------------
VIRTUAL_ENV_DISABLE_PROMPT=true
# Define order and content of prompt
if [ ! -n "${BULLETTRAIN_PROMPT_ORDER+1}" ]; then
BULLETTRAIN_PROMPT_ORDER=(
time
status
custom
context
dir
screen
perl
ruby
virtualenv
nvm
aws
go
rust
elixir
git
hg
cmd_exec_time
)
fi
# PROMPT
if [ ! -n "${BULLETTRAIN_PROMPT_CHAR+1}" ]; then
BULLETTRAIN_PROMPT_CHAR="\$"
fi
if [ ! -n "${BULLETTRAIN_PROMPT_ROOT+1}" ]; then
BULLETTRAIN_PROMPT_ROOT=true
fi
if [ ! -n "${BULLETTRAIN_PROMPT_SEPARATE_LINE+1}" ]; then
BULLETTRAIN_PROMPT_SEPARATE_LINE=true
fi
if [ ! -n "${BULLETTRAIN_PROMPT_ADD_NEWLINE+1}" ]; then
BULLETTRAIN_PROMPT_ADD_NEWLINE=true
fi
# STATUS
if [ ! -n "${BULLETTRAIN_STATUS_EXIT_SHOW+1}" ]; then
BULLETTRAIN_STATUS_EXIT_SHOW=false
fi
if [ ! -n "${BULLETTRAIN_STATUS_BG+1}" ]; then
BULLETTRAIN_STATUS_BG=green
fi
if [ ! -n "${BULLETTRAIN_STATUS_ERROR_BG+1}" ]; then
BULLETTRAIN_STATUS_ERROR_BG=red
fi
if [ ! -n "${BULLETTRAIN_STATUS_FG+1}" ]; then
BULLETTRAIN_STATUS_FG=white
fi
# TIME
if [ ! -n "${BULLETTRAIN_TIME_BG+1}" ]; then
BULLETTRAIN_TIME_BG=white
fi
if [ ! -n "${BULLETTRAIN_TIME_FG+1}" ]; then
BULLETTRAIN_TIME_FG=black
fi
# CUSTOM
if [ ! -n "${BULLETTRAIN_CUSTOM_MSG+1}" ]; then
BULLETTRAIN_CUSTOM_MSG=false
fi
if [ ! -n "${BULLETTRAIN_CUSTOM_BG+1}" ]; then
BULLETTRAIN_CUSTOM_BG=black
fi
if [ ! -n "${BULLETTRAIN_CUSTOM_FG+1}" ]; then
BULLETTRAIN_CUSTOM_FG=default
fi
# VIRTUALENV
if [ ! -n "${BULLETTRAIN_VIRTUALENV_BG+1}" ]; then
BULLETTRAIN_VIRTUALENV_BG=yellow
fi
if [ ! -n "${BULLETTRAIN_VIRTUALENV_FG+1}" ]; then
BULLETTRAIN_VIRTUALENV_FG=white
fi
if [ ! -n "${BULLETTRAIN_VIRTUALENV_PREFIX+1}" ]; then
BULLETTRAIN_VIRTUALENV_PREFIX=🐍
fi
# NVM
if [ ! -n "${BULLETTRAIN_NVM_BG+1}" ]; then
BULLETTRAIN_NVM_BG=green
fi
if [ ! -n "${BULLETTRAIN_NVM_FG+1}" ]; then
BULLETTRAIN_NVM_FG=white
fi
if [ ! -n "${BULLETTRAIN_NVM_PREFIX+1}" ]; then
BULLETTRAIN_NVM_PREFIX="⬡ "
fi
# AWS
if [ ! -n "${BULLETTRAIN_AWS_BG+1}" ]; then
BULLETTRAIN_AWS_BG=yellow
fi
if [ ! -n "${BULLETTRAIN_AWS_FG+1}" ]; then
BULLETTRAIN_AWS_FG=black
fi
if [ ! -n "${BULLETTRAIN_AWS_PREFIX+1}" ]; then
BULLETTRAIN_AWS_PREFIX="☁️"
fi
# RUBY
if [ ! -n "${BULLETTRAIN_RUBY_BG+1}" ]; then
BULLETTRAIN_RUBY_BG=red
fi
if [ ! -n "${BULLETTRAIN_RUBY_FG+1}" ]; then
BULLETTRAIN_RUBY_FG=white
fi
if [ ! -n "${BULLETTRAIN_RUBY_PREFIX+1}" ]; then
BULLETTRAIN_RUBY_PREFIX=♦️
fi
# Go
if [ ! -n "${BULLETTRAIN_GO_BG+1}" ]; then
BULLETTRAIN_GO_BG=cyan
fi
if [ ! -n "${BULLETTRAIN_GO_FG+1}" ]; then
BULLETTRAIN_GO_FG=white
fi
if [ ! -n "${BULLETTRAIN_GO_PREFIX+1}" ]; then
BULLETTRAIN_GO_PREFIX="go"
fi
# Rust
if [ ! -n "${BULLETTRAIN_RUST_BG+1}" ]; then
BULLETTRAIN_RUST_BG=black
fi
if [ ! -n "${BULLETTRAIN_RUST_FG+1}" ]; then
BULLETTRAIN_RUST_FG=white
fi
if [ ! -n "${BULLETTRAIN_RUST_PREFIX+1}" ]; then
BULLETTRAIN_RUST_PREFIX="🦀"
fi
# Kubernetes Context
if [ ! -n "${BULLETTRAIN_KCTX_BG+1}" ]; then
BULLETTRAIN_KCTX_BG=yellow
fi
if [ ! -n "${BULLETTRAIN_KCTX_FG+1}" ]; then
BULLETTRAIN_KCTX_FG=white
fi
if [ ! -n "${BULLETTRAIN_KCTX_PREFIX+1}" ]; then
BULLETTRAIN_KCTX_PREFIX="⎈"
fi
if [ ! -n "${BULLETTRAIN_KCTX_KCONFIG+1}" ]; then
BULLETTRAIN_KCTX_KCONFIG="${HOME}/.kube/config"
fi
if [ ! -n "${BULLETTRAIN_KCTX_KUBECTL+1}" ]; then
BULLETTRAIN_KCTX_KUBECTL="true"
fi
if [ ! -n "${BULLETTRAIN_KCTX_NAMESPACE+1}" ]; then
BULLETTRAIN_KCTX_NAMESPACE="true"
fi
# ELIXIR
if [ ! -n "${BULLETTRAIN_ELIXIR_BG+1}" ]; then
BULLETTRAIN_ELIXIR_BG=magenta
fi
if [ ! -n "${BULLETTRAIN_ELIXIR_FG+1}" ]; then
BULLETTRAIN_ELIXIR_FG=white
fi
if [ ! -n "${BULLETTRAIN_ELIXIR_PREFIX+1}" ]; then
BULLETTRAIN_ELIXIR_PREFIX="💧"
fi
# DIR
if [ ! -n "${BULLETTRAIN_DIR_BG+1}" ]; then
BULLETTRAIN_DIR_BG=blue
fi
if [ ! -n "${BULLETTRAIN_DIR_FG+1}" ]; then
BULLETTRAIN_DIR_FG=white
fi
if [ ! -n "${BULLETTRAIN_DIR_CONTEXT_SHOW+1}" ]; then
BULLETTRAIN_DIR_CONTEXT_SHOW=false
fi
if [ ! -n "${BULLETTRAIN_DIR_EXTENDED+1}" ]; then
BULLETTRAIN_DIR_EXTENDED=1
fi
# GIT
if [ ! -n "${BULLETTRAIN_GIT_COLORIZE_DIRTY+1}" ]; then
BULLETTRAIN_GIT_COLORIZE_DIRTY=false
fi
if [ ! -n "${BULLETTRAIN_GIT_COLORIZE_DIRTY_FG_COLOR+1}" ]; then
BULLETTRAIN_GIT_COLORIZE_DIRTY_FG_COLOR=black
fi
if [ ! -n "${BULLETTRAIN_GIT_COLORIZE_DIRTY_BG_COLOR+1}" ]; then
BULLETTRAIN_GIT_COLORIZE_DIRTY_BG_COLOR=yellow
fi
if [ ! -n "${BULLETTRAIN_GIT_BG+1}" ]; then
BULLETTRAIN_GIT_BG=white
fi
if [ ! -n "${BULLETTRAIN_GIT_FG+1}" ]; then
BULLETTRAIN_GIT_FG=black
fi
if [ ! -n "${BULLETTRAIN_GIT_EXTENDED+1}" ]; then
BULLETTRAIN_GIT_EXTENDED=true
fi
if [ ! -n "${BULLETTRAIN_GIT_PROMPT_CMD+1}" ]; then
BULLETTRAIN_GIT_PROMPT_CMD="\$(git_prompt_info)"
fi
# PERL
if [ ! -n "${BULLETTRAIN_PERL_BG+1}" ]; then
BULLETTRAIN_PERL_BG=yellow
fi
if [ ! -n "${BULLETTRAIN_PERL_FG+1}" ]; then
BULLETTRAIN_PERL_FG=black
fi
if [ ! -n "${BULLETTRAIN_PERL_PREFIX+1}" ]; then
BULLETTRAIN_PERL_PREFIX=🐪
fi
# CONTEXT
if [ ! -n "${BULLETTRAIN_CONTEXT_BG+1}" ]; then
BULLETTRAIN_CONTEXT_BG=black
fi
if [ ! -n "${BULLETTRAIN_CONTEXT_FG+1}" ]; then
BULLETTRAIN_CONTEXT_FG=default
fi
if [ ! -n "${BULLETTRAIN_CONTEXT_HOSTNAME+1}" ]; then
BULLETTRAIN_CONTEXT_HOSTNAME=%m
fi
# GIT PROMPT
if [ ! -n "${BULLETTRAIN_GIT_PREFIX+1}" ]; then
ZSH_THEME_GIT_PROMPT_PREFIX="\ue0a0 "
else
ZSH_THEME_GIT_PROMPT_PREFIX=$BULLETTRAIN_GIT_PREFIX
fi
if [ ! -n "${BULLETTRAIN_GIT_SUFFIX+1}" ]; then
ZSH_THEME_GIT_PROMPT_SUFFIX=""
else
ZSH_THEME_GIT_PROMPT_SUFFIX=$BULLETTRAIN_GIT_SUFFIX
fi
if [ ! -n "${BULLETTRAIN_GIT_DIRTY+1}" ]; then
ZSH_THEME_GIT_PROMPT_DIRTY=" %F{red}✘%F{black}"
else
ZSH_THEME_GIT_PROMPT_DIRTY=$BULLETTRAIN_GIT_DIRTY
fi
if [ ! -n "${BULLETTRAIN_GIT_CLEAN+1}" ]; then
ZSH_THEME_GIT_PROMPT_CLEAN=" %F{green}✔%F{black}"
else
ZSH_THEME_GIT_PROMPT_CLEAN=$BULLETTRAIN_GIT_CLEAN
fi
if [ ! -n "${BULLETTRAIN_GIT_ADDED+1}" ]; then
ZSH_THEME_GIT_PROMPT_ADDED=" %F{green}✚%F{black}"
else
ZSH_THEME_GIT_PROMPT_ADDED=$BULLETTRAIN_GIT_ADDED
fi
if [ ! -n "${BULLETTRAIN_GIT_MODIFIED+1}" ]; then
ZSH_THEME_GIT_PROMPT_MODIFIED=" %F{blue}✹%F{black}"
else
ZSH_THEME_GIT_PROMPT_MODIFIED=$BULLETTRAIN_GIT_MODIFIED
fi
if [ ! -n "${BULLETTRAIN_GIT_DELETED+1}" ]; then
ZSH_THEME_GIT_PROMPT_DELETED=" %F{red}✖%F{black}"
else
ZSH_THEME_GIT_PROMPT_DELETED=$BULLETTRAIN_GIT_DELETED
fi
if [ ! -n "${BULLETTRAIN_GIT_UNTRACKED+1}" ]; then
ZSH_THEME_GIT_PROMPT_UNTRACKED=" %F{yellow}✭%F{black}"
else
ZSH_THEME_GIT_PROMPT_UNTRACKED=$BULLETTRAIN_GIT_UNTRACKED
fi
if [ ! -n "${BULLETTRAIN_GIT_RENAMED+1}" ]; then
ZSH_THEME_GIT_PROMPT_RENAMED=" ➜"
else
ZSH_THEME_GIT_PROMPT_RENAMED=$BULLETTRAIN_GIT_RENAMED
fi
if [ ! -n "${BULLETTRAIN_GIT_UNMERGED+1}" ]; then
ZSH_THEME_GIT_PROMPT_UNMERGED=" ═"
else
ZSH_THEME_GIT_PROMPT_UNMERGED=$BULLETTRAIN_GIT_UNMERGED
fi
if [ ! -n "${BULLETTRAIN_GIT_AHEAD+1}" ]; then
ZSH_THEME_GIT_PROMPT_AHEAD=" ⬆"
else
ZSH_THEME_GIT_PROMPT_AHEAD=$BULLETTRAIN_GIT_AHEAD
fi
if [ ! -n "${BULLETTRAIN_GIT_BEHIND+1}" ]; then
ZSH_THEME_GIT_PROMPT_BEHIND=" ⬇"
else
ZSH_THEME_GIT_PROMPT_BEHIND=$BULLETTRAIN_GIT_BEHIND
fi
if [ ! -n "${BULLETTRAIN_GIT_DIVERGED+1}" ]; then
ZSH_THEME_GIT_PROMPT_DIVERGED=" ⬍"
else
ZSH_THEME_GIT_PROMPT_DIVERGED=$BULLETTRAIN_GIT_PROMPT_DIVERGED
fi
# SCREEN
if [ ! -n "${BULLETTRAIN_SCREEN_BG+1}" ]; then
BULLETTRAIN_SCREEN_BG=white
fi
if [ ! -n "${BULLETTRAIN_SCREEN_FG+1}" ]; then
BULLETTRAIN_SCREEN_FG=black
fi
if [ ! -n "${BULLETTRAIN_SCREEN_PREFIX+1}" ]; then
BULLETTRAIN_SCREEN_PREFIX="⬗"
fi
# COMMAND EXECUTION TIME
if [ ! -n "${BULLETTRAIN_EXEC_TIME_ELAPSED+1}" ]; then
BULLETTRAIN_EXEC_TIME_ELAPSED=5
fi
if [ ! -n "${BULLETTRAIN_EXEC_TIME_BG+1}" ]; then
BULLETTRAIN_EXEC_TIME_BG=yellow
fi
if [ ! -n "${BULLETTRAIN_EXEC_TIME_FG+1}" ]; then
BULLETTRAIN_EXEC_TIME_FG=black
fi
# ------------------------------------------------------------------------------
# SEGMENT DRAWING
# A few functions to make it easy and re-usable to draw segmented prompts
# ------------------------------------------------------------------------------
CURRENT_BG='NONE'
SEGMENT_SEPARATOR=''
# Begin a segment
# Takes three arguments, background, foreground and text. All of them can be omitted,
# rendering default background/foreground and no text.
prompt_segment() {
local bg fg
[[ -n $1 ]] && bg="%K{$1}" || bg="%k"
[[ -n $2 ]] && fg="%F{$2}" || fg="%f"
if [[ $CURRENT_BG != 'NONE' && $1 != $CURRENT_BG ]]; then
echo -n " %{$bg%F{$CURRENT_BG}%}$SEGMENT_SEPARATOR%{$fg%} "
else
echo -n "%{$bg%}%{$fg%} "
fi
CURRENT_BG=$1
[[ -n $3 ]] && echo -n $3
}
# End the prompt, closing any open segments
prompt_end() {
if [[ -n $CURRENT_BG ]]; then
echo -n " %{%k%F{$CURRENT_BG}%}$SEGMENT_SEPARATOR"
else
echo -n "%{%k%}"
fi
echo -n "%{%f%}"
CURRENT_BG=''
}
# ------------------------------------------------------------------------------
# PROMPT COMPONENTS
# Each component will draw itself, and hide itself if no information needs
# to be shown
# ------------------------------------------------------------------------------
# Context: user@hostname (who am I and where am I)
context() {
local user="$(whoami)"
[[ "$user" != "$BULLETTRAIN_CONTEXT_DEFAULT_USER" || -n "$BULLETTRAIN_IS_SSH_CLIENT" ]] && echo -n "${user}@$BULLETTRAIN_CONTEXT_HOSTNAME"
}
prompt_context() {
local _context="$(context)"
[[ -n "$_context" ]] && prompt_segment $BULLETTRAIN_CONTEXT_BG $BULLETTRAIN_CONTEXT_FG "$_context"
}
# Based on http://stackoverflow.com/a/32164707/3859566
function displaytime {
local T=$1
local D=$((T/60/60/24))
local H=$((T/60/60%24))
local M=$((T/60%60))
local S=$((T%60))
[[ $D > 0 ]] && printf '%dd' $D
[[ $H > 0 ]] && printf '%dh' $H
[[ $M > 0 ]] && printf '%dm' $M
printf '%ds' $S
}
# Prompt previous command execution time
preexec() {
cmd_timestamp=`date +%s`
}
precmd() {
local stop=`date +%s`
local start=${cmd_timestamp:-$stop}
let BULLETTRAIN_last_exec_duration=$stop-$start
cmd_timestamp=''
}
prompt_cmd_exec_time() {
[ $BULLETTRAIN_last_exec_duration -gt $BULLETTRAIN_EXEC_TIME_ELAPSED ] && prompt_segment $BULLETTRAIN_EXEC_TIME_BG $BULLETTRAIN_EXEC_TIME_FG "$(displaytime $BULLETTRAIN_last_exec_duration)"
}
# Custom
prompt_custom() {
if [[ $BULLETTRAIN_CUSTOM_MSG == false ]]; then
return
fi
local custom_msg
eval custom_msg=$BULLETTRAIN_CUSTOM_MSG
[[ -n "${custom_msg}" ]] && prompt_segment $BULLETTRAIN_CUSTOM_BG $BULLETTRAIN_CUSTOM_FG "${custom_msg}"
}
# Git
prompt_git() {
if [[ "$(command git config --get oh-my-zsh.hide-status 2>/dev/null)" == "1" ]]; then
return
fi
local ref dirty mode repo_path git_prompt
repo_path=$(git rev-parse --git-dir 2>/dev/null)
if $(git rev-parse --is-inside-work-tree >/dev/null 2>&1); then
if [[ $BULLETTRAIN_GIT_COLORIZE_DIRTY == true && -n $(git status --porcelain --ignore-submodules) ]]; then
BULLETTRAIN_GIT_BG=$BULLETTRAIN_GIT_COLORIZE_DIRTY_BG_COLOR
BULLETTRAIN_GIT_FG=$BULLETTRAIN_GIT_COLORIZE_DIRTY_FG_COLOR
fi
prompt_segment $BULLETTRAIN_GIT_BG $BULLETTRAIN_GIT_FG
eval git_prompt=${BULLETTRAIN_GIT_PROMPT_CMD}
if [[ $BULLETTRAIN_GIT_EXTENDED == true ]]; then
echo -n ${git_prompt}$(git_prompt_status)
else
echo -n ${git_prompt}
fi
fi
}
prompt_hg() {
local rev status
if $(hg id >/dev/null 2>&1); then
if $(hg prompt >/dev/null 2>&1); then
if [[ $(hg prompt "{status|unknown}") = "?" ]]; then
# if files are not added
prompt_segment red white
st='±'
elif [[ -n $(hg prompt "{status|modified}") ]]; then
# if any modification
prompt_segment yellow black
st='±'
else
# if working copy is clean
prompt_segment green black
fi
echo -n $(hg prompt "☿ {rev}@{branch}") $st
else
st=""
rev=$(hg id -n 2>/dev/null | sed 's/[^-0-9]//g')
branch=$(hg id -b 2>/dev/null)
if $(hg st | grep -Eq "^\?"); then
prompt_segment red black
st='±'
elif $(hg st | grep -Eq "^(M|A)"); then
prompt_segment yellow black
st='±'
else
prompt_segment green black
fi
echo -n "☿ $rev@$branch" $st
fi
fi
}
# Dir: current working directory
prompt_dir() {
local dir=''
local _context="$(context)"
[[ $BULLETTRAIN_DIR_CONTEXT_SHOW == true && -n "$_context" ]] && dir="${dir}${_context}:"
if [[ $BULLETTRAIN_DIR_EXTENDED == 0 ]]; then
#short directories
dir="${dir}%1~"
elif [[ $BULLETTRAIN_DIR_EXTENDED == 2 ]]; then
#long directories
dir="${dir}%0~"
else
#medium directories (default case)
dir="${dir}%4(c:...:)%3c"
fi
prompt_segment $BULLETTRAIN_DIR_BG $BULLETTRAIN_DIR_FG $dir
}
# RUBY
# RVM: only shows RUBY info if on a gemset that is not the default one
# RBENV: shows current ruby version active in the shell; also with non-global gemsets if any is active
# CHRUBY: shows current ruby version active in the shell
prompt_ruby() {
if command -v rvm-prompt > /dev/null 2>&1; then
prompt_segment $BULLETTRAIN_RUBY_BG $BULLETTRAIN_RUBY_FG $BULLETTRAIN_RUBY_PREFIX" $(rvm-prompt i v g)"
elif command -v chruby > /dev/null 2>&1; then
prompt_segment $BULLETTRAIN_RUBY_BG $BULLETTRAIN_RUBY_FG $BULLETTRAIN_RUBY_PREFIX" $(chruby | sed -n -e 's/ \* //p')"
elif command -v rbenv > /dev/null 2>&1; then
current_gemset() {
echo "$(rbenv gemset active 2&>/dev/null | sed -e 's/ global$//')"
}
if [[ -n $(current_gemset) ]]; then
prompt_segment $BULLETTRAIN_RUBY_BG $BULLETTRAIN_RUBY_FG $BULLETTRAIN_RUBY_PREFIX" $(rbenv version | sed -e 's/ (set.*$//')"@"$(current_gemset)"
else
prompt_segment $BULLETTRAIN_RUBY_BG $BULLETTRAIN_RUBY_FG $BULLETTRAIN_RUBY_PREFIX" $(rbenv version | sed -e 's/ (set.*$//')"
fi
fi
}
# ELIXIR
prompt_elixir() {
if command -v elixir > /dev/null 2>&1; then
prompt_segment $BULLETTRAIN_ELIXIR_BG $BULLETTRAIN_ELIXIR_FG $BULLETTRAIN_ELIXIR_PREFIX" $(elixir -v | tail -n 1 | awk '{print $2}')"
fi
}
# PERL
# PLENV: shows current PERL version active in the shell
prompt_perl() {
if command -v plenv > /dev/null 2>&1; then
prompt_segment $BULLETTRAIN_PERL_BG $BULLETTRAIN_PERL_FG $BULLETTRAIN_PERL_PREFIX" $(plenv version | sed -e 's/ (set.*$//')"
fi
}
# Go
prompt_go() {
setopt extended_glob
if [[ (-f *.go(#qN) || -d Godeps || -f glide.yaml) ]]; then
if command -v go > /dev/null 2>&1; then
prompt_segment $BULLETTRAIN_GO_BG $BULLETTRAIN_GO_FG $BULLETTRAIN_GO_PREFIX" $(go version | grep --colour=never -oE '[[:digit:]].[[:digit:]]+')"
fi
fi
}
# Rust
prompt_rust() {
if [[ (-f Cargo.toml) ]]; then
if command -v rustc > /dev/null 2>&1; then
prompt_segment $BULLETTRAIN_RUST_BG $BULLETTRAIN_RUST_FG $BULLETTRAIN_RUST_PREFIX" $(rustc -V version | cut -d' ' -f2)"
fi
fi
}
# Kubernetes Context
prompt_kctx() {
if [[ "$BULLETTRAIN_KCTX_KUBECTL" == "true" ]] && command -v kubectl > /dev/null 2>&1; then
local jsonpath='{.current-context}'
if [[ "$BULLETTRAIN_KCTX_NAMESPACE" == "true" ]]; then
jsonpath="${jsonpath}{':'}{..namespace}"
fi
prompt_segment $BULLETTRAIN_KCTX_BG $BULLETTRAIN_KCTX_FG $BULLETTRAIN_KCTX_PREFIX" $(kubectl config view --minify --output "jsonpath=${jsonpath}" 2>/dev/null)"
elif [[ -f $BULLETTRAIN_KCTX_KCONFIG ]]; then
prompt_segment $BULLETTRAIN_KCTX_BG $BULLETTRAIN_KCTX_FG $BULLETTRAIN_KCTX_PREFIX" $(cat $BULLETTRAIN_KCTX_KCONFIG | grep current-context | awk '{print $2}')"
fi
}
# Virtualenv: current working virtualenv
prompt_virtualenv() {
local virtualenv_path="$VIRTUAL_ENV"
if [[ -n $virtualenv_path && -n $VIRTUAL_ENV_DISABLE_PROMPT ]]; then
prompt_segment $BULLETTRAIN_VIRTUALENV_BG $BULLETTRAIN_VIRTUALENV_FG $BULLETTRAIN_VIRTUALENV_PREFIX" $(basename $virtualenv_path)"
elif which pyenv &> /dev/null; then
if [[ "$(pyenv version | sed -e 's/ (set.*$//' | tr '\n' ' ' | sed 's/.$//')" != "system" ]]; then
prompt_segment $BULLETTRAIN_VIRTUALENV_BG $BULLETTRAIN_VIRTUALENV_FG $BULLETTRAIN_VIRTUALENV_PREFIX" $(pyenv version | sed -e 's/ (set.*$//' | tr '\n' ' ' | sed 's/.$//')"
fi
fi
}
# NVM: Node version manager
prompt_nvm() {
local nvm_prompt
if type nvm >/dev/null 2>&1; then
nvm_prompt=$(nvm current 2>/dev/null)
[[ "${nvm_prompt}x" == "x" || "${nvm_prompt}" == "system" ]] && return
elif type node >/dev/null 2>&1; then
nvm_prompt="$(node --version)"
else
return
fi
nvm_prompt=${nvm_prompt}
prompt_segment $BULLETTRAIN_NVM_BG $BULLETTRAIN_NVM_FG $BULLETTRAIN_NVM_PREFIX$nvm_prompt
}
#AWS Profile
prompt_aws() {
local spaces=" "
if [[ -n "$AWS_PROFILE" ]]; then
prompt_segment $BULLETTRAIN_AWS_BG $BULLETTRAIN_AWS_FG $BULLETTRAIN_AWS_PREFIX$spaces$AWS_PROFILE
fi
}
# SCREEN Session
prompt_screen() {
local session_name="$STY"
if [[ "$session_name" != "" ]]; then
prompt_segment $BULLETTRAIN_SCREEN_BG $BULLETTRAIN_SCREEN_FG $BULLETTRAIN_SCREEN_PREFIX" $session_name"
fi
}
prompt_time() {
if [[ $BULLETTRAIN_TIME_12HR == true ]]; then
prompt_segment $BULLETTRAIN_TIME_BG $BULLETTRAIN_TIME_FG %D{%r}
else
prompt_segment $BULLETTRAIN_TIME_BG $BULLETTRAIN_TIME_FG %D{%T}
fi
}
# Status:
# - was there an error
# - am I root
# - are there background jobs?
prompt_status() {
local symbols
symbols=()
[[ $RETVAL -ne 0 && $BULLETTRAIN_STATUS_EXIT_SHOW != true ]] && symbols+="✘"
[[ $RETVAL -ne 0 && $BULLETTRAIN_STATUS_EXIT_SHOW == true ]] && symbols+="✘ $RETVAL"
[[ $UID -eq 0 ]] && symbols+="%{%F{yellow}%}⚡%f"
[[ $(jobs -l | wc -l) -gt 0 ]] && symbols+="⚙"
if [[ -n "$symbols" && $RETVAL -ne 0 ]]; then
prompt_segment $BULLETTRAIN_STATUS_ERROR_BG $BULLETTRAIN_STATUS_FG "$symbols"
elif [[ -n "$symbols" ]]; then
prompt_segment $BULLETTRAIN_STATUS_BG $BULLETTRAIN_STATUS_FG "$symbols"
fi
}
# Prompt Character
prompt_chars() {
local bt_prompt_chars="${BULLETTRAIN_PROMPT_CHAR}"
if [[ $BULLETTRAIN_PROMPT_ROOT == true ]]; then
bt_prompt_chars="%(!.%F{red}# .%F{green}${bt_prompt_chars}%f)"
fi
if [[ $BULLETTRAIN_PROMPT_SEPARATE_LINE == false ]]; then
bt_prompt_chars="${bt_prompt_chars}"
fi
echo -n "$bt_prompt_chars"
if [[ -n $BULLETTRAIN_PROMPT_CHAR ]]; then
echo -n " "
fi
}
# Prompt Line Separator
prompt_line_sep() {
if [[ $BULLETTRAIN_PROMPT_SEPARATE_LINE == true ]]; then
# newline wont print without a non newline character, so add a zero-width space
echo -e '\n%{\u200B%}'
fi
}
# ------------------------------------------------------------------------------
# MAIN
# Entry point
# ------------------------------------------------------------------------------
build_prompt() {
RETVAL=$?
for segment in $BULLETTRAIN_PROMPT_ORDER
do
prompt_$segment
done
prompt_end
}
NEWLINE='
'
PROMPT=''
[[ $BULLETTRAIN_PROMPT_ADD_NEWLINE == true ]] && PROMPT="$PROMPT$NEWLINE"
PROMPT="$PROMPT"'%{%f%b%k%}$(build_prompt)'
[[ $BULLETTRAIN_PROMPT_SEPARATE_LINE == true ]] && PROMPT="$PROMPT$NEWLINE"
PROMPT="$PROMPT"'%{${fg_bold[default]}%}'
[[ $BULLETTRAIN_PROMPT_SEPARATE_LINE == false ]] && PROMPT="$PROMPT "
PROMPT="$PROMPT"'$(prompt_chars)%{$reset_color%}'

View File

@ -0,0 +1,38 @@
# Refer https://misc.flogisoft.com/bash/tip_colors_and_formatting for the ANSI/VT100 control sequences
local user_color=026
local dir_color=130
local git_branch_color=010
local input_color=220
# Uncomment the following line to hide the virtual environment name.
# export VIRTUAL_ENV_DISABLE_PROMPT=1
# User details in green, bold
local user='%B$FG[${user_color}]%}%n@%m%{$reset_color%}'
# Directory details in cyan, bold
local dir='%B$FG[${dir_color}]%~%{$reset_color%}'
# git branch details in green
local git_branch='$FG[${git_branch_color}]$(git_prompt_info)%{$reset_color%}'
# Error message on command returning non-zero exit code
error_msg="\e[0;31mCommand failed"
PROMPT="${user}:${dir}:${git_branch}
$ $FG[${input_color}]"
# Resetting color to default white.
preexec()
{
echo -ne "\e[0m"
}
# Printing error message if command failed.
precmd()
{
# Command failed
if [ $? -ne 0 ];
then
echo "${error_msg}"
fi
}

View File

@ -0,0 +1,418 @@
##########################################
### Comfyline - theme for zsh ###
# Original Author: not pua ( imnotpua ) #
# email: atp@tutamail.com #
##########################################
# make prompt work without oh-my-zsh
setopt PROMPT_SUBST
export LANG=en_US.UTF-8
export LC_ALL=en_US.UTF-8
# default segment seperators
if [[ $COMFYLINE_SEGSEP == "" ]]; then
COMFYLINE_SEGSEP='\ue0b4'
fi
if [[ $COMFYLINE_SEGSEP_REVERSE == "" ]]; then
COMFYLINE_SEGSEP_REVERSE='\ue0b6'
fi
# date and time formats
if [[ $COMFYLINE_DATE_FORMAT == "" ]]; then
COMFYLINE_DATE_FORMAT="%A, %e %B %Y"
fi
if [[ $COMFYLINE_TIME_FORMAT == "" ]]; then
COMFYLINE_TIME_FORMAT="%l:%M %p"
fi
# default light theme
if [[ $RETVAL_RANK == "" ]]; then
RETVAL_RANK=1
fi
if [[ $HOST_RANK == "" ]]; then
HOST_RANK=2
fi
if [[ $USER_RANK == "" ]] then
USER_RANK=3
fi
if [[ $DIR_RANK == "" ]]; then
DIR_RANK=4
fi
if [[ $GIT_RANK == "" ]] then
GIT_RANK=5
fi
if [[ $VENV_RANK = "" ]]; then
VENV_RANK=6
fi
if [[ $BAT_RANK == "" ]] then
BAT_RANK=-3
fi
if [[ $DATE_RANK == "" ]]; then
DATE_RANK=-2
fi
if [[ $TIME_RANK == "" ]]; then
TIME_RANK=-1
fi
# default colors
if [[ $RETVAL_b == "" ]]; then
RETVAL_b="#8a8bd8"
fi
if [[ $RETVAL_f == "" ]]; then
RETVAL_f="#61355c"
fi
if [[ $HOST_b == "" ]]; then
HOST_b="#b3b5fb"
fi
if [[ $HOST_f == "" ]]; then
HOST_f="#4a4b87"
fi
if [[ $USER_b == "" ]]; then
USER_b="#f8bbe5"
fi
if [[ $USER_f == "" ]]; then
USER_f="#874c80"
fi
if [[ $GIT_b == "" ]]; then
GIT_b="#f6b3b3"
fi
if [[ $GIT_f == "" ]]; then
GIT_f="#d95353"
fi
if [[ $GIT_CLEAN_b == "" ]]; then
GIT_CLEAN_b="#b3f58c"
fi
if [[ $GIT_CLEAN_f == "" ]]; then
GIT_CLEAN_f="#568459"
fi
if [[ $DIR_b == "" ]]; then
DIR_b="#e1bff2"
fi
if [[ $DIR_f == "" ]]; then
DIR_f="#844189"
fi
if [[ $VENV_b == "" ]]; then
VENV_b="#a8ddf9"
fi
if [[ $VENV_f == "" ]]; then
VENV_f="#0066a4"
fi
if [[ $BAT_b == "" ]]; then
BAT_b="#b3b5fb"
fi
if [[ $BAT_f == "" ]]; then
BAT_f="#4a4b87"
fi
if [[ $DATE_b == "" ]]; then
DATE_b="#f8bbe5"
fi
if [[ $DATE_f == "" ]]; then
DATE_f="#874c80"
fi
if [[ $TIME_b == "" ]]; then
TIME_b="#e1bff2"
fi
if [[ $TIME_f == "" ]]; then
TIME_f="#844189"
fi
# basic functions
#function takes 4 arguments, background, foreground, text and rank (for edge cases)
function create_segment(){
if [[ $4 -lt $RIGHTMOST_RANK ]]; then
local segment="%F{$1}$COMFYLINE_SEGSEP_REVERSE"
echo -n "$segment%K{$1}%F{$2} $3 "
elif [[ $4 -gt $LEFTMOST_RANK ]]; then
local segment="%K{$1}$COMFYLINE_SEGSEP "
echo -n "$segment%F{$2}$3%F{$1} "
elif [[ $4 -eq $RIGHTMOST_RANK ]]; then
if [[ $COMFYLINE_NO_START -eq 1 ]]; then
local segment="%F{$1}$COMFYLINE_SEGSEP_REVERSE"
echo -n "$segment%K{$1}%F{$2} $3"
else
local segment="%F{$1}$COMFYLINE_SEGSEP_REVERSE"
echo -n "$segment%K{$1}%F{$2} $3 %k%F{$1}$COMFYLINE_SEGSEP"
fi
elif [[ $4 -eq $LEFTMOST_RANK ]]; then
if [[ $COMFYLINE_NO_START -eq 1 ]]; then
local segment="%K{$1} "
echo -n "$segment%F{$2}$3%F{$1} "
else
local segment="%F{$1}$COMFYLINE_SEGSEP_REVERSE%K{$1} "
echo -n "$segment%F{$2}$3%F{$1} "
fi
fi
}
### explanation: creates segment seperator with new bg but fg as old bg.
### then prints contents in new fg and prepares for next fg as current bg
# segment functions
function retval(){
if [[ $COMFYLINE_RETVAL_NUMBER -eq 2 ]]; then
symbol="%(?..✘ %?)"
elif [[ $COMFYLINE_RETVAL_NUMBER -eq 1 ]]; then
symbol="%?"
else
symbol="%(?..✘)"
fi
create_segment $RETVAL_b $RETVAL_f $symbol $RETVAL_RANK
}
function hostname(){
if [[ $COMFYLINE_FULL_HOSTNAME -eq 1 ]]; then
create_segment $HOST_b $HOST_f "%M" $HOST_RANK
else
create_segment $HOST_b $HOST_f "%m" $HOST_RANK
fi
}
function username(){
create_segment $USER_b $USER_f "%n" $USER_RANK
}
function dir(){
if [[ $COMFYLINE_FULL_DIR -eq 1 ]]; then
symbol="%d"
else
symbol="%~"
fi
create_segment $DIR_b $DIR_f $symbol $DIR_RANK
}
# variables to set git_prompt info and status
ZSH_THEME_GIT_PROMPT_PREFIX=" \ue0a0 "
ZSH_THEME_GIT_PROMPT_SUFFIX=""
ZSH_THEME_GIT_PROMPT_DIRTY=""
ZSH_THEME_GIT_PROMPT_CLEAN=""
ZSH_THEME_GIT_PROMPT_ADDED=" ✚"
ZSH_THEME_GIT_PROMPT_MODIFIED=" ±"
ZSH_THEME_GIT_PROMPT_DELETED=" \u2796"
ZSH_THEME_GIT_PROMPT_UNTRACKED=" !"
ZSH_THEME_GIT_PROMPT_RENAMED=" \u21b7"
ZSH_THEME_GIT_PROMPT_UNMERGED=" \u21e1"
ZSH_THEME_GIT_PROMPT_AHEAD=" \u21c5"
ZSH_THEME_GIT_PROMPT_BEHIND=" \u21b1"
ZSH_THEME_GIT_PROMPT_DIVERGED=" \u21b0"
function gitrepo(){
if [ "$(git rev-parse --is-inside-work-tree 2>/dev/null)" = "true" ]; then
if [[ $(git status --porcelain) == "" ]]; then
if [[ $(command -v git_prompt_info 2> /dev/null) ]]; then
create_segment $GIT_CLEAN_b $GIT_CLEAN_f "$(git_prompt_info)$(git_prompt_status)" $GIT_RANK
else
create_segment $GIT_CLEAN_b $GIT_CLEAN_f "$ZSH_THEME_GIT_PROMPT_PREFIX$(git rev-parse --abbrev-ref HEAD)" $GIT_RANK
fi
else
if [[ $(command -v git_prompt_info 2> /dev/null) ]]; then
create_segment $GIT_b $GIT_f "$(git_prompt_info)$(git_prompt_status)" $GIT_RANK
else
create_segment $GIT_b $GIT_f "$ZSH_THEME_GIT_PROMPT_PREFIX$(git rev-parse --abbrev-ref HEAD)" $GIT_RANK
fi
fi
fi
}
function venv(){
if [ -n "$VIRTUAL_ENV" ]; then
create_segment $VENV_b $VENV_f ${VIRTUAL_ENV:t:gs/%/%%} $VENV_RANK
fi
}
# battery function
# variables
if [[ $COMFYLINE_BATTERY_LOW == "" ]]; then
COMFYLINE_BATTERY_LOW=15
fi
if [[ $COMFYLINE_BATTERY_HIGH == "" ]]; then
COMFYLINE_BATTERY_HIGH=90
fi
if [[ $COMFYLINE_CHARGING_ICON == "" ]]; then
COMFYLINE_CHARGING_ICON="⚡️"
fi
if [[ $COMFYLINE_HIGHCHARGE_ICON == "" ]]; then
COMFYLINE_HIGHCHARGE_ICON="󰁹"
fi
if [[ $COMFYLINE_MIDCHARGE_ICON == "" ]]; then
COMFYLINE_MIDCHARGE_ICON="󰁽"
fi
if [[ $COMFYLINE_LOWCHARGE_ICON == "" ]]; then
COMFYLINE_LOWCHARGE_ICON="󰂃"
fi
function calcbat(){
BAT=""
if [[ $(uname) == "Linux" ]]; then
number=$(ls /sys/class/power_supply/ | grep 'BAT' | wc -l )
if [[ $number -eq 0 ]]; then
return 0
fi
for ((i=0;i<$number;i++));do
capacity=$(cat /sys/class/power_supply/BAT${i}/capacity)
stats=$(cat /sys/class/power_supply/BAT${i}/status)
if [[ $stats == "Charging" ]]; then
stats="$COMFYLINE_CHARGING_ICON"
elif [[ $stats == "Discharging" ]]; then
if [ $capacity -gt $COMFYLINE_BATTERY_HIGH ]; then
stats="$COMFYLINE_HIGHCHARGE_ICON"
elif [ $capacity -lt $COMFYLINE_BATTERY_LOW ]; then
stats="$COMFYLINE_LOWCHARGE_ICON"
else
stats="$COMFYLINE_MIDCHARGE_ICON"
fi
elif [[ $stats == "Not charging" ]]; then
stats="$COMFYLINE_HIGHCHARGE_ICON"
fi
BAT="$BAT$capacity%% $stats "
done
elif [[ $(uname) == "Darwin" ]]; then
battery_details = $(pmset -g batt)
charged=$(echo "$battery_details" | grep -w 'charged')
charging=$(echo "$battery_details" | grep -w 'AC Power')
discharging=$(echo "$battery_details" | grep -w 'Battery Power')
capacity=$(echo "$battery_details" | grep -o "([0-9]*)"%)
if [ -n "$charging" ]; then
stats="$COMFYLINE_CHARGING_ICON"
elif [[ -n "$discharging" ]]; then
if [ $capacity -gt $COMFYLINE_BATTERY_HIGH ]; then
stats="$COMFYLINE_HIGHCHARGE_ICON"
elif [ $capacity -lt $COMFYLINE_BATTERY_LOW ]; then
stats="$COMFYLINE_LOWCHARGE_ICON"
else
stats="$COMFYLINE_MIDCHARGE_ICON"
fi
fi
BAT="$capacity%% $stats"
elif [[ $(uname) == "FreeBSD" || $(uname) == "OpenBSD" ]]; then
capacity=$(apm -l)
stats=$(apm -b)
if [ $stats -eq 3 ]; then
stats="$COMFYLINE_CHARGING_ICON"
else
if [[ $capacity -gt $COMFYLINE_BATTERY_HIGH ]]; then
stats="$COMFYLINE_HIGHCHARGE_ICON"
elif [[ $capacity -lt $COMFYLINE_BATTERY_LOW ]]; then
stats="$COMFYLINE_LOWCHARGE_ICON"
else
stats="$COMFYLINE_MIDCHARGE_ICON"
fi
fi
BAT="$capacity%% $stats"
fi
}
# function to call battery calculation
function currbat(){
if [[ $COMFYLINE_BATTERY_PLUGIN -eq 1 ]]; then
create_segment $BAT_b $BAT_f "$(battery_pct_prompt)" $BAT_RANK
else
calcbat
create_segment $BAT_b $BAT_f "$BAT" $BAT_RANK
fi
}
function currdate(){
info="%D{$COMFYLINE_DATE_FORMAT}"
create_segment $DATE_b $DATE_f $info $DATE_RANK
}
function currtime(){
info="%D{$COMFYLINE_TIME_FORMAT}"
create_segment $TIME_b $TIME_f $info $TIME_RANK
}
function endleft(){
echo -n "%k$COMFYLINE_SEGSEP%f"
}
# parse variables
segments=("retval" "hostname" "username" "dir" "gitrepo" "venv" "currbat" "currtime" "currdate")
segment_ranks=($RETVAL_RANK $HOST_RANK $USER_RANK $DIR_RANK $GIT_RANK $VENV_RANK $BAT_RANK $TIME_RANK $DATE_RANK)
# split into left and right
left_prompt=()
right_prompt=()
left_ranks=()
right_ranks=()
for ((i=1;i<=${#segments[@]};i++)); do
if [[ segment_ranks[$i] -gt 0 ]]; then
left_prompt+=(${segments[$i]})
left_ranks+=(${segment_ranks[$i]})
elif [[ segment_ranks[$i] -lt 0 ]]; then
right_prompt+=(${segments[$i]})
right_ranks+=(${segment_ranks[$i]#-})
fi
done
# sort the prompts according to ranks and find the leftmost and rightmost
# I use the traditional iterative method to find max/min and using count-sort for sorting
LEFTMOST_RANK=100
declare -A sorted_left
for ((i=1;i<=${#left_prompt[@]};i++)); do
if [[ $left_ranks[$i] -lt $LEFTMOST_RANK ]]; then LEFTMOST_RANK=$left_ranks[$i] fi
sorted_left[$left_ranks[$i]]="$left_prompt[$i]"
done
RIGHTMOST_RANK=100
declare -A sorted_right
for ((i=1;i<=${#right_prompt[@]};i++)); do
if [[ $right_ranks[$i] -lt $RIGHTMOST_RANK ]]; then RIGHTMOST_RANK=$right_ranks[$i] fi
sorted_right[$right_ranks[$i]]="$right_prompt[$i]"
done
((RIGHTMOST_RANK*=-1))
# finally make_prompt which makes prompts
make_left_prompt(){
for ((j = 1; j <= ${#left_prompt[@]}; j++)); do
type $sorted_left[$j] &>/dev/null && $sorted_left[$j]
done
}
make_right_prompt(){
for ((j = ${#right_prompt[@]}; j>0; j--)); do
type $sorted_right[$j] &>/dev/null && $sorted_right[$j]
done
}
export PROMPT='%{%f%b%k%}$(make_left_prompt)$(endleft) '
export RPROMPT=' %{%f%b%k%}$(make_right_prompt)' # spaces left so that hiding is triggered
if [[ $COMFYLINE_NEXT_LINE_CHAR == "" ]]; then
COMFYLINE_NEXT_LINE_CHAR='➟'
fi
if [[ $COMFYLINE_NEXT_LINE_CHAR_COLOR == "" ]]; then
COMFYLINE_NEXT_LINE_CHAR_COLOR="grey"
fi
next_line_maker(){
echo -n "%F{$COMFYLINE_NEXT_LINE_CHAR_COLOR}$COMFYLINE_NEXT_LINE_CHAR %f"
}
# setting up typing area
if [[ COMFYLINE_START_NEXT_LINE -eq 2 ]]; then
PROMPT=$PROMPT'
'$(next_line_maker)
elif [[ COMFYLINE_NO_GAP_LINE -eq 1 ]]; then
else
PROMPT='
'$PROMPT
fi

View File

@ -0,0 +1,7 @@
PROMPT=" %(?:%{$fg_bold[green]%}➜:%{$fg_bold[red]%}➜)"
PROMPT+=' %{$fg[cyan]%}%c%{$reset_color%} $(git_prompt_info)'
ZSH_THEME_GIT_PROMPT_PREFIX="%{$fg_bold[blue]%}(%{$fg[red]%}"
ZSH_THEME_GIT_PROMPT_SUFFIX="%{$reset_color%} "
ZSH_THEME_GIT_PROMPT_DIRTY="%{$fg[blue]%}) %{$fg[yellow]%}✏️ "
ZSH_THEME_GIT_PROMPT_CLEAN="%{$fg[blue]%}) ✅"

View File

@ -0,0 +1,60 @@
local username="%n"
local path_prefix="%{$fg[yellow]%}["
local path_string="%{$fg[blue]%}%~"
local path_postfix="%{$fg[yellow]%}]"
local prompt_string=" "
local local_time="%T"
local newline=$'\n'
local line_mode=$'\n'
# customize user settings
# prompt symbol
if [ ! -z "$FISHBONEPP_PROMPT" ]; then
prompt_string="$FISHBONEPP_PROMPT"
fi
# username
if [ ! -z "$FISHBONEPP_USER" ]; then
username="$FISHBONEPP_USER"
fi
# time mode
if [ "$FISHBONEPP_TIME" = "12HR" ]; then
local_time="%t"
elif [ "$FISHBONEPP_TIME" = "FULL" ]; then
local_time="%*"
else
local_time="%T"
fi
# new line on start
if [ "$FISHBONEPP_NEWLINE" = false ]; then
newline=''
fi
# line mode
if [ "$FISHBONEPP_LINE_MODE" = "singleline" ]; then
line_mode=''
fi
local host_name="%{$fg[blue]%}${username}"
local time_string="%{$fg[blue]%}${local_time}"
# Make prompt_string red if the previous command failed.
local return_status="%(?:%{$fg[cyan]%}$prompt_string:%{$fg[red]%}$prompt_string%}"
# set the git_prompt_info text
ZSH_THEME_GIT_PROMPT_PREFIX=" %{$fg[blue](%{$reset_color%}%{$fg[yellow]%}"
ZSH_THEME_GIT_PROMPT_SUFFIX="%{$reset_color%{$fg[blue])%}"
ZSH_THEME_GIT_PROMPT_DIRTY="⚡"
ZSH_THEME_GIT_PROMPT_CLEAN=""
PROMPT='${newline}\
${host_name}${hosr}%{$reset_color%}@${time_string} ${line_mode}\
${path_prefix}${path_string}${path_postfix}$(git_prompt_info)$(git_prompt_status) \
${return_status} %{$reset_color%}'
ZSH_THEME_GIT_PROMPT_ADDED=""
ZSH_THEME_GIT_PROMPT_MODIFIED="✒️ "
ZSH_THEME_GIT_PROMPT_DELETED=""
ZSH_THEME_GIT_PROMPT_RENAMED="⁉️ "
ZSH_THEME_GIT_PROMPT_UNMERGED="🥺"
ZSH_THEME_GIT_PROMPT_UNTRACKED="🚝"

View File

@ -0,0 +1,73 @@
{
"$schema": "https://github.com/fastfetch-cli/fastfetch/raw/dev/doc/json_schema.json",
"logo": {
"height": 5,
"width": 10,
"padding": {
"top": 1
}
},
"display": {
"separator": " -> "
},
"modules": [
"break",
{
"type": "title",
"keyWidth": 10,
"format": " {6}{7}{8}"
},
{
"type": "custom",
"format": " ─────────────────────────── "
},
{
"type": "kernel",
"key": " ",
"keyColor": "yellow"
},
{
"type": "wm",
"key": " ",
"keyColor": "blue"
},
{
"type": "shell",
"key": " ",
"keyColor": "yellow"
},
{
"type": "terminal",
"key": " ",
"keyColor": "blue"
},
/*
{
"type": "packages",
"key": "󰏖 ",
"keyColor": "yellow"
},
*/
{
"type": "memory",
"key": "󰍛 ",
"keyColor": "magenta",
// format: used / total
"format": "{1} / {2}"
},
{
"type": "uptime",
"key": "󰔛 ",
"keyColor": "green"
},
{
"type": "custom",
"format": " ─────────────────────────── "
},
{
"type": "custom",
"format": " \u001b[31m \u001b[32m \u001b[33m \u001b[34m \u001b[35m \u001b[36m \u001b[37m \u001b[90m "
},
"break",
]
}

View File

@ -57,6 +57,7 @@ dependencies=(
wayland-protocols wayland-protocols
xdg-desktop-portal xdg-desktop-portal
xwayland xwayland
bc
) )
build_dep=( build_dep=(

View File

@ -13,6 +13,15 @@ sddm2=(
qt6-svg-dev qt6-svg-dev
) )
# login managers to attempt to disable
login=(
lightdm
gdm3
gdm
lxdm
lxdm-gtk3
)
## WARNING: DO NOT EDIT BEYOND THIS LINE IF YOU DON'T KNOW WHAT YOU ARE DOING! ## ## WARNING: DO NOT EDIT BEYOND THIS LINE IF YOU DON'T KNOW WHAT YOU ARE DOING! ##
# Determine the directory where the script is located # Determine the directory where the script is located
SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
@ -39,15 +48,24 @@ for PKG2 in "${sddm2[@]}"; do
done done
# Check if other login managers are installed and disable their service before enabling SDDM # Check if other login managers are installed and disable their service before enabling SDDM
for login_manager in lightdm gdm3 gdm lxdm xdm lxdm-gtk3; do for login_manager in "${login[@]}"; do
if sudo apt list --installed "$login_manager" > /dev/null; then if sudo apt list --installed "$login_manager" > /dev/null; then
echo "Disabling $login_manager..." echo "Disabling $login_manager..."
sudo systemctl disable "$login_manager.service" 2>&1 | tee -a "$LOG" sudo systemctl disable "$login_manager.service" >> "$LOG" 2>&1
echo "$login_manager disabled." echo "$login_manager disabled."
fi fi
done done
printf " Activating sddm service........\n" # Double check with systemctl
for manager in "${login[@]}"; do
if systemctl is-active --quiet "$manager" > /dev/null 2>&1; then
echo "$manager is active, disabling it..." >> "$LOG" 2>&1
sudo systemctl disable "$manager" --now >> "$LOG" 2>&1
fi
done
printf "\n%.0s" {1..1}
printf "${INFO} Activating sddm service........\n"
sudo systemctl enable sddm sudo systemctl enable sddm
wayland_sessions_dir=/usr/share/wayland-sessions wayland_sessions_dir=/usr/share/wayland-sessions

View File

@ -48,18 +48,62 @@ if git clone --depth 1 "$source_theme" "$theme_name"; then
# Move cloned theme to the themes directory # Move cloned theme to the themes directory
sudo mv "$theme_name" "/usr/share/sddm/themes/$theme_name" 2>&1 | tee -a "$LOG" sudo mv "$theme_name" "/usr/share/sddm/themes/$theme_name" 2>&1 | tee -a "$LOG"
# Set up new theme # setting up SDDM theme
echo -e "${NOTE} Setting up the login screen." sddm_conf_dir="/etc/sddm.conf.d"
sddm_conf_dir=/etc/sddm.conf.d BACKUP_SUFFIX=".bak"
[ ! -d "$sddm_conf_dir" ] && { printf "$CAT - $sddm_conf_dir not found, creating...\n"; sudo mkdir -p "$sddm_conf_dir" 2>&1 | tee -a "$LOG"; }
# Configure theme settings echo -e "${NOTE} Setting up the login screen." | tee -a "$LOG"
echo -e "[Theme]\nCurrent=$theme_name" | sudo tee "$sddm_conf_dir/theme.conf.user" >> "$LOG"
if [ -d "$sddm_conf_dir" ]; then
echo "Backing up files in $sddm_conf_dir" | tee -a "$LOG"
for file in "$sddm_conf_dir"/*; do
if [ -f "$file" ]; then
if [[ "$file" == *$BACKUP_SUFFIX ]]; then
echo "Skipping backup file: $file" | tee -a "$LOG"
continue
fi
# Backup each original file
sudo cp "$file" "$file$BACKUP_SUFFIX" 2>&1 | tee -a "$LOG"
echo "Backup created for $file" | tee -a "$LOG"
# Edit existing "Current="
if grep -q '^[[:space:]]*Current=' "$file"; then
sudo sed -i "s/^[[:space:]]*Current=.*/Current=$theme_name/" "$file" 2>&1 | tee -a "$LOG"
echo "Updated theme in $file" | tee -a "$LOG"
fi
fi
done
else
# If the directory doesn't exist, create it and set up the new theme
echo "$CAT - $sddm_conf_dir not found, creating..." | tee -a "$LOG"
sudo mkdir -p "$sddm_conf_dir" 2>&1 | tee -a "$LOG"
echo -e "[Theme]\nCurrent=$theme_name" | sudo tee "$sddm_conf_dir/theme.conf.user" 2>&1 | tee -a "$LOG"
echo "Created and configured $sddm_conf_dir/theme.conf.user with theme $theme_name" | tee -a "$LOG"
fi
# Replace current background from assets # Replace current background from assets
sudo cp -r assets/sddm.png "/usr/share/sddm/themes/$theme_name/backgrounds/default" 2>&1 | tee -a "$LOG" sudo cp -r assets/sddm.png "/usr/share/sddm/themes/$theme_name/backgrounds/default" 2>&1 | tee -a "$LOG"
sudo sed -i 's|^wallpaper=".*"|wallpaper="backgrounds/default"|' "/usr/share/sddm/themes/$theme_name/theme.conf" 2>&1 | tee -a "$LOG" sudo sed -i 's|^wallpaper=".*"|wallpaper="backgrounds/default"|' "/usr/share/sddm/themes/$theme_name/theme.conf" 2>&1 | tee -a "$LOG"
printf "\n%.0s" {1..1}
printf "${NOTE} copying ${YELLOW}JetBrains Mono Nerd Font${RESET} to ${YELLOW}/usr/local/share/fonts${RESET} .......\n"
printf "${NOTE} necessary for the new SDDM theme to work properly........\n"
sudo mkdir -p /usr/local/share/fonts/JetBrainsMonoNerd && \
sudo cp -r "$HOME/.local/share/fonts/JetBrainsMonoNerd" /usr/local/share/fonts/JetBrainsMonoNerd
if [ $? -eq 0 ]; then
echo "Fonts copied successfully."
else
echo "Failed to copy fonts."
fi
# Update font cache and log the output
fc-cache -v -f 2>&1 | tee -a "$LOG"
printf "\n%.0s" {1..1}
echo "${OK} - ${MAGENTA}Additional SDDM Theme${RESET} successfully installed." | tee -a "$LOG" echo "${OK} - ${MAGENTA}Additional SDDM Theme${RESET} successfully installed." | tee -a "$LOG"
else else

View File

@ -70,13 +70,20 @@ if command -v zsh >/dev/null; then
cp -r 'assets/.zshrc' ~/ cp -r 'assets/.zshrc' ~/
cp -r 'assets/.zprofile' ~/ cp -r 'assets/.zprofile' ~/
printf "${NOTE} Changing default shell to ${MAGENTA}zsh${RESET}..." # Check if the current shell is zsh
printf "\n%.0s" {1..2} if [[ "$SHELL" != *"zsh"* ]]; then
while ! chsh -s $(which zsh); do printf "${NOTE} Changing default shell to ${MAGENTA}zsh${RESET}..."
printf "\n%.0s" {1..2}
while ! chsh -s $(which zsh); do
echo "${ERROR} Authentication failed. Please enter the correct password." 2>&1 | tee -a "$LOG" echo "${ERROR} Authentication failed. Please enter the correct password." 2>&1 | tee -a "$LOG"
sleep 1 sleep 1
done done
printf "${INFO} Shell changed successfully to ${MAGENTA}zsh${RESET}" 2>&1 | tee -a "$LOG"
printf "${INFO} Shell changed successfully to ${MAGENTA}zsh${RESET}" 2>&1 | tee -a "$LOG"
else
echo "${NOTE}Your shell is already set to ${MAGENTA}zsh${RESET}."
fi
fi fi

View File

@ -2,6 +2,11 @@
# 💫 https://github.com/JaKooLit 💫 # # 💫 https://github.com/JaKooLit 💫 #
# pokemon-color-scripts# # pokemon-color-scripts#
poke=(
mercurial
)
## WARNING: DO NOT EDIT BEYOND THIS LINE IF YOU DON'T KNOW WHAT YOU ARE DOING! ## ## WARNING: DO NOT EDIT BEYOND THIS LINE IF YOU DON'T KNOW WHAT YOU ARE DOING! ##
# Determine the directory where the script is located # Determine the directory where the script is located
SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
@ -15,6 +20,14 @@ source "$(dirname "$(readlink -f "$0")")/Global_functions.sh"
# Set the name of the log file to include the current date and time # Set the name of the log file to include the current date and time
LOG="Install-Logs/install-$(date +%d-%H%M%S)_zsh_pokemon.log" LOG="Install-Logs/install-$(date +%d-%H%M%S)_zsh_pokemon.log"
# for the new oh my zsh theme
printf "${NOTE} Installing ${SKY_BLUE}additional dependencies for oh my zsh theme${RESET}\n"
for pok in "${poke[@]}"; do
install_package "$pok" "$LOG"
done
printf "\n%.0s" {1..1}
printf "${INFO} Installing ${SKY_BLUE}Pokemon color scripts${RESET} ..." printf "${INFO} Installing ${SKY_BLUE}Pokemon color scripts${RESET} ..."
if [ -d "pokemon-colorscripts" ]; then if [ -d "pokemon-colorscripts" ]; then
@ -26,10 +39,15 @@ fi
# Check if ~/.zshrc exists # Check if ~/.zshrc exists
if [ -f "$HOME/.zshrc" ]; then if [ -f "$HOME/.zshrc" ]; then
sed -i '/#pokemon-colorscripts --no-title -s -r/s/^#//' "$HOME/.zshrc" >> "$LOG" 2>&1 sed -i '/#pokemon-colorscripts --no-title -s -r | fastfetch -c $HOME\/.config\/fastfetch\/config-pokemon.jsonc --logo-type file-raw --logo-height 10 --logo-width 5 --logo -/s/^#//' "$HOME/.zshrc" >> "$LOG" 2>&1
sed -i '/^fastfetch -c $HOME\/.config\/fastfetch\/config-compact.jsonc/s/^/#/' "$HOME/.zshrc" >> "$LOG" 2>&11 sed -i '/^fastfetch -c $HOME\/.config\/fastfetch\/config-compact.jsonc/s/^/#/' "$HOME/.zshrc" >> "$LOG" 2>&1
else else
echo "$HOME/.zshrc not found. Cant enable ${YELLOW}Pokemon color scripts${RESET}" >> "$LOG" 2>&1 echo "$HOME/.zshrc not found. Cant enable ${YELLOW}Pokemon color scripts${RESET}" >> "$LOG" 2>&1
fi fi
# copy additional oh-my-zsh themes from assets
if [ -d "$HOME/.oh-my-zsh/themes" ]; then
cp -r assets/add_zsh_theme/* ~/.oh-my-zsh/themes >> "$LOG" 2>&1
fi
printf "\n%.0s" {1..2} printf "\n%.0s" {1..2}

View File

@ -179,7 +179,6 @@ execute_script() {
if lspci | grep -i "nvidia" &> /dev/null; then if lspci | grep -i "nvidia" &> /dev/null; then
printf "\n" printf "\n"
printf "${INFO} ${YELLOW}NVIDIA GPU${RESET} detected in your system \n" printf "${INFO} ${YELLOW}NVIDIA GPU${RESET} detected in your system \n"
printf "${NOTE} Script will install ${YELLOW}nvidia-dkms nvidia-utils and nvidia-settings${RESET} \n"
ask_yes_no "-Do you want script to configure ${YELLOW}NVIDIA${RESET} for you?" nvidia ask_yes_no "-Do you want script to configure ${YELLOW}NVIDIA${RESET} for you?" nvidia
fi fi
@ -212,7 +211,7 @@ ask_yes_no "-Install & configure ${YELLOW}SDDM${RESET} as login manager?" sddm
# check if any known login managers are active when users choose to install sddm # check if any known login managers are active when users choose to install sddm
if [ "$sddm" == "y" ] || [ "$sddm" == "Y" ]; then if [ "$sddm" == "y" ] || [ "$sddm" == "Y" ]; then
# List of services to check # List of services to check
services=("gdm.service" "gdm3.service" "lightdm.service" "xdm.service" "lxdm.service") services=("gdm.service" "gdm3.service" "lightdm.service" "lxdm.service")
# Loop through each service # Loop through each service
for svc in "${services[@]}"; do for svc in "${services[@]}"; do