# Direnv

Узнайте, как автоматически загружать переменные окружения в вашей среде разработки.

`direnv` — это инструмент, который автоматически загружает переменные окружения при переходе `cd` в каталог и удаляет их при выходе из этого каталога. В этом руководстве показано, как использовать его вместе с Tuna.

Внимание

Мы не рекомендуем загрузку всех секретов в окружение оболочки таким образом. Однако некоторым разработчикам может понадобиться такая функциональность. Это исключительно руководство по использованию Tuna Secrets с `direnv` и не является рекомендацией данного инструмента или рабочего процесса.

## Требования

* Установите [direnv](https://direnv.net/)
* Совместимая с `direnv` оболочка

## Настройка проекта

Для этого сначала необходимо выполнить команду `tuna secrets setup` в проекте. Убедитесь, что вы выполнили процесс настройки и связали каталог с проектом и конфигурацией.

## Создание файла `.envrc`

В корне каталога проекта создайте файл `.envrc` со следующим содержимым:

подсказка

**Вариант 1** появился позже, так как флаг `env-no-quotes` появился в более поздней версии клиента.

**Вариант 1**

```shell
export <(tuna secrets download --no-file --format env-no-quotes)

```

**Вариант 2**

```shell
set -a
source <(tuna secrets download --no-file --format env)
set +a

```

Команда `set -a` включает автоматический экспорт всех последующих присвоений переменных, а `set +a` отключает эту функцию.

***

После сохранения вы можете получить предупреждение от `direnv`:

```shell
direnv: error /path/to/project/.envrc is blocked. Run `direnv allow` to approve its content

```

По умолчанию `direnv` не будет загружать содержимое файла `.envrc`, пока вы его не подтвердите. Поскольку вы только что создали его, разрешите выполнение командой:

```shell
direnv allow

```

После этого вы увидите сообщение о загрузке переменных окружения:

```shell
direnv: loading /path/to/project/.envrc
direnv: export +YOUR_VARIABLE

```

Когда вы покинете каталог, `direnv` выгрузит переменные:

```shell
direnv: unloading

```

> **Приведенное решение не гарантирует корректную работу со всеми значениями секретов. В частности, могут возникать ошибки с многострочными секретами. Direnv также может некорректно обрабатывать секреты, содержащие символы `?`, `*` и \`\`\`. Также возможны проблемы с другими символами (например, `$` и `#`).**

## Переопределение отдельных переменных

В некоторых случаях может потребоваться локальное переопределение, которое неудобно задавать через [конфигурации](https://tuna.am/docs/secrets.md#%D0%BA%D0%BE%D0%BD%D1%84%D0%B8%D0%B3%D1%83%D1%80%D0%B0%D1%86%D0%B8%D0%B8). В этом случае вы можете изменить файл `.envrc`, чтобы он искал другой файл и, если он существует, подключал его после загрузки секретов из Tuna. Назовем этот файл `.env.local`, и ваш `.envrc` будет выглядеть так:

```shell
set -a
source <(tuna secrets download --no-file --format env)
test -f .env.local && source .env.local
set +a

```

Он будет работать так же, как и прежде, но если файл `.env.local` существует, переменные окружения, определенные в нём, будут иметь приоритет перед загруженными из Tuna.
