From 144b36e09804da7bdf7fd5529b88d2ec05c48bee Mon Sep 17 00:00:00 2001 From: Corey Smith Date: Tue, 22 Jul 2025 01:06:43 -0700 Subject: [PATCH] First commit --- dot_bash_profile | 36 +++++ dot_bashrc | 339 +++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 375 insertions(+) create mode 100644 dot_bash_profile create mode 100644 dot_bashrc diff --git a/dot_bash_profile b/dot_bash_profile new file mode 100644 index 0000000..ec5c514 --- /dev/null +++ b/dot_bash_profile @@ -0,0 +1,36 @@ +# ~/.bash_profile +# Source .bashrc for login shells to ensure consistent environment +if [ -f ~/.bashrc ]; then + . ~/.bashrc +fi + +export GOPATH=$HOME/go +export PATH=$PATH:$GOROOT/bin:$GOPATH/bin +export PATH=$PATH:$(go env GOPATH)/bin + +# Herd injected NVM configuration +export NVM_DIR="/Users/corey/Library/Application Support/Herd/config/nvm" +[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" # This loads nvm + +# Herd injected PHP 8.4 configuration. +export HERD_PHP_84_INI_SCAN_DIR="/Users/corey/Library/Application Support/Herd/config/php/84/" + + +# Herd injected PHP 8.2 configuration. +export HERD_PHP_82_INI_SCAN_DIR="/Users/corey/Library/Application Support/Herd/config/php/82/" + + +# Herd injected PHP binary. +export PATH="/Users/corey/Library/Application Support/Herd/bin/":$PATH + +# Composer Global Path +export PATH="$PATH:/Users/corey/.config/composer/vendor/bin" + + + +# Herd injected PHP binary. +export PATH="/Users/corey/Library/Application Support/Herd/bin/":$PATH + + +# Herd injected PHP binary. +export PATH="/Users/corey/Library/Application Support/Herd/bin/":$PATH diff --git a/dot_bashrc b/dot_bashrc new file mode 100644 index 0000000..25b4eba --- /dev/null +++ b/dot_bashrc @@ -0,0 +1,339 @@ +# ____ __ +# / __ )____ ______/ /_ +# / __ / __ `/ ___/ __ \ +# / /_/ / /_/ (__ ) / / / +# /_____/\__,_/____/_/ /_/ +# +# Corey Smith +# Bash Configuration +# corey@littleplummercreek.studio + + +# If not running interactively, don't do anything +case $- in + *i*) ;; + *) return;; +esac + +# check the window size after each command and, if necessary, +# update the values of LINES and COLUMNS. +shopt -s checkwinsize + +export EDITOR=nvim + +# ------------------------------------------------------------------------------ +# 1Password +# ------------------------------------------------------------------------------ +# +# Use the 1Password agent to manage ssh keys +# + +export SSH_AUTH_SOCK=~/Library/Group\ Containers/2BUA8C4S2C.com.1password/t/agent.sock + +# ------------------------------------------------------------------------------ +# XDG Base Directory Specification +# ------------------------------------------------------------------------------ +# +# Define standard locations for configuration and data files +# + +# Define XDG directories +export XDG_CONFIG_HOME="$HOME/.config" +export XDG_CACHE_HOME="$HOME/.cache" +export XDG_DATA_HOME="$HOME/.local/share" +export XDG_STATE_HOME="$HOME/.local/state" + +# Ensure directories exist (only create if they don't exist) +[ ! -d "$XDG_CONFIG_HOME" ] && mkdir -p "$XDG_CONFIG_HOME" +[ ! -d "$XDG_DATA_HOME" ] && mkdir -p "$XDG_DATA_HOME" +[ ! -d "$XDG_CACHE_HOME" ] && mkdir -p "$XDG_CACHE_HOME" +[ ! -d "$XDG_STATE_HOME" ] && mkdir -p "$XDG_STATE_HOME" +[ ! -d "$HOME/.local/bin" ] && mkdir -p "$HOME/.local/bin" + +# Rustup XDG compliance +export RUSTUP_HOME="$XDG_DATA_HOME"/rustup + +# Node.js and npm XDG compliance +[ ! -d "$XDG_CONFIG_HOME/npm/config" ] && mkdir -p "$XDG_CONFIG_HOME/npm/config" +[ ! -d "$XDG_CACHE_HOME/npm" ] && mkdir -p "$XDG_CACHE_HOME/npm" +export NODE_REPL_HISTORY="$XDG_STATE_HOME/node_repl_history" +export NPM_CONFIG_CACHE="$XDG_CACHE_HOME/npm" +export NPM_CONFIG_INIT_MODULE="$XDG_CONFIG_HOME/npm/config/npm-init.js" + +export NVM_DIR="/Users/corey/Library/Application Support/Herd/config/nvm" +[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" # This loads nvm + +# Less don't make a history file +export LESSHISTFILE="/dev/null" + +# ------------------------------------------------------------------------------ +# PATH Configuration +# ------------------------------------------------------------------------------ +# +# Set up the PATH environment variable with all necessary directories +# + +# Start with a minimal system PATH +PATH="/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin" + +# Add user's personal bin directory (highest priority) +if [ -d "$HOME/bin" ]; then + PATH="$HOME/bin:$PATH" +fi + +# Add user's local bin directory +PATH="$HOME/.local/bin:$PATH" + +# Add Homebrew directories +if [ -d "/opt/homebrew/bin" ]; then + PATH="/opt/homebrew/bin:/opt/homebrew/sbin:$PATH" +fi + +# Add Go bin directory if it exists +if [ -d "/usr/local/go/bin" ]; then + PATH="/usr/local/go/bin:$PATH" +fi + +# Add Topaz Photo AI bin directory if it exists +TOPAZ_BIN="/Applications/Topaz Photo AI.app/Contents/Resources/bin" +if [ -d "$TOPAZ_BIN" ]; then + PATH="$TOPAZ_BIN:$PATH" +fi + +# Export the final PATH +export PATH + +# ------------------------------------------------------------------------------ +# Export terminal type +# ------------------------------------------------------------------------------ +# +# Set terminal to 256color mode for use with custom color schemes +# + +export TERM="xterm-256color" + +# ------------------------------------------------------------------------------ +# Prompt +# ------------------------------------------------------------------------------ +# +# Simple prompt matching Ubuntu's default style with colors +# + +# A more detailed git prompt parser +# Part 1: Function to get the raw git status text +# (This function is the same as before) +parse_git_prompt() { + local git_status + git_status=$(git status --porcelain -b 2>/dev/null) + [[ -z "$git_status" ]] && return + + local branch_line + branch_line=$(echo "$git_status" | head -n 1) + + local branch_icon=" " + local branch_name + branch_name=$(echo "$branch_line" | sed -e 's/^## //' -e 's/\.\..*$//') + + local ahead=0 behind=0 + if [[ "$branch_line" =~ ahead\ ([0-9]+) ]]; then + ahead=${BASH_REMATCH[1]} + fi + if [[ "$branch_line" =~ behind\ ([0-9]+) ]]; then + behind=${BASH_REMATCH[1]} + fi + + local file_status + file_status=$(echo "$git_status" | tail -n +2) + local added=0 changed=0 deleted=0 + + if [[ -n "$file_status" ]]; then + added=$(echo "$file_status" | grep -c "^??") + deleted=$(echo "$file_status" | grep -c " D ") + changed=$(echo "$file_status" | grep -c "M") + fi + + local prompt_parts=() + prompt_parts+=("$branch_icon $branch_name") + + ((behind > 0)) && prompt_parts+=("$behind behind") + ((ahead > 0)) && prompt_parts+=("$ahead ahead") + ((changed > 0)) && prompt_parts+=("$changed changed") + ((added > 0)) && prompt_parts+=("$added added") + ((deleted > 0)) && prompt_parts+=("$deleted deleted") + + local prompt_string + prompt_string=$(IFS=' '; echo "${prompt_parts[*]}") + + echo "$prompt_string" +} + +# Part 2: A new function that builds the git line only if needed +build_prompt() { + local git_info + git_info=$(parse_git_prompt) + + if [[ -n "$git_info" ]]; then + # If we are in a git repo, build the full line with a newline, + # color, the git info, and a color reset. + # The \[ and \] are crucial to tell Bash not to count the color + # codes as characters, which prevents line-wrapping bugs. + GIT_PROMPT_LINE="\n\[\033[90m\]${git_info}\[\033[00m\]" + else + # Otherwise, the variable is empty. + GIT_PROMPT_LINE="" + fi +} + +# Part 3: Set PROMPT_COMMAND and the final PS1 +# +# PROMPT_COMMAND runs the `build_prompt` function before displaying the prompt. +PROMPT_COMMAND=build_prompt +# +# The PS1 now includes the ${GIT_PROMPT_LINE} variable. This will either +# be the formatted git string or an empty string. +PS1="\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\${GIT_PROMPT_LINE}\n" + + + + + +export PYTHON_HISTORY="$HOME/.local/state/python_history" + +# ------------------------------------------------------------------------------ +# Shell History +# ------------------------------------------------------------------------------ +# +# + +# Control duplicates and space-prefixed commands +HISTCONTROL=ignoreboth:erasedups + +# History file size +HISTFILESIZE=100000 +HISTSIZE=$HISTFILESIZE + +# Add timestamps to history +HISTTIMEFORMAT="%F %T " + +# Sync history across terminal sessions without clearing +PROMPT_COMMAND="history -a && history -n" + +# History behavior settings +shopt -s cmdhist +shopt -s histappend +shopt -s histreedit +shopt -s histverify +shopt -s lithist + +# ------------------------------------------------------------------------------ +# Tmux Configuration +# ------------------------------------------------------------------------------ +# +# Settings for Tmux integration +# + +if [[ ! $(tmux list-sessions) ]]; then + tmux new -s Tmux; +fi + +# ------------------------------------------------------------------------------ +# fzf +# ------------------------------------------------------------------------------ +# +# https://github.com/junegunn/fzf +# +# fzf is a general-purpose command-line fuzzy finder that can be used with +# any list: files, command history, processes, hostnames, bookmarks, etc. +# +# Key bindings enabled by fzf --bash: +# Ctrl-T: Paste the selected files and directories onto the command-line +# Ctrl-R: Paste the selected command from history onto the command-line +# Alt-C: cd into the selected directory +# +# The external .fzfrc file contains detailed color schemes, preview settings, +# and custom bindings for a clean, minimal interface with vim integration. +# +# + +eval "$(fzf --bash)" + +export FZF_DEFAULT_COMMAND="fd --type f --hidden --follow" + +export FZF_DEFAULT_OPTS=" + --style='full' + --prompt='🔎 Find: ' + --border='none' + --reverse + --color='light' + --color='hl:#777777:regular:underline' + --color='current-fg:#F7F6F3' + --color='current-bg:#3B82F6' + --color='current-hl:#F7F6F3:regular:underline' + --color='gutter:-1' + --color='pointer:-1' + --color='list-border:#000000' + --color='preview-border:#000000' + --color='input-border:#000000' + --color='header-border:#000000' + --list-border='double' + --input-border='double' + --preview-border='double' + --no-scrollbar + --pointer='' + --multi +" + +export FZF_CTRL_R_OPTS=" + --prompt='⏰ Command History: ' + --reverse + --height 100% +" + +export FZF_CTRL_T_OPTS=" + --prompt='📄 Select Files: ' + --reverse + --height 100% +" + +export FZF_ALT_C_OPTS=" + --prompt='📁 Navigate To: ' +" +# export FZF_DEFAULT_OPTS_FILE=~/.fzfrc + + + +# ------------------------------------------------------------------------------ +# Mise +# ------------------------------------------------------------------------------ +# +# +# + +eval "$(mise activate bash)" + +# ------------------------------------------------------------------------------ +# Alias +# ------------------------------------------------------------------------------ +# +# +# + +alias l='ls -CFG' +alias la='ls -AFG' +alias ll='ls -alFG' +alias vim='nvim' +alias python=python3 +alias pip=pip3 +alias db='db-browse' + + +# ------------------------------------------------------------------------------ +# Zoxide +# ------------------------------------------------------------------------------ +# +# Setup zsh completions and zoxide cd jumping +# + + +eval "$(zoxide init bash)" +