126 lines
3.5 KiB
Bash
126 lines
3.5 KiB
Bash
# ~/.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.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.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"
|
|
}
|