id = "goku"
name = "Goku"
homepage = "https://github.com/yqrashawn/GokuRakuJoudo"
description = "Goku is a tool that lets you manage your Karabiner configuration with ease."
executables = ["goku", "gokuw"]
platforms = ["macos"]
[dotfiles]
paths = ["[configHome]/karabiner.edn"]
exclude = []
secret = []
side_effect = false
[commands]
format = 1
label = "Generate Karabiner config"
description = "Compile karabiner.edn into Karabiner-Elements' karabiner.json once, or preview the result. The gokuw watcher and the -l log option are left out."
quality = "ai-draft"
parser = { end_of_options = "--", interleave = "permute", long_equals = true, short_attached = true, short_bundles = true }
[[commands.source]]
id = "source"
kind = "help"
url = "https://github.com/yqrashawn/GokuRakuJoudo/blob/HEAD/src/karabiner_configurator/core.clj"
revision = "2026-10-27"
evidence = """
(def cli-opts
[["-h" "--help"]
["-V" "--version"]
["-l" "--log"]
[nil "--where-is-my-config"]
["-c" "--config PATH" "Config PATH"
["-d" "--dry-run"]
["-A" "--dry-run-all"]])
`goku`: Will update karabiner.json once.
"""
[[commands.field]]
id = "config"
label = "Config file"
description = "Use this karabiner.edn instead of the default (GOKU_EDN_CONFIG_FILE or ~/.config/karabiner.edn)."
type = "path"
option = ["--config", "-c"]
path = { kind = "file", role = "input", must_exist = true }
sources = ["source"]
[[commands.field]]
id = "dry_run"
label = "Dry run"
description = "Show what would be written without changing karabiner.json."
type = "boolean"
option = ["--dry-run", "-d"]
sources = ["source"]
[[commands.field]]
id = "dry_run_all"
label = "Dry run (all profiles)"
type = "boolean"
option = ["--dry-run-all", "-A"]
sources = ["source"]
[[commands.field]]
id = "where"
label = "Show config location"
description = "Print which karabiner.edn goku would read."
type = "boolean"
option = ["--where-is-my-config"]
sources = ["source"]
[[commands.field]]
id = "version"
label = "Show version"
type = "boolean"
option = ["--version", "-V"]
sources = ["source"]
[[commands.task]]
id = "apply"
label = "Apply karabiner.edn"
fields = ["config"]
required = []
[[commands.task]]
id = "preview"
label = "Preview without writing"
set = { dry_run = [true] }
lock = ["dry_run"]
fields = ["config", "dry_run"]
required = []
[[commands.group]]
id = "basic"
label = "Basic"
fields = ["config", "dry_run", "dry_run_all", "where", "version"]