-
Notifications
You must be signed in to change notification settings - Fork 0
/
.bashrc
107 lines (89 loc) · 2.49 KB
/
.bashrc
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
# shellcheck shell=bash
if [[ ":$PATH:" != *":$HOME/.local/bin:"* ]]; then
PATH="$HOME/.local/bin:$PATH"
fi
if [[ -d ~/.cargo && ":$PATH:" != *":$HOME/.cargo/bin:"* ]]; then
PATH="$HOME/.cargo/bin:$PATH"
fi
export DOTFILES_DIR
DOTFILES_DIR=$(realpath -m ~/.bashrc/../../..)
# Bail if non-interactive shell
[[ $- == *i* ]] || return
# Install bash-preexec (https://github.com/rcaloras/bash-preexec)
unset PROMPT_COMMAND
# shellcheck source-path=SCRIPTDIR source=.local/lib/bash-preexec.sh
. ~/.local/lib/bash-preexec.sh
# Shell config
shopt -s histappend globstar
bind 'set completion-ignore-case on'
#bind 'set colored-stats on'
bind '"\e[3;5~": kill-word' # Ctrl+Del
bind '"\C-H": backward-kill-word' # Ctrl+Backspace (note: some terminals send a regular backspace when ctrl+backspace is pressed)
eval "$(dircolors -b ~/.config/dircolors)"
HISTSIZE=10000
HISTTIMEFORMAT='%Y-%m-%d %T '
export LESS='-FRX'
export UNZIP='-O cp932 -DD' # Extract Windows zips using Japanese codepage, don't set timestamp
if [[ $TERM_PROGRAM == 'vscode' ]]; then
export EDITOR='code -w'
fi
# General aliases
alias .e='code "$DOTFILES_DIR"'
alias .r='. ~/.bashrc'
alias cd='>/dev/null cd'
alias clip='xsel -bi'
alias grep='grep --color=auto'
alias ll='ls -Al'
alias ls='ls -hv --color=auto --group-directories-first'
alias tsv="column -ts $'\t' -W0"
alias unclip='xsel -bo'
alias x="xargs -d '\n' -L 1"
alias xx="xargs -d '\n'"
# Causes aliases to be resolved when running sudo
alias sudo='sudo '
# General-use functions
mkcd() {
mkdir -vp -- "$1" && cd -- "$1" || return
}
tclip() {
tee >(clip)
}
wtfismyip() {
curl -Ss https://wtfismyip.com/text
}
wherethehellami() {
curl -Ss ipinfo.io/"$1" | jq -r '[.city,.region,.country]|join(", ")'
}
distinct() {
# uniq but without needing to be sorted first
# https://stackoverflow.com/a/11532197
awk '!x[$0]++'
}
readclip() { # Like readarray: readclip urls; printf '%s\n' "${urls[@]}"
local x y
declare -n arr="$1"
x=$(unclip)
while true; do
y=$(unclip)
if [[ $y != "$x" ]]; then
echo "$y"
arr+=("$y")
x="$y"
fi
done
}
parallel() {
# Helper function for running N tasks in parallel (defaults to number of
# cores). Example: for f in *; do somejob & parallel; done; wait
if (( $(jobs -rp | wc -l) >= ${1:-$(nproc)} )); then
wait -n
fi
}
# For dry runs / printing arrays
q() { printf '%q ' "$@"; printf '\n'; }
n() { printf '%s\n' "$@"; }
# Load mods
for mod in ~/.config/bashrc.d/*.sh; do
# shellcheck disable=SC1090
. "$mod"
done