Skip to content
/ rc Public

look ma, i'm putting my personal preferences up on the internet for all to see!

Notifications You must be signed in to change notification settings

notwa/rc

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

obligatory personal dotfiles repository

(plus some little shell scripts)

quick install

this archive is always up-to-date with git.

# with curl:
cd && curl -L https://github.com/notwa/rc/archive/master.tar.gz | tar zx && mv rc-master rc && rc/install
# with wget:
cd && wget -O - https://github.com/notwa/rc/archive/master.tar.gz | tar zx && mv rc-master rc && rc/install

experimental install

this archive is only updated once a day.

# one time:
gpg --locate-key rc@glorp.wang
# many times:
cd && curl rc.glorp.wang | gpg --yes -o rc.tar -d - && tar xf rc.tar && rc/install

curl can be replaced by wget -O- or http or even burl. note that you can't pipe gpg directly into tar, because because doing so would skip the signature being checked.

shell compatibility

the following shells are taken into consideration, ordered from most to least compatible:

  • zsh
  • bash
  • dash
  • ash (busybox)

refer to the compatibility table for specifics.

NOTE: everything below this line is overwritten and automatically regenerated.

shell functions

validate the number of arguments in a function.

# usage: myfunc() { argc $# -(eq|le|ge) [0-9] "$0" || return; }

myfunc() {
    # use one of the following:
    argc $# -eq N "$0" || return
    argc $# -le N "$0" || return
    argc $# -ge N "$0" || return
    # where N is an integer between 0 and 9.
}

perform arithmetic using the shell and display the result. see also hex and bin. this example requires zsh:

% db=6
% noglob arith 10**(db/20.)
1.9952623149688795

backup files by creating copies and appending ".bak" to their names. this calls itself recursively to avoid clobbering existing backups.

$ touch -d '2001-12-25 16:30:00' butts
$ bak butts
$ touch butts
$ bak butts
$ ls -l
total 0
-rw-r--r-- 1 notwa None 0 Aug  1 08:02 butts
-rw-r--r-- 1 notwa None 0 Aug  1 08:02 butts.bak
-rw-r--r-- 1 notwa None 0 Dec 25  2001 butts.bak.bak

backup files by appending their timestamps given by now.

$ touch -d '2001-12-25 16:30:00' butts
$ baknow butts
$ baknow butts
cp: overwrite 'butts.2001-12-26_01800000.bak'? n
$ ls -l
total 0
-rw-r--r-- 1 notwa None 0 Dec 25  2001 butts
-rw-r--r-- 1 notwa None 0 Dec 25  2001 butts.2001-12-26_01800000.bak

backup files by copying each and appending the current date-time, irrespective of when the files were modified or created.

$ touch -d '2001-12-25 16:30:00' butts
$ baks butts
$ baks butts
$ ls -l
total 0
-rw-r--r-- 1 notwa None 0 Dec 25  2001 butts
-rw-r--r-- 1 notwa None 0 Dec 25  2001 butts.21-08-01_14-54-07.bak
-rw-r--r-- 1 notwa None 0 Dec 25  2001 butts.21-08-01_14-54-09.bak

perform arithmetic using the shell and display the result as an unsigned 8-bit integer in binary. see also arith and hex.

$ bin 123
01111011

turn bash into a makeshift HTTP client. inspired by hackshell.sh. also works in most other shells thanks to netcat.

minimal/minified version: https://eaguru.guru/t/burl.sh (441 bytes)

$ burl httpbin.org/get

HTTP/1.1 200 OK
Date: Tue, 01 Jul 2024 00:00:00 GMT
Content-Type: application/json
Content-Length: 192
Connection: close
Server: gunicorn/19.9.0
Access-Control-Allow-Origin: *
Access-Control-Allow-Credentials: true

{
  "args": {},
  "headers": {
    "Host": "httpbin.org",
    "X-Amzn-Trace-Id": "Root=1-12345678-deadfadefeedfacebeefcafe"
  },
  "origin": "0.0.0.0",
  "url": "http://httpbin.org/get"
}

