Files
envr/README.md

135 lines
3.2 KiB
Markdown

# envr - Backup your env files
Have you ever wanted to back up all your .env files in case your hard drive gets
nuked? `envr` makes it easier.
`envr` is a binary application that tracks your `.env` files
in an encyrpted sqlite database. Changes can be effortlessly synced with
`envr sync`, and restored with `envr restore`.
`envr` puts all your .env files in one safe place, so you can back them up with
the tool [of your choosing](#backup-options).
## Features
- 🔐 **Encrypted Storage**: All `.env` files are encrypted using your ssh key and
[age](https://github.com/FiloSottile/age) encryption.
- 🔄 **Automatic Sync**: Update the database with one command, which can easily
be run on a cron.
- 🔍 **Smart Scanning**: Automatically discover and import `.env` files in your
home directory.
-**Interactive CLI**: User-friendly prompts for file selection and management.
- 🗂️ **Rename Detection**: Automatically finds and updates renamed/moved
repositories.
## TODOS
- [x] Rename Detection: automatically update moved files.
- [ ] Allow use of keys from `ssh-agent`
- [x] Allow configuration of ssh key.
- [x] Allow multiple ssh keys.
## Prerequisites
- An SSH key pair (for encryption/decryption)
- The following binaries:
- [fd](https://github.com/sharkdp/fd)
- [git](https://git-scm.com)
## Installation
### With Go
If you already have `go` installed:
```bash
go install github.com/sbrow/envr
envr init
```
### With Nix
If you are a [nix](https://nixos.org/) user
#### Try it out
```bash
nix run github.com:sbrow/envr --
```
#### Install it
```nix
# /etc/nixos/configuration.nix
{ config, envr, system, ... }: {
environment.systemPackages = [
envr.packages.${system}.default
];
}
```
## Quick Start
Check out the [man page](./docs/cli/envr.md) for the quick setup guide.
## Disclaimers
> [!CAUTION]
> Do not lose your SSH key pair! Your backup will be **lost forever**.
## Commands
See [the docs](./docs/cli) for the current list of available commands.
## Configuration
The configuration file is created during initialization:
```jsonc
# Example ~/.envr/config.json
{
"keys": [
{
"private": "/home/ubuntu/.ssh/id_ed25519",
"public": "/home/ubuntu/.ssh/id_ed25519.pub"
}
],
"scan": {
"matcher": "\\.env",
"exclude": "*.envrc",
"include": "~"
}
}
```
## Backup Options
`envr` merely gathers your `.env` files in one local place. It is up to you to
back up the database (found at `~/.envr/data.age`) to a *secure* and *remote*
location.
### Git
`envr` preserves inodes when updating the database, so you can safely hardlink
`~/.envr/data.age` into your [GNU Stow](https://www.gnu.org/software/stow/),
[Home Manager](https://github.com/nix-community/home-manager), or
[NixOS](https://nixos.wiki/wiki/flakes) repository.
> [!CAUTION]
> For **maximum security**, only save your `data.age` file to a local
(i.e. non-cloud) git server that **you personally control**.
>
> I take no responsibility if you push all your secrets to a public GitHub repo.
### restic
[restic](https://restic.readthedocs.io/en/latest/010_introduction.html).
## License
This project is licensed under the [MIT License](./LICENSE).
## Support
For issues, feature requests, or questions, please
[open an issue](https://github.com/sbrow/envr/issues).