# # ~/.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 and jumped to with: t 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"