list directories in descending order by the number of files in them, counted recursively.

$ cd && busiest | head -n3
144181 src
48840 work
21042 play

sort lines by length. several implementations are provided.

run a command through 11 different shells.

only returns false when no arguments are given.

this command is no longer relevant. please use zig instead. zig can cross-compile C code in a single command. here's how to compile a program for a Raspberry Pi 2 Model B:

printf %s\\n '#include <stdio.h>' 'int main() { puts("yo waddup"); }' >hello.c
zig cc --target=arm-linux-gnueabihf -mcpu=cortex_a7 -o hello -Os -s -Wall hello.c
file hello

hello: ELF 32-bit LSB executable, ARM, EABI5 version 1 (SYSV), dynamically linked, interpreter /lib/ld-linux-armhf.so.3, for GNU/Linux 2.0.0, stripped

display a simple yes-or-no prompt and return 0-or-1 respectively.

$ confirm && echo yay || echo nay
Continue? [y/N] y
yay
$ confirm && echo yay || echo nay
Continue? [y/N] n
nay

a real world example:

$ g1 && confirm && git commit -a --amend --no-edit
daf84e3 document a ton of stuff
Continue? [y/N] y
[master 92bdf76] document a ton of stuff
 Date: Sun Aug 1 09:27:25 2021 -0700
 20 files changed, 406 insertions(+), 29 deletions(-)

compute the number of days since a given date.

$ days 'January 1 1970'
18838

given a list of directories, update the last-modified timestamp of each argument to that of the most recent file that it contains.

note that files are found recursively, but only the outermost directory (the one specified by argument) has its timestamp updated. symlinks are followed. .git subdirectories are skipped over. the timestamps of subdirectories are ignored.

copy a directory, but make hard/softlinks for identical files.

generate a markdown file out of docstrings in shell scripts.

TODO: describe. i have a rough outline written in my scrap file.

wrap around $EDITOR to run it as root if necessary. this still needs some work to detect root-owned directories.

$ e /etc/sudoers
[sudo] password for notwa: 

NOTE: there also exists an e(1) program provided by the e-wrapper package that i don't use.

TODO: document.

print arguments joined by spaces to stderr without parsing anything.

$ echo -e 'this\nthat' those
this
that those
$ echo2 -e 'this\nthat' those
-e this\nthat those

open a single directory in explorer.exe, defaulting to $PWD.

parse command-line arguments, mapping short-flags to variable names.

NOTE: the API is still experimental and will undergo major changes.

select a file from a given or current directory using fzy.

send diagnostic telemetry to a central server via notice. currently, this is only used for reporting when servers come online.

convert a markdown file to HTML in the style of GitHub. note that this uses GitHub's API, so it requires internet connectivity.

this script utilizes the CSS provided at sindresorhus/github-markdown-css.

~/sh/ghmd < ~/rc/README.md > ~/rc/README.html

download a file from my site and verify its integrity by its minisign signature.

invoke grep with -oP.

NOTE: there also exists a grop(1) program provided by the grop package that i don't use.

grop for IPv4s.

like which, but faster. results go in $REPLY, unset if none.

print the result of which if the program is found, else simply return 1.

export SOLVER="$(have kissat || have picosat || have cadical || have minisat)"

perform arithmetic using the shell and display the result as an unsigned 32-bit integer in hexadecimal. see also arith and bin.

$ hex 0x221EA8-0x212020
0000FE88

NOTE: there also exists a hex(1) program provided by the basez package that i don't use.

pipe one command through another, so you can still pass arguments to the former.

this is mainly useful for aliases. 99% of the time you'll use this with less.

$ alias ll="ify less ls -ACX --group-directories-first --color=force"
$ ll /etc

return 0 if the directory given by argument is empty.

return 0 if a given website returns a 2xx HTTP code.

$ isup google.com && echo yay || echo nay
yay
$ isup fdhafdslkjgfjs.com && echo yay || echo nay
nay

