Dotfiles/.bashrc

130 lines
6.4 KiB
Bash

#
# ~/.bashrc — Interactive bash shell configuration
#
# This file is sourced for every non-login interactive bash session.
# Bash is the fallback shell on this system; zsh is the primary interactive
# shell. This file mirrors a core subset of .zshrc's aliases so the
# environment is consistent inside TTYs and distrobox containers.
#
# Guard: only run for interactive shells.
# $- contains the set of active shell option flags; 'i' means interactive.
# If 'i' is absent, return immediately — this prevents errors when bash is
# invoked non-interactively (e.g., from scripts or scp file transfers).
[[ $- != *i* ]] && return
# ─── Core aliases ──────────────────────────────────────────────────────────────
# Colorize ls and grep output — file types and match highlights stand out visually.
alias ls='ls --color=auto'
alias grep='grep --color=auto'
# $PS1: minimal prompt showing [user@host workingdir]$
# This is the bash default; starship replaces it at the bottom of this file.
# Kept here as a safe fallback if starship fails to initialize.
PS1='[\u@\h \W]\$ '
# Detailed directory listing with ISO timestamps (YYYY-MM-DD HH:MM).
# ISO format is sortable and unambiguous compared to locale-default date strings.
alias ll="ls -la --time-style=long-iso"
alias l="ll" # Short form for everyday use
# Quick parent-directory navigation — equivalent to 'cd ..'
alias ..="cd .."
# Editor shortcuts: micro is a terminal text editor with intuitive keybindings
# (Ctrl+S to save, Ctrl+Q to quit), suitable for quick in-terminal edits.
alias m="micro"
alias sm="sudo micro" # Elevated edit for system files owned by root
# ─── Git shortcuts ─────────────────────────────────────────────────────────────
alias gita="git add ." # Stage all changes in the current working tree
alias gitc="git commit -m" # Commit with an inline message, e.g.: gitc "fix: typo"
alias gitp="git push" # Push current branch to its remote tracking branch
# curl-based weather lookup — wttr.in returns ANSI-art weather for the terminal.
# The trailing slash with no city causes wttr.in to auto-detect location via IP.
alias weather="curl https://wttr.in/"
# ─── gitf(): stage → commit → push in a single command ───────────────────────
# Usage: gitf "commit message"
# Collapses the three-step add/commit/push workflow for quick, minor commits.
# The $1 guard prevents an empty commit message (which git would reject anyway,
# but this gives a cleaner user-facing error).
function gitf() {
if [ -z $1 ]; then
echo "no commit message, doing nothing"
else
echo "directly commiting with message \"$1\""
git add .
git commit -m $1
git push
fi
}
# ─── Kitty terminal integration ────────────────────────────────────────────────
# icat: display images inline in the terminal using Kitty's icat kitten.
# Only works inside a Kitty terminal; other terminals will display an error.
alias icat="kitten icat"
# Two ways to clear the screen — cls is familiar muscle memory from Windows cmd.
alias cls="clear"
# Kitten SSH: wraps ssh with Kitty's ssh kitten so the remote shell inherits
# correct terminfo entries and Kitty protocol extensions (OSC 52 clipboard,
# proper backspace, 24-bit color, etc.) without manual TERM setup on the server.
alias ssh="kitten ssh"
alias ssk="kitten ssh" # Typo-resilient duplicate
# ─── Hardware / misc ───────────────────────────────────────────────────────────
# tio: terminal I/O program for serial port communication (embedded dev, etc.).
# '-a latest' attaches to the most recently enumerated serial device.
# sudo is required because /dev/ttyUSB* and /dev/ttyACM* are typically owned
# by the 'uucp' or 'dialout' group and not accessible as a regular user by default.
alias serial="sudo tio -a latest"
# t: alias for 'wd' (warp directory) — jump to named directory bookmarks.
# Bookmarks are set with: wd add <name> and jumped to with: t <name>
alias t="wd"
# Filtered listing — pipe a long-format listing through grep for fast file search.
alias lgrep="l | grep"
alias lg="lgrep" # Short form
# ─── y(): yazi file manager with shell directory-change on exit ─────────────────
# Yazi is a terminal file manager. Without this wrapper, any directory you
# navigate to inside yazi is lost when it exits (it ran in a subshell).
# This wrapper passes --cwd-file to yazi; yazi writes its final CWD there,
# and the wrapper reads it to cd the parent shell into that directory.
function y() {
local tmp="$(mktemp -t "yazi-cwd.XXXXXX")" cwd # temp file to capture yazi's last dir
yazi "$@" --cwd-file="$tmp" # run yazi; it writes final dir to $tmp
if cwd="$(command cat -- "$tmp")" && [ -n "$cwd" ] && [ "$cwd" != "$PWD" ]; then
builtin cd -- "$cwd" # apply the directory change to this shell
fi
rm -f -- "$tmp" # clean up the temp file
}
# ─── Prompt & startup ──────────────────────────────────────────────────────────
# Initialize starship for bash. Starship is a cross-shell prompt engine configured
# in ~/Dotfiles/starship.toml. It replaces the plain PS1 above with a rich,
# segment-based prompt showing user, path, git branch/status, language versions,
# and the current time — all styled with the CyberQueer color palette.
eval "$(starship init bash)"
# Display system info on shell start using fastfetch with the custom ASCII logo.
# Colors are forced to red to match the CyberQueer theme branding.
fastfetch --logo-color-1 red --logo-color-2 red --color red -l ~/Dotfiles/m-archy-SPC.txt
# Load the Rust/Cargo environment — primarily adds ~/.cargo/bin to PATH so that
# binaries installed via `cargo install` (e.g., ripgrep, bat, starship itself)
# are immediately accessible in this session.
. "$HOME/.cargo/env"