Jump to content

Atuin

From NixOS Wiki
Note: This page is a WIP

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

Note: Both the session and key file must not have a trailing newline.
~/.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;
  };
};