-
Notifications
You must be signed in to change notification settings - Fork 0
/
dot_functions
110 lines (89 loc) · 2.68 KB
/
dot_functions
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
# -*-mode:sh-*- vim:ft=sh
# shellcheck shell=bash
# ~/.functions
# =============================================================================
# Shell functions sourced by `~/.bashrc` and `~/.zshrc`.
# =========================
# === General functions ===
# =========================
if ! type 'take' &> /dev/null; then
# Creates a directory and changes to it.
# Syntax: `take <directory>`
take() {
if [ -z "${1}" ]; then
echo "mkdir [-pv] [-m mode] directory ..."
return 64
fi
mkdir -p -- "${@}" && cd -P -- "${_}" || exit;
}
fi
# Update the path of the unix file socket the ssh-agent uses for communication
# with other processes. This is useful when working with tmux which does not
# handle the SSH_AUTH_SOCK environment variable well.
#
# Syntax: update_auth_sock
update_auth_sock() {
local sock="/tmp/ssh-agent-${USER}-screen"
if test "${SSH_AUTH_SOCK}" && [ "${SSH_AUTH_SOCK}" != "${sock}" ]; then
rm -f "${sock}"
ln -sf "${SSH_AUTH_SOCK}" "${sock}"
export SSH_AUTH_SOCK="${sock}"
fi
}
# Set the path of the unix file socket the ssh-agent uses for communication
# with other processes to that of the GnuPG agent.
#
# Syntax: gpg_auth_sock
gpg_auth_sock () {
SSH_AUTH_SOCK=$(gpgconf --list-dirs agent-ssh-socket) "${@}"
}
# ===========
# === Git ===
# ===========
dirty_repos() {
while IFS= read -r -d '' dir; do
dir=$(dirname "${dir}")
cd "${dir}" &> /dev/null || return
STATE=""
if [[ -n $(git ls-files --other --exclude-standard 2> /dev/null) ]]; then
STATE="untracked-files ${STATE}"
fi
if ! git diff --quiet 2> /dev/null; then
STATE="modified ${STATE}"
fi
if ! git diff --cached --quiet 2> /dev/null; then
STATE="staged ${STATE}"
fi
if [[ -n $STATE ]]; then
echo "${dir}: ${STATE}"
fi
cd - &> /dev/null || return
done < <(find . -name '.git' -type d -print0)
}
# ==================
# === Networking ===
# ==================
# Copy the local hosts SSH public key to a remote host.
# This requires the remote host to accept access by another user, including
# root.
# Syntax: infect [email protected]
function infect() {
# shellcheck disable=SC2029
ssh "${@}" "mkdir -p ~/.ssh; echo '$(cat ~/.ssh/id_rsa.pub)' >> ~/.ssh/authorized_keys";
}
# List programs running on a port.
# Syntax: pslisten 80
pslisten() {
lsof -Pn -i:"${1}"
}
# =============
# === Media ===
# =============
# Convert a gif to mp4.
gif2mp4() {
ffmpeg -i "${1}" -movflags faststart -pix_fmt yuv420p -vf "scale=trunc(iw/2)*2:trunc(ih/2)*2" "${2}"
}
# Convert a vid to webm.A
vid2webm() {
ffmpeg -i "${1}" -vcodec libvpx -acodec libvorbis -isync -copyts -aq 80 -threads 3 -qmax 30 -y "${2}" "${1}.webm"
}