dotfiles/bin/fds-passsuite

61 lines
1.9 KiB
Plaintext
Executable File

#!/usr/bin/env nu
# This script also accepts several environment variables overriding the default
# arguments in each of the subcommand.
#
# * FDS_PASSSUITE_PASSPHRASE_ARGS for passphrase generation.
# * FDS_PASSSUITE_PASSWORD_ARGS for password generation.
# * FDS_PASSSUITE_DICEWARE_ARGS for username generation.
# Generate a passphrase.
def "main passphrase" --wrapped [
...rest: string # Additional arguments to be added to the passphrase generation command.
] {
with-env {
FDS_PASSSUITE_PASSPHRASE_ARGS: ($env.FDS_PASSSUITE_PASSPHRASE_ARGS? | default [ --xkcd --lang en --one-per-line --xkcdnumbers --xkcdcapitalize ])
} {
gopass pwgen ...$env.FDS_PASSSUITE_PASSPHRASE_ARGS ...$rest | head -n1
}
}
# Generate a password.
def "main password" --wrapped [
...rest # Additional arguments to be added to the password generation command.
] {
with-env {
FDS_PASSSUITE_PASSWORD_ARGS: ($env.FDS_PASSSUITE_PASSWORD_ARGS? | default [ --symbols --one-per-line ])
} {
gopass pwgen ...$env.FDS_PASSSUITE_PASSWORD_ARGS ...$rest | head -n1
}
}
# Generate a randomly-generated base64-encoded string.
def "main secret" [] {
dd if=/dev/urandom bs=32 count=1 2>/dev/null | base64
}
# Encode the given string to argon2.
def "main encode-argon2" [
string # The string to be encoded.
] {
$string | argon2 (openssl rand -base64 32) -e -id -k 65540 -t 3 -p 4
}
# Generate a predictable username.
def "main username" --wrapped [
...rest # Additional arguments to be added to the username generation password.
] {
with-env {
FDS_PASSSUITE_DICEWARE_ARGS: ($env.FDS_PASSSUITE_DICEWARE_ARGS? | default [ --specials 0 --num 3 ])
} {
diceware ...$env.FDS_PASSSUITE_DICEWARE_ARGS ...$rest
}
}
# A toolbelt for anything secret-related. It can be used to generate a
# passphrase, password, and encode into several variants.
def "main" [] {
help main | print -e
exit 0
}