Files
snigdhaos-roots/.bashrc
eshanized c1a7e13c31
Some checks are pending
Check Conventional Commit / check-commit-message (push) Waiting to run
🚀 feat: ad pacman fallback
2025-01-12 19:36:41 +05:30

370 lines
23 KiB
Bash

#!/bin/bash
#
# ~/.bashrc
#
# Function to append to PATH if not already present
append_path () {
case ":$PATH:" in
*:"$1":*) ;; # If the given path is already in $PATH, do nothing
*) PATH="${PATH:+$PATH:}$1" ;; # Otherwise, append the given path to $PATH
esac
}
# Add user bin directories to PATH if they exist
append_path "$HOME/bin"
append_path "$HOME/.local/bin"
append_path "$HOME/.bin" # Append .bin only if directory exists
# Enable bash completion if available
if [ -f /usr/share/bash-completion/bash_completion ]; then # Check if bash completion script is available at the first path
. /usr/share/bash-completion/bash_completion # Source the bash completion script to enable autocomplete features
elif [ -f /etc/bash_completion ]; then # If the first path does not exist, check the second path for the script
. /etc/bash_completion # Source the bash completion script from the second location
fi # End the conditional block
# Check if the shell is interactive, and only execute below in interactive shells
[[ $- != *i* ]] && return # If the shell is not interactive (does not have 'i' in $-), return and do not execute further commands
# Set default aliases
alias ls='ls -l --color=auto' # List directory contents in long format with colorized output
alias grep='grep --color=auto' # Enable colorized output for grep command
alias rs="sudo pacman -Rs" # Remove packages with dependencies using pacman
alias s="sudo pacman -S" # Install packages with pacman
alias rns="sudo pacman -Rns" # Remove package with pacman
alias sy="sudo pacman -Syy" # Sync package databases and update package list
alias syyu="sudo pacman -Syyu" # Sync package databases and update system packages
alias qq="sudo pacman -Qq" # Show a list of installed package
alias lck="sudo rm /var/lib/pacman/db.lck" # Remove pacman lock file (use with caution)
alias vm="sudo systemctl enable --now vmtoolsd.service" # Enable VMware Tools service at boot
alias rip="expac --timefmt='%Y-%m-%d %T' '%l\t%n %v' | sort | tail -200 | nl" # Display recently installed packages sorted by install date (last 200)
alias ys="yay -S" # Install packages with yay (AUR helper)
alias pas="paru -S" # Install packages with paru (another AUR helper)
alias wget="wget -c" # Download files using wget and continue partially downloaded files
alias ..="cd .." # Move up one directory in the filesystem
alias home="cd ~" # Go to the home directory
alias docs="cd ~/Documents" # Go to the Documents directory
alias dl="cd ~/Downloads" # Go to the Downloads directory
alias music="cd ~/Music" # Go to the Music directory
alias pics="cd ~/Pictures" # Go to the Pictures directory
alias vids="cd ~/Videos" # Go to the Videos directory
alias desk="cd ~/Desktop" # Go to the Desktop directory
# Enhanced file manipulation aliases
alias rm="rm -i" # Confirm before removing files
alias mv="mv -i" # Confirm before overwriting files
alias cp="cp -i" # Confirm before overwriting files
alias touch="touch -c" # Don't create a new file if it already exists
alias du="du -h --max-depth=1" # Human-readable sizes, limit depth
alias df="df -h" # Human-readable disk usage
alias find="find . -type f" # Find files only (not directories)
# Enable case-insensitive completion
bind "set completion-ignore-case on"
# Function for extracting different types of archives
ex () {
if [ -f "$1" ]; then # Check if the argument is a valid file
case "$1" in # Case structure to match different file extensions
*.tar.bz2) tar xjf "$1" ;; # Extract .tar.bz2 files using tar
*.tar.gz) tar xzf "$1" ;; # Extract .tar.gz files using tar
*.bz2) bunzip2 "$1" ;; # Decompress .bz2 files
*.rar) unrar x "$1" ;; # Extract .rar files using unrar
*.gz) gunzip "$1" ;; # Decompress .gz files
*.tar) tar xf "$1" ;; # Extract .tar files using tar
*.tbz2) tar xjf "$1" ;; # Extract .tbz2 files using tar
*.tgz) tar xzf "$1" ;; # Extract .tgz files using tar
*.zip) unzip "$1" ;; # Extract .zip files using unzip
*.Z) uncompress "$1" ;; # Decompress .Z files
*.7z) 7z x "$1" ;; # Extract .7z files using 7z
*.deb) ar x "$1" ;; # Extract .deb package files using ar
*.tar.xz) tar xf "$1" ;; # Extract .tar.xz files using tar
*.tar.zst) tar xf "$1" ;; # Extract .tar.zst files using tar
*) echo "'$1' cannot be extracted via ex()" ;; # Print a message if the file type is unsupported
esac
else
echo "'$1' is not a valid file" # Print an error if the argument is not a valid file
fi
}
# Custom PS1 prompt with IP address and conditional formatting based on terminal type
get_ip_address() {
ip -4 addr show | grep -v '127.0.0.1' | grep -oP '(?<=inet\s)\d+(\.\d+){3}' | head -n 1
}
get_os_name() {
if [[ -f /etc/os-release ]]; then
local os_name=$(grep '^NAME=' /etc/os-release | cut -d '=' -f2 | tr -d '"')
echo "$os_name"
else
echo "/etc/os-release file not found!"
fi
}
if [[ $(tty) == */dev/tty* ]]; then
PS1="\e[31m[\u\e[32mIP: $(get_ip_address) | \e[31m]\n[>]\[\e[31m\]\$(pwd) $ \[\e[0m\]"
else
PS1="\e[31m┌──[\u\e[0m➜ \e[32m$(get_ip_address)\e[31m]\n└──╼[\e[32m$(get_os_name)\e[31m]\[\e[31m\]\$(pwd)\n$ Command: \[\e[0m\]"
fi
# Display system information via neofetch if the flag is not set
#if [[ $1 != "no-repeat-flag" && -z $NO_REPETITION ]]; then
# neofetch
#fi
# Additional useful aliases
alias cls="clear" # Clear the terminal screen
alias h="history" # Show the command history
alias upg="sudo pacman -Syu" # Update the system with pacman (Arch-based)
alias restart="sudo reboot" # Restart the system
alias shutdown="sudo shutdown -h now" # Shutdown the system immediately
alias halt="sudo shutdown -h now" # Halt the system immediately (same as shutdown)
alias lock="i3lock" # Lock the screen using i3lock (for i3 users)
alias logs="journalctl -xe" # Show detailed logs from the system journal
alias t="tmux" # Start a new tmux session or attach to an existing one
alias top="htop" # Show interactive process viewer (htop)
alias cpu="lscpu" # Display CPU architecture information
alias mem="free -h" # Show memory usage in human-readable format
alias battery="upower -i $(upower -e | grep 'BAT') | grep 'state\|percentage'" # Show battery status (for laptops)
# System monitoring
alias disk="df -h" # Disk space usage
alias du="du -h --max-depth=1" # Disk usage in human-readable format, one directory level
alias iostat="iostat -xz 1" # Disk I/O statistics
alias uptime="uptime" # Show system uptime
alias load="uptime | awk '{print $10, $11, $12}'" # Show system load averages
alias meminfo="cat /proc/meminfo" # Detailed memory information
alias netstat="netstat -tuln" # Network statistics
alias ss="ss -tuln" # Socket statistics
alias ifconfig="ifconfig -a" # Display network interfaces
alias ip="ip addr show" # Show IP addresses of interfaces
# Package management (Arch-based)
alias pac="pacman" # Pacman package manager
alias paclist="pacman -Q" # List installed packages
alias pacsearch="pacman -Ss" # Search for packages
alias pacinfo="pacman -Qi" # Get detailed package information
alias pacclean="sudo pacman -Rns $(pacman -Qdtq)" # Remove orphaned packages
alias pacpurge="sudo pacman -Rns $(pacman -Qdtq); sudo pacman -Scc" # Remove unused packages and clean the cache
# User management
alias users="who" # List currently logged in users
alias whoami="whoami" # Display the current logged-in user
alias groups="groups" # Show groups the user belongs to
alias lastlog="lastlog" # Show last login information
# Navigate the system more efficiently
alias src="cd ~/src" # Change directory to ~/src
alias code="code ." # Open the current directory in VSCode
# Git Aliases
alias gs="git status" # Show the status of the current git repository
alias ga="git add" # Stage changes for commit
alias gaa="git add --all" # Stage all changes, including new, modified, and deleted files
alias gc="git commit" # Commit staged changes
alias gca="git commit --amend" # Amend the last commit (modify the commit message or content)
alias gcm="git commit -m" # Commit with a message
alias gco="git checkout" # Switch branches or restore files
alias gbr="git branch" # List all branches in the repository
alias gb="git branch" # Alias for listing branches (same as gbr)
alias gl="git log" # View the commit history
alias glg="git log --oneline --graph --all" # View the commit history in a concise graphical format
alias gst="git stash" # Stash changes (save work in progress temporarily)
alias gpo="git push origin" # Push changes to the remote repository (origin)
alias gpl="git pull" # Pull changes from the remote repository
alias gup="git pull --rebase" # Pull changes and rebase (reapply local commits on top)
alias gd="git diff" # Show differences between files or commits
alias gds="git diff --staged" # Show differences for staged files (ready to commit)
alias gls="git ls-files" # List all tracked files in the repository
alias gcl="git clone" # Clone a remote repository
alias gtag="git tag" # List, create, or delete tags in the repository
# npm Aliases
alias ni="npm install" # Install dependencies from package.json
alias nis="npm install --save" # Install and save dependencies to package.json (for regular dependencies)
alias nisdev="npm install --save-dev" # Install and save dependencies as devDependencies
alias nup="npm update" # Update all dependencies to the latest versions
alias nstart="npm start" # Run the start script defined in package.json
alias nrun="npm run" # Run a custom script defined in package.json
alias ntest="npm test" # Run tests defined in package.json
alias nls="npm ls" # List installed packages
alias nci="npm ci" # Install dependencies from package-lock.json (clean installation)
alias nfund="npm fund" # Show funding information for the installed packages
alias npublish="npm publish" # Publish the package to npm registry
alias nversion="npm version" # Show or change the version of the current package
alias nrm="npm run" # Alias to run any custom script, same as `npm run`
alias nout="npm outdated" # Show which installed packages are outdated
# pnpm Aliases
alias pni="pnpm install" # Install dependencies from package.json
alias pnis="pnpm install --save" # Install and save dependencies to package.json (for regular dependencies)
alias pnisdev="pnpm install --save-dev" # Install and save dependencies as devDependencies
alias pnm="pnpm manager" # Manage pnpm (usually refers to actions like pnpm install, update, etc.)
alias pnup="pnpm update" # Update all dependencies to the latest versions
alias pnstart="pnpm start" # Run the start script defined in package.json using pnpm
alias pnrun="pnpm run" # Run a custom script defined in package.json with pnpm
alias pntest="pnpm test" # Run tests defined in package.json using pnpm
alias pnls="pnpm list" # List installed packages in the current project
alias pnci="pnpm ci" # Clean install (similar to npm ci), installs dependencies from lockfile
alias pnpublish="pnpm publish" # Publish the package to a registry using pnpm
alias pnversion="pnpm version" # Show or change the version of the current package using pnpm
alias pnout="pnpm outdated" # Show which installed packages are outdated in a pnpm-managed project
# Python Aliases
alias py="python" # Run Python (default version)
alias py3="python3" # Run Python 3
alias pip="pip3" # Use pip3 for installing Python packages
alias pipup="pip install --upgrade" # Upgrade installed Python packages
alias pyvenv="python3 -m venv" # Create a virtual environment in Python 3
alias pyactivate="source venv/bin/activate" # Activate a Python virtual environment
alias pydeactivate="deactivate" # Deactivate the Python virtual environment
alias pyrun="python" # Run a Python script with the default Python
alias pycheck="python -m py_compile" # Check the syntax of a Python file (compile it)
alias pytest="python -m pytest" # Run tests using pytest
alias pydoc="python -m pydoc" # Access Python documentation via pydoc
alias pylist="pip list" # List installed Python packages
alias pyfreeze="pip freeze" # Show installed Python packages and their versions
alias pyinstall="pip install" # Install Python packages
alias pyuninstall="pip uninstall" # Uninstall Python packages
# C++ Aliases
alias cpp-compile="g++ -std=c++17 -Wall -Wextra -o output" # Compile C++ code with g++ (C++17 standard)
alias cpp-run="g++ -std=c++17 -Wall -Wextra -o output && ./output" # Compile and run C++ code
alias cpp-compile-opt="g++ -std=c++17 -O2 -Wall -Wextra -o output" # Compile C++ code with optimization
alias cpp-clean="rm -f output" # Remove the compiled output file
alias cpp-build-all="g++ -std=c++17 -Wall -Wextra *.cpp -o output" # Compile all C++ files in the directory
alias cpp-edit="nano" # Open C++ code in the nano editor
alias cpp-exec="./output" # Execute the compiled C++ output
# Rust Aliases
alias rustc="rustc" # Run the Rust compiler
alias rust-run="cargo run" # Build and run a Rust project with Cargo
alias rust-build="cargo build" # Build the Rust project with Cargo
alias rust-build-rel="cargo build --release" # Build the Rust project in release mode
alias rust-test="cargo test" # Run tests in a Rust project
alias rust-clean="cargo clean" # Clean up build artifacts in a Rust project
alias rust-fmt="cargo fmt" # Format Rust code using Cargo's built-in formatter
alias rust-clippy="cargo clippy" # Run Clippy for Rust code linting
alias rust-doc="cargo doc --open" # Build and open Rust documentation
alias rust-new="cargo new" # Create a new Rust project with Cargo
alias rust-init="cargo init" # Initialize an existing directory as a Rust project
alias rust-add="cargo add" # Add dependencies to a Rust project
alias rust-upd="rustup update" # Update Rust toolchain with rustup
alias rust-ver="rustc --version" # Display the installed Rust version
alias rust-watch="cargo watch -x run" # Run a Rust project with automatic rebuilds on code changes
alias rust-deps="cargo tree" # Display the dependency tree of a Rust project
alias rust-check="cargo check" # Check the Rust code without building
alias rust-ls="ls -alh --color=auto" # List files in a directory with color
# Web Developer Aliases
### React
alias react-create="npx create-react-app my-app --template typescript" # Create a new React app with TypeScript template
alias react-build="npm run build" # Build the React app for production
alias react-start="npm start" # Start the React app in development mode
alias react-test="npm test" # Run tests in the React app
alias react-lint="npm run lint" # Lint the React app's code
### Angular
alias ng-create="ng new my-app" # Create a new Angular project
alias ng-serve="ng serve" # Serve the Angular app in development mode
alias ng-build="ng build" # Build the Angular app for production
alias ng-test="ng test" # Run tests in the Angular app
alias ng-lint="ng lint" # Lint the Angular app's code
### Vue
alias vue-create="vue create my-app" # Create a new Vue app
alias vue-serve="npm run serve" # Serve the Vue app in development mode
alias vue-build="npm run build" # Build the Vue app for production
alias vue-test="npm run test" # Run tests in the Vue app
alias vue-lint="npm run lint" # Lint the Vue app's code
## Backend Frameworks
### Node.js
alias node-init="npm init -y" # Initialize a new Node.js project with default settings
alias node-start="node index.js" # Start a Node.js app (index.js)
### Express
alias express-create="npm install express" # Install Express.js for a project
alias express-start="node index.js" # Start an Express app (index.js)
### Django
alias django-create="django-admin startproject myproject" # Create a new Django project
alias django-run="python manage.py runserver" # Start the Django development server
alias django-migrate="python manage.py migrate" # Run database migrations in Django
alias django-app="python manage.py startapp myapp" # Create a new Django app within the project
alias django-shell="python manage.py shell" # Open Django shell for interactive work
### Flask
alias flask-run="flask run" # Run a Flask app in development mode
alias flask-env="export FLASK_ENV=development" # Set Flask environment to development
alias flask-app="export FLASK_APP=app.py" # Set the entry point for Flask app (app.py)
# Miscellaneous Web Development Tools
alias webpack-build="webpack --mode production" # Build project using Webpack in production mode
alias webpack-dev="webpack --mode development" # Build project using Webpack in development mode
alias sass-watch="sass --watch src/scss:dist/css" # Watch and compile SASS files to CSS
alias tailwind-init="npx tailwindcss init" # Initialize Tailwind CSS configuration file
alias tailwind-build="npx tailwindcss build src/styles.css -o dist/styles.css" # Build Tailwind CSS styles
# Database Management
alias mysql-start="sudo systemctl start mysql" # Start MySQL service
alias mysql-stop="sudo systemctl stop mysql" # Stop MySQL service
alias psql-start="sudo systemctl start postgresql" # Start PostgreSQL service
alias psql-stop="sudo systemctl stop postgresql" # Stop PostgreSQL service
alias mongo-start="sudo systemctl start mongod" # Start MongoDB service
alias mongo-stop="sudo systemctl stop mongod" # Stop MongoDB service
# Docker Aliases
alias docker-start="sudo systemctl start docker" # Start Docker service
alias docker-stop="sudo systemctl stop docker" # Stop Docker service
alias docker-ps="docker ps" # List running Docker containers
alias docker-build="docker build -t" # Build a Docker image with the specified tag
alias docker-run="docker run -d -p" # Run a Docker container in detached mode with port binding
alias docker-exec="docker exec -it" # Execute commands inside a running Docker container
# Kubernetes Aliases
alias k-start="kubectl apply -f" # Apply Kubernetes configuration from a file
alias k-stop="kubectl delete -f" # Delete Kubernetes resources defined in a file
alias k-get-pods="kubectl get pods" # Get the list of Kubernetes pods
alias k-get-services="kubectl get services" # Get the list of Kubernetes services
alias k-logs="kubectl logs" # View logs of a specific Kubernetes pod
alias k-exec="kubectl exec -it" # Execute commands inside a Kubernetes pod
# DevOps and CI/CD
alias ansible-play="ansible-playbook" # Run an Ansible playbook
alias terraform-init="terraform init" # Initialize Terraform project
alias terraform-apply="terraform apply" # Apply Terraform configuration to provision resources
alias terraform-plan="terraform plan" # Preview changes Terraform will make to infrastructure
# Function to install packages with pacman and fallback to yay
install_package() {
local package_name="$1" # The name of the package to install
if [[ -z "$package_name" ]]; then
echo "Usage: install_package <package_name>"
return 1
fi
echo "Attempting to install '$package_name' with pacman..."
sudo pacman -S --noconfirm "$package_name"
if [[ $? -eq 0 ]]; then
echo "'$package_name' installed successfully with pacman!"
return 0
fi
echo "Package '$package_name' could not be installed with pacman. Trying yay..."
yay -S --noconfirm "$package_name"
if [[ $? -eq 0 ]]; then
echo "'$package_name' installed successfully with yay!"
return 0
fi
echo "Failed to install '$package_name' with both pacman and yay."
return 1
}
# Alias for convenience
alias syay="install_package"