diff --git a/roles/distrobox/files/_distrobox b/roles/distrobox/files/_distrobox new file mode 100644 index 0000000..a8264f4 --- /dev/null +++ b/roles/distrobox/files/_distrobox @@ -0,0 +1,100 @@ +#compdef distrobox + +_distrobox() { + local context curcontext="$curcontext" state line ret=1 + typeset -A opt_args + + _arguments -C \ + '(-h --help)'{-h,--help}'[show help]' \ + '(-V --version)'{-V,--version}'[show version]' \ + '1: :->command' \ + '*:: :->arguments' + + case $state in; + (command) + local commands; + commands=( + 'create:create the distrobox' + 'enter:enter the distrobox' + 'export:application and service exporting' + 'list:list containers' + 'rm:remove containers' + 'stop:stop containers' + ) + _describe -t commands 'distrobox command' commands "$@" \ + && ret=0 ;; + + (arguments) + case $line[1] in + (create) + _arguments \ + '(-h --help)'{-h,--help}'[show this message]' \ + '(-v --verbose)'{-v,--verbose}'[show more verbosity]' \ + '(-V --version)'{-V,--version}'[show version]' \ + '(-i --image)'{-i,--image}'[image to use for the container]: :' \ + '(-n --name)'{-n,--name}'[name for the distrobox]: :' \ + '(-H --home)'{-H,--home}'[select a custom HOME directory for the container]: :' \ + '*--volume[additional volumes to add to the container]: :_directories' \ + '(-a --additional-flags)'{-a,--additional-flags}'[additional flags to pass to the container manager command]: :' \ + '(-I --init)'{-I,--init}'[use init system (like systemd) inside the container]: :' \ + '(-d --dry-run)'{-d,--dry-run}'[only print the container manager command generated]' \ + && ret=0 ;; + + (enter) + _arguments -S \ + '(-h --help)'{-h,--help}'[show this message]' \ + '(-v --verbose)'{-v,--verbose}'[show more verbosity]' \ + '(-V --version)'{-V,--version}'[show version]' \ + '(-n --name)'{-n,--name}'[name for the distrobox]: :' \ + '(-T --no-tty)'{-T,--no-tty}'[do not instantiate a tty]' \ + '(-a --additional-flags)'{-a,--additional-flags}'[additional flags to pass to the container manager command]: :' \ + '(-d --dry-run)'{-d,--dry-run}'[only print the container manager command generated]' \ + '(-e --)'{-e,--}'[end arguments execute the rest as command to execute at login]:*:' \ + && ret=0 ;; + + (export) + _arguments -S \ + '(-h --help)'{-h,--help}'[show this message]' \ + '(-v --verbose)'{-v,--verbose}'[show more verbosity]' \ + '(-V --version)'{-V,--version}'[show version]' \ + '(-a --app)'{-a,--app}'[name of the application to export]: :' \ + '(-b --bin)'{-b,--bin}'[absolute path of the binary to export]: :' \ + '(-s --service)'{-s,--service}'[name of the service to export]: :' \ + '(-d --delete)'{-d,--delete}'[delete exported application or service]: :' \ + '(-el --export-label)'{-el,--export-label}'[label to add to exported application name]: :' \ + '(-ep --export-path)'{-ep,--export-path}'[path where to export the binary]: :' \ + '(-ef --extra-flags)'{-ef,--export-flags}'[extra flags to add to the command]: :' \ + '(-S --sudo)'{-S,--sudo}'[specify if the exported item should be run as sudo]' \ + && ret=0 ;; + + (list) + _arguments -S \ + '(-h --help)'{-h,--help}'[show this message]' \ + '(-v --verbose)'{-v,--verbose}'[show more verbosity]' \ + '(-V --version)'{-V,--version}'[show version]' \ + && ret=0 ;; + + (rm) + _arguments -S \ + '(-h --help)'{-h,--help}'[show this message]' \ + '(-v --verbose)'{-v,--verbose}'[show more verbosity]' \ + '(-V --version)'{-V,--version}'[show version]' \ + '(-n --name)'{-n,--name}'[name for the distrobox]: :' \ + '(-f --force)'{-f,--force}'[force deletion]' \ + && ret=0 ;; + + (stop) + _arguments -S \ + '(-h --help)'{-h,--help}'[show this message]' \ + '(-v --verbose)'{-v,--verbose}'[show more verbosity]' \ + '(-V --version)'{-V,--version}'[show version]' \ + '(-n --name)'{-n,--name}'[name for the distrobox]: :' \ + '(-Y --yes)'{-Y,--yes}'[non-interactive, stop without asking]' \ + && ret=0 ;; + esac ;; + esac + + return $ret +} + +_distrobox "$@" diff --git a/roles/distrobox/tasks/main.yaml b/roles/distrobox/tasks/main.yaml new file mode 100644 index 0000000..8a7cb5c --- /dev/null +++ b/roles/distrobox/tasks/main.yaml @@ -0,0 +1,15 @@ +--- +- name: install apt package + when: ansible_distribution == "Debian" and + ansible_distribution_version == "unstable" + become: true + apt: + name: distrobox + state: latest + +- name: install distrobox zsh completions + when: ansible_distribution == "Debian" and + ansible_distribution_version == "unstable" + copy: + src: _distrobox + dest: '{{ansible_env.HOME}}/.local/share/zsh/site-functions/_distrobox'