-
-
-
-
-
-
-
-### ๐ค 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
- to use preset instead of usual `./install.sh` you can ran like this
@@ -157,24 +135,31 @@ zsh
source ~/.zshrc
```
- reboot or logout
-- by default `funky` theme is installed. You can find more themes from this [`OH-MY-ZSH-THEMES`](https://github.com/ohmyzsh/ohmyzsh/wiki/Themes)
+- by default `agnosterzak` theme is installed. Which is from external oh-my-zsh theme. You can find more themes from this [`OH-MY-ZSH-THEMES`](https://github.com/ohmyzsh/ohmyzsh/wiki/Themes)
- to change the theme, `SUPER SHIFT O` , choose desired theme, and close and open terminal.
- or manually edit `~/.zshrc` . Look for ZSH_THEME="desired theme"
+#### ๐๏ธ AGS Overview DEMO
+- in case you wonder, here is a short demo of AGS overview [Youtube LINK](https://youtu.be/zY5SLNPBJTs)
+
#### โจ TO DO once installation done and dotfiles copied
-- ~~if you opted to install gtk themes, to apply the theme and icon, press the dark/light button (beside the padlock). To apply Bibata modern ice cursor, launch nwg-look (GTK Settings) through rofi.~~ Hyprland-Dots v2.1.18, initial boot file will attempt to apply GTK themes,cursor, and icons. You can tweak more using nwg-look (GTK-Settings) utility
-
- SUPER H for HINT or click on the waybar HINT! Button
-- Head over to [FAQ](https://github.com/JaKooLit/Hyprland-Dots/wiki/FAQ) and [TIPS](https://github.com/JaKooLit/Hyprland-Dots/wiki/TIPS)
-
+- 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 [`CLICK`](https://github.com/JaKooLit/Hyprland-Dots/wiki/Keybinds)
+
> [!TIP]
-> KooL's Dots v2.3.7 has a searchable keybind function via rofi. (SUPER SHIFT K) or right click the `HINTS` waybar button
+> KooL Hyprland has a searchable keybind function via rofi. (SUPER SHIFT K) or right click the `HINTS` waybar button
+
+
+#### ๐ switching between Hyprland-git and none Hyprland-git
+- you can use my prepared script [`LINK`](https://github.com/JaKooLit/Arch-Hyprland/tree/main/assets/hyprland-install)
+- Readme is also there
+
#### ๐ ๐ Having issues or questions?
- for the install part, kindly open issue on this repo
@@ -184,6 +169,7 @@ source ~/.zshrc
- CD into Arch-Hyprland directory and then ran the below command.
- i.e. `./install-scripts/gtk-themes.sh` - For reinstall GTK Themes or
- `./install-scripts/sddm.sh` - For reinstall sddm
+
> [!IMPORTANT]
> DO NOT cd into install-scripts directory as script will most likely to fail
diff --git a/assets/.zshrc b/assets/.zshrc
index d9cb41d..69124ec 100644
--- a/assets/.zshrc
+++ b/assets/.zshrc
@@ -3,7 +3,7 @@
export ZSH="$HOME/.oh-my-zsh"
-ZSH_THEME="funky"
+ZSH_THEME="agnosterzak"
plugins=(
git
@@ -19,7 +19,8 @@ source $ZSH/oh-my-zsh.sh
# Display Pokemon-colorscripts
# 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 -c $HOME/.config/fastfetch/config-compact.jsonc
diff --git a/assets/add_zsh_theme/agnosterzak.zsh-theme b/assets/add_zsh_theme/agnosterzak.zsh-theme
new file mode 100644
index 0000000..20eda0c
--- /dev/null
+++ b/assets/add_zsh_theme/agnosterzak.zsh-theme
@@ -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=" "
+ 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) '
diff --git a/assets/add_zsh_theme/antares.zsh-theme b/assets/add_zsh_theme/antares.zsh-theme
new file mode 100644
index 0000000..90ecf50
--- /dev/null
+++ b/assets/add_zsh_theme/antares.zsh-theme
@@ -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}'
+
diff --git a/assets/add_zsh_theme/bullet-train.zsh-theme b/assets/add_zsh_theme/bullet-train.zsh-theme
new file mode 100644
index 0000000..d72c4f5
--- /dev/null
+++ b/assets/add_zsh_theme/bullet-train.zsh-theme
@@ -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%}'
diff --git a/assets/add_zsh_theme/color-input.zsh-theme b/assets/add_zsh_theme/color-input.zsh-theme
new file mode 100644
index 0000000..a863802
--- /dev/null
+++ b/assets/add_zsh_theme/color-input.zsh-theme
@@ -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
+}
diff --git a/assets/add_zsh_theme/comfyline.zsh-theme b/assets/add_zsh_theme/comfyline.zsh-theme
new file mode 100644
index 0000000..a97aa0d
--- /dev/null
+++ b/assets/add_zsh_theme/comfyline.zsh-theme
@@ -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
diff --git a/assets/add_zsh_theme/emoji.zsh-theme b/assets/add_zsh_theme/emoji.zsh-theme
new file mode 100644
index 0000000..08ffaf6
--- /dev/null
+++ b/assets/add_zsh_theme/emoji.zsh-theme
@@ -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]%}) โ
"
diff --git a/assets/add_zsh_theme/fishbone++.zsh-theme b/assets/add_zsh_theme/fishbone++.zsh-theme
new file mode 100644
index 0000000..55af62e
--- /dev/null
+++ b/assets/add_zsh_theme/fishbone++.zsh-theme
@@ -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="๐"
diff --git a/assets/fastfetch/config-pokemon.jsonc b/assets/fastfetch/config-pokemon.jsonc
new file mode 100644
index 0000000..2b4522f
--- /dev/null
+++ b/assets/fastfetch/config-pokemon.jsonc
@@ -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",
+ ]
+}
diff --git a/assets/hyprland-install/README b/assets/hyprland-install/README
new file mode 100644
index 0000000..c326b27
--- /dev/null
+++ b/assets/hyprland-install/README
@@ -0,0 +1,7 @@
+Arch-Hyprland - Sharing a scripts to install hyprland git or non-git versions
+
+Basically created this script so I can easily switch to git and non-git version of hyprland on Arch Linux
+
+
+chmod +x actions.sh
+./actions.sh
\ No newline at end of file
diff --git a/assets/hyprland-install/actions.sh b/assets/hyprland-install/actions.sh
new file mode 100755
index 0000000..c98b6ee
--- /dev/null
+++ b/assets/hyprland-install/actions.sh
@@ -0,0 +1,57 @@
+#!/bin/bash
+# /* ---- ๐ซ https://github.com/JaKooLit ๐ซ ---- */ #
+
+# Set some colors for output messages
+OK="$(tput setaf 2)[OK]$(tput sgr0)"
+ERROR="$(tput setaf 1)[ERROR]$(tput sgr0)"
+NOTE="$(tput setaf 3)[NOTE]$(tput sgr0)"
+INFO="$(tput setaf 4)[INFO]$(tput sgr0)"
+WARN="$(tput setaf 1)[WARN]$(tput sgr0)"
+CAT="$(tput setaf 6)[ACTION]$(tput sgr0)"
+MAGENTA=$(tput setaf 5)
+WARNING=$(tput setaf 1)
+YELLOW=$(tput setaf 3)
+BLUE=$(tput setaf 4)
+RESET=$(tput sgr0)
+
+
+# Make all scripts in the scripts directory executable
+echo -e "${INFO} Making all files in the ${BLUE}scripts${RESET} directory executable..."
+chmod +x ./scripts/*
+
+printf "\n%.0s" {1..2}
+
+while true; do
+ echo -e "${BLUE} Please choose an option:${RESET}"
+ echo -e "${YELLOW} -- 1 - Install non-git Hyprland version${RESET}"
+ echo -e "${YELLOW} -- 2 - Install git Hyprland version${RESET}"
+ echo -e "${MAGENTA} -- 3 - Quit${RESET}"
+
+ read -p "${CAT} Enter your choice [1, 2, or 3]: " choice
+
+ case $choice in
+ 1)
+ printf "\n${OK} You chose ${BLUE}non-git version of Hyprland${RESET}....... executing...\n"
+ echo -e "${YELLOW} Uninstalling some hyprland packages first...${RESET}"
+ ./scripts/uninstall.sh &&
+ ./scripts/install-hyprland.sh
+ break
+ ;;
+ 2)
+ printf "\n${OK} You chose ${BLUE}git version of Hyprland${RESET}....... executing...\n"
+ echo -e "${YELLOW} Uninstalling some hyprland packages....${RESET}"
+ ./scripts/uninstall.sh &&
+ ./scripts/install-hyprland-git.sh
+ break
+ ;;
+ 3)
+ echo -e "${MAGENTA} You have cancel it. Good Bye!!...${RESET}"
+ printf "\n%.0s" {1..2}
+ break
+ ;;
+ *)
+ echo -e "\n${WARNING} There are only 3 Choices!!!! 1 or 2 or 3. Enter 1, 2, or 3.${RESET}"
+ ;;
+ esac
+
+done
diff --git a/assets/hyprland-install/scripts/install-hyprland-git.sh b/assets/hyprland-install/scripts/install-hyprland-git.sh
new file mode 100755
index 0000000..14d249f
--- /dev/null
+++ b/assets/hyprland-install/scripts/install-hyprland-git.sh
@@ -0,0 +1,87 @@
+#!/bin/bash
+# /* ---- ๐ซ https://github.com/JaKooLit ๐ซ ---- */ #
+
+# Set some colors for output messages
+OK="$(tput setaf 2)[OK]$(tput sgr0)"
+ERROR="$(tput setaf 1)[ERROR]$(tput sgr0)"
+NOTE="$(tput setaf 3)[NOTE]$(tput sgr0)"
+INFO="$(tput setaf 4)[INFO]$(tput sgr0)"
+WARN="$(tput setaf 1)[WARN]$(tput sgr0)"
+CAT="$(tput setaf 6)[ACTION]$(tput sgr0)"
+MAGENTA="$(tput setaf 5)"
+ORANGE="$(tput setaf 214)"
+WARNING="$(tput setaf 1)"
+YELLOW="$(tput setaf 3)"
+BLUE="$(tput setaf 4)"
+RESET="$(tput sgr0)"
+
+ISAUR=$(command -v yay || command -v paru)
+
+printf "\n%.0s" {1..2}
+
+# List of packages to install / update
+packages=(
+ "hyprutils-git"
+ "hyprcursor-git"
+ "hyprwayland-scanner-git"
+ "aquamarine-git"
+ "hyprgraphics-git"
+ "hyprlang-git"
+ "hyprland-protocols-git"
+ "hyprland-qt-support-git"
+ "hyprland-qtutils-git"
+ "hyprland-git"
+ "hyprlock-git"
+ "hypridle-git"
+ "xdg-desktop-portal-hyprland-git"
+ "hyprpolkitagent-git"
+ "pyprland"
+)
+
+# rotating stars progress
+show_progress() {
+ spin='-'
+ while ps | grep $1 &> /dev/null; do
+ echo -ne "\rInstalling ${ORANGE}$2${RESET} ... Kindly wait! $spin"
+ sleep 0.3
+ case $spin in
+ '-') spin='\';;
+ '\') spin='|';;
+ '|') spin='/';;
+ '/') spin='-';;
+ esac
+ done
+ echo -en "\rInstalling ${ORANGE}$2${RESET} ... Kindly wait! .... Done!"
+}
+
+# Clearing cache
+echo -n "${CAT} Recommend (choose y to all) to clear ${MAGENTA}pacman and aur helper${RESET} cache ..."
+printf "\n%.0s" {1..1}
+sudo pacman -Scc &&
+$ISAUR -Scc
+
+printf "\n%.0s" {1..1}
+printf "${NOTE} Installing ${BLUE}git hyprland version${RESET}....."
+printf "\n%.0s" {1..1}
+
+# Installing packages
+for package in "${packages[@]}"; do
+ $ISAUR -S --noconfirm "$package" &>/dev/null &
+ pid=$!
+
+ show_progress $pid $package
+
+ wait $pid
+
+ if [ $? -eq 0 ]; then
+ echo -e "\n${OK} ${ORANGE}$package${RESET} successfully installed."
+ printf "\n%.0s" {1..1}
+ else
+ echo -e "\n${ERROR} Failed to install ${MAGENTA}$package${RESET}"
+ printf "\n%.0s" {1..1}
+ fi
+done
+
+printf "\n%.0s" {1..1}
+printf "${OK} Done!! Now you NEED to ${YELLOW}EXIT${RESET} Hyprland and Re-Login! Enjoy!!!!"
+printf "\n%.0s" {1..2}
diff --git a/assets/hyprland-install/scripts/install-hyprland.sh b/assets/hyprland-install/scripts/install-hyprland.sh
new file mode 100755
index 0000000..8e64267
--- /dev/null
+++ b/assets/hyprland-install/scripts/install-hyprland.sh
@@ -0,0 +1,81 @@
+#!/bin/bash
+# /* ---- ๐ซ https://github.com/JaKooLit ๐ซ ---- */ #
+
+# Set some colors for output messages
+OK="$(tput setaf 2)[OK]$(tput sgr0)"
+ERROR="$(tput setaf 1)[ERROR]$(tput sgr0)"
+NOTE="$(tput setaf 3)[NOTE]$(tput sgr0)"
+INFO="$(tput setaf 4)[INFO]$(tput sgr0)"
+WARN="$(tput setaf 1)[WARN]$(tput sgr0)"
+CAT="$(tput setaf 6)[ACTION]$(tput sgr0)"
+MAGENTA="$(tput setaf 5)"
+ORANGE="$(tput setaf 214)"
+WARNING="$(tput setaf 1)"
+YELLOW="$(tput setaf 3)"
+BLUE="$(tput setaf 4)"
+RESET="$(tput sgr0)"
+
+ISAUR=$(command -v yay || command -v paru)
+
+printf "\n%.0s" {1..2}
+
+# List of packages to install / update
+packages=(
+ "aquamarine"
+ "hyprutils"
+ "hyprcursor"
+ "hyprwayland-scanner"
+ "hyprgraphics"
+ "hyprlang"
+ "hyprland-protocols"
+ "hyprland-qt-support"
+ "hyprland-qtutils"
+ "hyprland"
+ "hyprlock"
+ "hypridle"
+ "xdg-desktop-portal-hyprland"
+ "hyprpolkitagent"
+ "pyprland"
+)
+
+# rotating stars progress
+show_progress() {
+ spin='-'
+ while ps | grep $1 &> /dev/null; do
+ echo -ne "\rInstalling ${ORANGE}$2${RESET} ... Kindly wait! $spin"
+ sleep 0.3
+ case $spin in
+ '-') spin='\';;
+ '\') spin='|';;
+ '|') spin='/';;
+ '/') spin='-';;
+ esac
+ done
+ echo -en "\rInstalling ${ORANGE}$2${RESET} ... Kindly wait! .... Done!"
+}
+
+printf "\n%.0s" {1..1}
+printf "${NOTE} Installing ${BLUE}non-git hyprland version${RESET}....."
+printf "\n%.0s" {1..1}
+
+# Installing packages
+for package in "${packages[@]}"; do
+ $ISAUR -S --noconfirm "$package" &>/dev/null &
+ pid=$!
+
+ show_progress $pid $package
+
+ wait $pid
+
+ if [ $? -eq 0 ]; then
+ echo -e "\n${OK} ${ORANGE}$package${RESET} successfully installed."
+ printf "\n%.0s" {1..1}
+ else
+ echo -e "\n${ERROR} Failed to install ${MAGENTA}$package${RESET}"
+ printf "\n%.0s" {1..1}
+ fi
+done
+
+printf "\n%.0s" {1..1}
+printf "${OK} Done!! Now you NEED to ${YELLOW}EXIT${RESET} Hyprland and Re-Login! Enjoy!!!!"
+printf "\n%.0s" {1..2}
\ No newline at end of file
diff --git a/assets/hyprland-install/scripts/uninstall.sh b/assets/hyprland-install/scripts/uninstall.sh
new file mode 100755
index 0000000..7a33395
--- /dev/null
+++ b/assets/hyprland-install/scripts/uninstall.sh
@@ -0,0 +1,91 @@
+#!/bin/bash
+# /* ---- ๐ซ https://github.com/JaKooLit ๐ซ ---- */ #
+
+# uninstalling hyprland packages
+OK="$(tput setaf 2)[OK]$(tput sgr0)"
+ERROR="$(tput setaf 1)[ERROR]$(tput sgr0)"
+NOTE="$(tput setaf 3)[NOTE]$(tput sgr0)"
+INFO="$(tput setaf 4)[INFO]$(tput sgr0)"
+WARN="$(tput setaf 1)[WARN]$(tput sgr0)"
+CAT="$(tput setaf 6)[ACTION]$(tput sgr0)"
+MAGENTA="$(tput setaf 5)"
+WARNING="$(tput setaf 1)"
+YELLOW="$(tput setaf 3)"
+BLUE="$(tput setaf 4)"
+RESET="$(tput sgr0)"
+
+
+# List of packages to uninstall (including git versions)
+packages=(
+ "aquamarine"
+ "aquamarine-git"
+ "hyprutils"
+ "hyprutils-git"
+ "hyprcursor"
+ "hyprcursor-git"
+ "hyprwayland-scanner"
+ "hyprwayland-scanner-git"
+ "hyprgraphics"
+ "hyprgraphics-git"
+ "hyprlang"
+ "hyprlang-git"
+ "hyprland-protocols"
+ "hyprland-protocols-git"
+ "hyprland-qt-support"
+ "hyprland-qt-support-git"
+ "hyprland-qtutils"
+ "hyprland-qtutils-git"
+ "hyprland"
+ "hyprland-git"
+ "hyprlock"
+ "hyprlock-git"
+ "hypridle"
+ "hypridle-git"
+ "xdg-desktop-portal-hyprland"
+ "xdg-desktop-portal-hyprland-git"
+ "hyprpolkitagent"
+ "hyprpolkitagent-git"
+ "pyprland"
+)
+
+# Function for uninstall packages
+uninstall_package() {
+ local pkg="$1"
+
+ if pacman -Qi "$pkg" &>> /dev/null ; then
+ echo -e "${NOTE} Uninstalling $pkg ..."
+ sudo pacman -Rnsdd --noconfirm "$pkg" | grep -v "error: target not found"
+
+ if ! pacman -Qi "$pkg" &>> /dev/null ; then
+ echo -e "\e[1A\e[K${OK} $pkg was uninstalled."
+ else
+ echo -e "\e[1A\e[K${ERROR} $pkg failed to uninstall"
+ return 1
+ fi
+ else
+ echo -e "${NOTE} $pkg is not installed, skipping uninstallation."
+ fi
+ return 0
+}
+
+printf "\n%s - Removing Hyprland Packages including -git versions \n" "${NOTE}"
+
+# Track failures but continue with next packages
+overall_failed=0
+for PKG in "${packages[@]}"; do
+ uninstall_package "$PKG"
+ if [ $? -ne 0 ]; then
+
+ overall_failed=1
+ fi
+done
+
+# Remove specific configuration file since on my experience, it conflicts.
+# Dont worry, it will be reinstalled by either xdph non-git or git version
+sudo rm -rf "/usr/share/xdg-desktop-portal/hyprland-portals.conf"
+
+if [ $overall_failed -eq 0 ]; then
+ echo -e "${OK} All specified hyprland packages have been uninstalled."
+fi
+
+printf "\n%.0s" {1..2}
diff --git a/install-scripts/01-hypr-pkgs.sh b/install-scripts/01-hypr-pkgs.sh
index f631b48..de6bbd6 100755
--- a/install-scripts/01-hypr-pkgs.sh
+++ b/install-scripts/01-hypr-pkgs.sh
@@ -13,6 +13,7 @@ Extra=(
hypr_package=(
#aylurs-gtk-shell
+ bc
cliphist
curl
grim
diff --git a/install-scripts/pacman.sh b/install-scripts/pacman.sh
index 21915e2..f0dca86 100755
--- a/install-scripts/pacman.sh
+++ b/install-scripts/pacman.sh
@@ -41,7 +41,7 @@ echo -e "${CAT} ${MAGENTA}Pacman.conf${RESET} spicing up completed ${RESET}" 2>&
# updating pacman.conf
-printf "\n%s - ${SKY_BLUE}Synchronizing Pacman Repo${RESET}" "${INFO}"
+printf "\n%s - ${SKY_BLUE}Synchronizing Pacman Repo${RESET}\n" "${INFO}"
sudo pacman -Sy
-printf "\n%.0s" {1..2}
\ No newline at end of file
+printf "\n%.0s" {1..2}
diff --git a/install-scripts/pipewire.sh b/install-scripts/pipewire.sh
index 540c84b..5f5f791 100755
--- a/install-scripts/pipewire.sh
+++ b/install-scripts/pipewire.sh
@@ -11,6 +11,12 @@ pipewire=(
sof-firmware
)
+# added this as some reports script didnt install this.
+# basically force reinstall
+pipewire_2=(
+ pipewire-pulse
+)
+
############## WARNING: DO NOT EDIT BEYOND THIS LINE IF YOU DON'T KNOW WHAT YOU ARE DOING! ##############
# Set some colors for output messages
# Determine the directory where the script is located
@@ -27,7 +33,7 @@ LOG="Install-Logs/install-$(date +%d-%H%M%S)_pipewire.log"
# Disabling pulseaudio to avoid conflicts and logging output
echo -e "${NOTE} Disabling pulseaudio to avoid conflicts..."
-systemctl --user disable --now pulseaudio.socket pulseaudio.service 2>&1 > "$LOG"
+systemctl --user disable --now pulseaudio.socket pulseaudio.service >> "$LOG" 2>&1 || true
# Pipewire
echo -e "${NOTE} Installing ${SKY_BLUE}Pipewire${RESET} Packages..."
@@ -35,6 +41,10 @@ for PIPEWIRE in "${pipewire[@]}"; do
install_package "$PIPEWIRE" "$LOG"
done
+for PIPEWIRE2 in "${pipewire_2[@]}"; do
+ install_package_pacman "$PIPEWIRE" "$LOG"
+done
+
echo -e "${NOTE} Activating Pipewire Services..."
# Redirect systemctl output to log file
systemctl --user enable --now pipewire.socket pipewire-pulse.socket wireplumber.service 2>&1 | tee -a "$LOG"
diff --git a/install-scripts/sddm.sh b/install-scripts/sddm.sh
index 64022e3..4a9d703 100755
--- a/install-scripts/sddm.sh
+++ b/install-scripts/sddm.sh
@@ -9,6 +9,15 @@ sddm=(
sddm
)
+# 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! ##
# Determine the directory where the script is located
SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
@@ -29,16 +38,26 @@ printf "${NOTE} Installing sddm and dependencies........\n"
install_package "$package" "$LOG"
done
+printf "\n%.0s" {1..1}
+
# Check if other login managers installed and disabling its service before enabling sddm
-for login_manager in lightdm gdm3 gdm lxdm xdm lxdm-gtk3; do
- if pacman -Qs "$login_manager" > /dev/null; then
- echo "disabling $login_manager..."
- sudo systemctl disable "$login_manager.service" 2>&1 | tee -a "$LOG"
- echo "$login_manager disabled."
+for login_manager in "${login[@]}"; do
+ if pacman -Qs "$login_manager" > /dev/null 2>&1; then
+ sudo systemctl disable "$login_manager.service" >> "$LOG" 2>&1
+ echo "$login_manager disabled." >> "$LOG" 2>&1
fi
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
wayland_sessions_dir=/usr/share/wayland-sessions
diff --git a/install-scripts/sddm_theme.sh b/install-scripts/sddm_theme.sh
index 1181623..c1f5deb 100755
--- a/install-scripts/sddm_theme.sh
+++ b/install-scripts/sddm_theme.sh
@@ -48,13 +48,40 @@ if git clone --depth 1 "$source_theme" "$theme_name"; then
# Move cloned theme to the themes directory
sudo mv "$theme_name" "/usr/share/sddm/themes/$theme_name" 2>&1 | tee -a "$LOG"
- # Set up new theme
- echo -e "${NOTE} Setting up the login screen."
- sddm_conf_dir=/etc/sddm.conf.d
- [ ! -d "$sddm_conf_dir" ] && { printf "$CAT - $sddm_conf_dir not found, creating...\n"; sudo mkdir -p "$sddm_conf_dir" 2>&1 | tee -a "$LOG"; }
+
+ # setting up SDDM theme
+ sddm_conf_dir="/etc/sddm.conf.d"
+ BACKUP_SUFFIX=".bak"
- # Configure theme settings
- echo -e "[Theme]\nCurrent=$theme_name" | sudo tee "$sddm_conf_dir/theme.conf.user" >> "$LOG"
+ echo -e "${NOTE} Setting up the login screen." | tee -a "$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
sudo cp -r assets/sddm.png "/usr/share/sddm/themes/$theme_name/backgrounds/default" 2>&1 | tee -a "$LOG"
diff --git a/install-scripts/zsh.sh b/install-scripts/zsh.sh
index a3da1af..4097e6b 100755
--- a/install-scripts/zsh.sh
+++ b/install-scripts/zsh.sh
@@ -62,14 +62,20 @@ if command -v zsh >/dev/null; then
cp -r 'assets/.zshrc' ~/
cp -r 'assets/.zprofile' ~/
- printf "${NOTE} Changing default shell to ${MAGENTA}zsh${RESET}..."
- printf "\n%.0s" {1..2}
- while ! chsh -s $(which zsh); do
+ # Check if the current shell is zsh
+ if [[ "$SHELL" != *"zsh"* ]]; then
+ 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"
sleep 1
- done
- printf "${INFO} Shell changed successfully to ${MAGENTA}zsh${RESET}" 2>&1 | tee -a "$LOG"
+ done
+ 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
printf "\n%.0s" {1..2}
diff --git a/install-scripts/zsh_pokemon.sh b/install-scripts/zsh_pokemon.sh
index 54cbe39..2de0db1 100755
--- a/install-scripts/zsh_pokemon.sh
+++ b/install-scripts/zsh_pokemon.sh
@@ -2,6 +2,10 @@
# ๐ซ https://github.com/JaKooLit ๐ซ #
# pokemon-color-scripts#
+poke=(
+ mercurial
+)
+
## WARNING: DO NOT EDIT BEYOND THIS LINE IF YOU DON'T KNOW WHAT YOU ARE DOING! ##
# Determine the directory where the script is located
SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
@@ -15,15 +19,33 @@ source "$(dirname "$(readlink -f "$0")")/Global_functions.sh"
# 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"
+# 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} ..."
-install_package 'pokemon-colorscripts-git' "$LOG"
+
+if [ -d "pokemon-colorscripts" ]; then
+ cd pokemon-colorscripts && git pull && sudo ./install.sh && cd ..
+ else
+ git clone --depth 1 https://gitlab.com/phoneybadger/pokemon-colorscripts.git &&
+ cd pokemon-colorscripts && sudo ./install.sh && cd ..
+fi
# Check if ~/.zshrc exists
if [ -f "$HOME/.zshrc" ]; then
- sed -i '/#pokemon-colorscripts --no-title -s -r/s/^#//' "$HOME/.zshrc" >> "$LOG" 2>&1
- sed -i '/^fastfetch -c $HOME\/.config\/fastfetch\/config-compact.jsonc/s/^/#/' "$HOME/.zshrc" >> "$LOG" 2>&11
+ 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>&1
else
echo "$HOME/.zshrc not found. Cant enable ${YELLOW}Pokemon color scripts${RESET}" >> "$LOG" 2>&1
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}
diff --git a/install.sh b/install.sh
index 925c37b..ff52a97 100755
--- a/install.sh
+++ b/install.sh
@@ -72,7 +72,7 @@ echo -e "\e[35m
printf "\n%.0s" {1..1}
# Welcome message
-echo "${SKY_BLUE}Welcome to JaKooLit's Arch-Hyprland Install Script!${RESET}"
+echo "${SKY_BLUE}Welcome to JaKooLit's Arch-Hyprland (2025) Install Script!${RESET}"
echo
echo "${WARNING}ATTENTION: Run a full system update and Reboot first!! (Highly Recommended) ${RESET}"
echo
@@ -223,7 +223,21 @@ ask_yes_no "-Install ${YELLOW}AGS (aylur's GTK shell) v1${RESET} for Desktop-Lik
printf "\n"
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
+if [ "$sddm" == "y" ] || [ "$sddm" == "Y" ]; then
+ # List of services to check
+ services=("gdm.service" "gdm3.service" "lightdm.service" "lxdm.service")
+ # Loop through each service
+ for svc in "${services[@]}"; do
+ if systemctl is-active --quiet "$svc"; then
+ echo "${ERROR} ${MAGENTA}$svc${RESET} is active. stop or disable it first or ${YELLOW}DO NOT choose SDDM${RESET} to install."
+ echo "${NOTE} If you have GDM, no need to install SDDM. GDM will work fine as Login Manager for Hyprland."
+ printf "\n%.0s" {1..2}
+ exit 1
+ fi
+ done
+fi
if [[ "$sddm" == "Y" ]]; then
ask_yes_no "-Download and Install ${YELLOW}SDDM Theme?${RESET} " sddm_theme
fi