dotfiles

My personal shell configs and stuff
git clone git://git.alex.balgavy.eu/dotfiles.git
Log | Files | Refs | Submodules | README | LICENSE

commit 9809019d2c45e6c3d5f6d6b9dad1118aa5886127
parent 8ead9fdc785f782d685e1efc126419f129c31a77
Author: Alex Balgavy <a.balgavy@gmail.com>
Date:   Wed, 26 Feb 2020 00:37:37 +0100

zsh: bundler and gitignore plugins

Former-commit-id: c38b73296678ccc1bb15b94b411d8b21dc90bfd0
Diffstat:
Mshell/aliases | 1+
Ashell/zsh-plugins/bundler.plugin.zsh | 107+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Ashell/zsh-plugins/gitignore.plugin.zsh | 12++++++++++++
Mshell/zshrc | 4++++
4 files changed, 124 insertions(+), 0 deletions(-)

diff --git a/shell/aliases b/shell/aliases @@ -18,3 +18,4 @@ alias j='joplin' alias tree="tree -CAFa -I 'CVS|*.*.package|.svn|.git|node_modules' --dirsfirst" # Colorize, ANSI graphics hack, indicate ft with appendices, print all files, ignore certain patterns, list dirs first alias lsblk="lsblk -o NAME,LABEL,PARTLABEL,TYPE,FSTYPE,SIZE,MOUNTPOINT,STATE" # The columns I want to see in lsblk alias confucius="curl confucius-quote.herokuapp.com" # A joke curl service I made +alias be="bundle exec" diff --git a/shell/zsh-plugins/bundler.plugin.zsh b/shell/zsh-plugins/bundler.plugin.zsh @@ -0,0 +1,107 @@ +bundled_commands=( + annotate + cap + capify + cucumber + foodcritic + guard + hanami + irb + jekyll + kitchen + knife + middleman + nanoc + pry + puma + rackup + rainbows + rake + rspec + rubocop + shotgun + sidekiq + spec + spork + spring + strainer + tailor + taps + thin + thor + unicorn + unicorn_rails +) + +# Remove $UNBUNDLED_COMMANDS from the bundled_commands list +for cmd in $UNBUNDLED_COMMANDS; do + bundled_commands=(${bundled_commands#$cmd}); +done + +# Add $BUNDLED_COMMANDS to the bundled_commands list +for cmd in $BUNDLED_COMMANDS; do + bundled_commands+=($cmd); +done + +## Functions + +bundle_install() { + if ! _bundler-installed; then + echo "Bundler is not installed" + elif ! _within-bundled-project; then + echo "Can't 'bundle install' outside a bundled project" + else + local bundler_version=`bundle version | cut -d' ' -f3` + if [[ $bundler_version > '1.4.0' || $bundler_version = '1.4.0' ]]; then + if [[ "$OSTYPE" = (darwin|freebsd)* ]] + then + local cores_num="$(sysctl -n hw.ncpu)" + else + local cores_num="$(nproc)" + fi + bundle install --jobs=$cores_num $@ + else + bundle install $@ + fi + fi +} + +_bundler-installed() { + which bundle > /dev/null 2>&1 +} + +_within-bundled-project() { + local check_dir="$PWD" + while [ "$check_dir" != "/" ]; do + [ -f "$check_dir/Gemfile" -o -f "$check_dir/gems.rb" ] && return + check_dir="$(dirname $check_dir)" + done + false +} + +_binstubbed() { + [ -f "./bin/${1}" ] +} + +_run-with-bundler() { + if _bundler-installed && _within-bundled-project; then + if _binstubbed $1; then + ./bin/${^^@} + else + bundle exec $@ + fi + else + $@ + fi +} + +## Main program +for cmd in $bundled_commands; do + eval "function unbundled_$cmd () { $cmd \$@ }" + eval "function bundled_$cmd () { _run-with-bundler $cmd \$@}" + alias $cmd=bundled_$cmd + + if which _$cmd > /dev/null 2>&1; then + compdef _$cmd bundled_$cmd=$cmd + fi +done diff --git a/shell/zsh-plugins/gitignore.plugin.zsh b/shell/zsh-plugins/gitignore.plugin.zsh @@ -0,0 +1,12 @@ +function gi() { curl -fL https://www.gitignore.io/api/${(j:,:)@} } + +_gitignoreio_get_command_list() { + curl -sfL https://www.gitignore.io/api/list | tr "," "\n" +} + +_gitignoreio () { + compset -P '*,' + compadd -S '' `_gitignoreio_get_command_list` +} + +compdef _gitignoreio gi diff --git a/shell/zshrc b/shell/zshrc @@ -69,6 +69,10 @@ source_if_exists $DOTFILES/shell/z/z.sh # FZF for fuzzy finding source_if_exists ~/.fzf.zsh +# Ruby bundler plugin, automatically runs binstub in .bin or `bundle exec`s +source_if_exists $DOTFILES/shell/zsh-plugins/bundler.plugin.zsh +source_if_exists $DOTFILES/shell/zsh-plugins/gitignore.plugin.zsh + # Enable custom aliases and functions source_if_exists ~/.aliases source_if_exists ~/.functions