id = "sake" name = "sake" homepage = "https://sakecli.com" description = "sake is a command runner for local and remote hosts." # The project's own mark, from its home page. icon = "https://sakecli.com/img/logo.svg" executables = ["sake"] [dotfiles] # There are several unrelated tools called `sake`; this entry is alajmo/sake, # the Go task runner documented at sakecli.com, which is the one on the # binary-name list. Its docs/config.md "Files" section: sake "will import (if # found) a config file from: Linux: $XDG_CONFIG_HOME/sake/config.yaml or # $HOME/.config/sake/config.yaml if $XDG_CONFIG_HOME is not set". The macOS and # Windows spellings come from the code rather than that sentence, which is # stale: getUserConfigFile() in core/dao/config.go takes Go's # os.UserConfigDir() — ~/.config, ~/Library/Application Support, %APPDATA%, # which is [appData] — joins "sake", and tries config.yaml then config.yml. The # project's own sake.yaml belongs to the repository, not here. paths = [ "[appData]/sake/config.yaml", "[appData]/sake/config.yml", ] exclude = [] # The user config is servers, tasks, themes and specs. Only the per-server # password is a credential, and it is lifted out below. secret = [] # Read once when a sake command starts. side_effect = false # docs/config.md documents a per-server `password`: "Set password. Accepts # either a string or a shell command". Both names are listed: config.yml is the # same file under the other extension sake accepts, which the sibling check # cannot see from the name, so it goes here by hand. [[dotfiles.secret_paths]] file = [ "[appData]/sake/config.yaml", "[appData]/sake/config.yml", ] match = { key_path = ["servers.*.password"] } # `identity_file` is the path to a private key as it sits on this machine, and # `known_hosts_file` is documented as defaulting to "$HOME/.ssh/known_hosts" — # both are absolute once written out. The servers, tasks and themes around them # are what the user wants carried everywhere. # Both name this machine's own key material and trust file, which the user # needs back to rebuild the box and which mean nothing on another. [[dotfiles.machine_lines]] file = [ "[appData]/sake/config.yaml", "[appData]/sake/config.yml", ] match = { key_path = ["servers.*.identity_file", "known_hosts_file"] } scope = "backup" [commands] format = 1 label = "sake" description = "Run or list SakeApp commands." quality = "ai-draft" base = "fig:sake" 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/sake.ts" license = "MIT" [[commands.subcommand]] path = ["run"] label = "Run command" description = "Run a command defined in the SakeApp." [[commands.subcommand.source]] id = "fig" kind = "completion" url = "https://github.com/withfig/autocomplete/blob/master/src/sake.ts" license = "MIT" [[commands.subcommand.field]] id = "command" label = "Command" type = "string" position = 0 sources = ["fig"] [[commands.subcommand.field]] id = "config_path" label = "Config file" type = "path" option = ["--config-path", "-c"] path = { kind = "file", role = "input" } sources = ["fig"] [[commands.subcommand.field]] id = "sake_app_path" label = "SakeApp package" type = "path" option = ["--sake-app-path", "-s"] path = { kind = "directory", role = "input" } sources = ["fig"] [[commands.subcommand.field]] id = "case" label = "Case converting strategy" type = "enum" option = ["--case-converting-strategy"] choices = [{ value = "keepOriginal", label = "keepOriginal" }, { value = "toSnakeCase", label = "toSnakeCase" }, { value = "toKebabCase", label = "toKebabCase" }] sources = ["fig"] [[commands.subcommand.field]] id = "prebuilt" label = "Prebuilt SakeApp binary" type = "path" option = ["--sake-app-prebuilt-binary-path", "-b"] path = { kind = "file", role = "input" } sources = ["fig"] [[commands.subcommand.task]] id = "run" label = "Run" fields = ["command"] required = ["command"] [[commands.subcommand.group]] id = "basic" label = "Basic" fields = ["command"] [[commands.subcommand.group]] id = "advanced" label = "Advanced" fields = ["config_path", "sake_app_path", "case", "prebuilt"] [[commands.subcommand]] path = ["list"] label = "List commands" description = "List commands defined in the SakeApp." [[commands.subcommand.source]] id = "fig" kind = "completion" url = "https://github.com/withfig/autocomplete/blob/master/src/sake.ts" license = "MIT" [[commands.subcommand.field]] id = "json" label = "JSON output" type = "boolean" option = ["--json", "-j"] sources = ["fig"] [[commands.subcommand.field]] id = "config_path" label = "Config file" type = "path" option = ["--config-path", "-c"] path = { kind = "file", role = "input" } sources = ["fig"] [[commands.subcommand.field]] id = "sake_app_path" label = "SakeApp package" type = "path" option = ["--sake-app-path", "-s"] path = { kind = "directory", role = "input" } sources = ["fig"] [[commands.subcommand.field]] id = "case" label = "Case converting strategy" type = "enum" option = ["--case-converting-strategy"] choices = [{ value = "keepOriginal", label = "keepOriginal" }, { value = "toSnakeCase", label = "toSnakeCase" }, { value = "toKebabCase", label = "toKebabCase" }] sources = ["fig"] [[commands.subcommand.field]] id = "prebuilt" label = "Prebuilt SakeApp binary" type = "path" option = ["--sake-app-prebuilt-binary-path", "-b"] path = { kind = "file", role = "input" } sources = ["fig"] [[commands.subcommand.task]] id = "list" label = "List" fields = ["json"] [[commands.subcommand.group]] id = "basic" label = "Basic" fields = ["json"] [[commands.subcommand.group]] id = "advanced" label = "Advanced" fields = ["config_path", "sake_app_path", "case", "prebuilt"]