Personal tools: simple and useful.
Notice: some programs here were hard-coded for my own convenience. However, you can easily tailor constants to fit your jobs.
Just add the active.sh into your ~/.zshrc:
source /path/to/tools/active.shThen all tools wil be ready.
Convert a date (e.g. 23-12-31) to a port number (e.g. 23721). The process of transformation is reversible.
Usage:
protnum [YY-MM-DD]
Default: todayA command to fill ./.gitignore with templates from github.com/github/gitignore.
Usage:
$ makegitignore [-h] [--default-envs] [--favorite] [--macos]
[--jetbrains] [--visualstudiocode] [--virtualenv]
[--c] [--go] [--python] [--node] [--lang LANG]
[--env ENV]Run makegitignore --help for more details.
E.g.
$ makegitignore -d --go --lang Swift --lang TeX --env WindowsAny text file to UTF-8.
f2utf8.py [-h] [-o OUTFILE] file
convert file to utf-8 encoded
positional arguments:
file
optional arguments:
-h, --help show this help message and exit
-o OUTFILE, --outfile OUTFILEechoargs print 3 lines:
- the name of program (
argv[0]) - the number of positional parameters (
len(argv[1:])) - the positional parameters (
argv[1:])
example:
$ echoargs hello world
/tools/bin/echoargs
2
hello world[SUDO] Make spotlight ignoring folders:
ignore_folders_in_spotlight [-h] [-n NAME] [-s SPOTLIGHT_PLIST_PATH] path
Ignore a path in Spotlight
positional arguments:
path Path to ignore
optional arguments:
-h, --help show this help message and exit
-n NAME, --name NAME Name of the path to ignore
-s SPOTLIGHT_PLIST_PATH, --spotlight-plist-path SPOTLIGHT_PLIST_PATH
Path to the Spotlight pliste.g. ignore all node_modules:
ignore_folders_in_spotlight -n node_modules /A simple static http server with CORS allowed:
httpserve [-h] [--cgi] [--bind ADDRESS] [--directory DIRECTORY] [port]
positional arguments:
port specify alternate port (default: 8000)
optional arguments:
-h, --help show this help message and exit
--cgi run as CGI server
--bind ADDRESS, -b ADDRESS
specify alternate bind address (default: all interfaces)
--directory DIRECTORY, -d DIRECTORY
specify alternate directory (default: current directory)e.g.
httpserve -d ./myweb 8000A golang alternative to httpserve, with better performance (maybe) and more features (e.g. 206).
httpstatic -d . -l :8080Serving static files from a directory (.) over HTTP (:8080) with CORS allowed.
Notice the arguments are different from httpserve.
cd ./httpstatic && makeThis script is used to check whether a CF tunnel is alive.
cloudflareTunnelHealth <tunnel name or id>Stdout:
- "OK: ..." if tunnel is all right
- "ERROR ..." if tunnel dead or program error
Return value:
- 0: (200) OK: tunnel alive
- 1: (400) argv error
- 2: (417) ERROR: tunnel dead
- 3: (500) unexpected error
Send emails.
emsend [-f SENDER] [-p PASSWORD] [-m SMTP_HOST] [-t RECEIVERS]
[-s SUBJECT] [-c CONTENT] [-a ATTACHMENTS] [-S SIGNATURE]
Send email.
optional arguments:
-h, --help show this help message and exit
-f SENDER, --from SENDER
Sender email address. Default: None (set by MYEMAIL_SENDER)
-p PASSWORD, --password PASSWORD
Sender email password. Default: None (set by MYEMAIL_PASSWORD)
-m SMTP_HOST, --smtp SMTP_HOST
SMTP host. Default: None (set by MYEMAIL_SMTP_HOST)
-t RECEIVERS, --to RECEIVERS
Receiver email address. Multiple receivers can be specified by
multiple -t options: -t receiver1 -t receiver2
-s SUBJECT, --subject SUBJECT
subject, default: "No subject"
-c CONTENT, --content CONTENT
content in plain text. Default: read from stdin
-a ATTACHMENTS, --attachment ATTACHMENTS
attachment file path. Multiple attachments can be specified by
multiple -a options: -a attachment1 -a attachment2
-S SIGNATURE, --signature SIGNATURE
signature, default: "<sender> <current time>"example:
emsend -f foo@bar.com -p greetPassW0rd -m smtp.bar.com -t fuzz@buzz.com -s 'A test email'
<content from stdin>export MYEMAIL_SENDER=foo@bar.com
export MYEMAIL_PASSWORD=greetPassW0rd
export MYEMAIL_SMTP_HOST=smtp.bar.com
emsend -t fuzz@buzz.com -a hello.jpg -c hello.txt
emsend --help | emsend -t fuzz@buzz.com -s 'emsend help'A python client used to update dynamic DNS entries on Cloudfalre.
usage: cfddns [-h] --token TOKEN --zone ZONE --name NAME --type TYPE [--content CONTENT | --autoconf-tmp-ipv6]
--proxied [--verbose]
optional arguments:
-h, --help show this help message and exit
--verbose verbose output.
Cloudflare configure:
--token TOKEN bearer token
--zone ZONE zone identifier
Record to be updated:
--name NAME DNS record name (or @ for the zone apex) in Punycode. Example: example.com
--type TYPE Record type. Example: AAAA
--content CONTENT A valid IPv6 address. Example: 2400:cb00:2049::1
--autoconf-tmp-ipv6 Use an autoconf temporary IPv6 address from ifconfig as content.
--proxied Whether the record is receiving the performance and security benefits of Cloudflare.
References:
- DDNS: https://www.cloudflare.com/learning/dns/glossary/dynamic-dns/
- DNS Record Detail API: https://developers.cloudflare.com/api/operations/dns-records-for-a-zone-dns-record-details
- Update DNS Record API: https://developers.cloudflare.com/api/operations/dns-records-for-a-zone-update-dns-record
no longer maintained
This script helps to start a docker demon by running minikube start -p no-k8s-docker and setting up docker env: eval $(minikube -p no-k8s-docker docker-env).
Usage:
$ minidocker {start,stop}Boot Fish from Zsh (Zsh as a login shell setup envs, start fish, and exit.)
This is not included in active.(fi)sh.
All kinds of clutter. Read the source code before using.
Very personal tools that are not suitable for public.