mirror of
https://git.in.rschanz.org/ryan77627/guix.git
synced 2024-12-26 14:28:15 -05:00
55f6d9e818
Tested with: guix environment --{ad-hoc,pure} zsh guix bash-completion coreutils -- zsh % fpath=(~/guix/etc/completion/zsh $fpath) % autoload -U compinit; compinit * etc/completion/zsh/_guix (_guix_list_available_packages): Remove spaces. Co-authored-by: Tobias Geerinckx-Rice <me@tobias.gr>
663 lines
32 KiB
Text
663 lines
32 KiB
Text
#compdef guix
|
|
#
|
|
# GNU Guix --- Functional package management for GNU
|
|
# Copyright © 2016 Eric Le Bihan <eric.le.bihan.dev@free.fr>
|
|
# Copyright © 2021 Noah Evans <noah@nevans.me>
|
|
# Copyright © 2021 Brice Waegeneire <brice@waegenei.re>
|
|
#
|
|
# This file is part of GNU Guix.
|
|
#
|
|
# GNU Guix is free software; you can redistribute it and/or modify it
|
|
# under the terms of the GNU General Public License as published by
|
|
# the Free Software Foundation; either version 3 of the License, or (at
|
|
# your option) any later version.
|
|
#
|
|
# GNU Guix is distributed in the hope that it will be useful, but
|
|
# WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
# GNU General Public License for more details.
|
|
#
|
|
# You should have received a copy of the GNU General Public License
|
|
# along with GNU Guix. If not, see <http://www.gnu.org/licenses/>.
|
|
|
|
|
|
_guix_caching_policy()
|
|
{
|
|
local -a old_policy
|
|
old_policy=( "$1"(Nmh+24) )
|
|
(( $#old_policy ))
|
|
}
|
|
|
|
_guix_list_actions()
|
|
{
|
|
_guix_actions=( $(guix system --help | sed -n 's/^ \([a-z-]\+\)\s\+.\+/\1/p') )
|
|
}
|
|
|
|
_guix_list_checkers()
|
|
{
|
|
_guix_checkers=( $(guix lint -l | sed -n 's/^- \(.\+\): .\+/\1/p') )
|
|
}
|
|
|
|
_guix_list_graph_types()
|
|
{
|
|
_guix_graph_types=( $(guix graph --list-types | sed -n 's/^ - \(.\+\): .\+/\1/p') )
|
|
}
|
|
|
|
_guix_list_importers()
|
|
{
|
|
_guix_importers=( $(guix import --help | sed -n 's/^\s\+\([a-z]\+\)$/\1/p') )
|
|
}
|
|
|
|
_guix_list_updaters()
|
|
{
|
|
_guix_updaters=( $(guix lint -l | sed -n 's/^- \(.\+\): .\+/\1/p') )
|
|
}
|
|
|
|
_guix_list_available_packages()
|
|
{
|
|
if ( [[ ${+_guix_available_packages} -eq 0 ]] || _cache_invalid GUIX_AVAILABLE_PACKAGES ) \
|
|
&& ! _retrieve_cache GUIX_AVAILABLE_PACKAGES; then
|
|
_guix_available_packages=(${${(f)"$(guix package -A | cut -f1)"}})
|
|
_guix_available_packages=("${_guix_available_packages[@]// /}")
|
|
_store_cache GUIX_AVAILABLE_PACKAGES _guix_available_packages
|
|
fi
|
|
}
|
|
|
|
_guix_list_installed_packages()
|
|
{
|
|
_guix_installed_packages=( $(guix package -I "^${prefix}" | cut -f1) )
|
|
}
|
|
|
|
(( $+functions[_guix_build] )) || _guix_build()
|
|
{
|
|
_arguments \
|
|
{-e,--expression=}'[build the package or derivation EXPR evaluates to]:EXPR' \
|
|
{-f,--file=}'[build the package or derivation that the code within FILE evaluates to]:FILE:_files' \
|
|
{-m,--manifest=}'[build the packages that the manifest given in FILE evaluates to]:FILE:_files' \
|
|
{-S,--source}'[build the packages source derivations]' \
|
|
'--sources=[build source derivations]:TYPE:(package all transitive)' \
|
|
{-s,--system=}'[attempt to build for SYSTEM (e.g. "i686-linux")]:SYSTEM' \
|
|
'--target=[cross-build for TRIPLET (e.g. "armel-linux-gnu")]:TRIPLET' \
|
|
{-d,--derivations}'[return the derivation paths of the given packages]' \
|
|
'--check[rebuild items to check for non-determinism issues]' \
|
|
'--repair[repair the specified items]' \
|
|
{-r,--root=}'[make FILE a symlink to the result, and register it as a GC root]:FILE:_files' \
|
|
{-v,--verbosity=}'[use the given verbosity LEVEL]:LEVEL' \
|
|
{-q,--quiet}'[do not show the build log]' \
|
|
'--log-file[return the log file names for the given derivations]' \
|
|
{-L,--load-path=}'[prepend DIR to the package module search path]:DIR:_files -\' \
|
|
{-K,--keep-failed}'[keep build tree of failed builds]' \
|
|
{-k,--keep-going}'[keep going when some of the derivations fail]' \
|
|
{-n,--dry-run}'[do not build the derivations]' \
|
|
'--fallback[fall back to building when the substituter fails]' \
|
|
'--no-substitutes[build instead of resorting to pre-built substitutes]' \
|
|
'--substitute-urls=[fetch substitute from URLS if they are authorized]:URLS:_urls' \
|
|
'--no-grafts[do not graft packages]' \
|
|
'--no-offload[do not attempt to offload builds]' \
|
|
'--max-silent-time=[mark the build as failed after SECONDS of silence]:SECONDS' \
|
|
'--timeout=[mark the build as failed after SECONDS of activity]:SECONDS' \
|
|
'--rounds=[build N times in a row to detect non-determinism]:N' \
|
|
{-c,--cores=}'[allow the use of up to N CPU cores for the build]:N' \
|
|
{-M,--max-jobs=}'[allow at most N build jobs]:N' \
|
|
'--debug=[produce debugging output at LEVEL]:LEVEL' \
|
|
'--help-transform[list package transformation options not shown here]' \
|
|
{-V,--version}'[display version information and exit]' \
|
|
'*:package:->packages'
|
|
|
|
if [[ "$state" = packages ]]; then
|
|
_guix_list_available_packages
|
|
compadd -a -- _guix_available_packages
|
|
fi
|
|
}
|
|
|
|
(( $+functions[_guix_challenge] )) || _guix_challenge()
|
|
{
|
|
_arguments \
|
|
'--substitute-urls=[compare build results with those at URLS]:URLS:_urls' \
|
|
'--diff=[show differences according to MODE]:MODE' \
|
|
{-v,--verbose}'[show details about successful comparisons]' \
|
|
{-V,--version}'[display version information and exit]' \
|
|
'*:package:->packages'
|
|
|
|
if [[ "$state" = packages ]]; then
|
|
_guix_list_available_packages
|
|
compadd -a -- _guix_available_packages
|
|
fi
|
|
}
|
|
|
|
(( $+functions[_guix_container] )) || _guix_container()
|
|
{
|
|
_arguments \
|
|
':action:(exec)' \
|
|
'*:args'
|
|
}
|
|
|
|
(( $+functions[_guix_download] )) || _guix_download()
|
|
{
|
|
_arguments \
|
|
{-f,--format=}'[write the hash in the given format]:FMT:(nix-base32 base16 base32 hex)' \
|
|
{-H,--hash=}'[use the given hash ALGORITHM]:ALGORITHM' \
|
|
'--no-check-certificate[do not validate the certificate of HTTPS servers ]' \
|
|
{-o,--output=}'[download to FILE]:FILE:_files' \
|
|
{-V,--version}'[display version information and exit]' \
|
|
'1:URL:_urls'
|
|
}
|
|
|
|
(( $+functions[_guix_edit] )) || _guix_edit()
|
|
{
|
|
_guix_list_available_packages
|
|
compadd -a -- _guix_available_packages
|
|
}
|
|
|
|
(( $+functions[_guix_environment] )) || _guix_environment()
|
|
{
|
|
_arguments \
|
|
{-e,--expression=}'[create environment for the package that EXPR evaluates to]:EXPR' \
|
|
{-l,--load=}'[create environment for the package that the code within FILE evaluates to]:FILE:_files' \
|
|
{-m,--manifest=}'[create environment with the manifest from FILE]:FILE:_files' \
|
|
{-p,--profile=}'[create environment from profile at PATH]:PATH:_files -/' \
|
|
'--ad-hoc[include all specified packages in the environment instead of only their inputs]' \
|
|
'--pure[unset existing environment variables]' \
|
|
{-E,--preserve=}'[preserve environment variables that match REGEXP]:REGEXP' \
|
|
'--search-paths[display needed environment variable definitions]' \
|
|
{-s,--system=}'[attempt to build for SYSTEM (e.g. "i686-linux")]:SYSTEM' \
|
|
{-r,--root=}'[make FILE a symlink to the result, and register it as a GC root]:FILE:_files' \
|
|
{-C,--container}'[run command within an isolated container]' \
|
|
{-N,--network}'[allow containers to access the network]' \
|
|
{-P,--link-profile}'[link environment profile to ~/.guix-profile within an isolated container]' \
|
|
{-u,--user=}'[instead of copying the name and home of the current user into an isolated container, use the name USER with home directory /home/USER]:USER:_users' \
|
|
'--no-cwd[do not share current working directory with an isolated container]' \
|
|
'--share=[for containers, share writable host file system according to SPEC]:SPEC' \
|
|
'--expose=[for containers, expose read-only host file system according to SPEC]:SPEC' \
|
|
{-v,--verbosity=}'[use the given verbosity LEVEL]:LEVEL' \
|
|
'--bootstrap[use bootstrap binaries to build the environment]' \
|
|
{-L,--load-path=}'[prepend DIR to the package module search path]:DIR:_files -/' \
|
|
{-K,--keep-failed}'[keep build tree of failed builds]' \
|
|
{-k,--keep-going}'[keep going when some of the derivations fail]' \
|
|
{-n,--dry-run}'[do not build the derivations]' \
|
|
'--fallback[fall back to building when the substituter fails]' \
|
|
'--no-substitutes[build instead of resorting to pre-built substitutes]' \
|
|
'--substitute-urls=[fetch substitute from URLS if they are authorized]:URLS:_urls' \
|
|
'--no-grafts[do not graft packages]' \
|
|
'--no-offload[do not attempt to offload builds]' \
|
|
'--max-silent-time=[mark the build as failed after SECONDS of silence]:SECONDS' \
|
|
'--timeout=[mark the build as failed after SECONDS of activity]:SECONDS' \
|
|
'--rounds=[build N times in a row to detect non-determinism]:N' \
|
|
{-c,--cores=}'[allow the use of up to N CPU cores for the build]:N' \
|
|
{-M,--max-jobs=}'[allow at most N build jobs]:N' \
|
|
'--debug=[produce debugging output at LEVEL]:LEVEL' \
|
|
'--help-transform[list package transformation options not shown here]' \
|
|
{-V,--version}'[display version information and exit]' \
|
|
'*:package:->packages'
|
|
|
|
if [[ "$state" = packages ]]; then
|
|
_guix_list_available_packages
|
|
compadd -a -- _guix_available_packages
|
|
fi
|
|
|
|
}
|
|
|
|
(( $+functions[_guix_gc] )) || _guix_gc()
|
|
{
|
|
_arguments \
|
|
{-C,--collect-garbage=}'[collect at least MIN bytes of garbage]:MIN' \
|
|
{-F,--free-space=}'[attempt to reach FREE available space in the store]:FREE' \
|
|
{-d,--delete-generations=}'[delete profile generations matching PATTERN]:PATTERN' \
|
|
{-D,--delete}'[attempt to delete PATHS]' \
|
|
'--list-roots[list the users GC roots]' \
|
|
'--list-busy[list store items used by running processes]' \
|
|
'--optimize[optimize the store by deduplicating identical files]' \
|
|
'--list-dead[list dead paths]' \
|
|
'--list-live[list live paths]' \
|
|
'--references[list the references of PATHS]' \
|
|
{-R,--requisites}'[list the requisites of PATHS]' \
|
|
'--referrers[list the referrers of PATHS]' \
|
|
'--derivers[list the derivers of PATHS]' \
|
|
'--verify=[verify the integrity of the store]:OPTS:(contents repair)' \
|
|
'--list-failures[list cached build failures]' \
|
|
'--clear-failures[remove PATHS from the set of cached failures]' \
|
|
{-V,--version}'[display version information and exit]:V' \
|
|
'1:PATH:_files -/'
|
|
}
|
|
|
|
(( $+functions[_guix_graph] )) || _guix_graph()
|
|
{
|
|
_arguments \
|
|
{-b,--backend=}'[produce a graph with the given backend TYPE]:TYPE:->types' \
|
|
'--list-backends[list the available graph backends]' \
|
|
{-t,--type=}'[represent nodes of the given TYPE]:TYPE:->types' \
|
|
'--list-types[list the available graph types]' \
|
|
'--path[display the shortest path between the given nodes]' \
|
|
{-e,--expression=}'[consider the package EXPR evaluates to]:EXPR' \
|
|
{-s,--system=}'[consider the graph for SYSTEM (e.g. "i686-linux")]:SYSTEM' \
|
|
{-L,--load-path=}'[prepend DIR to the package module search path]:DIR:_files -/' \
|
|
'--help-transform[list package transformation options not shown here]' \
|
|
{-V,--version}'[display version information and exit]' \
|
|
'1:PACKAGE:->packages'
|
|
|
|
case "$state" in
|
|
types)
|
|
_guix_list_graph_types
|
|
compadd -a -- _guix_graph_types
|
|
;;
|
|
packages)
|
|
_guix_list_available_packages
|
|
compadd -a -- _guix_available_packages
|
|
;;
|
|
esac
|
|
|
|
}
|
|
|
|
(( $+functions[_guix_hash] )) || _guix_hash()
|
|
{
|
|
_arguments \
|
|
{-x,--exclude-vcs}'[exclude version control directories]' \
|
|
{-H,--hash=}'[use the given hash ALGORITHM]:ALGORITHM' \
|
|
{-f,--format=}'[write the hash in the given format]:FMT:(nix-base32 base16 base32 hex)' \
|
|
{-r,--recursive}'[compute the hash on FILE recursively]' \
|
|
{-V,--version}'[display version information and exit]' \
|
|
'1:FILE:_files'
|
|
}
|
|
|
|
(( $+functions[_guix_import] )) || _guix_import()
|
|
{
|
|
_arguments \
|
|
{-V,--version}'[display version information and exit]' \
|
|
'1:IMPORTER:->importer' \
|
|
'*:args:'
|
|
|
|
if [[ "$state" = importer ]]; then
|
|
_guix_list_importers
|
|
compadd -a -- _guix_importers
|
|
fi
|
|
}
|
|
|
|
(( $+functions[_guix_lint] )) || _guix_lint()
|
|
{
|
|
_arguments \
|
|
{-c,--checkers=}'[only run the specified checkers]:CHECKERS:->checkers' \
|
|
{-x,--exclude=}'[exclude the specified checkers]:CHECKERSS:->checkers' \
|
|
{-n,--no-network}'[only run checkers that do not access the network]' \
|
|
{-L,--load-path=}'[prepend DIR to the package module search path]:DIR:_files -/' \
|
|
{-l,--list-checkers}'[display the list of available lint checkers]' \
|
|
{-V,--version}'[display version information and exit]' \
|
|
'1:PACKAGE:->packages'
|
|
|
|
case "$state" in
|
|
checkers)
|
|
_guix_list_checkers
|
|
compadd -a -- _guix_checkers
|
|
;;
|
|
packages)
|
|
_guix_list_available_packages
|
|
compadd -a -- _guix_available_packages
|
|
;;
|
|
esac
|
|
}
|
|
|
|
(( $+functions[_guix_package] )) || _guix_package()
|
|
{
|
|
_arguments \
|
|
{-i,--install}'[install one or more packages]: :->install' \
|
|
{-e,--install-from-expression=}'[install the package EXP evaluates to]:EXP' \
|
|
{-f,--install-from-file=}'[install the package evaluated from FILE]:FILE:_files' \
|
|
{-r,--remove}'[remove one or more packages]: :->remove' \
|
|
{-u,--upgrade=}'[upgrade all the installed packages matching REGEXP]:REGEXP' \
|
|
{-m,--manifest=}'[create a new profile generation from FILE]:FILE:_files' \
|
|
'--do-not-upgrade=[do not upgrade any packages matching REGEXP]:REGEXP' \
|
|
'--roll-back[roll back to the previous generation]' \
|
|
'--search-paths=[display needed environment variable definitions]:KINDS' \
|
|
{-l,--list-generations=}'[list generations matching PATTERN]:PATTERN' \
|
|
{-d,--delete-generations=}'[delete generations matching PATTERN]:PATTERN' \
|
|
{-S,--switch-generation=}'[switch to a generation matching PATTERN]:PATTERN' \
|
|
'--export-manifest[print a manifest for the chosen profile]' \
|
|
'--export-channels[print channels for the chosen profile]' \
|
|
{-p,--profile}'[use PROFILE instead of the default profile]:PROFILE:_files -/' \
|
|
'--list-profiles[list the profiles]' \
|
|
'--allow-collisions[do not treat collisions in the profile as an error]' \
|
|
'--bootstrap[use the bootstrap Guile to build the profile]' \
|
|
{-s,--search=}'[search in synopsis and description using REGEXP]:REGEXP' \
|
|
{-I,--list-installed=}'[list installed packages matching REGEXP]:REGEXP' \
|
|
{-A,--list-available=}'[list available packages matching REGEXP]:REGEXP' \
|
|
'--show=[show details about a package]: :->show' \
|
|
{-L,--load-path=}'[prepend DIR to the package module search path]:DIR:_files -/' \
|
|
{-K,--keep-failed}'[keep build tree of failed builds]' \
|
|
{-k,--keep-going}'[keep going when some of the derivations fail]' \
|
|
{-n,--dry-run}'[do not build the derivations]' \
|
|
'--fallback[fall back to building when the substituter fails]' \
|
|
'--no-substitutes[build instead of resorting to pre-built substitutes]' \
|
|
'--substitute-urls=[fetch substitute from URLS if they are authorized]:URLS:_urls' \
|
|
'--no-grafts[do not graft packages]' \
|
|
'--no-offload[do not attempt to offload builds]' \
|
|
'--max-silent-time=[mark the build as failed after SECONDS of silence]:SECONDS' \
|
|
'--timeout=[mark the build as failed after SECONDS of activity]:SECONDS' \
|
|
'--rounds=[build N times in a row to detect non-determinism]:N' \
|
|
{-c,--cores=}'[allow the use of up to N CPU cores for the build]:N' \
|
|
{-M,--max-jobs=}'[allow at most N build jobs]:N' \
|
|
'--debug=[produce debugging output at LEVEL]' \
|
|
'--help-transform[list package transformation options not shown here]' \
|
|
{-v,--verbosity=}'[use the given verbosity LEVEL]' \
|
|
{-V,--version}'[display version information and exit]'
|
|
|
|
case "$state" in
|
|
install|show)
|
|
_guix_list_available_packages
|
|
compadd -a -- _guix_available_packages
|
|
;;
|
|
remove)
|
|
_guix_list_installed_packages
|
|
compadd -a -- _guix_installed_packages
|
|
;;
|
|
esac
|
|
}
|
|
|
|
(( $+functions[_guix_install] )) || _guix_install()
|
|
{
|
|
_arguments \
|
|
{-p,--profile=}'[use PROFILE instead of the users default profile]:PROFILE:_files -/' \
|
|
{-v,--verbosity=}'[use the given verbosity LEVEL]:LEVEL' \
|
|
{-L,--load-path=}'[prepend DIR to the package module search path]:DIR:_files -/' \
|
|
{-K,--keep-failed}'[keep build tree of failed builds]' \
|
|
{-k,--keep-going}'[keep going when some of the derivations fail]' \
|
|
{-n,--dry-run}'[do not build the derivations]' \
|
|
'--fallback[fall back to building when the substituter fails]' \
|
|
'--no-substitutes[build instead of resorting to pre-built substitutes]' \
|
|
'--substitute-urls=[fetch substitute from URLS if they are authorized]:URLS:_urls' \
|
|
'--no-grafts[do not graft packages]' \
|
|
'--no-offload[do not attempt to offload builds]' \
|
|
'--max-silent-time=[mark the build as failed after SECONDS of silence]:SECONDS' \
|
|
'--timeout=[mark the build as failed after SECONDS of activity]:SECONDS' \
|
|
'--rounds=[build N times in a row to detect non-determinism]:N' \
|
|
{-c,--cores=}'[allow the use of up to N CPU cores for the build]:N' \
|
|
{-M,--max-jobs=}'[allow at most N build jobs]:N' \
|
|
'--debug=[produce debugging output at LEVEL]:LEVEL' \
|
|
'--help-transform[list package transformation options not shown here]' \
|
|
{-V,--version}'[display version information and exit]' \
|
|
'*:package:->packages'
|
|
|
|
if [[ "$state" = packages ]]; then
|
|
_guix_list_available_packages
|
|
compadd -a -- _guix_available_packages
|
|
fi
|
|
}
|
|
|
|
(( $+functions[_guix_remove] )) || _guix_remove()
|
|
{
|
|
_arguments \
|
|
{-p,--profile=}'[use PROFILE instead of the users default profile]:PROFILE:_files -/' \
|
|
{-v,--verbosity=}'[use the given verbosity LEVEL]:LEVEL' \
|
|
{-L,--load-path=}'[prepend DIR to the package module search path]:DIR:_files -/' \
|
|
{-K,--keep-failed}'[keep build tree of failed builds]' \
|
|
{-k,--keep-going}'[keep going when some of the derivations fail]' \
|
|
{-n,--dry-run}'[do not build the derivations]' \
|
|
'--fallback[fall back to building when the substituter fails]' \
|
|
'--no-substitutes[build instead of resorting to pre-built substitutes]' \
|
|
'--substitute-urls=[fetch substitute from URLS if they are authorized]:URLS:_urls' \
|
|
'--no-grafts[do not graft packages]' \
|
|
'--no-offload[do not attempt to offload builds]' \
|
|
'--max-silent-time=[mark the build as failed after SECONDS of silence]:SECONDS' \
|
|
'--timeout=[mark the build as failed after SECONDS of activity]:SECONDS' \
|
|
'--rounds=[build N times in a row to detect non-determinism]:N' \
|
|
{-c,--cores=}'[allow the use of up to N CPU cores for the build]:N' \
|
|
{-M,--max-jobs=}'[allow at most N build jobs]:N' \
|
|
'--debug=[produce debugging output at LEVEL]:LEVEL' \
|
|
{-V,--version}'[display version information and exit]' \
|
|
'*:package:->packages'
|
|
|
|
if [[ "$state" = packages ]]; then
|
|
_guix_list_installed_packages
|
|
compadd -a -- _guix_installed_packages
|
|
fi
|
|
}
|
|
|
|
(( $+functions[_guix_upgrade] )) || _guix_upgrade()
|
|
{
|
|
_arguments \
|
|
{-p,--profile=}'[use PROFILE instead of the users default profile]:PROFILE:_files -/' \
|
|
{-v,--verbosity=}'[use the given verbosity LEVEL]:LEVEL' \
|
|
'--do-not-upgrade=[do not upgrade any packages matching REGEXP]:REGEXP' \
|
|
{-L,--load-path=}'[prepend DIR to the package module search path]:DIR:_files -/' \
|
|
{-K,--keep-failed}'[keep build tree of failed builds]' \
|
|
{-k,--keep-going}'[keep going when some of the derivations fail]' \
|
|
{-n,--dry-run}'[do not build the derivations]' \
|
|
'--fallback[fall back to building when the substituter fails]' \
|
|
'--no-substitutes[build instead of resorting to pre-built substitutes]' \
|
|
'--substitute-urls=[fetch substitute from URLS if they are authorized]:URLS:_urls' \
|
|
'--no-grafts[do not graft packages]' \
|
|
'--no-offload[do not attempt to offload builds]' \
|
|
'--max-silent-time=[mark the build as failed after SECONDS of silence]:SECONDS' \
|
|
'--timeout=[mark the build as failed after SECONDS of activity]:SECONDS' \
|
|
'--rounds=[build N times in a row to detect non-determinism]:N' \
|
|
{-c,--cores=}'[allow the use of up to N CPU cores for the build]:N' \
|
|
{-M,--max-jobs=}'[allow at most N build jobs]:N' \
|
|
'--debug=[produce debugging output at LEVEL]:LEVEL' \
|
|
'--help-transform[list package transformation options not shown here]' \
|
|
{-V,--version}'[display version information and exit]' \
|
|
'*:regexp'
|
|
}
|
|
|
|
(( $+functions[_guix_publish] )) || _guix_publish()
|
|
{
|
|
_arguments \
|
|
{-p,--port=}'[listen on PORT]:PORT' \
|
|
'--listen=[listen on the network interface for HOST]:HOST_hosts' \
|
|
{-u,--user=}'[change privileges to USER as soon as possible]:USER_users' \
|
|
{-a,--advertise}'[advertise on the local network]' \
|
|
{-C,--compression=}'[compress archives with METHOD at LEVEL]:METHOD' \
|
|
{-c,--cache=}'[cache published items to DIRECTORY]:DIRECTORY:_files -/' \
|
|
'--cache-bypass-threshold=[serve store items below SIZE even when not cached]:SIZE' \
|
|
'--workers=[use N workers to bake items]:N' \
|
|
'--ttl=[announce narinfos can be cached for TTL seconds]:TTL' \
|
|
'--negative-ttl=[announce missing narinfos can be cached for TTL seconds]:TTL' \
|
|
'--nar-path=[use PATH as the prefix for nar URLs]:PATH' \
|
|
'--public-key=[use FILE as the public key for signatures]:FILE:_files' \
|
|
'--private-key=[use FILE as the private key for signatures]:FILE:_files' \
|
|
{-r,--repl=}'[spawn REPL server on PORT]:PORT' \
|
|
{-V,--version}'[display version information and exit]' \
|
|
}
|
|
|
|
(( $+functions[_guix_pull] )) || _guix_pull()
|
|
{
|
|
_arguments \
|
|
{-C,--channels=}'[deploy the channels defined in FILE]:FILE:_files' \
|
|
'--url=[download from the Git repository at URL]:URL:_urls' \
|
|
'--commit=[download the specified COMMIT]:COMMIT' \
|
|
'--branch=[download the tip of the specified BRANCH]:BRANCH' \
|
|
'--allow-downgrades[allow downgrades to earlier channel revisions]' \
|
|
'--disable-authentication[disable channel authentication]' \
|
|
{-N,--news}'[display news compared to the previous generation]' \
|
|
{-l,--list-generations=}'[list generations matching PATTERN]:PATTERN' \
|
|
'--roll-back[roll back to the previous generation]' \
|
|
{-d,--delete-generations=}'[delete generations matching PATTERN]:PATTERN' \
|
|
{-S,--switch-generation=}'[switch to a generation matching PATTERN]:PATTERN' \
|
|
{-p,--profile=}'[use PROFILE instead of ~/.config/guix/current]:PROFILE:_files -/' \
|
|
{-v,--verbosity=}'[use the given verbosity LEVEL]:LEVEL' \
|
|
{-s,--system=}'[attempt to build for SYSTEM (e.g. "i686-linux")]:SYSTEM' \
|
|
'--bootstrap[use the bootstrap Guile to build the new Guix]' \
|
|
{-L,--load-path=}'[prepend DIR to the package module search path]:DIR:_files -/' \
|
|
{-K,--keep-failed}'[keep build tree of failed builds]' \
|
|
{-k,--keep-going}'[keep going when some of the derivations fail]' \
|
|
{-n,--dry-run}'[do not build the derivations]' \
|
|
'--fallback[fall back to building when the substituter fails]' \
|
|
'--no-substitutes[build instead of resorting to pre-built substitutes]' \
|
|
'--substitute-urls=[fetch substitute from URLS if they are authorized]:URLS:_urls' \
|
|
'--no-grafts[do not graft packages]' \
|
|
'--no-offload[do not attempt to offload builds]' \
|
|
'--max-silent-time=[mark the build as failed after SECONDS of silence]:SECONDS' \
|
|
'--timeout=[mark the build as failed after SECONDS of activity]:SECONDS' \
|
|
'--rounds=[build N times in a row to detect non-determinism]:N' \
|
|
{-c,--cores=}'[allow the use of up to N CPU cores for the build]:N' \
|
|
{-M,--max-jobs=}'[allow at most N build jobs]:N' \
|
|
'--debug=[produce debugging output at LEVEL]:LEVEL' \
|
|
{-V,--version}'[display version information and exit]'
|
|
}
|
|
|
|
(( $+functions[_guix_refresh] )) || _guix_refresh()
|
|
{
|
|
_arguments \
|
|
{-e,--expression=}'[consider the package EXPR evaluates to]:EXPR' \
|
|
{-u,--update}'[update source files in place]' \
|
|
{-s,--select=}'[select all the packages in SUBSET, one of]:SUBSET:(core non-core)' \
|
|
{-m,--manifest=}'[select all the packages from the manifest in FILE]:FILE:_files' \
|
|
{-t,--type=}'[restrict to updates from the specified updaters]:UPDATER:-.updaters' \
|
|
{-L,--list-updaters}'[list available updaters and exit]' \
|
|
{-l,--list-dependent}'[list top-level dependent packages that would need to be rebuilt as a result of upgrading PACKAGE...]' \
|
|
{-r,--recursive}'[check the PACKAGE and its inputs for upgrades]' \
|
|
'--list-transitive[list all the packages that PACKAGE depends on]' \
|
|
'--keyring=[use FILE as the keyring of upstream OpenPGP keys]:FILE:_files' \
|
|
'--key-server=[use HOST as the OpenPGP key server]:HOST_hosts' \
|
|
'--gpg=[use COMMAND as the GnuPG 2.x command]:COMMAND' \
|
|
'--key-download=[handle missing OpenPGP keys according to POLICY:]:POLICY:(always interactive never)' \
|
|
'--load-path=[prepend DIR to the package module search path]:DIR:_files -/' \
|
|
{-V,--version}'[display version information and exit]' \
|
|
'*:package:->packages'
|
|
|
|
case "$state" in
|
|
updaters)
|
|
_guix_list_updaters
|
|
compadd -a -- _guix_updaters
|
|
;;
|
|
packages)
|
|
_guix_list_available_packages
|
|
compadd -a -- _guix_available_packages
|
|
;;
|
|
esac
|
|
}
|
|
|
|
(( $+functions[_guix_size] )) || _guix_size()
|
|
{
|
|
_arguments \
|
|
'--substitute-urls=[fetch substitute from URLS if they are authorized]:URLS:_urls' \
|
|
{-s,--system=}'[consider packages for SYSTEM (e.g. "i686-linux")]:SYSTEM' \
|
|
'--sort=[sort according to KEY]:KEY:(closure self)' \
|
|
{-m,--map-file=}'[write to FILE a graphical map of disk usage]:FILE:_files' \
|
|
{-L,--load-path=}'[prepend DIR to the package module search path]:DIR:_files -/' \
|
|
{-V,--version}'[display version information and exit]' \
|
|
'*:package:->packages'
|
|
|
|
if [[ "$state" = packages ]]; then
|
|
_guix_list_available_packages
|
|
compadd -a -- _guix_available_packages
|
|
fi
|
|
}
|
|
|
|
(( $+functions[_guix_system] )) || _guix_system()
|
|
{
|
|
_arguments \
|
|
{-L,--load-path=}'[prepend DIR to the package module search path]:DIR:_files -/' \
|
|
{-K,--keep-failed}'[keep build tree of failed builds]' \
|
|
{-k,--keep-going}'[keep going when some of the derivations fail]' \
|
|
{-n,--dry-run}'[do not build the derivations]' \
|
|
'--fallback[fall back to building when the substituter fails]' \
|
|
'--no-substitutes[build instead of resorting to pre-built substitutes]' \
|
|
'--substitute-urls=[fetch substitute from URLS if they are authorized]:URLS:_urls' \
|
|
'--no-grafts[do not graft packages]' \
|
|
'--no-offload[do not attempt to offload builds]' \
|
|
'--max-silent-time=[mark the build as failed after SECONDS of silence]:SECONDS' \
|
|
'--timeout=[mark the build as failed after SECONDS of activity]:SECONDS' \
|
|
'--rounds=[build N times in a row to detect non-determinism]:N' \
|
|
{-c,--cores=}'[allow the use of up to N CPU cores for the build]:N' \
|
|
{-M,--max-jobs=}'[allow at most N build jobs]:N' \
|
|
'--debug=[produce debugging output at LEVEL]:LEVEL' \
|
|
{-d,--derivation}'[return the derivation of the given system]' \
|
|
{-e,--expression=}'[consider the operating-system EXPR evaluates to instead of reading FILE, when applicable]:EXPR' \
|
|
'--allow-downgrades[for reconfigure, allow downgrades to earlier channel revisions]' \
|
|
'--on-error=[apply STRATEGY when an error occurs while reading FILE]:STRATEGY:(nothing-special backtrace debug)' \
|
|
'--list-image-types[list available image types]' \
|
|
{-t,--image-type=}'[for image, produce an image of TYPE]:TYPE' \
|
|
'--image-size=[for image, produce an image of SIZE]:SIZE' \
|
|
'--no-bootloader[for init, do not install a bootloader]' \
|
|
'--volatile[for image, make the root file system volatile]' \
|
|
'--label=[for image, label disk image with LABEL]:LABEL' \
|
|
'--save-provenance[save provenance information]' \
|
|
'--share=[for vm and container, share host file system with read/write access according to SPEC]:SPEC' \
|
|
'--expose=[for vm and container, expose host file system directory as read-only according to SPEC]:SPEC' \
|
|
{-N,--network}'[for container, allow containers to access the network]' \
|
|
{-r,--root=}'[for vm, image, container and build, make FILE a symlink to the result, and register it as a GC root]:FILE:_files' \
|
|
'--full-boot[for vm, make a full boot sequence]' \
|
|
'--skip-checks[skip file system and initrd module safety checks]' \
|
|
'--target=[cross-build for TRIPLET (e.g. "armel-linux-gnu")]:TRIPLET' \
|
|
{-v,--verbosity=}'[use the given verbosity LEVEL]:LEVEL' \
|
|
'--graph-backend=[use BACKEND for extension-graphs and shepherd-graph]:BACKEND' \
|
|
{-V,--version}'[display version information and exit]' \
|
|
'1:action:->actions' \
|
|
'*:file:_files'
|
|
|
|
if [[ "$state" = actions ]]; then
|
|
_guix_list_actions
|
|
compadd -a -- _guix_actions
|
|
fi
|
|
}
|
|
|
|
(( $+functions[_guix_command] )) || _guix_command()
|
|
{
|
|
local -a _guix_cmds
|
|
_guix_cmds=(
|
|
"archive:Export/import one or more packages from/to the store"
|
|
"build:Build a given package"
|
|
"challenge:Challenge the substitutes for a package"
|
|
"container:Build and manipulate Linux containers"
|
|
"copy:Copy store items remotely over SSH"
|
|
"deploy:Deploy operating systems on a set of machines"
|
|
"describe:Describe the channel revisions currently used"
|
|
"download:Download the file at given URL and add it to the store"
|
|
"edit:Edit the definitions of a package"
|
|
"environment:Build an environment with a package and its dependencies"
|
|
"gc:Invoke the garbage collector"
|
|
"git:Operate on Git repositories"
|
|
"graph:Emit a DOT representation of the dependencies of a package"
|
|
"hash:Return the cryptographic hash of a file"
|
|
"import:Run an importer"
|
|
"install:Install packages"
|
|
"lint:Run a set of checkers on a package"
|
|
"offload:Set up and operate build offloading"
|
|
"pack:Create application bundles"
|
|
"package:Install, remove, or upgrade packages"
|
|
"processes:List currently running sessions"
|
|
"publish:Publish /gnu/store over HTTP."
|
|
"pull:Download and deploy the latest version of Guix"
|
|
"refresh:Update package definitions to match the latest version"
|
|
"remove:Remove packages"
|
|
"repl:Read-eval-print loop (REPL) for interactive programming"
|
|
"search:Search for packages"
|
|
"show:Show information about packages"
|
|
"size:Report the size of a package and its dependencies"
|
|
"system:Build the operating system"
|
|
"time-machine:Run commands from a different revision"
|
|
"upgrade:Upgrade packages"
|
|
"weather:Report on the availability of pre-built package binaries"
|
|
)
|
|
|
|
if (( CURRENT == 1 )); then
|
|
_describe -t commands 'guix command' _guix_cmds || compadd "$@"
|
|
else
|
|
local curcontext="$curcontext"
|
|
|
|
cmd="${${_guix_cmds[(r)$words[1]:*]%%:*}}"
|
|
|
|
if (( $#cmd )); then
|
|
local cache_policy
|
|
|
|
zstyle -s ":completion:${curcontext}:" cache-policy cache_policy
|
|
if [[ -z "$cache_policy" ]]; then
|
|
zstyle ":completion:${curcontext}:" cache-policy _guix_caching_policy
|
|
fi
|
|
|
|
curcontext="${curcontext%:*:*}:guix-${cmd}:"
|
|
|
|
_call_function ret _guix_${cmd} || _message 'no more arguments'
|
|
else
|
|
_message "unknown guix command: $words[1]"
|
|
fi
|
|
return ret
|
|
fi
|
|
}
|
|
|
|
_arguments \
|
|
'(--version)--version[Display version information and exit]' \
|
|
'*::guix command:_guix_command'
|
|
|
|
# vim: ts=4 sts=4 sw=4 et ai
|
|
# Local variables:
|
|
# mode: sh
|
|
# End:
|