From d77395e6f384399f18f2c2535f2027767f5f233e Mon Sep 17 00:00:00 2001 From: Michael Campagnaro Date: Thu, 14 May 2020 02:44:25 -0400 Subject: [PATCH] Merge some aliases and functions into one file --- aliases | 407 +++++++++++++++++++++++++++++++--------------------- bash/bashrc | 1 - functions | 94 ------------ githelpers | 40 ------ install | 2 - 5 files changed, 244 insertions(+), 300 deletions(-) delete mode 100644 functions delete mode 100644 githelpers diff --git a/aliases b/aliases index c7f9ee8..b46f83f 100644 --- a/aliases +++ b/aliases @@ -1,10 +1,237 @@ # -# Note: this may contain windows line ended. If you're going to use it in Linux then you'll need -# to remove those with: sed -i 's/\r//' +# Note: this may contain Windows line endings. If you're going to use it in Linux then you'll need +# to remove those with: `sed -i 's/\r//' ` or with `dos2unix`. # -# Handle the fact that this file will be used with multiple OSs platform=`uname` + +#################################################################################################### +# Helper Functions +#################################################################################################### + +function reload { + if [[ $platform == 'Linux' || $platform == 'Darwin' ]]; then + #source ~/.zshrc + test -f ~/.aliases && . ~/.aliases + else + test -f ~/.aliases && . ~/.aliases + fi +} + +# See top 10 bash commands +function hist { + if [[ "${platform,,}" == *'ming'* ]]; then + hist_file=~/.bash_history + else + hist_file=~/.history + fi + cat $hist_file|cut -d ';' -f 2- 2>/dev/null| awk '{a[$1]++ } END{for(i in a){print a[i] " " i}}'|sort -rn|head +} + +function remove_windows_file { + if [ -f "$1" ]; then + recycle-bin.exe "$1" + elif [ -d "$1" ]; then + recycle-bin.exe "$1" + else + echo "'$1' does not exist!" + fi +} + +function make_vid_dir_and_cd_into { + local url="$1" + local dir_name="$2" + + if [[ $dir_name == "" ]]; then + # @note If the filename contains symbols that are incompatible with + # Windows' directory names then add --restrict-filenames to the command. + dir_name=$(youtube-dl.exe --get-filename -o "%(upload_date)s - %(title)s" $url) + if [[ $dir_name == "" ]]; then + return 1 + fi + dir_name="${dir_name:0:4}-${dir_name:4:2}-${dir_name:6}" + fi + + echo "Creating directory '$dir_name'" + mkdir "$dir_name" + cd "$dir_name" + + error=$? + if [[ ! $error -eq 0 ]]; then + echo "Error: failed to create directory. Aborting." + return 1 + fi + + return 0 +} + +# Download YouTube videos +function dl_youtube_vid { + local format="$1" + local url="$2" + shift 2 + local opts="$@" + opts+=" --all-subs --embed-subs" + + make_vid_dir_and_cd_into $url + if [[ $? -ne 0 ]]; then + return + fi + + local name_format=$(youtube-dl.exe --get-filename -o "%(upload_date)s-%(title)s-youtube-%(id)s.%(ext)s" $url) + name_format="${name_format:0:4}-${name_format:4:2}-${name_format:6}" + + if [[ $format == "" ]]; then + echo "Downloading default format" + youtube-dl.exe -o "$name_format" $opts $url + else + youtube-dl.exe -f $format -o "$name_format" $opts $url + fi + + cd .. +} + +function dl_youtube_playlist { + local format="$1" + local url="$2" + local dir_name="$3" + if [[ $dir_name == "" ]]; then + echo "Please provide a name for the playlist directory" + return + fi + shift 3 + local opts="$@" + opts+=" --all-subs --embed-subs" + + make_vid_dir_and_cd_into $url $dir_name + if [[ $? -ne 0 ]]; then + return + fi + + echo "Downloading playlist" + local name_format="v%(playlist_index)s--%(upload_date)s-%(title)s-youtube-%(id)s.%(ext)s" + + if [[ $format == "" ]]; then + echo "Downloading default format" + youtube-dl.exe -o "$name_format" $opts $url + else + youtube-dl.exe -f $format -o "$name_format" $opts $url + fi +} + +# Download Twitch videos +function dl_twitch_vid { + local format="$1" + local url="$2" + shift 2 + local opts="$@" + + make_vid_dir_and_cd_into $url + if [[ $? -ne 0 ]]; then + return + fi + + local name_format="%(upload_date)s-%(title)s-twitch-%(id)s" + local video_file=$(youtube-dl.exe --get-filename -o "$name_format.%(ext)s" $url) + video_file="${video_file:0:4}-${video_file:4:2}-${video_file:6}" + youtube-dl.exe -f "$format" -o "$video_file" $opts $url + + error=$? + if [[ $error -eq 0 ]]; then + # Download Twitch chat transcript + local chat_file=$(youtube-dl.exe --get-filename -o "$name_format" $url) + rechat.exe -d $url "$chat_file.json" + rechat.exe -p "$chat_file.json" "$chat_file.txt" -b -o + mv "$chat_file.txt" "${chat_file:0:4}-${chat_file:4:2}-${chat_file:6}.txt" + tt "$chat_file.json" + else + echo "Error: Failed to download '$url'" + fi + cd .. +} + +function dl_twitch_chat { + local url="$1" + + make_vid_dir_and_cd_into $url + if [[ $? -ne 0 ]]; then + return + fi + + # Download Twitch chat transcript + local name_format="%(upload_date)s-%(title)s-twitch-%(id)s" + local chat_file=$(youtube-dl.exe --get-filename -o "$name_format" $url) + rechat.exe -d $url "$chat_file.json" + rechat.exe -p "$chat_file.json" "$chat_file.txt" -b -o + mv "$chat_file.txt" "${chat_file:0:4}-${chat_file:4:2}-${chat_file:6}.txt" + tt "$chat_file.json" + cd .. +} + +function activate_virtualenv { + if [ -f venv/bin/activate ]; then . venv/bin/activate; + elif [ -f ../venv/bin/activate ]; then . ../venv/bin/activate; + elif [ -f ../../venv/bin/activate ]; then . ../../venv/bin/activate; + elif [ -f ../../../venv/bin/activate ]; then . ../../../venv/bin/activate; + fi +} + +function play { + # Skip DASH manifest for speed purposes. This might actually disable + # being able to specify things like 'bestaudio' as the requested format, + # but try anyway. + # Get the best audio that isn't WebM, because afplay doesn't support it. + # Use "$*" so that quoting the requested song isn't necessary. + youtube-dl.exe --default-search=ytsearch: \ + --youtube-skip-dash-manifest \ + --output="${TMPDIR:-/tmp/}%(title)s-%(id)s.%(ext)s" \ + --restrict-filenames \ + --format="bestaudio[ext!=webm]" \ + --exec=afplay "$*" +} + +function mp3 { + # Get the best audio, convert it to MP3, and save it to the current + # directory. + youtube-dl.exe --default-search=ytsearch: \ + --restrict-filenames \ + --format=bestaudio \ + --extract-audio \ + --format="bestaudio[ext!=webm]" \ + --audio-quality=1 "$*" \ + --exec=afplay "$*" +} + +function take { + mkdir $1 + cd $1 +} + +################################### +# Git Functions +################################### + +function gitCmdWrapper { + # If no args are provided then run `git status` + if [[ $# > 0 ]]; then + git $@ + else + git status + fi +} + +function git_branch_name { + val=`git branch 2>/dev/null | grep '^*' | colrm 1 2` + echo "$val" +} + +function git_nuke { + git checkout master && git branch -D $1 && git push origin :$1 +} + +#################################################################################################### + +# Handle the fact that this file will be used with multiple OSs if [[ $platform == 'Linux' ]]; then alias l='ls -lhg --color' alias ll='ls -lahg --color' @@ -40,16 +267,6 @@ elif [[ "${platform,,}" == *'ming'* ]]; then # convert to lowercase then compare alias cgrep='cgrep.exe' fi -remove_windows_file() { - if [ -f "$1" ]; then - recycle-bin.exe "$1" - elif [ -d "$1" ]; then - recycle-bin.exe "$1" - else - echo "'$1' does not exist!" - fi -} - alias c='cd' alias c-='cd -' alias cd-='echo "Use c- instead"' @@ -125,7 +342,6 @@ alias dot='cd ~/.dotfiles' alias pdot='cd ~/.private-dotfiles' alias duh='du -csh' alias f='fg' -alias functions='vim ~/.dotfiles/functions' alias history='fc -l 1' alias histroy='history' alias irb='irb --readline -r irb/completion' @@ -142,22 +358,11 @@ alias rbp='cd $RBENV_PATH/versions/$(rbenv version | sed -e "s/ (set.*$//")' alias rbl='cd $RBENV_PATH/versions/$(rbenv version | sed -e "s/ (set.*$//")/lib/ruby' alias rc='rclone' alias rcc='rclone copy' - -function reload { - if [[ $platform == 'Linux' || $platform == 'Darwin' ]]; then - #source ~/.zshrc - test -f ~/.aliases && . ~/.aliases - else - test -f ~/.aliases && . ~/.aliases - fi -} - alias restart='sudo shutdown now -r' alias rl='reload' alias rmr='rm -r' alias s='cd ~/.ssh' alias sc='vim ~/.ssh/config' -alias stream='streamlink --player mpv' alias shutdown='sudo shutdown now' alias stk='rlwrap stk-simply' alias t='tree' @@ -172,85 +377,6 @@ alias vu='vagrant up' alias vimrc='vim ~/.vimrc' alias weather='curl wttr.in/toronto' -function make_vid_dir_and_cd_into { - local url="$1" - local dir_name="$2" - - if [[ $dir_name == "" ]]; then - # @note If the filename contains symbols that are incompatible with - # Windows' directory names then add --restrict-filenames to the command. - dir_name=$(youtube-dl.exe --get-filename -o "%(upload_date)s - %(title)s" $url) - if [[ $dir_name == "" ]]; then - return 1 - fi - dir_name="${dir_name:0:4}-${dir_name:4:2}-${dir_name:6}" - fi - - echo "Creating directory '$dir_name'" - mkdir "$dir_name" - cd "$dir_name" - - error=$? - if [[ ! $error -eq 0 ]]; then - echo "Error: failed to create directory. Aborting." - return 1 - fi - - return 0 -} - -# Download YouTube videos -function dl_youtube_vid { - local format="$1" - local url="$2" - shift 2 - local opts="$@" - opts+=" --all-subs --embed-subs" - - make_vid_dir_and_cd_into $url - if [[ $? -ne 0 ]]; then - return - fi - - local name_format=$(youtube-dl.exe --get-filename -o "%(upload_date)s-%(title)s-youtube-%(id)s.%(ext)s" $url) - name_format="${name_format:0:4}-${name_format:4:2}-${name_format:6}" - - if [[ $format == "" ]]; then - echo "Downloading default format" - youtube-dl.exe -o "$name_format" $opts $url - else - youtube-dl.exe -f $format -o "$name_format" $opts $url - fi - - cd .. -} -function dl_youtube_playlist { - local format="$1" - local url="$2" - local dir_name="$3" - if [[ $dir_name == "" ]]; then - echo "Please provide a name for the playlist directory" - return - fi - shift 3 - local opts="$@" - opts+=" --all-subs --embed-subs" - - make_vid_dir_and_cd_into $url $dir_name - if [[ $? -ne 0 ]]; then - return - fi - - echo "Downloading playlist" - local name_format="v%(playlist_index)s--%(upload_date)s-%(title)s-youtube-%(id)s.%(ext)s" - - if [[ $format == "" ]]; then - echo "Downloading default format" - youtube-dl.exe -o "$name_format" $opts $url - else - youtube-dl.exe -f $format -o "$name_format" $opts $url - fi -} alias yt-download='dl_youtube_vid ""' alias yt-download-1080='dl_youtube_vid "137+140"' alias yt-download-720='dl_youtube_vid "136+140"' @@ -260,53 +386,6 @@ alias yt-download-playlist-720='dl_youtube_playlist "136+140"' alias yt-download-playlist-tiny='dl_youtube_playlist "160+140"' alias yt-download-audio='youtube-dl.exe -f "140"' -# Download Twitch videos -function dl_twitch_vid { - local format="$1" - local url="$2" - shift 2 - local opts="$@" - - make_vid_dir_and_cd_into $url - if [[ $? -ne 0 ]]; then - return - fi - - local name_format="%(upload_date)s-%(title)s-twitch-%(id)s" - local video_file=$(youtube-dl.exe --get-filename -o "$name_format.%(ext)s" $url) - video_file="${video_file:0:4}-${video_file:4:2}-${video_file:6}" - youtube-dl.exe -f "$format" -o "$video_file" $opts $url - - error=$? - if [[ $error -eq 0 ]]; then - # Download Twitch chat transcript - local chat_file=$(youtube-dl.exe --get-filename -o "$name_format" $url) - rechat.exe -d $url "$chat_file.json" - rechat.exe -p "$chat_file.json" "$chat_file.txt" -b -o - mv "$chat_file.txt" "${chat_file:0:4}-${chat_file:4:2}-${chat_file:6}.txt" - tt "$chat_file.json" - else - echo "Error: Failed to download '$url'" - fi - cd .. -} -function dl_twitch_chat { - local url="$1" - - make_vid_dir_and_cd_into $url - if [[ $? -ne 0 ]]; then - return - fi - - # Download Twitch chat transcript - local name_format="%(upload_date)s-%(title)s-twitch-%(id)s" - local chat_file=$(youtube-dl.exe --get-filename -o "$name_format" $url) - rechat.exe -d $url "$chat_file.json" - rechat.exe -p "$chat_file.json" "$chat_file.txt" -b -o - mv "$chat_file.txt" "${chat_file:0:4}-${chat_file:4:2}-${chat_file:6}.txt" - tt "$chat_file.json" - cd .. -} alias tw-download-chat='dl_twitch_chat' alias tw-dl='youtube-dl.exe -f "1080" -o "%(upload_date)s-%(title)s-twitch-%(id)s.%(ext)s"' alias tw-dl2='youtube-dl.exe -o "%(upload_date)s-%(title)s-twitch-%(id)s.%(ext)s"' @@ -317,16 +396,9 @@ alias tw-download-720='dl_twitch_vid "720p-1"' alias tw-download-720-60='dl_twitch_vid "720p60"' alias tw-download-4k='dl_twitch_vid "2160p"' +#################################################################################################### # Git - -function gitCmdWrapper { - # If no args are provided then run `git status` - if [[ $# > 0 ]]; then - git $@ - else - git status - fi -} +#################################################################################################### if [[ $platform != 'Darwin' && $platform != 'Linux' ]]; then # Fix a weird mingw 'not a valid identifierline' error. @@ -334,6 +406,16 @@ if [[ $platform != 'Darwin' && $platform != 'Linux' ]]; then alias git="PATH=/usr/bin git" fi +function git_commit { + cmd="git commit -m \"$*\"" + eval "$cmd" +} + +function git_commit_signed { + cmd="git commit -S -m \"$*\"" + eval "$cmd" +} + alias am='git commit --amend' alias ama='git commit --amend -C head --author' alias ams='git commit -S --amend' # signed @@ -354,8 +436,8 @@ alias gbr='git branch -rv' alias gc='git commit' alias gcs='git commit -S' # signed alias gcl='git clone' -alias gcm="git commit -m" -alias gcms="git commit -S -m" # signed +alias gcm='git_commit' +alias gcms='git_commit_signed' # signed alias gco='git checkout' alias gco-='git checkout -' git_checkout_build() { @@ -384,7 +466,6 @@ alias gfu='git fetch up' alias gfm='git fetch origin master' alias gfup='git fetch upstream' alias ggrep='git log --all --oneline | grep ' -alias gh="source ~/.githelpers && show_git_head" alias gla='git lg --all' alias gl='git lg -30' alias gll='git lg' diff --git a/bash/bashrc b/bash/bashrc index 4d56d26..912fb8b 100644 --- a/bash/bashrc +++ b/bash/bashrc @@ -4,7 +4,6 @@ export TERM=xterm-256color # For Windows setup -test -f ~/.functions && . ~/.functions test -f ~/.aliases && . ~/.aliases test -f ~/.aliases.private && . ~/.aliases.private # Common env must come first. diff --git a/functions b/functions deleted file mode 100644 index 8c23d59..0000000 --- a/functions +++ /dev/null @@ -1,94 +0,0 @@ -platform=`uname` - -function activate_virtualenv() { - if [ -f venv/bin/activate ]; then . venv/bin/activate; - elif [ -f ../venv/bin/activate ]; then . ../venv/bin/activate; - elif [ -f ../../venv/bin/activate ]; then . ../../venv/bin/activate; - elif [ -f ../../../venv/bin/activate ]; then . ../../../venv/bin/activate; - fi -} - -function play { -# Skip DASH manifest for speed purposes. This might actually disable -# being able to specify things like 'bestaudio' as the requested format, -# but try anyway. -# Get the best audio that isn't WebM, because afplay doesn't support it. -# Use "$*" so that quoting the requested song isn't necessary. -youtube-dl --default-search=ytsearch: \ - --youtube-skip-dash-manifest \ - --output="${TMPDIR:-/tmp/}%(title)s-%(id)s.%(ext)s" \ - --restrict-filenames \ - --format="bestaudio[ext!=webm]" \ - --exec=afplay "$*" -} - -function mp3 { -# Get the best audio, convert it to MP3, and save it to the current -# directory. -youtube-dl --default-search=ytsearch: \ - --restrict-filenames \ - --format=bestaudio \ - --extract-audio \ - --format="bestaudio[ext!=webm]" \ - --audio-quality=1 "$*" \ - --exec=afplay "$*" -} - -function git-new-remote-tracking { - git checkout -b $1 && git push -u origin $1 -} - -function git_branch_name { - val=`git branch 2>/dev/null | grep '^*' | colrm 1 2` - echo "$val" -} - -function git-done { - branch=`git_branch_name` - git checkout master && git merge $branch --ff-only && bundle install && rake db:migrate db:test:prepare && rake && git push && git branch -D $branch && git push origin :$branch -} - -function git-nuke { - git checkout master && git branch -D $1 && git push origin :$1 -} - -function git-on-master { - branch=`git_branch_name` - git checkout master && git pull --rebase - git checkout $branch - git rebase master -} - -function take { - mkdir $1 - cd $1 -} - -# Search google for a term -function google() { - if [[ $platform == 'Darwin' ]]; then - open /Applications/Google\ Chrome.app/ "http://www.google.com/search?q= $1"; - else - chrome "http://www.google.com/search?q= $1"; - fi -} - -# Open a file in chrome -function chrome () { - if [[ $platform == 'Darwin' ]]; then - open -a /Applications/Google\ Chrome.app/ "$1" - else - chrome "$1" - fi -} - -# See top 10 bash commands -function hist() { - if [[ "${platform,,}" == *'ming'* ]]; then - hist_file=~/.bash_history - else - hist_file=~/.history - fi - - cat $hist_file|cut -d ';' -f 2- 2>/dev/null| awk '{a[$1]++ } END{for(i in a){print a[i] " " i}}'|sort -rn|head -} diff --git a/githelpers b/githelpers deleted file mode 100644 index 69bcc86..0000000 --- a/githelpers +++ /dev/null @@ -1,40 +0,0 @@ -#!/bin/bash - -# Log output: -# -# * 51c333e (12 days) add vim-eunuch -# -# The time massaging regexes start with ^[^<]* because that ensures that they -# only operate before the first "<". That "<" will be the beginning of the -# author name, ensuring that we don't destroy anything in the commit message -# that looks like time. -# -# The log format uses } characters between each field, and `column` is later -# used to split on them. A } in the commit subject or any other field will -# break this. - -HASH="%C(yellow)%h%Creset" -RELATIVE_TIME="%Cgreen(%ar)%Creset" -AUTHOR="%C(bold blue)<%an>%Creset" -REFS="%C(red)%d%Creset" -SUBJECT="%s" - -FORMAT="$HASH}$RELATIVE_TIME}$AUTHOR}$REFS $SUBJECT" - -show_git_head() { - pretty_git_log -1 - git show -p --pretty="tformat:" -} - -pretty_git_log() { - git log --graph --abbrev-commit --date=relative --pretty="tformat:${FORMAT}" $* | - # Repalce (2 years ago) with (2 years) - sed -Ee 's/(^[^<]*\) ago)/\1)/' | - # Replace (2 years, 5 months) with (2 years) - sed -Ee 's/(^[^<]*\), [[:digit:]]+ .*months?)/\1)/' | - # Line columns up based on } delimiter - column -s '}' -t | - # Page only if we need to - less -FXRS -} - diff --git a/install b/install index 4165d91..5ce294a 100644 --- a/install +++ b/install @@ -71,9 +71,7 @@ setup_dir .dotfiles/vim .vim ######################### FILES=() FILES+=('aliases') -FILES+=('functions') FILES+=('gitconfig') -FILES+=('githelpers') FILES+=('vimrc') FILES+=('curlrc')