diff --git a/.gitignore b/.gitignore
index 78d22304..48f42de3 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,6 +1,4 @@
/target
*/target
.env
-
-# JetBrains IDEs
.idea/
diff --git a/docs/ru/config_ru.md b/docs/ru/config_ru.md
new file mode 100644
index 00000000..bf982fe8
--- /dev/null
+++ b/docs/ru/config_ru.md
@@ -0,0 +1,146 @@
+# Конфигурация
+
+Autin использует два файла конфигурации. Они хранятся в `~/.config/atuin/`. Данные
+хранятся в `~/.local/share/atuin` (если не определено другое в XDG\_\*).
+
+Путь до катклога конфигурации может быть изменён установкой
+параметра `ATUIN_CONFIG_DIR`. Например
+
+```
+export ATUIN_CONFIG_DIR = /home/ellie/.atuin
+```
+
+## Пользовательская конфигурация
+
+```
+~/.config/atuin/config.toml
+```
+
+Этот файл используется когда клиент работает на локальной машине (не сервере).
+
+See [config.toml](../atuin-client/config.toml) for an example
+
+### `dialect`
+
+Этот параметр контролирует как [stats](stats.md) команда обрабатывает данные.
+Может принимать одно из двух допустимых значений:
+
+```
+dialect = "uk"
+```
+
+или
+
+```
+dialect = "us"
+```
+
+По умолчанию - "us".
+
+### `auto_sync`
+
+Синхронизироваться ли автоматически если выполнен вход. По умолчанию - да (true)
+```
+auto_sync = true/false
+```
+
+### `sync_address`
+
+Адрес сервера для синхронизации. По умолчанию `https://api.atuin.sh`.
+
+```
+sync_address = "https://api.atuin.sh"
+```
+
+### `sync_frequency`
+
+Как часто клиент синхронизируется с сервером. Может быть указано в
+понятном для человека формате. Например, `10s`, `20m`, `1h`, и т.д.
+По умолчанию `1h`
+
+Если стоит значение 0, Autin будет синхронизироваться после каждой выполненной команды.
+Помните, что сервера могут иметь ограничение на количество отправленных запросов.
+
+```
+sync_frequency = "1h"
+```
+
+### `db_path`
+
+Путь до базы данных SQlite. По умолчанию это
+`~/.local/share/atuin/history.db`.
+
+```
+db_path = "~/.history.db"
+```
+
+### `key_path`
+
+Путь до ключа шифрования Autin. По умолчанию,
+`~/.local/share/atuin/key`.
+
+```
+key = "~/.atuin-key"
+```
+
+### `session_path`
+
+Путь до серверного файла сессии Autin. По умолчанию,
+`~/.local/share/atuin/session`. На самом деле это просто API токен.
+
+```
+key = "~/.atuin-session"
+```
+
+### `search_mode`
+
+Определяет, какой режим поиска будет использоваться. Autin поддерживает "prefix",
+текст целиком (fulltext) и неточный ("fuzzy") поиск. Режим "prefix" производит
+поиск по "запрос\*", "fulltext" по "\*запрос\*", и "fuzzy" использует
+[вот такой](#fuzzy-search-syntax) синтаксис.
+
+По умолчанию стоит значение "prefix"
+
+### `filter_mode`
+
+Фильтр, по-умолчанию использующийся для поиска
+
+| Столбец 1 | Столбец 2 |
+|------------------|----------------------------------------------------------|
+| global (default) | Искать историю команд со всех хостов, сессий и каталогов |
+| host | Искать историю команд с этого хоста |
+| session | Искать историю команд этой сессии |
+| directory | Искать историю команд, выполненных в текущей папке |
+
+Режимы поиска могут быть изменены через ctrl-r
+
+
+```
+search_mode = "fulltext"
+```
+
+#### fuzzy search syntax
+
+Режим поиска "fuzzy" основан на
+[fzf search syntax](https://github.com/junegunn/fzf#search-syntax).
+
+| Токен | Тип совпадений | Описание |
+|-----------|----------------------------|-------------------------------------|
+| `sbtrkt` | fuzzy-match | Всё, что совпадает с `sbtrkt` |
+| `'wild` | exact-match (В кавычках) | Всё, что включает в себя `wild` |
+| `^music` | prefix-exact-match | Всё, что начинается с `music` |
+| `.mp3$` | suffix-exact-match | Всё, что заканчивается на `.mp3` |
+| `!fire` | inverse-exact-match | Всё, что не включает в себя `fire` |
+| `!^music` | inverse-prefix-exact-match | Всё, что не начинается с `music` |
+| `!.mp3$` | inverse-suffix-exact-match | Всё, что не заканчивается на `.mp3` |
+
+Знак вертикальной черты означает логическое ИЛИ. Например, запрос ниже вернет
+всё, что начинается с `core` и заканчивается либо на `go`, либо на `rb`, либо на `py`.
+
+```
+^core go$ | rb$ | py$
+```
+
+## Серверная конфигурация
+
+`// TODO`
diff --git a/docs/ru/import_ru.md b/docs/ru/import_ru.md
new file mode 100644
index 00000000..993d89b8
--- /dev/null
+++ b/docs/ru/import_ru.md
@@ -0,0 +1,27 @@
+# `atuin import`
+
+Autin может импортировать историю из "старого" файла истории
+
+`atuin import auto` предпринимает попытку определить тип командного интерфейса
+(через \$SHELL) и запускает нужный скрипт импорта.
+
+К сожалению, эти файлы содержат не так много информации, как Autin, так что не
+все функции будут доступны с импортированными данными.
+
+# zsh
+
+```
+atuin import zsh
+```
+
+Если у вас есть HISTFILE, то эта команда должна сработать. Иначе, попробуйте
+
+```
+HISTFILE=/path/to/history/file atuin import zsh
+```
+
+Этот параметр поддерживает как и упрощённый, так и полный формат.
+
+# bash
+
+TODO
diff --git a/docs/ru/key-binding_ru.md b/docs/ru/key-binding_ru.md
new file mode 100644
index 00000000..487d34b9
--- /dev/null
+++ b/docs/ru/key-binding_ru.md
@@ -0,0 +1,39 @@
+# Key binding
+
+По умолчанию, Autin будет переназначать Ctrl-r и клавишу 'стрелка вверх'.
+Если вы не хотите этого, установите параметр ATUIN_NOBIND прежде чем вызывать `atuin init`
+
+Например,
+
+```
+export ATUIN_NOBIND="true"
+eval "$(atuin init zsh)"
+```
+
+Таким образом вы можете разрешить переназначение клавиш Autin, если это необходимо.
+Делайте это до инициализирующего вызова.
+
+# zsh
+
+Autin устанавливает виджет ZLE "\_atuin_search_widget"
+
+```
+export ATUIN_NOBIND="true"
+eval "$(atuin init zsh)"
+
+bindkey '^r' _atuin_search_widget
+
+# зависит от режима терминала
+bindkey '^[[A' _atuin_search_widget
+bindkey '^[OA' _atuin_search_widget
+```
+
+# bash
+
+```
+export ATUIN_NOBIND="true"
+eval "$(atuin init bash)"
+
+# Переопределите ctrl-r, и любые другие сочетания горячих клавиш тут
+bind -x '"\C-r": __atuin_history'
+```
diff --git a/docs/ru/list_ru.md b/docs/ru/list_ru.md
new file mode 100644
index 00000000..38c0f7b4
--- /dev/null
+++ b/docs/ru/list_ru.md
@@ -0,0 +1,11 @@
+# Вывад истории на экран
+
+```
+atuin history list
+```
+
+| Аргумент | Описание |
+|----------------|--------------------------------------------------------------------------------|
+| `--cwd/-c` | Каталог, историю команд которой необходимо вывести (по умолчанию все каталоги) |
+| `--session/-s` | Выводит историю команд только текущей сессии (по умолчанию false) |
+| `--human/-h` | Читаемый формат для времени и периодов времени (по умолчанию false) |
diff --git a/docs/ru/search_ru.md b/docs/ru/search_ru.md
new file mode 100644
index 00000000..0219c12a
--- /dev/null
+++ b/docs/ru/search_ru.md
@@ -0,0 +1,39 @@
+# `atuin search`
+
+```
+atuin search
+```
+
+Поиск в Atuin также поддерживает wildcards со знаками `*` или `%`.
+По умолчанию, должен быть указан префикс (т.е. все запросы автоматически дополняются wildcard -ами)
+
+
+| Аргумент | Описание |
+|--------------------|---------------------------------------------------------------------------------------------|
+| `--cwd/-c` | Каталог, для которого отображается история (по умолчанию, все каталоги)) |
+| `--exclude-cwd` | Исключить команды которые запускались в этом каталоге (по умолчанию none) |
+| `--exit/-e` | Фильтровать по exit code (по умолчанию none) |
+| `--exclude-exit` | Исключить команды, которые завершились с указанным значением (по умолчанию none) |
+| `--before` | Включить только команды, которые были запущены до указанного времени (по умолчанию none) |
+| `--after` | Включить только команды, которые были запущены после указанного времени (по умолчанию none) |
+| `--interactive/-i` | Открыть интерактивный поисковой графический интерфейс (по умолчанию false) |
+| `--human/-h` | Использовать читаемое формавтирование для времени и периодов времени (по умолчанию false) |
+
+## Примеры
+
+```
+# Начать интерактивный поиск с текстовым пользовательским интерфейсом
+atuin search -i
+
+# Начать интерактивный поиск с текстовым пользовательским интерфейсом и уже введённым запросом
+atuin search -i atuin
+
+# Искать по всем командам, начиная с cargo, которые успешно завершились
+atuin search --exit 0 cargo
+
+# Искать по всем командам которые завершились ошибками и были вызваны в текущей папке и были запущены до первого апреля 2021
+atuin search --exclude-exit 0 --before 01/04/2021 --cwd .
+
+# Искать по всем командам, начиная с cargo, которые успешно завершились и были запущены после трёх часо дня вчера
+atuin search --exit 0 --after "yesterday 3pm" cargo
+```
diff --git a/docs/ru/server_ru.md b/docs/ru/server_ru.md
new file mode 100644
index 00000000..25b45abf
--- /dev/null
+++ b/docs/ru/server_ru.md
@@ -0,0 +1,160 @@
+# `atuin server`
+
+Autin позволяет запустить свой собственный сервер синхронизации, если вы
+не хотите использовать мой :)
+
+Здесь есть только одна субкоманда, `atuin server start`, которая запустит
+Autin http-сервер синхронизации
+
+```
+USAGE:
+ atuin server start [OPTIONS]
+
+FLAGS:
+ --help Prints help information
+ -V, --version Prints version information
+
+OPTIONS:
+ -h, --host
+ -p, --port
+```
+
+## config
+
+Серверная конфигурация лежит отдельно от файла пользовательсокй, даже если
+это один и тот же бинарный файл. Серверная конфигурация лежит в `~/.config/atuin/server.toml`.
+
+Этот файл выглядит как-то так:
+
+```toml
+host = "0.0.0.0"
+port = 8888
+open_registration = true
+db_uri="postgres://user:password@hostname/database"
+```
+
+Конфигурация так же может находииться в переменных окружения.
+
+```sh
+ATUIN_HOST="0.0.0.0"
+ATUIN_PORT=8888
+ATUIN_OPEN_REGISTRATION=true
+ATUIN_DB_URI="postgres://user:password@hostname/database"
+```
+
+### host
+
+Адрес хоста, который будет прослушиваться сервером Autin
+
+По умолчанию это `127.0.0.1`.
+
+### post
+
+POST, который будет прослушиваться сервером Autin.
+
+По умолчанию это `8888`.
+
+### open_registration
+
+Если `true`, autin будет разрешать регистрацию новых пользователей.
+Установите флаг `false`, если после создания вашего аккаута вы не хотите, чтобы другие
+могли пользоваться вашим сервером.
+
+По умолчанию `false`.
+
+### db_uri
+
+Действующий URI postgres, где будет сохранён аккаунт пользователя и история.
+
+## Docker
+
+Поддерживается образ Docker чтобы сделать проще развертывание сервера в контейнере.
+
+```sh
+docker run -d -v "$USER/.config/atuin:/config" ghcr.io/ellie/atuin:latest server start
+```
+
+## Docker Compose
+
+Использование вашего собственного docker-образа с хостингом вашего собственного Autin может быть реализовано через
+файл docker-compose.
+
+Создайте файл `.env` рядом с `docker-compode.yml` с содержанием наподобие этому:
+
+```
+ATUIN_DB_USERNAME=atuin
+# Choose your own secure password
+ATUIN_DB_PASSWORD=really-insecure
+```
+
+Создайте `docker-compose.yml`:
+
+```yaml
+version: '3.5'
+services:
+ atuin:
+ restart: always
+ image: ghcr.io/ellie/atuin:main
+ command: server start
+ volumes:
+ - "./config:/config"
+ links:
+ - postgresql:db
+ ports:
+ - 8888:8888
+ environment:
+ ATUIN_HOST: "0.0.0.0"
+ ATUIN_OPEN_REGISTRATION: "true"
+ ATUIN_DB_URI: postgres://$ATUIN_DB_USERNAME:$ATUIN_DB_PASSWORD@db/atuin
+ postgresql:
+ image: postgres:14
+ restart: unless-stopped
+ volumes: # Don't remove permanent storage for index database files!
+ - "./database:/var/lib/postgresql/data/"
+ environment:
+ POSTGRES_USER: $ATUIN_DB_USERNAME
+ POSTGRES_PASSWORD: $ATUIN_DB_PASSWORD
+ POSTGRES_DB: atuin
+```
+
+Запустите службы с помощью `docker-compose`:
+
+```sh
+docker-compose up -d
+```
+
+### Использование systemd для управления сервером Autin
+
+`systemd` юнит чтобы управлять службами, контролируемыми `docker-compose`:
+
+```
+[Unit]
+Description=Docker Compose Atuin Service
+Requires=docker.service
+After=docker.service
+
+[Service]
+# Where the docker-compose file is located
+WorkingDirectory=/srv/atuin-server
+ExecStart=/usr/bin/docker-compose up
+ExecStop=/usr/bin/docker-compose down
+TimeoutStartSec=0
+Restart=on-failure
+StartLimitBurst=3
+
+[Install]
+WantedBy=multi-user.target
+```
+
+Включите и запустите службу командой:
+
+```sh
+systemctl enable --now atuin
+```
+
+Проверьте, работает ли:
+
+```sh
+systemctl status atuin
+```
+
diff --git a/docs/ru/shell-completions_ru.md b/docs/ru/shell-completions_ru.md
new file mode 100644
index 00000000..56fb1602
--- /dev/null
+++ b/docs/ru/shell-completions_ru.md
@@ -0,0 +1,20 @@
+# `atuin gen-completions`
+
+[Shell completions](https://en.wikipedia.org/wiki/Command-line_completion) для Atuin
+могут бять сгенерированы путём указания каталога для вывода и желаемого shell через субкомманду `gen-completions`.
+
+```
+$ atuin gen-completions --shell bash --out-dir $HOME
+
+Shell completion for BASH is generated in "/home/user"
+```
+
+Возможные команды для аргумента `--shell`могут быть следующими:
+
+- `bash`
+- `fish`
+- `zsh`
+- `powershell`
+- `elvish`
+
+Также рекомендуем прочитать [supported shells](./../../README.md#supported-shells).
diff --git a/docs/ru/stats_ru.md b/docs/ru/stats_ru.md
new file mode 100644
index 00000000..842ad71b
--- /dev/null
+++ b/docs/ru/stats_ru.md
@@ -0,0 +1,40 @@
+# `atuin stats`
+
+Atuin также может выводить статистику, основанную на истории. Пока что в очень простом виде,
+но скоро должно появиться больше возможностей.
+
+Статистика выводится пока только на английском
+Statistics in english only
+# TODO
+
+```
+$ 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
+```
+
+Также, может быть выведена статистика всей известной Autin истории:
+
+```
+$ atuin stats all
+
++---------------------+-------+
+| Statistic | Value |
++---------------------+-------+
+| Most used command | ls |
++---------------------+-------+
+| Commands ran | 8190 |
++---------------------+-------+
+| Unique commands ran | 2996 |
++---------------------+-------+
+```
diff --git a/docs/ru/sync_ru.md b/docs/ru/sync_ru.md
new file mode 100644
index 00000000..faa661d4
--- /dev/null
+++ b/docs/ru/sync_ru.md
@@ -0,0 +1,60 @@
+# `atuin sync`
+
+Autin может сделать резервную копию вашей истории на сервер чтобы обеспечить использование
+разными компьютерами одной и той же истории. Вся история будет зашифрована двусторонним шифрованием,
+так что сервер _никогда_ не получит ваши данные!
+
+Можно сделать свой сервер (запустив `atuin server start`, об этом написано в других
+файлах документациии), но у меня есть свой https://api.atuin.sh. Это серверный адрес по умолчанию,
+который может быть изменён в [конфигурации](config_ru.md). Опять же, я _не_ могу получить ваши данные
+и они мне не нужны.
+
+## Частота синхронизации
+
+Синхронизация будет происходить автоматически, если обратное не было указано в конфигурации.
+Отконфигурировать сей параметр можно в [config](config_ru.md)
+
+## Синхронизация
+
+Синхронизироваться также можно вручную, используя команду `atuin sync`
+
+## Регистрация
+
+Можно зарегистрировать аккаунт для синхронизации:
+
+```
+atuin register -u -e -p
+```
+
+Имена пользователей должны быть уникальны, и электронная почта должна использваться
+только для срочных уведомлений (изменения политик, нарушения безопасности и т.д.)
+
+Псоле регистрации, вы уже сразу вошли в свой аккаунт :) С этого момента синхронизация
+будет проходить автоматически
+
+## Ключ
+
+Поскольку все данные шифруются, Autin при работе сгенерирует ваш ключ. Он будет сохранён в
+каталоге с данными Autin (`~/.local/share/atuin` на системах с GNU/Linux)
+
+Также можно сделать это самим:
+
+```
+atuin key
+```
+
+Никогда не передавайте никому этот ключ!
+
+## Вход
+
+Если вы хотите войти с другого компьютера, вам потребуется ключ безопасности (`atuin key`).
+
+```
+atuin login -u -p -k
+```
+
+## Выход
+
+```
+atuin logout
+```