diff --git a/.gitmodules b/.gitmodules index 8e1c20e..eeb6cdb 100644 --- a/.gitmodules +++ b/.gitmodules @@ -50,6 +50,3 @@ [submodule "init/Smyck-Color-Scheme"] path = init/Smyck-Color-Scheme url = https://github.com/hukl/Smyck-Color-Scheme.git -[submodule "init/iocage_zsh-completion"] - path = init/iocage_zsh-completion - url = https://github.com/varpon/iocage_zsh-completion.git diff --git a/.zsh/comp/_iocage b/.zsh/comp/_iocage new file mode 100644 index 0000000..fbd9bf0 --- /dev/null +++ b/.zsh/comp/_iocage @@ -0,0 +1,324 @@ +#compdef iocage + +## Written by Clément 'wxcafe' Hertling +## on Oct-15-2017. Feel free to improve on this + +_iocage_list_jails() { + local -a jails + jails=($(iocage list -H | cut -f 2)) + _describe 'jail' jails +} + +_iocage_list_releases() { + local -a releases + releases=($(iocage list -H -b)) + _describe 'release' releases +} +_iocage_list_templates() { + local -a templates + templates=($(iocage list -H -t | cut -f 2)) + _describe 'template' templates +} + +_iocage_list_potential_releases(){ + local -a releases + releases=($(iocage list -R | grep '^\[' | cut -d ' ' -f 2)) + _describe 'release' releases +} + +_iocage_list_jails_or_releases() { + local -a releases jails + releases=($(iocage list -H -b)) + jails=($(iocage list -H | cut -f 2)) + _describe 'jail_or_release' jails -- releases +} + +_iocage_list_zpools() { + zpool list -H | cut -f 1 | while read zpool; do + _wanted 'zpools' expl 'zpools' compadd $zpool + done +} + +_iocage_complete_pkg() { + ((CURRENT=2)) + _normal +} + +_iocage() { + local context state cmds line + typeset -A opt_args + + _arguments -C \ + '(-v --version)'{-v,--version}'[display version information]' \ + '--help[display iocage help text]' \ + '1: :->cmds' \ + '*:: :->args' + + case $state in + cmds) + _values "iocage command" \ + "activate[activate zpool]" \ + "chroot[chroot into a jail]" \ + "clean[destroy zfs datasets]" \ + "clone[clone a jail]" \ + "console[open a shell inside the jail]" \ + "create[deploy a new jail]" \ + "destroy[destroy the specified jail]" \ + "df[show resource usage of all jails]" \ + "exec[execute a command inside specified jail]" \ + "export[exports the specified jail]" \ + "fetch[downloads and/or updates releases]" \ + "fstab[manipulates fstab of a specific jail]" \ + "get[display the specified property]" \ + "import[import a specific jail image]" \ + "list[list the specified dataset type]" \ + "migrate[migrate from iocage-legacy]" \ + "pkg[run pkg commands in the specified jail]" \ + "rename[rename the specified jail]" \ + "restart[restart the specified jail]" \ + "rollback[roll back jail to a snapshot]" \ + "set[set specified properties in desired jail]" \ + "snaplist[list snapshots of a jail]" \ + "snapremove[delete snapshots of the specified jail]" \ + "snapshot[create a zfs snapshot of the specified jail]" \ + "start[start a jail]" \ + "stop[stop a jail]" \ + "update[updates jail to latest patch level]" \ + "upgrade[updates jail from release to release]" + ;; + args) + case $line[1] in + activate) + _arguments \ + :zpool:_iocage_list_zpools + ;; + chroot) + _arguments \ + :jail:_iocage_list_jails + ;; + clean) + _arguments \ + '(-a --all)'{-a,--all}'[destroy all iocage data]' \ + '(-b -r --base)'{-b,-r,--base}'[destroy all fetched RELEASE jails]' \ + '(-f --force)'{-f,--force}'[run without further interaction]' \ + '(-j --jail)'{-j,--jail}'[destroy all created jails]' \ + '(-t --template)'{-t,--template}'[destroy all templates]' + ;; + clone) + _arguments \ + :jail:_iocage_list_jails \ + '(-c --count)'{-c,--count}'[number of jails to create]':count + ;; + create) + _arguments \ + '(-n --name)'{-n,--name}'[provide a name for the new jail]':name \ + '(-b --basejail)'{-b,--basejail}'[create a new basejail]' \ + '(-c --count)'{-c,--count}'[number of jails to create]':count \ + '(-e --empty)'{-e,--empty}'[create an empty jail]' \ + '(-f --force)'{-f,--force}'[skip prompts]' \ + '(-p --pkglist)'{-p,--pkglist}'[JSON list of packages to install]':pkglist:_files \ + '(-r --release)'{-r,--release}'[RELEASE to use for the new jail]:release:_iocage_list_releases' \ + '(-s --short)'{-s,--short}'[use a short UUID (8 chars)]' \ + '(-t --template)'{-t,--template}'[create jail from specified template]:template:_iocage_list_templates' \ + '(-u --uuid)'{-u,--uuid}'[specify a UUID]':uuid + ;; + destroy) + _arguments \ + :jail_or_release:_iocage_list_jails_or_releases \ + '(-R --recursive)'{-r,--recursive}'[skip the destroy children prompt]' \ + '(-d --download)'{-d,--download}'[also destroy specified RELEASE download]' \ + '(-f --force)'{-f,--force}'[skip prompts]' \ + '(-r --release)'{-r,--release}'[destroy a specified RELEASE dataset]' + ;; + df) + _arguments \ + '(-H -h --header)'{-H,-h,--header}'[simple output for scripting]' \ + '(-l --long)'{-l,--long}'[show the full UUID]' \ + '(-s --sort)'{-s,--sort}'[sort the list by the named type]:sort:(( + UUID\:"Jail UUID" + CRT\:"Compression ratio" + RES\:"Reserved space" + QTA\:"Disk quota" + USE\:"Used space" + AVA\:"Available space" + NAME\:"Jail name"))' + ;; + exec) + _arguments \ + :jail:_iocage_list_jails \ + '(-U --jail_user)'{-U,--jail_user}'[user in jail to run command as]':name \ + '(-u --host_user)'{-u,--host_user}'[user on host to run command as]':name:_users + ;; + export) + _arguments \ + :jail:_iocage_list_jails + ;; + fetch) + _arguments \ + "--accept[accept the plugin's LICENCE agreement]" \ + "--noaccept[don't accept the plugin's LICENCE agreement]" \ + '--plugins[list all available plugins for creation]':properties \ + '(-E --eol)'{-e,--eol}'[enable End Of Lofe checking]' \ + '(-F --files)'{-f,--files}'[specify the files to fetch from the mirror]':files \ + '(-NE --noeol)'{-NE,--noeol}'[disable EOL checking]' \ + '(-NU --noupdate)'{-NU,--noupdate}'[disable updating to the latest patch level]' \ + '(-NV --noverify)'{-NV,--noverify}'[disable SSL certificate verification]' \ + '(-P --plugin-file)'{-P,--plugin-file}'[specify which plugin file to use]':file \ + '(-U --update)'{-U,--update}'[update to the latest patch level]' \ + '(-V --verify)'{-V,--verify}'[enable SSL certificate verification]' \ + '(-a --auth)'{-a,--auth}'[specifies HTTP authentication method]:auth:(basic digest)' \ + '(-c --count)'{-c,--count}'[number of jails to create]':count \ + '(-d --root-dir)'{-d,--root-dir}'[specify the directory containing RELEASE files]:root_dir:_files -/' \ + '(-f --file)'{-f,--file}'[use local file directory for the root directory]' \ + '(-h --http)'{-h,--http}'[change -s | --server to use HTTP instead of FTP]' \ + '(-p --password)'{-p,--password}'[add a password if required]':password \ + '(-r --release)'{-r,--release}'[define the FreeBSD release to fetch]':release:_iocage_list_potential_releases \ + '(-s --server)'{-s,--server}'[define which server to use]':server \ + '(-u --user)'{-u,--user}'[define the user]':user:_users + ;; + fstab) + _arguments \ + :jail:_iocage_list_jails \ + '(-H -h --header)'{-H,-h,--header}'[simple output for scripting]' \ + '(-a --add)'{-a,--add}'[adds an entry to the jails fstab and mounts it]' \ + '(-r --remove)'{-r,--remove}'[removes an entry from the jails fstab and unmounts it]' \ + '(-l --list)'{-l,--list}'[lists the jails fstab]' \ + '(-e --edit)'{-e,--edit}'[open the fstab file in EDITOR]' + ;; + get) + _arguments \ + - pool \ + '(-p --pool)'{-p,--pool}'[get the currently activated zpool]' \ + - jails \ + 1:property:'(( + ip4_addr\:"IPv4 address" + ip6_addr\:"IPv6 address" + basejail + release\:"FreeBSD RELEASE jail is running" + comment\:"short comment" + notes\:"longer notes" + defaultrouter\:"IPv4 gateway" + defaultrouter6\:"IPv6 gateway" + dhcp + exec_jail_user\:"user to run commands with" + hostid\:"jail UUID" + owner\:"owner of the jail" + quota\:"disk quota" + all\:"get all properties"))' \ + 2:jail:_iocage_list_jails \ + '(-P --plugin)'{-P,--plugin}'[get the specified key for a plugin jail]' \ + '(-r --recursive)'{-r,--recursive}'[get the specified property for all jails]' \ + '(-H -h --header)'{-H,-h,--header}'[simple output for scripting]' \ + ;; + import) + _arguments \ + :uuid: + ;; + list) + _arguments \ + '--http[changes -R | --remote to use HTTP]' \ + '(-H -h --header)'{-H,-h,--header}'[simple output for scripting]' \ + '(-P --plugins)'{-P,--plugins}'[show available plugins]' \ + '(-R --remote)'{-R,--remote}'[show available RELEASE options for remote]' \ + '(-b -r --base --release)'{-b,-r,--base,--release}'[list all bases]' \ + '(-l --long)'{-l,--long}'[show full UUID and ip4 address]' \ + '(-q --quick)'{-q,--quick}'[list all jails with less fields]' \ + '(-s --sort)'{-s,--sort}'[sorts the list by the given type]':sort:'(( + JID\:"Jail Identifier" + UUID\:"Jail UUID" + STATE\:"Active state of the jail" + NAME\:"User assigned NAME" + RELEASE\:"FreeBSD RELEASE installed on the jail" + IP4\:"IPv4 address" + ))' \ + '(-t --template)'{-t,--template}'[lists all templates]' + ;; + migrate) + _arguments \ + '(-d --delete)'{-d,--delete}'[destroy the old dataset after migration]' \ + '(-f --force)'{-f,--force}'[bypass warnings or user interaction]' + ;; + pkg) + _arguments \ + 1:jail:_iocage_list_jails \ + :subcommands:_iocage_complete_pkg + ;; + rename) + _arguments \ + 1:jail:_iocage_list_jails \ + 2:name: + ;; + restart) + _arguments \ + '(-s --soft)'{-s,--soft}'[restart jail, but keep network stack running]' \ + :jail:_iocage_list_jails + ;; + rollback) + _arguments \ + '(-f --force)'{-f,--force}'[bypass warnings or user interaction]' \ + '(-n --name)'{-n,--name}'[snapshot name]':name::jail:_iocage_list_jails + ;; + set) + _arguments \ + 1:property:'(( + ip4_addr=\:"IPv4 address" + ip6_addr=\:"IPv6 address" + basejail= + release=\:"FreeBSD RELEASE jail is running" + comment=\:"short comment" + notes=\:"longer notes" + defaultrouter=\:"IPv4 gateway" + defaultrouter6=\:"IPv6 gateway" + dhcp= + exec_jail_user=\:"user to run commands with" + owner=\:"owner of the jail" + quota=\:"disk quota"))' \ + 2:jail:_iocage_list_jails \ + '(-P --plugin)'{-p,--plugin}'[set the specified key for a plugin jail]':plugin: + ;; + snaplist) + _arguments \ + '(-H -h --header)'{-H,-h,--header}'[simple output for scripting]' \ + '(-l --long)'{-l,--long}'[show full dataset path]' \ + '(-s --sort)'{-s,--sort}'[sorts the list by the given type]':sort:'(( + NAME\:"snapshot name" + CREATED\:"creation time" + RSIZE\:"referenced size" + USED\:"used space" + ))' \ + :jail:_iocage_list_jails + ;; + snapremove) + _arguments \ + '(-n --name)'{-n,--name}'[snapshot name]':name::jail:_iocage_list_jails + ;; + snapshot) + _arguments \ + '(-n --name)'{-n,--name}'[snapshot name]' \ + :jail:_iocage_list_jails + ;; + start) + _arguments \ + '--rc[start all jails with boot=on in priority order (lower->higher)]' \ + ::jail:_iocage_list_jails + ;; + stop) + _arguments \ + '--rc[stop all jails with boot=on in priority order (higher->lower)]' \ + ::jail:_iocage_list_jails + ;; + update) + _arguments \ + :jail:_iocage_list_jails + ;; + upgrade) + _arguments \ + '(-r --release)'{-r,--release}'[RELEASE to upgrade the jail to]':release:_iocage_list_releases:jail:_iocage_list_jails + ;; + esac + ;; + esac +} + +_iocage "$@" +# vim: ft=zsh sw=2 ts=2 et diff --git a/.zsh/lib/completion.zsh b/.zsh/lib/completion.zsh index 5c7e069..a8a2f53 100644 --- a/.zsh/lib/completion.zsh +++ b/.zsh/lib/completion.zsh @@ -9,7 +9,7 @@ setopt always_to_end WORDCHARS='' zmodload -i zsh/complist -source ~/.zsh/comp/_* +fpath=(~/.zsh/comp/ $fpath) ## case-insensitive (all),partial-word and then substring completion if [ "x$CASE_SENSITIVE" = "xtrue" ]; then diff --git a/init/Smyck-Color-Scheme b/init/Smyck-Color-Scheme index fc16622..c9cedcb 160000 --- a/init/Smyck-Color-Scheme +++ b/init/Smyck-Color-Scheme @@ -1 +1 @@ -Subproject commit fc16622be1bf2366bd0fa5113b49ee2b8261335f +Subproject commit c9cedcba463263ac5cd0433374f5d72799d96142 diff --git a/init/iocage_zsh-completion b/init/iocage_zsh-completion deleted file mode 160000 index bedd0c9..0000000 --- a/init/iocage_zsh-completion +++ /dev/null @@ -1 +0,0 @@ -Subproject commit bedd0c9e8c9673b8399edb3fd1340d0940de77d6