Atuin shell history synchronization with Fish shell integration and authentication.
The Atuin role configures Atuin shell history synchronization, providing encrypted, searchable command history that syncs across multiple machines. It includes Fish shell integration and handles authentication with the Atuin sync server.
- Ubuntu 20.04 LTS or later
- Ansible 2.12 or later
- Common role (automatically included as dependency)
- Fish role (automatically included as dependency)
- CLI Tools role (automatically included as dependency for atuin binary)
- Atuin account credentials (stored in vault)
The following variables can be set in defaults/main.yml:
# Atuin configuration
atuin_config_dir: "{{ ansible_user_dir }}/.config/atuin"
atuin_data_dir: "{{ ansible_user_dir }}/.local/share/atuin"
# Fish integration
fish_config_dir: "{{ ansible_user_dir }}/.config/fish/conf.d"
atuin_fish_config: "{{ fish_config_dir }}/atuin.fish"
# Authentication configuration (requires vault variables)
# atuin_username: "{{ vault_atuin_username }}"
# atuin_password: "{{ vault_atuin_password }}"
# atuin_email: "{{ vault_atuin_email }}"
# Sync configuration
atuin_sync_address: "https://api.atuin.sh"
atuin_auto_sync: true
atuin_sync_frequency: "10m"
# History configuration
atuin_max_history: 10000
atuin_search_mode: "fuzzy"
# User configuration
target_user: "{{ ansible_user }}"atuin_config_dir: Directory for Atuin configuration filesatuin_data_dir: Directory for Atuin local data storagefish_config_dir: Fish shell configuration directoryatuin_fish_config: Path to Atuin Fish integration fileatuin_username: Atuin account username (vaulted)atuin_password: Atuin account password (vaulted)atuin_email: Atuin account email (vaulted)atuin_sync_address: Atuin sync server URLatuin_auto_sync: Whether to enable automatic synchronizationatuin_sync_frequency: How often to sync historyatuin_max_history: Maximum number of history entriesatuin_search_mode: History search mode (fuzzy, exact, etc.)target_user: User for which Atuin is being configured
common: Base system setup and essential packagesfish: Fish shell for integrationcli_tools: CLI tools for atuin binary installation
The following variables must be defined in your vault file (group_vars/all/vault.yml):
vault_atuin_username: "your-atuin-username"
vault_atuin_password: "your-atuin-password"
vault_atuin_email: "your-email@example.com"---
- hosts: servers
become: yes
roles:
- common
- fish
- cli_tools
- atuin- Encrypted History: All command history is encrypted before sync
- Cross-machine Sync: Access your command history from any machine
- Fuzzy Search: Advanced search capabilities with fuzzy matching
- Fish Integration: Seamless integration with Fish shell
- Automatic Authentication: Handles login to Atuin sync service
- Privacy Focused: Commands are encrypted and only you can decrypt them
To use this role, you need an Atuin account:
- Sign up at atuin.sh or set up your own sync server
- Store your credentials in the vault file:
ansible-vault edit group_vars/all/vault.ymlAdd your credentials:
vault_atuin_username: "your-username"
vault_atuin_password: "your-secure-password"
vault_atuin_email: "your-email@example.com"The role configures Fish shell integration by:
- Deploying Atuin Fish configuration
- Setting up key bindings for history search
- Configuring automatic history import
- Enabling real-time sync
After installation, Atuin provides:
- Ctrl+R: Interactive history search
- Up Arrow: Navigate through history with context
- Automatic Import: Existing Fish history is imported
- Real-time Sync: New commands are synced automatically
The role creates several configuration files:
~/.config/atuin/config.toml: Main Atuin configuration~/.config/fish/conf.d/atuin.fish: Fish shell integration~/.local/share/atuin/: Local history database
Atuin implements strong security measures:
- End-to-end Encryption: History is encrypted with your key
- Zero-knowledge: Atuin servers cannot read your history
- Secure Authentication: Uses secure authentication protocols
- Local First: History is stored locally and optionally synced
- Commands are encrypted before leaving your machine
- Only you have the decryption key
- Atuin servers cannot read your command history
- You can self-host the sync server for complete control
Common issues and solutions:
- Authentication failed: Verify credentials in vault file
- Sync not working: Check internet connectivity and server status
- Fish integration issues: Ensure Fish shell is properly configured
- History not importing: Check Fish history file permissions
To use a self-hosted Atuin server, modify the sync address:
atuin_sync_address: "https://your-atuin-server.com"MIT
Development Team - Internal Use