Dot_Files/.profile

461 lines
13 KiB
Plaintext
Raw Normal View History

2022-01-08 15:24:29 -06:00
#!/bin/bash
2022-05-26 15:42:33 -05:00
### Opts ###
ulimit -n 10000 # Allows for more open files
2022-01-08 15:24:29 -06:00
# shellcheck source=./.zstyle
source ~/.zstyle
. "${HOME}/.cargo/env"
2022-01-08 15:24:29 -06:00
### Pathing ###
export PATH="${HOME}/.bin:${PATH}"
export PATH="${PATH}:/opt/homebrew/Cellar/llvm/13.0.0_2/bin"
# Mac pathing beneath
2022-01-14 01:40:44 -06:00
if [[ "${OSTYPE}" = "darwin"* ]]; then
2022-01-08 15:24:29 -06:00
export PATH="/opt/homebrew/opt/coreutils/libexec/gnubin:${PATH}"
2022-05-22 20:55:13 -05:00
export PATH="/opt/homebrew/opt/gnu-sed/libexec/gnubin:${PATH}"
2022-04-26 05:04:14 -05:00
export PATH="/Applications/Firefox Developer Edition.app/Contents/MacOS:${PATH}"
2022-05-19 08:58:39 -05:00
export PATH="${HOME}/.rustup/toolchains/stable-aarch64-apple-darwin/bin:${PATH}"
2022-01-08 15:24:29 -06:00
export MANPATH="/opt/homebrew/opt/coreutils/libexec/gnuman:${MANPATH}"
2022-02-19 13:35:06 -06:00
2022-05-19 08:58:39 -05:00
complete -o nospace -C /opt/homebrew/bin/terraform terraform
2022-02-19 13:35:06 -06:00
# Python with pyenv
eval "$(pyenv init --path)"
eval "$(pyenv init -)"
2022-03-07 14:50:15 -06:00
# LLDB
export PATH="/opt/homebrew/opt/llvm/bin:${PATH}"
2022-01-08 15:24:29 -06:00
fi
2022-01-08 19:16:41 -06:00
### OPTS ###
setopt extendedglob
2022-01-14 12:02:52 -06:00
setopt nullglob
2022-01-08 19:16:41 -06:00
2022-01-08 15:24:29 -06:00
### Environment Variables ###
export LANG=en_US.UTF-8
2022-01-08 19:35:30 -06:00
if [[ -f "/usr/libexec/java_home" ]]; then
export JAVA_HOME="$(/usr/libexec/java_home)"
fi
2022-01-08 15:24:29 -06:00
export AWS_CLI_AUTO_PROMPT=on
export ZSH_HIGHLIGHT_MAXLENGTH=10000
export ZSH_AUTOSUGGEST_BUFFER_MAX_SIZE=2
export LANG=en_US.UTF-8
2022-01-14 12:02:52 -06:00
export NOTES_DIR="${HOME}/.notes"
2022-02-25 14:57:24 -06:00
export DOCKER_BUILDKIT=1
2022-01-08 15:24:29 -06:00
2022-01-14 01:40:44 -06:00
# Fzf Variables
export FZF_DEFAULT_OPTS="--height=80% --layout=reverse --info=inline --border --margin=1 --padding=1"
2022-01-08 15:24:29 -06:00
if which nvim >/dev/null 2>&1; then
export EDITOR=nvim
export VISUAL=nvim
export MANPAGER="nvim +Man!"
elif which vim >/dev/null 2>&1; then
2022-01-08 15:24:29 -06:00
export EDITOR=vim
export VISUAL=vim
else
export EDITOR=vi
export VISUAL=less
2022-01-08 15:24:29 -06:00
fi
### Terminal Specific Configuration ###
# If using the kitty terminal we want to set our TERM var to be xterm as kitty will send
# kitty-xterm which causes a fucking headache and a half due to ncurses not containing
# that by default
if [[ "${TERM}" = *"xterm-kitty"* ]]; then
2022-01-09 00:34:43 -06:00
alias ssh="TERM=xterm-256color ssh"
alias icat="kitty +kitten icat"
2022-01-08 15:24:29 -06:00
__kitty_complete
fi
### Zsh Vi-Mode Configuration ###
# Makes the cursor change based on the mode
export VI_MODE_SET_CURSOR=true
# Set the editor to neovim for visual mode
export ZVM_VI_EDITOR="${EDITOR}"
# This ensures that fzf completion works
zvm_after_init_commands+=('[[ -r ~/.fzf.zsh ]] && source ~/.fzf.zsh')
2022-01-08 15:24:29 -06:00
### Aliases ###
## Exa ls Replacement Configuration ##
if which exa >/dev/null 2>&1; then
alias ls="exa --icons --group --group-directories-first --octal-permissions"
alias l="ls -alh"
alias ll="l"
2022-01-08 15:24:29 -06:00
alias tree="ls --tree"
fi
## Git Aliases ##
if which git >/dev/null 2>&1; then
alias gc="git commit"
alias gcm="git commit -m"
2022-01-08 15:24:29 -06:00
alias ga="git add"
alias gp="git push"
alias gb="git branch"
alias gco="git checkout"
alias gpl="git pull"
alias gs="git status"
alias gst="git stash"
alias gstc="git stash clear"
2022-01-23 16:52:02 -06:00
alias gsw="git switch"
2022-01-08 15:24:29 -06:00
alias gd="git diff"
alias gr="git remote"
alias gl="git log"
alias gw="git worktree"
2022-03-17 15:34:22 -05:00
alias gwa="git worktree add"
alias gwr="git worktree remove"
2022-01-08 15:24:29 -06:00
alias git-remote="git config --get remote.origin.url"
2022-03-17 15:34:22 -05:00
alias gbc="git config remote.origin.fetch '+refs/heads/*:refs/remotes/origin/*'"
2022-01-08 15:24:29 -06:00
fi
2022-03-17 15:34:22 -05:00
gbf() {
local remote
local default_branch
remote="${1:=origin}"
default_branch="$(git remote show "${remote}" | awk '/HEAD branch/ {print $NF}')"
git fetch "${remote}" "${default_branch}":"${default_branch}"
}
2022-01-08 15:24:29 -06:00
## Mac Specific Aliases ##
if [[ "${OSTYPE}" = "darwin"* ]]; then
alias c="pbcopy"
alias p="pbpaste"
alias grep="ggrep"
alias find="gfind"
alias kill="gkill"
2022-05-22 20:55:13 -05:00
alias sed="gsed"
2022-01-08 15:24:29 -06:00
fi
## Neovim Aliases ##
if which nvim >/dev/null 2>&1; then
alias n="nvim"
fi
## Bat (Alternative to Cat) Aliases ##
if which bat >/dev/null 2>&1; then
alias cat="bat"
fi
## Misc Aliases ##
2022-05-26 16:25:34 -05:00
alias e="${EDITOR}"
2022-01-08 15:24:29 -06:00
alias ghidra="ghidraRun"
alias v="vim"
alias :q="exit"
alias Get-Public-IPV4="dig @resolver4.opendns.com myip.opendns.com +short -4"
alias Get-Public-IPV6="dig @resolver1.ipv6-sandbox.opendns.com AAAA myip.opendns.com +short -6"
alias :profile="${EDITOR} ${HOME}/.profile"
2022-01-08 15:24:29 -06:00
### Completions ###
# Homebrew completions
if type brew &>/dev/null; then
FPATH="$(brew --prefix)/share/zsh/site-functions:${FPATH}"
autoload -Uz compinit
compinit
fi
2022-01-09 00:27:14 -06:00
# Completions from .zsh directory
if [[ -d "${HOME}/.zsh/completions" ]]; then
FPATH="${HOME}/.zsh/completions:${FPATH}"
autoload -Uz compinit
compinit
fi
2022-01-08 15:24:29 -06:00
### Functions ###
del() {
local BASE_TRASH_DIR
BASE_TRASH_DIR="${HOME}/.Trash/"
local trash_del_dir
trash_del_dir="${BASE_TRASH_DIR}/del-$(date +%Y-%m-%dT%H:%M:%S)"
mkdir -p "${trash_del_dir}"
for i in "${@}"; do
mv "${i}" "${trash_del_dir}"
done
}
DAP-Python-Gen() {
local module
module="${1}"
name="${2:=Local Module}"
mkdir -p .vscode
cat <<__EOF__ >.vscode/launch.json
{
"configurations": [
{
"name": "Launch ${name}",
"type": "python",
"request": "launch",
"module": "${module}"
}
]
}
__EOF__
}
2022-01-08 15:24:29 -06:00
TCPDump-Capture() {
tcpdump -qns 0 -X -r "${1}"
}
Known-Hosts() {
local prev_ifs
prev_ifs="${IFS}"
while IFS=$'\n' read -r line; do
echo "${line}" | cut -d " " -f1
done <~/.ssh/known_hosts
IFS="${prev_ifs}"
}
Work-Hours() {
local WORK_HOURS_PATH
WORK_HOURS_PATH=~/Vircio/Work-Hours
mkdir -p "${WORK_HOURS_PATH}"
${EDITOR} "${WORK_HOURS_PATH}/$(date +%Y-%m-%d)"
}
date_iso_8601() {
date +%Y-%m-%dT%H:%M:%S
}
echo_rgb() {
# Echo a colored string to the terminal based on rgb values
#
# NOTE: This function will only truly work with terminals that support TRUE COLOR, see:
# https://gist.github.com/XVilka/8346728
#
# Positional Arguments:
#
# message <type: string> <position: 1> <required: true>
# - The message to be printed to stdout
# red <type: int> <position: 2> <required: true>
# - The red value from 0 to 255
# green <type: int> <position: 3> <required: true>
# - The green value from 0 to 255
# blue <type: int> <position: 4> <required: true>
# - The blue value from 0 to 255
# bg_red <type: int> <position: 5> <required: false>
# - The background red value from 0 to 255
# bg_green <type: int> <position: 6> <required: false>
# - The background green value from 0 to 255
# bg_blue <type: int> <position: 7> <required: false>
# - The background blue value from 0 to 255
#
# Usage:
# echo_rgb "Yep" 10 80 30
# echo_rgb "DESTROY MY EYES" 255 0 255 0 255 0
#
# POSIX Compliant:
# N/A
#
local red
local green
local blue
local input
local bg_red
local bg_green
local bg_blue
input="${1}"
red="${2}"
green="${3}"
blue="${4}"
bg_red="${5}"
bg_green="${6}"
bg_blue="${7}"
for num in "${@:2}"; do
[[ ! "${num}" =~ [0-9] ]] &&
printf "%s\n" "Given RGB value was not a number, received ${num}" 1>&2 &&
2022-01-08 15:24:29 -06:00
return 1
[[ "${num}" -gt 255 ]] &&
printf "%s\n" "Given RGB value must be less than 255, received ${num}" 1>&2 &&
2022-01-08 15:24:29 -06:00
return 1
[[ "${num}" -lt 0 ]] &&
printf "%s\n" "Given RGB value must be more than 0, received ${num}" 1>&2 &&
2022-01-08 15:24:29 -06:00
return 1
done
if [ -t 1 ]; then
if [ -n "${5}" ]; then
[[ -z "${6}" ]] && echo "A value must be passed for bg_green" && return 1
[[ -z "${7}" ]] && echo "A value must be passed for bg_blue" && return 1
printf "\033[38;2;%s;%s;%s;48;2;%s;%s;%sm%s\033[m\n" \
"${red}" "${green}" "${blue}" "${bg_red}" "${bg_green}" "${bg_blue}" "${input}"
else
printf "\033[0;38;2;%s;%s;%sm%s\033[m\n" "${red}" "${green}" "${blue}" "${input}"
fi
2022-01-08 15:24:29 -06:00
else
printf "%s\n" "${input}"
2022-01-08 15:24:29 -06:00
fi
}
chr() {
python3 -c "print(chr(int('${1}')))"
}
ord() {
python3 -c "print(ord('${1}'))"
}
2022-01-14 01:40:44 -06:00
tmp() {
2022-02-26 16:13:06 -06:00
(
export MY_SHLVL=tmp:$MY_SHLVL
export od=$PWD
tmp=$(mktemp -d)
2022-02-26 16:13:06 -06:00
export tmp
trap 'rm -rf ${tmp}' 0
if ! cd "${tmp}"; then
printf "%s \"%s\"\n" "Unable to cd into" "${tmp}"
exit 1
fi
if [ -z "$1" ]; then
2022-02-26 16:13:06 -06:00
$SHELL -l
else
[ "$1" = "-l" ] && {
shift
set "${@}" ";" "$SHELL -l"
}
eval "${@}"
fi
)
}
2022-03-17 18:33:57 -05:00
cdl() {
if [[ -f "${1}" ]]; then
cd "$(dirname "$(readlink -f "${1}")")"
2022-03-17 18:33:57 -05:00
else
echo_rgb "No such file: ${1}" 255 0 0 30 0 0
2022-03-17 18:33:57 -05:00
fi
}
2022-06-04 01:28:56 -05:00
nvim_env() {
# If using ZSH uncomment the line below, requires emulate
emulate -L ksh
2022-06-04 01:28:56 -05:00
local nvim_env
local nvim_env_path
local nvim_env_full_path
nvim_env="${1:-nvim-primary}"
nvim_env_path="${HOME}/nvim-environments"
nvim_env_full_path="${nvim_env_path}/${nvim_env}"
declare -A nvim_syml_paths=(["${HOME}/.config/nvim"]="${nvim_env_full_path}/config" ["${HOME}/.local/share/nvim"]="${nvim_env_full_path}/share")
# Check that the given environment exists
if [[ ! -d "${nvim_env_full_path}" ]]; then
printf "Error: Unable to locate environment, \"%s\"\n\t\"%s\"\n" "${nvim_env}" "${nvim_env_full_path}" >&2
return 1
fi
local symlink_src
local symlink_dst
for syml_key in "${!nvim_syml_paths[@]}"; do
symlink_src="${nvim_syml_paths[$syml_key]}"
symlink_dst="${syml_key}"
# Check that the configuration path exist from our env
if [[ ! -d "${symlink_src}" ]]; then
2022-06-04 01:31:48 -05:00
printf "ERROR: Unable to find configuration:\n\t\"%s\" in environment \"%s\"\n\tConsider creating it with \"mkdir -p %s\"\n" "${symlink_src}" "${nvim_env}" "${symlink_src}" >&2
2022-06-04 01:28:56 -05:00
return 1
fi
# If a directory (not a symlink) exists in where we want to write a symlink refuse to overwrite
if [[ -r "${symlink_dst}" ]] && [[ ! -L "${symlink_dst}" ]]; then
printf "ERROR: Neovim configuration to be replaced is not a symlink, please remove the files before proceeding, issue file:\n\t\"%s\"\n" "${symlink_dst}" >&2
return 1
fi
# If we find an existing symlink, try to delete it
if [[ -L "${symlink_dst}" ]]; then
local linked_sym
linked_sym="$(readlink "${symlink_dst}")"
printf "Attemping to remove symlink:\n\t%s -> %s\n" "${linked_sym}" "${symlink_dst}"
if ! rm "${symlink_dst}"; then
printf "ERROR: Failed to remove symlink:\n\t%s -> %s\n" "${linked_sym}" "${symlink_dst}" >&2
return 1
else
printf "Successfully removed symlink:\n\t%s -> %s\n" "${linked_sym}" "${symlink_dst}"
fi
fi
# Actually write the env now we're past our guards
printf "Linking:\n\t%s -> %s\n" "${symlink_src}" "${symlink_dst}"
if ! ln -s "${symlink_src}" "${symlink_dst}"; then
printf "ERROR: Failed to link:\n\t%s -> %s\n" "${symlink_src}" "${symlink_dst}" >&2
return 1
else
printf "Successfully linked:\n\t%s -> %s\n" "${symlink_src}" "${symlink_dst}"
fi
printf "%.s-" $(seq 1 $(tput cols))
printf "\n"
done
}
2022-04-26 05:04:14 -05:00
### Used to open firefox from terminal with search ###
browser_search() {
local browser
local search_term
browser="firefox"
search_term="${*}"
eval "${browser} -search \"${search_term}\""
}
### Search Aliases ###
if which browser_search >/dev/null 2>&1; then
alias s="browser_search"
if ! which search >/dev/null 2>&1; then
alias search="browser_search"
fi
fi
watcher() {
local command
local sleep_time
2022-04-26 05:04:14 -05:00
local exit_code
command="${1}"
sleep_time="${2:-5}"
while :; do
clear
printf "%s | %s | %s\n" "Command: \"${command}\"" "Every ${sleep_time} seconds" "$(date)"
printf "%*s\n" "${COLUMNS:-$(tput cols)}" "" | tr " " -
2022-03-24 03:07:35 -05:00
eval "${command}"
2022-04-26 05:04:14 -05:00
exit_code="${?}"
2022-05-03 21:05:19 -05:00
if ((exit_code != 0)); then
2022-04-26 05:04:14 -05:00
break
fi
sleep "${sleep_time}"
done
2022-04-26 05:04:14 -05:00
2022-05-03 21:05:19 -05:00
return "$((exit_code))"
}
update_cargo_crates() {
cargo install $(cargo install --list | grep -E '^[a-z0-9_-]+ v[0-9.]+:$' | cut -f1 -d" ")
}
2022-01-14 01:40:44 -06:00
### FZF FUNCTIONS ###
killer() {
(
date
ps -ef
) |
fzf --bind='ctrl-r:reload(date; ps -ef)' \
--header=$'Press CTRL-R to reload\n\n' --header-lines=2 \
--preview='echo {}' --preview-window=down,3,wrap \
--layout=reverse --height=80% | awk '{print $2}' | xargs kill -"${1:-9}"
2022-01-14 01:40:44 -06:00
}
2022-04-26 05:04:14 -05:00
. "$HOME/.cargo/env"