aboutsummaryrefslogtreecommitdiff
path: root/.shenanigans.sh
blob: 4d28c45e5fa8dcebb9f8646036c2046fe6123f62 (plain)
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
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
# Magical environment variables.
export NIX_SHELL_PRESERVE_PROMPT=1
export COLORTERM=truecolor
export TERM=xterm-256color
export VISUAL=vim
export EDITOR=vim

parse_git_branch() {
	git branch 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/ (\1)/'
}

is_inside_nix_shell() {
	nix_shell_name="$(basename "$IN_NIX_SHELL" 2>/dev/null)"
	if [[ -n "$nix_shell_name" ]]; then
		echo " \e[0;36m(nix-shell)\e[0m"
	fi
}

# Better prompt.
export PS1="[\033[38;5;166m\]\u@\h\[$(tput sgr0)\]]$(is_inside_nix_shell)\[\033[33m\]\$(parse_git_branch)\[\033[00m\] \w\[$(tput sgr0)\] \n$ "

# General aliases.
alias l='ls -lh'
alias ll='ls -lha'
alias t='tree -L 2'
alias ..='cd ..'
alias grep='grep --color=always'
alias less='less -R'
alias tmux='tmux -u'
alias vi='vim'
alias server='python3 -m http.server 6969'

# Custom folder jump commands.
alias p='cd ~/Vault/projects'
alias j='cd ~/Junk/current'
alias d='cd ~/Downloads'

# Additional path settings.
export PATH=$HOME/Applications:$PATH
export PATH=$HOME/go/bin:$PATH
export PATH=/usr/local/go/bin:$PATH

# Language servers.
export PATH=$HOME/.local/bin/luals/bin:$PATH

# History and search. Stolen from J.
HISTCONTROL=ignoreboth
shopt -s histappend
export HISTSIZE=
export HISTFILESIZE=
export HISTFILE=~/.bash_history_infinite
PROMPT_COMMAND="history -a; history -n; ${PROMPT_COMMAND}"
bind '"\e[A": history-search-backward'
bind '"\e[B": history-search-forward'
export HSTR_CONFIG=hicolor
if [[ $- =~ .i. ]]; then bind '"\C-h": "\C-a hstr -- \C-j"'; fi

# Machine provision script for essential software.
# This is meant to be used on Debian 11+.
provision() {
	doas apt install \
		build-essential git gcc make busybox cifs-utils tree hstr s3cmd \
		xmlstarlet htop nvtop tmux picom scrot xclip mc ripgrep jq \
		rsync doas newsboat entr clang clang-tidy clang-tools \
		libx11-dev libxinerama-dev libxft-dev x11-xserver-utils \
		stow podman podman-compose 
}

# Backup to NAS function. Much wow!
backup() {
	CWD=$(pwd)
	VHOME=/home/$USER/Vault
	ME=$(whoami)@$(hostname)

	# Everything dotfiles.
	cd $VHOME && mkdir -p $VHOME/dotfiles && cd $VHOME/dotfiles
	rsync -azhv /home/$USER/.bash_history_infinite bash_history_infinite
	rsync -azhv /home/$USER/.ssh/ ssh
	rsync -azhv /home/$USER/.aws/ aws
	rsync -azhv /home/$USER/.gnupg/ gnupg/

	# WoW settings and addons.
	cd $VHOME && mkdir -p $VHOME/twow && cd $VHOME/twow
	rsync -azhv /home/$USER/Games/turtlewow/Interface .
	rsync -azhv /home/$USER/Games/turtlewow/WTF .
	rsync -azhv /home/$USER/Games/turtlewow/start.sh .

	# Sync with NAS.
	rsync -azhvpog \
		--exclude '.venv/' \
		--exclude '.git/' \
		--exclude '.import/' \
		--exclude '.godot/' \
		--exclude '.zig-cache/' \
		--exclude 'node_modules/' \
		--exclude 'digg-v5/' \
		--delete \
		$VHOME/ /media/Void/Backup/$ME/

	# Add to log file.
	echo `date +"%D %T"` >> ~/.vault.log
	notify-send "Backup finished successfully."

	# Return back to original directory
	cd $CWD
}

# Toggles between pulseaudio sinks in round-robin.
togglesink() {
	sinks=($(pactl list short sinks | awk '{print $2}'))
	current_sink=$(pactl get-default-sink)
	current_index=-1

	for i in "${!sinks[@]}"; do
		if [[ "${sinks[$i]}" == "$current_sink" ]]; then
			current_index=$i
			break
		fi
	done

	if [[ $current_index -eq -1 ]]; then
		next_index=0
	else
		next_index=$(( (current_index + 1) % ${#sinks[@]} ))
	fi

	pactl set-default-sink "${sinks[$next_index]}"
	notify-send "Switched to sink: ${sinks[$next_index]}"
}