join every other line.

list the contents of an archive file in one of many formats.

borrowed from prezto.

mimic certain features of sudo for systems without it installed. as it stands, this mostly just handles some environment variables.

try this: maybesudo -u "$USER" printenv

check if the current minute is divisible by a given number, and optionally execute a command if it is. if a command is given, either execute the command and return its exit value, or execute nothing and return 0. if a command is omitted, either return 0 on the minute, or return 1.

note that a "minute" is relative to the seconds since the epoch, not the minute of the hour. this ensures that commands will run roughly every N minutes, regardless of the minute hand on the clock.

note that minutemaid 1 will always return 0, and minutemaid 1 command will always execute the command, since every integral interval is evenly divisible by 1. minutemaid 0, and any negative interval, is an error.

# crontab usage:
* * * * * minutemaid 9 ~/work/do_my_bidding # runs every nine minutes
# loop usage:
until minutemaid 9; do sleep 5; done
echo the wait is finally over; date
# improper usage:
while minutemaid 1; do sleep 1; done
echo this will never happen

this is watch(1) loosely reimplemented as a shell script.

usage: monitor [-fs] [-n {period}] {command} [{args...}]

NOTE: there also exists monitor(1) programs provided by the 389-ds-base and dmucs packages that i don't use.

strip C-like comments; both multi-line and single-line.

act like echo2, but use a bright color to stand out more.

NOTE: there also exists a note(1) program provided by the note package that i don't use.

send messages or files to gotify and/or discord.

print a date-time (UTC) in a sortable format. this takes a date or file as an argument, else it defaults to the current time.

$ now
2019-05-27_35083906
$ now ~/sh/monitor
2017-03-14_82387259
$ now '@1234567890'
2009-02-13_84690000

display and order installed pacman packages by their filesize ascending, and their sum. requires expac.

$ pacbm | head -n -1 | tail -2
  204.78M clang
  235.44M linux-firmware

pause — the companion script of confirm.

$ pause
Press any key to continue
$ 

conditionally set executable permissions on each of its arguments.

flags:

  • -a -- automatic: skip any files whose contents do not begin with with one of several signatures. this does not affect directories.
  • -m -- manual: turn off automatic mode. (default)
  • -e -- everything: consider both regular files and directories. (default)
  • -f -- files: skip any arguments that are not regular files.
  • -d -- directories: skip any arguments that are not directories.
  • -n -- dry-run: don't actually change anything.
  • -v -- verbose: print changes before making them.

the -e, -f, and -d flags all override one another, and any of them can be combined with -a. arguments that are neither regular files nor directories (such as symlinks) are always skipped. arguments that are already executable by the current user are skipped. arguments that do not appear to refer to an existing file are passed through to chmod. directories are never recursed.

dump all the #defines that $CC $CPPFLAGS $CFLAGS $LDFLAGS would result in.

$ pre | grep char
#define __UINT_LEAST8_TYPE__ unsigned char
#define __UINT8_TYPE__ unsigned char
#define __INT8_TYPE__ signed char
#define __INT_LEAST8_TYPE__ signed char
#define __INT_FAST8_TYPE__ signed char
#define __UINT_FAST8_TYPE__ unsigned char

handle dependencies within the ~/sh/ directory.

this function contains more comments than code, so you should read it.

display and order processes by their memory usage ascending, and their sum.

$ psbm | head -n -1 | tail -2
  185.08M    1163 chromium
  199.95M    1060 chromium

rot13 with numbers rotated as well.

$ rot13 <<< abc123
nop678

NOTE: there also exists rot13(1) programs provided by the bsdgames and hxtools packages that i don't use.

WIP

perform sort | uniq -c | sort -n, preferring GNU awk when available.

scrambles text in a predictable way using regex.

sacbremls ttex in a pdrceailtbe way unsig reegx.

TODO: consider renaming because scramble(1) already exists.

comment out text from stdin and wrap it in a markdown blockquote for docstrings. this contains some extra logic for handling already-commented and already-quoted text. this allows shcom to be used with vim's visual selections to update existing code examples.

