atuin 0.3.3

atuin - magical shell history
atuin-0.3.3 is not a library.

A'tuin manages and synchronizes your shell history! Instead of storing everything in a text file (such as ~/.history), A'tuin uses a sqlite database. While being a little more complex, this allows for more functionality.

As well as the expected command, A'tuin stores

  • duration
  • exit code
  • working directory
  • hostname
  • time
  • a unique session ID

Supported Shells

  • zsh

Requirements

Install

AUR

A'tuin is available on the AUR

yay -S atuin # or your AUR helper of choice

With cargo

atuin needs a nightly version of Rust + Cargo! It's best to use rustup for getting set up there.

rustup default nightly

cargo install atuin

From source

rustup default nightly
git clone https://github.com/ellie/atuin.git
cd atuin
cargo install --path .

Shell plugin

Once the binary is installed, the shell plugin requires installing. Add

eval "$(atuin init)"

to your .zshrc/.bashrc/whatever your shell uses.

Usage

History search

By default A'tuin will rebind ctrl-r to use fzf to fuzzy search your history. It will also rebind the up arrow to use fzf, just without sorting. You can prevent this by putting

export ATUIN_BINDKEYS="false"

into your shell config.

You may also change the default history selection. The default behaviour will search your entire history, however

export ATUIN_HISTORY="atuin history list --cwd"

will switch to only searching history for the current directory.

Similarly,

export ATUIN_HISTORY="atuin history list --session"

will search for the current session only, and

export ATUIN_HISTORY="atuin history list --session --cwd"

will do both!

Import history

atuin import auto # detect shell, then import

or

atuin import zsh  # specify shell

List history

List all history

atuin history list

List history for the current directory

atuin history list --cwd

atuin h l -c # alternative, shorter version

List history for the current session

atuin history list --session

atuin h l -s # similarly short

Stats

A'tuin can calculate statistics for a single day, and accepts "natural language" style date input, as well as absolute dates:

$ atuin stats day last friday

+---------------------+------------+
| Statistic           | Value      |
+---------------------+------------+
| Most used command   | git status |
+---------------------+------------+
| Commands ran        |        450 |
+---------------------+------------+
| Unique commands ran |        213 |
+---------------------+------------+

$ atuin stats day 01/01/21 # also accepts absolute dates

It can also calculate statistics for all of known history:

$ atuin stats all

+---------------------+-------+
| Statistic           | Value |
+---------------------+-------+
| Most used command   |    ls |
+---------------------+-------+
| Commands ran        |  8190 |
+---------------------+-------+
| Unique commands ran |  2996 |
+---------------------+-------+

...what's with the name?

A'tuin is named after "The Great A'tuin", a giant turtle from Terry Pratchett's Discworld series of books.