You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

276 lines
6.9 KiB
Bash

#!/bin/bash
if [[ -z "$WORKSPACE_USER" ]]; then
workspace run
fi
declare -gx WORKSPACE_CONFIG_DIR=~/.workspace
declare -gx BROWSER='firefox'
if [[ -n $TMUX ]]; then
declare -gx TERM=screen-256color
elif [[ $TERM != 'dumb' ]]; then
declare -gx TERM=xterm-256color
fi
alias wr='workspace run'
alias td='cd $(mktemp -d)'
alias snr='echo 500759739'
alias snr_vu='echo 2667409'
alias q='exit'
alias ctrlc='xclip -selection clipboard'
alias cpsnr='snr | ctrlc'
alias cpdatum="date +'%0e - %m - %Y' | ctrlc"
alias xclass="executeClass"
# git stuff
alias st='git status'
alias gp='git pull'
alias gpush='git push'
alias amend='git commit -a --amend'
alias boom='git log --oneline --graph --decorate --all'
# This file stuff
alias ali='source ~/.bash_aliases'
alias alilength='echo "Length of ~/.bash_aliases is $(wc -l < ~/.bash_aliases) lines"'
enable-anaconda() {
eval "$(/home/hugo/anaconda3/bin/conda shell.bash hook)"
}
enable-venv() {
source ~/.virtualenvs/main/bin/activate
}
# Emacs stuff
ec() {
if [[ -n ${1+x} ]]; then
declare file="$1"
file="${file//\\/\\\\}"
file="${file//\"/\\\"}"
workspace run emacsclient -s ~/.cache/emacs/server --create-frame -nw -e '(find-file "'"$file"'")'
return $?
fi
workspace run emacsclient -s ~/.cache/emacs/server --create-frame -nw
}
ew() {
if [[ -n ${1+x} ]]; then
declare file="$1"
file="${file//\\/\\\\}"
file="${file//\"/\\\"}"
workspace run -detach emacsclient -s ~/.cache/emacs/server --create-frame -e '(find-file "'"$file"'")'
return $?
fi
workspace run -detach emacsclient -s ~/.cache/emacs/server --create-frame
}
# Grep stuff
alias progrep='grep -r --exclude-dir={.cache,vendor,.git,.idea,vendor,var,web,node_modules,httpconf}'
alias ymlgrep='progrep --include={"*.yml","*.yaml"}'
alias phpgrep='grep -r --include="*.php"'
# Tmux stuff
alias tmux_cheatsheet='nohup $BROWSER https://gist.github.com/MohamedAlaa/2961058 &>>/dev/null &'
# Make grep colored if it isn't aliased yet
if ! alias grep &>>/dev/null; then
alias grep='grep --color=auto'
fi
# Do the same for ls
if ! alias ls &>>/dev/null; then
alias ls='ls --color=auto'
fi
# php stuff
alias pserver='php -S localhost:8000 -t'
# check what the fuck happened in a commit
TFH() {
if [[ -n $1 ]]; then
declare commit="$1"
else
declare commit="$(git log --oneline | head -n 1)"
fi
declare prev_commit="$(git log --oneline | grep -A 1 "^${commit:0:7}" | { read && cat; } | grep -m 1 -Po '^\S+')";
git diff "$prev_commit" "${commit:0:7}"
}
# php stuff
cg() {
grep "$1" composer.json
}
debugserver() {
sleep 1 && $BROWSER localhost:8888/app_dev.php &
XDEBUG_CONFIG='idekey=pugdebug' php -S localhost:8888 -t public
}
executeClass() {
declare name="$1"
shift
javac "$name".java && java -cp ./ "$name" "$@"
}
calc(){
echo "scale=4;$*" | bc
}
pathEmacs() {
declare -a opener=(workspace run emacs)
if [[ "$1" == @(-c|--client) ]]; then
opener=(workspace run -detach emacsclient --create-frame --no-wait)
shift
fi
declare executable=''
executable="$(which "$1")"
if [[ $? -ne 0 ]]; then
echo "$1 is not in your path, exiting."
return
fi
"${opener[@]}" "$executable"
}
_pathEmacs() {
declare word="${COMP_WORDS[COMP_CWORD]}"
COMPREPLY=($(compgen -c "$word"))
}
_clone() {
COMPREPLY=($(compgen -W "$(projects list)" -- "${COMP_WORDS[COMP_CWORD]}"))
}
alias pem='pathEmacs'
alias pec='pathEmacs -c'
complete -F _pathEmacs pathEmacs
complete -F _pathEmacs pem
complete -F _pathEmacs pec
complete -F _clone clone
complete -F _clone pull
complete -F _clone pushdate
alias p='project'
listDirs() {
ls -1 | while read -r line; do [[ -d "$line" ]] && echo "$line"; done
}
_protonbak() {
declare protondir="$HOME/.steam/steam/steamapps/compatdata"
if [[ -d "$protondir" ]]; then
COMPREPLY=($(compgen -W "$(cd ~/.steam/steam/steamapps/compatdata && listDirs)" "$word"))
fi
}
# shellcheck disable=SC2164
# A tiny little helper to jump to- and between projects
project() {
declare proj_dir="$HOME/projects/$1"
if [[ -d "$proj_dir" ]]; then
if [[ -d "$proj_dir/www" ]]; then
cd "$proj_dir/www"
else
cd "$proj_dir"
fi
else
echo ""
read -rp "Project folder \"$1\" does not exist. Do you want to create it? (y/n): " ans
if [[ "$ans" == [yY] ]]; then
mkdir -p "$proj_dir" && cd "$proj_dir"
fi
fi
}
# Complete project names to make jumping between projects that much easier
# shellcheck disable=SC2035
_project() {
declare word="${COMP_WORDS[COMP_CWORD]}"
if [[ "$word" == */* ]]; then
declare basename="${word##*/}"
declare dir="${word%/*}"
if [[ -d ~/projects/"$dir" ]]; then
COMPREPLY=($(compgen -P "$dir/" -W "$(cd ~/projects/"$dir" && listDirs)" "$basename"))
return
fi
COMPREPLY=()
return
fi
COMPREPLY=($(compgen -W "$(cd ~/projects && listDirs)" "$word"))
}
complete -o nospace -F _project p
complete -o nospace -F _project project
complete -o nospace -F _protonbak protonbak
untrack() {
while read -rp 'Link: ' link; do
torsocks curl -L -s -I "$link" | grep -i '^location' | sed 's/\?.\+$//g'
done
}
if [[ -f "$WORKSPACE_CONFIG_DIR/environment" ]]; then
source "$WORKSPACE_CONFIG_DIR/environment"
fi
PROMPT_COMMAND='history -a'
HISTFILESIZE=10000
HISTSIZE=2000
# Let's make REALLY sure the right editor is selected
if command -v emacsclient >/dev/null; then
export EDITOR='emacsclient -s ~/.cache/emacs/server --create-frame'
elif command -v vim >/dev/null; then
export EDITOR='vim'
else
export EDITOR='vi'
fi
if command -v gnome-keyring-daemon &>>/dev/null; then
eval `gnome-keyring-daemon --start --components=ssh,secrets`
fi
# Readline options
if [ -t 1 ] && [[ -z "$ALIAS_NONINTERACTIVE" ]]; then
bind 'set show-all-if-ambiguous on'
bind 'set colored-stats on'
bind 'set colored-completion-prefix on'
bind 'TAB:menu-complete'
fi
if [[ -f ~/perl5/perlbrew/etc/bashrc ]]; then
source ~/perl5/perlbrew/etc/bashrc
fi
if [[ -f ~/projects/phpns/scripts/phpns_env.bash ]]; then
pushd ~/projects/phpns &>/dev/null
source ~/projects/phpns/scripts/phpns_env.bash
popd &>/dev/null
fi
# Fancy pretty prompt
declare -gx PS1='\[\e]0;\u@\h: \w\a\]${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u \e[1;31mat\e[1;32m \h${WORKSPACE_USER:+ \e[1;31mrunning \e[1;32mworkspace}\[\033[00m\] \e[1;31min\e[1;32m \[\033[01;93m\]\w\[\033[00m\] \n\$: '
# Give emacs a hand by making the prompt standard
if [[ -n $INSIDE_EMACS ]]; then
unset PROMPT_COMMAND
declare -gx PS1='\[\033[01;32m\]\u \e[1;31mat\e[1;32m \h\[\033[00m\] \e[1;31min\e[1;32m \[\033[01;93m\]\w\[\033[00m\] \n\$: '
alias ec='emacsclient'
elif [[ $TERM == 'dumb' ]]; then
export PS1='> '
fi
# Tell everyone that bash_aliases was sourced!
declare -g ALIASES_WERE_SOURCED='true'