#compdef nix _dots_dispatch () { local cmd="$@" local offset=$# CURRENT=$((CURRENT-$offset)) words=($cmd "${words[$((2 + offset)),-1]}") _$cmd } _dots_command_list () { dots | sed '1,/Available commands:/d' | awk '{ print $1 }' } _dots () { local -a commands IFS=$'\n' commands=($(_dots_command_list)) if (( CURRENT == 2 )); then _describe -t commands "dots commands" commands return fi integer ret=1 case ${words[2]} in ch|channel) _dots_dispatch nix-channel ;; b|build) _dots_dispatch nix-build ;; ch|check) _dots_dispatch nix flake check ;; sh|show) _dots_dispatch nix flake show ;; -*) _dots_dispatch nix-env ;; *) _message "Command not found: ${words[2]}" ;; esac return ret } _dots