Atuin
Atuin replaces your existing shell history with a SQLite database, and records additional context for your commands. Additionally, Atuin (optionally) syncs your shell history between all of your machines.
Enable in your terminal
Atuin can be enabled using home-manager. Documentation for all settings can be found at https://docs.atuin.sh/configuration/config/ .

~/.config/home-manager/home.nix
{ pkgs, ... }: {
programs.atuin = {
enable = true;
settings = {
auto_sync = true;
sync_frequency = "5m";
sync_address = "https://api.atuin.sh";
search_mode = "fuzzy";
};
};
};
Enable synchronization with atuin.sh
Imperatively
To synchronize your history with atuin.sh you first need to register an account or login with the cli utility. Doint that will create a key and an session token in ~/.local/share/atuin
atuin register -u <YOUR_USERNAME> -e <YOUR EMAIL>
To backfill your existing shell history run
atuin import auto
atuin sync # Optionally sync your history to the server
Declaratively
You can manage your atuin session declaratively by setting the session_path
and key_path
options to files containing a session token and a key. You can obtain these two files by registering as described above and copying them from ~/.local/share/key
and ~/.local/share/session
. The example below uses agenix

~/.config/home-manager/home.nix
{ pkgs, ... }: {
programs.atuin = {
enable = true;
settings = {
# ... other settings
session_path = config.age.secrets."atuin_session".path;
key_path = config.age.secrets."atuin_key".path;
};
};
};
zsh autosuggestions
If zsh autosuggestions is enabled, atuin automatically adds itself as the first autosuggestion strategy; See atuin docs

~/.config/home-manager/home.nix
{ pkgs, ... }: {
programs.zsh = {
enable = true;
autosuggestions.enable = true; # Enable autosuggestions
};
programs.atuin = {
enable = true;
};
};