as a simple example, echo hey | shcom produces, verbatim:

hey

(perl 5) invoke the first shell found from a list of shells as an interactive, non-login shell. arguments are ignored.

highlight adjacent lines up to the first inequivalent character.

view specific columns of text.

view specific columns of text. this version of slit uses tabs for its field separators.

sort lines numerically by IPv4 segments.

invoke a command, silencing stdout and stderr unless the command fails.

NOTE: don't use stfu for handling sensitive data or commands! use it for 7zip.

note that the tail commands in the example below are from stfu itself; they are echoed to reveal the temp paths for any further investigation.

$ touch butts
$ STFU_TAIL=5
$ stfu 7z a butts.7z butts
$ stfu 7z a butts.7z asses
command failed with exit status 1:
7z a butts.7z asses

$ tail -n 5 /tmp/stfu.CoJ0vmJsqA/out_1627942118
Scan WARNINGS for files and folders:

asses : The system cannot find the file specified.
----------------
Scan WARNINGS: 1

$ tail -n 5 /tmp/stfu.CoJ0vmJsqA/err_1627942118

WARNING: The system cannot find the file specified.
asses


reconfigure your terminal's color scheme using a preset for recolor.

subdue colors

compute the summation of its arguments without forking processes. this relies on the shell's built-in arithmetic operators.

$ sum 1 2 3
6

TODO: consider renaming because sum(1) already exists.

output a given number of bytes from /dev/random.

$ trash 10 | xxp
3A A5 4F C7 6D 89 E7 D7 F7 0C

TODO: consider renaming because trash(1) already exists.

truncate text to fit within your terminal using the unicode character .

$ echo $COLUMNS
84
$ seq 1 100 | tr '\n' ' ' | trunc
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…

extract the contents of an archive file in one of many formats.

borrowed from prezto.

join paragraphs into one line each.

transform the contents of a variable to lowercase.

transform the contents of a variable to uppercase.

wat — a better and recursive which/whence. for zsh only.

written by leah2.

clear the screen and its scrollback, then print a high-contrast horizontal line. using this, you'll know with absolute certainty that you're looking at the top of your history, and that your terminal's scrollback didn't cap out and eat text.

TODO: rename because wipe(1) already exists.

this is a personal rewrite of which from Debian. the original version didn't run on certain shells, and inherited inconsistent behaviors from getopts. the silent (-s) flag from Ubuntu has been added.

act like xxd -p, but nicely formatted.

TODO: support -r (reverse) argument.

$ xxd -p ~/rc/install | head -n2
23212f7573722f62696e2f656e762073680a232074686973207363726970
7420697320636f6d70617469626c65207769746820666f6c6c6f77696e67
$ xxp ~/rc/install | head -n2
23 21 2F 75 73 72 2F 62 69 6E 2F 65 6E 76 20 73
68 0A 23 20 74 68 69 73 20 73 63 72 69 70 74 20

list files verbosely, fancily, ordered, but not recursively.

invoke git clone with --single-branch --depth 1.

invoke git's diff subcommand with fewer lines of context.

invoke gd to diff a commit from its parent. the commit defaults to "HEAD".

invoke ripgrep without respecting .gitignore files.

be a little smarter with curl. (HTTPS only)

reverse the 4-byte endianness of a single file. this is an in-place operation!

invoke rsync suitably for creating virtually indistinguishable copies of files.

TODO: rename because POSIX.1-2024 reserves this name.

align tab-delimited fields in stdin.

play Dungeon Crawl: Stone Soup through ssh on the akrasiac server.

play Dungeon Crawl: Stone Soup through ssh on the develz server.

use git's diff subcommand for general diffing.

columnize text by using git's column subcommand.

TODO: consider renaming because gc(1) already exists.

count files in the current directory, including files found recursively.

count and sort file extensions in the current directory, including files found recursively.

strip single-line C-like and shell-like comments.

extract strings comprised of basic ASCII or Japanese codepoints.

