Compare commits

...

6 Commits

Author SHA1 Message Date
Shohei YOSHIDA 1c3a5cd238
Merge f240565bf4 into 8a994c20d7 2026-01-22 19:43:28 +00:00
Shohei YOSHIDA 8a994c20d7
Merge pull request #1215 from zsh-users/update-qmk
Update qmk completion to version 1.2.0
2026-01-21 18:23:28 +09:00
Shohei YOSHIDA 672ae69366
Merge pull request #1216 from zsh-users/update-node-js
Update node.js completion to version 25.4.0
2026-01-21 15:32:50 +09:00
Shohei YOSHIDA 7288768da6
Update node.js completion to version 25.4.0 2026-01-20 12:29:26 +09:00
Shohei YOSHIDA 1ba992dcde
Update qmk completion to version 1.2.0 2026-01-19 17:40:18 +09:00
Shohei YOSHIDA f240565bf4
add openvpn-install completion 2025-12-23 23:41:59 +09:00
3 changed files with 406 additions and 5 deletions

View File

@ -28,7 +28,7 @@
# Description # Description
# ----------- # -----------
# #
# Completion script for Node.js v25.0.0 (https://nodejs.org) # Completion script for Node.js v25.4.0 (https://nodejs.org)
# #
# ------------------------------------------------------------------------------ # ------------------------------------------------------------------------------
# Authors # Authors
@ -156,7 +156,6 @@ _node() {
'--no-experimental-detect-module[when ambiguous modules fail to evaluate, try again to evaluate them as ES modules]' \ '--no-experimental-detect-module[when ambiguous modules fail to evaluate, try again to evaluate them as ES modules]' \
'--no-experimental-global-navigator[expose experimental Navigator API on the global scope]' \ '--no-experimental-global-navigator[expose experimental Navigator API on the global scope]' \
'--no-experimental-repl-await[disable experimental await keyword support in REPL]' \ '--no-experimental-repl-await[disable experimental await keyword support in REPL]' \
'--no-experimental-require-module[allow loading synchronous ES Modules in require()]' \
'--no-experimental-sqlite[disable experimental node sqlite module]' \ '--no-experimental-sqlite[disable experimental node sqlite module]' \
'--no-experimental-strip-types[disable experimental type-stripping for TypeScript files]' \ '--no-experimental-strip-types[disable experimental type-stripping for TypeScript files]' \
'--no-experimental-websocket[experimental WebSocket API (currently set)]' \ '--no-experimental-websocket[experimental WebSocket API (currently set)]' \
@ -164,6 +163,7 @@ _node() {
'--no-force-async-hooks-checks[disable checks for async_hooks]' \ '--no-force-async-hooks-checks[disable checks for async_hooks]' \
'--no-global-search-paths[disable global module search paths]' \ '--no-global-search-paths[disable global module search paths]' \
'--no-network-family-autoselection[disable network address family autodetection algorithm]' \ '--no-network-family-autoselection[disable network address family autodetection algorithm]' \
'(--require-module --no-require-module)--no-require-module[disable support for loading a synchronous ES module graph in require()]' \
'--no-warnings[silence all process warnings]' \ '--no-warnings[silence all process warnings]' \
'--no-webstorage[disable Web Storage API]' \ '--no-webstorage[disable Web Storage API]' \
'--node-memory-debug[run with extra debug checks for memory leaks in Node.js itself]' \ '--node-memory-debug[run with extra debug checks for memory leaks in Node.js itself]' \
@ -185,6 +185,7 @@ _node() {
'--report-on-signal=[generate diagnostic report upon receiving signals]' \ '--report-on-signal=[generate diagnostic report upon receiving signals]' \
'--report-signal=[causes diagnostic report to be produced on provided signal]:signals:_signals -s' \ '--report-signal=[causes diagnostic report to be produced on provided signal]:signals:_signals -s' \
'--report-uncaught-exception[generate diagnostic report on uncaught exceptions]' \ '--report-uncaught-exception[generate diagnostic report on uncaught exceptions]' \
'(--require-module --no-require-module)--require-module[support for loading a synchronous ES module graph in require()]' \
'*'{-r,--require}'[module to preload (option can be repeated)]: :_node_files' \ '*'{-r,--require}'[module to preload (option can be repeated)]: :_node_files' \
'--run=[run a script specified in package.json]:script:_node_scripts' \ '--run=[run a script specified in package.json]:script:_node_scripts' \
'--secure-heap=[total size of the OpenSSL secure heap]: :number' \ '--secure-heap=[total size of the OpenSSL secure heap]: :number' \

233
src/_openvpn-install Normal file
View File

@ -0,0 +1,233 @@
#compdef openvpn-install openvpn-install.sh
# ------------------------------------------------------------------------------
# Copyright (c) 2025 Github zsh-users - https://github.com/zsh-users
#
# Permission is hereby granted, free of charge, to any person obtaining
# a copy of this software and associated documentation files (the
# "Software"), to deal in the Software without restriction, including
# without limitation the rights to use, copy, modify, merge, publish,
# distribute, sublicense, and/or sell copies of the Software, and to
# permit persons to whom the Software is furnished to do so, subject to
# the following conditions:
#
# The above copyright notice and this permission notice shall be included
# in all copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
# OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
# THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
# OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
# ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
# OTHER DEALINGS IN THE SOFTWARE.
# ------------------------------------------------------------------------------
# Description
# -----------
#
# Completion script for openvpn-install (https://github.com/angristan/openvpn-install)
#
# ------------------------------------------------------------------------------
# Authors
# -------
#
# * Shohei Yoshida (https://github.com/syohex) <syohex@gmail.com>
#
# ------------------------------------------------------------------------------
_openvpn_install() {
typeset -A opt_args
local context state line
local curcontext="$curcontext"
local ret=1
_arguments -C \
'--verbose[show detailed output]' \
'(--log --no-log)--log[log file path]:file:_files' \
'(--log --no-log)--no-log[disable file logging]' \
'--no-color[disable colored output]' \
'(- *)'{-h,--help}'[show help]' \
'1: :_openvpn_install_commands' \
'*:: :->args' \
&& ret=0;
case "$state" in
(args)
case $words[1] in
(install)
local -a dns_providers=(
system unbound cloudflare quad9 quad9-uncensored
fdn dnswatch opendns google yandex adguard nextdns custom
)
local -a ciphers=(
AES-128-GCM AES-192-GCM AES-256-GCM AES-128-CBC
AES-192-CBC AES-256-CBC CHACHA20-POLY1305
)
_arguments \
'(-i --interactive)'{-i,--interactive}'[run interactive install wizard]' \
'--endpoint[public IP or hostname for clients]:host_or_ip' \
'--endpoint-type[endpoint IP version(default: 4)]:version:(4 6)' \
'--ip[server listening IP]:addr' \
'(--client-ipv4 --no-client-ipv4)--client-ipv4[enable IPv4 for VPN clients]' \
'(--client-ipv4 --no-client-ipv4)--no-client-ipv4[disable IPv4 for VPN clients]' \
'(--client-ipv6 --no-client-ipv6)--client-ipv6[enable IPv6 for VPN clients]' \
'(--client-ipv6 --no-client-ipv6)--no-client-ipv6[disable IPv6 for VPN clients]' \
'--subnet-ipv4[IPv4 VPN subnet(default: 10.8.0.0)]:subnet' \
'--subnet-ipv6[IPv6 VPN subnet(default: fd42:42:42:42::)]:subnet' \
'(--port --port-random)--port[OpenVPN port]:port' \
'(--port --port-random)--port-random[use random port(49152-65535)]:port' \
'--protocol[UDP or TCP(default: udp)]:proto:(udp tcp)' \
'--mtu[tunnel MTU(default: 1500)]:size' \
'--dns[DNS provider(default: cloudflare)]:provider:(($dns_providers))' \
'--dns-primary[custom primary DNS]:ip' \
'--dns-secondary[custom secondary DNS]:ip' \
'--cipher[data channel cipher(default: AES-128-GCM)]:cipher:(($ciphers))' \
'--cert-type[certificate type(default: ecdsa)]:type:(ecdsa rsa)' \
'--cert-curve[ECDSA curve(default: prime256v1)]:curve:(prime256v1 secp384r1 secp521r1)' \
'--rsa-bits[RSA key size(default: 2048)]:size:(2048 3072 4096)' \
'--cc-cipher[control channel cipher]:cipher' \
'--tls-version-min[minimum TLS version(default: 1.2)]:min_ver:(1.2 1.3)' \
'--tls-ciphersuites[TLS 1.3 cipher suites, colon-separated]:list' \
'--tls-groups[key exchange groups, colon-separated]:list' \
'--hmac[HMAC algorithm(default: SHA256)]:alg:(SHA256 SHA384 SHA512)' \
'--tls-sig[TLS mode(default: crypt-v2)]:mode:(crypt-v2 crypt auth)' \
'--server-cert-days[server cert validity in days(default: 3650)]:days' \
'--multi-client[allow same cert on multiple devices]' \
'--client[initial client name(default: client)]:name' \
'--client-password[password-protect client]:password' \
'--client-cert-days[client cert validity in days(default: 3650)]:days' \
'--no-client[skip initial client creation]' \
&& ret=0
;;
(uninstall)
_arguments \
'(-f --force)'{-f,--force}'[skip confirmation prompt]' \
&& ret=0
;;
(client)
_openvpn_install_client && ret=0
;;
(server)
_openvpn_install_server && ret=0
;;
esac
esac
return ret
}
_openvpn_install_commands() {
local -a commands=(
'install:Install and configure OpenVPN server'
'uninstall:Remove OpenVPN server'
'client:Manage client certificates'
'server:Server management'
'interactive:Launch interactive menu'
)
_describe -t 'commands' 'commands' commands
}
_openvpn_install_client() {
local ret=1
_arguments -C \
'(- *)'{-h,--help}'[Print this usage information]' \
'1: :_openvpn_install_client_commands' \
'*:: :->args' \
&& ret=0
case $state in
(args)
case $words[1] in
(add)
_arguments \
'--password[password-protect client]:password' \
'--cert-days[certificate validity in days(default: 3650)]:days' \
'--output[output path for .ovpn file(default: ~/<name>.ovpn)]:file:_files' \
'1:name' \
&& ret=0
;;
(list)
_arguments \
'--format[output format(default: table)]:format:(table json)' \
&& ret=0
;;
(revoke)
_arguments \
'(-f --force)'{-f,--force}'[skip confirmation/warning]' \
&& ret=0
;;
(renew)
_arguments \
'--cert-days[new certificate validity in days(default: 3650)]:days' \
&& ret=0
;;
esac
;;
esac
return ret
}
_openvpn_install_client_commands() {
local -a commands=(
'add:add a new client'
'list:list all clients'
'revoke:revoke a client certificate'
'renew:renew a client certificate'
)
_describe -t commands 'command' commands "$@"
}
_openvpn_install_server() {
local ret=1
_arguments -C \
'(- *)'{-h,--help}'[Print this usage information]' \
'1: :_openvpn_install_server_commands' \
'*:: :->args' \
&& ret=0
case $state in
(args)
case $words[1] in
(status)
_arguments \
'--format[output format(default: table)]:format:(table json)' \
&& ret=0
;;
(renew)
_arguments \
'--cert-days[new certificate validity in days(default: 3650)]:days' \
'(-f --force)'{-f,--force}'[skip confirmation/warning]' \
&& ret=0
;;
esac
;;
esac
return ret
}
_openvpn_install_server_commands() {
local -a commands=(
'status:list currently connected clients'
'renew:renew server certificate'
)
_describe -t commands 'command' commands "$@"
}
_openvpn_install "$@"
# Local Variables:
# mode: Shell-Script
# sh-indentation: 2
# indent-tabs-mode: nil
# sh-basic-offset: 2
# End:
# vim: ft=zsh sw=2 ts=2 et

173
src/_qmk
View File

@ -29,7 +29,7 @@
# ----------- # -----------
# #
# Completion script for QMK CLI (https://qmk.fm/). # Completion script for QMK CLI (https://qmk.fm/).
# version: 1.1.1 # version: 1.2.0
# #
# ------------------------------------------------------------------------------ # ------------------------------------------------------------------------------
# Authors # Authors
@ -52,7 +52,7 @@ _qmk() {
'--datetime-fmt[Format string for datetimes]:DATETIME_FMT' \ '--datetime-fmt[Format string for datetimes]:DATETIME_FMT' \
'--log-fmt[Format string for printed log output]:LOG_FMT' \ '--log-fmt[Format string for printed log output]:LOG_FMT' \
'--log-file-fmt[Format string for log file.]:LOG_FILE_FMT' \ '--log-file-fmt[Format string for log file.]:LOG_FILE_FMT' \
'--log-file-level[Logging level for log file]:(debug,info,warning,error,critical)' \ '--log-file-level[Logging level for log file]:level:(debug info warning error critical)' \
'--log-file[File to write log messages to]:filename:_files' \ '--log-file[File to write log messages to]:filename:_files' \
'(--no-color --color)--color[Enable color in output]' \ '(--no-color --color)--color[Enable color in output]' \
'(--no-color --color)--no-color[Disable color in output]' \ '(--no-color --color)--no-color[Disable color in output]' \
@ -73,7 +73,7 @@ _qmk() {
;; ;;
esac esac
return $ret return ret
} }
(( $+functions[_qmk_commands] )) || (( $+functions[_qmk_commands] )) ||
@ -91,8 +91,18 @@ _qmk_commands() {
'compile:Compile a QMK Firmware' 'compile:Compile a QMK Firmware'
'doctor:Basic QMK environment checks' 'doctor:Basic QMK environment checks'
'flash:QMK Flash' 'flash:QMK Flash'
'generate-autocorrect-data:Generate the autocorrection data file from a dictionary file'
'generate-compilation-database:Create a compilation database' 'generate-compilation-database:Create a compilation database'
'generate-community-modules-rules-mk:Creates a community_modules_rules_mk from a keymap.json file'
'generate-community-modules-h:Creates a community_modules.h from a keymap.json file'
'generate-community-modules-c:Creates a community_modules.c from a keymap.json file'
'generate-community-modules-introspection-h:Creates a community_modules_introspection.h from a keymap.json file'
'generate-community-modules-introspection-c:Creates a community_modules_introspection.c from a keymap.json file'
'generate-led-matrix-community-modules-inc:Creates an led_matrix_community_modules.inc from a keymap.json file'
'generate-rgb-matrix-community-modules-inc:Creates an rgb_matrix_community_modules.inc from a keymap.json file'
'generate-keymap-h:Creates a keymap.h from a QMK Configurator export.'
'generate-rgb-breathe-table:Generates an RGB Light breathing table header' 'generate-rgb-breathe-table:Generates an RGB Light breathing table header'
'git-submodule:Git Submodule actions'
'import-kbfirmware:Import kbfirmware json export' 'import-kbfirmware:Import kbfirmware json export'
'import-keyboard:Import data driven keyboard' 'import-keyboard:Import data driven keyboard'
'import-keymap:Import data-driven keymap' 'import-keymap:Import data-driven keymap'
@ -107,6 +117,12 @@ _qmk_commands() {
'painter-convert-graphics:Converts an input image to something QMK understands' 'painter-convert-graphics:Converts an input image to something QMK understands'
'painter-make-font-image:Converts an input font to something QMK understands' 'painter-make-font-image:Converts an input font to something QMK understands'
'painter-convert-font-image:Converts an input font image to something QMK firmware understands' 'painter-convert-font-image:Converts an input font image to something QMK firmware understands'
'resolve-alias:Resolve any keyboard_aliases for provided rule'
'userspace-doctor:Checks userspace configuration'
'userspace-add:Adds a build target to userspace "qmk.json"'
'userspace-remove:Removes a build target from userspace "qmk.json"'
'userspace-list:Lists the build targets specified in userspace "qmk.json"'
'userspace-compile:Compiles the build targets specified in userspace "qmk.json"'
'via2json:Convert a VIA backup json to keymap.json format' 'via2json:Convert a VIA backup json to keymap.json format'
) )
@ -235,6 +251,17 @@ _qmk_flash() {
'*: :_files' '*: :_files'
} }
(( $+functions[_qmk_generate-autocorrect-data] )) ||
_qmk_generate-autocorrect-data() {
_arguments \
'(- *)'{-h,--help}'[show help message and exit]' \
'(-q --quiet)'{-q,--quiet}'[Quiet mode, only output error message]' \
'(-o --output)'{-o,--output}'[File to write to]:file:_files' \
'(-km --keymap)'{-km,--keymap}'[The keymap to build a firmware for]:keymap' \
'(-kb --keyboard)'{-kb,--keyboard}'[The keyboard to build a firmware for]:keyboard' \
'*: :_files'
}
(( $+functions[_qmk_generate-compilation-database] )) || (( $+functions[_qmk_generate-compilation-database] )) ||
_qmk_generate-compilation-database() { _qmk_generate-compilation-database() {
_arguments \ _arguments \
@ -243,6 +270,86 @@ _qmk_generate-compilation-database() {
'(-kb --keyboard)'{-kb,--keyboard}'[The keyboard to build a firmware for]:keyboard' '(-kb --keyboard)'{-kb,--keyboard}'[The keyboard to build a firmware for]:keyboard'
} }
(( $+functions[_qmk_generate-community-modules-rules-mk] )) ||
_qmk_generate-community-modules-rules-mk() {
_arguments \
'(- *)'{-h,--help}'[show help message and exit]' \
'(-kb --keyboard)'{-kb,--keyboard}'[The keyboard to build a firmware for]:keyboard' \
'(-e --escape)'{-e,--escape}'[Escape spaces in quiet mode]' \
'(-q --quiet)'{-q,--quiet}'[Quiet mode, only output error message]' \
'(-o --output)'{-o,--output}'[File to write to]:file:_files' \
'*: :_files'
}
(( $+functions[_qmk_generate-community-modules-h] )) ||
_qmk_generate-community-modules-h() {
_arguments \
'(- *)'{-h,--help}'[show help message and exit]' \
'(-kb --keyboard)'{-kb,--keyboard}'[The keyboard to build a firmware for]:keyboard' \
'(-q --quiet)'{-q,--quiet}'[Quiet mode, only output error message]' \
'(-o --output)'{-o,--output}'[File to write to]:file:_files' \
'*: :_files'
}
(( $+functions[_qmk_generate-community-modules-c] )) ||
_qmk_generate-community-modules-c() {
_arguments \
'(- *)'{-h,--help}'[show help message and exit]' \
'(-kb --keyboard)'{-kb,--keyboard}'[The keyboard to build a firmware for]:keyboard' \
'(-q --quiet)'{-q,--quiet}'[Quiet mode, only output error message]' \
'(-o --output)'{-o,--output}'[File to write to]:file:_files' \
'*: :_files'
}
(( $+functions[_qmk_generate-community-modules-introspection-h] )) ||
_qmk_generate-community-modules-introspection-h() {
_arguments \
'(- *)'{-h,--help}'[show help message and exit]' \
'(-kb --keyboard)'{-kb,--keyboard}'[The keyboard to build a firmware for]:keyboard' \
'(-q --quiet)'{-q,--quiet}'[Quiet mode, only output error message]' \
'(-o --output)'{-o,--output}'[File to write to]:file:_files' \
'*: :_files'
}
(( $+functions[_qmk_generate-community-modules-introspection-c] )) ||
_qmk_generate-community-modules-introspection-c() {
_arguments \
'(- *)'{-h,--help}'[show help message and exit]' \
'(-kb --keyboard)'{-kb,--keyboard}'[The keyboard to build a firmware for]:keyboard' \
'(-q --quiet)'{-q,--quiet}'[Quiet mode, only output error message]' \
'(-o --output)'{-o,--output}'[File to write to]:file:_files' \
'*: :_files'
}
(( $+functions[_qmk_generate-led-matrix-community-modules-inc] )) ||
_qmk_generate-led-matrix-community-modules-inc() {
_arguments \
'(- *)'{-h,--help}'[show help message and exit]' \
'(-kb --keyboard)'{-kb,--keyboard}'[The keyboard to build a firmware for]:keyboard' \
'(-q --quiet)'{-q,--quiet}'[Quiet mode, only output error message]' \
'(-o --output)'{-o,--output}'[File to write to]:file:_files' \
'*: :_files'
}
(( $+functions[_qmk_generate-rgb-matrix-community-modules-inc] )) ||
_qmk_generate-rgb-matrix-community-modules-inc() {
_arguments \
'(- *)'{-h,--help}'[show help message and exit]' \
'(-kb --keyboard)'{-kb,--keyboard}'[The keyboard to build a firmware for]:keyboard' \
'(-q --quiet)'{-q,--quiet}'[Quiet mode, only output error message]' \
'(-o --output)'{-o,--output}'[File to write to]:file:_files' \
'*: :_files'
}
(( $+functions[_qmk_generate-keymap-h] )) ||
_qmk_generate-keymap-h() {
_arguments \
'(- *)'{-h,--help}'[show help message and exit]' \
'(-q --quiet)'{-q,--quiet}'[Quiet mode, only output error message]' \
'(-o --output)'{-o,--output}'[File to write to]:file:_files' \
'*: :_files'
}
(( $+functions[_qmk_generate-rgb-breathe-table] )) || (( $+functions[_qmk_generate-rgb-breathe-table] )) ||
_qmk_generate-rgb-breathe-table(){ _qmk_generate-rgb-breathe-table(){
_arguments \ _arguments \
@ -253,6 +360,16 @@ _qmk_generate-rgb-breathe-table(){
'(-c --center)'{-c,--center}'[The breathing center value, from 1 to 2.7]:num' '(-c --center)'{-c,--center}'[The breathing center value, from 1 to 2.7]:num'
} }
(( $+functions[_qmk_git-submodule] )) ||
_qmk_git-submodule() {
_arguments \
'(- *)'{-h,--help}'[show help message and exit]' \
'(-f --force)'{-f,--force}'[Flag to remove unexpected directories]' \
'--sync[Shallow clone any missing submodules]' \
'--check[Check if the submodules are dirty, and display a warning if they are]' \
'*: :_files'
}
(( $+functions[_qmk_import-kbfirmware] )) || (( $+functions[_qmk_import-kbfirmware] )) ||
_qmk_import-kbfirmware() { _qmk_import-kbfirmware() {
_arguments \ _arguments \
@ -382,6 +499,56 @@ _qmk_painter-convert-font-image() {
'(-i --input)'{-i,--input}'[Specify input graphic file]: :_files' '(-i --input)'{-i,--input}'[Specify input graphic file]: :_files'
} }
(( $+functions[_qmk_resolve-alias] )) ||
_qmk_resolve-alias() {
_arguments \
'(- *)'{-h,--help}'[show help message and exit]' \
'--allow-unknown[Return original if rule is not a valid keyboard]'
}
(( $+functions[_qmk_userspace-doctor] )) ||
_qmk_userspace-doctor() {
_arguments \
'(- *)'{-h,--help}'[show help message and exit]'
}
(( $+functions[_qmk_userspace-add] )) ||
_qmk_userspace-add() {
_arguments \
'(- *)'{-h,--help}'[show help message and exit]' \
\*{-e,--env}'[Extra variables to set during build]:env' \
'(-km --keymap)'{-km,--keymap}"[The keymap's name]" \
'(-kb --keyboard)'{-kb,--keyboard}"[The keyboard's name]"
}
(( $+functions[_qmk_userspace-remove] )) ||
_qmk_userspace-remove() {
_arguments \
'(- *)'{-h,--help}'[show help message and exit]' \
\*{-e,--env}'[Extra variables to set during build]:env' \
'(-km --keymap)'{-km,--keymap}"[The keymap's name]" \
'(-kb --keyboard)'{-kb,--keyboard}"[The keyboard's name]"
}
(( $+functions[_qmk_userspace-list] )) ||
_qmk_userspace-list() {
_arguments \
'(- *)'{-h,--help}'[show help message and exit]' \
'(-e --expand)'{-e,--expand}'[Expands any use of "all" for either keyboard or keymap]'
}
(( $+functions[_qmk_userspace-compile] )) ||
_qmk_userspace-compile() {
_arguments \
'(- *)'{-h,--help}'[show help message and exit]' \
\*{-e,--env}'[Extra variables to set during build]:env' \
'(-p --print-failures)'{-p,--print-failures}'[Print failed builds]' \
'(-n --dry-run)'{-n,--dry-run}'[Do not actually build, just show the commands to be run]' \
'(-c --clean)'{-c,--clean}'[Remove object files before compiling]' \
'(-j --parallel)'{-j,--parallel}'[Set the number of parallel make jobs, 0 means unlimited]:parallel' \
'(-t --no-temp)'{-t,--no-temp}'[Remove temporary files during build]'
}
(( $+functions[_qmk_via2json] )) || (( $+functions[_qmk_via2json] )) ||
_qmk_via2json() { _qmk_via2json() {
_arguments \ _arguments \