diff options
Diffstat (limited to 'spec/README.md')
| -rw-r--r-- | spec/README.md | 894 |
1 files changed, 894 insertions, 0 deletions
diff --git a/spec/README.md b/spec/README.md new file mode 100644 index 0000000..3cedcbb --- /dev/null +++ b/spec/README.md @@ -0,0 +1,894 @@ +# UGI — Unified Geek Identifier + +**Version: 0 (Draft) · 2026-03-28 · MIT License** + +--- +## Overview + +A compact, URI-safe self-description code for geeks. Encodes identity, skills, interests, and opinions into a single string suitable for bios, email signatures, and URIs. + +It descends from two predecessors: + +- [Geek Code](https://sig.codes/geek/) by Robert A. Hayden (1993-1996), with its [Geek Code 4.0+](https://sig.codes/geek-4.0/) by exarobibliologist (2019-2026) +- [Hacker Key](https://sig.codes/hacker-key/) by Chris Allegretta (2003-2006) + +UGI takes the cultural breadth of the Geek Code, the numeric compactness of the Hacker Key, and adds URI safety, modern fields, and extensibility. + +### Design goals + +1. Single-letter field codes — 24 active, 2 reserved +2. Octal (0–7) rating scale +3. URI-safe characters only — no percent-encoding needed +4. Dual format — URI for machines, block for humans +5. Case-insensitive +6. Extensible via `~` custom sub-IDs + +--- +## Formats + +### URI + +``` +ugi:<version>[/<revision>]@<handle>:<field>,<field>,... +``` + +### Block + +``` +------- BEGIN UGI BLOCK ------- +v:<version>[/<revision>] @<handle> [G<geek_types>] +<field> <field> ... +-------- END UGI BLOCK -------- +``` + +In block format, field codes are repeated per sub-ID for readability: `Ppy6 Prs5` instead of `ppy6rs5`. Long-form sub-ID aliases (noted in registries) are permitted in block format. + +### Conversion + +Block → URI: remove header/footer, merge repeated field codes, replace spaces with commas, prepend `ugi:`. + +URI → Block: split on commas, expand merged sub-IDs by repeating field codes, add header/footer. + +No modifier or character changes are needed — both formats use identical symbols. + +### Mandatory fields + +`@handle` and `g` (geek type) are required. All others are optional. + +--- +## Grammar + +``` +<field_code><sub_id><digit>[<modifier>]... +``` + +- **Field codes** — single letter (a–z), case-insensitive +- **Sub-IDs** — 1–4 lowercase alpha chars +- **Ratings** — single octal digit (0–7), required on every sub-ID +- **Custom sub-IDs** — `~` prefix: `~fermenting5` +- **Modifiers** — after the digit: + - `$` — paid + - `+` followed by digit — aspiring toward that level + - `$+` combined — paid and aspiring +- **Alternatives** — `/` between two digits on direct-value fields: `c3/6` + +### Special formats + +| Field | Format | Example | +|---|---|---| +| `g` geek type | `/` separates domains, `~` for custom, `$` for paid, no ratings | `gcs$/ai/wr~fermenting` | +| `b` build | `<height>/<width>` | `b6/3` | +| `l` languages | ISO 639-1 code + rating | `lar7en6` | +| `v` politics | `<social>/<economic>` | `v5/3` | + +### Parser algorithm + +After each comma or space, read a single letter (field code). Then: + +- `g` → read alpha tokens separated by `/` and `~`-prefixed tokens until delimiter +- `b` → digit, `/`, digit +- `v` → digit, `/`, digit +- `l` → repeat: 2 alpha + digit + optional modifier +- `r` → one sub-id + digit (single value only) +- direct fields → digit + optional modifier +- direct-alt fields → digit + optional `/` + digit + optional modifier +- multi fields → repeat: alpha (sub-id) + digit + optional modifier + +--- +## Rating scale (0–7) + +| Value | General | Proficiency | Enthusiasm | Stance | +|---|---|---|---|---| +| 0 | Hostile / opposed | Can't, won't | Despise | Strongly against | +| 1 | Strong dislike | Aware it exists | Avoid actively | Against | +| 2 | Dislike / minimal | Dabbled briefly | Not interested | Lean against | +| 3 | Slight negative | Beginner | Cold | Slightly against | +| 4 | Baseline / neutral | Average | Take or leave | No opinion | +| 5 | Moderate positive | Competent | Enjoy | Lean toward | +| 6 | Strong positive | Advanced / daily | Enthusiast | Support | +| 7 | Obsessed / defining | Master / creator | Life-defining | Evangelist | +### Modifier permissions + +| Modifiers | Fields | +|---|---| +| `$` and `+` | `f` `j` `l` `o` `p` `q` `w` `y` `z` | +| `$` only | `g` | +| `+` only | `b` `c` `d` `e` `h` `k` `s` | +| Neither | `a` `i` `m` `r` `t` `v` `x` | + +--- +## Field list + +| Code | Field | Type | Category | +|---|---|---|---| +| `a` | Age | Direct | Identity | +| `b` | Build | Special (h/w) | Appearance | +| `c` | Clothing | Direct, `/` ok | Appearance | +| `d` | Editor / IDE | Multi | Tech | +| `e` | Education | Direct | Identity | +| `f` | Food / Cooking | Direct | Lifestyle | +| `g` | Geek Specialization | Special | Identity | +| `h` | Hair | Multi (1-letter) | Appearance | +| `i` | AI Stance | Direct | Stance | +| `j` | Gaming | Multi | Entertainment | +| `k` | Books | Direct | Entertainment | +| `l` | Spoken Languages | Multi (ISO) | Identity | +| `m` | Music | Multi | Entertainment | +| `n` | *(reserved)* | — | — | +| `o` | Operating System | Multi | Tech | +| `p` | Programming Languages | Multi | Tech | +| `q` | Security / Hacking | Direct, `/` ok | Tech | +| `r` | Religion | Single | Stance | +| `s` | Sex / Relationships | Direct, `/` ok | Lifestyle | +| `t` | TV / Film | Multi | Entertainment | +| `u` | *(reserved)* | — | — | +| `v` | Politics | Special (s/e) | Stance | +| `w` | Hardware | Direct | Tech | +| `x` | Comics / Manga | Multi | Entertainment | +| `y` | Fitness | Direct | Lifestyle | +| `z` | Maker / DIY | Direct | Lifestyle | + +--- +## Field definitions + +--- + +### a — Age + +0. **Under 10** — Still loading. Baby Shark has more life experience. +1. **10-14** — Old enough for Linux opinions, too young to drive to the meetup. +2. **15-19** — Convinced you know everything. Might be right about the tech stuff. +3. **20-24** — Student loans arrived but so has 3am pizza freedom. +4. **25-34** — Peak earning-to-caring ratio. GitHub green, back complaining. +5. **35-49** — You remember dial-up noises. Kids ask what a floppy disk is. +6. **50-64** — You were there when it happened. All of it. +7. **65+** — Living legend. Your software runs on OSes born decades after you. + +--- + +### b — Build + +Format: `b<height>/<width>`. Each 0–7. 0 = extremely small, 4 = average, 7 = extremely large. `+` modifier permitted. + +**Height:** 0 = Extremely short · 1 = Very short · 2 = Short · 3 = Below average · 4 = Average · 5 = Above average · 6 = Tall · 7 = Extremely tall + +**Width:** 0 = Extremely thin · 1 = Very thin · 2 = Slim · 3 = Below average · 4 = Average · 5 = Above average · 6 = Broad · 7 = Extremely broad + +> `b6/3` — tall and slim. +> `b4/4` — average. Chairs were designed for you. + +--- + +### c — Clothing + +0. **Nudist** — Quite a fashion statement. +1. **Punk** — Safety pins are load-bearing. +2. **Political tees** — Your shirts have opinions so you don't have to. +3. **Jeans & tee** — Universal geek uniform. You own seven identical shirts. +4. **Average** — Inoffensive. Forgettable. Exactly as intended. +5. **Smart casual** — You've mastered the blazer-over-tee. +6. **Formal** — You iron things. On purpose. +7. **Suit daily** — CEO, lawyer, or cosplaying as one. + +--- + +### d — Editor / IDE + +The editor holy war, now quantified. + +| Short | (Long) | Name | Short | (Long) | Name | +|---|---|---|---|---|---| +| `vi` | `(vim)` | Vim / Neovim | `em` | `(emacs)` | Emacs | +| `vs` | `(vscode)` | VS Code | `ij` | `(idea)` | IntelliJ / JetBrains | +| `xc` | `(xcode)` | Xcode | `vt` | `(vstudio)` | Visual Studio | +| `ed` | — | ed | `na` | `(nano)` | nano / pico | +| `su` | `(sublime)` | Sublime Text | `ec` | `(eclipse)` | Eclipse | +| `np` | `(npp)` | Notepad++ | `hx` | `(helix)` | Helix | +| `ze` | `(zed)` | Zed | `ka` | `(kakoune)` | Kakoune | +| `lp` | `(lapce)` | Lapce | `at` | `(atom)` | Atom | +| `nv` | `(nvchad)` | NvChad / LazyVim | | | | + +Scale: **proficiency** (see global scale table). + +> 0: Opened it by accident, couldn't close it. +> 7: The editor is an extension of my nervous system. + +--- + +### e — Education + +0. **None / primary** — School of life. And YouTube. +1. **Middle school** — Survived. Emotionally, jury's still out. +2. **High school** — They said best years. They lied. +3. **Trade / associates** — You can actually do things, unlike philosophy majors. +4. **Bachelors** — Four years and paper that cost more than your car. +5. **Masters** — First degree wasn't enough to convince anyone. +6. **PhD** — Call me Doctor. Especially at parties. +7. **Post-doc** — Forgotten what sunlight looks like. + +--- + +### f — Food / Cooking + +0. **Microwave only** — Smoke detector is your kitchen timer. +1. **Boils water** — Sometimes remembers to turn off stove. +2. **Basic meals** — Eggs and pasta. The two food groups. +3. **Follows recipes** — To the letter. Substitution is heresy. +4. **Home cook** — Friends don't dread your dinner invitations. +5. **Experiments** — Sometimes works. You pretend you planned it. +6. **Hosts dinners** — Spice rack has subdivisions. +7. **Chef level** — Own a mandoline, all fingers intact. + +--- + +### g — Geek Specialization + +Mandatory. `/` separates domains. `~` prefixes custom domains. `$` after a domain = paid. No ratings. + +#### Computing & Tech + +| Code | Domain | Code | Domain | +|---|---|---|---| +| `cs` | Computer Science | `ai` | Artificial Intelligence | +| `ml` | Machine Learning | `cy` | Cybersecurity | +| `ds` | Data Science | `bc` | Blockchain | +| `io` | Internet of Things | `qc` | Quantum Computing | +| `vr` | Virtual Reality | `os` | Operating Systems | +| `dv` | DevOps | `ap` | API Development | +| `cl` | Cloud Infrastructure | `eg` | Edge Computing | +| `sc` | Ethical Hacking | `ux` | User Experience | +| `wp` | Web Performance | `db` | Databases | +| `em` | Embedded Systems | `fp` | Functional Programming | +| `nx` | Networking | `cv` | Computer Vision | +| `nl` | NLP / Comp. Linguistics | `cr` | Cryptography | + +#### Science & Medicine + +| Code | Domain | Code | Domain | +|---|---|---|---| +| `bi` | Biology | `cm` | Chemistry | +| `ph` | Physics | `md` | Medicine | +| `nr` | Neuroscience | `ev` | Environmental | +| `fs` | Forensics | `fd` | Food Science | +| `as` | Astronomy | `gl` | Geology | +| `bt` | Biotech | `gn` | Genetics | + +#### Engineering & Making + +| Code | Domain | Code | Domain | +|---|---|---|---| +| `ee` | Electrical Eng. | `me` | Mechanical Eng. | +| `rb` | Robotics | `dy` | DIY / Maker | +| `tp` | 3D Printing | `ar` | Arduino | +| `ce` | Civil Eng. | `ae` | Aerospace Eng. | +| `am` | Additive Mfg. | `ct` | Control Systems | + +#### Academic & Humanities + +| Code | Domain | Code | Domain | +|---|---|---|---| +| `mt` | Mathematics | `pl` | Philosophy | +| `ed` | Education | `lb` | Library Science | +| `lw` | Law | `ss` | Social Science | +| `py` | Psychology | `cg` | Cognitive Science | +| `li` | Linguistics | `hs` | History | +| `an` | Anthropology | `ec` | Economics | + +#### Art & Design + +| Code | Domain | Code | Domain | +|---|---|---|---| +| `gd` | Graphic Design | `ad` | Animation | +| `fa` | Fine Arts | `mu` | Music | +| `pa` | Performing Arts | `sr` | Screenwriting | +| `tw` | Tech Writing | `wr` | Writing | +| `vd` | Game Design | `pg` | Photography | +| `tx` | Textile Arts | `ty` | Typography | + +#### Business & Comms + +`bz` Business · `mk` Marketing · `gv` Government · `lo` Logistics · `qa` QA · `pm` Project Mgmt · `hr` HR + +#### Culture & Society + +`mm` Memes · `fn` Fandom · `pp` Pop Culture · `gn` Gender Studies · `al` Alt Lifestyles + +#### Games & Media + +`rp` RPG · `sm` Streaming · `pd` Podcasting · `cw` Cosplay + +#### Futurism + +`ax` Aerospace · `ft` Futurism · `ali` Alien Theories · `tr` Transhumanism + +#### Custom + +`~fermenting` `~beekeeping` `~lockpicking` `~origami` — anything goes. + +> `gcs$/ai/wr~fermenting` — paid CS geek, also into AI, writing, and fermenting. + +--- + +### h — Hair + +| Short | Name | +|---|---| +| `h` | Head | +| `f` | Face / beard | +| `b` | Brows | +| `m` | Mustache | +| `s` | Sideburns | + +0. **Alopecia** +1. **Shaved** +2. **Stubble** +3. **Below average** +4. **Average** +5. **Above average** +6. **Impressive** +7. **Sasquatch** + +--- + +### i — AI Stance + +0. **Butlerian Jihadist** — Would unplug every GPU on earth. +1. **Strongly opposed** — 'No AI' in bio, code, and dating profile. +2. **Skeptical** — Prefer human-authored everything. +3. **Cautious** — Ethics papers keep you up at night. +4. **Neutral tool** — Like a hammer. No opinions about hammers. +5. **Positive** — Copilot saved 20 minutes today. +6. **Enthusiast** — Cyborg partnership workflow. +7. **Singularity evangelist** — Grocery list is AI-generated. + +--- + +### j — Gaming + +**Genre:** + +| Short | (Long) | Name | Short | (Long) | Name | +|---|---|---|---|---|---| +| `rp` | `(rpg)` | RPG | `fp` | `(fps)` | Shooter | +| `st` | `(str)` | Strategy | `pz` | `(pzl)` | Puzzle | +| `si` | `(sim)` | Simulation | `mm` | `(mmo)` | MMO | +| `ad` | `(adv)` | Adventure | `sp` | `(spo)` | Sports | +| `mb` | `(mba)` | Metroidvania | `ro` | `(rog)` | Roguelike | +| `su` | `(surv)` | Survival | `sa` | `(sand)` | Sandbox | +| `rr` | `(race)` | Racing | `fi` | `(fight)` | Fighting | +| `ho` | `(horror)` | Horror | | | | + +**Platform:** + +| Short | (Long) | Name | Short | (Long) | Name | +|---|---|---|---|---|---| +| `pc` | — | PC | `ps` | — | PlayStation | +| `xb` | `(xbox)` | Xbox | `ns` | `(switch)` | Switch | +| `mo` | `(mobile)` | Mobile | `re` | `(retro)` | Retro | +| `vr` | — | VR | `sd` | `(steamdeck)` | Steam Deck | + +**Tabletop:** + +| Short | (Long) | Name | Short | (Long) | Name | +|---|---|---|---|---|---| +| `dn` | `(dnd)` | D&D | `pf` | `(path)` | Pathfinder | +| `cc` | `(coc)` | Call of Cthulhu | `sr` | — | Shadowrun | +| `wo` | `(wod)` | World of Darkness | `ft` | `(fate)` | Fate | +| `gu` | `(gurps)` | GURPS | `bg` | — | Board games | +| `mt` | `(mtg)` | Magic: TG | `wh` | — | Warhammer | + +Scale: **enthusiasm** (see global scale table). + +> 0: Video games are a waste of time. +> 7: People disconnect when they see your name. + +--- + +### k — Books + +0. **Illiterate by choice** — Words are tiny drawings that haven't tried hard enough. +1. **Not since school** — Didn't finish that one either. +2. **Web only** — You call this 'reading.' +3. **Occasional** — Mostly when trapped on a plane. +4. **Few/year** — Goodreads updated sporadically. +5. **Regular** — To-read pile doubles as furniture. +6. **Avid** — Library cards from multiple jurisdictions. +7. **Book/week** — Shelves have shelves. Read this spec for fun. + +--- + +### l — Spoken Languages + +ISO 639-1 codes + proficiency 0–7. `$` and `+` permitted. + +0. **None** +1. **Few words** +2. **Tourist** +3. **Beginner** +4. **Conversational** +5. **Proficient** +6. **Fluent** +7. **Native** + +Common codes: `en` English · `es` Spanish · `fr` French · `de` German · `zh` Chinese · `ar` Arabic · `ja` Japanese · `ko` Korean · `pt` Portuguese · `ru` Russian · `hi` Hindi · `it` Italian · `nl` Dutch · `sv` Swedish · `tr` Turkish · `pl` Polish · `uk` Ukrainian · `fa` Farsi · `he` Hebrew · `th` Thai · `vi` Vietnamese · `id` Indonesian · `ms` Malay · `sw` Swahili · `bn` Bengali · `ta` Tamil + +> `lar7$en6de3+5` — native Arabic (paid translator), fluent English, learning German (beginner, aspiring proficient). + +--- + +### m — Music + +| Short | (Long) | Name | Short | (Long) | Name | +|---|---|---|---|---|---| +| `rk` | `(rock)` | Rock | `mt` | `(metal)` | Metal | +| `pk` | `(punk)` | Punk | `jz` | `(jazz)` | Jazz | +| `bl` | `(blues)` | Blues | `fk` | `(folk)` | Folk | +| `cl` | `(clas)` | Classical | `el` | `(elec)` | Electronic | +| `hp` | `(hip)` | Hip-hop | `pp` | `(pop)` | Pop | +| `rb` | `(rnb)` | R&B | `cn` | `(coun)` | Country | +| `ab` | `(amb)` | Ambient | `pg` | `(prog)` | Progressive | +| `rg` | `(reg)` | Reggae | `in` | `(ind)` | Indie | +| `sl` | `(soul)` | Soul | `lt` | `(lat)` | Latin | +| `wr` | `(wrld)` | World | `dk` | `(dnb)` | Drum & Bass | +| `tr` | `(trap)` | Trap | `lo` | `(lofi)` | Lo-fi | +| `sy` | `(synth)` | Synthwave | `go` | `(gospel)` | Gospel | +| `op` | `(opera)` | Opera | `ga` | `(garage)` | Garage | + +Scale: **enthusiasm** (see global scale table). + +> 0: This genre is an assault on sound. +> 7: This genre IS your personality. + +--- + +### o — Operating System + +**Linux (x prefix):** + +| Short | (Long) | Name | Short | (Long) | Name | +|---|---|---|---|---|---| +| `xa` | `(xarch)` | Arch | `xd` | `(xdeb)` | Debian | +| `xu` | `(xubu)` | Ubuntu | `xm` | `(xmint)` | Mint | +| `xp` | `(xpop)` | Pop!_OS | `xf` | `(xfed)` | Fedora | +| `xr` | `(xrh)` | Red Hat | `xc` | `(xcent)` | CentOS/Alma/Rocky | +| `xs` | `(xsuse)` | OpenSUSE | `xg` | `(xgen)` | Gentoo | +| `xj` | `(xmanj)` | Manjaro | `xsl` | `(xslk)` | Slackware | +| `xn` | `(xnix)` | NixOS | `xk` | `(xkali)` | Kali | +| `xv` | `(xvoid)` | Void | `xz` | `(xzor)` | Zorin | +| `xx` | `(xmx)` | MX Linux | `xt` | `(xtail)` | Tails | +| `xq` | `(xqube)` | Qubes | `xl` | `(xlfs)` | LFS | +| `xe` | `(xelem)` | Elementary | `xw` | `(xwsl)` | WSL | +| `xi` | `(ximmut)` | Immutable | `xb` | `(xbedrock)` | Bedrock | + +**BSD:** +`fb` FreeBSD · `ob` OpenBSD · `nb` NetBSD · `db` DragonflyBSD + +**Windows:** + +| Short | (Long) | Name | Short | (Long) | Name | +|---|---|---|---|---|---| +| `wt` | `(wten)` | Windows 10 | `we` | `(welv)` | Windows 11 | +| `ws` | `(wsrv)` | Win Server | | | | + +**Mac:** + +| Short | (Long) | Name | Short | (Long) | Name | +|---|---|---|---|---|---| +| `mc` | `(mac)` | macOS | | | | + +**Mobile:** + +| Short | (Long) | Name | Short | (Long) | Name | +|---|---|---|---|---|---| +| `an` | `(android)` | Android | `io` | `(ios)` | iOS | +| `pm` | `(pmos)` | postmarketOS | `li` | `(lineage)` | LineageOS | + +**Other:** + +| Short | (Long) | Name | Short | (Long) | Name | +|---|---|---|---|---|---| +| `sl` | `(sol)` | Solaris | `ax` | `(aix)` | AIX | +| `ch` | `(chrome)` | ChromeOS | `ha` | `(haiku)` | Haiku | +| `tm` | `(temple)` | TempleOS | `se` | `(serenity)` | SerenityOS | +| `rx` | `(redox)` | Redox | `pl` | `(plan9)` | Plan 9 | + +Scale: **proficiency** (see global scale table). + +> 0: Would mass-format every drive running this. +> 7: You ARE the sysadmin. First person plural. + +--- + +### p — Programming Languages + +| Short | (Long) | Name | Short | (Long) | Name | +|---|---|---|---|---|---| +| `py` | `(python)` | Python | `rs` | `(rust)` | Rust | +| `c` | — | C | `cp` | `(cpp)` | C++ | +| `cs` | `(csharp)` | C# | `jv` | `(java)` | Java | +| `kt` | `(kotlin)` | Kotlin | `sw` | `(swift)` | Swift | +| `ph` | `(php)` | PHP | `pl` | `(perl)` | Perl | +| `lu` | `(lua)` | Lua | `hs` | `(haskell)` | Haskell | +| `cj` | `(clj)` | Clojure | `er` | `(erlang)` | Erlang | +| `ex` | `(elixir)` | Elixir | `sc` | `(scala)` | Scala | +| `jl` | `(julia)` | Julia | `r` | — | R | +| `m` | `(matlab)` | MATLAB | `zg` | `(zig)` | Zig | +| `ni` | `(nim)` | Nim | `as` | `(asm)` | Assembly | +| `sq` | `(sql)` | SQL | `ba` | `(bash)` | Bash | +| `ps` | `(psh)` | PowerShell | `vb` | — | Visual Basic | +| `da` | `(dart)` | Dart | `oc` | `(objc)` | Obj-C | +| `ls` | `(lisp)` | Lisp | `js` | — | JavaScript | +| `ts` | — | TypeScript | `go` | — | Go | +| `rb` | `(ruby)` | Ruby | `ml` | `(ocaml)` | OCaml | +| `fs` | `(fsharp)` | F# | `pr` | `(prolog)` | Prolog | +| `co` | `(cobol)` | COBOL | `fo` | `(fortran)` | Fortran | +| `gd` | `(gdscript)` | GDScript | `vl` | `(vhdl)` | VHDL | +| `sv` | `(sysv)` | SystemVerilog | `cr` | `(crystal)` | Crystal | +| `hy` | `(hylang)` | Hy | `rk` | `(racket)` | Racket | +| `tc` | `(tcl)` | Tcl | `aw` | `(awk)` | AWK | +| `sd` | `(sed)` | sed | `wm` | `(wasm)` | WASM | + +Scale: **proficiency** (see global scale table). + +> 0: Mass-produced negative opinions without writing a line. +> 7: You ARE the language. People cite your blog posts. + +--- + +### q — Security / Hacking + +0. **No security** — Password is 'password'. Click every link. +1. **Don't care** — Firewalls are a construction thing. +2. **Default passwords** — Pet name plus birth year. Reused everywhere. +3. **Basic awareness** — Know phishing is bad. Fallen for it once. +4. **Password manager** — Normal human security. +5. **2FA everywhere** — Judge friends' passwords. +6. **Encrypts everything** — Paranoid but justified. +7. **Tinfoil hat** — NSA has a file but can't read it either. + +--- + +### r — Religion + +**Single value only** — one tradition + devoutness rating. Parser rejects multiple sub-IDs. + +| Short | (Long) | Name | Short | (Long) | Name | +|---|---|---|---|---|---| +| `ch` | `(chr)` | Christian | `is` | `(isl)` | Islam | +| `ju` | `(jud)` | Judaism | `hi` | `(hin)` | Hindu | +| `bu` | `(bud)` | Buddhist | `sk` | `(sik)` | Sikh | +| `pg` | `(pag)` | Pagan | `de` | `(dei)` | Deist | +| `ag` | `(agn)` | Agnostic | `at` | `(ath)` | Atheist | +| `pn` | `(pan)` | Pantheist | `sp` | `(spi)` | Spiritual | +| `zo` | `(zor)` | Zoroastrian | `ja` | `(jain)` | Jain | +| `ta` | `(tao)` | Taoist | `sh` | `(shin)` | Shinto | +| `ba` | `(bah)` | Bahá'í | `dr` | `(druz)` | Druze | + +Rating = devoutness: 0 = Hostile, 4 = Cultural, 7 = Clergy-level. + +> `ris6` — devout Muslim. `rath4` — culturally atheist. + +--- + +### s — Sex / Relationships + +0. **Celibate** — Made your peace. +1. **Not active (unwilling)** — Dating profile is unrewarded effort. +2. **Not active** — 'Focusing on yourself.' Friends skeptical. +3. **Complicated** — Status requires a flowchart. +4. **Private** — None of your business. +5. **Dating** — At least two dating apps. +6. **Partnered** — Found someone who tolerates your geekery. +7. **Married w/ kids** — Evidence is small, loud, doesn't sleep. + +--- + +### t — TV / Film + +**Sci-Fi:** + +| Short | (Long) | Name | Short | (Long) | Name | +|---|---|---|---|---|---| +| `st` | `(trek)` | Star Trek | `sw` | `(wars)` | Star Wars | +| `sg` | `(gate)` | Stargate | `ex` | `(exp)` | Expanse | +| `bs` | `(bsg)` | Battlestar | `bb` | `(bab)` | Babylon 5 | +| `ff` | — | Firefly | `du` | `(dune)` | Dune | +| `fn` | `(fnd)` | Foundation | `dw` | `(drwho)` | Doctor Who | +| `tb` | `(tbp)` | 3 Body Problem | `si` | `(silo)` | Silo | +| `fa` | `(fall)` | Fallout | `al` | `(alien)` | Alien | +| `bd` | `(blade)` | Blade Runner | `or` | `(orville)` | Orville | + +**Fantasy:** + +| Short | (Long) | Name | Short | (Long) | Name | +|---|---|---|---|---|---| +| `go` | `(got)` | Game of Thrones | `wo` | `(wot)` | Wheel of Time | +| `ro` | `(rop)` | Rings of Power | `wi` | `(wit)` | Witcher | +| `sn` | `(sand)` | Sandman | | | | + +**Other:** + +| Short | (Long) | Name | Short | (Long) | Name | +|---|---|---|---|---|---| +| `mp` | `(monty)` | Monty Python | `bt` | `(bbt)` | Big Bang Theory | +| `rm` | — | Rick & Morty | `bl` | — | Black Mirror | +| `sv` | `(sev)` | Severance | `mr` | `(mrobot)` | Mr. Robot | +| `hm` | `(humans)` | Humans | `ww` | `(westworld)` | Westworld | +| `dp` | `(devs)` | Devs | | | | + +Scale: **enthusiasm** (see global scale table). + +> 0: Crime against storytelling. +> 7: Know the lore deeper than the writers. + +--- + +### v — Politics + +Format: `v<social>/<economic>`. No modifiers. + +**Social:** 0 = Far-right authoritarian · 4 = Centrist · 7 = Far-left libertarian +**Economic:** 0 = Unregulated capitalism · 4 = Mixed economy · 7 = Full socialism + +> `v5/3` — socially center-left, economically center-right. +> `v4/4` — centrist. You annoy both sides equally. + +--- + +### w — Hardware + +0. **Defeated by USB** — The cable won. +1. **Can plug in** — Big hole is for power. +2. **Replaced a part** — Three YouTube videos and mild weeping. +3. **Troubleshoots** — Can tell RAM from a graphics card. +4. **Built a PC** — Cable management isn't great but it posted. +5. **Comfortable** — Friends call when things break. +6. **Mods regularly** — Void warranties recreationally. +7. **Builds everything** — Manufactured your own PCBs. + +--- + +### x — Comics / Manga + +| Short | (Long) | Name | Short | (Long) | Name | +|---|---|---|---|---|---| +| `dc` | — | DC Comics | `mv` | `(marvel)` | Marvel | +| `mg` | `(manga)` | Manga | `dl` | `(dilbert)` | Dilbert | +| `xk` | `(xkcd)` | XKCD | `in` | `(indie)` | Indie | +| `wt` | `(webtoon)` | Webtoon | `gn` | `(graphicnovel)` | Graphic Novels | + +Scale: **enthusiasm** (see global scale table). + +> 0: Comics are for children. (You're wrong.) +> 7: Collection requires its own room. + +--- + +### y — Fitness + +0. **What is outside** — Cardiovascular exercise is walking to the fridge. +1. **Avoids activity** — Physical activity is a social obligation. +2. **Occasional walk** — Coffee is the point, not the walk. +3. **Light activity** — Own athletic wear. Never been to a gym. +4. **Some exercise** — Can climb stairs without existential crisis. +5. **Regular workouts** — Track your steps. +6. **Very active** — Resting heart rate impresses doctors. +7. **Daily athlete** — Body is a temple. Temple has a squat rack. + +--- + +### z — Maker / DIY + +0. **Defeated by IKEA** — Allen keys are your nemesis. +1. **IKEA once** — One screw left over. Probably fine. +2. **Basic repairs** — Holes approximately where they should be. +3. **Handy** — Fixes hold. Duct tape is structural. +4. **Simple projects** — A shelf here, a birdhouse there. +5. **Regular maker** — Projects folder never shrinks. +6. **Advanced** — Workshop has zones. +7. **Built my house** — Hardware store sends Christmas card. + +--- +## Extending UGI + +Any field with sub-IDs accepts custom entries via `~`: + +``` +gcs/~mycology geek of CS and mycology +m~synthwave6 synthwave enthusiast +t~severance7 severance obsessed +j~larp5 LARP, competent +o~beos4 BeOS, neutral nostalgia +``` + +Letters `n` and `u` are reserved for future spec versions. + +--- +## Examples + +### jdoe — Full-stack developer + +``` +------- BEGIN UGI BLOCK ------- +v:0 @jdoe Gcs$/dev +A4 E4 Len7 +Oxa6 Owe5 Ppy6$ Pjs6$ Pts5 Prs4+6 Dvs6 W5 Q4 +I5 V5/4 Rag4 +Tst5 Tex7 K5 Xxk6 Jst5 Jpc6 Mrk5 Min4 +B5/4 C3 Hh4 Hf5 Hm4 S6 Y4 F4 Z3 +-------- END UGI BLOCK -------- +``` + +``` +ugi:0@jdoe:gcs$/dev,a4,b5/4,c3,hh4f5m4,e4,len7,oxa6we5,ppy6$js6$ts5rs4+6,dvs6,w5,q4,i5,v5/4,rag4,tst5ex7,k5,xxk6,jst5pc6,mrk5in4,s6,y4,f4,z3 +``` + +### neo — Security researcher + +``` +------- BEGIN UGI BLOCK ------- +v:0 @neo Gcy$/sec/os +A3 E6 Len6 Lzh4 +Oxd7$ Ofb6 Pc6$ Pba7 Pas5 Prs5 Ded7 W6 Q7$ +I1 V6/5 Rat5 +Tff7 Tbs6 Tbl6 K7 Jro6 Jpc7 Mmt6 Mel5 +B5/3 C1 Hh2 S2 Y5 F3 Z6 +-------- END UGI BLOCK -------- +``` + +``` +ugi:0@neo:gcy$/sec/os,a3,b5/3,c1,hh2,e6,len6zh4,oxd7$fb6,pc6$ba7as5rs5,ded7,w6,q7$,i1,v6/5,rat5,tff7bs6bl6,k7,jro6pc7,mmt6el5,s2,y5,f3,z6 +``` + +### hax0r — Hardware hacker + +``` +------- BEGIN UGI BLOCK ------- +v:0/3 @hax0r Gee$/rb/dy~solder +A5 E4 Lja7 Len5 +Oxg7 Ofb5 Pc5 Pba6 Pas7$ Dem5 W7$ Q6 +I2 V3/3 Rbu5 +Tbb6 Tff7 K5 Xxk6 Xdl5 Jre7 Jpc6 Jbg5 Mmt7 Mpk6 +B6/5 C2 Hh3 Hf6+7 Hm5 S3 Y5 F4 Z7$ +-------- END UGI BLOCK -------- +``` + +``` +ugi:0/3@hax0r:gee$/rb/dy~solder,a5,b6/5,c2,hh3f6+7m5,e4,lja7en5,oxg7fb5,pc5ba6as7$,dem5,w7$,q6,i2,v3/3,rbu5,tbb6ff7,k5,xxk6dl5,jre7pc6bg5,mmt7pk6,s3,y5,f4,z7$ +``` + +--- +## Comparison with predecessors + +| | Geek Code 3.12 (1996) | Geek Code 2026 | Hacker Key v4 (2006) | UGI v0 | +|---|---|---|---|---| +| Rating | +/- stacking | +/- stacking | 0-9 | 0-7 octal | +| Length | 4-6 lines | 4-8 lines | 1 line | 1 or 4-8 | +| Fields | ~25 | ~35+ | ~16 | 24+2 | +| URI-safe | No | No | Mostly | Yes | +| Case | Sensitive | Sensitive | Sensitive | Insensitive | +| Extensible | No | No | Limited | ~ custom | +| Format | Block | Block | Inline | Block+URI | +| Active | 1996 | GitHub | 2006 | Draft | + +### Fields retained + +`a` age brackets, `b` dimensions, `c` dress/clothing, `e` education, `g` geek type, expanded, `h` hair/beard, `k` books, `o` os merged, `p` programming, `q` security/pgp, `s` sex, `t` tv merged, `v` politics, `w` hardware — all present in one or both predecessors. + +### Fields added + +`d` — Editor war must be documented. +`f` — Geeks cook now. +`i` — Defining divide of the 2020s. +`j` — Gaming beyond DOOM. +`l` — Geek culture is global. +`m` — Absent from predecessors. +`r` — From Hacker Key. +`x` — Beyond Dilbert. +`y` — Modern geek exercises. +`z` — Maker movement. + +### Fields removed + +Usenet — dead. Kibo — niche. DOOM — use j. OS/2, VMS — use o+~custom. MBTI — pop psychology. Residence — low value. GitHub handle — @handle. I/O — abstract. Cracking — use q. Lang hacking — in g. Math level — in e+g. Prog methodology — in p. + +--- +## Quick reference + +``` +FORMAT: ugi:<ver>[/<rev>]@<handle>:<fields> +SCALE: 0=hostile 1=dislike 2=meh 3=slight- 4=neutral 5=like 6=strong 7=obsessed +MODIFY: $ = paid + = aspire / = fluctuate,separate ~ = custom + +a age b build c clothing d editor / ide e education +f food / cooking g geek specialization h hair i ai stance j gaming +k books l spoken languages m music [n reserved] o operating system +p programming languages q security / hacking r religion s sex / relationships t tv / film +[u reserved] v politics w hardware x comics / manga y fitness +z maker / diy + +$+ f j l o p q w y z $ only g + only b c d e h k s none a i m r t v x +``` + +--- +## References + +- [Geek Code (v0.1–latest)](https://sig.codes/geek/) — Robert A. Hayden, 1993-1996 +- [Geek Code 4.0+](https://sig.codes/geek-4.0/) — exarobibliologist, 2019-2026 +- [Hacker Key (v0.1–latest)](https://sig.codes/hacker-key/) — Chris Allegretta, 2003-2006 +- [sig.codes](https://sig.codes/) +- [Geek Code on Wikipedia](https://en.wikipedia.org/wiki/Geek_Code) +- [Geek Code v3.12 mirror](https://geekcode.xyz/) +- [Hacker Key v4 mirror](https://sig.codes/hacker-key/4/) + +--- + +## License + +MIT — see [LICENSE](./LICENSE). +## Check + +- **[ugi.gumx.cc](https://ugi.gumx.cc)** ([repo](https://git.sr.ht/~gumxcc/ugi.gumx.cc)) — web-based UGI encoder, decoder, and format converter +- **ugi-cli** ([repo](https://git.sr.ht/~gumxcc/ugi-cli)) — command-line tool for encoding, decoding, and converting UGI strings + +--- + +## Generator scripts + +The `scripts/` directory contains generators that produce all artifacts from `ugi_registry_v0.json`. +Each script takes the registry JSON path and output file path as arguments: + +```bash +python scripts/gen_spec.py ugi_registry_v0.json README.md +python scripts/gen_abnf.py ugi_registry_v0.json grammar/UGI_GRAMMAR_v0.abnf +python scripts/gen_ebnf.py ugi_registry_v0.json grammar/UGI_GRAMMAR_v0.ebnf +``` + +### Requirements + +- Python 3.8+ +- No external dependencies + +### Project structure + +``` +ugi-spec/ +├── ugi_registry_v0.json # source of truth +├── scripts/ +│ ├── gen_spec.py # spec markdown generator +│ ├── gen_abnf.py # ABNF grammar generator +│ └── gen_ebnf.py # EBNF grammar generator +├── grammar/ +│ ├── UGI_GRAMMAR_v0.abnf # generated ABNF +│ └── UGI_GRAMMAR_v0.ebnf # generated EBNF +├── tests/ +│ └── cases.json # test cases for all field types and formats +└── README.md # this file (generated spec + usage) +``` + +--- + +## License + +MIT — see [LICENSE](./LICENSE). + |