add a Byte-Order Mark to a file.

strip unprintable and non-ASCII characters.

print every line twice.
print every line twice.

NOTE: there also exists a double(1) program provided by the plotutils package that i don't use.

convert katakana codepoints to their equivalent hiragana.

this is occasionally useful when translating debug text from ancient games.

make the freakin' package!

make the freakin' gem!

log on again to refresh your unix groups, etc.

invoke sha1sum but only output the first 7 characters of each hash, a la git.

copy files in a plain way using rsync. affected by umask.

display all combinations of foreground and background terminal colors. this only includes the basic 16-color palette.

terminal colors

print all 256 colors that are available on most terminals.

miscellaneous

return 0, ignoring arguments.

silence stdout.

silence stderr.

swap stdout and stderr. uses fd 3 as an intermediary.

reload zsh by wiping temp files, recompiling rc files, and replacing the current process with a new zsh process.

return 0, ignoring arguments.

TODO: respect initctl like in .zshrc.

print each argument on its own line.

invoke hash -r.

append a directory to $PATH if it isn't already present.

prepend entries to $PATH and remove their duplications.

compatibility table

script preference ash bash dash ksh mksh oksh osh posh yash zsh
aliases false ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️
argc sh ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️
arith zsh ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️
arrays false ✔️ ✔️ ✔️ ✔️ ✔️ ✔️
askey sh ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️
asn bash ✔️ ✔️ ✔️
autosync zsh ✔️
bak sh ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️
baknow sh ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️
baks sh ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️
bin zsh ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️
burl bash ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️
busiest zsh ✔️
bylen sh ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️
checkweb sh ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️
clash sh ✔️ ✔️ ✔️ ✔️
compile zsh ✔️
confirm sh ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️
countdiff sh ✔️ ✔️ ✔️ ✔️
cutv zsh ✔️
dated sh ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️
days sh ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️
decently sh ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️
dedupe sh ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️
dfu sh ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️
document dash ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️
e sh ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️
ea sh ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️
echo2 sh ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️
explore sh ✔️ ✔️ ✔️ ✔️
feud sh ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️
ff sh ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️
flaunt sh ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️
ghmd sh ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️
glug dash ✔️ ✔️ ✔️ ✔️ ✔️
grab sh ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️
grop sh ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️
grop4 sh ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️
has sh ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️
have sh ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️
hex zsh ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️
ify sh ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️
is_empty bash ✔️ ✔️ ✔️ ✔️
isup sh ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️
join2 sh ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️
lepton sh ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️
lsarchive zsh ✔️
maybesudo sh ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️
minutemaid dash ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️
monitor zsh ✔️
noccom sh ✔️ ✔️ ✔️ ✔️
note sh ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️
notice sh ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️
now sh ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️
obtain sh
pacbm sh ✔️ ✔️ ✔️ ✔️
pause sh ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️
permit sh ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️
pre sh ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️
preload false ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️
psbm sh ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️
recolor sh ✔️ ✔️ ✔️ ✔️
recombine false ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️
rot13 sh ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️
running sh ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️
scount sh ✔️ ✔️ ✔️ ✔️
scramble sh ✔️ ✔️ ✔️ ✔️
shcom sh ✔️ ✔️ ✔️ ✔️
shelly perl n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a
similar sh ✔️ ✔️ ✔️ ✔️
slit dash ✔️ ✔️ ✔️ ✔️
slitt dash ✔️ ✔️ ✔️ ✔️
sortip sh ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️
stfu sh ✔️ ✔️ ✔️ ✔️
subdue sh ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️
sum sh ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️
trash sh ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️
trunc sh ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️
unarchive zsh ✔️
unwrap sh ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️
v_domap sh ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️
v_lower sh ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️
v_upper sh ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️
wat zsh ✔️
wipe sh ✔️ ✔️ ✔️ ✔️
witch sh ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️
xxp sh ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️
zzz false ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️

About

look ma, i'm putting my personal preferences up on the internet for all to see!

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published