1
0
mirror of https://github.com/openSUSE/snapper.git synced 2026-02-05 15:46:00 +01:00
Files
snapper/scripts/completion/snapper-completion.zsh
2025-07-04 09:33:00 +02:00

152 lines
5.6 KiB
Bash

#compdef snapper
local options=(
{--quiet,-q}'[Suppress normal output]'
{--verbose,-v}'[Increase verbosity]'
--utc'[Display dates and times in UTC]'
--iso'[Display dates and times in ISO format]'
{--table-style,-t}'[Table style (integer)]:style:({0..11})'
--abbreviate'[Allow to abbreviate table columns]'
--machine-readable'[Set a machine-readable output format]:format:(csv json)'
--csvout --no-headers'[Set CSV output format]'
--jsonout'[Set JSON output format]'
--separator'[Character separator for CSV output format]:separator'
{--config,-c}'[Set name of config to use]:config:('${(f)$(command snapper --csvout --no-headers list-configs --columns config)}')'
--no-dbus'[Operate without DBus]'
{--root,-r}'[Operate on target root (works only without DBus)]: :_dirs'
{--ambit,-a}'[Operate in the specified ambit]:ambit:(auto classic transactional)'
"(- : *)"{--help,-h}'[Prints help information]'
"(- : *)"--version'[Print version and exit]'
)
local subcommands=(
'list-configs:List\ configs'
'create-config:Create\ config'
'delete-config:Delete\ config'
'get-config:Get\ config'
'set-config:Set\ config'
'list:List\ snapshots'
'create:Create\ snapshot'
'modify:Modify\ snapshot'
{delete,remove,rm}':Delete\ snapshot'
'mount:Mount\ snapshot'
'umount:Umount\ snapshot'
'status:Comparing\ snapshots'
'diff:Comparing\ snapshots'
'xadiff:Comparing\ snapshots\ extended\ attributes'
'undochange:Undo\ changes'
'rollback:Rollback'
'setup-quota:Setup\ quota'
'cleanup:Cleanup\ snapshots'
)
_arguments -s -S $options \
": :(($subcommands))" \
"*:: :->option-or-argument"
if [[ $state != option-or-argument ]]; then
return
fi
local curcontext=${curcontext%:*:*}:snapper-$words[1]:
local algorithms=(
'number:Deletes\ old\ snapshots\ when\ a\ certain\ number\ of\ snapshots\ is\ reached'
'timeline:Deletes\ old\ snapshots\ but\ keeps\ a\ number\ of\ hourly,\ daily,\ weekly,\ monthly,\ quarterly\ and\ yearly\ snapshots'
'empty-pre-post:Deletes\ pre/post\ snapshot\ pairs\ with\ empty\ diffs'
)
local type=(single pre post)
local _number=$(command snapper --csvout --no-headers --separator : list --columns number,description)
local number=${(f)_number}
local number_without_current=${${(f)_number}[2,-1]}
case $words[1] in
list-configs)
_arguments -s -S \
'--columns[Columns to show separated by comma]:columns:(config subvolume)'
;;
create-config)
# nixOS doesn't have /usr/share while it has /run/current-system/sw
# other distributions (except Android) have /usr/share or /usr/local/share
_arguments -s -S \
{--fstype,-f}'[Manually set filesystem type]:filesystem:(btrfs ext4 lvm)' \
{--template,-t}"[Name of config template to use]:template:(${$(echo /{usr{/local,},run/current-system/sw}/share/snapper/config-templates/*(N))##*/})" \
":subvolume"
;;
get-config)
_arguments -s -S \
--columns'[Columns to show separated by comma]:columns:(key value)'
;;
set-config)
_arguments -s -S \
":configdata"
;;
list)
_arguments -s -S \
{--type,-t}'[Type of snapshots to list]:type:(($type))' \
--disable-used-space'[Disable showing used space]' \
{--all,-a-configs}'[List snapshots from all accessible configs]' \
--columns'[Columns to show separated by comma]:columns:(config subvolume number default active type date user used-space cleanup description userdata pre-number post-number post-date read-only)'
;;
create)
_arguments -s -S \
{--type,-t}'[Type for snapshot]:type:(($type))' \
--pre-number'[Number of corresponding pre snapshot]:' \
{--print-number,-p}'[Print number of created snapshot]' \
{--description,-d}'[Description for snapshot]:description' \
{--cleanup-algorithm,-c}'[Cleanup algorithm for snapshot]:algorithms:(($algorithms))' \
{--userdata,-u}'[Userdata for snapshot]:userdata' \
--command'[Run command and create pre and post snapshots]: :{_command_names -e}' \
--read-only'[Create read-only snapshot]' \
--read-write'[Create read-write snapshot]' \
--from"[Create a snapshot from the specified snapshot]:number:(($number))"
;;
modify)
_arguments -s -S \
{--description,-d}'[Description for snapshot]:description' \
{--cleanup-algorithm,-c}'[Cleanup algorithm for snapshot]:algorithms:(($algorithms))' \
{--userdata,-u}'[Userdata for snapshot]:userdata' \
": :_files"
;;
(delete|remove|rm))
_arguments -s -S \
{--sync,-s}'[Sync after deletion]' \
"*::number without current:(($number_without_current))"
;;
(u|)mount|xadiff)
_arguments -s -S \
":number:(($number))" \
"*:: :_files"
;;
status)
_arguments -s -S \
{--output,-o}'[Save status to file]: :_files' \
":number:(($number))"
;;
diff)
_arguments -s -S \
{--input,-i}'[Read files to diff from file]: :_files' \
--diff-cmd'[Command used for comparing files]: :{_command_names -e}' \
{--extensions,-x}'[Extra options passed to the diff command]:diff options:_diff'
":number:(($number))" \
"*:: :_files"
;;
undochange)
_arguments -s -S \
{--input,-i}'[Read files for which to undo changes from file]: :_files'
":number:(($number))" \
"*:: :_files"
;;
rollback)
_arguments -s -S \
{--print-number,-p}'[Print number of second created snapshot]' \
{--description,-d}'[Description for snapshot]:description' \
{--cleanup-algorithm,-c}'[Cleanup algorithm for snapshot]:algorithms:(($algorithms))' \
{--userdata,-u}'[Userdata for snapshot]:userdata' \
":number:(($number))"
;;
cleanup)
_arguments -s -S \
--path'[Cleanup all configs affecting path.]: :_files' \
--free-space'[Try to make space available.]:space' \
":algorithms:(($algorithms))"
;;
esac