diff --git a/git/.config/zsh/completions/_gitignore b/git/.config/zsh/completions/_gitignore new file mode 100755 index 0000000..b0c319c --- /dev/null +++ b/git/.config/zsh/completions/_gitignore @@ -0,0 +1,15 @@ +#compdef _gitignore gitignore +# +# Requires gitignore script in path +# +# Enables completion for zsh of gitignore function. + +_gitignore_get_command_list() { + curl -sL https://www.gitignore.io/api/list | tr ',' '\n' +} + +_gitignore() { + _arguments \ + '1::flags:((-f\:"Save output to .gitignore file in current directory"))' \ + ":listopts: _values -s, 'modules' $(_gitignore_get_command_list)" +} diff --git a/git/.local/bin/gitignore b/git/.local/bin/gitignore new file mode 100755 index 0000000..26cf5ce --- /dev/null +++ b/git/.local/bin/gitignore @@ -0,0 +1,46 @@ +#!/usr/bin/env sh +# +# Adds call to gitignore.sh api to automatically +# generate a .gitignore file with the individual arguments +# passed in included as ignored packages. +# +# Pass in -f as first argument to save the file as .gitignore +# in the current directory in addition to printing to stdout. +# Will *overwrite* any previous .gitignore file that exists in +# current directory. +# +# Enables completion for zsh in git/.config/shell/zshrc.d/_gitignore_completions.zsh + +__get_items() { + if [ "$savetofile" = "true" ]; then + __call_url "$@" | tee .gitignore + else + __call_url "$@" + fi +} + +__call_url() { + IFS="," + curl -L -s https://www.gitignore.io/api/"$*" +} + +gitignore() { + # just print to stdout or save locally? + if [ "$1" = "-f" ]; then + savetofile=true + shift + fi + + IFS="," + if [ "$#" -eq 0 ]; then + for item in $(__get_items list); do + echo "$item" + done | fzf --multi --ansi | paste -s -d "," - | + { read -r result && __get_items "$result"; } + cat + else + __get_items "$@" + fi +} + +gitignore "$@"