diff --git a/CHANGELOGS.md b/CHANGELOGS.md index 321fb93..c823492 100644 --- a/CHANGELOGS.md +++ b/CHANGELOGS.md @@ -3,6 +3,11 @@ ## 20 Feb 2025 - Added nwg-displays for the upcoming Kools dots v2.3.12 +## 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 - added semi-unattended function. - move all the initial questions at the beginning diff --git a/README.md b/README.md index e00c517..21fd503 100644 --- a/README.md +++ b/README.md @@ -54,34 +54,10 @@ https://github.com/user-attachments/assets/49bc12b2-abaf-45de-a21c-67aacd9bb872 ### 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) -- latest Ksk royal's [youtube video](https://youtu.be/lR7EtbVYWuc?si=eNHVSbStKS1eNVly) installation - -
- -๐Ÿ“ท Screenshots - -

- - -

- -

- - - -

- - -#### ๐Ÿ“ท More Screenshots on v2 [`Link`](https://github.com/JaKooLit/screenshots/tree/main/Hyprland-Dots-Showcase) and [`Previous-Screenshots`](https://github.com/JaKooLit/screenshots/tree/main/Hyprland-ScreenShots/Arch-v2) and - - -#### โœจ A video walk through my dotfiles[`Link`](https://youtu.be/fO-RBHvVEcc?si=ijqxxnq_DLiyO8xb) -#### โœจ A video walk on My Hyprland-Dots v2[`Link`](https://youtu.be/yaVurRoXc-s?si=iDnBC5S3thPBX3ZE) - -#### ๐Ÿ“ฝ๏ธ youtube video showcase: [`Link`](https://youtu.be/W2UFwkgdwNo) - -
### ๐Ÿชง๐Ÿชง๐Ÿชง ANNOUNCEMENT ๐Ÿชง๐Ÿชง๐Ÿชง - This Repo does not contain Hyprland Dots or configs! Dotfiles can be checked here [`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. @@ -114,8 +90,10 @@ https://github.com/user-attachments/assets/49bc12b2-abaf-45de-a21c-67aacd9bb872 #### ๐Ÿ‘€ NVidia GPU Owners. - By default, nvidia-dkms will be installed. and only supports GTX 900 and newer. If required to install older driver, edit the nvidia.sh in install-scripts directory + > [!IMPORTANT] > If you want to use nouveau driver, choose N when asked if you have nvidia gpu. This is because the nvidia installer part, it will blacklist nouveau. Hyprland will still be installed but it will skip blacklisting nouveau. + - After installation, check [`THIS`](https://github.com/JaKooLit/Hyprland-Dots/wiki/Notes_to_remember#--for-nvidia-gpu-users) ## โœจ to use this script @@ -132,7 +110,7 @@ chmod +x install.sh -### ๐ŸคŸ 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