id = "shelve" name = "Shelve" homepage = "https://shelve.cloud" description = "Open-source secret and environment management: secure, simple, collaborative, with a CLI and GitHub sync." # The site's own apple-touch-icon, 180x180. icon = "https://shelve.cloud/apple-touch-icon.png" executables = ["shelve"] [dotfiles] # HugoRCD/shelve, packages/cli/src/services/credentials.ts: # const RC_FILENAME = '.shelve' # configPath() = join(process.env.XDG_CONFIG_HOME || join(homedir(), '.config'), RC_FILENAME) # via rc9's readUserConfig/writeUserConfig, whose userConfigDir() is # `process.env.XDG_CONFIG_HOME || resolve(homedir(), ".config")` — the XDG # config directory, [configHome], and not the ~/.config the default happens to # expand to. rc9 writes a flat `key=value` file, one key per line. # # Older releases stored the same config at ~/.shelve (LEGACY_RC_PATH in the # same file). It is not listed: migrateLegacyConfig() moves it once and then # deletes it, and that name is now taken by the cache directory below. paths = ["[configHome]/.shelve"] # packages/cli/src/services/cache.ts: CACHE_DIR = join(homedir(), '.shelve', 'cache'). exclude = ["~/.shelve/cache/"] # The file is not a whole-file secret: email, username and the Shelve instance # `url` are settings a second machine wants. The token is lifted out below. secret = [] # Read per command; the CLI exits when the command finishes. side_effect = false # StoredConfig in credentials.ts is { email, username, url, token, storage }. # The CLI keeps the token in the OS keyring when one is available, and falls # back to this file (storage = 'file') when it is not — on a headless machine # or in a container, that is where the API token lands, in the clear. [[dotfiles.secret_paths]] file = "[configHome]/.shelve" match = { prefix = ["token"] } [commands] format = 1 label = "Shelve CLI" description = "Pull or push environment variables between a Shelve project and a local .env file. Login, project creation and resource generation are left out." quality = "ai-draft" base = "fig:shelve" parser = { end_of_options = "--", interleave = "permute", long_equals = true, short_attached = true, short_bundles = false } [[commands.source]] id = "fig" kind = "completion" url = "https://github.com/withfig/autocomplete/blob/master/src/shelve.ts" license = "MIT" [[commands.subcommand]] path = ["pull"] label = "Pull variables" description = "Pull variables for an environment into the .env file." [[commands.subcommand.source]] id = "fig" kind = "completion" url = "https://github.com/withfig/autocomplete/blob/master/src/shelve.ts" license = "MIT" [[commands.subcommand.field]] id = "env" label = "Environment" type = "string" option = ["--env", "-e"] description = "Specify the environment." sources = ["fig"] [[commands.subcommand.task]] id = "pull" label = "Pull" fields = ["env"] required = [] [[commands.subcommand.group]] id = "basic" label = "Basic" fields = ["env"] [[commands.subcommand]] path = ["push"] label = "Push variables" description = "Push variables for an environment to Shelve." [[commands.subcommand.source]] id = "fig" kind = "completion" url = "https://github.com/withfig/autocomplete/blob/master/src/shelve.ts" license = "MIT" [[commands.subcommand.field]] id = "env" label = "Environment" type = "string" option = ["--env", "-e"] description = "Specify the environment." sources = ["fig"] [[commands.subcommand.task]] id = "push" label = "Push" fields = ["env"] required = [] [[commands.subcommand.group]] id = "basic" label = "Basic" fields = ["env"]