mirror of
https://github.com/sbrow/envr.git
synced 2025-12-29 23:47:39 -05:00
Compare commits
8 Commits
847ca621ad
...
94a572306a
| Author | SHA1 | Date | |
|---|---|---|---|
| 94a572306a | |||
| f9f1462499 | |||
| ba452069de | |||
| faa8587302 | |||
| 480f3ca234 | |||
| ddd862b6c8 | |||
| bb53e57d06 | |||
| 25777db5e4 |
4
README.md
Normal file
4
README.md
Normal file
@@ -0,0 +1,4 @@
|
||||
## TODOS
|
||||
|
||||
- [ ] `envr sync` - Restore missing .env files, and update backed up ones.
|
||||
- [ ] `envr scan` - Search for missing / moved .env files.
|
||||
@@ -1,12 +1,14 @@
|
||||
#!/usr/bin/env nu
|
||||
|
||||
use std assert;
|
||||
|
||||
# Manage your .env files with ease
|
||||
def main [] {
|
||||
help main
|
||||
export def envr [] {
|
||||
help envr
|
||||
}
|
||||
|
||||
# Import a .env file into envr
|
||||
def "main import" [
|
||||
export def "envr backup" [
|
||||
file: path
|
||||
] {
|
||||
cd (dirname $file);
|
||||
@@ -31,10 +33,10 @@ def "main import" [
|
||||
|
||||
close db
|
||||
|
||||
$"file '($file)' imported successfull!"
|
||||
$"file '($file)' backed up!"
|
||||
}
|
||||
|
||||
const db_path = '/home/spencer/.envr/data.age'
|
||||
const db_path = '~/.envr/data.age'
|
||||
|
||||
# Create or load the database
|
||||
def "open db" [] {
|
||||
@@ -43,7 +45,8 @@ def "open db" [] {
|
||||
} else {
|
||||
# Open the db
|
||||
let dec = mktemp -p ~/.envr;
|
||||
age -d -i ((main config show).priv_key | path expand) $db_path | save -f $dec
|
||||
let priv_key = ((envr config show).priv_key | path expand);
|
||||
age -d -i $priv_key ($db_path | path expand) | save -f $dec
|
||||
stor import -f $dec
|
||||
rm $dec
|
||||
}
|
||||
@@ -62,7 +65,7 @@ def "create-db" []: nothing -> any {
|
||||
, contents text not null
|
||||
);'
|
||||
|
||||
let pub_key = ((main config show).pub_key | path expand);
|
||||
let pub_key = ((envr config show).pub_key | path expand);
|
||||
age -R $pub_key $dec | save -f $db_path
|
||||
|
||||
stor import -f $dec
|
||||
@@ -75,12 +78,60 @@ def "close db" [] {
|
||||
stor export --file-name $dec;
|
||||
|
||||
# Encrypt the file
|
||||
let pub_key = ((main config show).pub_key | path expand);
|
||||
let pub_key = ((envr config show).pub_key | path expand);
|
||||
age -R $pub_key $dec | save -f $db_path
|
||||
|
||||
rm $dec
|
||||
}
|
||||
|
||||
# Restore a .env file from backup.
|
||||
export def "envr restore" [
|
||||
path?: path # The path of the file to restore. Will be prompted if left blank.
|
||||
]: nothing -> string {
|
||||
let files = (files)
|
||||
let $path = if ($path | is-empty) {
|
||||
(
|
||||
$files
|
||||
| select path dir remotes
|
||||
| input list -f "Please select a file to restore"
|
||||
| get path
|
||||
)
|
||||
} else {
|
||||
$path
|
||||
}
|
||||
|
||||
let file = ($files | where path == $path | first);
|
||||
assert ($file | is-not-empty) "File must be found"
|
||||
|
||||
let response = if (($path | path type) == 'file') {
|
||||
if (open --raw $file.path | hash sha256 | $in == $file.sha256) {
|
||||
# File matches
|
||||
$'(ansi yellow)file is already up to date.(ansi reset)';
|
||||
} else {
|
||||
# File exists, but doesn't match
|
||||
let continue = (
|
||||
[No Yes]
|
||||
| input list $"File '($path)' already exists, are you sure you want to overwrite it?"
|
||||
| $in == 'Yes'
|
||||
);
|
||||
|
||||
if ($continue) {
|
||||
null
|
||||
} else {
|
||||
$'(ansi yellow)No action was taken(ansi reset)'
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
if ($response | is-empty) {
|
||||
# File should be restored
|
||||
$file.contents | save -f $path
|
||||
return $'(ansi green)($path) restored!(ansi reset)'
|
||||
} else {
|
||||
return $response
|
||||
}
|
||||
}
|
||||
|
||||
# Supported config formats
|
||||
const available_formats = [
|
||||
json
|
||||
@@ -92,7 +143,7 @@ const available_formats = [
|
||||
]
|
||||
|
||||
# Create your initial config
|
||||
def "main config init" [
|
||||
export def "envr config init" [
|
||||
format?: string
|
||||
#identity?: path
|
||||
] {
|
||||
@@ -117,23 +168,27 @@ def "main config init" [
|
||||
}
|
||||
|
||||
# View your tracked files
|
||||
def "main list" [] {
|
||||
export def "envr list" [] {
|
||||
(files | reject contents)
|
||||
}
|
||||
|
||||
# List all the files in the database
|
||||
def files [] {
|
||||
(
|
||||
open db
|
||||
| query db 'select * from envr_env_files'
|
||||
| update remotes { from json }
|
||||
| reject contents
|
||||
)
|
||||
}
|
||||
|
||||
# Update your env backups
|
||||
def "main sync" [] {
|
||||
export def "envr sync" [] {
|
||||
'TODO:'
|
||||
}
|
||||
|
||||
# Edit your config
|
||||
def "main config edit" [] {
|
||||
'TODO:'
|
||||
export def "envr config edit" [] {
|
||||
^$env.EDITOR (config-file)
|
||||
}
|
||||
|
||||
def "config-file" []: [nothing -> path nothing -> nothing] {
|
||||
@@ -141,6 +196,6 @@ def "config-file" []: [nothing -> path nothing -> nothing] {
|
||||
}
|
||||
|
||||
# show your current config
|
||||
def "main config show" []: nothing -> record<source: path, priv_key: path, pub_key: path> {
|
||||
export def "envr config show" []: nothing -> record<source: path, priv_key: path, pub_key: path> {
|
||||
open (config-file)
|
||||
}
|
||||
Reference in New Issue
Block a user