diff --git a/README.md b/README.md index 7bd9c4e..d1a0a22 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,68 @@ -# dotfiles_bash +# Bash Dotfiles -Bash Shell Configurations \ No newline at end of file +System-wide `bash` Shell Configurations! + +## Features +- **Centralized** - All configs in `/etc/bash/`. +- **System-wide** - Common configs for all users. +- **Modular structure** - Split by function (aliases, prompts, etc.) +- **OS-aware aliases** - Distro-specific aliases for appropriate package manager commands. +- **Colors!** - Use of colors where possible. + +## How to use + +1. Clone this repo to `/etc`. +```bash +git clone https://git.candifloss.cc/candifloss/dotfiles_bash.git /etc/bash +``` + +2. Add this to the end of `/etc/bash.bashrc`: +```bash +if [ -d /etc/bash ]; then # Check if the dir exists + for file in /etc/bash/*.sh; do # Include all the files in the dir + if [ -r "$file" ]; then # Check if the file exists + . "$file" + fi + done +fi +``` + +## File structure +``` +/etc/bash/ # `mkdir` or `git clone` to this directory +├── bash_alias_common.sh # Common aliases +├── bash_alias_distro.sh # Distro-specific aliases +├── bash_prompt.sh # Shell prompt +├── LICENSE # Repo license +└── README.md # This file +``` + +## Trouble-shooting + +- Alias not working? + Run `alias | grep ` to find overrides + +- Settings over-ridden? + These files can override your aliases and other settings (check in order): + + 1. `/etc/profile` + 2. `/etc/bash.bashrc` + 3. `~/.bash_profile` + 4. `~/.bash_login` + 5. `~/.profile` + 6. `~/.bashrc` + +- Permission errors + ```bash + sudo chmod -R 755 /etc/bash + ``` + +- Debug Loading Order + Check which files are loaded + + ```bash + bash --login --verbose --norc 2>&1 | grep -E '^\+.*\. ' + ``` + +- Colors missing? + Check the `TERM` variables and your terminal's capabilities. \ No newline at end of file diff --git a/bash_alias_common.sh b/bash_alias_common.sh new file mode 100644 index 0000000..e9e9ffb --- /dev/null +++ b/bash_alias_common.sh @@ -0,0 +1,61 @@ +#--------------------------------------------------------------------- +# Navigation +#--------------------------------------------------------------------- +alias ..='cd ..' # Go up one directory +alias ...='cd ../..' # Go up two directories +alias ....='cd ../../..' # Go up three directories +alias ~='cd ~' # Go to home directory +alias -- -='cd -' # Go to previous directory + +#--------------------------------------------------------------------- +# Listing (using lsd) +#--------------------------------------------------------------------- +alias ls='lsd --color=always' # Basic colored listing +alias l='lsd -lh' # Detailed list +alias la='lsd -alh' # All files (including hidden) with details +alias lt='lsd --tree' # Tree view +alias l.='lsd -d .*' # Only hidden files + +#--------------------------------------------------------------------- +# Safety & Confirmation +#--------------------------------------------------------------------- +alias rm='rm -iv' # Confirm before deleting (verbose) +alias cp='cp -iv' # Confirm before overwriting (verbose) +alias mv='mv -iv' # Confirm before moving (verbose) +alias mkdir='mkdir -pv' # Create parent directories if needed (verbose) + +#--------------------------------------------------------------------- +# Improved CLI Tools +#--------------------------------------------------------------------- +alias grep='grep --color=always' # Always colorize grep output +alias egrep='egrep --color=always' +alias fgrep='fgrep --color=always' +alias diff='diff --color=always' +alias ip='ip -color=always' +alias less='less -R' # Use bat as less replacement + +#--------------------------------------------------------------------- +# Bat (cat replacement) +#--------------------------------------------------------------------- +alias cat='bat -pP' # Plain paging with syntax highlighting +alias bless='bat --paging=always --style=plain' # Full pager mode + +#--------------------------------------------------------------------- +# Miscellaneous +#--------------------------------------------------------------------- +alias c='clear' # Clear screen +alias h='history' # Show history +alias j='jobs -l' # List jobs +alias vi='vim' # Always use vim +alias df='df -h' # Human-readable disk space +alias du='du -h' # Human-readable directory sizes +alias free='free -h' # Human-readable memory usage + +#--------------------------------------------------------------------- +# Color Support +#--------------------------------------------------------------------- +# Enable color support for various commands +if [ -x /usr/bin/dircolors ]; then + test -r ~/.dircolors && eval "$(dircolors -b ~/.dircolors)" || eval "$(dircolors -b)" +fi + diff --git a/bash_alias_distro.sh b/bash_alias_distro.sh new file mode 100644 index 0000000..2a15b91 --- /dev/null +++ b/bash_alias_distro.sh @@ -0,0 +1,57 @@ +#!/usr/bin/env bash +# OS-specific aliases + +# Manually set OS (comment out for auto-detection) +export OS="debian" + +# OS Detection (if not manually set) +if [[ -z "$OS" ]]; then + if [[ -f /etc/os-release ]]; then + OS=$(grep -oP '^ID=\K.+' /etc/os-release | tr -d '"') + elif [[ $(uname) == "FreeBSD" ]]; then + OS="freebsd" + fi + export OS +fi + +# OS-Specific Aliases +case "$OS" in + debian) + alias inst='sudo apt-get install -y' + alias updt='sudo apt-get update && sudo apt-get upgrade -y && rustup update' + ;; + ubuntu) + alias inst='sudo apt-get install -y' + alias updt='sudo apt-get update && sudo apt-get upgrade -y && sudo snap refresh && rustup update' + ;; + arch|manjaro) + alias inst='sudo pacman -S' + alias updt='sudo pacman -Syuu --noconfirm && paru -Syu --noconfirm && rustup update' + ;; + fedora|centos|rhel|rocky|almalinux) + alias inst='sudo dnf install -y' + alias updt='sudo dnf upgrade -y && rustup update' + ;; + opensuse*|tumbleweed) + alias inst='sudo zypper install -y' + alias updt='sudo zypper refresh && sudo zypper update -y && rustup update' + ;; + void) + alias inst='sudo xbps-install -Sy' + alias updt='sudo xbps-install -Su && rustup update' + ;; + alpine) + alias inst='sudo apk add' + alias updt='sudo apk update && sudo apk upgrade && rustup update' + ;; + freebsd) + alias inst='sudo pkg install -y' + alias updt='sudo pkg update && sudo pkg upgrade -y && rustup update' + ;; + *) + echo "No OS-specific aliases for OS: $OS" >&2 + ;; +esac + +# Cleanup (unset helper functions if needed) +unset -f _detect_os 2>/dev/null \ No newline at end of file diff --git a/bash_prompt.sh b/bash_prompt.sh new file mode 100644 index 0000000..a2bc7f8 --- /dev/null +++ b/bash_prompt.sh @@ -0,0 +1,29 @@ +set_prompt() { + local EXIT_STATUS="$?" + local COLOR_RESET='\[\033[0m\]' + + # User settings + if (( EUID == 0 )); then + local COLOR_USER='\[\033[38;2;180;40;120m\]' # Purple-red (root) + local PROMPT_SYMBOL='#' + else + local COLOR_USER='\[\033[38;2;44;162;221m\]' # Azure blue (user) + local PROMPT_SYMBOL='$' + fi + + # Host and path + local COLOR_HOST='\[\033[38;2;44;180;70m\]' # Emerald green + local COLOR_PATH='\[\033[38;2;126;98;247m\]' # Soft purple + + # Dynamic symbol color + if (( EXIT_STATUS != 0 )); then + local COLOR_SYMBOL='\[\033[38;2;255;50;50m\]' # Bright red (error) + else + local COLOR_SYMBOL='\[\033[38;2;67;91;18m\]' # Olive green (success) + fi + + # Final prompt assembly + PS1="${COLOR_USER}\u${COLOR_RESET}@${COLOR_HOST}\h${COLOR_RESET}:${COLOR_PATH}\w${COLOR_RESET}${COLOR_SYMBOL}${PROMPT_SYMBOL}${COLOR_RESET} " +} + +PROMPT_COMMAND=set_prompt