Atuin - Intelligent Shell History
Atuin replaces your existing shell history with a SQLite database, and records additional context for your commands. It provides intelligent search, synchronization across machines, and powerful alias management.
🎯 Overview
Section titled “🎯 Overview”Atuin enhances your shell experience by:
- Recording rich context for every command (directory, exit code, duration, etc.)
- Providing intelligent search with fuzzy finding and filtering
- Synchronizing history across all your machines
- Managing aliases centrally with dotfiles integration
- Offering statistics and insights about your command usage
Why Atuin?
Section titled “Why Atuin?”- Better than Ctrl+R: Fuzzy search with context
- Cross-machine sync: Access history from any device
- Rich metadata: Know when, where, and how commands ran
- Privacy-focused: End-to-end encryption for sync
- Alias management: Centralized alias storage and sync
✨ Key Features
Section titled “✨ Key Features”🔍 Intelligent Search
Section titled “🔍 Intelligent Search”- Fuzzy search: Find commands even with typos
- Context filtering: Filter by directory, exit code, or time
- Interactive UI: Beautiful TUI for browsing history
- Quick access: Instant search with Ctrl+R
🔄 Cross-Machine Sync
Section titled “🔄 Cross-Machine Sync”- Encrypted sync: End-to-end encryption for privacy
- Automatic backup: Never lose command history
- Multi-device: Access from any machine
- Conflict resolution: Smart merging of histories
📝 Alias Management
Section titled “📝 Alias Management”- Centralized storage: All aliases in one place
- Version control: Track alias changes over time
- Sync across machines: Same aliases everywhere
- Backup & restore: Easy alias management
📊 Statistics & Insights
Section titled “📊 Statistics & Insights”- Command frequency: See your most-used commands
- Time tracking: Know how long commands take
- Success rates: Track command failure rates
- Usage patterns: Understand your workflow
🚀 Installation & Setup
Section titled “🚀 Installation & Setup”Prerequisites
Section titled “Prerequisites”# Atuin is already included in dotfiles# Installation happens automatically via stow-installInitial Setup
Section titled “Initial Setup”# 1. Install dotfiles (includes Atuin config)make stow-install
# 2. Import existing shell historyatuin import auto
# 3. Set up sync account (optional)atuin register -u <username> -e <email>atuin login -u <username>
# 4. Start using Atuin# Restart your shell or source ~/.zshrcVerification
Section titled “Verification”# Check Atuin statusatuin status
# Test search functionalityatuin search git
# Verify configurationatuin config list💻 Usage
Section titled “💻 Usage”Basic Commands
Section titled “Basic Commands”# Search history interactivelyatuin search# Or use Ctrl+R (replaces default shell search)
# Search for specific commandatuin search git commit
# Show recent historyatuin history list
# Get statisticsatuin statsSearch Modes
Section titled “Search Modes”# Fuzzy search (default)atuin search git com # Finds "git commit"
# Exact searchatuin search --exact "git commit -m"
# Filter by directoryatuin search --cwd /path/to/project git
# Filter by exit codeatuin search --exit 0 # Only successful commandsatuin search --exit 1 # Only failed commandsInteractive Search (Ctrl+R)
Section titled “Interactive Search (Ctrl+R)”- Up/Down: Navigate through results
- Enter: Execute selected command
- Tab: Edit command before executing
- Ctrl+C: Cancel search
- Ctrl+D: Delete selected entry
📝 Alias Management
Section titled “📝 Alias Management”Current Aliases
Section titled “Current Aliases”The dotfiles include 38+ pre-configured aliases for common development tasks:
# Git aliasesg='git'gs='git status'gc='git checkout'gp='git pull'gP='git push'
# Development toolsv='nvim'lg='lazygit'd='docker'dc='docker-compose'
# And many more...Managing Aliases
Section titled “Managing Aliases”View Aliases
Section titled “View Aliases”# List all aliasesatuin dotfiles alias list
# Search for specific aliasatuin dotfiles alias list | grep gitAdd/Modify Aliases
Section titled “Add/Modify Aliases”# Add new aliasatuin dotfiles alias set myalias "my command"
# Update existing aliasatuin dotfiles alias set g "git --no-pager"
# Delete aliasatuin dotfiles alias delete myaliasBackup & Restore
Section titled “Backup & Restore”# Export current aliases to filemake export-aliases
# Import aliases from filemake import-aliases
# Backup aliases to gitmake backup-aliasesAlias File Structure
Section titled “Alias File Structure”#!/bin/bash# Atuin Aliases - Generated on [date]# Use 'atuin dotfiles alias set <n> <command>' to restore# You can also execute this file directly: ./aliases.sh
atuin dotfiles alias set 'g' 'git'atuin dotfiles alias set 'v' 'nvim'# ... more aliases🔍 Search & Navigation
Section titled “🔍 Search & Navigation”Search Syntax
Section titled “Search Syntax”# Basic searchatuin search term
# Multiple terms (AND)atuin search git commit
# Exclude termsatuin search git -commit
# Wildcard searchatuin search "git *"Filtering Options
Section titled “Filtering Options”# Filter by directoryatuin search --cwd ~/projects git
# Filter by dateatuin search --after "2024-01-01" deployatuin search --before "2024-12-31" backup
# Filter by durationatuin search --duration 5s.. # Commands taking >5 seconds
# Filter by exit codeatuin search --exit 0 deploy # Only successful deploysAdvanced Search
Section titled “Advanced Search”# Search in specific sessionatuin search --session-id <id> command
# Search by hostnameatuin search --host myserver deploy
# Combine filtersatuin search --cwd ~/work --exit 0 --after "2024-01-01" deploy🔄 Synchronization
Section titled “🔄 Synchronization”Setup Sync
Section titled “Setup Sync”# Register new accountatuin register -u username -e email@example.com
# Login to existing accountatuin login -u username
# Verify sync statusatuin statusSync Operations
Section titled “Sync Operations”# Manual syncatuin sync
# Force sync (resolve conflicts)atuin sync --force
# Check sync statusatuin statusPrivacy & Security
Section titled “Privacy & Security”- End-to-end encryption: History encrypted before upload
- Local key: Encryption key stored locally only
- No plaintext: Server never sees unencrypted commands
- Open source: Audit the code yourself
Self-Hosting (Optional)
Section titled “Self-Hosting (Optional)”# Use custom sync serveratuin config set sync_address https://your-server.com
# Disable sync entirelyatuin config set auto_sync false⚙️ Configuration
Section titled “⚙️ Configuration”Configuration File
Section titled “Configuration File”- Location:
dotfiles/atuin/.config/atuin/config.toml - Auto-loaded: Via dotfiles stow installation
Key Settings
Section titled “Key Settings”# Search configurationsearch_mode = "fuzzy" # or "exact"filter_mode = "global" # or "session", "directory"
# Sync settingsauto_sync = truesync_frequency = "1h"
# UI preferencesshow_preview = truemax_preview_height = 4show_help = true
# Privacy settingssecrets_filter = true # Filter out potential secretsCustomization
Section titled “Customization”# Change search modeatuin config set search_mode exact
# Disable auto-syncatuin config set auto_sync false
# Change key bindingsatuin config set keymap_mode vim # or emacs
# View all settingsatuin config listShell Integration
Section titled “Shell Integration”# The dotfiles automatically configure:# - Ctrl+R replacement# - Up arrow enhancement# - Command recording# - Alias loading
# Manual integration (if needed)echo 'eval "$(atuin init zsh)"' >> ~/.zshrc🔧 Troubleshooting
Section titled “🔧 Troubleshooting”Common Issues
Section titled “Common Issues”History Not Recording
Section titled “History Not Recording”# Check if atuin is properly initializedecho $ATUIN_SESSION
# Verify shell integrationatuin status
# Restart shellexec zshSearch Not Working
Section titled “Search Not Working”# Check databaseatuin doctor
# Rebuild search indexatuin search --rebuild-index
# Check for corrupted databasesqlite3 ~/.local/share/atuin/history.db "PRAGMA integrity_check;"Sync Issues
Section titled “Sync Issues”# Check network connectivityatuin status
# Re-authenticateatuin logoutatuin login -u username
# Force syncatuin sync --forceAliases Not Loading
Section titled “Aliases Not Loading”# Check alias configurationatuin dotfiles alias list
# Reload aliasessource ~/.zshrc
# Import from backupmake import-aliasesPerformance Issues
Section titled “Performance Issues”Slow Search
Section titled “Slow Search”# Check database sizedu -h ~/.local/share/atuin/history.db
# Optimize databaseatuin search --rebuild-index
# Limit history sizeatuin config set max_history_length 100000High Memory Usage
Section titled “High Memory Usage”# Check atuin processesps aux | grep atuin
# Restart atuin daemonatuin daemon stopatuin daemon startDatabase Maintenance
Section titled “Database Maintenance”Backup History
Section titled “Backup History”# Export historyatuin export > history-backup.json
# Backup database filecp ~/.local/share/atuin/history.db ~/atuin-backup.dbClean Up History
Section titled “Clean Up History”# Remove old entries (older than 1 year)atuin history prune --days 365
# Remove entries from specific directoryatuin history delete --cwd /tmp
# Remove failed commandsatuin history delete --exit-code 1📊 Statistics & Analytics
Section titled “📊 Statistics & Analytics”Usage Statistics
Section titled “Usage Statistics”# Overall statsatuin stats
# Top commandsatuin stats --count 20
# Commands by directoryatuin stats --cwd ~/projects
# Time-based statsatuin stats --after "2024-01-01"Insights
Section titled “Insights”# Most used commandsatuin search --limit 0 | head -20
# Failed commandsatuin search --exit 1
# Long-running commandsatuin search --duration 10s..
# Commands by frequencyatuin stats | sort -nr🔗 Integration
Section titled “🔗 Integration”Tmux Integration
Section titled “Tmux Integration”- Works seamlessly with tmux sessions
- Each tmux pane has separate history context
- Session-aware search and filtering
Neovim Integration
Section titled “Neovim Integration”- Terminal commands within Neovim are recorded
- Search available in Neovim terminal mode
- Consistent experience across all shells
Git Integration
Section titled “Git Integration”- Git commands are tracked with repository context
- Easy to find commands by project
- Track deployment and release commands