# ========================= Omarchy ZSH ========================= # # If not running interactively, don't do anything [[ $- != *i* ]] && return # Load zsh options, keybindings, and completion [[ -f /usr/share/omarchy-zsh/shell/zoptions ]] && source /usr/share/omarchy-zsh/shell/zoptions # Load shared shell configuration (aliases, functions, environment, tool init) [[ -f /usr/share/omarchy-zsh/shell/all ]] && source /usr/share/omarchy-zsh/shell/all # ========================= Environment Variables ========================== # export EDITOR=nvim export VISUAL=nvim export PAGER='bat' export BAT_THEME="Catppuccin Mocha" # =============================== Custom Plugins =============================== # # Autosuggestions source ~/.local/share/zsh/plugins/zsh-autosuggestions/zsh-autosuggestions.zsh # Colored Man Pages source ~/.local/share/zsh/plugins/colored-man-pages.plugin.zsh # =============================== Custom Completions =============================== # source ~/.local/share/zsh/extra/zellij-completions.zsh source ~/.local/share/zsh/extra/atuin.zsh # ======================== ZSH Options ========================= # setopt autocd setopt notify setopt numericglobsort setopt promptsubst # ======================== ZSH History ========================= # unset HISTFILE unsetopt share_history unsetopt append_history unsetopt inc_append_history unsetopt extended_history # =============================== Aliases =============================== # # --------------- Git Shortcuts --------------- # alias gst='git status' # Show git status alias bgr='git branch' # List branches alias gcm='git commit -m' # Commit with message alias gammend='git commit --amend' # Amend last commit alias gamendnm='git commit --amend --no-edit' # Amend last commit without changing message alias glog='git log' # Show git log alias gdff='git diff' # Show git diff alias gpull='git pull' # Pull latest changes alias gfetch='git fetch' # Fetch latest changes alias gpush='git push' # Push changes alias gadd='git add' # Add files to staging alias gcl='git clone' # Clone a repository alias guncommit='git reset --soft HEAD~1' # Undo last commit but keep changes alias gcheckout='git checkout -b' # Git Checkout branch alias github="cd $HOME/Documents/Github" # Go to Github Directory # --------------- Tig Shortcuts --------------- alias t='tig' # Start tig alias tb='tig blame' # Start tig blame alias tst='tig status' # Start tig status alias tlog='tig log' # Start tig log alias tdf='tig diff' # Start tig diff # --------------- File & Directory Navigation --------------- alias ..='cd ..' # Go up one directory alias ...='cd ../..' # Go up two directories alias ....='cd ../../..' # # Go up three directories mkcd() { mkdir -p "$1" && cd "$1"} # Create a directory and navigate into it alias edit-here='code .' # Open current directory in VS Code alias here='xdg-open .' # Open current directory in file explorer # --------------- File Operations --------------- alias l='eza -lh --icons=auto --group-directories-first' # List files with human-readable sizes and directories first alias la='eza -lah --icons=auto --group-directories-first' # List all files with details and color alias ll='eza -lh --icons=always --group-directories-first' # Long list with exa showing directory sizes alias lf='eza -lh --icons=always --only-files' # List only files using exa alias lh='eza -lha --icons=always | grep "^\."' # List only hidden files alias back='cd -' # Go back to previous directory alias lt='eza --tree --level=2 --long --icons --git' # List Tree view alias lta='eza --tree --level=2 --long --icons --git -a' # List Tree view including hidden files alias tree='eza --tree' # List files in a tree structure alias lgrep='ls -lah | grep' # Search files in current directory with ls and grep # --------------- Process & System Control --------------- alias cls='clear' # Clear the console alias edit-profile='code ~/.zshrc' # Edit Profile alias zshrc='nvim ~/.zshrc' # Edit Profile edit() { code "$1" } # Open files in VS Code # --------------- Hashing --------------- alias md5="md5sum" # Alias md5 to md5sum for consistency across systems alias sha1="sha1sum" # Alias sha1 to sha1sum for consistency across systems alias sha256="sha256sum" # Alias sha256 to sha256sum for consistency # --------------- External Tools --------------- alias ji='zi' # Alias ji to zoxide's ji function for fuzzy directory navigation alias cat='bat' # Use bat instead of cat for better file viewing with syntax highlighting and paging alias help='tldr --color always' # Use tldr with color support alias lg='lazygit' # Launch LazyGit alias z='zellij' # Launch Zellij alias lazyzellij='lzj' # Zellij Session Manager alias top='btop' # Launch btop alias htop='btop' # Launch btop alias neofetch='fastfetch' # Launch FastFetch alias gitfetch='onefetch' # Use onefetch for git repository information # --------------- Miscellaneous --------------- alias grep='grep --color=auto' # Highlight matching text in grep alias rm='rm -i' # Prompt before deleting files alias mkdir='mkdir -p' # Create parent directories as needed alias ports='ss -tulwn' # Show listening ports alias dfh='df -h' # Human-readable disk usage alias dus='du -sh *' # Summarize folder sizes alias mem='free -h' # Memory usage alias cpuinfo='lscpu' # CPU info alias nano='nvim' # Use Neovim instead of nano alias vim='nvim' # Use Neovim instead of vim alias vi='nvim' # Use Neovim instead of vi alias emacs='nvim' # Use Neovim instead of emacs alias myip='curl ipinfo.io/ip' # Get public IP address alias hb='hastebin' # Upload file to hastebin # Print stsyem path variables path(){ local i=1 p; for p in "${(@)path}"; do printf "\e[38;5;75m%2d\e[0m \e[38;5;114m%s\e[0m\n" "$i" "$p"; ((i++)); done; } # =============================== fnm =============================== # autoload -U add-zsh-hook function load_node_version() { local dir="$PWD" local version_file="" while [[ "$dir" != "/" ]]; do if [[ -f "$dir/.nvmrc" ]]; then version_file="$dir/.nvmrc" break elif [[ -f "$dir/.node-version" ]]; then version_file="$dir/.node-version" break fi dir="${dir:h}" done if [[ -n "$version_file" ]]; then eval "$(fnm env --shell zsh)" fnm use --install-if-missing else export PATH="${PATH//\/run\/user\/1000\/fnm_multishells[^:]##:/}" fi } add-zsh-hook chpwd load_node_version load_node_version # =============================== keybindings =============================== # # Open My Zellij Session Manager zij-widget() { echo zij echo echo zle reset-prompt } zle -N zij-widget bindkey -M emacs '^[z' zij-widget # Open My Tmux Session Manager tij-widget() { echo tij echo echo zle reset-prompt } zle -N tij-widget bindkey -M emacs '^[t' tij-widget # Open Hastebin hb-widget() { zle -I hb zle reset-prompt } zle -N hb-widget bindkey -M emacs '^[b' hb-widget