memex dev updates

hacker directive 00

over the last months i've been working on converting my blog into a personal memex. i've made enough progress at this point to say something about it. it feels good to finally complete this rite of passage.

architecture

redo

gemini

https://git.sunshinegardens.org/~xj9/journal

my memex is a gem capsule that is mostly hand-written. the various repetitive functions involved in generating index pages, uploads, and whatnot are handled by the `*.do` files in the root of the memex repository. `redo` is a build system much like `make` designed by djb and adopted by folks who saw its advantages over `make`. the memex inherits the concept of incremental builds from `redo` so it can avoid unnecessary work.

the memex repo is organized into various modules and sections for data, redo scripts, and various subroutines. the primary configuration format is indental, which i adopted from oscean[i]. the configuration files are stored under `etc/`, subroutines (mostly python at this point) under `bin/`, templates under a directory of the same name, and finally the capsule contents and data are stored under `site/`.

i: oscean

.
├── all.do
├── atom.do
├── bin
│   ├── base58check
│   ├── capcom
│   ├── capcom.py
│   ├── formats
│   ├── gemini2html.py
│   ├── generate-feed
│   ├── generate-index
│   ├── gusmobile
│   ├── init-env
│   ├── md2gemini
│   ├── new-post
│   ├── update_sinks
│   ├── utemplate
│   └── utils.py
├── capcom.do
├── clean.do
├── convert-markdown.do
├── etc
│   ├── config.json
│   ├── feed.ndtl
│   ├── pikku-index.ndtl
│   ├── pikku.ndtl
│   ├── posts-index.ndtl
│   ├── sinks.json
│   ├── wiki-index.ndtl
│   └── wiki-thinkpad-index.ndtl
├── gem.do
├── index.do
├── index-pikku.do
├── index-posts.do
├── index-wiki.do
├── index-wiki-thinkpad.do
├── LICENSE
├── mirror.do
├── pikku.do
├── README.md
├── requirements.txt
├── scratch/
├── site
│   ├── archive.gmi
│   ├── ascii
│   ├── CAPCOM
│   ├── cat
│   ├── cv -> cvcvcv
│   ├── cvcvcv
│   ├── cvcvcv.gmi
│   ├── docs -> ./files/docs
│   ├── favicon.ico
│   ├── feed.atom
│   ├── feeds.txt
│   ├── feed.xml -> ./feed.atom
│   ├── files
│   ├── humans.txt
│   ├── img
│   ├── index.gmi
│   ├── index.xml -> ./feed.atom
│   ├── keybase.txt
│   ├── log
│   ├── magick.html
│   ├── _pages
│   ├── photos
│   ├── pikku.atom
│   ├── pikkulog
│   ├── pikku.txt
│   ├── posts
│   ├── projects
│   ├── replicate.gmi
│   ├── robots.txt
│   ├── rss.xml -> ./feed.atom
│   ├── tags
│   ├── tw.txt -> .well-known/webring/tw.txt
│   ├── vcard
│   ├── walkaway-handbook
│   └── wiki
├── sync.do
├── sync-ssb.do
├── templates
│   ├── feed.atom
│   ├── pikkulog-index.gmi
│   ├── posts-index.gmi
│   ├── wiki-index.gmi
│   └── wiki-thinkpad-index.gmi
├── themes
│   └── rod-iron
└── wiki-feed.do

the main subroutines in use right now are `./bin/generate-feed`, `./bin/generate-index`, and `./bin/capcom`. these provide atom feed generation, indexing, and atom subscription features respectively. indexing is currently very bare-bones, basically equivalent to `ls -r` with some filtering and the ability to wrap the result in a template. CAPCOM[ii] is actually one of ~solderpunk's[iii] projects which i adopted (much like av98 in bbnet).

ii: CAPCOM

iii: ~solderpunk

probably the nicest part of the gem capsule design is the overall simplicity of the system. previous versions of by journal were fairly complex tools for generating html that were much less flexible and somehow also less useful than gemini. the relative link structure within `site/` means that i can navigate my memex effortlessly using ACME[iv].

iv: ACME

`sync.do` copies a bunch of files from `~/notes` into the gem capsule. this is another memex repository which replicates my day-to-day logs and notes between my laptop and my phone using `syncthing`.

looking ahead

i would like to expand upon the indexing design to generate wiki-like backlinks for all of the pages within the capsule.

i've also though that some kind of transclusion features would be nice, but i don't want to actually inline the content statically. i have some vague ideas for doing this in bbnet[v] with gemini link annotations so that standard clients can still function normally.

v: bbnet

further integration with ACME would be excellent, especially `acme-sac` which is a port of ACME to the inferno operating system[vi]. i would also like to port all of the memex subroutines to limbo so i can depend on inferno exclusively. additionally, i would like to replace `syncthing` with a `9p` based portable file replication system.

vi: inferno operating system

SCIENTIA POTENTIA EST