252 lines
5.4 KiB
Org Mode
252 lines
5.4 KiB
Org Mode
:PROPERTIES:
|
|
:ID: 20211219T144255.001827
|
|
:ROAM_ALIASES: "An Arcology Spreads Over Multiple Domains"
|
|
:END:
|
|
#+TITLE: Arcology Sites
|
|
#+AUTO_TANGLE: t
|
|
#+FILETAGS: :Arcology:Development:
|
|
#+ARCOLOGY_KEY: arcology/sites
|
|
#+ARCOLOGY_ALLOW_CRAWL: t
|
|
|
|
Arcology is designed to allow a writer to publish writing from across their [[id:cce/org-roam][org-roam]] [[id:knowledge_base][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.
|
|
|
|
#+begin_src python :session *Python*
|
|
import arcology.sites
|
|
|
|
site_name = "arcology"
|
|
arcology.sites.sites.get(site_name)
|
|
arcology.sites.doc
|
|
#+end_src
|
|
|
|
#+begin_src python :tangle arcology/sites.py
|
|
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()
|
|
#+end_src
|
|
|
|
#+begin_src python :tangle arcology/sites.py
|
|
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
|
|
#+end_src
|
|
|
|
* [[id:arcology/readme][Arcology FastAPI Self-Hosting]]
|
|
|
|
Of course this thing self-hosts. :)
|
|
|
|
#+begin_src python :tangle arcology/sites.py
|
|
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
|
|
#+end_src
|
|
|
|
* [[id:af7445a2-e4e7-47e8-8faa-f87b76628383][The Lion's Rear]]
|
|
|
|
#+begin_src python :tangle arcology/sites.py
|
|
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
|
|
#+end_src
|
|
|
|
#+begin_src css :tangle arcology/static/css/lionsrear.css
|
|
: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;
|
|
}
|
|
#+end_src
|
|
|
|
* [[id:1e247294-5f0e-4956-9caa-2c5961236dfa][The Arcology Garden]]
|
|
|
|
#+begin_src python :tangle arcology/sites.py
|
|
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
|
|
#+end_src
|
|
|
|
#+begin_src css :tangle arcology/static/css/garden.css
|
|
: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);
|
|
}
|
|
|
|
#+end_src
|
|
|
|
* [[id:cce/cce][The Complete Computing Environment]]
|
|
|
|
#+begin_src python :tangle arcology/sites.py
|
|
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
|
|
#+end_src
|
|
|
|
#+begin_src css :tangle arcology/static/css/cce.css
|
|
: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);
|
|
}
|
|
#+end_src
|
|
|
|
* [[id:6b306fe3-fbc4-4ba7-bfcb-089c0564f9c3][Topic Index]] -- the "fact site"
|
|
|
|
#+begin_src python :tangle arcology/sites.py
|
|
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
|
|
#+end_src
|
|
|
|
#+begin_src css :tangle arcology/static/css/docsite.css
|
|
: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);
|
|
}
|
|
#+end_src
|
|
|
|
* "local" site for development
|
|
|
|
#+begin_src python :tangle arcology/sites.py
|
|
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
|
|
#+end_src
|