@centricle/whyis 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Centricle LLC
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,128 @@
1
+ # whyis
2
+
3
+ Why is it called that? A CLI etymology reference for shell commands and tools.
4
+
5
+ Every name has a story. Some are acronyms, some are jokes, some are named after people or dogs. This is the encyclopedia.
6
+
7
+ ## Vintage Unix / GNU
8
+
9
+ | Command | Stands For / Meaning | Origin / Lore | Source |
10
+ |---------|----------------------|---------------|--------|
11
+ | `ar` | Archiver | The original Unix file archiver, predating tar — still quietly used today to build static libraries (.a files). | [Wikipedia](https://en.wikipedia.org/wiki/Ar_%28Unix%29) |
12
+ | `awk` | Aho, Weinberger, and Kernighan | Named after its three Bell Labs creators — pronounced like the seabird 'auk,' which graces the cover of The AWK Programming Language. | [Wikipedia](https://en.wikipedia.org/wiki/AWK) |
13
+ | `biff` | Named after a dog | Named after Heidi Stettner's dog at UC Berkeley who barked at the mailman — a mail notification command named after a literal mail alert system. | [Wikipedia](https://en.wikipedia.org/wiki/Biff_%28Unix%29) |
14
+ | `cat` | Catenate | Named after 'catenate,' not 'concatenate' — Kernighan and Pike called it 'a slightly obscure synonym.' | [Wikipedia](https://en.wikipedia.org/wiki/Cat_%28Unix%29) |
15
+ | `cc` | C Compiler | The simplest possible abbreviation for the language that rewrote Unix itself — appeared in Version 3 Unix alongside C. | [Wikipedia](https://en.wikipedia.org/wiki/C_%28programming_language%29) |
16
+ | `cd` | Change Directory | So fundamental it's a shell builtin, not an external program — a child process can't change the parent's directory. | [Wikipedia](https://en.wikipedia.org/wiki/Cd_%28command%29) |
17
+ | `chmod` | Change Mode | The 'mode' is the permission bitmask — rwxrwxrwx or its octal shorthand, inherited from Multics access control. | [Wikipedia](https://en.wikipedia.org/wiki/Chmod) |
18
+ | `chown` | Change Owner | On most modern systems, only root can chown — letting users give away files would break disk quotas and audit trails. | [Wikipedia](https://en.wikipedia.org/wiki/Chown) |
19
+ | `cp` | Copy | Part of Version 1 Unix (1971) — because 'copy' was four letters too many for Thompson and Ritchie. | [Wikipedia](https://en.wikipedia.org/wiki/Cp_%28Unix%29) |
20
+ | `cron` | From Greek 'chronos' (time) (?) | Named for the Greek personification of time — 'Command Run On Notice' is a backronym. The true etymology is genuinely disputed. | [Wikipedia](https://en.wikipedia.org/wiki/Cron) |
21
+ | `curl` | Client for URLs | Daniel Stenberg built it in 1996 to fetch currency exchange rates for an IRC bot — was first 'httpget', then 'urlget', then 'curl.' | [curl.se](https://curl.se/docs/history.html) |
22
+ | `cut` | Cut (to extract a section) | Gottfried Luderer wrote it at Bell Labs for System III — BSD didn't pick it up until 4.3BSD-Reno around 1990, nearly a decade late. | [Wikipedia](https://en.wikipedia.org/wiki/Cut_%28Unix%29) |
23
+ | `dd` | Data Definition (?) | Dennis Ritchie confirmed it alludes to IBM JCL's DD cards — Eric Raymond called the JCL-style syntax 'clearly a prank.' | [Wikipedia](https://en.wikipedia.org/wiki/Dd_%28Unix%29) |
24
+ | `df` | Disk Free | Version 1 Unix (1971) — one of the oldest surviving commands, born when monitoring a few megabytes was life or death. | [Wikipedia](https://en.wikipedia.org/wiki/Df_%28Unix%29) |
25
+ | `diff` | Differences | Douglas McIlroy and James Hunt wrote it for V5 Unix (1974) — McIlroy's 1976 algorithm paper became the foundation of all file comparison. | [Wikipedia](https://en.wikipedia.org/wiki/Diff) |
26
+ | `du` | Disk Usage | The complement to df — df tells you what's free, du tells you who's hogging it. | [Wikipedia](https://en.wikipedia.org/wiki/Du_%28Unix%29) |
27
+ | `ed` | Editor | Ken Thompson wrote it in August 1969 as one of the first three Unix programs — assembler, editor, shell — still the POSIX standard editor. | [Wikipedia](https://en.wikipedia.org/wiki/Ed_%28text_editor%29) |
28
+ | `emacs` | Editing MACroS | Born in 1976 as TECO macros at MIT — so many macros ending in MAC/MACS accumulated that Stallman and Steele unified them. | [Wikipedia](https://en.wikipedia.org/wiki/Emacs) |
29
+ | `ex` | Extended (editor) | Bill Joy and Chuck Haley extended 'em' (editor for mortals) — George Coulouris had deemed ed's interface fit only for 'immortals.' | [Wikipedia](https://en.wikipedia.org/wiki/Ex_%28text_editor%29) |
30
+ | `find` | Find (to locate files) | Dick Haight wrote it for V5 Unix as part of the Programmer's Workbench, designed to pair with cpio for backup-and-restore. | [Wikipedia](https://en.wikipedia.org/wiki/Find_%28Unix%29) |
31
+ | `grep` | Global Regular Expression Print | From the ed command g/re/p — Ken Thompson extracted it into a standalone tool overnight. | [Wikipedia](https://en.wikipedia.org/wiki/Grep) |
32
+ | `gzip` | GNU zip | Gailly and Adler wrote it in 1992 as a free replacement for 'compress' after Unisys started enforcing LZW patents. | [Wikipedia](https://en.wikipedia.org/wiki/Gzip) |
33
+ | `head` | Head (the beginning of something) | Many early Unix versions lacked it entirely, using 'sed 10q' instead — head was a convenience that arrived fashionably late. | [Wikipedia](https://en.wikipedia.org/wiki/Head_%28Unix%29) |
34
+ | `kill` | Kill (terminate a process) | A misnomer — it actually sends any signal, not just SIGKILL, but the name stuck because stopping runaway processes was the common case. | [Wikipedia](https://en.wikipedia.org/wiki/Kill_%28command%29) |
35
+ | `ld` | Link Editor (or Loader) (?) | The dual meaning reflects the tool's dual role: linking object files together and loading external symbols for resolution. | [Wikipedia](https://en.wikipedia.org/wiki/Linker_%28computing%29) |
36
+ | `lex` | Lexical Analyzer Generator | Written by Mike Lesk and Eric Schmidt (yes, that Eric Schmidt) in 1975 — turns regexes into C code for tokenizing. | [Wikipedia](https://en.wikipedia.org/wiki/Lex_%28software%29) |
37
+ | `ln` | Link | Creates additional names for the same inode — the reason Unix files can have multiple identities since the PDP-7 days. | [Wikipedia](https://en.wikipedia.org/wiki/Ln_%28Unix%29) |
38
+ | `ls` | List | Inherited from Multics where 'listf' became 'list' became 'ls' — each generation dropped letters. | [Wikipedia](https://en.wikipedia.org/wiki/Ls) |
39
+ | `make` | Make (to build/construct) | Stuart Feldman wrote it over a weekend in 1976 after Steve Johnson wasted a morning debugging a correct program that hadn't been recompiled. | [Wikipedia](https://en.wikipedia.org/wiki/Make_%28software%29) |
40
+ | `man` | Manual | The first Unix Programmer's Manual was published in 1971 — 'man' made it available on-line (meaning interactive, not internet). | [Wikipedia](https://en.wikipedia.org/wiki/Man_page) |
41
+ | `mv` | Move | Moves or renames — in Unix, renaming IS moving, because a filename is just a directory entry pointing at an inode. | [Wikipedia](https://en.wikipedia.org/wiki/Mv) |
42
+ | `nano` | Nano's ANOther editor (recursive acronym) | Originally called TIP (TIP Isn't Pico), renamed to avoid conflict — 'nano' is one SI prefix larger than 'pico', the editor it clones. | [Wikipedia](https://en.wikipedia.org/wiki/GNU_nano) |
43
+ | `nc` | Network Cat (netcat) | Written by a hacker known only as 'Hobbit' in 1995 — applies Unix's cat philosophy (read/write streams) to network sockets. | [Wikipedia](https://en.wikipedia.org/wiki/Netcat) |
44
+ | `nm` | Name List | V7 man pages called the symbol table a 'name list' — the abbreviation stuck long after the terminology didn't. | [Wikipedia](https://en.wikipedia.org/wiki/Nm_%28Unix%29) |
45
+ | `nroff` | Newer ROFF | The name traces back through roff to RUNOFF (1964), named for the phrase 'to run off a document' — as in, run off some copies. | [Wikipedia](https://en.wikipedia.org/wiki/Nroff) |
46
+ | `od` | Octal Dump | One of the oldest Unix commands (Version 1), named for its default output format before hex became standard. | [Wikipedia](https://en.wikipedia.org/wiki/Od_%28Unix%29) |
47
+ | `paste` | Paste (to join things together) | Also by Gottfried Luderer — the counterpart to cut, it merges files side-by-side like pasting columns of a spreadsheet. | [Wikipedia](https://en.wikipedia.org/wiki/Paste_%28Unix%29) |
48
+ | `patch` | Patch (to repair or update) | Larry Wall (yes, the Perl guy) wrote it in 1985 — enabled swapping small change-sets instead of whole files, before version control existed. | [Wikipedia](https://en.wikipedia.org/wiki/Patch_%28Unix%29) |
49
+ | `ping` | Named after the sound of sonar | Mike Muuss named it after the sonar pulse in 1983 — 'Packet InterNet Groper' is a backronym from Dave Mills that Muuss never endorsed. | [Wikipedia](https://en.wikipedia.org/wiki/Ping_%28networking_utility%29) |
50
+ | `ps` | Process Status | Version 3 Unix (1973) — its BSD and System V flag conventions never reconciled, which is why ps aux and ps -ef both exist. | [Wikipedia](https://en.wikipedia.org/wiki/Ps_%28Unix%29) |
51
+ | `pwd` | Print Working Directory | Descended from Multics 'print_wdir' — POSIX diplomatically avoids 'print' and says 'return working directory name.' | [Wikipedia](https://en.wikipedia.org/wiki/Pwd) |
52
+ | `rc` | Run Commands | Named after RUNCOM, a 1963 CTSS facility by Louis Pouzin — the same ancestry behind every .bashrc, .vimrc, and .zshrc. | [Wikipedia](https://en.wikipedia.org/wiki/Rc_%28Unix_shell%29) |
53
+ | `rm` | Remove | No trash can, no undo, no confirmation by default — Unix's most unforgiving two letters. | [Wikipedia](https://en.wikipedia.org/wiki/Rm_%28Unix%29) |
54
+ | `scp` | Secure Copy | The encrypted successor to BSD's rcp (remote copy) — SSH encryption grafted onto the old remote copy protocol. | [Wikipedia](https://en.wikipedia.org/wiki/Secure_copy_protocol) |
55
+ | `sed` | Stream Editor | Lee McMahon wanted g/re/s and built it as a non-interactive editor that reads stdin line by line. | [Wikipedia](https://en.wikipedia.org/wiki/Sed) |
56
+ | `shuf` | Shuffle | A GNU coreutils addition by Paul Eggert — straightforward name, no folklore, just shuffles lines like a deck of cards. | [Wikipedia](https://en.wikipedia.org/wiki/Shuf) |
57
+ | `sort` | Sort (to arrange in order) | Ken Thompson wrote it for Version 1 Unix — by V5 he'd invented the '-' convention for stdin because sort needed both files and pipes. | [Wikipedia](https://en.wikipedia.org/wiki/Sort_%28Unix%29) |
58
+ | `ssh` | Secure Shell | Tatu Ylonen created it in 1995 after a password-sniffing attack at Helsinki University — port 22 sits right between FTP (21) and Telnet (23). | [Wikipedia](https://en.wikipedia.org/wiki/Secure_Shell) |
59
+ | `stty` | Set TTY (Set Teletype) | Version 2 Unix — 'tty' itself comes from 'teletype', the physical machines that were the first Unix terminals. | [Wikipedia](https://en.wikipedia.org/wiki/Stty) |
60
+ | `su` | Substitute User | Universally misremembered as 'super user' because that's how everyone uses it — but the man pages say 'substitute user.' | [Wikipedia](https://en.wikipedia.org/wiki/Su_%28Unix%29) |
61
+ | `sudo` | Superuser Do | Conceived around 1980 at SUNY Buffalo — officially evolved from 'superuser do' to 'substitute user do' as it gained the ability to run as any user. | [Wikipedia](https://en.wikipedia.org/wiki/Sudo) |
62
+ | `tac` | 'cat' spelled backwards | Does what cat does, but in reverse line order — and the name is literally 'cat' backwards. Peak Unix humor. | [Wikipedia](https://en.wikipedia.org/wiki/Cat_%28Unix%29#tac) |
63
+ | `tail` | Tail (the end of something) | Counterpart to head — its '-f' (follow) flag for watching live log output became one of Unix's most beloved features. | [Wikipedia](https://en.wikipedia.org/wiki/Tail_%28Unix%29) |
64
+ | `tar` | Tape Archive | Born in V7 Unix (1979) to wrangle magnetic tape drives — replaced 'tp', which replaced 'tap', each name getting lazier. | [Wikipedia](https://en.wikipedia.org/wiki/Tar_%28computing%29) |
65
+ | `tee` | Named after the T-shaped pipe fitting | Splits a data stream like a plumber's T-joint — one copy to stdout, one to a file. The metaphor is physical. | [Wikipedia](https://en.wikipedia.org/wiki/Tee_%28command%29) |
66
+ | `top` | Shows the 'top' CPU consumers (?) | Written by William LeFebvre in 1984 — 'Table Of Processes' is a backronym; it just shows whatever's on top. | [Wikipedia](https://en.wikipedia.org/wiki/Top_%28software%29) |
67
+ | `tput` | Terminal Put (?) | Bill Joy wrote the first version for 4BSD in 1980 — it 'puts' terminal capabilities (bold, color, cursor movement) into your scripts. | [Wikipedia](https://en.wikipedia.org/wiki/Tput) |
68
+ | `tr` | Translate (or Transliterate) | Douglas McIlroy wrote it for V4 Unix, inherited from Multics — the oldest surviving single-purpose text transformer. | [Wikipedia](https://en.wikipedia.org/wiki/Tr_%28Unix%29) |
69
+ | `traceroute` | Trace Route | Van Jacobson wrote it in 1987 using a clever TTL-expiry trick suggested by Steve Deering — the name simply describes what it does. | [Wikipedia](https://en.wikipedia.org/wiki/Traceroute) |
70
+ | `troff` | Typesetter ROFF | When Bell Labs got a phototypesetter, Ossanna forked nroff for proportional fonts — 't' distinguished typeset from terminal output. | [Wikipedia](https://en.wikipedia.org/wiki/Troff) |
71
+ | `uniq` | Unique | Only detects adjacent duplicates by design — built as a filter for already-sorted data where identical lines sit together. | [Wikipedia](https://en.wikipedia.org/wiki/Uniq) |
72
+ | `vi` | Visual (mode of ex) | Bill Joy's visual mode for ex became so popular that the two-character shortcut to enter it became the command's entire identity. | [Wikipedia](https://en.wikipedia.org/wiki/Vi_%28text_editor%29) |
73
+ | `wc` | Word Count | Version 1 Unix (1971) — originally counted words, text lines, and roff control lines, doubling as a typesetting assistant. | [Wikipedia](https://en.wikipedia.org/wiki/Wc_%28Unix%29) |
74
+ | `wget` | World Wide Web get | Portmanteau of 'Web' and 'get' — originally called 'Geturl' before adopting wget in version 1.4.0, November 1996. | [Wikipedia](https://en.wikipedia.org/wiki/Wget) |
75
+ | `xargs` | eXtended ARGuments | Bridges the gap for commands that take arguments but not stdin — converts piped input into command-line arguments. | [Wikipedia](https://en.wikipedia.org/wiki/Xargs) |
76
+ | `yacc` | Yet Another Compiler-Compiler | Stephen Johnson's self-deprecating name belied a tool so influential he later said its contribution to Unix and C was what he was proudest of. | [Wikipedia](https://en.wikipedia.org/wiki/Yacc) |
77
+
78
+ ## Modern Replacements
79
+
80
+ | Command | Stands For / Meaning | Origin / Lore | Source |
81
+ |---------|----------------------|---------------|--------|
82
+ | `bat` | A cat with wings | Give the Unix cat command wings (syntax highlighting, git integration) and you get a bat. The animal pun is the whole pitch. | [GitHub](https://github.com/sharkdp/bat) |
83
+ | `btm` | bottom — the opposite of top | Named as a cheeky antonym to the top command it replaces; btm mirrors how top is already three letters. | [GitHub](https://github.com/ClementTsang/bottom) |
84
+ | `delta` | Delta (Δ) — the symbol for difference (?) | A diff viewer named after the universal symbol for difference; every diff is literally a delta between two states. | [GitHub](https://github.com/dandavison/delta) |
85
+ | `dust` | du + Rust | The package is literally named du-dust in crate registries, making the portmanteau explicit. | [GitHub](https://github.com/bootandy/dust) |
86
+ | `eza` | Minimal rename of exa | Community fork of exa after its author went unreachable — renamed because they lacked permission to keep the original name. | [GitHub](https://github.com/orgs/eza-community/discussions/239) |
87
+ | `fd` | Shortened form of find (?) | Half the letters of find, roughly half the keystrokes — naming mirrors the tool's philosophy of doing less to get more. | [GitHub](https://github.com/sharkdp/fd) |
88
+ | `fish` | Friendly Interactive SHell | Axel Liljencrantz created it in 2005 — the acronym is the design philosophy: be friendly first, POSIX second (or never). | [Wikipedia](https://en.wikipedia.org/wiki/Fish_%28Unix_shell%29) |
89
+ | `fzf` | FuZzy Finder (?) | Three consonants that capture the entire product: fuzzy finding, nothing more, nothing less. | [GitHub](https://github.com/junegunn/fzf) |
90
+ | `hyperfine` | Named after the hyperfine transition of caesium-133 | A benchmarking tool named after the atomic phenomenon that literally defines the SI second. | [GitHub](https://github.com/sharkdp/hyperfine) |
91
+ | `jq` | JSON query (?) | Two letters that launched a thousand pipelines; jq did for JSON what awk did for columnar text. | [GitHub](https://github.com/jqlang/jq) |
92
+ | `procs` | Processes | Where ps cryptically abbreviates 'process status', procs just says what it shows: processes. | [GitHub](https://github.com/dalance/procs) |
93
+ | `rg` | ripgrep — 'rip' as in tear through text fast | Author intended 'rip' as speed; the 'RIP grep' double meaning didn't dawn on him until after release. | [GitHub](https://github.com/BurntSushi/ripgrep/discussions/2413) |
94
+ | `sd` | Search & Displace | s[earch] & d[isplace] — a cheekier, more intuitive framing than sed's 'stream editor.' | [GitHub](https://github.com/chmln/sd) |
95
+ | `starship` | Space-themed successor to Spaceship prompt (?) | Spaceship was a Zsh prompt 'for astronauts'; Starship is the faster, cross-shell Rust evolution of that concept. | [GitHub](https://github.com/starship/starship) |
96
+ | `tldr` | Too Long; Didn't Read | Man pages are thorough but intimidating — tldr pages are the 'skip to the examples' version of documentation. | [GitHub](https://github.com/tldr-pages/tldr) |
97
+ | `tmux` | Terminal Multiplexer | Nicholas Marriott created it in 2007 as a BSD-licensed alternative to GNU Screen — the name is a straight abbreviation. | [Wikipedia](https://en.wikipedia.org/wiki/Tmux) |
98
+ | `tokei` | Japanese 時計 (tokei) meaning clock | The predecessor tool is cloc (sounds like clock); tokei is the Japanese word for clock — a bilingual pun. | [GitHub](https://github.com/XAMPPRocky/tokei/issues/1086) |
99
+ | `yq` | YAML query | The name is the entire pitch: it's jq, but for YAML (and now XML, TOML, CSV, and properties too). | [GitHub](https://github.com/mikefarah/yq) |
100
+ | `zoxide` | z + oxide (Rust = iron oxide) (?) | Combines its spiritual ancestor (the z shell plugin) with a nod to its Rust implementation via chemistry. | [GitHub](https://github.com/ajeetdsouza/zoxide) |
101
+ | `zsh` | Z Shell | Paul Falstad saw his Princeton TA Zhong Shao's login name 'zsh' and thought it sounded like a good shell name. | [Wikipedia](https://en.wikipedia.org/wiki/Z_shell) |
102
+
103
+ ## CLI Usage
104
+
105
+ ```bash
106
+ whyis grep # look up a single command
107
+ whyis grep awk sed # look up multiple
108
+ whyis --list # list all commands
109
+ whyis --random # random entry
110
+ ```
111
+
112
+ ```bash
113
+ npm install -g @centricle/whyis
114
+ ```
115
+
116
+ ## Contributing
117
+
118
+ PRs welcome. Every entry needs:
119
+
120
+ 1. An entry in `data/commands.json`
121
+ 2. A citation URL (official docs, author statement, or Wikipedia)
122
+ 3. If the origin is disputed, set `"uncertain": true`
123
+
124
+ Run `npm run readme` to regenerate this table after editing the JSON.
125
+
126
+ ## License
127
+
128
+ MIT
package/bin/whyis.js ADDED
@@ -0,0 +1,50 @@
1
+ #!/usr/bin/env node
2
+
3
+ const { find, findMultiple, listAll, random } = require('../lib/lookup');
4
+ const { formatTable, formatSingle } = require('../lib/render');
5
+
6
+ const args = process.argv.slice(2);
7
+
8
+ if (args.length === 0 || args[0] === '--help' || args[0] === '-h') {
9
+ console.log(`
10
+ whyis — CLI etymology reference
11
+
12
+ Usage:
13
+ whyis <command> Look up a command
14
+ whyis <cmd1> <cmd2> ... Look up multiple commands
15
+ whyis --list List all commands
16
+ whyis --random Random entry
17
+ whyis --help This message
18
+ `);
19
+ process.exit(0);
20
+ }
21
+
22
+ if (args[0] === '--list') {
23
+ const all = listAll();
24
+ console.log(formatTable(all));
25
+ process.exit(0);
26
+ }
27
+
28
+ if (args[0] === '--random') {
29
+ const entry = random();
30
+ console.log(formatSingle(entry));
31
+ process.exit(0);
32
+ }
33
+
34
+ if (args.length === 1) {
35
+ const results = find(args[0]);
36
+ if (results.length === 0) {
37
+ console.log(`\n Unknown command: ${args[0]}\n`);
38
+ process.exit(1);
39
+ }
40
+ results.forEach(r => console.log(formatSingle(r)));
41
+ } else {
42
+ const results = findMultiple(args);
43
+ if (results.length === 0) {
44
+ console.log('\n No matching commands found.\n');
45
+ process.exit(1);
46
+ }
47
+ console.log('');
48
+ console.log(formatTable(results));
49
+ console.log('');
50
+ }
@@ -0,0 +1,690 @@
1
+ [
2
+ {
3
+ "command": "ls",
4
+ "meaning": "List",
5
+ "lore": "Inherited from Multics where 'listf' became 'list' became 'ls' — each generation dropped letters.",
6
+ "source": "https://en.wikipedia.org/wiki/Ls",
7
+ "uncertain": false,
8
+ "category": "vintage"
9
+ },
10
+ {
11
+ "command": "cd",
12
+ "meaning": "Change Directory",
13
+ "lore": "So fundamental it's a shell builtin, not an external program — a child process can't change the parent's directory.",
14
+ "source": "https://en.wikipedia.org/wiki/Cd_(command)",
15
+ "uncertain": false,
16
+ "category": "vintage"
17
+ },
18
+ {
19
+ "command": "pwd",
20
+ "meaning": "Print Working Directory",
21
+ "lore": "Descended from Multics 'print_wdir' — POSIX diplomatically avoids 'print' and says 'return working directory name.'",
22
+ "source": "https://en.wikipedia.org/wiki/Pwd",
23
+ "uncertain": false,
24
+ "category": "vintage"
25
+ },
26
+ {
27
+ "command": "cat",
28
+ "meaning": "Catenate",
29
+ "lore": "Named after 'catenate,' not 'concatenate' — Kernighan and Pike called it 'a slightly obscure synonym.'",
30
+ "source": "https://en.wikipedia.org/wiki/Cat_(Unix)",
31
+ "uncertain": false,
32
+ "category": "vintage"
33
+ },
34
+ {
35
+ "command": "tac",
36
+ "meaning": "'cat' spelled backwards",
37
+ "lore": "Does what cat does, but in reverse line order — and the name is literally 'cat' backwards. Peak Unix humor.",
38
+ "source": "https://en.wikipedia.org/wiki/Cat_(Unix)#tac",
39
+ "uncertain": false,
40
+ "category": "vintage"
41
+ },
42
+ {
43
+ "command": "grep",
44
+ "meaning": "Global Regular Expression Print",
45
+ "lore": "From the ed command g/re/p — Ken Thompson extracted it into a standalone tool overnight.",
46
+ "source": "https://en.wikipedia.org/wiki/Grep",
47
+ "uncertain": false,
48
+ "category": "vintage"
49
+ },
50
+ {
51
+ "command": "awk",
52
+ "meaning": "Aho, Weinberger, and Kernighan",
53
+ "lore": "Named after its three Bell Labs creators — pronounced like the seabird 'auk,' which graces the cover of The AWK Programming Language.",
54
+ "source": "https://en.wikipedia.org/wiki/AWK",
55
+ "uncertain": false,
56
+ "category": "vintage"
57
+ },
58
+ {
59
+ "command": "sed",
60
+ "meaning": "Stream Editor",
61
+ "lore": "Lee McMahon wanted g/re/s and built it as a non-interactive editor that reads stdin line by line.",
62
+ "source": "https://en.wikipedia.org/wiki/Sed",
63
+ "uncertain": false,
64
+ "category": "vintage"
65
+ },
66
+ {
67
+ "command": "tee",
68
+ "meaning": "Named after the T-shaped pipe fitting",
69
+ "lore": "Splits a data stream like a plumber's T-joint — one copy to stdout, one to a file. The metaphor is physical.",
70
+ "source": "https://en.wikipedia.org/wiki/Tee_(command)",
71
+ "uncertain": false,
72
+ "category": "vintage"
73
+ },
74
+ {
75
+ "command": "dd",
76
+ "meaning": "Data Definition",
77
+ "lore": "Dennis Ritchie confirmed it alludes to IBM JCL's DD cards — Eric Raymond called the JCL-style syntax 'clearly a prank.'",
78
+ "source": "https://en.wikipedia.org/wiki/Dd_(Unix)",
79
+ "uncertain": true,
80
+ "category": "vintage"
81
+ },
82
+ {
83
+ "command": "df",
84
+ "meaning": "Disk Free",
85
+ "lore": "Version 1 Unix (1971) — one of the oldest surviving commands, born when monitoring a few megabytes was life or death.",
86
+ "source": "https://en.wikipedia.org/wiki/Df_(Unix)",
87
+ "uncertain": false,
88
+ "category": "vintage"
89
+ },
90
+ {
91
+ "command": "du",
92
+ "meaning": "Disk Usage",
93
+ "lore": "The complement to df — df tells you what's free, du tells you who's hogging it.",
94
+ "source": "https://en.wikipedia.org/wiki/Du_(Unix)",
95
+ "uncertain": false,
96
+ "category": "vintage"
97
+ },
98
+ {
99
+ "command": "rm",
100
+ "meaning": "Remove",
101
+ "lore": "No trash can, no undo, no confirmation by default — Unix's most unforgiving two letters.",
102
+ "source": "https://en.wikipedia.org/wiki/Rm_(Unix)",
103
+ "uncertain": false,
104
+ "category": "vintage"
105
+ },
106
+ {
107
+ "command": "cp",
108
+ "meaning": "Copy",
109
+ "lore": "Part of Version 1 Unix (1971) — because 'copy' was four letters too many for Thompson and Ritchie.",
110
+ "source": "https://en.wikipedia.org/wiki/Cp_(Unix)",
111
+ "uncertain": false,
112
+ "category": "vintage"
113
+ },
114
+ {
115
+ "command": "mv",
116
+ "meaning": "Move",
117
+ "lore": "Moves or renames — in Unix, renaming IS moving, because a filename is just a directory entry pointing at an inode.",
118
+ "source": "https://en.wikipedia.org/wiki/Mv",
119
+ "uncertain": false,
120
+ "category": "vintage"
121
+ },
122
+ {
123
+ "command": "ln",
124
+ "meaning": "Link",
125
+ "lore": "Creates additional names for the same inode — the reason Unix files can have multiple identities since the PDP-7 days.",
126
+ "source": "https://en.wikipedia.org/wiki/Ln_(Unix)",
127
+ "uncertain": false,
128
+ "category": "vintage"
129
+ },
130
+ {
131
+ "command": "chmod",
132
+ "meaning": "Change Mode",
133
+ "lore": "The 'mode' is the permission bitmask — rwxrwxrwx or its octal shorthand, inherited from Multics access control.",
134
+ "source": "https://en.wikipedia.org/wiki/Chmod",
135
+ "uncertain": false,
136
+ "category": "vintage"
137
+ },
138
+ {
139
+ "command": "chown",
140
+ "meaning": "Change Owner",
141
+ "lore": "On most modern systems, only root can chown — letting users give away files would break disk quotas and audit trails.",
142
+ "source": "https://en.wikipedia.org/wiki/Chown",
143
+ "uncertain": false,
144
+ "category": "vintage"
145
+ },
146
+ {
147
+ "command": "ps",
148
+ "meaning": "Process Status",
149
+ "lore": "Version 3 Unix (1973) — its BSD and System V flag conventions never reconciled, which is why ps aux and ps -ef both exist.",
150
+ "source": "https://en.wikipedia.org/wiki/Ps_(Unix)",
151
+ "uncertain": false,
152
+ "category": "vintage"
153
+ },
154
+ {
155
+ "command": "top",
156
+ "meaning": "Shows the 'top' CPU consumers",
157
+ "lore": "Written by William LeFebvre in 1984 — 'Table Of Processes' is a backronym; it just shows whatever's on top.",
158
+ "source": "https://en.wikipedia.org/wiki/Top_(software)",
159
+ "uncertain": true,
160
+ "category": "vintage"
161
+ },
162
+ {
163
+ "command": "kill",
164
+ "meaning": "Kill (terminate a process)",
165
+ "lore": "A misnomer — it actually sends any signal, not just SIGKILL, but the name stuck because stopping runaway processes was the common case.",
166
+ "source": "https://en.wikipedia.org/wiki/Kill_(command)",
167
+ "uncertain": false,
168
+ "category": "vintage"
169
+ },
170
+ {
171
+ "command": "man",
172
+ "meaning": "Manual",
173
+ "lore": "The first Unix Programmer's Manual was published in 1971 — 'man' made it available on-line (meaning interactive, not internet).",
174
+ "source": "https://en.wikipedia.org/wiki/Man_page",
175
+ "uncertain": false,
176
+ "category": "vintage"
177
+ },
178
+ {
179
+ "command": "ssh",
180
+ "meaning": "Secure Shell",
181
+ "lore": "Tatu Ylonen created it in 1995 after a password-sniffing attack at Helsinki University — port 22 sits right between FTP (21) and Telnet (23).",
182
+ "source": "https://en.wikipedia.org/wiki/Secure_Shell",
183
+ "uncertain": false,
184
+ "category": "vintage"
185
+ },
186
+ {
187
+ "command": "scp",
188
+ "meaning": "Secure Copy",
189
+ "lore": "The encrypted successor to BSD's rcp (remote copy) — SSH encryption grafted onto the old remote copy protocol.",
190
+ "source": "https://en.wikipedia.org/wiki/Secure_copy_protocol",
191
+ "uncertain": false,
192
+ "category": "vintage"
193
+ },
194
+ {
195
+ "command": "tar",
196
+ "meaning": "Tape Archive",
197
+ "lore": "Born in V7 Unix (1979) to wrangle magnetic tape drives — replaced 'tp', which replaced 'tap', each name getting lazier.",
198
+ "source": "https://en.wikipedia.org/wiki/Tar_(computing)",
199
+ "uncertain": false,
200
+ "category": "vintage"
201
+ },
202
+ {
203
+ "command": "gzip",
204
+ "meaning": "GNU zip",
205
+ "lore": "Gailly and Adler wrote it in 1992 as a free replacement for 'compress' after Unisys started enforcing LZW patents.",
206
+ "source": "https://en.wikipedia.org/wiki/Gzip",
207
+ "uncertain": false,
208
+ "category": "vintage"
209
+ },
210
+ {
211
+ "command": "curl",
212
+ "meaning": "Client for URLs",
213
+ "lore": "Daniel Stenberg built it in 1996 to fetch currency exchange rates for an IRC bot — was first 'httpget', then 'urlget', then 'curl.'",
214
+ "source": "https://curl.se/docs/history.html",
215
+ "uncertain": false,
216
+ "category": "vintage"
217
+ },
218
+ {
219
+ "command": "wget",
220
+ "meaning": "World Wide Web get",
221
+ "lore": "Portmanteau of 'Web' and 'get' — originally called 'Geturl' before adopting wget in version 1.4.0, November 1996.",
222
+ "source": "https://en.wikipedia.org/wiki/Wget",
223
+ "uncertain": false,
224
+ "category": "vintage"
225
+ },
226
+ {
227
+ "command": "diff",
228
+ "meaning": "Differences",
229
+ "lore": "Douglas McIlroy and James Hunt wrote it for V5 Unix (1974) — McIlroy's 1976 algorithm paper became the foundation of all file comparison.",
230
+ "source": "https://en.wikipedia.org/wiki/Diff",
231
+ "uncertain": false,
232
+ "category": "vintage"
233
+ },
234
+ {
235
+ "command": "patch",
236
+ "meaning": "Patch (to repair or update)",
237
+ "lore": "Larry Wall (yes, the Perl guy) wrote it in 1985 — enabled swapping small change-sets instead of whole files, before version control existed.",
238
+ "source": "https://en.wikipedia.org/wiki/Patch_(Unix)",
239
+ "uncertain": false,
240
+ "category": "vintage"
241
+ },
242
+ {
243
+ "command": "find",
244
+ "meaning": "Find (to locate files)",
245
+ "lore": "Dick Haight wrote it for V5 Unix as part of the Programmer's Workbench, designed to pair with cpio for backup-and-restore.",
246
+ "source": "https://en.wikipedia.org/wiki/Find_(Unix)",
247
+ "uncertain": false,
248
+ "category": "vintage"
249
+ },
250
+ {
251
+ "command": "xargs",
252
+ "meaning": "eXtended ARGuments",
253
+ "lore": "Bridges the gap for commands that take arguments but not stdin — converts piped input into command-line arguments.",
254
+ "source": "https://en.wikipedia.org/wiki/Xargs",
255
+ "uncertain": false,
256
+ "category": "vintage"
257
+ },
258
+ {
259
+ "command": "sort",
260
+ "meaning": "Sort (to arrange in order)",
261
+ "lore": "Ken Thompson wrote it for Version 1 Unix — by V5 he'd invented the '-' convention for stdin because sort needed both files and pipes.",
262
+ "source": "https://en.wikipedia.org/wiki/Sort_(Unix)",
263
+ "uncertain": false,
264
+ "category": "vintage"
265
+ },
266
+ {
267
+ "command": "uniq",
268
+ "meaning": "Unique",
269
+ "lore": "Only detects adjacent duplicates by design — built as a filter for already-sorted data where identical lines sit together.",
270
+ "source": "https://en.wikipedia.org/wiki/Uniq",
271
+ "uncertain": false,
272
+ "category": "vintage"
273
+ },
274
+ {
275
+ "command": "wc",
276
+ "meaning": "Word Count",
277
+ "lore": "Version 1 Unix (1971) — originally counted words, text lines, and roff control lines, doubling as a typesetting assistant.",
278
+ "source": "https://en.wikipedia.org/wiki/Wc_(Unix)",
279
+ "uncertain": false,
280
+ "category": "vintage"
281
+ },
282
+ {
283
+ "command": "head",
284
+ "meaning": "Head (the beginning of something)",
285
+ "lore": "Many early Unix versions lacked it entirely, using 'sed 10q' instead — head was a convenience that arrived fashionably late.",
286
+ "source": "https://en.wikipedia.org/wiki/Head_(Unix)",
287
+ "uncertain": false,
288
+ "category": "vintage"
289
+ },
290
+ {
291
+ "command": "tail",
292
+ "meaning": "Tail (the end of something)",
293
+ "lore": "Counterpart to head — its '-f' (follow) flag for watching live log output became one of Unix's most beloved features.",
294
+ "source": "https://en.wikipedia.org/wiki/Tail_(Unix)",
295
+ "uncertain": false,
296
+ "category": "vintage"
297
+ },
298
+ {
299
+ "command": "tr",
300
+ "meaning": "Translate (or Transliterate)",
301
+ "lore": "Douglas McIlroy wrote it for V4 Unix, inherited from Multics — the oldest surviving single-purpose text transformer.",
302
+ "source": "https://en.wikipedia.org/wiki/Tr_(Unix)",
303
+ "uncertain": false,
304
+ "category": "vintage"
305
+ },
306
+ {
307
+ "command": "cut",
308
+ "meaning": "Cut (to extract a section)",
309
+ "lore": "Gottfried Luderer wrote it at Bell Labs for System III — BSD didn't pick it up until 4.3BSD-Reno around 1990, nearly a decade late.",
310
+ "source": "https://en.wikipedia.org/wiki/Cut_(Unix)",
311
+ "uncertain": false,
312
+ "category": "vintage"
313
+ },
314
+ {
315
+ "command": "paste",
316
+ "meaning": "Paste (to join things together)",
317
+ "lore": "Also by Gottfried Luderer — the counterpart to cut, it merges files side-by-side like pasting columns of a spreadsheet.",
318
+ "source": "https://en.wikipedia.org/wiki/Paste_(Unix)",
319
+ "uncertain": false,
320
+ "category": "vintage"
321
+ },
322
+ {
323
+ "command": "od",
324
+ "meaning": "Octal Dump",
325
+ "lore": "One of the oldest Unix commands (Version 1), named for its default output format before hex became standard.",
326
+ "source": "https://en.wikipedia.org/wiki/Od_(Unix)",
327
+ "uncertain": false,
328
+ "category": "vintage"
329
+ },
330
+ {
331
+ "command": "nm",
332
+ "meaning": "Name List",
333
+ "lore": "V7 man pages called the symbol table a 'name list' — the abbreviation stuck long after the terminology didn't.",
334
+ "source": "https://en.wikipedia.org/wiki/Nm_(Unix)",
335
+ "uncertain": false,
336
+ "category": "vintage"
337
+ },
338
+ {
339
+ "command": "ar",
340
+ "meaning": "Archiver",
341
+ "lore": "The original Unix file archiver, predating tar — still quietly used today to build static libraries (.a files).",
342
+ "source": "https://en.wikipedia.org/wiki/Ar_(Unix)",
343
+ "uncertain": false,
344
+ "category": "vintage"
345
+ },
346
+ {
347
+ "command": "ld",
348
+ "meaning": "Link Editor (or Loader)",
349
+ "lore": "The dual meaning reflects the tool's dual role: linking object files together and loading external symbols for resolution.",
350
+ "source": "https://en.wikipedia.org/wiki/Linker_(computing)",
351
+ "uncertain": true,
352
+ "category": "vintage"
353
+ },
354
+ {
355
+ "command": "cc",
356
+ "meaning": "C Compiler",
357
+ "lore": "The simplest possible abbreviation for the language that rewrote Unix itself — appeared in Version 3 Unix alongside C.",
358
+ "source": "https://en.wikipedia.org/wiki/C_(programming_language)",
359
+ "uncertain": false,
360
+ "category": "vintage"
361
+ },
362
+ {
363
+ "command": "make",
364
+ "meaning": "Make (to build/construct)",
365
+ "lore": "Stuart Feldman wrote it over a weekend in 1976 after Steve Johnson wasted a morning debugging a correct program that hadn't been recompiled.",
366
+ "source": "https://en.wikipedia.org/wiki/Make_(software)",
367
+ "uncertain": false,
368
+ "category": "vintage"
369
+ },
370
+ {
371
+ "command": "yacc",
372
+ "meaning": "Yet Another Compiler-Compiler",
373
+ "lore": "Stephen Johnson's self-deprecating name belied a tool so influential he later said its contribution to Unix and C was what he was proudest of.",
374
+ "source": "https://en.wikipedia.org/wiki/Yacc",
375
+ "uncertain": false,
376
+ "category": "vintage"
377
+ },
378
+ {
379
+ "command": "lex",
380
+ "meaning": "Lexical Analyzer Generator",
381
+ "lore": "Written by Mike Lesk and Eric Schmidt (yes, that Eric Schmidt) in 1975 — turns regexes into C code for tokenizing.",
382
+ "source": "https://en.wikipedia.org/wiki/Lex_(software)",
383
+ "uncertain": false,
384
+ "category": "vintage"
385
+ },
386
+ {
387
+ "command": "nroff",
388
+ "meaning": "Newer ROFF",
389
+ "lore": "The name traces back through roff to RUNOFF (1964), named for the phrase 'to run off a document' — as in, run off some copies.",
390
+ "source": "https://en.wikipedia.org/wiki/Nroff",
391
+ "uncertain": false,
392
+ "category": "vintage"
393
+ },
394
+ {
395
+ "command": "troff",
396
+ "meaning": "Typesetter ROFF",
397
+ "lore": "When Bell Labs got a phototypesetter, Ossanna forked nroff for proportional fonts — 't' distinguished typeset from terminal output.",
398
+ "source": "https://en.wikipedia.org/wiki/Troff",
399
+ "uncertain": false,
400
+ "category": "vintage"
401
+ },
402
+ {
403
+ "command": "biff",
404
+ "meaning": "Named after a dog",
405
+ "lore": "Named after Heidi Stettner's dog at UC Berkeley who barked at the mailman — a mail notification command named after a literal mail alert system.",
406
+ "source": "https://en.wikipedia.org/wiki/Biff_(Unix)",
407
+ "uncertain": false,
408
+ "category": "vintage"
409
+ },
410
+ {
411
+ "command": "cron",
412
+ "meaning": "From Greek 'chronos' (time)",
413
+ "lore": "Named for the Greek personification of time — 'Command Run On Notice' is a backronym. The true etymology is genuinely disputed.",
414
+ "source": "https://en.wikipedia.org/wiki/Cron",
415
+ "uncertain": true,
416
+ "category": "vintage"
417
+ },
418
+ {
419
+ "command": "sudo",
420
+ "meaning": "Superuser Do",
421
+ "lore": "Conceived around 1980 at SUNY Buffalo — officially evolved from 'superuser do' to 'substitute user do' as it gained the ability to run as any user.",
422
+ "source": "https://en.wikipedia.org/wiki/Sudo",
423
+ "uncertain": false,
424
+ "category": "vintage"
425
+ },
426
+ {
427
+ "command": "su",
428
+ "meaning": "Substitute User",
429
+ "lore": "Universally misremembered as 'super user' because that's how everyone uses it — but the man pages say 'substitute user.'",
430
+ "source": "https://en.wikipedia.org/wiki/Su_(Unix)",
431
+ "uncertain": false,
432
+ "category": "vintage"
433
+ },
434
+ {
435
+ "command": "ping",
436
+ "meaning": "Named after the sound of sonar",
437
+ "lore": "Mike Muuss named it after the sonar pulse in 1983 — 'Packet InterNet Groper' is a backronym from Dave Mills that Muuss never endorsed.",
438
+ "source": "https://en.wikipedia.org/wiki/Ping_(networking_utility)",
439
+ "uncertain": false,
440
+ "category": "vintage"
441
+ },
442
+ {
443
+ "command": "traceroute",
444
+ "meaning": "Trace Route",
445
+ "lore": "Van Jacobson wrote it in 1987 using a clever TTL-expiry trick suggested by Steve Deering — the name simply describes what it does.",
446
+ "source": "https://en.wikipedia.org/wiki/Traceroute",
447
+ "uncertain": false,
448
+ "category": "vintage"
449
+ },
450
+ {
451
+ "command": "nc",
452
+ "meaning": "Network Cat (netcat)",
453
+ "lore": "Written by a hacker known only as 'Hobbit' in 1995 — applies Unix's cat philosophy (read/write streams) to network sockets.",
454
+ "source": "https://en.wikipedia.org/wiki/Netcat",
455
+ "uncertain": false,
456
+ "category": "vintage"
457
+ },
458
+ {
459
+ "command": "vi",
460
+ "meaning": "Visual (mode of ex)",
461
+ "lore": "Bill Joy's visual mode for ex became so popular that the two-character shortcut to enter it became the command's entire identity.",
462
+ "source": "https://en.wikipedia.org/wiki/Vi_(text_editor)",
463
+ "uncertain": false,
464
+ "category": "vintage"
465
+ },
466
+ {
467
+ "command": "ed",
468
+ "meaning": "Editor",
469
+ "lore": "Ken Thompson wrote it in August 1969 as one of the first three Unix programs — assembler, editor, shell — still the POSIX standard editor.",
470
+ "source": "https://en.wikipedia.org/wiki/Ed_(text_editor)",
471
+ "uncertain": false,
472
+ "category": "vintage"
473
+ },
474
+ {
475
+ "command": "ex",
476
+ "meaning": "Extended (editor)",
477
+ "lore": "Bill Joy and Chuck Haley extended 'em' (editor for mortals) — George Coulouris had deemed ed's interface fit only for 'immortals.'",
478
+ "source": "https://en.wikipedia.org/wiki/Ex_(text_editor)",
479
+ "uncertain": false,
480
+ "category": "vintage"
481
+ },
482
+ {
483
+ "command": "emacs",
484
+ "meaning": "Editing MACroS",
485
+ "lore": "Born in 1976 as TECO macros at MIT — so many macros ending in MAC/MACS accumulated that Stallman and Steele unified them.",
486
+ "source": "https://en.wikipedia.org/wiki/Emacs",
487
+ "uncertain": false,
488
+ "category": "vintage"
489
+ },
490
+ {
491
+ "command": "nano",
492
+ "meaning": "Nano's ANOther editor (recursive acronym)",
493
+ "lore": "Originally called TIP (TIP Isn't Pico), renamed to avoid conflict — 'nano' is one SI prefix larger than 'pico', the editor it clones.",
494
+ "source": "https://en.wikipedia.org/wiki/GNU_nano",
495
+ "uncertain": false,
496
+ "category": "vintage"
497
+ },
498
+ {
499
+ "command": "shuf",
500
+ "meaning": "Shuffle",
501
+ "lore": "A GNU coreutils addition by Paul Eggert — straightforward name, no folklore, just shuffles lines like a deck of cards.",
502
+ "source": "https://en.wikipedia.org/wiki/Shuf",
503
+ "uncertain": false,
504
+ "category": "vintage"
505
+ },
506
+ {
507
+ "command": "tput",
508
+ "meaning": "Terminal Put",
509
+ "lore": "Bill Joy wrote the first version for 4BSD in 1980 — it 'puts' terminal capabilities (bold, color, cursor movement) into your scripts.",
510
+ "source": "https://en.wikipedia.org/wiki/Tput",
511
+ "uncertain": true,
512
+ "category": "vintage"
513
+ },
514
+ {
515
+ "command": "stty",
516
+ "meaning": "Set TTY (Set Teletype)",
517
+ "lore": "Version 2 Unix — 'tty' itself comes from 'teletype', the physical machines that were the first Unix terminals.",
518
+ "source": "https://en.wikipedia.org/wiki/Stty",
519
+ "uncertain": false,
520
+ "category": "vintage"
521
+ },
522
+ {
523
+ "command": "rc",
524
+ "meaning": "Run Commands",
525
+ "lore": "Named after RUNCOM, a 1963 CTSS facility by Louis Pouzin — the same ancestry behind every .bashrc, .vimrc, and .zshrc.",
526
+ "source": "https://en.wikipedia.org/wiki/Rc_(Unix_shell)",
527
+ "uncertain": false,
528
+ "category": "vintage"
529
+ },
530
+ {
531
+ "command": "bat",
532
+ "meaning": "A cat with wings",
533
+ "lore": "Give the Unix cat command wings (syntax highlighting, git integration) and you get a bat. The animal pun is the whole pitch.",
534
+ "source": "https://github.com/sharkdp/bat",
535
+ "uncertain": false,
536
+ "category": "modern"
537
+ },
538
+ {
539
+ "command": "eza",
540
+ "meaning": "Minimal rename of exa",
541
+ "lore": "Community fork of exa after its author went unreachable — renamed because they lacked permission to keep the original name.",
542
+ "source": "https://github.com/orgs/eza-community/discussions/239",
543
+ "uncertain": false,
544
+ "category": "modern"
545
+ },
546
+ {
547
+ "command": "fd",
548
+ "meaning": "Shortened form of find",
549
+ "lore": "Half the letters of find, roughly half the keystrokes — naming mirrors the tool's philosophy of doing less to get more.",
550
+ "source": "https://github.com/sharkdp/fd",
551
+ "uncertain": true,
552
+ "category": "modern"
553
+ },
554
+ {
555
+ "command": "rg",
556
+ "meaning": "ripgrep — 'rip' as in tear through text fast",
557
+ "lore": "Author intended 'rip' as speed; the 'RIP grep' double meaning didn't dawn on him until after release.",
558
+ "source": "https://github.com/BurntSushi/ripgrep/discussions/2413",
559
+ "uncertain": false,
560
+ "category": "modern"
561
+ },
562
+ {
563
+ "command": "fzf",
564
+ "meaning": "FuZzy Finder",
565
+ "lore": "Three consonants that capture the entire product: fuzzy finding, nothing more, nothing less.",
566
+ "source": "https://github.com/junegunn/fzf",
567
+ "uncertain": true,
568
+ "category": "modern"
569
+ },
570
+ {
571
+ "command": "zoxide",
572
+ "meaning": "z + oxide (Rust = iron oxide)",
573
+ "lore": "Combines its spiritual ancestor (the z shell plugin) with a nod to its Rust implementation via chemistry.",
574
+ "source": "https://github.com/ajeetdsouza/zoxide",
575
+ "uncertain": true,
576
+ "category": "modern"
577
+ },
578
+ {
579
+ "command": "sd",
580
+ "meaning": "Search & Displace",
581
+ "lore": "s[earch] & d[isplace] — a cheekier, more intuitive framing than sed's 'stream editor.'",
582
+ "source": "https://github.com/chmln/sd",
583
+ "uncertain": false,
584
+ "category": "modern"
585
+ },
586
+ {
587
+ "command": "dust",
588
+ "meaning": "du + Rust",
589
+ "lore": "The package is literally named du-dust in crate registries, making the portmanteau explicit.",
590
+ "source": "https://github.com/bootandy/dust",
591
+ "uncertain": false,
592
+ "category": "modern"
593
+ },
594
+ {
595
+ "command": "procs",
596
+ "meaning": "Processes",
597
+ "lore": "Where ps cryptically abbreviates 'process status', procs just says what it shows: processes.",
598
+ "source": "https://github.com/dalance/procs",
599
+ "uncertain": false,
600
+ "category": "modern"
601
+ },
602
+ {
603
+ "command": "btm",
604
+ "meaning": "bottom — the opposite of top",
605
+ "lore": "Named as a cheeky antonym to the top command it replaces; btm mirrors how top is already three letters.",
606
+ "source": "https://github.com/ClementTsang/bottom",
607
+ "uncertain": false,
608
+ "category": "modern"
609
+ },
610
+ {
611
+ "command": "hyperfine",
612
+ "meaning": "Named after the hyperfine transition of caesium-133",
613
+ "lore": "A benchmarking tool named after the atomic phenomenon that literally defines the SI second.",
614
+ "source": "https://github.com/sharkdp/hyperfine",
615
+ "uncertain": false,
616
+ "category": "modern"
617
+ },
618
+ {
619
+ "command": "tokei",
620
+ "meaning": "Japanese 時計 (tokei) meaning clock",
621
+ "lore": "The predecessor tool is cloc (sounds like clock); tokei is the Japanese word for clock — a bilingual pun.",
622
+ "source": "https://github.com/XAMPPRocky/tokei/issues/1086",
623
+ "uncertain": false,
624
+ "category": "modern"
625
+ },
626
+ {
627
+ "command": "delta",
628
+ "meaning": "Delta (Δ) — the symbol for difference",
629
+ "lore": "A diff viewer named after the universal symbol for difference; every diff is literally a delta between two states.",
630
+ "source": "https://github.com/dandavison/delta",
631
+ "uncertain": true,
632
+ "category": "modern"
633
+ },
634
+ {
635
+ "command": "jq",
636
+ "meaning": "JSON query",
637
+ "lore": "Two letters that launched a thousand pipelines; jq did for JSON what awk did for columnar text.",
638
+ "source": "https://github.com/jqlang/jq",
639
+ "uncertain": true,
640
+ "category": "modern"
641
+ },
642
+ {
643
+ "command": "yq",
644
+ "meaning": "YAML query",
645
+ "lore": "The name is the entire pitch: it's jq, but for YAML (and now XML, TOML, CSV, and properties too).",
646
+ "source": "https://github.com/mikefarah/yq",
647
+ "uncertain": false,
648
+ "category": "modern"
649
+ },
650
+ {
651
+ "command": "tldr",
652
+ "meaning": "Too Long; Didn't Read",
653
+ "lore": "Man pages are thorough but intimidating — tldr pages are the 'skip to the examples' version of documentation.",
654
+ "source": "https://github.com/tldr-pages/tldr",
655
+ "uncertain": false,
656
+ "category": "modern"
657
+ },
658
+ {
659
+ "command": "starship",
660
+ "meaning": "Space-themed successor to Spaceship prompt",
661
+ "lore": "Spaceship was a Zsh prompt 'for astronauts'; Starship is the faster, cross-shell Rust evolution of that concept.",
662
+ "source": "https://github.com/starship/starship",
663
+ "uncertain": true,
664
+ "category": "modern"
665
+ },
666
+ {
667
+ "command": "tmux",
668
+ "meaning": "Terminal Multiplexer",
669
+ "lore": "Nicholas Marriott created it in 2007 as a BSD-licensed alternative to GNU Screen — the name is a straight abbreviation.",
670
+ "source": "https://en.wikipedia.org/wiki/Tmux",
671
+ "uncertain": false,
672
+ "category": "modern"
673
+ },
674
+ {
675
+ "command": "zsh",
676
+ "meaning": "Z Shell",
677
+ "lore": "Paul Falstad saw his Princeton TA Zhong Shao's login name 'zsh' and thought it sounded like a good shell name.",
678
+ "source": "https://en.wikipedia.org/wiki/Z_shell",
679
+ "uncertain": false,
680
+ "category": "modern"
681
+ },
682
+ {
683
+ "command": "fish",
684
+ "meaning": "Friendly Interactive SHell",
685
+ "lore": "Axel Liljencrantz created it in 2005 — the acronym is the design philosophy: be friendly first, POSIX second (or never).",
686
+ "source": "https://en.wikipedia.org/wiki/Fish_(Unix_shell)",
687
+ "uncertain": false,
688
+ "category": "modern"
689
+ }
690
+ ]
package/lib/lookup.js ADDED
@@ -0,0 +1,36 @@
1
+ const fs = require('fs');
2
+ const path = require('path');
3
+
4
+ const DATA_PATH = path.join(__dirname, '..', 'data', 'commands.json');
5
+
6
+ function loadCommands() {
7
+ const raw = fs.readFileSync(DATA_PATH, 'utf8');
8
+ return JSON.parse(raw);
9
+ }
10
+
11
+ function find(name) {
12
+ const commands = loadCommands();
13
+ return commands.filter(c => c.command === name.toLowerCase());
14
+ }
15
+
16
+ function findMultiple(names) {
17
+ const commands = loadCommands();
18
+ const set = new Set(names.map(n => n.toLowerCase()));
19
+ return commands.filter(c => set.has(c.command));
20
+ }
21
+
22
+ function listAll() {
23
+ return loadCommands();
24
+ }
25
+
26
+ function random() {
27
+ const commands = loadCommands();
28
+ return commands[Math.floor(Math.random() * commands.length)];
29
+ }
30
+
31
+ function byCategory(category) {
32
+ const commands = loadCommands();
33
+ return commands.filter(c => c.category === category);
34
+ }
35
+
36
+ module.exports = { find, findMultiple, listAll, random, byCategory };
package/lib/render.js ADDED
@@ -0,0 +1,46 @@
1
+ function pad(str, len) {
2
+ if (str.length >= len) return str.slice(0, len);
3
+ return str + ' '.repeat(len - str.length);
4
+ }
5
+
6
+ function formatEntry(entry) {
7
+ const uncertain = entry.uncertain ? ' (?)' : '';
8
+ const lines = [
9
+ ` ${entry.command}`,
10
+ ` ${entry.meaning}${uncertain}`,
11
+ ` ${entry.lore}`,
12
+ ` ${entry.source}`,
13
+ ];
14
+ return lines.join('\n');
15
+ }
16
+
17
+ function formatTable(entries) {
18
+ if (entries.length === 0) return ' No entries found.';
19
+
20
+ const col1 = 14;
21
+ const col2 = 40;
22
+
23
+ const header = ` ${pad('Command', col1)} ${pad('Stands For / Meaning', col2)} Origin / Lore`;
24
+ const sep = ` ${'-'.repeat(col1)} ${'-'.repeat(col2)} ${'-'.repeat(40)}`;
25
+
26
+ const rows = entries.map(e => {
27
+ const uncertain = e.uncertain ? ' (?)' : '';
28
+ return ` ${pad(e.command, col1)} ${pad(e.meaning + uncertain, col2)} ${e.lore}`;
29
+ });
30
+
31
+ return [header, sep, ...rows].join('\n');
32
+ }
33
+
34
+ function formatSingle(entry) {
35
+ const uncertain = entry.uncertain ? ' (?)' : '';
36
+ return [
37
+ '',
38
+ ` ${entry.command} — ${entry.meaning}${uncertain}`,
39
+ '',
40
+ ` ${entry.lore}`,
41
+ ` Source: ${entry.source}`,
42
+ '',
43
+ ].join('\n');
44
+ }
45
+
46
+ module.exports = { formatEntry, formatTable, formatSingle };
package/package.json ADDED
@@ -0,0 +1,34 @@
1
+ {
2
+ "name": "@centricle/whyis",
3
+ "version": "0.1.0",
4
+ "description": "CLI etymology reference — why is it called that?",
5
+ "main": "lib/lookup.js",
6
+ "bin": {
7
+ "whyis": "bin/whyis.js"
8
+ },
9
+ "files": [
10
+ "bin/",
11
+ "lib/",
12
+ "data/"
13
+ ],
14
+ "scripts": {
15
+ "readme": "node scripts/generate-readme.js"
16
+ },
17
+ "repository": {
18
+ "type": "git",
19
+ "url": "https://github.com/centricle/whyis.git"
20
+ },
21
+ "keywords": [
22
+ "cli",
23
+ "etymology",
24
+ "unix",
25
+ "shell",
26
+ "terminal",
27
+ "reference"
28
+ ],
29
+ "engines": {
30
+ "node": ">=18"
31
+ },
32
+ "author": "ksmith <ksmith@centricle.com>",
33
+ "license": "MIT"
34
+ }