# # ~/.bashrc # ## Save history of multiple terminal windows #-https://unix.stackexchange.com/questions/1288/preserve-bash-history-in-multiple-terminal-windows # Avoid duplicates # borked, doesn't save in correct order and inserts random entries # HISTCONTROL=ignoredups:erasedups # # When the shell exits, append to the history file instead of overwriting it # shopt -s histappend # # After each command, append to the history file and reread it # PROMPT_COMMAND="${PROMPT_COMMAND:+$PROMPT_COMMAND$'\n'}history -a; history -c; history -r" # Softlink ~ config file to syncthing config fodler # ln -s /home/yuriy/Syncthing/Configurations/Linux.config/.bashrc /home/yuriy/.bashrc # If not running interactively, don't do anything [[ $- != *i* ]] && return [[ -f ~/.welcome_screen ]] && . ~/.welcome_screen _set_my_PS1() { PS1='[\u@\h \W]\$ ' if [ "$(whoami)" = "liveuser" ] ; then local iso_version="$(grep ^VERSION= /usr/lib/endeavouros-release 2>/dev/null | cut -d '=' -f 2)" if [ -n "$iso_version" ] ; then local prefix="eos-" local iso_info="$prefix$iso_version" PS1="[\u@$iso_info \W]\$ " fi fi } _set_my_PS1 unset -f _set_my_PS1 ShowInstallerIsoInfo() { local file=/usr/lib/endeavouros-release if [ -r $file ] ; then cat $file else echo "Sorry, installer ISO info is not available." >&2 fi } alias ls='ls --color=auto' alias ll='ls -lav --ignore=..' # show long listing of all except ".." alias l='ls -lav --ignore=.?*' # show long listing but no hidden dotfiles except "." [[ "$(whoami)" = "root" ]] && return [[ -z "$FUNCNEST" ]] && export FUNCNEST=100 # limits recursive functions, see 'man bash' ## Use the up and down arrow keys for finding a command in history ## (you can write some initial letters of the command first). bind '"\e[A":history-search-backward' bind '"\e[B":history-search-forward' ################################################################################ ## Some generally useful functions. ## Consider uncommenting aliases below to start using these functions. _GeneralCmdCheck() { # A helper for functions UpdateArchPackages and UpdateAURPackages. echo "$@" >&2 "$@" || { echo "Error: '$*' failed." >&2 exit 1 } } _CheckInternetConnection() { # curl --silent --connect-timeout 8 https://8.8.8.8 >/dev/null eos-connection-checker local result=$? test $result -eq 0 || echo "No internet connection!" >&2 return $result } _CheckArchNews() { local conf=/etc/eos-update-notifier.conf if [ -z "$CheckArchNewsForYou" ] && [ -r $conf ] ; then source $conf fi if [ "$CheckArchNewsForYou" = "yes" ] ; then local news="$(yay -Pw)" if [ -n "$news" ] ; then echo "Arch news:" >&2 echo "$news" >&2 echo "" >&2 # read -p "Press ENTER to continue (or Ctrl-C to stop): " else echo "No Arch news." >&2 fi fi } UpdateArchPackages() { # Updates Arch packages. _CheckInternetConnection || return 1 _CheckArchNews #local updates="$(yay -Qu --repo)" local updates="$(checkupdates)" if [ -n "$updates" ] ; then echo "Updates from upstream:" >&2 echo "$updates" | sed 's|^| |' >&2 _GeneralCmdCheck sudo pacman -Syu "$@" return 0 else echo "No upstream updates." >&2 return 1 fi } UpdateAURPackages() { # Updates AUR packages. _CheckInternetConnection || return 1 local updates if [ -x /usr/bin/yay ] ; then updates="$(yay -Qua)" if [ -n "$updates" ] ; then echo "Updates from AUR:" >&2 echo "$updates" | sed 's|^| |' >&2 _GeneralCmdCheck yay -Syua "$@" else echo "No AUR updates." >&2 fi else echo "Warning: /usr/bin/yay does not exist." >&2 fi } psyu() { # Updates all packages in the system. # Upstream (i.eUpdate. Arch) packages are updated first. # If there are Arch updates, you should run # this function a second time to update # the AUR packages too. UpdateArchPackages || UpdateAURPackages } _open_files_for_editing() { # Open any given document file(s) for editing (or just viewing). # Note1: Do not use for executable files! # Note2: uses mime bindings, so you may need to use # e.g. a file manager to make some file bindings. if [ -x /usr/bin/exo-open ] ; then echo "exo-open $*" >&2 /usr/bin/exo-open "$@" >& /dev/null & return fi if [ -x /usr/bin/xdg-open ] ; then for file in "$@" ; do echo "xdg-open $file" >&2 /usr/bin/xdg-open "$file" >& /dev/null & done return fi echo "Sorry, none of programs [$progs] is found." >&2 echo "Tip: install one of packages" >&2 for prog in $progs ; do echo " $(pacman -Qqo "$prog")" >&2 done } _Pacdiff() { local differ pacdiff=/usr/bin/pacdiff if [ -n "$(echo q | DIFFPROG=diff $pacdiff)" ] ; then for differ in kdiff3 meld diffuse ; do if [ -x /usr/bin/$differ ] ; then DIFFPROG=$differ su-c_wrapper $pacdiff break fi done fi } # Reboot directly to Windows # https://unix.stackexchange.com/questions/43196/how-can-i-tell-grub-i-want-to-reboot-into-windows-before-i-reboot # Inspired by http://askubuntu.com/questions/18170/how-to-reboot-into-windows-from-ubuntu bootwindows () { windows_title=$(grep -i windows /boot/grub/grub.cfg | cut -d "'" -f 2) notify-send -t 1000 "$windows_title" # sudo grub-reboot "$windows_title" && sudo reboot } # alias reboot-to-windows='reboot_to_windows' ## FZF # https://github.com/junegunn/fzf/wiki/examples#opening-files fe() { IFS=$'\n' files=($(fzf-tmux --query="$1" --multi --select-1 --exit-0)) [[ -n "$files" ]] && ${EDITOR:-vim} "${files[@]}" } ## FZF # Modified version where you can press # - CTRL-O to open with `open` command, # - CTRL-E or Enter key to open with the $EDITOR fo() { cd /home/$USER/ IFS=$'\n' out=("$(fzf -e --query="$1" --exit-0 --expect=alt-e,alt-o,ctrl-o,ctrl-e,ctrl-p)") key=$(head -1 <<< "$out") file=$(head -2 <<< "$out" | tail -1) # echo "key1: $key" if [ -n "$file" ]; then file=/home/$USER/${file} case "$key" in *ctrl-p*) echo ${file} | xclip -sel c ;; # copy variable contents to clip *alt-o*) Directory="$(dirname "${file}")" ; dolphin "${Directory}";; *alt-e*) # FullFilepath=/home/me/mydir/file.c Directory="$(dirname "${file}")" # Get directory FileNameWExt="$(basename "${file}")" # File Name wExtension FileNameNoExt=${file%.*} # File name wOut Extension FileExtension="${file##*.}" # File Extension # echo "$Directory" # echo "$FileNameWExt" # echo "$FileNameNoExt" # echo "$FileExtension" # xdg-open $file case "$FileExtension" in *txt*) subl ${file} ;; *conf*) subl ${file} ;; *sh*) subl ${file} ;; *py*) subl ${file} ;; *jpg*) gimp ${file} & xdotool key Escape ;; *png*) gimp ${file} & xdotool key Escape ;; *) subl ${file} ;; # sublime everything else esac ;; *) xdg-open $file ;; esac # echo "$file" # echo "key2: $key" # [ "$key" = ctrl-o ] && open "$file" || gimp "$file" & # [ "$key" = ctrl-p ] && echo "$file" fi #sleep .5 #xdotool key F3 fo } # Expand on this later foa() { cd / IFS=$'\n' out=("$(fzf -e --query="$1" --exit-0 --expect=alt-e,alt-o,ctrl-o,ctrl-e,ctrl-p)") key=$(head -1 <<< "$out") file=$(head -2 <<< "$out" | tail -1) # echo "key1: $key" if [ -n "$file" ]; then file=/home/$USER/${file} case "$key" in *ctrl-p*) echo ${file} | xclip -sel c ;; # copy variable contents to clip *alt-o*) Directory="$(dirname "${file}")" ; dolphin "${Directory}";; *alt-e*) # FullFilepath=/home/me/mydir/file.c Directory="$(dirname "${file}")" # Get directory FileNameWExt="$(basename "${file}")" # File Name wExtension FileNameNoExt=${file%.*} # File name wOut Extension FileExtension="${file##*.}" # File Extension # echo "$Directory" # echo "$FileNameWExt" # echo "$FileNameNoExt" # echo "$FileExtension" # xdg-open $file case "$FileExtension" in *txt*) subl ${file} ;; *conf*) subl ${file} ;; *sh*) subl ${file} ;; *py*) subl ${file} ;; *jpg*) gimp ${file} & xdotool key Escape ;; *png*) gimp ${file} & xdotool key Escape ;; *) subl ${file} ;; # sublime everything else esac ;; *) xdg-open $file ;; esac # echo "$file" # echo "key2: $key" # [ "$key" = ctrl-o ] && open "$file" || gimp "$file" & # [ "$key" = ctrl-p ] && echo "$file" fi #sleep .5 #xdotool key F3 fo } sdl() { local playlist="$1" cd "/home/yuriy/Executables/zspotify/" python zspotify ${playlist} echo "we done!" } # cf - fuzzy cd from anywhere # ex: cf word1 word2 ... (even part of a file name) # zsh autoload function cf() { local file file="$(locate -Ai -0 $@ | grep -z -vE '~$' | fzf --read0 -0 -1)" if [[ -n $file ]] then if [[ -d $file ]] then cd -- $file else cd -- ${file:h} fi fi } # cdf - cd into the directory of the selected file cdf() { local file local dir file=$(fzf +m -q "$1") && dir=$(dirname "$file") && cd "$dir" } # fh - repeat history # fh - repeat history fh() { print -z $( ([ -n "$ZSH_NAME" ] && fc -l 1 || history) | fzf +s --tac | sed -E 's/ *[0-9]*\*? *//' | sed -E 's/\\/\\\\/g') } rl() { # reload bashrc in current instance . ~/.bashrc echo "Successfully Reloaded .bashrc" } dlrl() { echo "Downloading latest .bashrc from gitea" cd ~/ && wget -q -O .bashrc https://git.zinchuk.xyz/yuriy/Linux-bashrc-Profile/raw/branch/main/.bashrc && chmod 744 .bashrc . ~/.bashrc echo "Loaded latest .bashrc" } parul(){ pacman -Qqe > pkglist.txt subl pkglist.txt } update() { paru -Sy archlinux-keyring chaotic-keyring endeavouros-keyring --noconfirm --needed # update keyrings paru -Syu --noconfirm # update packages, no confirmation # Skip clearing update cache if this is Flexo Server if [[ $(hostname) == "EOS-SERVER" ]]; then echo "Skipping Clearing Update Cache" else echo "Clearing out Pacman Cache" echo clearing out $(sudo ls /var/cache/pacman/pkg/ | wc -l) packages in cache ( echo "y"; echo "y" ) | paru -Sccd # (d) removes all orphaned packages that are no longer needed on your system fi if command -v flatpak &> /dev/null; then echo "Updating Flatpak packages:" flatpak update fi # 1 liner # paru -Sy archlinux-keyring chaotic-keyring endeavouros-keyring --noconfirm --needed && paru -Syu --noconfirm && { [[ $(hostname) == "EOS-SERVER" ]] && echo "Skipping Clearing Update Cache" || (echo "Clearing out Pacman Cache" && echo clearing out $(sudo ls /var/cache/pacman/pkg/ | wc -l) packages in cache && ( echo "y"; echo "y" ) | paru -Scc); } && echo "updating arch mirrorlists" && eos-rankmirrors } updatewr() { # Run the Update function update # Restart sudo reboot } rank() { echo "re-ranking arch mirrorlists" eos-rankmirrors } rkeymapper(){ sudo pkill keymapper sudo systemctl restart keymapperd & keymapper & echo "keymapper restarted successfully" } cdp(){ filepath=${1} Directory="$(dirname "${filepath}")" # Get directory FolderName="$(basename "${Directory}")" # Get folder name FileNameWExt="$(basename "${filepath}")" # File Name wExtension FileNameNoExt=${FileNameWExt%.*} # File name wOut Extension FileExtension="${FileNameWExt##*.}" # File Extension # echo "${FolderName}" # echo ${FolderName} cd ${Directory} # echo ${1} } #------------------------------------------------------------ # to refresh terminal with new config: # . ~/.bashrc ## Aliases for the functions above. ## Uncomment an alias if you want to use it. ## ################################################################################ export PATH="$HOME/.local/bin:$PATH" # pacman/paru aliases # ------------------- # alias pacdiff=_Pacdiff alias parus='paru -Sy ; paru -S' alias parusy='paru -Sy ; paru -S --noconfirm' alias paruss='paru -Ss' alias parur='paru -R' alias parurr='paru -Rs' alias parurl='sudo pacman -Syy' alias ps='pacseek' # exa (ls Replacement) alias ls="exa -l" alias ll="exa -alh" alias lst="exa --tree --level 2 --long" # misc aliases alias ef='_open_files_for_editing' # 'ef' opens given file(s) for editing alias clip='xclip -sel clip' # output piped content to clipboard alias snano='sudo nano' alias pu='pdfunite' alias tda='todo.sh add' alias yt='yt-dlp' alias chrome='chromium' alias mvideos='/home/yuriy/Syncthing/Python/Tools/MergeVideoFilesTogether.py' #alias everything=fo # boot/switch to CLI/GUI target alias switchtocli="sudo systemctl isolate multi-user.target" alias switchtogui="sudo systemctl isolate graphical.target" alias bootcli="sudo systemctl set-default multi-user.target" alias bootgui="sudo systemctl set-default graphical.target" # flatpak alias flatpaks="sudo flatpak install" alias flatpakr="sudo flatpak uninstall" # Git Aliases alias gac="git add .;git commit -m" alias gacc='f() { git add . ; git commit -m "$@" ; git push; }; f' alias gpm="git push origin master" alias pull="git pull" alias gpp="git pull" alias gl="git log" alias glo="git log --oneline" alias gch="git checkout ${1}" alias gb="git branch ${1}" alias gs="git status" alias gss="git status" alias gdd="git diff" alias gdf="git diff" alias gsi="git submodule init" alias gsu="git submodule update --recursive --remote" alias gr="touch README.md ;nano README.md" # choco install nano -y ################################################################################ # Initialize Zoxide if it's installed if command -v zoxide &> /dev/null; then # Initialize zoxide with the 'cd' command eval "$(zoxide init --cmd cd bash)" fi if command -v atuin &> /dev/null; then # Initialize preexec and atuin if atuin is installed [[ -f ~/.bash-preexec.sh ]] && source ~/.bash-preexec.sh eval "$(atuin init bash)" fi