Add a load of handy ~/bin scripts
This commit is contained in:
34
bin/ascii
Executable file
34
bin/ascii
Executable file
@@ -0,0 +1,34 @@
|
||||
#!/usr/bin/env python3
|
||||
|
||||
import sys
|
||||
import os.path
|
||||
|
||||
SEP = '='*10
|
||||
|
||||
decode = False
|
||||
tohex = False
|
||||
if os.path.basename(sys.argv[0]) == 'unascii':
|
||||
decode = True
|
||||
if os.path.basename(sys.argv[0]) == 'asciihex':
|
||||
tohex = True
|
||||
|
||||
if len(sys.argv) < 2 or sys.argv[1] == '-':
|
||||
text = sys.stdin.readlines()
|
||||
else:
|
||||
text = sys.argv[1:]
|
||||
|
||||
for i in range(len(text)):
|
||||
if decode:
|
||||
line = text[i]
|
||||
if line.strip() == SEP:
|
||||
pass
|
||||
else:
|
||||
print(chr(int(line)), end='')
|
||||
else:
|
||||
for char in text[i]:
|
||||
if tohex:
|
||||
print('0x' + format(ord(char), '02x'))
|
||||
else:
|
||||
print(ord(char))
|
||||
if i != len(text) - 1:
|
||||
print(SEP)
|
||||
1
bin/asciihex
Symbolic link
1
bin/asciihex
Symbolic link
@@ -0,0 +1 @@
|
||||
ascii
|
||||
43
bin/days-until
Executable file
43
bin/days-until
Executable file
@@ -0,0 +1,43 @@
|
||||
#!/usr/bin/env python3
|
||||
|
||||
formats = (
|
||||
'%Y-%m-%d',
|
||||
'%d.%m.%Y',
|
||||
'%Y-%m',
|
||||
'%d.%m')
|
||||
|
||||
import datetime
|
||||
import sys
|
||||
|
||||
for format in formats:
|
||||
try:
|
||||
day = datetime.datetime.strptime(sys.argv[1], format).date()
|
||||
except ValueError:
|
||||
continue
|
||||
diff = (day - datetime.datetime.now().date()).days
|
||||
print(str(diff) + " days")
|
||||
print()
|
||||
if abs(diff) > 14:
|
||||
print("{} weeks and {} days".format(
|
||||
diff // 7,
|
||||
diff % 7))
|
||||
if abs(diff) > 365:
|
||||
print("{} years, {} weeks and {} days".format(
|
||||
diff // 365,
|
||||
(diff % 365) // 7,
|
||||
(diff % 365 % 7)))
|
||||
print()
|
||||
for i in range(abs(diff) // 7):
|
||||
print("X X X X X X X")
|
||||
if (i+1) % 4 == 0:
|
||||
print()
|
||||
for _ in range(abs(diff) % 7):
|
||||
print("X ", end="")
|
||||
if abs(diff) % 7 != 0:
|
||||
print()
|
||||
|
||||
sys.exit(0)
|
||||
|
||||
print("No format matched:")
|
||||
print()
|
||||
sys.exit(1)
|
||||
24
bin/git-rewrite-author
Executable file
24
bin/git-rewrite-author
Executable file
@@ -0,0 +1,24 @@
|
||||
#!/bin/bash
|
||||
(( $# != 4 )) && { echo "$0 <repo> <oldmail> <newauthor> <newmail>" >&1 ; exit 1 ; }
|
||||
|
||||
_repo="$1"
|
||||
_oldmail="$2"
|
||||
_newauthor="$3"
|
||||
_newmail="$4"
|
||||
|
||||
cd "$_repo" || exit $?
|
||||
|
||||
git filter-branch --force --commit-filter '
|
||||
if [ "$GIT_AUTHOR_EMAIL" = "'"$_oldmail"'" ];
|
||||
then
|
||||
export GIT_AUTHOR_NAME="'"$_newauthor"'";
|
||||
export GIT_AUTHOR_EMAIL="'"$_newmail"'";
|
||||
git commit-tree -S "$@"
|
||||
elif [ "$GIT_COMMITTER_EMAIL" = "'"$_oldmail"'" ];
|
||||
then
|
||||
export GIT_COMMITTER_NAME="'"$_newauthor"'";
|
||||
export GIT_COMMITTER_EMAIL="'"$_newmail"'";
|
||||
git commit-tree -S "$@"
|
||||
fi' \
|
||||
--tag-name-filter cat \
|
||||
-- --branches --tags
|
||||
20
bin/kw
Executable file
20
bin/kw
Executable file
@@ -0,0 +1,20 @@
|
||||
#!/usr/bin/env python3
|
||||
|
||||
import datetime
|
||||
import sys
|
||||
|
||||
formats = (
|
||||
'%Y-%m-%d',
|
||||
'%d.%m.%Y')
|
||||
|
||||
for format in formats:
|
||||
try:
|
||||
day = datetime.datetime.strptime(sys.argv[1], format).date()
|
||||
except ValueError:
|
||||
continue
|
||||
print(day.isocalendar()[1])
|
||||
sys.exit(0)
|
||||
|
||||
print("no format matched:")
|
||||
print("\n".join(" {}".format(f) for f in formats))
|
||||
sys.exit(1)
|
||||
2
bin/mousespam
Executable file
2
bin/mousespam
Executable file
@@ -0,0 +1,2 @@
|
||||
#!/usr/bin/env bash
|
||||
xdotool click --repeat 1000000000 --delay 20ms 1
|
||||
76
bin/mypass
Executable file
76
bin/mypass
Executable file
@@ -0,0 +1,76 @@
|
||||
#!/usr/bin/env python3
|
||||
|
||||
import sys
|
||||
import subprocess
|
||||
import yaml
|
||||
|
||||
PASS = 'pass'
|
||||
|
||||
def run(args):
|
||||
return(subprocess.run(
|
||||
args,
|
||||
stdin=sys.stdin,
|
||||
stdout=sys.stdout,
|
||||
stderr=sys.stderr).returncode)
|
||||
|
||||
def get_stdout(args):
|
||||
return(subprocess.run(
|
||||
args,
|
||||
stdout=subprocess.PIPE).stdout)
|
||||
|
||||
def extract_from_dict(d, k, last=None):
|
||||
if '.' in k:
|
||||
k1, k2 = k.split('.', 1)
|
||||
try:
|
||||
d1 = d[k1]
|
||||
return extract_from_dict(d1, k2, last=k1)
|
||||
except KeyError:
|
||||
print("\"{}\" was not found in the data".format(k))
|
||||
sys.exit(3)
|
||||
else:
|
||||
if not isinstance(d, dict):
|
||||
print("element \"{}\" is not a dictionary".format(last))
|
||||
sys.exit(3)
|
||||
try:
|
||||
return d[k]
|
||||
except KeyError:
|
||||
print("\"{}\" was not found in the data".format(k))
|
||||
sys.exit(3)
|
||||
|
||||
|
||||
def cmd_get(*args):
|
||||
if len(args) == 1:
|
||||
print(get_stdout(['pass', 'show', args[0]]).split(b'\n')[0].decode())
|
||||
return 0
|
||||
|
||||
if len(args) != 2:
|
||||
print("what do you want to get?")
|
||||
return 1
|
||||
|
||||
# get the pass output
|
||||
out = get_stdout(['pass', 'show', args[0]])
|
||||
try:
|
||||
data = list(yaml.safe_load_all(out))[-1]
|
||||
except yaml.scanner.ScannerError as e:
|
||||
print("invalid YAML data: {}".format(str(e)))
|
||||
return 2
|
||||
except IndexError:
|
||||
print("invalid YAML data: no YAML document found")
|
||||
return 2
|
||||
|
||||
if not isinstance(data, dict):
|
||||
print("invalid YAML data, not a dict")
|
||||
return 2
|
||||
|
||||
keydata = extract_from_dict(data, args[1])
|
||||
if isinstance(keydata, list) or isinstance(keydata, dict):
|
||||
print(yaml.safe_dump(keydata, default_flow_style=False).strip())
|
||||
else:
|
||||
print(keydata)
|
||||
|
||||
cmds = ['get']
|
||||
|
||||
if len(sys.argv) == 1 or sys.argv[1] not in cmds:
|
||||
sys.exit(run([PASS] + sys.argv[1:]))
|
||||
else:
|
||||
sys.exit(globals()['cmd_' + sys.argv[1]](*sys.argv[2:]))
|
||||
62
bin/nato
Executable file
62
bin/nato
Executable file
@@ -0,0 +1,62 @@
|
||||
#!/usr/bin/env python3
|
||||
|
||||
import sys
|
||||
|
||||
hash = {
|
||||
'A': 'Alpha',
|
||||
'B': 'Bravo',
|
||||
'C': 'Charlie',
|
||||
'D': 'Delta',
|
||||
'E': 'Echo',
|
||||
'F': 'Foxtrot',
|
||||
'G': 'Golf',
|
||||
'H': 'Hotel',
|
||||
'I': 'India',
|
||||
'J': 'Juliett',
|
||||
'K': 'Kilo',
|
||||
'L': 'Lima',
|
||||
'M': 'Mike',
|
||||
'N': 'November',
|
||||
'O': 'Oscar',
|
||||
'P': 'Papa',
|
||||
'Q': 'Quebec',
|
||||
'R': 'Romeo',
|
||||
'S': 'Sierra',
|
||||
'T': 'Tango',
|
||||
'U': 'Uniform',
|
||||
'V': 'Victor',
|
||||
'W': 'Whiskey',
|
||||
'X': 'Xray',
|
||||
'Y': 'Yankee',
|
||||
'Z': 'Zulu',
|
||||
'0': 'Zero',
|
||||
'1': 'One',
|
||||
'2': 'Two',
|
||||
'3': 'Tree',
|
||||
'4': 'Fower',
|
||||
'5': 'Fife',
|
||||
'6': 'Six',
|
||||
'7': 'Seven',
|
||||
'8': 'Eight',
|
||||
'9': 'Niner',
|
||||
'-': 'Dash',
|
||||
'.': 'Stop',
|
||||
}
|
||||
|
||||
if len(sys.argv) < 2 or sys.argv[1] == '-':
|
||||
text = [line.strip() for line in sys.stdin.readlines()]
|
||||
else:
|
||||
text = sys.argv[1:]
|
||||
|
||||
for i in range(len(text)):
|
||||
for char in text[i].upper():
|
||||
if char in hash.keys():
|
||||
print(hash[char])
|
||||
elif char == ' ':
|
||||
print()
|
||||
else:
|
||||
print(">> " + char)
|
||||
if i != len(text) - 1:
|
||||
print()
|
||||
print("===")
|
||||
print()
|
||||
6
bin/pprint
Executable file
6
bin/pprint
Executable file
@@ -0,0 +1,6 @@
|
||||
#!/usr/bin/env python
|
||||
|
||||
import sys
|
||||
import pprint
|
||||
|
||||
pprint.pprint(eval(sys.stdin.read()))
|
||||
8
bin/randmac
Executable file
8
bin/randmac
Executable file
@@ -0,0 +1,8 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
_max=${1:-6}
|
||||
for i in $(seq $_max) ; do
|
||||
printf '%02X' $[RANDOM%256]
|
||||
(( $i != $_max )) && printf ':'
|
||||
done
|
||||
printf '\n'
|
||||
44
bin/since
Executable file
44
bin/since
Executable file
@@ -0,0 +1,44 @@
|
||||
#!/usr/bin/env python3
|
||||
|
||||
import datetime
|
||||
import sys
|
||||
|
||||
USAGE="""Usage: {program} PATH_TO_FILE""".format(program=sys.argv[0])
|
||||
|
||||
def die(message, code=1):
|
||||
print(message)
|
||||
sys.exit(code)
|
||||
|
||||
def die_usage(code=1):
|
||||
die(USAGE, code)
|
||||
|
||||
def read_date_from_file(path):
|
||||
text = open(path).readline().strip()
|
||||
try:
|
||||
time = datetime.datetime.strptime(text, '%Y-%m-%d')
|
||||
except ValueError as e:
|
||||
die(e)
|
||||
return time
|
||||
|
||||
def main(argv):
|
||||
if len(argv) < 2:
|
||||
die_usage()
|
||||
last = read_date_from_file(argv[1])
|
||||
now = datetime.datetime.now()
|
||||
diff = now - last
|
||||
days = diff.days
|
||||
#hours = diff.seconds // (60 * 60)
|
||||
if days == 1:
|
||||
msg = "1 day"
|
||||
else:
|
||||
msg = "{days} days".format(days=days)
|
||||
|
||||
#msg += " "
|
||||
#if hours == 1:
|
||||
# msg += "1 hour "
|
||||
#else:
|
||||
# msg += "{hours} hours ".format(hours=hours)
|
||||
|
||||
print(msg)
|
||||
|
||||
main(sys.argv)
|
||||
1
bin/unascii
Symbolic link
1
bin/unascii
Symbolic link
@@ -0,0 +1 @@
|
||||
ascii
|
||||
Reference in New Issue
Block a user