This is a collection of dotfiles and scripts for my bspwm setup
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

134 lines
2.8 KiB

#compdef dotfiles.sh
typeset -A opt_args
# Argument definition
# ------------------------------------------
_dotfiles_operations=(
{-F-,--file}'[display all files added to the dotfiles directory]'
{-P-,--package}'[instal, print or store packages]'
'(-)'{-h,--help}'[display usage message and exit]'
)
_dotfiles_file_options=(
'(-F --file)'{-F,--file}
'(-a --add)'{-a,--add}'[add selected file paths to the dotfiles directory]'
'(-l --pull)'{-l,--pull}'[pull file(s) from the system to the dotfiles directory]'
'(-s --push)'{-s,--push}'[push file(s) from the dotfiles directory to the system]'
)
_dotfiles_package_options=(
'(-P --package)'{-P,--package}
'(-a --aur-install)'{-a,--aur-install}'[install all AUR packages of the stored list]'
'(-i --install)'{-i,--install}'[install all official packages of the stored list]'
'(-s --store)'{-s,--store}'[stores a list of all installed packages on the system]'
)
_dotfiles_dotfile_directory_target=(
'*:file:_files'
)
_dotfiles_home_directory_target=(
'*:file:_files -W ~/'
)
# Argument handling
# ------------------------------------------
function _dotfiles_file_argument_handling()
{
case "$tmp" in
-*)
_arguments -s : "$_dotfiles_file_options[@]" && result=0
;;
*)
# Enable matching of dotfiles without explicitly specifying the dot
setopt globdots
case "$args" in
*a*)
_arguments -s : "$_dotfiles_home_directory_target[@]" && result=0
;;
*)
_arguments -s : "$_dotfiles_dotfile_directory_target[@]" && result=0
;;
esac
;;
esac
}
function _dotfiles_package_argument_handling()
{
case "$tmp" in
-*)
_arguments -s : "$_dotfiles_package_options[@]" && result=0
;;
*)
case "$args" in
P)
_arguments -s : '*:package:_dotfiles_completions_tracked_packages' && result=0
;;
*)
;;
esac
;;
esac
}
if ! zmodload -s zsh/mapfile; then
function _dotfiles_completions_tracked_packages() {}
else
function _dotfiles_completions_tracked_packages()
{
local -a packages
packages=( "${(f@)${mapfile[packages]%$'\n'}}" )
readonly packages
compadd "$@" -a packages
}
fi
# Completion control flow
# ------------------------------------------
_dotfiles.sh()
{
local result=1
local -a args
local tmp
# Get all short flags
args=( ${${${(M)words:#-*}#-}:#-*} )
# Get the current flag
tmp="$words[-1]"
case "$args" in
h*)
_message -e arguments "no more arguments"
;;
F*)
_dotfiles_file_argument_handling
;;
P*)
_dotfiles_package_argument_handling
;;
*)
case ${(M)words:#--*} in
*--file*)
_dotfiles_file_argument_handling
;;
*--package*)
_dotfiles_package_argument_handling
;;
*)
_arguments -s : "$_dotfiles_operations[@]" && result=0
;;
esac
;;
esac
return result
}
_dotfiles.sh