commit d640a50b1721bf09df717df9927943a04e078c2e Author: yuriy Date: Wed Aug 23 05:35:23 2023 -0400 initial commit diff --git a/.bashrc b/.bashrc new file mode 100644 index 0000000..85f4c24 --- /dev/null +++ b/.bashrc @@ -0,0 +1,408 @@ +# +# ~/.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.e. 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" +} + +parul(){ + pacman -Qqe > pkglist.txt + subl pkglist.txt +} + + +update() { + # echo "Updating Parcman Packages:" + # pacman -Sy archlinux-keyring ; + # paru -Syu + + # echo "Updating Parcman Packages:" + # sudo pacman -Sy archlinux-keyring chaotic-keyring endeavouros-keyring --noconfirm;paru -Syu --noconfirm;sudo pacman -Scc --noconfirm + sudo pacman -Sy archlinux-keyring chaotic-keyring endeavouros-keyring --noconfirm --needed ; paru -Syu --noconfirm --needed ; echo $(sudo ls /var/cache/pacman/pkg/ | wc -l) packages in cache + + echo "Updating Flatpak packages:" + flatpak update +} + +#------------------------------------------------------------ +# to refresh terminal with new config: +# . ~/.bashrc + +## Aliases for the functions above. +## Uncomment an alias if you want to use it. +## + +alias ef='_open_files_for_editing' # 'ef' opens given file(s) for editing +# alias pacdiff=_Pacdiff +alias parus='paru -S' +alias paruss='paru -Ss' +alias parur='paru -R' +alias parurr='paru -Rs' +alias parurl='sudo pacman -Syy' +alias ps='pacseek' +alias clip='xclip -sel clip' +alias snano='sudo nano' +alias pu='pdfunite' +alias joplin='joplin-desktop' +alias tda='todo.sh add' +alias yt='yt-dlp' +alias chrome='chromium' +alias mvideos='/home/yuriy/Syncthing/Python/Tools/MergeVideoFilesTogether.py' +#alias everything=fo + +export PATH="$HOME/.local/bin:$PATH" +################################################################################