Over the years I have been building out my bashrc file.
Tonight I added a new alias which honestly surprises me that I didn’t think of before.
It will download audio from a website using yt-dlp to my /music folder.
That alias is -
alias getaudio=‘read -p "Enter YouTube URL: " url; yt-dlp -f bestaudio --extract-audio --audio-format mp3 --audio-quality 0 -o “/home/mike/Music/%(title)s.%(ext)s” “$url”’
Here is my entire .bashrc file. I really like the prompt output. I’ll link to the screenshot in the appropriate sub.
#!/bin/bash
# Function to generate the pre-prompt line
function pre_prompt {
newPWD="${PWD}"
let promptsize=$(echo -n "┌─(\u@\h $(date '+%a, %d %b %y'))(${PWD})" | wc -c | tr -d " ")
let fillsize=${COLUMNS}-${promptsize}
fill=""
while [ "$fillsize" -gt "0" ]; do
fill="${fill}─"
let fillsize=${fillsize}-1
done
if [ "$fillsize" -lt "0" ]; then
let cutt=3-${fillsize}
newPWD="...$(echo -n $PWD | sed -e "s/\(^.\{$cutt\}\)\(.*\)/\2/")"
fi
}
PROMPT_COMMAND=pre_prompt
# Define color escape sequences
export black="\[\033[0;38;5;0m\]"
export red="\[\033[0;38;5;1m\]"
export orange="\[\033[0;38;5;130m\]"
export green="\[\033[0;38;5;2m\]"
export yellow="\[\033[0;38;5;3m\]"
export blue="\[\033[0;38;5;4m\]"
export bblue="\[\033[0;38;5;12m\]"
export magenta="\[\033[0;38;5;55m\]"
export cyan="\[\033[0;38;5;6m\]"
export white="\[\033[0;38;5;7m\]"
# Define PS1 with colors and structure
PS1="${bblue}┌─(${cyan}\u@\h ${yellow}\$(date '+%a, %d %b %y')${bblue})${fill}(${cyan}\${newPWD}${bblue})─┐\n└─(${green}\$(date '+%H:%M') ${red}\$${bblue})─>${white} "
# Aliases and other settings
alias ls='ls --color=auto'
alias ll='ls -lh'
alias la='ls -A'
alias l='ls -CF'
alias getaudio='read -p "Enter YouTube URL: " url; yt-dlp -f bestaudio --extract-audio --audio-format mp3 --audio-quality 0 -o "/home/mike/Music/%(title)s.%(ext)s" "$url"'
# Enable programmable completion features
if [ -f /etc/bash_completion ]; then
. /etc/bash_completion
fi
fastfetch
#!/usr/bin/env bash
iatest=$(expr index "$-" i)
#######################################################
# SOURCED ALIASES AND SCRIPTS BY zachbrowne.me
#######################################################
if command -v fastfetch &> /dev/null; then
# Only run fastfetch if we're in an interactive shell
if [[ $- == *i* ]]; then
fastfetch
fi
fi
# Source global definitions
if [ -f /etc/bashrc ]; then
. /etc/bashrc
fi
# Enable bash programmable completion features in interactive shells
if [ -f /usr/share/bash-completion/bash_completion ]; then
. /usr/share/bash-completion/bash_completion
elif [ -f /etc/bash_completion ]; then
. /etc/bash_completion
fi
#######################################################
# EXPORTS
#######################################################
# Disable the bell
if [[ $iatest -gt 0 ]]; then bind "set bell-style visible"; fi
# Expand the history size
export HISTFILESIZE=10000
export HISTSIZE=500
export HISTTIMEFORMAT="%F %T" # add timestamp to history
# Don't put duplicate lines in the history and do not add lines that start with a space
export HISTCONTROL=erasedups:ignoredups:ignorespace
# Check the window size after each command and, if necessary, update the values of LINES and COLUMNS
shopt -s checkwinsize
# Causes bash to append to history instead of overwriting it so if you start a new terminal, you have old session history
shopt -s histappend
PROMPT_COMMAND='history -a'
# set up XDG folders
export XDG_DATA_HOME="$HOME/.local/share"
export XDG_CONFIG_HOME="$HOME/.config"
export XDG_STATE_HOME="$HOME/.local/state"
export XDG_CACHE_HOME="$HOME/.cache"
# Seeing as other scripts will use it might as well export it
export LINUXTOOLBOXDIR="$HOME/linuxtoolbox"
# Allow ctrl-S for history navigation (with ctrl-R)
[[ $- == *i* ]] && stty -ixon
# Ignore case on auto-completion
# Note: bind used instead of sticking these in .inputrc
if [[ $iatest -gt 0 ]]; then bind "set completion-ignore-case on"; fi
# Show auto-completion list automatically, without double tab
if [[ $iatest -gt 0 ]]; then bind "set show-all-if-ambiguous On"; fi
# Set the default editor
if command -v micro &> /dev/null; then
export EDITOR=micro
export VISUAL=micro
alias vim='nvim'
alias vi='nvim'
alias svi='sudo nvim'
alias vis='nvim "+set si"'
else
export EDITOR=vim
export VISUAL=vim
fi
alias spico='sudo pico'
alias snano='sudo nano'
alias smicro='sudo micro'
alias edit="micro"
alias yeet='sudo pacman -Rsn'
# To have colors for ls and all grep commands such as grep, egrep and zgrep
export CLICOLOR=1
export LS_COLORS='no=00:fi=00:di=00;34:ln=01;36:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:ex=01;32:*.tar=01;31:*.tgz=01;31:*.arj=01;31:*.taz=01;31:*.lzh=01;31:*.zip=01;31:*.z=01;31:*.Z=01;31:*.gz=01;31:*.bz2=01;31:*.deb=01;31:*.rpm=01;31:*.jar=01;31:*.jpg=01;35:*.jpeg=01;35:*.gif=01;35:*.bmp=01;35:*.pbm=01;35:*.pgm=01;35:*.ppm=01;35:*.tga=01;35:*.xbm=01;35:*.xpm=01;35:*.tif=01;35:*.tiff=01;35:*.png=01;35:*.mov=01;35:*.mpg=01;35:*.mpeg=01;35:*.avi=01;35:*.fli=01;35:*.gl=01;35:*.dl=01;35:*.xcf=01;35:*.xwd=01;35:*.ogg=01;35:*.mp3=01;35:*.wav=01;35:*.xml=00;31:'
#export GREP_OPTIONS='--color=auto' #deprecated
# Check if ripgrep is installed
if command -v rg &> /dev/null; then
# Alias grep to rg if ripgrep is installed
alias grep='rg'
else
# Alias grep to /usr/bin/grep with GREP_OPTIONS if ripgrep is not installed
alias grep="/usr/bin/grep $GREP_OPTIONS"
fi
unset GREP_OPTIONS
# Color for manpages in less makes manpages a little easier to read
export LESS_TERMCAP_mb=$'\E[01;31m'
export LESS_TERMCAP_md=$'\E[01;31m'
export LESS_TERMCAP_me=$'\E[0m'
export LESS_TERMCAP_se=$'\E[0m'
export LESS_TERMCAP_so=$'\E[01;44;33m'
export LESS_TERMCAP_ue=$'\E[0m'
export LESS_TERMCAP_us=$'\E[01;32m'
#######################################################
# MACHINE SPECIFIC ALIASES
#######################################################
# aliases for SSH
# alias SERVERNAME='ssh YOURWEBSITE.com -l USERNAME -p PORTNUMBERHERE'
# aliases to change the directory
alias web='cd /var/www/html'
# aliases to mount ISO files
# mount -o loop /home/NAMEOFISO.iso /home/ISOMOUNTDIR/
# umount /home/NAMEOFISO.iso
# (Both commands done as root only.)
#######################################################
# GENERAL ALIASES
#######################################################
# To temporarily bypass an alias, we precede the command with a \
# EG: the ls command is aliased, but to use the normal ls command you would type \ls
# Add an "alert" alias for long running commands. Use like so:
# sleep 10; alert
alias alert='notify-send --urgency=low -i "$([ $? = 0 ] && echo terminal || echo error)" "$(history|tail -n1|sed -e '\''s/^\s*[0-9]\+\s*//;s/[;&|]\s*alert$//'\'')"'
# Edit this .bashrc file
alias ebrc='micro ~/.bashrc'
# Show help for this .bashrc file
alias hlp='less ~/.bashrc_help'
# alias to show the date
alias da='date "+%Y-%m-%d %A %T %Z"'
# aliases to modified commands
alias cp='cp -i'
alias mv='mv -i'
if command -v trash &> /dev/null; then
alias rm='trash -v'
else
alias rm='rm -i' # fallback to interactive remove
fi
alias mkdir='mkdir -p'
alias ps='ps auxf'
alias less='less -R'
alias cls='clear'
alias apt-get='sudo apt-get'
alias multitail='multitail --no-repeat -c'
alias freshclam='sudo freshclam'
alias vi='nvim'
alias svi='sudo vi'
alias vis='nvim "+set si"'
# Change directory aliases
alias home='cd ~'
alias cd..='cd ..'
alias ..='cd ..'
alias ...='cd ../..'
alias ....='cd ../../..'
alias .....='cd ../../../..'
# cd into the old directory
alias bd='cd "$OLDPWD"'
# Remove a directory and all files
alias rmd='/bin/rm --recursive --force --verbose '
# aliases for multiple directory listing commands
alias la='ls -Alh' # show hidden files
alias ls='ls -aFh --color=always' # add colors and file type extensions
alias lx='ls -lXBh' # sort by extension
alias lk='ls -lSrh' # sort by size
alias lc='ls -ltcrh' # sort by change time
alias lu='ls -lturh' # sort by access time
alias lr='ls -lRh' # recursive ls
alias lt='ls -ltrh' # sort by date
alias lm='ls -alh |more' # pipe through 'more'
alias lw='ls -xAh' # wide listing format
alias ll='ls -Fls' # long listing format
alias labc='ls -lap' # alphabetical sort
alias lf="ls -l | egrep -v '^d'" # files only
alias ldir="ls -l | egrep '^d'" # directories only
alias lla='ls -Al' # List and Hidden Files
alias las='ls -A' # Hidden Files
alias lls='ls -l' # List
# alias chmod commands
alias mx='chmod a+x'
alias 000='chmod -R 000'
alias 644='chmod -R 644'
alias 666='chmod -R 666'
alias 755='chmod -R 755'
alias 777='chmod -R 777'
# Search command line history
alias h="history | grep "
# Search running processes
alias p="ps aux | grep "
alias topcpu="/bin/ps -eo pcpu,pid,user,args | sort -k 1 -r | head -10"
# Search files in the current folder
alias f="find . | grep "
# Count all files (recursively) in the current folder
alias countfiles="for t in files links directories; do echo \`find . -type \${t:0:1} | wc -l\` \$t; done 2> /dev/null"
# To see if a command is aliased, a file, or a built-in command
alias checkcommand="type -t"
# Show open ports
alias openports='netstat -nape --inet'
# aliases for safe and forced reboots
alias rebootsafe='sudo shutdown -r now'
alias rebootforce='sudo shutdown -r -n now'
# aliases to show disk space and space used in a folder
alias diskspace="du -S | sort -n -r |more"
alias folders='du -h --max-depth=1'
alias folderssort='find . -maxdepth 1 -type d -print0 | xargs -0 du -sk | sort -rn'
alias tree='tree -CAhF --dirsfirst'
alias treed='tree -CAFd'
alias mountedinfo='df -hT'
# aliases for archives
alias mktar='tar -cvf'
alias mkbz2='tar -cvjf'
alias mkgz='tar -cvzf'
alias untar='tar -xvf'
alias unbz2='tar -xvjf'
alias ungz='tar -xvzf'
# Show all logs in /var/log
alias logs="sudo find /var/log -type f -exec file {} \; | grep 'text' | cut -d' ' -f1 | sed -e's/:$//g' | grep -v '[0-9]$' | xargs tail -f"
# SHA1
alias sha1='openssl sha1'
alias clickpaste='sleep 3; xdotool type "$(xclip -o -selection clipboard)"'
# KITTY - alias to be able to use kitty features when connecting to remote servers(e.g use tmux on remote server)
alias kssh="kitty +kitten ssh"
# alias to cleanup unused docker containers, images, networks, and volumes
alias docker-clean=' \
docker container prune -f ; \
docker image prune -f ; \
docker network prune -f ; \
docker volume prune -f '
#######################################################
# SPECIAL FUNCTIONS
#######################################################
# Extracts any archive(s) (if unp isn't installed)
extract() {
for archive in "$@"; do
if [ -f "$archive" ]; then
case $archive in
*.tar.bz2) tar xvjf $archive ;;
*.tar.gz) tar xvzf $archive ;;
*.bz2) bunzip2 $archive ;;
*.rar) rar x $archive ;;
*.gz) gunzip $archive ;;
*.tar) tar xvf $archive ;;
*.tbz2) tar xvjf $archive ;;
*.tgz) tar xvzf $archive ;;
*.zip) unzip $archive ;;
*.Z) uncompress $archive ;;
*.7z) 7z x $archive ;;
*) echo "don't know how to extract '$archive'..." ;;
esac
else
echo "'$archive' is not a valid file!"
fi
done
}
# Searches for text in all files in the current folder
ftext() {
# -i case-insensitive
# -I ignore binary files
# -H causes filename to be printed
# -r recursive search
# -n causes line number to be printed
# optional: -F treat search term as a literal, not a regular expression
# optional: -l only print filenames and not the matching lines ex. grep -irl "$1" *
grep -iIHrn --color=always "$1" . | less -r
}
# Copy file with a progress bar
cpp() {
set -e
strace -q -ewrite cp -- "${1}" "${2}" 2>&1 |
awk '{
count += $NF
if (count % 10 == 0) {
percent = count / total_size * 100
printf "%3d%% [", percent
for (i=0;i<=percent;i++)
printf "="
printf ">"
for (i=percent;i<100;i++)
printf " "
printf "]\r"
}
}
END { print "" }' total_size="$(stat -c '%s' "${1}")" count=0
}
# Copy and go to the directory
cpg() {
if [ -d "$2" ]; then
cp "$1" "$2" && cd "$2"
else
cp "$1" "$2"
fi
}
# Move and go to the directory
mvg() {
if [ -d "$2" ]; then
mv "$1" "$2" && cd "$2"
else
mv "$1" "$2"
fi
}
# Create and go to the directory
mkdirg() {
mkdir -p "$1"
cd "$1"
}
# Goes up a specified number of directories (i.e. up 4)
up() {
local d=""
limit=$1
for ((i = 1; i <= limit; i++)); do
d=$d/..
done
d=$(echo $d | sed 's/^\///')
if [ -z "$d" ]; then
d=..
fi
cd $d
}
# Automatically do an ls after each cd, z, or zoxide
cd ()
{
if [ -n "$1" ]; then
builtin cd "$@" && ls
else
builtin cd ~ && ls
fi
}
# Returns the last 2 fields of the working directory
pwdtail() {
pwd | awk -F/ '{nlast = NF -1;print $nlast"/"$NF}'
}
# Show the current distribution
distribution () {
local dtype="unknown" # Default to unknown
# Use /etc/os-release for modern distro identification
if [ -r /etc/os-release ]; then
source /etc/os-release
case $ID in
fedora|rhel|centos)
dtype="redhat"
;;
sles|opensuse*)
dtype="suse"
;;
ubuntu|debian)
dtype="debian"
;;
gentoo)
dtype="gentoo"
;;
arch|manjaro)
dtype="arch"
;;
slackware)
dtype="slackware"
;;
*)
# Check ID_LIKE only if dtype is still unknown
if [ -n "$ID_LIKE" ]; then
case $ID_LIKE in
*fedora*|*rhel*|*centos*)
dtype="redhat"
;;
*sles*|*opensuse*)
dtype="suse"
;;
*ubuntu*|*debian*)
dtype="debian"
;;
*gentoo*)
dtype="gentoo"
;;
*arch*)
dtype="arch"
;;
*slackware*)
dtype="slackware"
;;
esac
fi
# If ID or ID_LIKE is not recognized, keep dtype as unknown
;;
esac
fi
echo $dtype
}
DISTRIBUTION=$(distribution)
if command -v bat &> /dev/null || command -v batcat &> /dev/null; then
if [ "$DISTRIBUTION" = "redhat" ] || [ "$DISTRIBUTION" = "arch" ]; then
alias cat='bat'
else
alias cat='batcat'
fi
fi
# Show the current version of the operating system
ver() {
local dtype
dtype=$(distribution)
case $dtype in
"redhat")
if [ -s /etc/redhat-release ]; then
cat /etc/redhat-release
else
cat /etc/issue
fi
uname -a
;;
"suse")
cat /etc/SuSE-release
;;
"debian")
lsb_release -a
;;
"gentoo")
cat /etc/gentoo-release
;;
"arch")
cat /etc/os-release
;;
"slackware")
cat /etc/slackware-version
;;
*)
if [ -s /etc/issue ]; then
cat /etc/issue
else
echo "Error: Unknown distribution"
exit 1
fi
;;
esac
}
# Automatically install the needed support files for this .bashrc file
install_bashrc_support() {
local dtype
dtype=$(distribution)
case $dtype in
"redhat")
sudo yum install multitail tree zoxide trash-cli fzf bash-completion fastfetch
;;
"suse")
sudo zypper install multitail tree zoxide trash-cli fzf bash-completion fastfetch
;;
"debian")
sudo apt-get install multitail tree zoxide trash-cli fzf bash-completion
# Fetch the latest fastfetch release URL for linux-amd64 deb file
FASTFETCH_URL=$(curl -s https://api.github.com/repos/fastfetch-cli/fastfetch/releases/latest | grep "browser_download_url.*linux-amd64.deb" | cut -d '"' -f 4)
# Download the latest fastfetch deb file
curl -sL $FASTFETCH_URL -o /tmp/fastfetch_latest_amd64.deb
# Install the downloaded deb file using apt-get
sudo apt-get install /tmp/fastfetch_latest_amd64.deb
;;
"arch")
sudo paru multitail tree zoxide trash-cli fzf bash-completion fastfetch
;;
"slackware")
echo "No install support for Slackware"
;;
*)
echo "Unknown distribution"
;;
esac
}
# IP address lookup
alias whatismyip="whatsmyip"
function whatsmyip () {
# Internal IP Lookup.
if command -v ip &> /dev/null; then
echo -n "Internal IP: "
ip addr show enp4s0 | grep "inet " | awk '{print $2}' | cut -d/ -f1
else
echo -n "Internal IP: "
ifconfig enp4s0 | grep "inet " | awk '{print $2}'
fi
# External IP Lookup
echo -n "External IP: "
curl -s ifconfig.me
}
# View Apache logs
apachelog() {
if [ -f /etc/httpd/conf/httpd.conf ]; then
cd /var/log/httpd && ls -xAh && multitail --no-repeat -c -s 2 /var/log/httpd/*_log
else
cd /var/log/apache2 && ls -xAh && multitail --no-repeat -c -s 2 /var/log/apache2/*.log
fi
}
# Edit the Apache configuration
apacheconfig() {
if [ -f /etc/httpd/conf/httpd.conf ]; then
sedit /etc/httpd/conf/httpd.conf
elif [ -f /etc/apache2/apache2.conf ]; then
sedit /etc/apache2/apache2.conf
else
echo "Error: Apache config file could not be found."
echo "Searching for possible locations:"
sudo updatedb && locate httpd.conf && locate apache2.conf
fi
}
# Edit the PHP configuration file
phpconfig() {
if [ -f /etc/php.ini ]; then
sedit /etc/php.ini
elif [ -f /etc/php/php.ini ]; then
sedit /etc/php/php.ini
elif [ -f /etc/php5/php.ini ]; then
sedit /etc/php5/php.ini
elif [ -f /usr/bin/php5/bin/php.ini ]; then
sedit /usr/bin/php5/bin/php.ini
elif [ -f /etc/php5/apache2/php.ini ]; then
sedit /etc/php5/apache2/php.ini
else
echo "Error: php.ini file could not be found."
echo "Searching for possible locations:"
sudo updatedb && locate php.ini
fi
}
# Edit the MySQL configuration file
mysqlconfig() {
if [ -f /etc/my.cnf ]; then
sedit /etc/my.cnf
elif [ -f /etc/mysql/my.cnf ]; then
sedit /etc/mysql/my.cnf
elif [ -f /usr/local/etc/my.cnf ]; then
sedit /usr/local/etc/my.cnf
elif [ -f /usr/bin/mysql/my.cnf ]; then
sedit /usr/bin/mysql/my.cnf
elif [ -f ~/my.cnf ]; then
sedit ~/my.cnf
elif [ -f ~/.my.cnf ]; then
sedit ~/.my.cnf
else
echo "Error: my.cnf file could not be found."
echo "Searching for possible locations:"
sudo updatedb && locate my.cnf
fi
}
# Trim leading and trailing spaces (for scripts)
trim() {
local var=$*
var="${var#"${var%%[![:space:]]*}"}" # remove leading whitespace characters
var="${var%"${var##*[![:space:]]}"}" # remove trailing whitespace characters
echo -n "$var"
}
# GitHub Titus Additions
gcom() {
git add .
git commit -m "$1"
}
lazyg() {
git add .
git commit -m "$1"
git push
}
function hb {
if [ $# -eq 0 ]; then
echo "No file path specified."
return
elif [ ! -f "$1" ]; then
echo "File path does not exist."
return
fi
uri="http://bin.christitus.com/documents"
response=$(curl -s -X POST -d @"$1" "$uri")
if [ $? -eq 0 ]; then
hasteKey=$(echo $response | jq -r '.key')
echo "http://bin.christitus.com/$hasteKey"
else
echo "Failed to upload the document."
fi
}
#######################################################
# Set the ultimate amazing command prompt
#######################################################
alias hug="hugo server -F --bind=10.0.0.97 --baseURL=http://10.0.0.97"
# Check if the shell is interactive
if [[ $- == *i* ]]; then
# Bind Ctrl+f to insert 'zi' followed by a newline
bind '"\C-f":"zi\n"'
fi
export PATH=$PATH:"$HOME/bin:$HOME/scripts:$HOME/.local/bin:$HOME/.cargo/bin:/var/lib/flatpak/exports/bin:/.local/share/flatpak/exports/bin"
export PATH=$PATH:/usr/local/go/bin
eval "$(starship init bash)"
eval "$(zoxide init bash)"
# Auto-start DWM if we're on TTY1 and .xinitrc contains "exec dwm"
if [[ "$(tty)" == "/dev/tty1" ]] && [ -f "$HOME/.xinitrc" ] && grep -q "^exec dwm" "$HOME/.xinitrc"; then
startx
fi
export PATH=$PATH:$HOME/go/bin
export PS1='`if [ $? = 0 ]; then echo "\[\e[0;32m\] ✔ "; else echo "\[\e[0;31m\] ✘ "; fi`\[\e[0;35m\]\u\[\e[0;36m\] @\[\e[0;34m\]\h: \[\e[0;35m\]\w \[\e[0;33m\]$\[\e[0m\] '
#PS1='\[\033[;32m\]┌──(\[\033[1;34m\]\u\033[1;36m\]@\h\[\033[;32m\])-[\[\033[0;1m\]\w\[\033[;32m\]]\n\[\033[;32m\]└─\[\033[1;34m\]\$\[\033[0m\] '
# pacman-yay
alias upa='eos-update --aur'
alias pacs='pacman -Ss'
alias lpacs='pacman -Qs'
alias pacr='sudo pacman -Rs'
alias paci='sudo pacman -S'
alias pacu='sudo pacman -Syu'
alias pacc='sudo pacman -Scc'
alias unlock='sudo rm /var/lib/pacman/db.lck'
alias paco='sudo pacman -Rns $(pacman -Qdtq)'
alias yayu='yay -Sua'
alias yayc='yay -Scc'
alias yays='yay -Ss'
alias lyays='yay -Qs'
alias yayr='yay -Rs'
alias yayi='yay -S'
alias iyay='yay -Ps'
#grub update/install
alias grubup='sudo grub-mkconfig -o /boot/grub/grub.cfg'
alias grubin='sudo grub-install --target=x86_64-efi --efi-directory=/boot/efi --bootloader-id=EndeavourOS-grub'
## 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'
#path
export PATH=/home/fog/.local/bin:/home/fog/.local/scripts:$PATH
#merge
alias merge="xrdb -merge ~/.Xresources"
I really have to go through myne one day and clean it up. But here is what I have
export TERM="xterm-256color"
source /home/thefrog/bin/etc/colors.config
#<----[ 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'
#<----[ start custom functions
function hg
{
#<----[ show the history of command
history | grep "$1"
}
function PkgFind
{
grep $1 /var/log/pacman.log | fzf --border=bold
}
function PkgSearch
{
pacseek -s $1
}
function InstallGroup
{
#<----[ from dalto eos
$PKG=$1
sudo pacman -S $PKG --needed --asdeps $(expac -Ss '%o' $PKG) && pacman -D --asexplicit $PKG
}
#<----[ end custom functions
HISTTIMEFORMAT="%F %T "
HISTCONTROL=ignoredups
HISTSIZE=2000
HISTFILESIZE=2000
shopt -s histappend
export EDITOR='micro'
################################################################################
#<----[ Begin My Aliases
#<----( Package Management Commands
alias in='sudo pacman -S --noconfirm' #<----[ simplified commands for pacman install remove and force remove
alias gin='InstallGroup'
#<----[ use caution with these alwasy try a minimal removal first as to not break other packages.
alias remove='sudo pacman -R --noconfirm'
alias pacman-kill='sudo pacman -Rns --noconfirm'
alias pacman-clean='sudo pacman -Sc' #<----[ this alias will clean basic packages in cache along with orphan files and other
alias pacman-clean-all='sudo pacman -Scc' #<----[ this alias will clean all packages in cache along with orphan files and other
#<----[ package information commands
alias mkpkg-list="pacman -Qne | awk {'print $1'} > /home/thefrog/bin/sys/Packages.txt" #<----[ create a package list of installed packages on the system
alias pkg-list-aur='pacman -Qm' #<----[ AUR packages installed
alias pkgsearch='PkgSearch' #<----[ search the repo for packages
alias pkgfind='PkgFind' #<----[ find local package
alias pkgnfo='pacman -Si' #<----[ information about a package
alias pkg-list='pacman -Qq' #<----[ display the package list on screen
alias pkg-count='pacman -Qq | wc -l' #<----[ just show the package count
#<----[ package fixes
alias unlock-pacman='sudo rm /var/lib/pacman/db.lck' #<----[ run this if pacman doesn't finish do to a shutdown or another case. Only use when needed.p
alias keyfix='sudo pacman -Sy archlinux-keyring' #<----[ Fix issues with pacman not upgrading
#<----[ package mirrors and upgrade management
alias up='/home/thefrog/bin/upgrade.sh' #<-----[runs my update scrip that uses paru to update the system then hblock to update hosts file
alias vu='checkupdates -n ; paru -Qu' #<----[ view updates for both standard and aur packages
alias checkupdates4='/home/thefrog/bin/checkupdates4.sh' #<----[ checks for specific updates found on endeavour forums
alias showupdates='Viewupdates ; paru -Qu' #<----[ show updates for both standard and aur packages
alias ratemirrors="rate-mirrors --protocol=https arch --max-delay 7200 | sudo tee /etc/pacman.d/mirrorlist && rate-mirrors --protocol=https endeavouros | sudo tee /etc/pacman.d/endeavouros-mirrorlist" #<----[ rate arch and endeavour mirrors found on endeavour forums
alias clean-pc='paccache -r'
alias clean-rm='paccache -ruk0'
#<----( Root Commands
alias adblock='sudo hblock' #<----[ this alias will update the host file to help block ads.
alias iown='sudo chown -R thefrog .' #<----[ this is usefull if you format or repartition drive as permissions are automatically set to root through gparted. also for working with recovered files
alias iso2usb='sudo /home/thefrog/bin/iso2usb.sh' #my iso 2 usb converter a simple bash script to convert ISO files to usb ((depends on dd. sync))
alias hwreport='sudo lshw > /home/thefrog/hardware.nfo' #<----[ this creates a harware report on the hardware on current computer. saving it to a file is necessary if you want to read it later.
alias hardinfo='sudo hardinfo' #<----[ this is a graphical user interface of current system information
alias photorec='sudo /home/thefrog/bin/testdisk/phototrec'
alias elt='eos-log-tool'
#<----[ various ventoy commands for differnt boot options
alias vtoy='sudo ventoy -i -g -S' #<----[ gpt partion secure boot disabled
alias svtoy='sudo ventoy -i -s' #<----[ gpt partition secure boot enabled
alias Lvtoy='sudo ventoy -i' #<----[ mbr partition legacy boot
alias lvtoy='sudo ventoy -l' #<----[ list ventoy information
alias uvtoy='sudo ventoy -u' #<----[ update ventoy on device.
#<----( Root Files
alias efstab='sudo micro /etc/fstab' #<----[ this one allows me to edit my fstab file in a command line editor
#<----( System Commands
alias services='systemctl list-units --type=service' #<----[ systemd services status list
alias audio="pactl info | grep 'Server Name'"
#alias video='nvidia-smi --query-gpu=gpu_name --format=csv|sed -n 2p'
alias h='history'
alias cls='clear' #<----[ probably my oldest alias
alias mem='free -h | sed s/"Swap: 0B 0B 0B"//g' #<----[ a standard alias carried over time
alias ls='eza --long --tree --level=1'
alias cat='bat'
#alias copy='cp -Rvi' #<----[ ask before overwrite
alias fc-cash='fc-cache -fv' #<----[ fontcache clean
alias icon-cache='gtk-update-icon-cache'
alias mktar='tar cfv' #<----[ tar command to create file verbosly
alias mkexe='chmod u+x' #<----[ a standard alias carried over time
alias rb='reboot' #<----[ compliments of SystemD~
alias sd='shutdown now' #<----[ compliments of SystemD~
# awk '$1 ~ "YYYY-MM-DD" && $3 == "upgraded" { print $4; }' /var/log/pacman.log
alias clean-journal='journalctl --vacuum-time=4weeks'
#<----[ Primary Monitor Brightness controll
alias day='xrandr --output DisplayPort-0 --brightness 1.0 --gamma 1.0:1.0:1.0' #<----[ Super+l Keyboard shortcut
alias drk='xrandr --output DisplayPort-0 --brightness 0.5 --gamma 1.0:1.0:0.7' #<----[ Super+n Keyboard shortcut
#<----( Conky
alias frog-default='conky -c /home/thefrog/.config/conky/frog-default.conkyrc'
alias clock='conky -c /home/thefrog/.config/conky/frog-clock.conkyrc'
alias distro='conky -c /home/thefrog/.config/conky/distro.conkyrc'
alias weather='conky -c /home/thefrog/.config/conky/weather.conkyrc'
#<----( Android
alias adbss='adb start-server'
alias mobile='adb devices'
alias dbus='/home/thefrog/bin/droidbus.sh'
alias picture-pull='/home/thefrog/bin/picture-pull.sh'
alias pp='/home/thefrog/bin/picture-pull.sh'
#<----( Common Commands
alias show-alias='grep "alias" /home/thefrog/.bashrc'
alias speedtest='/home/thefrog/bin/ookla/speedtest' #<----[check upload/download speeds
alias st='/home/thefrog/bin/ookla/speedtest' #<----[check upload/download speeds
alias show-weather='curl wttr\.in/?0?A?u' #<----[ 'http://v2.wttr.in/'
alias show-weatherext='xfce4-terminal --hide-menubar --title "Simple Weather Alternative" --geometry 75x45 -x bash -c "curl 'http://v2.wttr.in/'; read -N1;"'
alias filecount='eza * | wc -l' #<----[ show the pwd file count non recursive
alias show-bin='eza /home/thefrog/bin'
alias mklist='eza -Raghl ./ > '$PWD'.lst' #<----[ create a list of the current directory and all children
alias copy='rsync -avhP'
alias session='XDG_SESSION_TYPE'
alias web='setsid brave'
alias youtube='ytfzf -t'
alias gdi='fetch-iso'
alias x='exit'
#<----( Save and Export Personal Settings
alias export-configs='rm -rf .cache && cp -rvu .* /run/media/thefrog/Home-Configs/Desktop/' #<----[ 64g usb thumbdrive
alias export-bin='rsync -auvhP ./bin /run/media/thefrog/Configs/Desktop/'
alias store-configs='rm -rf .cache && cp -rvu .* /run/media/thefrog/6tb-XData/Configs/'
alias store-bin='rsync -auvhP ./bin /run/media/thefrog/6tb-XData/Configs/'
#<----( My Scripts
alias padbus='/home/thefrog/bin/padbus.sh' #<----[ my computer backup script.
alias ds='/home/thefrog/bin/tads.sh' #<----[ displays basic disk information
alias myip='/home/thefrog/bin/myip.sh' #<----[ shows both your local ip and the mothership assigned IP
alias mp4it='/home/thefrog/bin/mp4it.sh' #<----[ runs mp4it.sh as just mp4it
alias getit='/home/thefrog/bin/getit.sh' #<<---- a youtube-dl front end
alias pt='/home/thefrog/bin/cktemp.sh' #<----[ outputs the temprarture of cpu/gpu Celius is displayed
#<----[ End Aliases
#<----[ extra's
export MANPAGER="bat -l man -p'"
shell="$(basename ${SHELL})" #<----[ Fonts needed
hosts_icon=🖵 #<----[ Noto Sans Symbols2
user_icon= #<----[ Segoe MDL2 Assets
bash_icon= #<----[ octicons
happy_icon= #<----[ IcoMoon-Free
mad_icon= #<----[ IcoMoon-Free
arrow_icon=🖝 #<----[ Noto Sans Symbols2
espace=' '
#<----[ custom prompt
PS1="\[\e[37m\][\d \t]\[\e[01;31m\]\n(in) \[\e[01;35m\]install package,\[\e[01;31m\](vu) \[\e[01;35m\]view updates,\[\e[01;31m\](up) \[\e[01;35m\]install updates,\[\e[01;31m\](show-alias) \[\e[01;35m\]for a full list of alias available. \n\`if [ \$? = 0 ]; then echo \[\e[33m\]${happy_icon} \[\e[0m\]; else echo \[\e[31m\]${mad_icon} \[\e[0m\]; fi\`\[\e[00m\]\u@\h:\w\[\e[35m\]${arrow_icon}${espace}\[\e[0m\] "
#PS1="\[\e[37m\][\d \t]\[\e[01;31m\]\n "Place something here" \n\`if [ \$? = 0 ]; then echo \[\e[33m\]${happy_icon} \[\e[0m\]; else echo \[\e[31m\]${mad_icon} \[\e[0m\]; fi\`\[\e[00m\]\u@\h:\w\[\e[35m\]${arrow_icon}${espace}\[\e[0m\] "
#<----[ add $HOME/bin to path and export
PATH=$PATH:$HOME/bin
export PATH
#<----[ custom bash titile
echo -e "${TITLEBG}${TITLEFG}${TITLE_ICONS}${bash_icon} ${TITLEFG}$shell ${TITLE_ICONS}${user_icon} ${TITLEFG}$USER ${Normal}"
echo
fastfetch -c /home/thefrog/.config/fastfetch/Configs/prompt.jsonc
alias bigfile="fd -tf -X du -h | sort -rh | head -15"
alias bigdir="du -hsx */ | sort -rh | head -15"
alias bigpac="expac -H M '%m\t%n' | sort -rh | head -15"
alias lasthour="fd . -tf -c always -E cache -E git --changed-within=1hour"
alias pac-eos='comm -12 <(pacman -Qq | sort) <(pacman -Sql endeavouros | sort)'
alias wt="curl 'wttr.in/city_name?Q'"
lasthour shows modified files within the last hour in the current directory, pac-eos shows installed packages from EOS repo, wt shows the weather for three days.
# .bashrc
# Source global definitions
if [ -f /etc/bashrc ]; then
. /etc/bashrc
fi
# User specific environment
if ! [[ "$PATH" =~ "$HOME/.local/bin:$HOME/bin:" ]]; then
PATH="$HOME/.local/bin:$HOME/bin:$PATH"
fi
export PATH
# Uncomment the following line if you don't like systemctl's auto-paging feature:
# export SYSTEMD_PAGER=
# User specific aliases and functions
if [ -d ~/.bashrc.d ]; then
for rc in ~/.bashrc.d/*; do
if [ -f "$rc" ]; then
. "$rc"
fi
done
fi
unset rc
# do not save the following commands in .bash_history
HISTIGNORE="?:??:cd*:history*:man *:exit*:reboot*:poweroff*:sudo*:truecrypt -P*"
PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u\[\033[01;34m\]@\[\033[01;33m\]\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ '
if [ -f ~/.bash_aliases ]; then
. ~/.bash_aliases
fi
HISTIGNORE is to not fullfill my .bash_history with unnecessary or unwanted content like one- or two-letter-words, history of bash, manpages, exit the terminal or power down the system.
The colored prompt starts with a green username for my login, the .bashrc for user root is different, that username is displayed in red color.
Some aliases are stored in .bash_aliases and will be included.
Wow that is a neat trick for HISTIGNORE. Please give my thanks to the developers of Mint. I do not recall seeing something like this somewhere else. Omitting all a single letter or double letter command is cool, as most of them are typically aliases created by user in their own .bash_aliases. One concern on the commands to omit, the list also includes all the sudo command executed, i.e. sudo*. Does that make sense? Is it some security feature? Or something else?
Please do share what is there in the .bash_aliases
I guess for it to make any practical sense, the directories should exist in those locations.
However, if they don’t, the locations will still be added to the PATH and bash will not generate any error messages.
My point was that if we add a directory in the $PATH that does not exist then when BASH iterates through these directory to execute the command it will take some time. So it helps keeping BASH as small as possible to speed up the execution.
Also an observation there seems to be an awful lot of Perl directories in your $PATH. Are you an avid user of Perl?
Not to post the whole thing .. heres some plasma-specific bits ..
# Seems this is what plasma uses for xkill-like function on wayland
kkill() {
qdbus6 org.kde.KWin /KWin killWindow
}
plasma-poweroff() {
#Gracefully logout/shutdown/restart plasma. Should prefer over systemctl, halt, etc.
OPTIND=1 # Reset in case getopts has been used previously in the shell.
# Initialize our own variables:
show_help() {
cat <<EOF
l = logout
r = reboot
s = shutdown
EOF
}
while getopts "h?lrs" opt; do
case "$opt" in
h|\?)
show_help
;;
l)
qdbus6 org.kde.Shutdown /Shutdown logout
;;
r)
qdbus6 org.kde.Shutdown /Shutdown logoutAndReboot
;;
s)
qdbus6 org.kde.Shutdown /Shutdown logoutAndShutdown
;;
esac
done
shift $((OPTIND-1))
[ "${1:-}" = "--" ] && shift
}