5.4 KiB
5.4 KiB
Arcology Sites
- Arcology FastAPI Self-Hosting
- The Lion's Rear
- The Arcology Garden
- The Complete Computing Environment
- Topic Index – the "fact site"
- "local" site for development
Arcology is designed to allow a writer to publish writing from across their org-roam Knowledge Base to multiple domains, interlinking between them where necessary. Each site can provide its own CSS – and maybe eventually its own page template – and some minimal metadata, all of which are stored in dataclasses which are meant to be used as courtesy classes to store data for the HTML generator and link router.
import arcology.sites
site_name = "arcology"
arcology.sites.sites.get(site_name)
arcology.sites.doc
from dataclasses import dataclass
from typing import Optional, List
from enum import Enum
from arcology.config import Environment as Env
from arcology.config import get_settings
@dataclass
class Site():
key: str
domains: dict[Env, List[str]]
title: str
css_file: Optional[str]
node_color: Optional[str]
def get_domains(self, env: Env = get_settings().arcology_env):
return self.domains.get(env, [])
sites = dict()
from functools import lru_cache
from typing import Optional
env = get_settings().arcology_env
@lru_cache(maxsize=16)
def host_to_site(host: str) -> Optional[Site]:
for site in sites.values():
domains = site.domains.get(env)
if domains is None:
raise Exception(f"no domains for site {site}+{env}?")
if host in domains:
return site
Arcology FastAPI Self-Hosting
Of course this thing self-hosts. :)
arcology = Site(
key="arcology",
domains={
Env.prod: ["engine.arcology.garden"],
Env.dev: ["engine.arcology.garden:8000"]
},
title="The Arcology Site Engine",
css_file=None,
node_color="#67b4f8"
)
sites["arcology"] = arcology
The Lion's Rear
lionsrear = Site(
key="lionsrear",
domains={
Env.prod: ["thelionsrear.com"],
Env.dev: ["dev.thelionsrear.com:8000"]
},
title="The Lion's Rear",
css_file="/static/css/lionsrear.css",
node_color="#87af87"
)
sites["lionsrear"] = lionsrear
:root {
--alert: #CC6960;
--primary: #707231;
--secondary: #ebbe7b;
--success: #67b4f8;
--warning: #7e5c41;
--white: #87af87;
--light-gray: #cfdcc2;
--medium-gray: #a0aa96;
--dark-gray: #82796C;
--black: #211F1C;
}
body {
background-color: var(--white);
}
section.backlinks {
padding: 0.5em;
border-radius: 1em;
background-color: var(--light-gray);
margin-bottom: 2em;
margin-top: 1em;
}
pre,code {
font-weight: bold;
}
The Arcology Garden
garden = Site(
key="garden",
domains={
Env.prod: ["arcology.garden"],
Env.dev: ["dev.arcology.garden:8000"]
},
title="The Arcology Garden",
css_file="/static/css/garden.css",
node_color="#a6dc68"
)
sites["garden"] = garden
:root {
--alert: #CC6960;
--primary: #707231;
--secondary: #ebbe7b;
--success: #67b4f8;
--warning: #7e5c41;
--white: #fcf6ed;
--light-gray: #f6e5cb;
--medium-gray: #BAAD9B;
--dark-gray: #82796C;
--black: #211F1C;
--bg: #a6dc68;
}
body {
background-color: var(--bg);
}
The Complete Computing Environment
cce = Site(
key="cce",
domains={
Env.prod: ["cce.whatthefuck.computer", "cce.rix.si"],
Env.dev: ["dev.cce"],
},
title="The Complete Computing Environment",
css_file="/static/css/cce.css",
node_color="#cc6960"
)
sites["cce"] = cce
:root {
--alert: #CC6960;
--primary: #707231;
--secondary: #ebbe7b;
--success: #67b4f8;
--warning: #7e5c41;
--white: #fcfcfc;
--light-gray: #dcdcec;
--medium-gray: #cacada;
--dark-gray: #808090;
--black: #211F1C;
}
body {
background-color: var(--dark-gray);
}
Topic Index – the "fact site"
doc = Site(
key="doc",
domains={
Env.prod: ["doc.rix.si"],
Env.dev: ["dev.topics"],
},
title="rrix's fact site",
css_file="/static/css/docsite.css",
node_color="#ebbe7b"
)
sites["doc"] = doc
:root {
--alert: #CC6960;
--primary: #707231;
--secondary: #ebbe7b;
--success: #67b4f8;
--warning: #7e5c41;
--white: #fcfcfc;
--light-gray: #dcdcec;
--medium-gray: #cacada;
--dark-gray: #808090;
--black: #211F1C;
}
body {
background-color: var(--medium-gray);
}
"local" site for development
local = Site(
key="local",
domains={
Env.prod: [],
Env.dev: ["localhost:8000"],
},
title="localhost",
css_file="/static/css/docsite.css",
node_color="#211F1C",
)
sites["local"] = local