forked from mathiasbynens/dotfiles
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy path.functions
196 lines (168 loc) · 5.64 KB
/
.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
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
function qcd() {
case "$1" in
uclab_onedrive)
cd "$HOME/OneDrive - University of Pittsburgh/DBMI_Genomics_Analysis_Chandran/Paul"
;;
dasilva)
cd "$HOME/OneDrive - University of Pittsburgh/DBMI_Genomics_Analysis_Chandran/Paul/dasilva_multiome"
;;
ravida)
cd "$HOME/OneDrive - University of Pittsburgh/DBMI_Genomics_Analysis_Chandran/Paul/ravida_scrnaseq"
;;
sachdev)
cd "$HOME/OneDrive - University of Pittsburgh/DBMI_Genomics_Analysis_Chandran/Paul/sachdev_visium"
;;
soong)
cd "$HOME/OneDrive - University of Pittsburgh/DBMI_Genomics_Analysis_Chandran/Paul/soong_nanostring"
;;
src)
cd "$HOME/OneDrive - University of Pittsburgh/DBMI_Genomics_Analysis_Chandran/Paul/src"
;;
rnaseq)
cd "$HOME/OneDrive - University of Pittsburgh/projects/RNAseq"
;;
sct)
cd "$HOME/OneDrive - University of Pittsburgh/projects/SCT"
;;
esac
pwd
}
complete -W "uclab_onedrive dasilva ravida sachdev soong src rnaseq sct" qcd
function grep_error() {
grep -Ei "error|exception|fatal|warning|cannot|can't|uninitialized" "$@"
}
function find_largest_files() {
local num_files=${1:-10} # Default to 10 if no argument is provided
# find . -type f -exec du -ah {} + | sort -rh | head -n "$num_files" # does not work for OneDrive synced files that do not take up space locally
find . -type f -printf "%s %p\n" | sort -rn | head -n "$num_files" | \
numfmt --to=iec-i --suffix=B # numfmt will choose appropriate unit (MB, GB, etc...)
}
function rmds() {
echo -e "\nDeleting .DS_Store recursively\n"
find . -name '.DS_Store' -delete
}
# Replaced with newfiles.sh in ~/bin
#function newfiles() {
# daysago=${1:-0} # set default to today which is 0
# daysparam="$daysago days ago"
# mydate=$(date -d "$daysparam" '+%Y-%m-%d 00:00:00')
# echo "Finding newer files than: $mydate" >&2
# fd -ui -E .DS_Store -E .Rproj.user --type f --change-newer-than "$mydate"
#}
function showprocesses() {
echo -e "\n${PURPLE}Running processes${NC}"
echo -e "${GREEN}tmux${NC}" && tmux ls && echo
echo -e "${GREEN}jobs${NC}" && j && echo
echo -e "${GREEN}squeue${NC}" && squeue -u $USER -S S -o "%8i %65j %2t %12l %8M %4C %.R %S" --cluster htc,gpu
}
# calculator from https://stackoverflow.com/questions/18093871/how-can-i-do-division-with-variables-in-a-linux-shell
function calc() { awk "BEGIN { print "$*" }"; }
# Start an HTTP server from a directory, optionally specifying the port.
# From Chatgpt
function server() {
local port="${1:-8000}";
sleep 1 && open "http://localhost:${port}/" &
# Use Python 3's http.server module
python3 -m http.server "$port" --bind 127.0.0.1;
}
########### Git functions
# Use Git’s colored diff when available
hash git &>/dev/null;
if [ $? -eq 0 ]; then
function diff() {
git diff --no-index --color-words "$@";
}
fi;
# `tre` is a shorthand for `tree` with hidden files and color enabled, ignoring
# the `.git` directory, listing directories first. The output gets piped into
# `less` with options to preserve color and line numbers, unless the output is
# small enough for one screen.
function tre() {
tree -aC -I '.git|node_modules|bower_components' --dirsfirst "$@" | less -FRNX;
}
########### Git functions
# `v` with no arguments opens the current directory in VSCode, otherwise opens the
# given location
function v() {
if [ $# -eq 0 ]; then
code .;
else
code "$@";
fi;
}
# `o` with no arguments opens the current directory, otherwise opens the given
# location
function o() {
if [ $# -eq 0 ]; then
open .;
else
open "$@";
fi;
}
# Create a new directory and enter it
function mkd() {
mkdir -p "$@" && cd "$_";
}
# Syntax-highlight JSON strings or files
# Usage: `json '{"foo":42}'` or `echo '{"foo":42}' | json`
function json() {
if [ -t 0 ]; then # argument
python3 -mjson.tool <<< "$*" | pygmentize -l javascript;
else # pipe
python3 -mjson.tool | pygmentize -l javascript;
fi;
}
# UTF-8-encode a string of Unicode symbols
function escape() {
printf "\\\x%s" $(printf "$@" | xxd -p -c1 -u);
# print a newline unless we’re piping the output to another program
if [ -t 1 ]; then
echo ""; # newline
fi;
}
# Decode \x{ABCD}-style Unicode escape sequences
function unidecode() {
perl -e "binmode(STDOUT, ':utf8'); print \"$@\"";
# print a newline unless we’re piping the output to another program
if [ -t 1 ]; then
echo ""; # newline
fi;
}
# Get a character’s Unicode code point
function codepoint() {
perl -e "use utf8; print sprintf('U+%04X', ord(\"$@\"))";
# print a newline unless we’re piping the output to another program
if [ -t 1 ]; then
echo ""; # newline
fi;
}
# Show all the names (CNs and SANs) listed in the SSL certificate
# for a given domain
function getcertnames() {
if [ -z "${1}" ]; then
echo "ERROR: No domain specified.";
return 1;
fi;
local domain="${1}";
echo "Testing ${domain}…";
echo ""; # newline
local tmp=$(echo -e "GET / HTTP/1.0\nEOT" \
| openssl s_client -connect "${domain}:443" -servername "${domain}" 2>&1);
if [[ "${tmp}" = *"-----BEGIN CERTIFICATE-----"* ]]; then
local certText=$(echo "${tmp}" \
| openssl x509 -text -certopt "no_aux, no_header, no_issuer, no_pubkey, \
no_serial, no_sigdump, no_signame, no_validity, no_version");
echo "Common Name:";
echo ""; # newline
echo "${certText}" | grep "Subject:" | sed -e "s/^.*CN=//" | sed -e "s/\/emailAddress=.*//";
echo ""; # newline
echo "Subject Alternative Name(s):";
echo ""; # newline
echo "${certText}" | grep -A 1 "Subject Alternative Name:" \
| sed -e "2s/DNS://g" -e "s/ //g" | tr "," "\n" | tail -n +2;
return 0;
else
echo "ERROR: Certificate not found.";
return 1;
fi;
}