Alias Management - jvPalma/dotrun GitHub Wiki
← Configuration Management | Home | Developer Experience →
- Overview
- File Structure and Naming
- Load Order Control
- Creating Alias Files
- File Format Examples
- Managing Aliases
- Common Patterns
- Load Order Best Practices
- Migration from v2.x
- Best Practices
- Troubleshooting
- Next Steps
DotRun v3.1.0 uses a file-based alias workflow where aliases are defined in plain text .aliases files, not via command-based operations.
Key Features:
-
File-based: Aliases defined in
.aliasesfiles in~/.config/dotrun/aliases/ - Load Order Control: Two-digit numeric prefix (NN) controls load order
- Automatic Loading: Files loaded in alphabetical order when shell starts
-
Category Organization: Files can be flat (
01-git.aliases) or nested (01-git/shortcuts.aliases) - Shell Agnostic: Works with bash, zsh, and fish
- Flexible Structure: One file can contain multiple related aliases
Storage Location: ~/.config/dotrun/aliases/
Loading Mechanism: All .aliases files are discovered via find and loaded in sorted (alphabetical) order.
Format: NN-category.aliases
- NN: Two-digit number (01-99) controlling load order
- category: Descriptive name (lowercase, no spaces)
-
Extension:
.aliases(required)
Flat Structure:
~/.config/dotrun/aliases/
├── 01-navigation.aliases # Core navigation (cd shortcuts)
├── 05-git.aliases # Git operations
├── 07-docker.aliases # Docker commands
├── 10-kubernetes.aliases # K8s shortcuts
└── 90-personal.aliases # Personal overrides
Nested Structure:
~/.config/dotrun/aliases/
├── 01-core.aliases
├── 05-git.aliases
├── 05-git/
│ ├── shortcuts.aliases
│ └── advanced.aliases
├── 10-docker.aliases
└── 10-docker/
└── compose.aliases
Nested Sorting: Full paths are sorted lexicographically:
-
05-git.aliasesloads before05-git/shortcuts.aliases(.sorts before/) -
10-docker.aliasesloads before10-docker/compose.aliases
Files are loaded using:
find ~/.config/dotrun/aliases -name "*.aliases" -type f | sortLoad Order Rules:
- Lower NN loads first (01 before 05, 05 before 10)
- Flat files load before nested files in same category
- Later files can override earlier aliases by redefining them
Execution Order (earliest to latest):
01-core.aliases
05-docker.aliases
05-git.aliases
05-git/shortcuts.aliases # Nested, loads after flat 05-git.aliases
10-kubernetes.aliases
90-personal.aliases # Last, can override everything
Check actual load order:
# Using DotRun command
dr aliases list
# Or manually
find ~/.config/dotrun/aliases -type f -name "*.aliases" | sortInitialize (run once):
dr aliases initCreate or Edit Files:
# Create/edit flat file
dr aliases set 01-git
# Opens: ~/.config/dotrun/aliases/01-git.aliases
# Create/edit nested file
dr aliases set docker/compose
# Opens: ~/.config/dotrun/aliases/docker/compose.aliases
# With NN prefix in nested path
dr aliases set 05-git/shortcuts
# Opens: ~/.config/dotrun/aliases/05-git/shortcuts.aliasesCreate Directory (if needed):
mkdir -p ~/.config/dotrun/aliasesCreate File:
# Create with your editor
vim ~/.config/dotrun/aliases/05-git.aliases
# Or use echo
cat >~/.config/dotrun/aliases/05-git.aliases <<'EOF'
# Git shortcuts
alias gs='git status'
alias ga='git add'
alias gc='git commit'
EOFRequirements:
- File extension must be
.aliases - Use standard shell alias syntax:
alias name='command' - Save with Unix line endings (LF)
- No shebang needed
- File must be readable
File: ~/.config/dotrun/aliases/01-navigation.aliases
# Navigation shortcuts
alias ..='cd ..'
alias ...='cd ../..'
alias ....='cd ../../..'
alias ~='cd ~'
# Quick directories
alias cdd='cd ~/Downloads'
alias cdp='cd ~/Projects'
alias cdc='cd ~/.config'
alias cfg='cd ~/.config/dotrun/aliases'
# Enhanced ls
alias ll='ls -lah'
alias la='ls -A'
alias l='ls -CF'File: ~/.config/dotrun/aliases/05-git.aliases
# Git basics
alias g='git'
alias gst='git status -sb'
alias gco='git checkout'
alias gcb='git checkout -b'
alias ga='git add -A'
alias gcm='git commit -m'
alias gp='git push'
alias gpl='git pull --rebase --autostash'
# Git viewing
alias gl='git log --oneline --graph --decorate --all'
alias gdf='git diff'
alias gdc='git diff --cached'
# Git branch management
alias gb='git branch'
alias gbd='git branch -d'
alias gbD='git branch -D'File: ~/.config/dotrun/aliases/07-docker.aliases
# Docker and Docker Compose
alias d='docker'
alias dc='docker compose'
# Docker PS with formatting
alias dps='docker ps --format "table {{.Names}}\t{{.Image}}\t{{.Status}}\t{{.Ports}}"'
alias dpsa='docker ps -a --format "table {{.Names}}\t{{.Image}}\t{{.Status}}\t{{.Ports}}"'
# Docker images
alias dim='docker images'
alias drmi='docker rmi'
# Docker logs
alias dl='docker logs'
alias dlf='docker logs -f'
# Docker Compose
alias dcu='docker compose up -d'
alias dcd='docker compose down'
alias dcr='docker compose restart'
alias dcl='docker compose logs -f'
# Docker exec
alias dex='docker exec -it'File: ~/.config/dotrun/aliases/10-kubernetes.aliases
# Kubernetes
alias k='kubectl'
alias kg='kubectl get'
alias kd='kubectl describe'
alias kdel='kubectl delete'
alias kap='kubectl apply -f'
# Pods
alias kgp='kubectl get pods'
alias kgpa='kubectl get pods --all-namespaces'
alias kdp='kubectl describe pod'
alias kl='kubectl logs'
alias klf='kubectl logs -f'
# Deployments
alias kgd='kubectl get deployments'
alias kdd='kubectl describe deployment'
# Services
alias kgs='kubectl get services'
alias kds='kubectl describe service'
# Context switching
alias kctx='kubectl config use-context'
alias kns='kubectl config set-context --current --namespace'File: ~/.config/dotrun/aliases/90-personal.aliases
# Personal overrides (loads last)
# Override ls with eza if installed
if command -v eza &>/dev/null; then
alias ls='eza --group-directories-first --icons=auto -F'
alias ll='eza -la --group-directories-first --icons=auto'
alias lt='eza --tree --level=2'
fi
# Override cat with bat if installed
if command -v bat &>/dev/null; then
alias cat='bat --style=plain'
fi
# Machine-specific shortcuts
alias work='cd ~/work-projects'
alias personal='cd ~/personal-projects'File: ~/.config/dotrun/aliases/05-git/advanced.aliases
# Advanced Git shortcuts (loads after 05-git.aliases)
# Git switch (newer syntax)
alias gsw='git switch'
alias gswc='git switch -c'
# Git restore
alias gr='git restore'
alias grs='git restore --staged'
# Git stash
alias gss='git stash -u'
alias gsp='git stash pop'
alias gsl='git stash list'
# Interactive rebase
alias grb='git rebase -i'
alias grbc='git rebase --continue'
alias grba='git rebase --abort'# Initialize system
dr aliases init
# Create or edit alias file
dr aliases set <path/to/file>
# List all alias files
dr aliases list
# List with category information
dr aliases list --categories
# List files in specific category
dr aliases list --category <name>
# Remove alias file
dr aliases remove <path/to/file>
# Reload aliases in current shell
dr aliases reloadList Aliases:
# List all alias files
dr aliases list
# List with categories
dr aliases list --categories
# List git category only
dr aliases list --category gitEdit Aliases:
# Edit existing file
dr aliases set 05-git
# Edit nested file
dr aliases set docker/compose
# Or edit directly
vim ~/.config/dotrun/aliases/05-git.aliasesRemove Aliases:
# Remove entire file
dr aliases remove 07-docker.aliases
# Remove nested file
dr aliases remove 10-git/shortcuts.aliasesReload Aliases:
# Apply changes without restarting shell
dr aliases reload
# Or source directly
source ~/.config/dotrun/shell/bash/aliases.sh # bash
source ~/.config/dotrun/shell/zsh/aliases.sh # zsh# Directory navigation
alias ..='cd ..'
alias ...='cd ../..'
alias ....='cd ../../..'
alias ~='cd ~'
alias -- -='cd -' # Go back to previous directory
# Quick jumps
alias dl='cd ~/Downloads'
alias doc='cd ~/Documents'
alias desk='cd ~/Desktop'# Status and staging
alias gst='git status -sb'
alias ga='git add'
alias gap='git add -p' # Interactive staging
# Committing
alias gc='git commit'
alias gcm='git commit -m'
alias gca='git commit --amend'
alias gcan='git commit --amend --no-edit'
# Branching and switching
alias gco='git checkout'
alias gcb='git checkout -b'
alias gb='git branch'
alias gm='git merge'
# Syncing
alias gp='git push'
alias gpf='git push --force-with-lease'
alias gpl='git pull --rebase --autostash'
alias gf='git fetch --all --prune'# Quick commands
alias dps='docker ps'
alias dpsa='docker ps -a'
alias dim='docker images'
# Docker Compose workflow
alias dcu='docker compose up -d'
alias dcd='docker compose down'
alias dcr='docker compose restart'
alias dcl='docker compose logs -f'
alias dcps='docker compose ps'
# Cleanup
alias dprune='docker system prune -af'
alias dvprune='docker volume prune -f'Strategy: Place foundational aliases early, personal overrides late.
# 01-core.aliases (loads first)
alias ls='ls -F'
alias ll='ls -la'
# 90-personal.aliases (loads last)
# Override with better tool if available
if command -v eza &>/dev/null; then
alias ls='eza --group-directories-first -F'
alias ll='eza -la --group-directories-first'
fiProblem: Earlier file overrides make later definitions ineffective.
# ❌ BAD: 01-core.aliases
alias ls='ls -F'
alias ll='ls -la'
# ❌ BAD: 50-tools.aliases (loads after core)
# This gets OVERRIDDEN by 01-core because alphabetical sort
# puts 01 before 50, so 50 loads AFTER and wins
alias ls='eza -F' # This actually wins (bad organization)Fix: Use consistent numbering strategy where lower = foundation, higher = overrides.
Good: Leave gaps for future insertions.
01-core.aliases # Core utilities
05-git.aliases # Version control
10-docker.aliases # Containers
20-kubernetes.aliases # Orchestration
30-cloud.aliases # Cloud providers
80-work.aliases # Work-specific
90-personal.aliases # Personal overridesBad: No gaps, hard to insert new categories.
01-core.aliases
02-git.aliases
03-docker.aliases
04-kubernetes.aliases
# Now where do you add cloud aliases between docker and k8s?
# Have to renumber everything!Good: Ensure dependencies load first.
# 01-paths.config (sets PATH - config file, not alias file)
export PATH="$HOME/.local/bin:$PATH"
# 10-custom.aliases (uses tools from PATH)
alias mytool='/path/from/custom/bin/tool' # Tool is in PATHBad: Using tools before PATH is set.
# 10-custom.aliases (tries to use tool)
alias mytool='custom-tool --flag'
# 50-paths.config (sets PATH too late!)
export PATH="$HOME/.local/bin:$PATH"
# custom-tool might not be found when alias was definedOld Workflow (v2.x):
# Add individual aliases
dr alias add ll "ls -la"
dr alias add gco "git checkout"
dr alias add dps "docker ps"
# List aliases
dr alias list
# Remove alias
dr alias remove llStep 1: Initialize v3.1.0 System
dr aliases initStep 2: Export v2.x Aliases (if possible)
# If v2.x has export command
dr alias list >~/old-aliases.txtStep 3: Create Category Files
# Create files for different categories
dr aliases set 05-git
dr aliases set 07-docker
dr aliases set 10-personalStep 4: Migrate Aliases to Files
Example Migration:
From v2.x commands:
dr alias add ll "ls -la"
dr alias add gst "git status"
dr alias add gco "git checkout"
dr alias add dps "docker ps"To v3.1.0 files:
File: ~/.config/dotrun/aliases/01-core.aliases
# Core utilities
alias ll='ls -la'File: ~/.config/dotrun/aliases/05-git.aliases
# Git shortcuts
alias gst='git status'
alias gco='git checkout'File: ~/.config/dotrun/aliases/07-docker.aliases
# Docker shortcuts
alias dps='docker ps'Step 5: Reload and Test
# Reload in current shell
dr aliases reload
# Test aliases
alias ll
alias gst
alias dpsStep 6: Clean Up v2.x
Remove any v2.x alias storage files (location varies by v2.x implementation).
Quoting Rules: Keep the same quoting from v2.x commands:
- Single quotes prevent variable expansion:
alias mydir='cd ~/projects' - Double quotes allow expansion:
alias today="date +%Y-%m-%d"
Grouping: Organize migrated aliases into logical categories:
- Split by tool (git, docker, npm)
- Split by purpose (navigation, development, system)
- Use NN prefixes to control load order
Good:
01-navigation.aliases
05-git.aliases
07-docker.aliases
10-kubernetes.aliases
20-development.aliases
80-work.aliases
90-personal.aliasesAvoid:
01-stuff.aliases
02-more.aliases
03-misc.aliasesGood: Gaps allow future insertions
01-core.aliases
05-git.aliases
10-docker.aliases
20-cloud.aliases
# Easy to add 15-kubernetes.aliases laterAvoid: No gaps
01-core.aliases
02-git.aliases
03-docker.aliases
# Hard to insert between 02 and 03Good: Logical grouping within files
# 05-git.aliases
# Status and staging
alias gst='git status -sb'
alias ga='git add'
alias gap='git add -p'
# Committing
alias gc='git commit'
alias gcm='git commit -m'
alias gca='git commit --amend'
# Branching
alias gco='git checkout'
alias gcb='git checkout -b'
alias gb='git branch'Avoid: Random order
# 05-git.aliases
alias gco='git checkout'
alias gst='git status'
alias ga='git add'
alias gb='git branch'
alias gcm='git commit -m'Good: Clear section headers
# Git aliases
# Status and viewing
alias gst='git status -sb'
alias gl='git log --oneline --graph'
# Branch management
alias gb='git branch'
alias gco='git checkout'
alias gcb='git checkout -b'Good: Check before defining
# Check if name is already a command
command -v ll &>/dev/null && echo "ll exists"
# Use unique prefixes if needed
alias my-ll='ls -la'
alias dr-ll='ls -la'Risky: Overriding system commands
# Dangerous: overrides system commands
alias rm='rm -i' # Can break scripts expecting standard rm
alias cp='cp -i' # Can break scripts expecting standard cpGood: Single quotes prevent early expansion
alias today='date +%Y-%m-%d' # Runs date when alias is used
alias mydir='cd ~/projects' # Expands ~ when usedCareful: Double quotes expand immediately
alias today="date +%Y-%m-%d" # Expands when alias is DEFINED
alias mydir="cd $HOME/projects" # Expands $HOME when definedWorkflow:
# 1. Edit alias file
dr aliases set 05-git
# 2. Reload in current shell
dr aliases reload
# 3. Test the alias
alias gst
gst
# 4. Verify it works as expectedSetup:
cd ~/.config/dotrun
git init
git add aliases/
git commit -m "Initial aliases setup"Track Changes:
# After modifying aliases
cd ~/.config/dotrun
git add aliases/05-git.aliases
git commit -m "Add git stash aliases"Symptoms: Aliases don't work after shell start.
Solutions:
Check file location:
ls ~/.config/dotrun/aliases/Check file extension:
# Must end with .aliases
ls ~/.config/dotrun/aliases/*.aliasesCheck file permissions:
# Files must be readable
chmod +r ~/.config/dotrun/aliases/*.aliasesCheck line endings:
# Should be LF (Unix), not CRLF (Windows)
file ~/.config/dotrun/aliases/05-git.aliasesReload shell or run reload:
# Option 1: Reload in current shell
dr aliases reload
# Option 2: Start new shell
exec $SHELL
# Option 3: Source directly
source ~/.drrcSymptoms: Aliases loaded in unexpected order, overrides not working.
Solutions:
Check numeric prefixes:
# Files should have consistent NN- prefixes
ls -1 ~/.config/dotrun/aliases/
# Should show:
# 01-core.aliases
# 05-git.aliases
# 10-docker.aliases
# 90-personal.aliasesPreview actual load order:
# See order DotRun will use
dr aliases list
# Or check manually
find ~/.config/dotrun/aliases -name "*.aliases" -type f | sortFix numbering:
# Rename files to correct order
mv ~/.config/dotrun/aliases/personal.aliases \
~/.config/dotrun/aliases/90-personal.aliases
mv ~/.config/dotrun/aliases/git.aliases \
~/.config/dotrun/aliases/05-git.aliasesReload after fixing:
dr aliases reloadSymptoms: Alias doesn't do what you expect, or uses wrong definition.
Solutions:
Check current definition:
# See what alias currently points to
alias gstFind all definitions:
# Search for alias in all files
grep -R "^alias gst=" ~/.config/dotrun/aliases/Fix conflicts:
Option 1: Remove earlier definition:
# Edit file with unwanted definition
dr aliases set 05-git
# Remove or comment out: alias gst='old definition'Option 2: Move intended definition to later file:
# Move to higher NN (loads later, overrides earlier)
# Copy to 90-personal.aliases, remove from 05-git.aliasesOption 3: Use different name:
# Rename to avoid conflict
alias my-gst='git status -sb'Symptoms: Modified aliases still use old definition.
Solutions:
Reload in current shell:
dr aliases reloadCheck you edited correct file:
# Verify file path matches what dr aliases set creates
dr aliases set 05-git
# Should open: ~/.config/dotrun/aliases/05-git.aliasesCheck for syntax errors:
# Try sourcing manually to see errors
source ~/.config/dotrun/aliases/05-git.aliasesCheck quoting:
# ✅ Good: Matched quotes
alias gst='git status'
# ❌ Bad: Mismatched quotes (won't work)
alias gst='git status"
alias gco="git checkout'Start new shell:
# If reload doesn't work, start fresh shell
exec $SHELLSymptoms: dr aliases list --category <name> returns nothing or wrong files.
Solutions:
Check category name:
# Category is derived from path after NN-
# 05-git/shortcuts.aliases → category is "git"
# 10-docker.aliases → category is "docker"
# List with categories to see actual names
dr aliases list --categoriesFix file naming:
# Ensure files follow NN-category naming
# ✅ Good: 05-git.aliases
# ❌ Bad: git.aliases (no NN prefix)
# ❌ Bad: 05git.aliases (no dash)Use correct category name:
# If file is 05-git.aliases
dr aliases list --category git # ✅ Correct
# Not:
dr aliases list --category 05-git # ❌ WrongWith alias management mastered:
- Configuration Management: Learn about Configuration Management for environment variables
- Collections: Share aliases via Collections
- Shell Integration: Optimize with Developer Experience
- Script Integration: Use aliases in Scripts
- Troubleshooting: Check Troubleshooting Guide for issues