2021-02-13 13:55:53 +01:00
|
|
|
<h1 align="center">
|
2021-04-25 19:21:52 +02:00
|
|
|
Atuin
|
2021-02-13 13:55:53 +01:00
|
|
|
</h1>
|
2021-02-14 17:23:08 +01:00
|
|
|
|
2021-04-26 12:59:00 +02:00
|
|
|
<p align="center">
|
|
|
|
<em>magical shell history</em>
|
|
|
|
</p>
|
|
|
|
|
2021-02-14 17:23:08 +01:00
|
|
|
<p align="center">
|
|
|
|
<a href="https://github.com/ellie/atuin/actions?query=workflow%3ARust"><img src="https://img.shields.io/github/workflow/status/ellie/atuin/Rust?style=flat-square" /></a>
|
|
|
|
<a href="https://crates.io/crates/atuin"><img src="https://img.shields.io/crates/v/atuin.svg?style=flat-square" /></a>
|
|
|
|
<a href="https://crates.io/crates/atuin"><img src="https://img.shields.io/crates/d/atuin.svg?style=flat-square" /></a>
|
|
|
|
<a href="https://github.com/ellie/atuin/blob/main/LICENSE"><img src="https://img.shields.io/crates/l/atuin.svg?style=flat-square" /></a>
|
|
|
|
</p>
|
2021-04-26 15:25:57 +02:00
|
|
|
|
|
|
|
<p align="center">
|
|
|
|
<img src="demo.gif" alt="animated" width="80%" />
|
|
|
|
</p>
|
|
|
|
|
|
|
|
<p align="center">
|
|
|
|
<em>exit code, duration, time and command shown</em>
|
|
|
|
</p>
|
|
|
|
|
2021-05-07 17:58:57 +02:00
|
|
|
Atuin replaces your existing shell history with a SQLite database, and records
|
|
|
|
additional context for your commands. Additionally, it provides optional and
|
|
|
|
_fully encrypted_ synchronisation of your history between machines, via an Atuin
|
|
|
|
server.
|
|
|
|
|
|
|
|
As well as the search UI, it can do things like this:
|
|
|
|
|
|
|
|
```
|
|
|
|
# search for all successful `make` commands, recorded after 3pm yesterday
|
|
|
|
atuin search --exit 0 --after "yesterday 3pm" make
|
|
|
|
```
|
|
|
|
|
|
|
|
You may use either the server I host, or host your own! Or just don't use sync
|
|
|
|
at all. As all history sync is encrypted, I couldn't access your data even if
|
|
|
|
I wanted to. And I **really** don't want to.
|
|
|
|
|
|
|
|
## Features
|
|
|
|
|
|
|
|
- rebind `up` and `ctrl-r` with a full screen history search UI
|
2021-04-25 19:21:52 +02:00
|
|
|
- store shell history in a sqlite database
|
2021-05-07 17:58:57 +02:00
|
|
|
- backup and sync **encrypted** shell history
|
|
|
|
- the same history across terminals, across sessions, and across machines
|
2021-04-25 19:21:52 +02:00
|
|
|
- log exit code, cwd, hostname, session, command duration, etc
|
|
|
|
- calculate statistics such as "most used command"
|
|
|
|
- old history file is not replaced
|
2021-05-10 22:28:07 +02:00
|
|
|
- quick-jump to previous items with <kbd>Alt-\<num\></kbd>
|
2021-04-25 19:21:52 +02:00
|
|
|
|
|
|
|
## Documentation
|
|
|
|
|
|
|
|
- [Quickstart](#quickstart)
|
|
|
|
- [Install](#install)
|
|
|
|
- [Import](docs/import.md)
|
|
|
|
- [Configuration](docs/config.md)
|
|
|
|
- [Searching history](docs/search.md)
|
|
|
|
- [Cloud history sync](docs/sync.md)
|
|
|
|
- [History stats](docs/stats.md)
|
2021-05-07 17:58:57 +02:00
|
|
|
- [Running your own server](docs/server.md)
|
2021-05-08 15:17:22 +02:00
|
|
|
- [Key binding](docs/key-binding.md)
|
2021-02-13 21:54:35 +01:00
|
|
|
|
2021-02-16 00:33:30 +01:00
|
|
|
## Supported Shells
|
|
|
|
|
|
|
|
- zsh
|
2021-04-26 12:50:31 +02:00
|
|
|
- bash
|
2021-02-16 00:33:30 +01:00
|
|
|
|
2021-04-25 19:21:52 +02:00
|
|
|
# Quickstart
|
2021-08-11 18:59:28 +02:00
|
|
|
|
|
|
|
## With the default sync server
|
|
|
|
|
|
|
|
This will sign you up for the default sync server, hosted by me. Everything is end-to-end encrypted, so your secrets are safe!
|
|
|
|
|
|
|
|
Read more below for offline-only usage, or for hosting your own server.
|
2021-04-25 19:21:52 +02:00
|
|
|
|
|
|
|
```
|
2021-04-27 19:32:44 +02:00
|
|
|
bash <(curl https://raw.githubusercontent.com/ellie/atuin/main/install.sh)
|
2021-04-25 19:21:52 +02:00
|
|
|
|
|
|
|
atuin register -u <USERNAME> -e <EMAIL> -p <PASSWORD>
|
|
|
|
atuin import auto
|
|
|
|
atuin sync
|
|
|
|
```
|
2021-08-11 18:59:28 +02:00
|
|
|
|
|
|
|
## Offline only (no sync)
|
|
|
|
|
|
|
|
```
|
|
|
|
bash <(curl https://raw.githubusercontent.com/ellie/atuin/main/install.sh)
|
|
|
|
|
|
|
|
atuin import auto
|
|
|
|
```
|
2021-04-25 19:21:52 +02:00
|
|
|
|
2021-02-13 21:54:35 +01:00
|
|
|
## Install
|
|
|
|
|
2021-04-26 12:50:31 +02:00
|
|
|
### Script (recommended)
|
2021-02-16 00:33:30 +01:00
|
|
|
|
2021-04-26 12:50:31 +02:00
|
|
|
The install script will help you through the setup, ensuring your shell is
|
|
|
|
properly configured. It will also use one of the below methods, preferring the
|
|
|
|
system package manager where possible (AUR, homebrew, etc etc).
|
2021-02-16 00:33:30 +01:00
|
|
|
|
2021-02-15 00:33:14 +01:00
|
|
|
```
|
2021-04-26 12:50:31 +02:00
|
|
|
# do not run this as root, root will be asked for if required
|
2021-04-27 19:32:44 +02:00
|
|
|
bash <(curl https://raw.githubusercontent.com/ellie/atuin/main/install.sh)
|
2021-02-15 00:33:14 +01:00
|
|
|
```
|
|
|
|
|
|
|
|
### With cargo
|
2021-02-16 00:33:30 +01:00
|
|
|
|
2021-04-25 19:21:52 +02:00
|
|
|
It's best to use [rustup](https://rustup.rs/) to get setup with a Rust
|
|
|
|
toolchain, then you can run:
|
2021-02-13 21:54:35 +01:00
|
|
|
|
2021-02-14 19:20:18 +01:00
|
|
|
```
|
2021-02-15 00:33:14 +01:00
|
|
|
cargo install atuin
|
2021-02-14 19:20:18 +01:00
|
|
|
```
|
|
|
|
|
2021-05-08 16:06:40 +02:00
|
|
|
### Homebrew
|
|
|
|
|
|
|
|
```
|
|
|
|
brew install atuin
|
|
|
|
```
|
|
|
|
|
2021-04-26 12:50:31 +02:00
|
|
|
### AUR
|
|
|
|
|
|
|
|
Atuin is available on the [AUR](https://aur.archlinux.org/packages/atuin/)
|
|
|
|
|
|
|
|
```
|
|
|
|
yay -S atuin # or your AUR helper of choice
|
|
|
|
```
|
|
|
|
|
2021-02-15 00:33:14 +01:00
|
|
|
### From source
|
2021-02-16 00:33:30 +01:00
|
|
|
|
2021-02-13 21:54:35 +01:00
|
|
|
```
|
2021-02-15 00:33:14 +01:00
|
|
|
git clone https://github.com/ellie/atuin.git
|
|
|
|
cd atuin
|
|
|
|
cargo install --path .
|
2021-02-13 21:54:35 +01:00
|
|
|
```
|
|
|
|
|
2021-04-26 12:50:31 +02:00
|
|
|
## Shell plugin
|
|
|
|
|
|
|
|
Once the binary is installed, the shell plugin requires installing. If you use
|
|
|
|
the install script, this should all be done for you!
|
|
|
|
|
|
|
|
### zsh
|
|
|
|
|
|
|
|
```
|
|
|
|
echo 'eval "$(atuin init zsh)"' >> ~/.zshrc
|
|
|
|
```
|
|
|
|
|
2021-05-12 22:47:06 +02:00
|
|
|
Or using a plugin manager:
|
|
|
|
|
|
|
|
```
|
|
|
|
zinit load ellie/atuin
|
|
|
|
```
|
|
|
|
|
2021-04-26 12:50:31 +02:00
|
|
|
### bash
|
2021-02-13 21:54:35 +01:00
|
|
|
|
2021-04-26 12:50:31 +02:00
|
|
|
We need to setup some hooks, so first install bash-preexec:
|
2021-02-13 21:54:35 +01:00
|
|
|
|
2021-02-13 22:21:00 +01:00
|
|
|
```
|
2021-04-26 12:50:31 +02:00
|
|
|
curl https://raw.githubusercontent.com/rcaloras/bash-preexec/master/bash-preexec.sh -o ~/.bash-preexec.sh
|
|
|
|
echo '[[ -f ~/.bash-preexec.sh ]] && source ~/.bash-preexec.sh' >> ~/.bashrc
|
2021-02-13 22:21:00 +01:00
|
|
|
```
|
2021-02-13 21:54:35 +01:00
|
|
|
|
2021-04-26 12:50:31 +02:00
|
|
|
Then setup Atuin
|
|
|
|
|
|
|
|
```
|
|
|
|
echo 'eval "$(atuin init bash)"' >> ~/.bashrc
|
|
|
|
```
|
2021-03-10 22:24:08 +01:00
|
|
|
|
2021-02-13 22:21:00 +01:00
|
|
|
## ...what's with the name?
|
|
|
|
|
2021-04-25 19:21:52 +02:00
|
|
|
Atuin is named after "The Great A'Tuin", a giant turtle from Terry Pratchett's
|
2021-02-13 22:21:00 +01:00
|
|
|
Discworld series of books.
|