# ~/.bashrc # Loaded for interactive non-login shells. # Keep this file readable. Each section explains what it does. # If not running interactively, do nothing. # This prevents issues when bash is invoked by scp or scripts. case $- in *i*) ;; *) return ;; esac # ============================================================ # HISTORY # ============================================================ HISTSIZE=10000 HISTFILESIZE=20000 HISTCONTROL=ignoredups:erasedups # don't store duplicate lines shopt -s histappend # append to history, don't overwrite it # ============================================================ # PROMPT # ============================================================ # \u = username, \h = hostname, \w = current directory # \e[COLORm = color code, \e[0m = reset color # 32 = green, 34 = blue, 33 = yellow __git_branch() { local branch branch=$(git rev-parse --abbrev-ref HEAD 2>/dev/null) [ -n "$branch" ] && echo " ($branch)" } PS1='\e[32m\u@\h\e[0m:\e[34m\w\e[33m$(__git_branch)\e[0m\$ ' # ============================================================ # COMPLETION # ============================================================ if [ -f /usr/share/bash-completion/bash_completion ]; then . /usr/share/bash-completion/bash_completion fi # ============================================================ # EDITOR # ============================================================ export EDITOR=nvim export VISUAL=nvim # ============================================================ # PATH # ============================================================ # Add your personal scripts to PATH export PATH="$HOME/.local/bin:$PATH" # mise runtime manager — activates shims for node, dotnet, etc. # See: ~/.config/mise/config.toml if command -v mise &>/dev/null; then eval "$(mise activate bash)" fi # ============================================================ # ALIASES # ============================================================ # Navigation alias ..='cd ..' alias ...='cd ../..' alias ll='ls -lah --color=auto' alias la='ls -A --color=auto' alias l='ls -CF --color=auto' # Safety: ask before overwriting alias rm='rm -i' alias cp='cp -i' alias mv='mv -i' # Quick edit and reload this file alias bashrc='${EDITOR} ~/.bashrc && source ~/.bashrc' # Git shortcuts (plain, no magic) alias gs='git status' alias ga='git add' alias gc='git commit' alias gp='git push' alias gl='git log --oneline --graph --decorate -20' # Notes shortcuts # Opens inbox for quick capture alias inbox='${EDITOR} ~/notes/inbox.md' # Opens or creates today's daily note from template today() { local file=~/notes/daily/$(date +%Y-%m-%d).md mkdir -p ~/notes/daily if [ ! -f "$file" ]; then sed "s/YYYY-MM-DD/$(date +%Y-%m-%d)/g" \ ~/notes/templates/daily-template.md > "$file" fi ${EDITOR} "$file" } # Opens or creates this week's weekly note from template thisweek() { local week=~/notes/weekly/$(date +%Y-W%V).md mkdir -p ~/notes/weekly if [ ! -f "$week" ]; then sed "s/YYYY-WNN/$(date +%Y-W%V)/g" \ ~/notes/templates/weekly-template.md > "$week" fi ${EDITOR} "$week" } # Find all open tasks across all notes alias tasks='grep -r "\- \[ \]" ~/notes/ --include="*.md"' # Open decisions log alias decisions='${EDITOR} ~/notes/decisions.md' # ============================================================ # FUNCTIONS # ============================================================ # Only add functions you can explain line by line. # mkcd: create a directory and immediately enter it mkcd() { mkdir -p "$1" && cd "$1" }