2022-05-10 04:47:08 -06:00
< p align = "center" >
2022-05-30 11:05:57 -06:00
< img height = "250" src = "https://user-images.githubusercontent.com/53315310/171035743-53991112-9477-4f3d-8811-5deee40c7879.png" / >
2022-05-10 04:47:08 -06:00
< / p >
2021-02-14 09:23:08 -07:00
2021-04-26 04:59:00 -06:00
< p align = "center" >
< em > magical shell history< / em >
< / p >
2022-05-10 04:47:08 -06:00
< hr / >
2021-02-14 09:23:08 -07: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 >
2022-03-17 15:21:27 -06:00
< a href = "https://discord.gg/Fq8bJSKPHh" > < img src = "https://img.shields.io/discord/954121165239115808" / > < / a >
2021-02-14 09:23:08 -07:00
< / p >
2021-04-26 07:25:57 -06:00
2022-05-10 04:47:08 -06:00
[English] | [简体中文]
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.
2021-04-26 07:25:57 -06: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 >
2022-05-01 02:25:12 -06:00
2022-05-10 04:47:08 -06:00
2021-05-07 09:58:57 -06:00
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 11:21:52 -06:00
- store shell history in a sqlite database
2021-05-07 09:58:57 -06:00
- backup and sync **encrypted** shell history
- the same history across terminals, across sessions, and across machines
2021-04-25 11:21:52 -06: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 14:28:07 -06:00
- quick-jump to previous items with < kbd > Alt-\<num\></ kbd >
2022-04-22 14:05:02 -06:00
- switch filter modes via ctrl-r; search history just from the current session, directory, or globally
2021-04-25 11:21:52 -06: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 09:58:57 -06:00
- [Running your own server ](docs/server.md )
2021-05-08 07:17:22 -06:00
- [Key binding ](docs/key-binding.md )
2021-12-10 16:59:39 -07:00
- [Shell completions ](docs/shell-completions.md )
2021-02-13 13:54:35 -07:00
2021-02-15 16:33:30 -07:00
## Supported Shells
- zsh
2021-04-26 04:50:31 -06:00
- bash
2021-12-11 02:48:53 -07:00
- fish
2022-03-17 15:21:27 -06:00
## Community
Atuin has a community Discord, available [here ](https://discord.gg/Fq8bJSKPHh )
2021-02-15 16:33:30 -07:00
2021-04-25 11:21:52 -06:00
# Quickstart
2021-08-11 10:59:28 -06: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 11:21:52 -06:00
```
2021-04-27 11:32:44 -06:00
bash < (curl https://raw.githubusercontent.com/ellie/atuin/main/install.sh)
2021-04-25 11:21:52 -06:00
atuin register -u < USERNAME > -e < EMAIL > -p < PASSWORD >
atuin import auto
atuin sync
```
2021-08-11 10:59:28 -06:00
2022-06-05 14:49:00 -06:00
### Opt-in to activity graph
Alongside the hosted Atuin server, there is also a service which generates activity graphs for your shell history! These are inspired by the GitHub graph.
For example, here is mine:
![](https://api.atuin.sh/img/ellie.png?token=0722830c382b42777bdb652da5b71efb61d8d387)
If you wish to get your own, after signing up for the sync server, run this
```
curl https://api.atuin.sh/enable -d $(cat ~/.local/share/atuin/session)
```
The response includes the URL to your graph. Feel free to share and/or embed this URL, the token is _not_ a secret, and simply prevents user enumeration.
2021-08-11 10:59:28 -06:00
## Offline only (no sync)
```
bash < (curl https://raw.githubusercontent.com/ellie/atuin/main/install.sh)
atuin import auto
```
2021-04-25 11:21:52 -06:00
2021-02-13 13:54:35 -07:00
## Install
2021-04-26 04:50:31 -06:00
### Script (recommended)
2021-02-15 16:33:30 -07:00
2021-04-26 04:50:31 -06: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
2021-12-09 15:51:55 -07:00
system package manager where possible (pacman, homebrew, etc etc).
2021-02-15 16:33:30 -07:00
2021-02-14 16:33:14 -07:00
```
2021-04-26 04:50:31 -06:00
# do not run this as root, root will be asked for if required
2021-04-27 11:32:44 -06:00
bash < (curl https://raw.githubusercontent.com/ellie/atuin/main/install.sh)
2021-02-14 16:33:14 -07:00
```
### With cargo
2021-02-15 16:33:30 -07:00
2021-04-25 11:21:52 -06:00
It's best to use [rustup ](https://rustup.rs/ ) to get setup with a Rust
toolchain, then you can run:
2021-02-13 13:54:35 -07:00
2021-02-14 11:20:18 -07:00
```
2021-02-14 16:33:14 -07:00
cargo install atuin
2021-02-14 11:20:18 -07:00
```
2022-05-19 16:34:29 -06:00
And then follow [the shell setup ](#shell-plugin )
2021-02-14 11:20:18 -07:00
2021-05-08 08:06:40 -06:00
### Homebrew
```
brew install atuin
```
2022-04-13 16:49:38 -06:00
2022-05-19 16:34:29 -06:00
And then follow [the shell setup ](#shell-plugin )
2022-04-13 16:49:38 -06:00
### MacPorts
Atuin is also available in [MacPorts ](https://ports.macports.org/port/atuin/ )
```
sudo port install atuin
```
2022-05-19 16:34:29 -06:00
And then follow [the shell setup ](#shell-plugin )
2021-05-08 08:06:40 -06:00
2021-12-09 15:51:55 -07:00
### Pacman
2021-04-26 04:50:31 -06:00
2021-12-09 15:51:55 -07:00
Atuin is available in the Arch Linux [community repository ](https://archlinux.org/packages/community/x86_64/atuin/ ):
2021-04-26 04:50:31 -06:00
```
2021-12-09 15:51:55 -07:00
pacman -S atuin
2021-04-26 04:50:31 -06:00
```
2022-05-19 16:34:29 -06:00
And then follow [the shell setup ](#shell-plugin )
2021-04-26 04:50:31 -06:00
2021-02-14 16:33:14 -07:00
### From source
2021-02-15 16:33:30 -07:00
2021-02-13 13:54:35 -07:00
```
2021-02-14 16:33:14 -07:00
git clone https://github.com/ellie/atuin.git
cd atuin
cargo install --path .
2021-02-13 13:54:35 -07:00
```
2022-05-19 16:34:29 -06:00
And then follow [the shell setup ](#shell-plugin )
2021-02-13 13:54:35 -07:00
2021-04-26 04:50:31 -06: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 14:47:06 -06:00
Or using a plugin manager:
```
zinit load ellie/atuin
```
2021-04-26 04:50:31 -06:00
### bash
2021-02-13 13:54:35 -07:00
2021-04-26 04:50:31 -06:00
We need to setup some hooks, so first install bash-preexec:
2021-02-13 13:54:35 -07:00
2021-02-13 14:21:00 -07:00
```
2021-04-26 04:50:31 -06: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 14:21:00 -07:00
```
2021-02-13 13:54:35 -07:00
2021-04-26 04:50:31 -06:00
Then setup Atuin
```
echo 'eval "$(atuin init bash)"' >> ~/.bashrc
```
2021-03-10 14:24:08 -07:00
2021-12-11 02:48:53 -07:00
### fish
Add
```
atuin init fish | source
```
to your `is-interactive` block in your `~/.config/fish/config.fish` file
2021-02-13 14:21:00 -07:00
## ...what's with the name?
2021-04-25 11:21:52 -06:00
Atuin is named after "The Great A'Tuin", a giant turtle from Terry Pratchett's
2021-02-13 14:21:00 -07:00
Discworld series of books.
2022-05-01 02:25:12 -06:00
[English]: ./README.md
2022-05-10 04:47:08 -06:00
[简体中文]: ./docs/zh-CN/README.md