Author:
Hash:
Timestamp:
+561 -1714 +/-38 browse
Kevin Schoon [me@kevinschoon.com]
7bffc2801df029d4fcdbf5666c0264a52ce66e66
Fri, 16 May 2025 12:46:59 +0000 (6 months ago)
| 1 | diff --git a/README.md b/README.md |
| 2 | index 8d0ef70..3690504 100644 |
| 3 | --- a/README.md |
| 4 | +++ b/README.md |
| 5 | @@ -75,7 +75,7 @@ A general development channel `#ayllu` is available on [libera](ircs://irc.liber |
| 6 | |
| 7 | ## Installation |
| 8 | |
| 9 | - See the installation section in the [documentation](https://ayllu-forge.org/docs/installation) |
| 10 | + See the installation section in the [documentation](/docs/installation.md) |
| 11 | |
| 12 | ## Compiling From Source |
| 13 | |
| 14 | diff --git a/docs/README.md b/docs/README.md |
| 15 | new file mode 100644 |
| 16 | index 0000000..e12d27a |
| 17 | --- /dev/null |
| 18 | +++ b/docs/README.md |
| 19 | @@ -0,0 +1,8 @@ |
| 20 | + # Documentation |
| 21 | + |
| 22 | + Welcome to the Ayllu documentation 📖, this is section serves as an |
| 23 | + authoritative reference on all things related to the Ayllu code forge! |
| 24 | + |
| 25 | + **Beware** that Ayllu is currently under-documented and many things are |
| 26 | + changing. Documentation will be provided as time permits, contributions are |
| 27 | + gladly excepted ❤️. |
| 28 | diff --git a/docs/architecture.md b/docs/architecture.md |
| 29 | new file mode 100644 |
| 30 | index 0000000..2ba3fd3 |
| 31 | --- /dev/null |
| 32 | +++ b/docs/architecture.md |
| 33 | @@ -0,0 +1,3 @@ |
| 34 | + # The Architecture of Ayllu |
| 35 | + |
| 36 | + TODO |
| 37 | diff --git a/docs/builds.md b/docs/builds.md |
| 38 | new file mode 100644 |
| 39 | index 0000000..03c789f |
| 40 | --- /dev/null |
| 41 | +++ b/docs/builds.md |
| 42 | @@ -0,0 +1,46 @@ |
| 43 | + Ayllu contains a plugin called `ayllu-build` which is responsible for executing |
| 44 | + build manifests in a CI/CD environment. The design of the build system prioritizes |
| 45 | + the ability to run the entire workflow locally. |
| 46 | + |
| 47 | + ### An Example Local Workflow |
| 48 | + |
| 49 | + Build manifests are written in [Nickel](https://nickel-lang.org/). |
| 50 | + |
| 51 | + ```sh |
| 52 | + mkdir -p my-test-repo/.ayllu/build |
| 53 | + cd my-test-repo && git init |
| 54 | + # create a simple workflow that prints "Hello" and "World" |
| 55 | + cat <<EOF > .ayllu/build/main.ncl |
| 56 | + { |
| 57 | + workflows = [ |
| 58 | + { |
| 59 | + name = "Simple", |
| 60 | + steps = [ |
| 61 | + { |
| 62 | + name = "Hello", |
| 63 | + input = "echo -n Hello" |
| 64 | + }, |
| 65 | + { |
| 66 | + name = "World", |
| 67 | + input = "echo -n World" |
| 68 | + } |
| 69 | + ] |
| 70 | + } |
| 71 | + ] |
| 72 | + } |
| 73 | + EOF |
| 74 | + # validate the build plan and generate a DOT file to stdout |
| 75 | + ayllu_build plan |
| 76 | + >>> 2023-12-14T21:58:37.777493Z INFO ayllu_build:66: logger initialized |
| 77 | + >>> digraph { |
| 78 | + >>> 0 [ label = "Workflow: Simple" ] |
| 79 | + >>> 1 [ label = "Step: Hello" ] |
| 80 | + >>> 2 [ label = "Step: World" ] |
| 81 | + >>> 0 -> 1 [ label = "0" ] |
| 82 | + >>> 0 -> 2 [ label = "0" ] |
| 83 | + >>> } |
| 84 | + # if you have graphviz installed you can visualize this output: |
| 85 | + ayllu_build plan | dot -Tx11 |
| 86 | + # finally you can execute the workflow locally |
| 87 | + ayllu_build evaluate |
| 88 | + ``` |
| 89 | diff --git a/docs/configuration.md b/docs/configuration.md |
| 90 | new file mode 100644 |
| 91 | index 0000000..c6cce19 |
| 92 | --- /dev/null |
| 93 | +++ b/docs/configuration.md |
| 94 | @@ -0,0 +1,224 @@ |
| 95 | + +++ |
| 96 | + title = "Configuration" |
| 97 | + weight = 0 |
| 98 | + insert_anchor_links = "header" |
| 99 | + +++ |
| 100 | + |
| 101 | + # Initial Configuration |
| 102 | + |
| 103 | + After following the [installation](https://ayllu-forge.org/docs/installation) |
| 104 | + you need to setup your configuration file and initialize the database. |
| 105 | + |
| 106 | + ## User Based Installation |
| 107 | + |
| 108 | + ```sh |
| 109 | + mkdir ~/.config/ayllu |
| 110 | + ayllu config generate > ~/.config/ayllu/config.yaml |
| 111 | + # open up config.yaml in your favorite editor and configure at least one |
| 112 | + # collection |
| 113 | + vim ~/.config/ayllu/config.yaml |
| 114 | + # now verify the config is valid |
| 115 | + ayllu config display |
| 116 | + # initialize and migrate the database |
| 117 | + ayllu migrate |
| 118 | + # launch the web server |
| 119 | + ayllu serve |
| 120 | + ``` |
| 121 | + |
| 122 | + # Collections |
| 123 | + |
| 124 | + Collections are simply a directory on your file system that contains zero or |
| 125 | + more Git repositories. They can be structured in whichever way is suitable for |
| 126 | + your personal workflow. |
| 127 | + |
| 128 | + |
| 129 | + ```toml |
| 130 | + # On my system I keep active projects in a directory called "projects" |
| 131 | + [[collections]] |
| 132 | + name = "projects" |
| 133 | + description = "active projects" |
| 134 | + path = "/home/kevin/repos/projects" |
| 135 | + # And another directory of archived projects that I call "the attic" |
| 136 | + [[collections]] |
| 137 | + name = "attic" |
| 138 | + description = "projects stowed away in the attic" |
| 139 | + path = "/home/kevin/repos/attic" |
| 140 | + |
| 141 | + # it's also possible to create hidden collections that aren't showed in the |
| 142 | + # collections index page but will be rendered if you know the link to them. |
| 143 | + # If you want to restrict access completely you'll need to employ basic auth |
| 144 | + # or similiar in your webserver. |
| 145 | + [[collections]] |
| 146 | + name = "private" |
| 147 | + description = "my private code, no looking!" |
| 148 | + path = "/home/kevin/repos/private" |
| 149 | + ``` |
| 150 | + |
| 151 | + # Running Jobs |
| 152 | + Once Ayllu has been configured and the server is running you'll want to run |
| 153 | + jobs against your repositories. Jobs do things like compute authorship stats |
| 154 | + and determine code composition. Keep in mind that `jobs` are distinct from |
| 155 | + `builds`. Jobs perform internal actions that allow Ayllu to function while |
| 156 | + builds are for running codebase specific workflows. |
| 157 | + |
| 158 | + Most jobs are run via [git hooks](https://git-scm.com/book/en/v2/Customizing-Git-Git-Hooks) |
| 159 | + |
| 160 | + ```sh |
| 161 | + # ayllu's internal job server will be listening on a unix socket |
| 162 | + ss -xlp |grep ayllu |
| 163 | + u_str LISTEN 0 1024 /run/user/1000/ayllu.sock 305937 * 0 users:(("ayllu",pid=70917,fd=14)) |
| 164 | + cd ~/repos/projects/ayllu |
| 165 | + # run against your repository |
| 166 | + # depending on the number of commits this can take a considerable amount of |
| 167 | + # time to run as it needs to perform computations against each commit. |
| 168 | + ayllu jobs run . |
| 169 | + ``` |
| 170 | + |
| 171 | + # Tree Sitter |
| 172 | + |
| 173 | + Syntax highlighting in the web interface is implemented with [tree-sitter](https://tree-sitter.github.io/tree-sitter/). |
| 174 | + Instead of embedding and compiling potentially hundreds of individual shared |
| 175 | + modules for each language you can install languages you are interested in via |
| 176 | + your operating system's package manager. Unfortunately, not all parsers are |
| 177 | + consistently packaged and thus it is possible to override system defaults as |
| 178 | + described below. |
| 179 | + |
| 180 | + ## Customizing Shared Module Paths |
| 181 | + |
| 182 | + Normally tree-sitter parsers should have the following layout: |
| 183 | + |
| 184 | + ```text |
| 185 | + # compiled shared modules |
| 186 | + /usr/lib/libtree-sitter-$language.so |
| 187 | + # supplemental query files |
| 188 | + /usr/share/tree-sitter/queries/$language/[highlights|injections|locals].scm |
| 189 | + ``` |
| 190 | + |
| 191 | + By default Ayllu will attempt to load parsers and query files from those directories. |
| 192 | + |
| 193 | + ### Example Custom Configuration |
| 194 | + |
| 195 | + <div class="info"> |
| 196 | + NOTE: Refer to <a href=https://ayllu-forge.org/ayllu/ayllu/blob/main/config.example.toml>config.sample.toml</a> for the latest |
| 197 | + example configuration or <a href="https://ayllu-forge.org/ayllu/ayllu/blob/main/src/config.rs">config.rs</a>. |
| 198 | + </div> |
| 199 | + |
| 200 | + |
| 201 | + ```toml |
| 202 | + [tree-sitter] |
| 203 | + # specify the base path to search for libtree-sitter-$language.so |
| 204 | + base_path = "/usr/lib" |
| 205 | + # directory of syntax queries |
| 206 | + queries_path = "/usr/share/tree-sitter/queries" |
| 207 | + ``` |
| 208 | + |
| 209 | + ## Adding a Additional Queries |
| 210 | + |
| 211 | + An additional path to look for queries can also be added: |
| 212 | + |
| 213 | + ```toml |
| 214 | + [tree-sitter] |
| 215 | + queries_extras_path = "/etc/ayllu/queries" |
| 216 | + ``` |
| 217 | + |
| 218 | + ## Adding Additional Parsers |
| 219 | + |
| 220 | + If you want to add a custom parser that's installed at a non-standard path you |
| 221 | + can do that too. This can be useful for parsers that aren't packaged on your |
| 222 | + system and also for custom programming languages. |
| 223 | + |
| 224 | + ```toml |
| 225 | + [[tree-sitter.parsers]] |
| 226 | + name = "fuu-lang" |
| 227 | + shared_object = "/etc/ayllu/parsers/libtree-sitter-fuu.so" |
| 228 | + highlight_query = "/etc/ayllu/queries/fuu/highlights.scm" |
| 229 | + locals_query = "/etc/ayllu/queries/fuu/locals.scm" |
| 230 | + injections = "/etc/ayllu/queries/fuu/injections.scm" |
| 231 | + ``` |
| 232 | + |
| 233 | + # Language Detection & Syntax Highlighting |
| 234 | + |
| 235 | + Ayllu determines which language is being rendered by file extension, file name, |
| 236 | + or an "alias" in the case of a markdown code block. |
| 237 | + |
| 238 | + ## Language Mapping |
| 239 | + |
| 240 | + Sometimes you want one language to be detected and presented as something |
| 241 | + different. For instance by default Ayllu will detect `hello.ml` as a Standard ML |
| 242 | + file, but you can override this to OCaml with a mapping. |
| 243 | + |
| 244 | + ```toml |
| 245 | + [languages] |
| 246 | + [languages.mappings] |
| 247 | + "Standard ML" = "OCaml" |
| 248 | + ``` |
| 249 | + |
| 250 | + ## Custom Languages |
| 251 | + |
| 252 | + If you're the author of a programming language and want Ayllu to detect it |
| 253 | + based on file extensions you can add an additional language in your config file. |
| 254 | + ```toml |
| 255 | + # append the following in your config.toml |
| 256 | + [[ languages.extras ]] |
| 257 | + name = "BazQux" |
| 258 | + extensions = [".baz", ".qux", ".bq"] |
| 259 | + # any file with this name will be detected as BazQux |
| 260 | + filename = [".bazscript"] |
| 261 | + # deep pink |
| 262 | + color = "#ff1493" |
| 263 | + ``` |
| 264 | + |
| 265 | + You can also use the languages section to modify existing languages, for instance |
| 266 | + if for some reason you didn't like the default colors associated with a particular |
| 267 | + programming language, you can adjust it here. |
| 268 | + ```toml |
| 269 | + # append the following in your config.toml |
| 270 | + [[ languages.extras ]] |
| 271 | + name = "go" |
| 272 | + # Go is pink! |
| 273 | + color = "#ff1493" |
| 274 | + ``` |
| 275 | + |
| 276 | + # Adding Custom Tree Sitter Highlights |
| 277 | + |
| 278 | + You can override system installed tree-sitter |
| 279 | + [highlights](https://tree-sitter.github.io/tree-sitter/syntax-highlighting#highlights) |
| 280 | + in the Ayllu configuration file. For example we can add two new highlight |
| 281 | + queries to the `diff` parser called `@addition` and `@removal`. With these |
| 282 | + enabled Ayllu will paint the relevant code sections with CSS classes |
| 283 | + `ts_addition` and `ts_removal` which you can style in theme configurations. |
| 284 | + |
| 285 | + ```toml |
| 286 | + [tree-sitter.highlights] |
| 287 | + diff = """ |
| 288 | + ; used to highlight diffs in the UI |
| 289 | + [(addition) (new_file)] @addition |
| 290 | + [(deletion) (old_file)] @removal |
| 291 | + |
| 292 | + (commit) @constant |
| 293 | + (location) @attribute |
| 294 | + (command) @variable.builtin |
| 295 | + """ |
| 296 | + ``` |
| 297 | + |
| 298 | + # Mirroring |
| 299 | + |
| 300 | + Git mirrors will be automatically detected by looking at git configuration to |
| 301 | + determine if the repository has a `mirror = true` flag present in any of it's |
| 302 | + configured remotes. If any remote is flagged as a mirror then the repository |
| 303 | + will be considered a mirror. Mirror repositories will not be listed in RSS |
| 304 | + feeds, be subject to certain jobs types, or be available in the remote API. |
| 305 | + |
| 306 | + ## Creating a Mirror |
| 307 | + |
| 308 | + The simplest way to create a mirror is by cloning a repository with the |
| 309 | + `--mirror` flag. For example: `git clone https://ayllu-forge.org/ayllu/ayllu --mirror` |
| 310 | + will result in a git config such as: |
| 311 | + |
| 312 | + ``` |
| 313 | + [remote "origin"] |
| 314 | + url = https://ayllu-forge.org/ayllu/ayllu |
| 315 | + fetch = +refs/*:refs/* |
| 316 | + mirror = true |
| 317 | + |
| 318 | + ``` |
| 319 | diff --git a/docs/developers.md b/docs/developers.md |
| 320 | new file mode 100644 |
| 321 | index 0000000..8eec62d |
| 322 | --- /dev/null |
| 323 | +++ b/docs/developers.md |
| 324 | @@ -0,0 +1,39 @@ |
| 325 | + # Developing Components |
| 326 | + |
| 327 | + Ayllu is split up into several distinct components, to work on one of them you |
| 328 | + typically want to start one of two feedback cycles: `lint->test->compile` or |
| 329 | + `compile->serve`. To start each one you can can run `scripts/test.sh $COMPONENT` |
| 330 | + or `scripts/watch.sh $COMPONENT` and the appropriate `cargo watch` command will |
| 331 | + be started for you. |
| 332 | + |
| 333 | + # Testing the Entire CI Workflow |
| 334 | + |
| 335 | + You can run all of the CI tests locally by invoking `ayllu-build` directly, |
| 336 | + assuming it is compiled it can be launched like this: |
| 337 | + |
| 338 | + ```sh |
| 339 | + # run all tests in .ayllu |
| 340 | + ayllu-build evaluate |
| 341 | + ``` |
| 342 | + |
| 343 | + # ayllu-forge.org |
| 344 | + |
| 345 | + The [Ayllu website](https://ayllu-forge.org) and project documentation are built |
| 346 | + together with [Zola](https://www.getzola.org/) which you must install. After |
| 347 | + which you can startup a local preview of the site with the following commands: |
| 348 | + |
| 349 | + ```sh |
| 350 | + cd www && zola serve |
| 351 | + ``` |
| 352 | + The generated content are hosted directly from Ayllu and you simply need to |
| 353 | + build and commit the generated code directly into the repository. |
| 354 | + |
| 355 | + ```sh |
| 356 | + cd www && zola build |
| 357 | + ``` |
| 358 | + |
| 359 | + ## Diagrams |
| 360 | + |
| 361 | + Diagrams are built with [nomnoml](https://www.nomnoml.com/) and their SVG |
| 362 | + content contain the source for generating the diagrams. Simply open one of the |
| 363 | + source SVGs up and copy-paste it to the editor of the nomnoml website. |
| 364 | diff --git a/docs/faq.md b/docs/faq.md |
| 365 | new file mode 100644 |
| 366 | index 0000000..39fa090 |
| 367 | --- /dev/null |
| 368 | +++ b/docs/faq.md |
| 369 | @@ -0,0 +1,10 @@ |
| 370 | + ##### What Does "Ayllu" Mean? |
| 371 | + |
| 372 | + The name [Ayllu](https://en.wikipedia.org/wiki/Ayllu) _/ˈajʎu/_, _eye-joo_ is |
| 373 | + the Quechua word for the traditional form of a community in the Andes region |
| 374 | + of South America, particularly in Bolivia and Peru. |
| 375 | + |
| 376 | + ##### Do You Provide Hosting? |
| 377 | + |
| 378 | + Not currently. If there was enough interest the project might offer hosted |
| 379 | + environments as a way to sustain it's development. |
| 380 | diff --git a/docs/installation.md b/docs/installation.md |
| 381 | new file mode 100644 |
| 382 | index 0000000..be316b6 |
| 383 | --- /dev/null |
| 384 | +++ b/docs/installation.md |
| 385 | @@ -0,0 +1,156 @@ |
| 386 | + # Running as a Container |
| 387 | + |
| 388 | + The quickest way to get started running Ayllu is by using a container. |
| 389 | + [Podman](https://podman.io/) is the only supported container platform although |
| 390 | + Docker may work as well. |
| 391 | + |
| 392 | + There are several different configurations that can be used to run Ayllu as |
| 393 | + a container. |
| 394 | + |
| 395 | + * [Rootless with Ayllu running as root within the container](#rootless-container-with-ayllu-running-as-root) |
| 396 | + * [Rootless with a non-root user within the container](#rootless-with-a-non-root-user-within-a-container) |
| 397 | + * [As root with Ayllu running as a non-root user](#as-root-with-ayllu-running-as-a-non-root-user) |
| 398 | + |
| 399 | + ## Rootless Container with Ayllu Running as Root |
| 400 | + |
| 401 | + This configuration works best if you want Ayllu to have access to your |
| 402 | + repositories for browsing your code locally. The tutorial assumes that you |
| 403 | + have permissions to access all of your code repositories.Note that the commands |
| 404 | + below use a separate configuration and data paths to avoid conflicting with the |
| 405 | + default paths if the Ayllu binary is installed directly on your system. |
| 406 | + |
| 407 | + First create configuration and data paths that we will map into the container. |
| 408 | + |
| 409 | + mkdir ~/.config/ayllu-podman |
| 410 | + mkdir ~/.local/share/ayllu-podman |
| 411 | + |
| 412 | + Next pull the latest version of the container and generate a new configuration |
| 413 | + file. |
| 414 | + |
| 415 | + podman pull registry.ayllu-forge.org/ayllu/ayllu:main |
| 416 | + podman run --rm -ti registry.ayllu-forge.org/ayllu/ayllu:main ayllu config generate > ~/.config/ayllu-podman/config.toml |
| 417 | + |
| 418 | + The next step is to map "collections" (directories that contain git repositories) |
| 419 | + into the Ayllu container. On my system I keep active projects I'm working on |
| 420 | + in a directory called `~/repos/projects` and I keep past projects for reference |
| 421 | + in a directory called `~/repos/attic`. |
| 422 | + |
| 423 | + ... |
| 424 | + [[collections]] |
| 425 | + name = "projects" |
| 426 | + description = "active projects" |
| 427 | + # ~/repos/projects --> /repos in the container |
| 428 | + path = "/repos/projects" |
| 429 | + |
| 430 | + [[collections]] |
| 431 | + name = "attic" |
| 432 | + description = "past projects stowed away in the attic" |
| 433 | + path = "/repos/attic" |
| 434 | + ... |
| 435 | + |
| 436 | + Now you can start the container ensuring that you map the code collection into |
| 437 | + the correct path which you configured in the step above. In the commands below |
| 438 | + we will use the following volume maps from my host system into the container. |
| 439 | + Take a look at the Podman [rootless tutorial](https://github.com/containers/podman/blob/main/docs/tutorials/rootless_tutorial.md) |
| 440 | + for a refresher on how rootless volume mappings work. Note that below the |
| 441 | + repositories are mounted as :rw. This is because Ayllu uses Git [worktrees](https://git-scm.com/docs/git-worktree) |
| 442 | + to run certain types of analysis such as the code composition chart. If you |
| 443 | + don't care about that you can change this to read-only to prevent any write |
| 444 | + access at all. |
| 445 | + |
| 446 | + # code repositories |
| 447 | + -v ~/repos:/repos:rw |
| 448 | + # configuration directory |
| 449 | + -v ~/.config/ayllu-podman:/root/.config/ayllu |
| 450 | + # stateful sqlite database |
| 451 | + -v ~/.local/share/ayllu-podman:/root/.local/share/ayllu |
| 452 | + |
| 453 | + Finally we can launch the actual container. |
| 454 | + |
| 455 | + podman run \ |
| 456 | + --net host --rm -ti --user root \ |
| 457 | + -v ~/repos:/repos \ |
| 458 | + -v ~/.config/ayllu-podman:/root/.config/ayllu \ |
| 459 | + -v ~/.local/share/ayllu-podman:/root/.local/share/ayllu \ |
| 460 | + registry.ayllu-forge.org/ayllu/ayllu:main \ |
| 461 | + ayllu serve |
| 462 | + |
| 463 | + You should now be able to browse to the user interface at |
| 464 | + [localhost:8080](http://localhost:8080). |
| 465 | + |
| 466 | + ### Configure with Systemd |
| 467 | + |
| 468 | + You can also configure the container to run as a systemd-user service. See |
| 469 | + the documentation for [podman systemd units](https://docs.podman.io/en/latest/markdown/podman-systemd.unit.5.html). |
| 470 | + You can also checkout the [archlinux wiki](https://wiki.archlinux.org/title/Podman#Quadlet) |
| 471 | + for a tutorial. |
| 472 | + |
| 473 | + Here is an example file at `~/.config/containers/systemd/ayllu.container`. |
| 474 | + |
| 475 | + ``` |
| 476 | + [Unit] |
| 477 | + Description=Ayllu Container |
| 478 | + |
| 479 | + [Container] |
| 480 | + ContainerName=ayllu |
| 481 | + Image=registry.ayllu-forge.org/ayllu/ayllu:main |
| 482 | + Network=host |
| 483 | + User=root |
| 484 | + Volume=%h/repos:/repos:rw |
| 485 | + Volume=%h/.config/ayllu-podman:/root/.config/ayllu |
| 486 | + Volume=%h/.local/share/ayllu-podman:/root/.local/share/ayllu |
| 487 | + Exec=ayllu serve |
| 488 | + |
| 489 | + [Service] |
| 490 | + Restart=on-failure |
| 491 | + |
| 492 | + # Extend Timeout to allow time to pull the image |
| 493 | + TimeoutStartSec=300 |
| 494 | + |
| 495 | + # The [Install] section allows enabling the generated service. |
| 496 | + [Install] |
| 497 | + WantedBy=default.target |
| 498 | + ``` |
| 499 | + |
| 500 | + Once you've configured the file you can install and run it: |
| 501 | + |
| 502 | + # validate the configuration |
| 503 | + /usr/lib/podman/quadlet -user -dryrun |
| 504 | + # install generated systemd services |
| 505 | + /usr/lib/podman/quadlet -user ~/.config/systemd/user |
| 506 | + # reload the user daemon |
| 507 | + systemctl --user daemon-reload |
| 508 | + # start the ayllu container |
| 509 | + systemctl --user start ayllu |
| 510 | + |
| 511 | + If all went well Ayllu should now be running as a container managed by systemd! |
| 512 | + |
| 513 | + # Rootless with a non-root User within a Container |
| 514 | + |
| 515 | + This method is the most restricted technique for running Ayllu in a production |
| 516 | + deployment. Not fully supported yet, TODO. |
| 517 | + |
| 518 | + # As Root with Ayllu Running as a Non-root User |
| 519 | + |
| 520 | + This method is a hybrid approach that is useful for serving components of Ayllu |
| 521 | + from a container but also retaining a system level installation. Not fully |
| 522 | + supported yet, TODO. |
| 523 | + |
| 524 | + # Distribution Packages |
| 525 | + |
| 526 | + <div class="warning"> |
| 527 | + NOTE: Few distribution packages currently exist for Ayllu, any contributions |
| 528 | + in this regard would be gladly accepted! |
| 529 | + </div> |
| 530 | + |
| 531 | + ## Arch Linux |
| 532 | + |
| 533 | + ###### Release Package (Unfinished) |
| 534 | + [ayllu](https://aur.archlinux.org/packages/ayllu) |
| 535 | + |
| 536 | + ###### Source Package (Unfinished) |
| 537 | + [ayllu-git](https://aur.archlinux.org/packages/ayllu-git) |
| 538 | + |
| 539 | + # From Source |
| 540 | + |
| 541 | + TODO |
| 542 | diff --git a/docs/mail.md b/docs/mail.md |
| 543 | new file mode 100644 |
| 544 | index 0000000..ff71ff4 |
| 545 | --- /dev/null |
| 546 | +++ b/docs/mail.md |
| 547 | @@ -0,0 +1,20 @@ |
| 548 | + # Mailing List Support |
| 549 | + |
| 550 | + Ayllu has full featured support for email based development workflows. It is |
| 551 | + based on the excellent [mailpot](https://git.meli-email.org/meli/mailpot) |
| 552 | + mailing list manager. |
| 553 | + |
| 554 | + ## Configuration |
| 555 | + |
| 556 | + The configuration of mail servers can be complex. Ayllu encapsulates most of |
| 557 | + these settings in the [mutliuser](https://ayllu-forge.org/ayllu/ayllu/tree/main/containers/multiuser) |
| 558 | + container which can be used as a reference for configuring your own mail server. |
| 559 | + |
| 560 | + ### Minimum Recommended Security Settings |
| 561 | + |
| 562 | + #### DKIM |
| 563 | + |
| 564 | + #### SPF Validation |
| 565 | + |
| 566 | + The container provides SPF validation and the recommended DNS configuration for |
| 567 | + a single host e.g. `ayllu-forge.org` is `"v=spf1 a mx ~all"`. |
| 568 | diff --git a/docs/proxy.md b/docs/proxy.md |
| 569 | new file mode 100644 |
| 570 | index 0000000..238baee |
| 571 | --- /dev/null |
| 572 | +++ b/docs/proxy.md |
| 573 | @@ -0,0 +1,12 @@ |
| 574 | + # Proxy Configuration |
| 575 | + |
| 576 | + Ayllu is designed to be run behind a reverse proxy server and it is not |
| 577 | + recommended to deploy Ayllu directly to the internet. Things such as TLS |
| 578 | + termination or basic authentication for private repositories are not directly |
| 579 | + supported by Ayllu although some of these features may be added in the future. |
| 580 | + |
| 581 | + ## Nginx |
| 582 | + |
| 583 | + [nginx](https://nginx.org/) is the only supported software but others are |
| 584 | + likely to work and we will happily accept documentation for operating other |
| 585 | + free software proxy servers. |
| 586 | diff --git a/docs/sites.md b/docs/sites.md |
| 587 | new file mode 100644 |
| 588 | index 0000000..3423134 |
| 589 | --- /dev/null |
| 590 | +++ b/docs/sites.md |
| 591 | @@ -0,0 +1,39 @@ |
| 592 | + # Static Hosting |
| 593 | + |
| 594 | + Ayllu can serve content directly from a git repository, you just need to toggle |
| 595 | + a few options in your git configuration file. |
| 596 | + |
| 597 | + ## Example Configuration |
| 598 | + |
| 599 | + In your git configuration file you can specify one or more headers which if |
| 600 | + detected by Ayllu will cause it to serve content from the directory rather then |
| 601 | + it's web interface. |
| 602 | + |
| 603 | + Below we specify that any request sent to Ayllu with header `Host = example.org` |
| 604 | + should return HTML content from within the repository directory www/public. |
| 605 | + |
| 606 | + ``` |
| 607 | + [ayllu-sites] |
| 608 | + enabled = true |
| 609 | + header = Host=example.org |
| 610 | + content = www/public |
| 611 | + ``` |
| 612 | + |
| 613 | + ## Proxy configuration |
| 614 | + |
| 615 | + Typically you would want a proxy server in front of your Ayllu instance. You |
| 616 | + can then pass any headers to your downstream instance and it should serve the |
| 617 | + content as expected. |
| 618 | + |
| 619 | + ### Example Nginx Proxy |
| 620 | + |
| 621 | + ``` |
| 622 | + ... |
| 623 | + location / { |
| 624 | + include config.d/proxy.conf; |
| 625 | + proxy_pass http://127.0.0.1:8080; |
| 626 | + proxy_set_header Host $host; |
| 627 | + proxy_set_header X-Real-IP $remote_addr; |
| 628 | + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; |
| 629 | + } |
| 630 | + ``` |
| 631 | diff --git a/docs/themes.md b/docs/themes.md |
| 632 | new file mode 100644 |
| 633 | index 0000000..396688d |
| 634 | --- /dev/null |
| 635 | +++ b/docs/themes.md |
| 636 | @@ -0,0 +1,3 @@ |
| 637 | + # Themeing Ayllu |
| 638 | + |
| 639 | + TODO |
| 640 | diff --git a/www/.gitignore b/www/.gitignore |
| 641 | deleted file mode 100644 |
| 642 | index da62838..0000000 |
| 643 | --- a/www/.gitignore |
| 644 | +++ /dev/null |
| 645 | @@ -1 +0,0 @@ |
| 646 | - sass/pico |
| 647 | diff --git a/www/config.toml b/www/config.toml |
| 648 | deleted file mode 100644 |
| 649 | index b451391..0000000 |
| 650 | --- a/www/config.toml |
| 651 | +++ /dev/null |
| 652 | @@ -1,25 +0,0 @@ |
| 653 | - # The URL the site will be built for |
| 654 | - base_url = "https://ayllu-forge.org" |
| 655 | - |
| 656 | - # Whether to automatically compile all Sass files in the sass directory |
| 657 | - compile_sass = true |
| 658 | - |
| 659 | - # Whether to build a search index to be used later on by a JavaScript library |
| 660 | - build_search_index = false |
| 661 | - |
| 662 | - minify_html = true |
| 663 | - |
| 664 | - [slugify] |
| 665 | - paths = "on" |
| 666 | - taxonomies = "on" |
| 667 | - anchors = "on" |
| 668 | - |
| 669 | - |
| 670 | - [markdown] |
| 671 | - # Whether to do syntax highlighting |
| 672 | - # Theme can be customised by setting the `highlight_theme` variable to a theme supported by Zola |
| 673 | - # highlight_code = true |
| 674 | - # highlight_theme = "charcoal" |
| 675 | - |
| 676 | - [extra] |
| 677 | - # Put all your custom variables here |
| 678 | diff --git a/www/content/_index.md b/www/content/_index.md |
| 679 | deleted file mode 100644 |
| 680 | index b08058e..0000000 |
| 681 | --- a/www/content/_index.md |
| 682 | +++ /dev/null |
| 683 | @@ -1,14 +0,0 @@ |
| 684 | - +++ |
| 685 | - title = "index" |
| 686 | - template = "index.html" |
| 687 | - +++ |
| 688 | - |
| 689 | - ### Hyper Performant & Hackable Code Forge Built on Open Standards |
| 690 | - |
| 691 | - Ayllu is a lightweight [code forge](https://en.wikipedia.org/wiki/Forge_(software)) |
| 692 | - designed to help individuals and grassroots community projects create and |
| 693 | - develop software in collaboration across open internet standards. |
| 694 | - |
| 695 | - --- |
| 696 | - Check out the [documentation](/docs) or [browse](/browse) some of the |
| 697 | - projects hosted on this server. |
| 698 | diff --git a/www/content/docs/_index.md b/www/content/docs/_index.md |
| 699 | deleted file mode 100644 |
| 700 | index 59c3397..0000000 |
| 701 | --- a/www/content/docs/_index.md |
| 702 | +++ /dev/null |
| 703 | @@ -1,11 +0,0 @@ |
| 704 | - +++ |
| 705 | - title = "Docs" |
| 706 | - template = "docs_home.html" |
| 707 | - sort_by = "weight" |
| 708 | - insert_anchor_links = "heading" |
| 709 | - +++ |
| 710 | - |
| 711 | - # Documentation |
| 712 | - |
| 713 | - Welcome to the Ayllu documentation 📖, this is section serves as an |
| 714 | - authoritative reference on all things related to the Ayllu code forge! |
| 715 | diff --git a/www/content/docs/architecture.md b/www/content/docs/architecture.md |
| 716 | deleted file mode 100644 |
| 717 | index 27b98ec..0000000 |
| 718 | --- a/www/content/docs/architecture.md |
| 719 | +++ /dev/null |
| 720 | @@ -1,21 +0,0 @@ |
| 721 | - +++ |
| 722 | - title = "Architecture" |
| 723 | - slug = "architecture" |
| 724 | - weight = 0 |
| 725 | - +++ |
| 726 | - |
| 727 | - # The Architecture of Ayllu |
| 728 | - |
| 729 | - **Ayllu is a new software project and it's design is evolving.** |
| 730 | - |
| 731 | - It's basic architecture is that of a single binary providing a web interface to |
| 732 | - browse and interact with Git repositories as well as an RPC server based on |
| 733 | - [tarpc](https://github.com/google/tarpc) with an embedded client. The RPC server |
| 734 | - running in the core Ayllu binary is called the `job_server` and it provides an |
| 735 | - interface to interact with Ayllu for administrators. Much of the functionality |
| 736 | - of Ayllu is implemented via `RPC extensions` which are minimal binaries that |
| 737 | - are used to extend the core functionality of Ayllu. |
| 738 | - |
| 739 | - The current architecture of Ayllu is depicted below: |
| 740 | - |
| 741 | - <a href="/assets/architecture.svg"><img class="diagram" src="/assets/architecture.svg" /></a> |
| 742 | diff --git a/www/content/docs/builds.md b/www/content/docs/builds.md |
| 743 | deleted file mode 100644 |
| 744 | index 44ac717..0000000 |
| 745 | --- a/www/content/docs/builds.md |
| 746 | +++ /dev/null |
| 747 | @@ -1,52 +0,0 @@ |
| 748 | - +++ |
| 749 | - title = "Builds" |
| 750 | - slug = "builds" |
| 751 | - weight = 0 |
| 752 | - +++ |
| 753 | - |
| 754 | - Ayllu contains a plugin called `ayllu-build` which is responsible for executing |
| 755 | - build manifests in a CI/CD environment. The design of the build system prioritizes |
| 756 | - the ability to run the entire workflow locally. |
| 757 | - |
| 758 | - ### An Example Local Workflow |
| 759 | - |
| 760 | - Build manifests are written in [Nickel](https://nickel-lang.org/). |
| 761 | - |
| 762 | - ```sh |
| 763 | - mkdir -p my-test-repo/.ayllu/build |
| 764 | - cd my-test-repo && git init |
| 765 | - # create a simple workflow that prints "Hello" and "World" |
| 766 | - cat <<EOF > .ayllu/build/main.ncl |
| 767 | - { |
| 768 | - workflows = [ |
| 769 | - { |
| 770 | - name = "Simple", |
| 771 | - steps = [ |
| 772 | - { |
| 773 | - name = "Hello", |
| 774 | - input = "echo -n Hello" |
| 775 | - }, |
| 776 | - { |
| 777 | - name = "World", |
| 778 | - input = "echo -n World" |
| 779 | - } |
| 780 | - ] |
| 781 | - } |
| 782 | - ] |
| 783 | - } |
| 784 | - EOF |
| 785 | - # validate the build plan and generate a DOT file to stdout |
| 786 | - ayllu_build plan |
| 787 | - >>> 2023-12-14T21:58:37.777493Z INFO ayllu_build:66: logger initialized |
| 788 | - >>> digraph { |
| 789 | - >>> 0 [ label = "Workflow: Simple" ] |
| 790 | - >>> 1 [ label = "Step: Hello" ] |
| 791 | - >>> 2 [ label = "Step: World" ] |
| 792 | - >>> 0 -> 1 [ label = "0" ] |
| 793 | - >>> 0 -> 2 [ label = "0" ] |
| 794 | - >>> } |
| 795 | - # if you have graphviz installed you can visualize this output: |
| 796 | - ayllu_build plan | dot -Tx11 |
| 797 | - # finally you can execute the workflow locally |
| 798 | - ayllu_build evaluate |
| 799 | - ``` |
| 800 | diff --git a/www/content/docs/configuration.md b/www/content/docs/configuration.md |
| 801 | deleted file mode 100644 |
| 802 | index c6cce19..0000000 |
| 803 | --- a/www/content/docs/configuration.md |
| 804 | +++ /dev/null |
| 805 | @@ -1,224 +0,0 @@ |
| 806 | - +++ |
| 807 | - title = "Configuration" |
| 808 | - weight = 0 |
| 809 | - insert_anchor_links = "header" |
| 810 | - +++ |
| 811 | - |
| 812 | - # Initial Configuration |
| 813 | - |
| 814 | - After following the [installation](https://ayllu-forge.org/docs/installation) |
| 815 | - you need to setup your configuration file and initialize the database. |
| 816 | - |
| 817 | - ## User Based Installation |
| 818 | - |
| 819 | - ```sh |
| 820 | - mkdir ~/.config/ayllu |
| 821 | - ayllu config generate > ~/.config/ayllu/config.yaml |
| 822 | - # open up config.yaml in your favorite editor and configure at least one |
| 823 | - # collection |
| 824 | - vim ~/.config/ayllu/config.yaml |
| 825 | - # now verify the config is valid |
| 826 | - ayllu config display |
| 827 | - # initialize and migrate the database |
| 828 | - ayllu migrate |
| 829 | - # launch the web server |
| 830 | - ayllu serve |
| 831 | - ``` |
| 832 | - |
| 833 | - # Collections |
| 834 | - |
| 835 | - Collections are simply a directory on your file system that contains zero or |
| 836 | - more Git repositories. They can be structured in whichever way is suitable for |
| 837 | - your personal workflow. |
| 838 | - |
| 839 | - |
| 840 | - ```toml |
| 841 | - # On my system I keep active projects in a directory called "projects" |
| 842 | - [[collections]] |
| 843 | - name = "projects" |
| 844 | - description = "active projects" |
| 845 | - path = "/home/kevin/repos/projects" |
| 846 | - # And another directory of archived projects that I call "the attic" |
| 847 | - [[collections]] |
| 848 | - name = "attic" |
| 849 | - description = "projects stowed away in the attic" |
| 850 | - path = "/home/kevin/repos/attic" |
| 851 | - |
| 852 | - # it's also possible to create hidden collections that aren't showed in the |
| 853 | - # collections index page but will be rendered if you know the link to them. |
| 854 | - # If you want to restrict access completely you'll need to employ basic auth |
| 855 | - # or similiar in your webserver. |
| 856 | - [[collections]] |
| 857 | - name = "private" |
| 858 | - description = "my private code, no looking!" |
| 859 | - path = "/home/kevin/repos/private" |
| 860 | - ``` |
| 861 | - |
| 862 | - # Running Jobs |
| 863 | - Once Ayllu has been configured and the server is running you'll want to run |
| 864 | - jobs against your repositories. Jobs do things like compute authorship stats |
| 865 | - and determine code composition. Keep in mind that `jobs` are distinct from |
| 866 | - `builds`. Jobs perform internal actions that allow Ayllu to function while |
| 867 | - builds are for running codebase specific workflows. |
| 868 | - |
| 869 | - Most jobs are run via [git hooks](https://git-scm.com/book/en/v2/Customizing-Git-Git-Hooks) |
| 870 | - |
| 871 | - ```sh |
| 872 | - # ayllu's internal job server will be listening on a unix socket |
| 873 | - ss -xlp |grep ayllu |
| 874 | - u_str LISTEN 0 1024 /run/user/1000/ayllu.sock 305937 * 0 users:(("ayllu",pid=70917,fd=14)) |
| 875 | - cd ~/repos/projects/ayllu |
| 876 | - # run against your repository |
| 877 | - # depending on the number of commits this can take a considerable amount of |
| 878 | - # time to run as it needs to perform computations against each commit. |
| 879 | - ayllu jobs run . |
| 880 | - ``` |
| 881 | - |
| 882 | - # Tree Sitter |
| 883 | - |
| 884 | - Syntax highlighting in the web interface is implemented with [tree-sitter](https://tree-sitter.github.io/tree-sitter/). |
| 885 | - Instead of embedding and compiling potentially hundreds of individual shared |
| 886 | - modules for each language you can install languages you are interested in via |
| 887 | - your operating system's package manager. Unfortunately, not all parsers are |
| 888 | - consistently packaged and thus it is possible to override system defaults as |
| 889 | - described below. |
| 890 | - |
| 891 | - ## Customizing Shared Module Paths |
| 892 | - |
| 893 | - Normally tree-sitter parsers should have the following layout: |
| 894 | - |
| 895 | - ```text |
| 896 | - # compiled shared modules |
| 897 | - /usr/lib/libtree-sitter-$language.so |
| 898 | - # supplemental query files |
| 899 | - /usr/share/tree-sitter/queries/$language/[highlights|injections|locals].scm |
| 900 | - ``` |
| 901 | - |
| 902 | - By default Ayllu will attempt to load parsers and query files from those directories. |
| 903 | - |
| 904 | - ### Example Custom Configuration |
| 905 | - |
| 906 | - <div class="info"> |
| 907 | - NOTE: Refer to <a href=https://ayllu-forge.org/ayllu/ayllu/blob/main/config.example.toml>config.sample.toml</a> for the latest |
| 908 | - example configuration or <a href="https://ayllu-forge.org/ayllu/ayllu/blob/main/src/config.rs">config.rs</a>. |
| 909 | - </div> |
| 910 | - |
| 911 | - |
| 912 | - ```toml |
| 913 | - [tree-sitter] |
| 914 | - # specify the base path to search for libtree-sitter-$language.so |
| 915 | - base_path = "/usr/lib" |
| 916 | - # directory of syntax queries |
| 917 | - queries_path = "/usr/share/tree-sitter/queries" |
| 918 | - ``` |
| 919 | - |
| 920 | - ## Adding a Additional Queries |
| 921 | - |
| 922 | - An additional path to look for queries can also be added: |
| 923 | - |
| 924 | - ```toml |
| 925 | - [tree-sitter] |
| 926 | - queries_extras_path = "/etc/ayllu/queries" |
| 927 | - ``` |
| 928 | - |
| 929 | - ## Adding Additional Parsers |
| 930 | - |
| 931 | - If you want to add a custom parser that's installed at a non-standard path you |
| 932 | - can do that too. This can be useful for parsers that aren't packaged on your |
| 933 | - system and also for custom programming languages. |
| 934 | - |
| 935 | - ```toml |
| 936 | - [[tree-sitter.parsers]] |
| 937 | - name = "fuu-lang" |
| 938 | - shared_object = "/etc/ayllu/parsers/libtree-sitter-fuu.so" |
| 939 | - highlight_query = "/etc/ayllu/queries/fuu/highlights.scm" |
| 940 | - locals_query = "/etc/ayllu/queries/fuu/locals.scm" |
| 941 | - injections = "/etc/ayllu/queries/fuu/injections.scm" |
| 942 | - ``` |
| 943 | - |
| 944 | - # Language Detection & Syntax Highlighting |
| 945 | - |
| 946 | - Ayllu determines which language is being rendered by file extension, file name, |
| 947 | - or an "alias" in the case of a markdown code block. |
| 948 | - |
| 949 | - ## Language Mapping |
| 950 | - |
| 951 | - Sometimes you want one language to be detected and presented as something |
| 952 | - different. For instance by default Ayllu will detect `hello.ml` as a Standard ML |
| 953 | - file, but you can override this to OCaml with a mapping. |
| 954 | - |
| 955 | - ```toml |
| 956 | - [languages] |
| 957 | - [languages.mappings] |
| 958 | - "Standard ML" = "OCaml" |
| 959 | - ``` |
| 960 | - |
| 961 | - ## Custom Languages |
| 962 | - |
| 963 | - If you're the author of a programming language and want Ayllu to detect it |
| 964 | - based on file extensions you can add an additional language in your config file. |
| 965 | - ```toml |
| 966 | - # append the following in your config.toml |
| 967 | - [[ languages.extras ]] |
| 968 | - name = "BazQux" |
| 969 | - extensions = [".baz", ".qux", ".bq"] |
| 970 | - # any file with this name will be detected as BazQux |
| 971 | - filename = [".bazscript"] |
| 972 | - # deep pink |
| 973 | - color = "#ff1493" |
| 974 | - ``` |
| 975 | - |
| 976 | - You can also use the languages section to modify existing languages, for instance |
| 977 | - if for some reason you didn't like the default colors associated with a particular |
| 978 | - programming language, you can adjust it here. |
| 979 | - ```toml |
| 980 | - # append the following in your config.toml |
| 981 | - [[ languages.extras ]] |
| 982 | - name = "go" |
| 983 | - # Go is pink! |
| 984 | - color = "#ff1493" |
| 985 | - ``` |
| 986 | - |
| 987 | - # Adding Custom Tree Sitter Highlights |
| 988 | - |
| 989 | - You can override system installed tree-sitter |
| 990 | - [highlights](https://tree-sitter.github.io/tree-sitter/syntax-highlighting#highlights) |
| 991 | - in the Ayllu configuration file. For example we can add two new highlight |
| 992 | - queries to the `diff` parser called `@addition` and `@removal`. With these |
| 993 | - enabled Ayllu will paint the relevant code sections with CSS classes |
| 994 | - `ts_addition` and `ts_removal` which you can style in theme configurations. |
| 995 | - |
| 996 | - ```toml |
| 997 | - [tree-sitter.highlights] |
| 998 | - diff = """ |
| 999 | - ; used to highlight diffs in the UI |
| 1000 | - [(addition) (new_file)] @addition |
| 1001 | - [(deletion) (old_file)] @removal |
| 1002 | - |
| 1003 | - (commit) @constant |
| 1004 | - (location) @attribute |
| 1005 | - (command) @variable.builtin |
| 1006 | - """ |
| 1007 | - ``` |
| 1008 | - |
| 1009 | - # Mirroring |
| 1010 | - |
| 1011 | - Git mirrors will be automatically detected by looking at git configuration to |
| 1012 | - determine if the repository has a `mirror = true` flag present in any of it's |
| 1013 | - configured remotes. If any remote is flagged as a mirror then the repository |
| 1014 | - will be considered a mirror. Mirror repositories will not be listed in RSS |
| 1015 | - feeds, be subject to certain jobs types, or be available in the remote API. |
| 1016 | - |
| 1017 | - ## Creating a Mirror |
| 1018 | - |
| 1019 | - The simplest way to create a mirror is by cloning a repository with the |
| 1020 | - `--mirror` flag. For example: `git clone https://ayllu-forge.org/ayllu/ayllu --mirror` |
| 1021 | - will result in a git config such as: |
| 1022 | - |
| 1023 | - ``` |
| 1024 | - [remote "origin"] |
| 1025 | - url = https://ayllu-forge.org/ayllu/ayllu |
| 1026 | - fetch = +refs/*:refs/* |
| 1027 | - mirror = true |
| 1028 | - |
| 1029 | - ``` |
| 1030 | diff --git a/www/content/docs/developers.md b/www/content/docs/developers.md |
| 1031 | deleted file mode 100644 |
| 1032 | index 48c3e46..0000000 |
| 1033 | --- a/www/content/docs/developers.md |
| 1034 | +++ /dev/null |
| 1035 | @@ -1,45 +0,0 @@ |
| 1036 | - +++ |
| 1037 | - title = "Developers" |
| 1038 | - slug = "developers" |
| 1039 | - weight = 0 |
| 1040 | - +++ |
| 1041 | - |
| 1042 | - # Developing Components |
| 1043 | - |
| 1044 | - Ayllu is split up into several distinct components, to work on one of them you |
| 1045 | - typically want to start one of two feedback cycles: `lint->test->compile` or |
| 1046 | - `compile->serve`. To start each one you can can run `scripts/test.sh $COMPONENT` |
| 1047 | - or `scripts/watch.sh $COMPONENT` and the appropriate `cargo watch` command will |
| 1048 | - be started for you. |
| 1049 | - |
| 1050 | - # Testing the Entire CI Workflow |
| 1051 | - |
| 1052 | - You can run all of the CI tests locally by invoking `ayllu-build` directly, |
| 1053 | - assuming it is compiled it can be launched like this: |
| 1054 | - |
| 1055 | - ```sh |
| 1056 | - # run all tests in .ayllu |
| 1057 | - ayllu-build evaluate |
| 1058 | - ``` |
| 1059 | - |
| 1060 | - # ayllu-forge.org |
| 1061 | - |
| 1062 | - The [Ayllu website](https://ayllu-forge.org) and project documentation are built |
| 1063 | - together with [Zola](https://www.getzola.org/) which you must install. After |
| 1064 | - which you can startup a local preview of the site with the following commands: |
| 1065 | - |
| 1066 | - ```sh |
| 1067 | - cd www && zola serve |
| 1068 | - ``` |
| 1069 | - The generated content are hosted directly from Ayllu and you simply need to |
| 1070 | - build and commit the generated code directly into the repository. |
| 1071 | - |
| 1072 | - ```sh |
| 1073 | - cd www && zola build |
| 1074 | - ``` |
| 1075 | - |
| 1076 | - ## Diagrams |
| 1077 | - |
| 1078 | - Diagrams are built with [nomnoml](https://www.nomnoml.com/) and their SVG |
| 1079 | - content contain the source for generating the diagrams. Simply open one of the |
| 1080 | - source SVGs up and copy-paste it to the editor of the nomnoml website. |
| 1081 | diff --git a/www/content/docs/faq.md b/www/content/docs/faq.md |
| 1082 | deleted file mode 100644 |
| 1083 | index ad9a4fa..0000000 |
| 1084 | --- a/www/content/docs/faq.md |
| 1085 | +++ /dev/null |
| 1086 | @@ -1,15 +0,0 @@ |
| 1087 | - +++ |
| 1088 | - title = "FAQ" |
| 1089 | - weight = 1 |
| 1090 | - +++ |
| 1091 | - |
| 1092 | - ##### What Does "Ayllu" Mean? |
| 1093 | - |
| 1094 | - The name [Ayllu](https://en.wikipedia.org/wiki/Ayllu) _/ˈajʎu/_, _eye-joo_ is |
| 1095 | - the Quechua word for the traditional form of a community in the Andes region |
| 1096 | - of South America, particularly in Bolivia and Peru. |
| 1097 | - |
| 1098 | - ##### Do You Provide Hosting? |
| 1099 | - |
| 1100 | - Not currently. If there was enough interest the project might offer hosted |
| 1101 | - environments as a way to sustain it's development. |
| 1102 | diff --git a/www/content/docs/installation.md b/www/content/docs/installation.md |
| 1103 | deleted file mode 100644 |
| 1104 | index 455803e..0000000 |
| 1105 | --- a/www/content/docs/installation.md |
| 1106 | +++ /dev/null |
| 1107 | @@ -1,162 +0,0 @@ |
| 1108 | - +++ |
| 1109 | - title = "Installation" |
| 1110 | - slug = "installation" |
| 1111 | - weight = 0 |
| 1112 | - +++ |
| 1113 | - |
| 1114 | - # Running as a Container |
| 1115 | - |
| 1116 | - The quickest way to get started running Ayllu is by using a container. |
| 1117 | - [Podman](https://podman.io/) is the only supported container platform although |
| 1118 | - Docker may work as well. |
| 1119 | - |
| 1120 | - There are several different configurations that can be used to run Ayllu as |
| 1121 | - a container. |
| 1122 | - |
| 1123 | - * [Rootless with Ayllu running as root within the container](#rootless-container-with-ayllu-running-as-root) |
| 1124 | - * [Rootless with a non-root user within the container](#rootless-with-a-non-root-user-within-a-container) |
| 1125 | - * [As root with Ayllu running as a non-root user](#as-root-with-ayllu-running-as-a-non-root-user) |
| 1126 | - |
| 1127 | - ## Rootless Container with Ayllu Running as Root |
| 1128 | - |
| 1129 | - This configuration works best if you want Ayllu to have access to your |
| 1130 | - repositories for browsing your code locally. The tutorial assumes that you |
| 1131 | - have permissions to access all of your code repositories.Note that the commands |
| 1132 | - below use a separate configuration and data paths to avoid conflicting with the |
| 1133 | - default paths if the Ayllu binary is installed directly on your system. |
| 1134 | - |
| 1135 | - First create configuration and data paths that we will map into the container. |
| 1136 | - |
| 1137 | - mkdir ~/.config/ayllu-podman |
| 1138 | - mkdir ~/.local/share/ayllu-podman |
| 1139 | - |
| 1140 | - Next pull the latest version of the container and generate a new configuration |
| 1141 | - file. |
| 1142 | - |
| 1143 | - podman pull registry.ayllu-forge.org/ayllu/ayllu:main |
| 1144 | - podman run --rm -ti registry.ayllu-forge.org/ayllu/ayllu:main ayllu config generate > ~/.config/ayllu-podman/config.toml |
| 1145 | - |
| 1146 | - The next step is to map "collections" (directories that contain git repositories) |
| 1147 | - into the Ayllu container. On my system I keep active projects I'm working on |
| 1148 | - in a directory called `~/repos/projects` and I keep past projects for reference |
| 1149 | - in a directory called `~/repos/attic`. |
| 1150 | - |
| 1151 | - ... |
| 1152 | - [[collections]] |
| 1153 | - name = "projects" |
| 1154 | - description = "active projects" |
| 1155 | - # ~/repos/projects --> /repos in the container |
| 1156 | - path = "/repos/projects" |
| 1157 | - |
| 1158 | - [[collections]] |
| 1159 | - name = "attic" |
| 1160 | - description = "past projects stowed away in the attic" |
| 1161 | - path = "/repos/attic" |
| 1162 | - ... |
| 1163 | - |
| 1164 | - Now you can start the container ensuring that you map the code collection into |
| 1165 | - the correct path which you configured in the step above. In the commands below |
| 1166 | - we will use the following volume maps from my host system into the container. |
| 1167 | - Take a look at the Podman [rootless tutorial](https://github.com/containers/podman/blob/main/docs/tutorials/rootless_tutorial.md) |
| 1168 | - for a refresher on how rootless volume mappings work. Note that below the |
| 1169 | - repositories are mounted as :rw. This is because Ayllu uses Git [worktrees](https://git-scm.com/docs/git-worktree) |
| 1170 | - to run certain types of analysis such as the code composition chart. If you |
| 1171 | - don't care about that you can change this to read-only to prevent any write |
| 1172 | - access at all. |
| 1173 | - |
| 1174 | - # code repositories |
| 1175 | - -v ~/repos:/repos:rw |
| 1176 | - # configuration directory |
| 1177 | - -v ~/.config/ayllu-podman:/root/.config/ayllu |
| 1178 | - # stateful sqlite database |
| 1179 | - -v ~/.local/share/ayllu-podman:/root/.local/share/ayllu |
| 1180 | - |
| 1181 | - Finally we can launch the actual container. |
| 1182 | - |
| 1183 | - podman run \ |
| 1184 | - --net host --rm -ti --user root \ |
| 1185 | - -v ~/repos:/repos \ |
| 1186 | - -v ~/.config/ayllu-podman:/root/.config/ayllu \ |
| 1187 | - -v ~/.local/share/ayllu-podman:/root/.local/share/ayllu \ |
| 1188 | - registry.ayllu-forge.org/ayllu/ayllu:main \ |
| 1189 | - ayllu serve |
| 1190 | - |
| 1191 | - You should now be able to browse to the user interface at |
| 1192 | - [localhost:8080](http://localhost:8080). |
| 1193 | - |
| 1194 | - ### Configure with Systemd |
| 1195 | - |
| 1196 | - You can also configure the container to run as a systemd-user service. See |
| 1197 | - the documentation for [podman systemd units](https://docs.podman.io/en/latest/markdown/podman-systemd.unit.5.html). |
| 1198 | - You can also checkout the [archlinux wiki](https://wiki.archlinux.org/title/Podman#Quadlet) |
| 1199 | - for a tutorial. |
| 1200 | - |
| 1201 | - Here is an example file at `~/.config/containers/systemd/ayllu.container`. |
| 1202 | - |
| 1203 | - ``` |
| 1204 | - [Unit] |
| 1205 | - Description=Ayllu Container |
| 1206 | - |
| 1207 | - [Container] |
| 1208 | - ContainerName=ayllu |
| 1209 | - Image=registry.ayllu-forge.org/ayllu/ayllu:main |
| 1210 | - Network=host |
| 1211 | - User=root |
| 1212 | - Volume=%h/repos:/repos:rw |
| 1213 | - Volume=%h/.config/ayllu-podman:/root/.config/ayllu |
| 1214 | - Volume=%h/.local/share/ayllu-podman:/root/.local/share/ayllu |
| 1215 | - Exec=ayllu serve |
| 1216 | - |
| 1217 | - [Service] |
| 1218 | - Restart=on-failure |
| 1219 | - |
| 1220 | - # Extend Timeout to allow time to pull the image |
| 1221 | - TimeoutStartSec=300 |
| 1222 | - |
| 1223 | - # The [Install] section allows enabling the generated service. |
| 1224 | - [Install] |
| 1225 | - WantedBy=default.target |
| 1226 | - ``` |
| 1227 | - |
| 1228 | - Once you've configured the file you can install and run it: |
| 1229 | - |
| 1230 | - # validate the configuration |
| 1231 | - /usr/lib/podman/quadlet -user -dryrun |
| 1232 | - # install generated systemd services |
| 1233 | - /usr/lib/podman/quadlet -user ~/.config/systemd/user |
| 1234 | - # reload the user daemon |
| 1235 | - systemctl --user daemon-reload |
| 1236 | - # start the ayllu container |
| 1237 | - systemctl --user start ayllu |
| 1238 | - |
| 1239 | - If all went well Ayllu should now be running as a container managed by systemd! |
| 1240 | - |
| 1241 | - # Rootless with a non-root User within a Container |
| 1242 | - |
| 1243 | - This method is the most restricted technique for running Ayllu in a production |
| 1244 | - deployment. Not fully supported yet, TODO. |
| 1245 | - |
| 1246 | - # As Root with Ayllu Running as a Non-root User |
| 1247 | - |
| 1248 | - This method is a hybrid approach that is useful for serving components of Ayllu |
| 1249 | - from a container but also retaining a system level installation. Not fully |
| 1250 | - supported yet, TODO. |
| 1251 | - |
| 1252 | - # Distribution Packages |
| 1253 | - |
| 1254 | - <div class="warning"> |
| 1255 | - NOTE: Few distribution packages currently exist for Ayllu, any contributions |
| 1256 | - in this regard would be gladly accepted! |
| 1257 | - </div> |
| 1258 | - |
| 1259 | - ## Arch Linux |
| 1260 | - |
| 1261 | - ###### Release Package (Unfinished) |
| 1262 | - [ayllu](https://aur.archlinux.org/packages/ayllu) |
| 1263 | - |
| 1264 | - ###### Source Package (Unfinished) |
| 1265 | - [ayllu-git](https://aur.archlinux.org/packages/ayllu-git) |
| 1266 | - |
| 1267 | - # From Source |
| 1268 | - |
| 1269 | - TODO |
| 1270 | diff --git a/www/content/docs/mail.md b/www/content/docs/mail.md |
| 1271 | deleted file mode 100644 |
| 1272 | index 1668f95..0000000 |
| 1273 | --- a/www/content/docs/mail.md |
| 1274 | +++ /dev/null |
| 1275 | @@ -1,25 +0,0 @@ |
| 1276 | - +++ |
| 1277 | - title = "Mail" |
| 1278 | - weight = 1 |
| 1279 | - +++ |
| 1280 | - |
| 1281 | - # Mailing List Support |
| 1282 | - |
| 1283 | - Ayllu has full featured support for email based development workflows. It is |
| 1284 | - based on the excellent [mailpot](https://git.meli-email.org/meli/mailpot) |
| 1285 | - mailing list manager. |
| 1286 | - |
| 1287 | - ## Configuration |
| 1288 | - |
| 1289 | - The configuration of mail servers can be complex. Ayllu encapsulates most of |
| 1290 | - these settings in the [mutliuser](https://ayllu-forge.org/ayllu/ayllu/tree/main/containers/multiuser) |
| 1291 | - container which can be used as a reference for configuring your own mail server. |
| 1292 | - |
| 1293 | - ### Minimum Recommended Security Settings |
| 1294 | - |
| 1295 | - #### DKIM |
| 1296 | - |
| 1297 | - #### SPF Validation |
| 1298 | - |
| 1299 | - The container provides SPF validation and the recommended DNS configuration for |
| 1300 | - a single host e.g. `ayllu-forge.org` is `"v=spf1 a mx ~all"`. |
| 1301 | diff --git a/www/content/docs/proxy.md b/www/content/docs/proxy.md |
| 1302 | deleted file mode 100644 |
| 1303 | index 5b9a566..0000000 |
| 1304 | --- a/www/content/docs/proxy.md |
| 1305 | +++ /dev/null |
| 1306 | @@ -1,17 +0,0 @@ |
| 1307 | - +++ |
| 1308 | - title = "Reverse Proxy" |
| 1309 | - weight = 1 |
| 1310 | - +++ |
| 1311 | - |
| 1312 | - # Proxy Configuration |
| 1313 | - |
| 1314 | - Ayllu is designed to be run behind a reverse proxy server and it is not |
| 1315 | - recommended to deploy Ayllu directly to the internet. Things such as TLS |
| 1316 | - termination or basic authentication for private repositories are not directly |
| 1317 | - supported by Ayllu although some of these features may be added in the future. |
| 1318 | - |
| 1319 | - ## Nginx |
| 1320 | - |
| 1321 | - [nginx](https://nginx.org/) is the only supported software but others are |
| 1322 | - likely to work and we will happily accept documentation for operating other |
| 1323 | - free software proxy servers. |
| 1324 | diff --git a/www/content/docs/sites.md b/www/content/docs/sites.md |
| 1325 | deleted file mode 100644 |
| 1326 | index 141d7dc..0000000 |
| 1327 | --- a/www/content/docs/sites.md |
| 1328 | +++ /dev/null |
| 1329 | @@ -1,44 +0,0 @@ |
| 1330 | - +++ |
| 1331 | - title = "Static Hosting" |
| 1332 | - weight = 1 |
| 1333 | - +++ |
| 1334 | - |
| 1335 | - # Static Hosting |
| 1336 | - |
| 1337 | - Ayllu can serve content directly from a git repository, you just need to toggle |
| 1338 | - a few options in your git configuration file. |
| 1339 | - |
| 1340 | - ## Example Configuration |
| 1341 | - |
| 1342 | - In your git configuration file you can specify one or more headers which if |
| 1343 | - detected by Ayllu will cause it to serve content from the directory rather then |
| 1344 | - it's web interface. |
| 1345 | - |
| 1346 | - Below we specify that any request sent to Ayllu with header `Host = example.org` |
| 1347 | - should return HTML content from within the repository directory www/public. |
| 1348 | - |
| 1349 | - ``` |
| 1350 | - [ayllu-sites] |
| 1351 | - enabled = true |
| 1352 | - header = Host=example.org |
| 1353 | - content = www/public |
| 1354 | - ``` |
| 1355 | - |
| 1356 | - ## Proxy configuration |
| 1357 | - |
| 1358 | - Typically you would want a proxy server in front of your Ayllu instance. You |
| 1359 | - can then pass any headers to your downstream instance and it should serve the |
| 1360 | - content as expected. |
| 1361 | - |
| 1362 | - ### Example Nginx Proxy |
| 1363 | - |
| 1364 | - ``` |
| 1365 | - ... |
| 1366 | - location / { |
| 1367 | - include config.d/proxy.conf; |
| 1368 | - proxy_pass http://127.0.0.1:8080; |
| 1369 | - proxy_set_header Host $host; |
| 1370 | - proxy_set_header X-Real-IP $remote_addr; |
| 1371 | - proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; |
| 1372 | - } |
| 1373 | - ``` |
| 1374 | diff --git a/www/content/docs/themes.md b/www/content/docs/themes.md |
| 1375 | deleted file mode 100644 |
| 1376 | index 3cf71f7..0000000 |
| 1377 | --- a/www/content/docs/themes.md |
| 1378 | +++ /dev/null |
| 1379 | @@ -1,61 +0,0 @@ |
| 1380 | - +++ |
| 1381 | - title = "Themes" |
| 1382 | - weight = 1 |
| 1383 | - +++ |
| 1384 | - |
| 1385 | - # Themeing Ayllu |
| 1386 | - |
| 1387 | - Ayllu can be customized in a variety of ways including custom CSS, modifying |
| 1388 | - Jinja based HTML templates, or by adding new static assets such as images. |
| 1389 | - Available themes can be viewed and enabled from the `/config` page. |
| 1390 | - |
| 1391 | - ## The Default Theme |
| 1392 | - |
| 1393 | - The default theme is located in `ayllu/themes/default` and is served as a base |
| 1394 | - and all themes serve content from this theme if they do not override it's |
| 1395 | - assets. It is possible to change the default theme by setting it in your Ayllu |
| 1396 | - configuration file. |
| 1397 | - |
| 1398 | - [web] |
| 1399 | - default_theme = "my-custom-theme" |
| 1400 | - |
| 1401 | - By changing the default theme all additionally loaded themes will inherit the |
| 1402 | - templates and assets of the default theme. |
| 1403 | - |
| 1404 | - ## Built-in vs External Themes |
| 1405 | - |
| 1406 | - ### Built-in Themes |
| 1407 | - |
| 1408 | - Built-in themes are compiled into the Ayllu binary and available for selection |
| 1409 | - from the config section of the web interface. These themes are available at |
| 1410 | - `ayllu/themes/`. These themes use [lightning css](https://lightningcss.dev/) |
| 1411 | - at build time to build the theme's `main.min.css` file. |
| 1412 | - |
| 1413 | - ### External Themes |
| 1414 | - |
| 1415 | - Additional themes can be loaded directly from the file system and allow the |
| 1416 | - addition of new themes without recompiling Ayllu. |
| 1417 | - |
| 1418 | - [web] |
| 1419 | - |
| 1420 | - default_theme = "default" |
| 1421 | - |
| 1422 | - [[web.theme]] |
| 1423 | - |
| 1424 | - name = "my-custom-theme" |
| 1425 | - # path to a directory of theme templates, assets, and stylesheets |
| 1426 | - path = "/var/lib/ayllu/themes/my-custom-theme" |
| 1427 | - |
| 1428 | - ### File System Layout |
| 1429 | - |
| 1430 | - All files are optional in themes, an empty directory is considered a valid |
| 1431 | - theme and will result in an identical configuration to the `default_theme`. |
| 1432 | - |
| 1433 | - assets/ # SVG and other static assets served from /assets |
| 1434 | - assets/logo.svg # main logo in the left hand nav bar |
| 1435 | - assets/feed.xsl # XSL file used to style RSS feeds |
| 1436 | - assets/*.svg # additional assets for various parts of the UI |
| 1437 | - templates/ # directory of Jinja templates |
| 1438 | - theme.css # additional stylesheet to extend the default |
| 1439 | - |
| 1440 | - See `contrib/example-theme` for a functional custom theme to extend as a base. |
| 1441 | diff --git a/www/design.nomnom b/www/design.nomnom |
| 1442 | deleted file mode 100644 |
| 1443 | index 6f755b6..0000000 |
| 1444 | --- a/www/design.nomnom |
| 1445 | +++ /dev/null |
| 1446 | @@ -1,51 +0,0 @@ |
| 1447 | - [reverse_proxy] |
| 1448 | - |
| 1449 | - [reverse_proxy]<-->[Rudolfs (LFS API)] |
| 1450 | - |
| 1451 | - [reverse_proxy]<-->[ayllu-core | |
| 1452 | - [axum http interface] |
| 1453 | - [sites static hosting] |
| 1454 | - [tarpc-server (job_server)] |
| 1455 | - [git repositories via libgit2] |
| 1456 | - [<database> sqlite] |
| 1457 | - ] |
| 1458 | - |
| 1459 | - [ayllu-core] <--> [ |
| 1460 | - ayllu-mail| |
| 1461 | - [tarpc-server] |
| 1462 | - [mailpot] |
| 1463 | - [postfix] |
| 1464 | - [<database> sqlite] |
| 1465 | - ] <-- SMTP [<actor> contributor-2] |
| 1466 | - |
| 1467 | - [ayllu-core] <--> [ |
| 1468 | - ayllu-xmpp | |
| 1469 | - [tarpc-server] |
| 1470 | - [chat interface/bot] |
| 1471 | - [<database> sqlite] |
| 1472 | - ] <-- XMPP [<actor>; contributor-2] |
| 1473 | - |
| 1474 | - [ayllu-core] <--> [ |
| 1475 | - ayllu-build | |
| 1476 | - [tarpc-server] |
| 1477 | - [<database> sqlite] |
| 1478 | - ] |
| 1479 | - |
| 1480 | - [ayllu-core] <--> [ayllu-shell] <-- SSH [<actor> contributor] |
| 1481 | - [ayllu-core] <--> [ayllu-cli] <-- [<actor> admin] |
| 1482 | - |
| 1483 | - |
| 1484 | - [ayllu-build]<-->[ |
| 1485 | - ayllu-builder-1 | |
| 1486 | - [<package>qemu-x86_64| tarpc-server | executor] |
| 1487 | - ] |
| 1488 | - |
| 1489 | - [ayllu-build]<-->[ |
| 1490 | - ayllu-builder-2 | |
| 1491 | - [<package>qemu-aarch64| tarpc-server | exectuor] |
| 1492 | - ] |
| 1493 | - |
| 1494 | - [ayllu-build]<-->[ |
| 1495 | - ayllu-builder-n | |
| 1496 | - [<package>lxc| tarpc-server | executor] |
| 1497 | - ] --> [ayllu-core] |
| 1498 | diff --git a/www/sass/main.scss b/www/sass/main.scss |
| 1499 | deleted file mode 100644 |
| 1500 | index 2663c41..0000000 |
| 1501 | --- a/www/sass/main.scss |
| 1502 | +++ /dev/null |
| 1503 | @@ -1,154 +0,0 @@ |
| 1504 | - @use "../../node_modules/open-props/normalize.min.css"; |
| 1505 | - @use "../../node_modules/open-props/open-props.min.css"; |
| 1506 | - |
| 1507 | - a:visited { |
| 1508 | - color: var(--link); |
| 1509 | - } |
| 1510 | - |
| 1511 | - li.active { |
| 1512 | - color: var(--text-2); |
| 1513 | - text-shadow: |
| 1514 | - 0 0 10px var(--camo-5), |
| 1515 | - 0 0 25px var(--camo-7); |
| 1516 | - } |
| 1517 | - |
| 1518 | - code { |
| 1519 | - background: none; |
| 1520 | - } |
| 1521 | - |
| 1522 | - pre { |
| 1523 | - padding: 1em; |
| 1524 | - color: var(--text-2); |
| 1525 | - } |
| 1526 | - |
| 1527 | - div.doc-content > h1,h2,h3,h4,h5 { |
| 1528 | - font-size: var(--font-size-5); |
| 1529 | - } |
| 1530 | - |
| 1531 | - img.logo { |
| 1532 | - max-width: 72px; |
| 1533 | - } |
| 1534 | - |
| 1535 | - html, |
| 1536 | - body { |
| 1537 | - box-sizing: border-box; |
| 1538 | - height: 100%; |
| 1539 | - } |
| 1540 | - |
| 1541 | - .content { |
| 1542 | - display: flex; |
| 1543 | - justify-content: center; |
| 1544 | - align-items: center; |
| 1545 | - } |
| 1546 | - |
| 1547 | - body > footer { |
| 1548 | - margin: 0px; |
| 1549 | - padding: 0px; |
| 1550 | - } |
| 1551 | - |
| 1552 | - .wrapper { |
| 1553 | - min-height: 100%; |
| 1554 | - display: flex; |
| 1555 | - flex-direction: column; |
| 1556 | - box-sizing: border-box; |
| 1557 | - } |
| 1558 | - |
| 1559 | - .page-body { |
| 1560 | - flex-grow: 1; |
| 1561 | - } |
| 1562 | - |
| 1563 | - .page-footer { |
| 1564 | - flex-grow: 0; |
| 1565 | - flex-shrink: 0; |
| 1566 | - } |
| 1567 | - |
| 1568 | - footer { |
| 1569 | - text-align: center; |
| 1570 | - font-size: 0.8em; |
| 1571 | - } |
| 1572 | - |
| 1573 | - article { |
| 1574 | - padding: 0.5em; |
| 1575 | - } |
| 1576 | - |
| 1577 | - nav { |
| 1578 | - display: flex; |
| 1579 | - justify-content: space-between; |
| 1580 | - align-items: center; |
| 1581 | - background-color: var(--surface-1); |
| 1582 | - padding: 10px; |
| 1583 | - color: var(--text-1); |
| 1584 | - box-shadow: var(--shadow-3); |
| 1585 | - } |
| 1586 | - |
| 1587 | - nav.subnav { |
| 1588 | - background-color: var(--surface-2); |
| 1589 | - color: var(--text-1); |
| 1590 | - box-shadow: var(--shadow-5); |
| 1591 | - } |
| 1592 | - |
| 1593 | - nav .logo { |
| 1594 | - font-size: 20px; |
| 1595 | - font-weight: bold; |
| 1596 | - } |
| 1597 | - |
| 1598 | - nav ul { |
| 1599 | - list-style-type: none; |
| 1600 | - margin: 0; |
| 1601 | - padding: 0; |
| 1602 | - display: flex; |
| 1603 | - } |
| 1604 | - |
| 1605 | - nav ul li { |
| 1606 | - margin-left: 20px; |
| 1607 | - } |
| 1608 | - |
| 1609 | - nav ul li a { |
| 1610 | - color: var(--link); |
| 1611 | - text-decoration: none; |
| 1612 | - } |
| 1613 | - |
| 1614 | - .documentation { |
| 1615 | - margin: 1em; |
| 1616 | - @media (width > 768px) { |
| 1617 | - display: flex; |
| 1618 | - } |
| 1619 | - .doc-content { |
| 1620 | - max-width: 100%; |
| 1621 | - } |
| 1622 | - .side-panel { |
| 1623 | - margin-right: 3em; |
| 1624 | - margin-bottom: 1em; |
| 1625 | - min-width: 200px; |
| 1626 | - ul > li { |
| 1627 | - list-style: none; |
| 1628 | - font-weight: bold; |
| 1629 | - font-size: 1.2em; |
| 1630 | - } |
| 1631 | - } |
| 1632 | - } |
| 1633 | - |
| 1634 | - h1, |
| 1635 | - h2, |
| 1636 | - h3, |
| 1637 | - h4, |
| 1638 | - h5 { |
| 1639 | - max-inline-size: none; |
| 1640 | - margin-top: .5em; |
| 1641 | - margin-bottom: .5em; |
| 1642 | - } |
| 1643 | - |
| 1644 | - main.page-body { |
| 1645 | - margin: 2em; |
| 1646 | - } |
| 1647 | - |
| 1648 | - div.side-panel > ul { |
| 1649 | - padding-left: 0px; |
| 1650 | - } |
| 1651 | - |
| 1652 | - .diagram { |
| 1653 | - min-width: 200%; |
| 1654 | - } |
| 1655 | - |
| 1656 | - pre { |
| 1657 | - } |
| 1658 | diff --git a/www/scripts/vendor_pico_scss.sh b/www/scripts/vendor_pico_scss.sh |
| 1659 | deleted file mode 100755 |
| 1660 | index 8d179fa..0000000 |
| 1661 | --- a/www/scripts/vendor_pico_scss.sh |
| 1662 | +++ /dev/null |
| 1663 | @@ -1,5 +0,0 @@ |
| 1664 | - #!/bin/sh |
| 1665 | - |
| 1666 | - rm -r sass/pico 2>/dev/null || true |
| 1667 | - mkdir -p sass/pico |
| 1668 | - cp -r ../node_modules/@picocss/pico/scss/* sass/pico/ |
| 1669 | diff --git a/www/static/assets/architecture.svg b/www/static/assets/architecture.svg |
| 1670 | deleted file mode 100644 |
| 1671 | index e05c148..0000000 |
| 1672 | --- a/www/static/assets/architecture.svg |
| 1673 | +++ /dev/null |
| 1674 | @@ -1,598 +0,0 @@ |
| 1675 | - <svg version="1.1" baseProfile="full" width="1817.5" height="664.0" viewBox="0 0 1817.5 664" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:ev="http://www.w3.org/2001/xml-events"> |
| 1676 | - <desc >[reverse_proxy] |
| 1677 | - |
| 1678 | - [reverse_proxy]<-->[Rudolfs (LFS API)] |
| 1679 | - |
| 1680 | - [reverse_proxy]<-->[ayllu-core | |
| 1681 | - [axum http interface] |
| 1682 | - [sites static hosting] |
| 1683 | - [tarpc-server (job_server)] |
| 1684 | - [git repositories via libgit2] |
| 1685 | - [<database> sqlite] |
| 1686 | - ] |
| 1687 | - |
| 1688 | - [ayllu-core] <--> [ |
| 1689 | - ayllu-mail| |
| 1690 | - [tarpc-server] |
| 1691 | - [mailpot] |
| 1692 | - [postfix] |
| 1693 | - [<database> sqlite] |
| 1694 | - ] <-- SMTP [<actor> contributor-2] |
| 1695 | - |
| 1696 | - [ayllu-core] <--> [ |
| 1697 | - ayllu-xmpp | |
| 1698 | - [tarpc-server] |
| 1699 | - [chat interface/bot] |
| 1700 | - [<database> sqlite] |
| 1701 | - ] <-- XMPP [<actor>; contributor-2] |
| 1702 | - |
| 1703 | - [ayllu-core] <--> [ |
| 1704 | - ayllu-build | |
| 1705 | - [tarpc-server] |
| 1706 | - [<database> sqlite] |
| 1707 | - ] |
| 1708 | - |
| 1709 | - [ayllu-core] <--> [ayllu-shell] <-- SSH [<actor> contributor] |
| 1710 | - [ayllu-core] <--> [ayllu-cli] <-- [<actor> admin] |
| 1711 | - |
| 1712 | - |
| 1713 | - [ayllu-build]<-->[ |
| 1714 | - ayllu-builder-1 | |
| 1715 | - [<package>qemu-x86_64| tarpc-server | executor] |
| 1716 | - ] |
| 1717 | - |
| 1718 | - [ayllu-build]<-->[ |
| 1719 | - ayllu-builder-2 | |
| 1720 | - [<package>qemu-aarch64| tarpc-server | exectuor] |
| 1721 | - ] |
| 1722 | - |
| 1723 | - [ayllu-build]<-->[ |
| 1724 | - ayllu-builder-n | |
| 1725 | - [<package>lxc| tarpc-server | executor] |
| 1726 | - ] --> [ayllu-core] |
| 1727 | - </desc> |
| 1728 | - <g stroke-width="1.0" text-align="left" font="12pt Helvetica, Arial, sans-serif" font-size="12pt" font-family="Helvetica" font-weight="normal" font-style="normal"> |
| 1729 | - <g font-family="Helvetica" font-size="12pt" font-weight="bold" font-style="normal" stroke-width="3.0" stroke-linejoin="round" stroke-linecap="round" stroke="#33322E"> |
| 1730 | - <g stroke="transparent" fill="transparent"> |
| 1731 | - <rect x="0.0" y="0.0" height="664.0" width="1817.5" stroke="none"></rect> |
| 1732 | - </g> |
| 1733 | - <g transform="translate(8, 8)" fill="#33322E"> |
| 1734 | - <g transform="translate(20, 20)" fill="#33322E" font-family="Helvetica" font-size="12pt" font-weight="normal" font-style="normal"> |
| 1735 | - <g stroke-dasharray="6 6"> |
| 1736 | - <path d="M873.9 24.0 L631.5 52 L631.5 117.33333333333333 L631.5 117.3 " fill="none"></path> |
| 1737 | - </g> |
| 1738 | - <path d="M626.2 110.7 L631.5 117.3 L636.8 110.7 L631.5 124.0 Z"></path> |
| 1739 | - <path d="M867.9 30.1 L873.9 24.0 L866.6 19.5 L880.5 23.2 Z"></path> |
| 1740 | - <g stroke-dasharray="6 6"> |
| 1741 | - <path d="M1012.1 24.0 L1254.5 52 L1254.5 65.33333333333333 L1254.5 65.3 " fill="none"></path> |
| 1742 | - </g> |
| 1743 | - <path d="M1249.2 58.7 L1254.5 65.3 L1259.8 58.7 L1254.5 72.0 Z"></path> |
| 1744 | - <path d="M1019.4 19.5 L1012.1 24.0 L1018.1 30.1 L1005.5 23.2 Z"></path> |
| 1745 | - <g stroke-dasharray="6 6"> |
| 1746 | - <path d="M740.9 184.6 L242 228 L242 241.33333333333334 L242.0 241.3 " fill="none"></path> |
| 1747 | - </g> |
| 1748 | - <path d="M236.7 234.7 L242.0 241.3 L247.3 234.7 L242.0 248.0 Z"></path> |
| 1749 | - <path d="M734.7 190.5 L740.9 184.6 L733.8 179.9 L747.5 184.1 Z"></path> |
| 1750 | - <text x="698.3" y="495.3" stroke="none">SMTP</text> |
| 1751 | - <g stroke-dasharray="6 6"> |
| 1752 | - <path d="M242.0 390.7 L242 404 L690.25 503.2664359861592 L690.3 503.3 " fill="none"></path> |
| 1753 | - </g> |
| 1754 | - <path d="M247.3 397.3 L242.0 390.7 L236.7 397.3 L242.0 384.0 Z"></path> |
| 1755 | - <g stroke-dasharray="6 6"> |
| 1756 | - <path d="M858.5 209.1 L750.5 228 L750.5 241.33333333333334 L750.5 241.3 " fill="none"></path> |
| 1757 | - </g> |
| 1758 | - <path d="M745.2 234.7 L750.5 241.3 L755.8 234.7 L750.5 248.0 Z"></path> |
| 1759 | - <path d="M852.8 215.5 L858.5 209.1 L851.0 205.0 L865.0 208.0 Z"></path> |
| 1760 | - <text x="695.6" y="480.0" stroke="none">XMPP</text> |
| 1761 | - <g stroke-dasharray="6 6"> |
| 1762 | - <path d="M750.5 390.7 L750.5 404 L748.4375 488 L748.4 488.0 " fill="none"></path> |
| 1763 | - </g> |
| 1764 | - <path d="M755.8 397.3 L750.5 390.7 L745.2 397.3 L750.5 384.0 Z"></path> |
| 1765 | - <g stroke-dasharray="6 6"> |
| 1766 | - <path d="M1183.6 212.8 L1168.75 228 L1168.75 241.33333333333334 L1168.8 241.3 " fill="none"></path> |
| 1767 | - </g> |
| 1768 | - <path d="M1163.4 234.7 L1168.8 241.3 L1174.1 234.7 L1168.8 248.0 Z"></path> |
| 1769 | - <path d="M1182.8 221.3 L1183.6 212.8 L1175.1 213.8 L1188.2 208.0 Z"></path> |
| 1770 | - <g stroke-dasharray="6 6"> |
| 1771 | - <path d="M1472.2 210.0 L1528 228 L1528 293.3333333333333 L1528.0 293.3 " fill="none"></path> |
| 1772 | - </g> |
| 1773 | - <path d="M1522.7 286.7 L1528.0 293.3 L1533.3 286.7 L1528.0 300.0 Z"></path> |
| 1774 | - <path d="M1480.2 207.0 L1472.2 210.0 L1476.9 217.2 L1465.8 208.0 Z"></path> |
| 1775 | - <text x="1487.3" y="480.0" stroke="none">SSH</text> |
| 1776 | - <g stroke-dasharray="6 6"> |
| 1777 | - <path d="M1528.0 338.7 L1528 404 L1528 488 L1528.0 488.0 " fill="none"></path> |
| 1778 | - </g> |
| 1779 | - <path d="M1533.3 345.3 L1528.0 338.7 L1522.7 345.3 L1528.0 332.0 Z"></path> |
| 1780 | - <g stroke-dasharray="6 6"> |
| 1781 | - <path d="M1568.6 209.4 L1652.5 228 L1652.5 293.3333333333333 L1652.5 293.3 " fill="none"></path> |
| 1782 | - </g> |
| 1783 | - <path d="M1647.2 286.7 L1652.5 293.3 L1657.8 286.7 L1652.5 300.0 Z"></path> |
| 1784 | - <path d="M1576.2 205.7 L1568.6 209.4 L1573.9 216.1 L1562.0 208.0 Z"></path> |
| 1785 | - <g stroke-dasharray="6 6"> |
| 1786 | - <path d="M1652.5 338.7 L1652.5 404 L1652.5 488 L1652.5 488.0 " fill="none"></path> |
| 1787 | - </g> |
| 1788 | - <path d="M1657.8 345.3 L1652.5 338.7 L1647.2 345.3 L1652.5 332.0 Z"></path> |
| 1789 | - <g stroke-dasharray="6 6"> |
| 1790 | - <path d="M1031.0 367.4 L933 404 L933 417.3333333333333 L933.0 417.3 " fill="none"></path> |
| 1791 | - </g> |
| 1792 | - <path d="M927.7 410.7 L933.0 417.3 L938.3 410.7 L933.0 424.0 Z"></path> |
| 1793 | - <path d="M1026.6 374.7 L1031.0 367.4 L1022.9 364.8 L1037.3 365.1 Z"></path> |
| 1794 | - <g stroke-dasharray="6 6"> |
| 1795 | - <path d="M1152.9 390.5 L1150 404 L1150 417.3333333333333 L1150.0 417.3 " fill="none"></path> |
| 1796 | - </g> |
| 1797 | - <path d="M1144.7 410.7 L1150.0 417.3 L1155.3 410.7 L1150.0 424.0 Z"></path> |
| 1798 | - <path d="M1156.7 398.2 L1152.9 390.5 L1146.3 395.9 L1154.3 384.0 Z"></path> |
| 1799 | - <g stroke-dasharray="6 6"> |
| 1800 | - <path d="M1255.6 388.3 L1274.5 404 L1285.5740965207704 418.6780924298968 L1285.6 418.7 " fill="none"></path> |
| 1801 | - </g> |
| 1802 | - <path d="M1277.3 416.6 L1285.6 418.7 L1285.8 410.1 L1289.6 424.0 Z"></path> |
| 1803 | - <path d="M1264.1 388.4 L1255.6 388.3 L1257.3 396.6 L1250.5 384.0 Z"></path> |
| 1804 | - <g stroke-dasharray="6 6"> |
| 1805 | - <path d="M1392.7 424.0 L1400 404 L1400 316 L1400 316 L1400 228 L1400 228 L1372.6362943277163 211.45012990267378 L1372.6 211.5 " fill="none"></path> |
| 1806 | - </g> |
| 1807 | - <path d="M1381.1 210.3 L1372.6 211.5 L1375.6 219.5 L1366.9 208.0 Z"></path> |
| 1808 | - <g data-name="reverse_proxy"> |
| 1809 | - <g fill="#eee8d5" stroke="#33322E" data-name="reverse_proxy"> |
| 1810 | - <rect x="880.5" y="0.0" height="32.0" width="125.0" data-name="reverse_proxy"></rect> |
| 1811 | - </g> |
| 1812 | - <g transform="translate(880.5, 0)" font-family="Helvetica" font-size="12pt" font-weight="bold" font-style="normal" data-name="reverse_proxy"> |
| 1813 | - <g transform="translate(8, 8)" fill="#33322E" text-align="center" data-name="reverse_proxy"> |
| 1814 | - <text x="54.5" y="14.1" stroke="none" text-anchor="middle" data-name="reverse_proxy">reverse_proxy</text> |
| 1815 | - |
| 1816 | - </g> |
| 1817 | - </g> |
| 1818 | - </g> |
| 1819 | - <g data-name="Rudolfs (LFS API)"> |
| 1820 | - <g fill="#eee8d5" stroke="#33322E" data-name="Rudolfs (LFS API)"> |
| 1821 | - <rect x="555.5" y="124.0" height="32.0" width="152.0" data-name="Rudolfs (LFS API)"></rect> |
| 1822 | - </g> |
| 1823 | - <g transform="translate(555.5, 124)" font-family="Helvetica" font-size="12pt" font-weight="bold" font-style="normal" data-name="Rudolfs (LFS API)"> |
| 1824 | - <g transform="translate(8, 8)" fill="#33322E" text-align="center" data-name="Rudolfs (LFS API)"> |
| 1825 | - <text x="68.0" y="14.1" stroke="none" text-anchor="middle" data-name="Rudolfs (LFS API)">Rudolfs (LFS API)</text> |
| 1826 | - |
| 1827 | - </g> |
| 1828 | - </g> |
| 1829 | - </g> |
| 1830 | - <g data-name="ayllu-core"> |
| 1831 | - <g fill="#eee8d5" stroke="#33322E" data-name="ayllu-core"> |
| 1832 | - <rect x="747.5" y="72.0" height="136.0" width="1014.0" data-name="ayllu-core"></rect> |
| 1833 | - <path d="M747.5 104.0 L1761.5 104.0" fill="none" data-name="ayllu-core"></path> |
| 1834 | - </g> |
| 1835 | - <g transform="translate(747.5, 72)" font-family="Helvetica" font-size="12pt" font-weight="bold" font-style="normal" data-name="ayllu-core"> |
| 1836 | - <g transform="translate(8, 8)" fill="#33322E" text-align="center" data-name="ayllu-core"> |
| 1837 | - <text x="499.0" y="14.1" stroke="none" text-anchor="middle" data-name="ayllu-core">ayllu-core</text> |
| 1838 | - |
| 1839 | - </g> |
| 1840 | - </g> |
| 1841 | - <g transform="translate(747.5, 104)" font-family="Helvetica" font-size="12pt" font-weight="normal" font-style="normal" data-name="ayllu-core"> |
| 1842 | - <g transform="translate(8, 8)" fill="#33322E" data-name="ayllu-core"> |
| 1843 | - <g transform="translate(20, 20)" data-name="ayllu-core"> |
| 1844 | - <g data-name="axum http interface"> |
| 1845 | - <g fill="#fdf6e3" stroke="#33322E" data-name="axum http interface"> |
| 1846 | - <rect x="0.0" y="8.0" height="32.0" width="164.0" data-name="axum http interface"></rect> |
| 1847 | - </g> |
| 1848 | - <g transform="translate(0, 8)" font-family="Helvetica" font-size="12pt" font-weight="bold" font-style="normal" data-name="axum http interface"> |
| 1849 | - <g transform="translate(8, 8)" fill="#33322E" text-align="center" data-name="axum http interface"> |
| 1850 | - <text x="74.0" y="14.1" stroke="none" text-anchor="middle" data-name="axum http interface">axum http interface</text> |
| 1851 | - |
| 1852 | - </g> |
| 1853 | - </g> |
| 1854 | - </g> |
| 1855 | - <g data-name="sites static hosting"> |
| 1856 | - <g fill="#fdf6e3" stroke="#33322E" data-name="sites static hosting"> |
| 1857 | - <rect x="204.0" y="8.0" height="32.0" width="161.0" data-name="sites static hosting"></rect> |
| 1858 | - </g> |
| 1859 | - <g transform="translate(204, 8)" font-family="Helvetica" font-size="12pt" font-weight="bold" font-style="normal" data-name="sites static hosting"> |
| 1860 | - <g transform="translate(8, 8)" fill="#33322E" text-align="center" data-name="sites static hosting"> |
| 1861 | - <text x="72.5" y="14.1" stroke="none" text-anchor="middle" data-name="sites static hosting">sites static hosting</text> |
| 1862 | - |
| 1863 | - </g> |
| 1864 | - </g> |
| 1865 | - </g> |
| 1866 | - <g data-name="tarpc-server (job_server)"> |
| 1867 | - <g fill="#fdf6e3" stroke="#33322E" data-name="tarpc-server (job_server)"> |
| 1868 | - <rect x="405.0" y="8.0" height="32.0" width="205.0" data-name="tarpc-server (job_server)"></rect> |
| 1869 | - </g> |
| 1870 | - <g transform="translate(405, 8)" font-family="Helvetica" font-size="12pt" font-weight="bold" font-style="normal" data-name="tarpc-server (job_server)"> |
| 1871 | - <g transform="translate(8, 8)" fill="#33322E" text-align="center" data-name="tarpc-server (job_server)"> |
| 1872 | - <text x="94.5" y="14.1" stroke="none" text-anchor="middle" data-name="tarpc-server (job_server)">tarpc-server (job_server)</text> |
| 1873 | - |
| 1874 | - </g> |
| 1875 | - </g> |
| 1876 | - </g> |
| 1877 | - <g data-name="git repositories via libgit2"> |
| 1878 | - <g fill="#fdf6e3" stroke="#33322E" data-name="git repositories via libgit2"> |
| 1879 | - <rect x="650.0" y="8.0" height="32.0" width="210.0" data-name="git repositories via libgit2"></rect> |
| 1880 | - </g> |
| 1881 | - <g transform="translate(650, 8)" font-family="Helvetica" font-size="12pt" font-weight="bold" font-style="normal" data-name="git repositories via libgit2"> |
| 1882 | - <g transform="translate(8, 8)" fill="#33322E" text-align="center" data-name="git repositories via libgit2"> |
| 1883 | - <text x="97.0" y="14.1" stroke="none" text-anchor="middle" data-name="git repositories via libgit2">git repositories via libgit2</text> |
| 1884 | - |
| 1885 | - </g> |
| 1886 | - </g> |
| 1887 | - </g> |
| 1888 | - <g data-name="sqlite"> |
| 1889 | - <g fill="#fdf6e3" stroke="#33322E" data-name="sqlite"> |
| 1890 | - <rect x="900.0" y="8.0" height="32.0" width="58.0" stroke="none" data-name="sqlite"></rect> |
| 1891 | - <path d="M900.0 8.0 L900.0 40.0" fill="none" data-name="sqlite"></path> |
| 1892 | - <path d="M958.0 8.0 L958.0 40.0" fill="none" data-name="sqlite"></path> |
| 1893 | - <ellipse cx="929.0" cy="8.0" rx="29.0" ry="6.0" data-name="sqlite"></ellipse> |
| 1894 | - <path d="M958.0 40.0 L958.0 40.3 L957.9 40.6 L957.7 40.9 L957.4 41.2 L957.1 41.5 L956.7 41.8 L956.3 42.1 L955.7 42.3 L955.1 42.6 L954.5 42.9 L953.7 43.1 L953.0 43.4 L952.1 43.6 L951.2 43.9 L950.3 44.1 L949.2 44.3 L948.2 44.5 L947.1 44.7 L945.9 44.9 L944.7 45.0 L943.5 45.2 L942.2 45.3 L940.9 45.5 L939.6 45.6 L938.2 45.7 L936.9 45.8 L935.5 45.8 L934.0 45.9 L932.6 46.0 L931.2 46.0 L929.7 46.0 L928.3 46.0 L926.8 46.0 L925.4 46.0 L924.0 45.9 L922.5 45.8 L921.1 45.8 L919.8 45.7 L918.4 45.6 L917.1 45.5 L915.8 45.3 L914.5 45.2 L913.3 45.0 L912.1 44.9 L910.9 44.7 L909.8 44.5 L908.8 44.3 L907.7 44.1 L906.8 43.9 L905.9 43.6 L905.0 43.4 L904.3 43.1 L903.5 42.9 L902.9 42.6 L902.3 42.3 L901.7 42.1 L901.3 41.8 L900.9 41.5 L900.6 41.2 L900.3 40.9 L900.1 40.6 L900.0 40.3 L900.0 40.0" data-name="sqlite"></path> |
| 1895 | - </g> |
| 1896 | - <g transform="translate(900, 12)" font-family="Helvetica" font-size="12pt" font-weight="bold" font-style="normal" data-name="sqlite"> |
| 1897 | - <g transform="translate(8, 8)" fill="#33322E" text-align="center" data-name="sqlite"> |
| 1898 | - <text x="21.0" y="14.1" stroke="none" text-anchor="middle" data-name="sqlite">sqlite</text> |
| 1899 | - |
| 1900 | - </g> |
| 1901 | - </g> |
| 1902 | - </g> |
| 1903 | - </g> |
| 1904 | - </g> |
| 1905 | - </g> |
| 1906 | - </g> |
| 1907 | - <g data-name="ayllu-mail"> |
| 1908 | - <g fill="#eee8d5" stroke="#33322E" data-name="ayllu-mail"> |
| 1909 | - <rect x="0.0" y="248.0" height="136.0" width="484.0" data-name="ayllu-mail"></rect> |
| 1910 | - <path d="M0.0 280.0 L484.0 280.0" fill="none" data-name="ayllu-mail"></path> |
| 1911 | - </g> |
| 1912 | - <g transform="translate(0, 248)" font-family="Helvetica" font-size="12pt" font-weight="bold" font-style="normal" data-name="ayllu-mail"> |
| 1913 | - <g transform="translate(8, 8)" fill="#33322E" text-align="center" data-name="ayllu-mail"> |
| 1914 | - <text x="234.0" y="14.1" stroke="none" text-anchor="middle" data-name="ayllu-mail">ayllu-mail</text> |
| 1915 | - |
| 1916 | - </g> |
| 1917 | - </g> |
| 1918 | - <g transform="translate(0, 280)" font-family="Helvetica" font-size="12pt" font-weight="normal" font-style="normal" data-name="ayllu-mail"> |
| 1919 | - <g transform="translate(8, 8)" fill="#33322E" data-name="ayllu-mail"> |
| 1920 | - <g transform="translate(20, 20)" data-name="ayllu-mail"> |
| 1921 | - <g data-name="tarpc-server"> |
| 1922 | - <g fill="#fdf6e3" stroke="#33322E" data-name="tarpc-server"> |
| 1923 | - <rect x="0.0" y="8.0" height="32.0" width="109.0" data-name="tarpc-server"></rect> |
| 1924 | - </g> |
| 1925 | - <g transform="translate(0, 8)" font-family="Helvetica" font-size="12pt" font-weight="bold" font-style="normal" data-name="tarpc-server"> |
| 1926 | - <g transform="translate(8, 8)" fill="#33322E" text-align="center" data-name="tarpc-server"> |
| 1927 | - <text x="46.5" y="14.1" stroke="none" text-anchor="middle" data-name="tarpc-server">tarpc-server</text> |
| 1928 | - |
| 1929 | - </g> |
| 1930 | - </g> |
| 1931 | - </g> |
| 1932 | - <g data-name="mailpot"> |
| 1933 | - <g fill="#fdf6e3" stroke="#33322E" data-name="mailpot"> |
| 1934 | - <rect x="149.0" y="8.0" height="32.0" width="73.0" data-name="mailpot"></rect> |
| 1935 | - </g> |
| 1936 | - <g transform="translate(149, 8)" font-family="Helvetica" font-size="12pt" font-weight="bold" font-style="normal" data-name="mailpot"> |
| 1937 | - <g transform="translate(8, 8)" fill="#33322E" text-align="center" data-name="mailpot"> |
| 1938 | - <text x="28.5" y="14.1" stroke="none" text-anchor="middle" data-name="mailpot">mailpot</text> |
| 1939 | - |
| 1940 | - </g> |
| 1941 | - </g> |
| 1942 | - </g> |
| 1943 | - <g data-name="postfix"> |
| 1944 | - <g fill="#fdf6e3" stroke="#33322E" data-name="postfix"> |
| 1945 | - <rect x="262.0" y="8.0" height="32.0" width="68.0" data-name="postfix"></rect> |
| 1946 | - </g> |
| 1947 | - <g transform="translate(262, 8)" font-family="Helvetica" font-size="12pt" font-weight="bold" font-style="normal" data-name="postfix"> |
| 1948 | - <g transform="translate(8, 8)" fill="#33322E" text-align="center" data-name="postfix"> |
| 1949 | - <text x="26.0" y="14.1" stroke="none" text-anchor="middle" data-name="postfix">postfix</text> |
| 1950 | - |
| 1951 | - </g> |
| 1952 | - </g> |
| 1953 | - </g> |
| 1954 | - <g data-name="sqlite"> |
| 1955 | - <g fill="#fdf6e3" stroke="#33322E" data-name="sqlite"> |
| 1956 | - <rect x="370.0" y="8.0" height="32.0" width="58.0" stroke="none" data-name="sqlite"></rect> |
| 1957 | - <path d="M370.0 8.0 L370.0 40.0" fill="none" data-name="sqlite"></path> |
| 1958 | - <path d="M428.0 8.0 L428.0 40.0" fill="none" data-name="sqlite"></path> |
| 1959 | - <ellipse cx="399.0" cy="8.0" rx="29.0" ry="6.0" data-name="sqlite"></ellipse> |
| 1960 | - <path d="M428.0 40.0 L428.0 40.3 L427.9 40.6 L427.7 40.9 L427.4 41.2 L427.1 41.5 L426.7 41.8 L426.3 42.1 L425.7 42.3 L425.1 42.6 L424.5 42.9 L423.7 43.1 L423.0 43.4 L422.1 43.6 L421.2 43.9 L420.3 44.1 L419.2 44.3 L418.2 44.5 L417.1 44.7 L415.9 44.9 L414.7 45.0 L413.5 45.2 L412.2 45.3 L410.9 45.5 L409.6 45.6 L408.2 45.7 L406.9 45.8 L405.5 45.8 L404.0 45.9 L402.6 46.0 L401.2 46.0 L399.7 46.0 L398.3 46.0 L396.8 46.0 L395.4 46.0 L394.0 45.9 L392.5 45.8 L391.1 45.8 L389.8 45.7 L388.4 45.6 L387.1 45.5 L385.8 45.3 L384.5 45.2 L383.3 45.0 L382.1 44.9 L380.9 44.7 L379.8 44.5 L378.8 44.3 L377.7 44.1 L376.8 43.9 L375.9 43.6 L375.0 43.4 L374.3 43.1 L373.5 42.9 L372.9 42.6 L372.3 42.3 L371.7 42.1 L371.3 41.8 L370.9 41.5 L370.6 41.2 L370.3 40.9 L370.1 40.6 L370.0 40.3 L370.0 40.0" data-name="sqlite"></path> |
| 1961 | - </g> |
| 1962 | - <g transform="translate(370, 12)" font-family="Helvetica" font-size="12pt" font-weight="bold" font-style="normal" data-name="sqlite"> |
| 1963 | - <g transform="translate(8, 8)" fill="#33322E" text-align="center" data-name="sqlite"> |
| 1964 | - <text x="21.0" y="14.1" stroke="none" text-anchor="middle" data-name="sqlite">sqlite</text> |
| 1965 | - |
| 1966 | - </g> |
| 1967 | - </g> |
| 1968 | - </g> |
| 1969 | - </g> |
| 1970 | - </g> |
| 1971 | - </g> |
| 1972 | - </g> |
| 1973 | - <g data-name="contributor-2"> |
| 1974 | - <g fill="#eee8d5" stroke="#33322E" data-name="contributor-2"> |
| 1975 | - <circle r="4.0" cx="747.8" cy="500.0" data-name="contributor-2"></circle> |
| 1976 | - <path d="M747.8 504.0 L747.8 512.0" fill="none" data-name="contributor-2"></path> |
| 1977 | - <path d="M743.8 508.0 L751.8 508.0" fill="none" data-name="contributor-2"></path> |
| 1978 | - <path d="M743.8 516.0 L747.8 512.0 L751.8 516.0" fill="none" data-name="contributor-2"></path> |
| 1979 | - </g> |
| 1980 | - <g transform="translate(690.25, 512)" font-family="Helvetica" font-size="12pt" font-weight="normal" font-style="normal" data-name="contributor-2"> |
| 1981 | - <g transform="translate(8, 8)" fill="#33322E" text-align="center" data-name="contributor-2"> |
| 1982 | - <text x="49.5" y="14.1" stroke="none" text-anchor="middle" data-name="contributor-2">contributor-2</text> |
| 1983 | - |
| 1984 | - </g> |
| 1985 | - </g> |
| 1986 | - </g> |
| 1987 | - <g data-name="ayllu-xmpp"> |
| 1988 | - <g fill="#eee8d5" stroke="#33322E" data-name="ayllu-xmpp"> |
| 1989 | - <rect x="524.0" y="248.0" height="136.0" width="453.0" data-name="ayllu-xmpp"></rect> |
| 1990 | - <path d="M524.0 280.0 L977.0 280.0" fill="none" data-name="ayllu-xmpp"></path> |
| 1991 | - </g> |
| 1992 | - <g transform="translate(524, 248)" font-family="Helvetica" font-size="12pt" font-weight="bold" font-style="normal" data-name="ayllu-xmpp"> |
| 1993 | - <g transform="translate(8, 8)" fill="#33322E" text-align="center" data-name="ayllu-xmpp"> |
| 1994 | - <text x="218.5" y="14.1" stroke="none" text-anchor="middle" data-name="ayllu-xmpp">ayllu-xmpp</text> |
| 1995 | - |
| 1996 | - </g> |
| 1997 | - </g> |
| 1998 | - <g transform="translate(524, 280)" font-family="Helvetica" font-size="12pt" font-weight="normal" font-style="normal" data-name="ayllu-xmpp"> |
| 1999 | - <g transform="translate(8, 8)" fill="#33322E" data-name="ayllu-xmpp"> |
| 2000 | - <g transform="translate(20, 20)" data-name="ayllu-xmpp"> |
| 2001 | - <g data-name="tarpc-server"> |
| 2002 | - <g fill="#fdf6e3" stroke="#33322E" data-name="tarpc-server"> |
| 2003 | - <rect x="0.0" y="8.0" height="32.0" width="109.0" data-name="tarpc-server"></rect> |
| 2004 | - </g> |
| 2005 | - <g transform="translate(0, 8)" font-family="Helvetica" font-size="12pt" font-weight="bold" font-style="normal" data-name="tarpc-server"> |
| 2006 | - <g transform="translate(8, 8)" fill="#33322E" text-align="center" data-name="tarpc-server"> |
| 2007 | - <text x="46.5" y="14.1" stroke="none" text-anchor="middle" data-name="tarpc-server">tarpc-server</text> |
| 2008 | - |
| 2009 | - </g> |
| 2010 | - </g> |
| 2011 | - </g> |
| 2012 | - <g data-name="chat interface/bot"> |
| 2013 | - <g fill="#fdf6e3" stroke="#33322E" data-name="chat interface/bot"> |
| 2014 | - <rect x="149.0" y="8.0" height="32.0" width="150.0" data-name="chat interface/bot"></rect> |
| 2015 | - </g> |
| 2016 | - <g transform="translate(149, 8)" font-family="Helvetica" font-size="12pt" font-weight="bold" font-style="normal" data-name="chat interface/bot"> |
| 2017 | - <g transform="translate(8, 8)" fill="#33322E" text-align="center" data-name="chat interface/bot"> |
| 2018 | - <text x="67.0" y="14.1" stroke="none" text-anchor="middle" data-name="chat interface/bot">chat interface/bot</text> |
| 2019 | - |
| 2020 | - </g> |
| 2021 | - </g> |
| 2022 | - </g> |
| 2023 | - <g data-name="sqlite"> |
| 2024 | - <g fill="#fdf6e3" stroke="#33322E" data-name="sqlite"> |
| 2025 | - <rect x="339.0" y="8.0" height="32.0" width="58.0" stroke="none" data-name="sqlite"></rect> |
| 2026 | - <path d="M339.0 8.0 L339.0 40.0" fill="none" data-name="sqlite"></path> |
| 2027 | - <path d="M397.0 8.0 L397.0 40.0" fill="none" data-name="sqlite"></path> |
| 2028 | - <ellipse cx="368.0" cy="8.0" rx="29.0" ry="6.0" data-name="sqlite"></ellipse> |
| 2029 | - <path d="M397.0 40.0 L397.0 40.3 L396.9 40.6 L396.7 40.9 L396.4 41.2 L396.1 41.5 L395.7 41.8 L395.3 42.1 L394.7 42.3 L394.1 42.6 L393.5 42.9 L392.7 43.1 L392.0 43.4 L391.1 43.6 L390.2 43.9 L389.3 44.1 L388.2 44.3 L387.2 44.5 L386.1 44.7 L384.9 44.9 L383.7 45.0 L382.5 45.2 L381.2 45.3 L379.9 45.5 L378.6 45.6 L377.2 45.7 L375.9 45.8 L374.5 45.8 L373.0 45.9 L371.6 46.0 L370.2 46.0 L368.7 46.0 L367.3 46.0 L365.8 46.0 L364.4 46.0 L363.0 45.9 L361.5 45.8 L360.1 45.8 L358.8 45.7 L357.4 45.6 L356.1 45.5 L354.8 45.3 L353.5 45.2 L352.3 45.0 L351.1 44.9 L349.9 44.7 L348.8 44.5 L347.8 44.3 L346.7 44.1 L345.8 43.9 L344.9 43.6 L344.0 43.4 L343.3 43.1 L342.5 42.9 L341.9 42.6 L341.3 42.3 L340.7 42.1 L340.3 41.8 L339.9 41.5 L339.6 41.2 L339.3 40.9 L339.1 40.6 L339.0 40.3 L339.0 40.0" data-name="sqlite"></path> |
| 2030 | - </g> |
| 2031 | - <g transform="translate(339, 12)" font-family="Helvetica" font-size="12pt" font-weight="bold" font-style="normal" data-name="sqlite"> |
| 2032 | - <g transform="translate(8, 8)" fill="#33322E" text-align="center" data-name="sqlite"> |
| 2033 | - <text x="21.0" y="14.1" stroke="none" text-anchor="middle" data-name="sqlite">sqlite</text> |
| 2034 | - |
| 2035 | - </g> |
| 2036 | - </g> |
| 2037 | - </g> |
| 2038 | - </g> |
| 2039 | - </g> |
| 2040 | - </g> |
| 2041 | - </g> |
| 2042 | - <g data-name="ayllu-build"> |
| 2043 | - <g fill="#eee8d5" stroke="#33322E" data-name="ayllu-build"> |
| 2044 | - <rect x="1037.3" y="248.0" height="136.0" width="263.0" data-name="ayllu-build"></rect> |
| 2045 | - <path d="M1037.3 280.0 L1300.3 280.0" fill="none" data-name="ayllu-build"></path> |
| 2046 | - </g> |
| 2047 | - <g transform="translate(1037.25, 248)" font-family="Helvetica" font-size="12pt" font-weight="bold" font-style="normal" data-name="ayllu-build"> |
| 2048 | - <g transform="translate(8, 8)" fill="#33322E" text-align="center" data-name="ayllu-build"> |
| 2049 | - <text x="123.5" y="14.1" stroke="none" text-anchor="middle" data-name="ayllu-build">ayllu-build</text> |
| 2050 | - |
| 2051 | - </g> |
| 2052 | - </g> |
| 2053 | - <g transform="translate(1037.25, 280)" font-family="Helvetica" font-size="12pt" font-weight="normal" font-style="normal" data-name="ayllu-build"> |
| 2054 | - <g transform="translate(8, 8)" fill="#33322E" data-name="ayllu-build"> |
| 2055 | - <g transform="translate(20, 20)" data-name="ayllu-build"> |
| 2056 | - <g data-name="tarpc-server"> |
| 2057 | - <g fill="#fdf6e3" stroke="#33322E" data-name="tarpc-server"> |
| 2058 | - <rect x="0.0" y="8.0" height="32.0" width="109.0" data-name="tarpc-server"></rect> |
| 2059 | - </g> |
| 2060 | - <g transform="translate(0, 8)" font-family="Helvetica" font-size="12pt" font-weight="bold" font-style="normal" data-name="tarpc-server"> |
| 2061 | - <g transform="translate(8, 8)" fill="#33322E" text-align="center" data-name="tarpc-server"> |
| 2062 | - <text x="46.5" y="14.1" stroke="none" text-anchor="middle" data-name="tarpc-server">tarpc-server</text> |
| 2063 | - |
| 2064 | - </g> |
| 2065 | - </g> |
| 2066 | - </g> |
| 2067 | - <g data-name="sqlite"> |
| 2068 | - <g fill="#fdf6e3" stroke="#33322E" data-name="sqlite"> |
| 2069 | - <rect x="149.0" y="8.0" height="32.0" width="58.0" stroke="none" data-name="sqlite"></rect> |
| 2070 | - <path d="M149.0 8.0 L149.0 40.0" fill="none" data-name="sqlite"></path> |
| 2071 | - <path d="M207.0 8.0 L207.0 40.0" fill="none" data-name="sqlite"></path> |
| 2072 | - <ellipse cx="178.0" cy="8.0" rx="29.0" ry="6.0" data-name="sqlite"></ellipse> |
| 2073 | - <path d="M207.0 40.0 L207.0 40.3 L206.9 40.6 L206.7 40.9 L206.4 41.2 L206.1 41.5 L205.7 41.8 L205.3 42.1 L204.7 42.3 L204.1 42.6 L203.5 42.9 L202.7 43.1 L202.0 43.4 L201.1 43.6 L200.2 43.9 L199.3 44.1 L198.2 44.3 L197.2 44.5 L196.1 44.7 L194.9 44.9 L193.7 45.0 L192.5 45.2 L191.2 45.3 L189.9 45.5 L188.6 45.6 L187.2 45.7 L185.9 45.8 L184.5 45.8 L183.0 45.9 L181.6 46.0 L180.2 46.0 L178.7 46.0 L177.3 46.0 L175.8 46.0 L174.4 46.0 L173.0 45.9 L171.5 45.8 L170.1 45.8 L168.8 45.7 L167.4 45.6 L166.1 45.5 L164.8 45.3 L163.5 45.2 L162.3 45.0 L161.1 44.9 L159.9 44.7 L158.8 44.5 L157.8 44.3 L156.7 44.1 L155.8 43.9 L154.9 43.6 L154.0 43.4 L153.3 43.1 L152.5 42.9 L151.9 42.6 L151.3 42.3 L150.7 42.1 L150.3 41.8 L149.9 41.5 L149.6 41.2 L149.3 40.9 L149.1 40.6 L149.0 40.3 L149.0 40.0" data-name="sqlite"></path> |
| 2074 | - </g> |
| 2075 | - <g transform="translate(149, 12)" font-family="Helvetica" font-size="12pt" font-weight="bold" font-style="normal" data-name="sqlite"> |
| 2076 | - <g transform="translate(8, 8)" fill="#33322E" text-align="center" data-name="sqlite"> |
| 2077 | - <text x="21.0" y="14.1" stroke="none" text-anchor="middle" data-name="sqlite">sqlite</text> |
| 2078 | - |
| 2079 | - </g> |
| 2080 | - </g> |
| 2081 | - </g> |
| 2082 | - </g> |
| 2083 | - </g> |
| 2084 | - </g> |
| 2085 | - </g> |
| 2086 | - <g data-name="ayllu-shell"> |
| 2087 | - <g fill="#eee8d5" stroke="#33322E" data-name="ayllu-shell"> |
| 2088 | - <rect x="1481.0" y="300.0" height="32.0" width="94.0" data-name="ayllu-shell"></rect> |
| 2089 | - </g> |
| 2090 | - <g transform="translate(1481, 300)" font-family="Helvetica" font-size="12pt" font-weight="bold" font-style="normal" data-name="ayllu-shell"> |
| 2091 | - <g transform="translate(8, 8)" fill="#33322E" text-align="center" data-name="ayllu-shell"> |
| 2092 | - <text x="39.0" y="14.1" stroke="none" text-anchor="middle" data-name="ayllu-shell">ayllu-shell</text> |
| 2093 | - |
| 2094 | - </g> |
| 2095 | - </g> |
| 2096 | - </g> |
| 2097 | - <g data-name="contributor"> |
| 2098 | - <g fill="#eee8d5" stroke="#33322E" data-name="contributor"> |
| 2099 | - <circle r="4.0" cx="1528.0" cy="500.0" data-name="contributor"></circle> |
| 2100 | - <path d="M1528.0 504.0 L1528.0 512.0" fill="none" data-name="contributor"></path> |
| 2101 | - <path d="M1524.0 508.0 L1532.0 508.0" fill="none" data-name="contributor"></path> |
| 2102 | - <path d="M1524.0 516.0 L1528.0 512.0 L1532.0 516.0" fill="none" data-name="contributor"></path> |
| 2103 | - </g> |
| 2104 | - <g transform="translate(1477.5, 512)" font-family="Helvetica" font-size="12pt" font-weight="normal" font-style="normal" data-name="contributor"> |
| 2105 | - <g transform="translate(8, 8)" fill="#33322E" text-align="center" data-name="contributor"> |
| 2106 | - <text x="42.5" y="14.1" stroke="none" text-anchor="middle" data-name="contributor">contributor</text> |
| 2107 | - |
| 2108 | - </g> |
| 2109 | - </g> |
| 2110 | - </g> |
| 2111 | - <g data-name="ayllu-cli"> |
| 2112 | - <g fill="#eee8d5" stroke="#33322E" data-name="ayllu-cli"> |
| 2113 | - <rect x="1615.0" y="300.0" height="32.0" width="75.0" data-name="ayllu-cli"></rect> |
| 2114 | - </g> |
| 2115 | - <g transform="translate(1615, 300)" font-family="Helvetica" font-size="12pt" font-weight="bold" font-style="normal" data-name="ayllu-cli"> |
| 2116 | - <g transform="translate(8, 8)" fill="#33322E" text-align="center" data-name="ayllu-cli"> |
| 2117 | - <text x="29.5" y="14.1" stroke="none" text-anchor="middle" data-name="ayllu-cli">ayllu-cli</text> |
| 2118 | - |
| 2119 | - </g> |
| 2120 | - </g> |
| 2121 | - </g> |
| 2122 | - <g data-name="admin"> |
| 2123 | - <g fill="#eee8d5" stroke="#33322E" data-name="admin"> |
| 2124 | - <circle r="4.0" cx="1652.5" cy="500.0" data-name="admin"></circle> |
| 2125 | - <path d="M1652.5 504.0 L1652.5 512.0" fill="none" data-name="admin"></path> |
| 2126 | - <path d="M1648.5 508.0 L1656.5 508.0" fill="none" data-name="admin"></path> |
| 2127 | - <path d="M1648.5 516.0 L1652.5 512.0 L1656.5 516.0" fill="none" data-name="admin"></path> |
| 2128 | - </g> |
| 2129 | - <g transform="translate(1621, 512)" font-family="Helvetica" font-size="12pt" font-weight="normal" font-style="normal" data-name="admin"> |
| 2130 | - <g transform="translate(8, 8)" fill="#33322E" text-align="center" data-name="admin"> |
| 2131 | - <text x="23.5" y="14.1" stroke="none" text-anchor="middle" data-name="admin">admin</text> |
| 2132 | - |
| 2133 | - </g> |
| 2134 | - </g> |
| 2135 | - </g> |
| 2136 | - <g data-name="ayllu-builder-1"> |
| 2137 | - <g fill="#eee8d5" stroke="#33322E" data-name="ayllu-builder-1"> |
| 2138 | - <rect x="846.5" y="424.0" height="184.0" width="173.0" data-name="ayllu-builder-1"></rect> |
| 2139 | - <path d="M846.5 456.0 L1019.5 456.0" fill="none" data-name="ayllu-builder-1"></path> |
| 2140 | - </g> |
| 2141 | - <g transform="translate(846.5, 424)" font-family="Helvetica" font-size="12pt" font-weight="bold" font-style="normal" data-name="ayllu-builder-1"> |
| 2142 | - <g transform="translate(8, 8)" fill="#33322E" text-align="center" data-name="ayllu-builder-1"> |
| 2143 | - <text x="78.5" y="14.1" stroke="none" text-anchor="middle" data-name="ayllu-builder-1">ayllu-builder-1</text> |
| 2144 | - |
| 2145 | - </g> |
| 2146 | - </g> |
| 2147 | - <g transform="translate(846.5, 456)" font-family="Helvetica" font-size="12pt" font-weight="normal" font-style="normal" data-name="ayllu-builder-1"> |
| 2148 | - <g transform="translate(8, 8)" fill="#33322E" data-name="ayllu-builder-1"> |
| 2149 | - <g transform="translate(20, 20)" data-name="ayllu-builder-1"> |
| 2150 | - <g data-name="qemu-x86_64"> |
| 2151 | - <g fill="#fdf6e3" stroke="#33322E" data-name="qemu-x86_64"> |
| 2152 | - <rect x="0.0" y="32.0" height="64.0" width="117.0" data-name="qemu-x86_64"></rect> |
| 2153 | - <path d="M0.0 32.0 L0.0 0.0 L113.1 0.0 L113.1 32.0 Z" data-name="qemu-x86_64"></path> |
| 2154 | - <path d="M0.0 32.0 L117.0 32.0" fill="none" data-name="qemu-x86_64"></path> |
| 2155 | - <path d="M0.0 64.0 L117.0 64.0" fill="none" data-name="qemu-x86_64"></path> |
| 2156 | - </g> |
| 2157 | - <g transform="translate(0, 0)" font-family="Helvetica" font-size="12pt" font-weight="normal" font-style="normal" data-name="qemu-x86_64"> |
| 2158 | - <g transform="translate(8, 8)" fill="#33322E" text-align="left" data-name="qemu-x86_64"> |
| 2159 | - <text x="0.0" y="14.1" stroke="none" data-name="qemu-x86_64">qemu-x86_64</text> |
| 2160 | - |
| 2161 | - </g> |
| 2162 | - </g> |
| 2163 | - <g transform="translate(0, 32)" font-family="Helvetica" font-size="12pt" font-weight="normal" font-style="normal" data-name="qemu-x86_64"> |
| 2164 | - <g transform="translate(8, 8)" fill="#33322E" text-align="left" data-name="qemu-x86_64"> |
| 2165 | - <text x="0.0" y="14.1" stroke="none" data-name="qemu-x86_64">tarpc-server</text> |
| 2166 | - |
| 2167 | - </g> |
| 2168 | - </g> |
| 2169 | - <g transform="translate(0, 64)" font-family="Helvetica" font-size="12pt" font-weight="normal" font-style="normal" data-name="qemu-x86_64"> |
| 2170 | - <g transform="translate(8, 8)" fill="#33322E" text-align="left" data-name="qemu-x86_64"> |
| 2171 | - <text x="0.0" y="14.1" stroke="none" data-name="qemu-x86_64">executor</text> |
| 2172 | - |
| 2173 | - </g> |
| 2174 | - </g> |
| 2175 | - </g> |
| 2176 | - </g> |
| 2177 | - </g> |
| 2178 | - </g> |
| 2179 | - </g> |
| 2180 | - <g data-name="ayllu-builder-2"> |
| 2181 | - <g fill="#eee8d5" stroke="#33322E" data-name="ayllu-builder-2"> |
| 2182 | - <rect x="1059.5" y="424.0" height="184.0" width="181.0" data-name="ayllu-builder-2"></rect> |
| 2183 | - <path d="M1059.5 456.0 L1240.5 456.0" fill="none" data-name="ayllu-builder-2"></path> |
| 2184 | - </g> |
| 2185 | - <g transform="translate(1059.5, 424)" font-family="Helvetica" font-size="12pt" font-weight="bold" font-style="normal" data-name="ayllu-builder-2"> |
| 2186 | - <g transform="translate(8, 8)" fill="#33322E" text-align="center" data-name="ayllu-builder-2"> |
| 2187 | - <text x="82.5" y="14.1" stroke="none" text-anchor="middle" data-name="ayllu-builder-2">ayllu-builder-2</text> |
| 2188 | - |
| 2189 | - </g> |
| 2190 | - </g> |
| 2191 | - <g transform="translate(1059.5, 456)" font-family="Helvetica" font-size="12pt" font-weight="normal" font-style="normal" data-name="ayllu-builder-2"> |
| 2192 | - <g transform="translate(8, 8)" fill="#33322E" data-name="ayllu-builder-2"> |
| 2193 | - <g transform="translate(20, 20)" data-name="ayllu-builder-2"> |
| 2194 | - <g data-name="qemu-aarch64"> |
| 2195 | - <g fill="#fdf6e3" stroke="#33322E" data-name="qemu-aarch64"> |
| 2196 | - <rect x="0.0" y="32.0" height="64.0" width="125.0" data-name="qemu-aarch64"></rect> |
| 2197 | - <path d="M0.0 32.0 L0.0 0.0 L118.9 0.0 L118.9 32.0 Z" data-name="qemu-aarch64"></path> |
| 2198 | - <path d="M0.0 32.0 L125.0 32.0" fill="none" data-name="qemu-aarch64"></path> |
| 2199 | - <path d="M0.0 64.0 L125.0 64.0" fill="none" data-name="qemu-aarch64"></path> |
| 2200 | - </g> |
| 2201 | - <g transform="translate(0, 0)" font-family="Helvetica" font-size="12pt" font-weight="normal" font-style="normal" data-name="qemu-aarch64"> |
| 2202 | - <g transform="translate(8, 8)" fill="#33322E" text-align="left" data-name="qemu-aarch64"> |
| 2203 | - <text x="0.0" y="14.1" stroke="none" data-name="qemu-aarch64">qemu-aarch64</text> |
| 2204 | - |
| 2205 | - </g> |
| 2206 | - </g> |
| 2207 | - <g transform="translate(0, 32)" font-family="Helvetica" font-size="12pt" font-weight="normal" font-style="normal" data-name="qemu-aarch64"> |
| 2208 | - <g transform="translate(8, 8)" fill="#33322E" text-align="left" data-name="qemu-aarch64"> |
| 2209 | - <text x="0.0" y="14.1" stroke="none" data-name="qemu-aarch64">tarpc-server</text> |
| 2210 | - |
| 2211 | - </g> |
| 2212 | - </g> |
| 2213 | - <g transform="translate(0, 64)" font-family="Helvetica" font-size="12pt" font-weight="normal" font-style="normal" data-name="qemu-aarch64"> |
| 2214 | - <g transform="translate(8, 8)" fill="#33322E" text-align="left" data-name="qemu-aarch64"> |
| 2215 | - <text x="0.0" y="14.1" stroke="none" data-name="qemu-aarch64">exectuor</text> |
| 2216 | - |
| 2217 | - </g> |
| 2218 | - </g> |
| 2219 | - </g> |
| 2220 | - </g> |
| 2221 | - </g> |
| 2222 | - </g> |
| 2223 | - </g> |
| 2224 | - <g data-name="ayllu-builder-n"> |
| 2225 | - <g fill="#eee8d5" stroke="#33322E" data-name="ayllu-builder-n"> |
| 2226 | - <rect x="1280.5" y="424.0" height="184.0" width="157.0" data-name="ayllu-builder-n"></rect> |
| 2227 | - <path d="M1280.5 456.0 L1437.5 456.0" fill="none" data-name="ayllu-builder-n"></path> |
| 2228 | - </g> |
| 2229 | - <g transform="translate(1280.5, 424)" font-family="Helvetica" font-size="12pt" font-weight="bold" font-style="normal" data-name="ayllu-builder-n"> |
| 2230 | - <g transform="translate(8, 8)" fill="#33322E" text-align="center" data-name="ayllu-builder-n"> |
| 2231 | - <text x="70.5" y="14.1" stroke="none" text-anchor="middle" data-name="ayllu-builder-n">ayllu-builder-n</text> |
| 2232 | - |
| 2233 | - </g> |
| 2234 | - </g> |
| 2235 | - <g transform="translate(1280.5, 456)" font-family="Helvetica" font-size="12pt" font-weight="normal" font-style="normal" data-name="ayllu-builder-n"> |
| 2236 | - <g transform="translate(8, 8)" fill="#33322E" data-name="ayllu-builder-n"> |
| 2237 | - <g transform="translate(20, 20)" data-name="ayllu-builder-n"> |
| 2238 | - <g data-name="lxc"> |
| 2239 | - <g fill="#fdf6e3" stroke="#33322E" data-name="lxc"> |
| 2240 | - <rect x="0.0" y="32.0" height="64.0" width="101.0" data-name="lxc"></rect> |
| 2241 | - <path d="M0.0 32.0 L0.0 0.0 L35.2 0.0 L35.2 32.0 Z" data-name="lxc"></path> |
| 2242 | - <path d="M0.0 32.0 L101.0 32.0" fill="none" data-name="lxc"></path> |
| 2243 | - <path d="M0.0 64.0 L101.0 64.0" fill="none" data-name="lxc"></path> |
| 2244 | - </g> |
| 2245 | - <g transform="translate(0, 0)" font-family="Helvetica" font-size="12pt" font-weight="normal" font-style="normal" data-name="lxc"> |
| 2246 | - <g transform="translate(8, 8)" fill="#33322E" text-align="left" data-name="lxc"> |
| 2247 | - <text x="0.0" y="14.1" stroke="none" data-name="lxc">lxc</text> |
| 2248 | - |
| 2249 | - </g> |
| 2250 | - </g> |
| 2251 | - <g transform="translate(0, 32)" font-family="Helvetica" font-size="12pt" font-weight="normal" font-style="normal" data-name="lxc"> |
| 2252 | - <g transform="translate(8, 8)" fill="#33322E" text-align="left" data-name="lxc"> |
| 2253 | - <text x="0.0" y="14.1" stroke="none" data-name="lxc">tarpc-server</text> |
| 2254 | - |
| 2255 | - </g> |
| 2256 | - </g> |
| 2257 | - <g transform="translate(0, 64)" font-family="Helvetica" font-size="12pt" font-weight="normal" font-style="normal" data-name="lxc"> |
| 2258 | - <g transform="translate(8, 8)" fill="#33322E" text-align="left" data-name="lxc"> |
| 2259 | - <text x="0.0" y="14.1" stroke="none" data-name="lxc">executor</text> |
| 2260 | - |
| 2261 | - </g> |
| 2262 | - </g> |
| 2263 | - </g> |
| 2264 | - </g> |
| 2265 | - </g> |
| 2266 | - </g> |
| 2267 | - </g> |
| 2268 | - </g> |
| 2269 | - </g> |
| 2270 | - </g> |
| 2271 | - </g> |
| 2272 | - </svg> |
| 2273 | diff --git a/www/static/assets/ayllu_logo.png b/www/static/assets/ayllu_logo.png |
| 2274 | deleted file mode 100644 |
| 2275 | index caf4865..0000000 |
| 2276 | Binary files a/www/static/assets/ayllu_logo.png and /dev/null differ |
| 2277 | diff --git a/www/static/assets/ayllu_logo.svg b/www/static/assets/ayllu_logo.svg |
| 2278 | deleted file mode 100644 |
| 2279 | index d1db83a..0000000 |
| 2280 | --- a/www/static/assets/ayllu_logo.svg |
| 2281 | +++ /dev/null |
| 2282 | @@ -1,101 +0,0 @@ |
| 2283 | - <?xml version="1.0" encoding="UTF-8" standalone="no"?> |
| 2284 | - <svg xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:cc="http://creativecommons.org/ns#" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" inkscape:version="1.0 (1.0+r73+1)" sodipodi:docname="textil-inca-pattern-3a.svg" version="1.1" viewBox="0 0 902 702"> |
| 2285 | - <metadata> |
| 2286 | - <rdf:RDF> |
| 2287 | - <cc:Work rdf:about=""> |
| 2288 | - <dc:format>image/svg+xml</dc:format> |
| 2289 | - <dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/> |
| 2290 | - </cc:Work> |
| 2291 | - </rdf:RDF> |
| 2292 | - </metadata> |
| 2293 | - <sodipodi:namedview inkscape:current-layer="svg159" inkscape:window-maximized="1" inkscape:window-y="27" inkscape:window-x="67" inkscape:cy="467.33333" inkscape:cx="600.66667" inkscape:zoom="0.75746799" showgrid="false" id="namedview161" inkscape:window-height="1025" inkscape:window-width="1853" inkscape:pageshadow="2" inkscape:pageopacity="0" guidetolerance="10" gridtolerance="10" objecttolerance="10" borderopacity="1" bordercolor="#666666" pagecolor="#ffffff"/> |
| 2294 | - <g fill-rule="evenodd" stroke-width="2" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="10" stroke-opacity="1"> |
| 2295 | - <g id="brown" fill="#5c451c" stroke="#5c451c"> |
| 2296 | - <path style="" d="M 1,1 H 901 V 701 H 1 Z m 0,0"/> |
| 2297 | - </g> |
| 2298 | - <g id="orange" fill="#ffa300" stroke="#ffa300"> |
| 2299 | - <path d="m 641,341 h 20 v -20 h 20 v -20 h 20 v -20 h 20 v 20 h 20 v 20 h 20 v 20 h 20 v 20 h -20 v 20 h -20 v 20 h -20 v 20 h -20 v -20 h -20 v -20 h -20 v -20 h -20 z m 0,0"/> |
| 2300 | - <path d="m 121,341 h 20 v -20 h 20 v -20 h 20 v -20 h 20 v 20 h 20 v 20 h 20 v 20 h 20 v 20 h -20 v 20 h -20 v 20 h -20 v 20 h -20 v -20 h -20 v -20 h -20 v -20 h -20 z m 0,0"/> |
| 2301 | - <path d="m 401,341 h 20 v -20 h 20 v 20 h 20 v 20 h -20 v 20 h -20 v -20 h -20 z m 0,0"/> |
| 2302 | - <path d="m 441,341 h 20 v -20 h 20 v 20 h 20 v 20 h -20 v 20 h -20 v -20 h -20 z m 0,0"/> |
| 2303 | - </g> |
| 2304 | - <g id="turquoise" fill="#358794" stroke="#358794"> |
| 2305 | - <path d="m 701,221 h 20 v 20 h 20 v 20 h 20 v 20 h 20 v 20 h 20 v 20 h 20 v 20 h 20 v 20 h -40 v -20 h -20 v -20 h -20 v -20 h -20 v -20 h -20 v -20 h -20 z m 0,0"/> |
| 2306 | - <path d="m 701,481 h 20 v -20 h 20 v -20 h 20 v -20 h 20 v -20 h 20 v -20 h 20 v -20 h 20 v -20 h -40 v 20 h -20 v 20 h -20 v 20 h -20 v 20 h -20 v 20 h -20 z m 0,0"/> |
| 2307 | - <path d="m 621,361 h 20 v 20 h 20 v 20 h 20 v 20 h 20 v 20 h 20 v 40 h -20 v -20 h -20 v -20 h -20 v -20 h -20 v -20 h -20 z m 0,0"/> |
| 2308 | - <path d="m 621,341 h 20 v -20 h 20 v -20 h 20 v -20 h 20 v -20 h 20 v -40 h -20 v 20 h -20 v 20 h -20 v 20 h -20 v 20 h -20 z m 0,0"/> |
| 2309 | - <path d="m 201,221 h -20 v 20 h -20 v 20 h -20 v 20 h -20 v 20 h -20 v 20 H 81 v 20 H 61 v 20 h 40 v -20 h 20 v -20 h 20 v -20 h 20 v -20 h 20 v -20 h 20 z m 0,0"/> |
| 2310 | - <path d="M 201,481 H 181 V 461 H 161 V 441 H 141 V 421 H 121 V 401 H 101 V 381 H 81 V 361 H 61 v -20 h 40 v 20 h 20 v 20 h 20 v 20 h 20 v 20 h 20 v 20 h 20 z m 0,0"/> |
| 2311 | - <path d="m 281,361 h -20 v 20 h -20 v 20 h -20 v 20 h -20 v 20 h -20 v 40 h 20 v -20 h 20 v -20 h 20 v -20 h 20 v -20 h 20 z m 0,0"/> |
| 2312 | - <path d="m 281,341 h -20 v -20 h -20 v -20 h -20 v -20 h -20 v -20 h -20 v -40 h 20 v 20 h 20 v 20 h 20 v 20 h 20 v 20 h 20 z m 0,0"/> |
| 2313 | - <path d="m 441,121 h 20 v 20 h 20 v 20 h 20 v 20 h 20 v 20 h 20 v 20 h 20 v 20 h 20 v 20 h 20 v 20 h 20 v 20 h 20 v 40 h -20 v -20 h -20 v -20 h -20 v -20 h -20 v -20 h -20 v -20 h -20 v -20 h -20 v -20 h -20 v -20 h -20 v -20 h -20 z m 0,0"/> |
| 2314 | - <path d="m 261,361 h 20 v 20 h 20 v 20 h 20 v 20 h 20 v 20 h 20 v 20 h 20 v 20 h 20 v 20 h 20 v 20 h 20 v 20 h 20 v 40 h -20 v -20 h -20 v -20 h -20 v -20 h -20 v -20 h -20 v -20 h -20 v -20 h -20 v -20 h -20 v -20 h -20 v -20 h -20 z m 0,0"/> |
| 2315 | - <path d="m 461,121 h -20 v 20 h -20 v 20 h -20 v 20 h -20 v 20 h -20 v 20 h -20 v 20 h -20 v 20 h -20 v 20 h -20 v 20 h -20 v 40 h 20 v -20 h 20 v -20 h 20 v -20 h 20 v -20 h 20 v -20 h 20 v -20 h 20 v -20 h 20 v -20 h 20 v -20 h 20 z m 0,0"/> |
| 2316 | - <path d="m 641,361 h -20 v 20 h -20 v 20 h -20 v 20 h -20 v 20 h -20 v 20 h -20 v 20 h -20 v 20 h -20 v 20 h -20 v 20 h -20 v 40 h 20 v -20 h 20 v -20 h 20 v -20 h 20 v -20 h 20 v -20 h 20 v -20 h 20 v -20 h 20 v -20 h 20 v -20 h 20 z m 0,0"/> |
| 2317 | - </g> |
| 2318 | - <g id="white" fill="#ffffff" stroke="#ffffff"> |
| 2319 | - <path d="m 701,161 h 20 v 20 h 20 v 20 h 20 v 20 h 20 v 20 h 20 v 20 h 20 v 20 h 20 v 20 h 20 v 20 h 20 v 20 h 20 v 20 h -40 v -20 h -20 v -20 h -20 v -20 h -20 v -20 h -20 v -20 h -20 v -20 h -20 v -20 h -20 v -20 h -20 z m 0,0"/> |
| 2320 | - <path d="m 701,541 h 20 v -20 h 20 v -20 h 20 v -20 h 20 v -20 h 20 v -20 h 20 v -20 h 20 v -20 h 20 v -20 h 20 v -20 h 20 v -20 h -40 v 20 h -20 v 20 h -20 v 20 h -20 v 20 h -20 v 20 h -20 v 20 h -20 v 20 h -20 v 20 h -20 z m 0,0"/> |
| 2321 | - <path d="m 441,61 h 20 v 20 h 20 v 20 h 20 v 20 h 20 v 20 h 20 v 20 h 20 v 20 h 20 v 20 h 20 v 20 h 20 v 20 h 20 v 40 h -20 v -20 h -20 v -20 h -20 v -20 h -20 v -20 h -20 v -20 h -20 v -20 h -20 v -20 h -20 v -20 h -20 v -20 h -20 z m 0,0"/> |
| 2322 | - <path d="m 441,641 h 20 v -20 h 20 v -20 h 20 v -20 h 20 v -20 h 20 v -20 h 20 v -20 h 20 v -20 h 20 v -20 h 20 v -20 h 20 v -40 h -20 v 20 h -20 v 20 h -20 v 20 h -20 v 20 h -20 v 20 h -20 v 20 h -20 v 20 h -20 v 20 h -20 v 20 h -20 z m 0,0"/> |
| 2323 | - <path d="m 461,61 h -20 v 20 h -20 v 20 h -20 v 20 h -20 v 20 h -20 v 20 h -20 v 20 h -20 v 20 h -20 v 20 h -20 v 20 h -20 v 40 h 20 v -20 h 20 v -20 h 20 v -20 h 20 v -20 h 20 v -20 h 20 v -20 h 20 v -20 h 20 v -20 h 20 v -20 h 20 z m 0,0"/> |
| 2324 | - <path d="m 621,421 h 20 v 20 h 20 v 20 h 20 v 20 h 20 v 20 h 20 v 40 h -20 v -20 h -20 v -20 h -20 v -20 h -20 v -20 h -20 z m 0,0"/> |
| 2325 | - <path d="m 621,281 h 20 v -20 h 20 v -20 h 20 v -20 h 20 v -20 h 20 v -40 h -20 v 20 h -20 v 20 h -20 v 20 h -20 v 20 h -20 z m 0,0"/> |
| 2326 | - <path d="m 281,281 h -20 v -20 h -20 v -20 h -20 v -20 h -20 v -20 h -20 v -40 h 20 v 20 h 20 v 20 h 20 v 20 h 20 v 20 h 20 z m 0,0"/> |
| 2327 | - <path d="m 201,161 h -20 v 20 h -20 v 20 h -20 v 20 h -20 v 20 h -20 v 20 H 81 v 20 H 61 v 20 H 41 v 20 H 21 v 20 H 1 v 20 h 40 v -20 h 20 v -20 h 20 v -20 h 20 v -20 h 20 v -20 h 20 v -20 h 20 v -20 h 20 v -20 h 20 z m 0,0"/> |
| 2328 | - <path d="M 201,541 H 181 V 521 H 161 V 501 H 141 V 481 H 121 V 461 H 101 V 441 H 81 V 421 H 61 V 401 H 41 V 381 H 21 V 361 H 1 v -20 h 40 v 20 h 20 v 20 h 20 v 20 h 20 v 20 h 20 v 20 h 20 v 20 h 20 v 20 h 20 v 20 h 20 z m 0,0"/> |
| 2329 | - <path d="m 461,641 h -20 v -20 h -20 v -20 h -20 v -20 h -20 v -20 h -20 v -20 h -20 v -20 h -20 v -20 h -20 v -20 h -20 v -20 h -20 v -40 h 20 v 20 h 20 v 20 h 20 v 20 h 20 v 20 h 20 v 20 h 20 v 20 h 20 v 20 h 20 v 20 h 20 v 20 h 20 z m 0,0"/> |
| 2330 | - <path d="m 281,421 h -20 v 20 h -20 v 20 h -20 v 20 h -20 v 20 h -20 v 40 h 20 v -20 h 20 v -20 h 20 v -20 h 20 v -20 h 20 z m 0,0"/> |
| 2331 | - <path d="m 701,181 h 20 v -80 h 100 v 40 h -40 v -20 h -20 v 40 h 80 V 81 H 701 Z m 0,0"/> |
| 2332 | - <path d="M 721,181 H 701 V 101 H 601 v 40 h 40 v -20 h 20 v 40 H 581 V 81 h 140 z m 0,0"/> |
| 2333 | - <path d="m 701,521 h 20 v 80 h 100 v -40 h -40 v 20 h -20 v -40 h 80 v 80 H 701 Z m 0,0"/> |
| 2334 | - <path d="m 721,521 h -20 v 80 H 601 v -40 h 40 v 20 h 20 v -40 h -80 v 80 h 140 z m 0,0"/> |
| 2335 | - <path d="m 181,521 h 20 v 80 h 100 v -40 h -40 v 20 h -20 v -40 h 80 v 80 H 181 Z m 0,0"/> |
| 2336 | - <path d="m 201,521 h -20 v 80 H 81 v -40 h 40 v 20 h 20 V 541 H 61 v 80 h 140 z m 0,0"/> |
| 2337 | - <path d="m 181,181 h 20 v -80 h 100 v 40 h -40 v -20 h -20 v 40 h 80 V 81 H 181 Z m 0,0"/> |
| 2338 | - <path d="M 201,181 H 181 V 101 H 81 v 40 h 40 v -20 h 20 v 40 H 61 V 81 h 140 z m 0,0"/> |
| 2339 | - <path d="m 441,181 h 20 v 20 h 20 v 20 h 20 v 20 h 20 v 20 h 20 v 20 h 20 v 20 h 20 v 20 h 20 v 20 h 20 v 20 h -40 v -20 h -20 v -20 h -20 v -20 h -20 v -20 h -20 v -20 h -20 v -20 h -20 v -20 h -20 z m 0,0"/> |
| 2340 | - <path d="m 461,181 h -20 v 20 h -20 v 20 h -20 v 20 h -20 v 20 h -20 v 20 h -20 v 20 h -20 v 20 h -20 v 20 h -20 v 20 h 40 v -20 h 20 v -20 h 20 v -20 h 20 v -20 h 20 v -20 h 20 v -20 h 20 v -20 h 20 z m 0,0"/> |
| 2341 | - <path d="m 441,521 h 20 v -20 h 20 v -20 h 20 v -20 h 20 v -20 h 20 v -20 h 20 v -20 h 20 v -20 h 20 v -20 h 20 v -20 h -40 v 20 h -20 v 20 h -20 v 20 h -20 v 20 h -20 v 20 h -20 v 20 h -20 v 20 h -20 z m 0,0"/> |
| 2342 | - <path d="m 461,521 h -20 v -20 h -20 v -20 h -20 v -20 h -20 v -20 h -20 v -20 h -20 v -20 h -20 v -20 h -20 v -20 h -20 v -20 h 40 v 20 h 20 v 20 h 20 v 20 h 20 v 20 h 20 v 20 h 20 v 20 h 20 v 20 h 20 z m 0,0"/> |
| 2343 | - <path d="M 1,21 H 881 V 61 H 1 Z m 0,0"/> |
| 2344 | - <path d="m 1,641 h 880 v 40 H 1 Z m 0,0"/> |
| 2345 | - <path d="m 421,281 h 20 v -20 h 20 v 20 h 20 v 20 h -20 v 20 h -20 v -20 h -20 z m 0,0"/> |
| 2346 | - <path d="m 681,341 h 20 v -20 h 20 v 20 h 20 v 20 h -20 v 20 h -20 v -20 h -20 z m 0,0"/> |
| 2347 | - <path d="m 161,341 h 20 v -20 h 20 v 20 h 20 v 20 h -20 v 20 h -20 v -20 h -20 z m 0,0"/> |
| 2348 | - <path d="m 421,401 h 20 v -20 h 20 v 20 h 20 v 20 h -20 v 20 h -20 v -20 h -20 z m 0,0"/> |
| 2349 | - <path d="m 401,301 h 20 v 20 h -20 z m 0,0"/> |
| 2350 | - <path d="m 381,321 h 20 v 20 h -20 z m 0,0"/> |
| 2351 | - <path d="m 361,341 h 20 v 20 h -20 z m 0,0"/> |
| 2352 | - <path d="m 381,361 h 20 v 20 h -20 z m 0,0"/> |
| 2353 | - <path d="m 401,381 h 20 v 20 h -20 z m 0,0"/> |
| 2354 | - <path d="m 501,321 h 20 v 20 h -20 z m 0,0"/> |
| 2355 | - <path d="m 521,341 h 20 v 20 h -20 z m 0,0"/> |
| 2356 | - <path d="m 501,361 h 20 v 20 h -20 z m 0,0"/> |
| 2357 | - <path d="m 481,381 h 20 v 20 h -20 z m 0,0"/> |
| 2358 | - <path d="m 421,341 h 20 v 20 h -20 z m 0,0"/> |
| 2359 | - <path d="m 461,341 h 20 v 20 h -20 z m 0,0"/> |
| 2360 | - <path d="m 881,21 h 20 v 40 h -20 z m 0,0"/> |
| 2361 | - <path d="m 881,641 h 20 v 40 h -20 z m 0,0"/> |
| 2362 | - </g> |
| 2363 | - <g id="red" fill="#de3333" stroke="#de3333"> |
| 2364 | - <path d="m 801,201 h 60 V 81 h 40 v 220 h -20 v -20 h -20 v -20 h -20 v -20 h -20 v -20 h -20 z m 0,0"/> |
| 2365 | - <path d="M 101,201 H 41 V 81 H 1 v 220 h 20 v -20 h 20 v -20 h 20 v -20 h 20 v -20 h 20 z m 0,0"/> |
| 2366 | - <path d="M 101,501 H 41 V 621 H 1 V 401 h 20 v 20 h 20 v 20 h 20 v 20 h 20 v 20 h 20 z m 0,0"/> |
| 2367 | - <path d="m 801,501 h 60 v 120 h 40 V 401 h -20 v 20 h -20 v 20 h -20 v 20 h -20 v 20 h -20 z m 0,0"/> |
| 2368 | - <path d="m 381,341 h 20 v 20 h -20 z m 0,0"/> |
| 2369 | - <path d="m 401,321 h 20 v 20 h -20 z m 0,0"/> |
| 2370 | - <path d="m 421,301 h 20 v 20 h -20 z m 0,0"/> |
| 2371 | - <path d="m 461,301 h 20 v 20 h -20 z m 0,0"/> |
| 2372 | - <path d="m 481,321 h 20 v 20 h -20 z m 0,0"/> |
| 2373 | - <path d="m 501,341 h 20 v 20 h -20 z m 0,0"/> |
| 2374 | - <path d="m 481,361 h 20 v 20 h -20 z m 0,0"/> |
| 2375 | - <path d="m 461,381 h 20 v 20 h -20 z m 0,0"/> |
| 2376 | - <path d="m 441,361 h 20 v 20 h -20 z m 0,0"/> |
| 2377 | - <path d="m 421,381 h 20 v 20 h -20 z m 0,0"/> |
| 2378 | - <path d="m 401,361 h 20 v 20 h -20 z m 0,0"/> |
| 2379 | - <path d="m 881,81 h 20 v 220 h -20 z m 0,0"/> |
| 2380 | - <path d="m 881,401 h 20 v 220 h -20 z m 0,0"/> |
| 2381 | - </g> |
| 2382 | - </g> |
| 2383 | - </svg> |
| 2384 | diff --git a/www/static/assets/images/ui-day.png b/www/static/assets/images/ui-day.png |
| 2385 | deleted file mode 100644 |
| 2386 | index 3e217a7..0000000 |
| 2387 | Binary files a/www/static/assets/images/ui-day.png and /dev/null differ |
| 2388 | diff --git a/www/static/assets/images/ui.png b/www/static/assets/images/ui.png |
| 2389 | deleted file mode 100644 |
| 2390 | index bf94438..0000000 |
| 2391 | Binary files a/www/static/assets/images/ui.png and /dev/null differ |
| 2392 | diff --git a/www/templates/base.html b/www/templates/base.html |
| 2393 | deleted file mode 100644 |
| 2394 | index 78e1b0c..0000000 |
| 2395 | --- a/www/templates/base.html |
| 2396 | +++ /dev/null |
| 2397 | @@ -1,41 +0,0 @@ |
| 2398 | - <!DOCTYPE html> |
| 2399 | - <html lang="en"> |
| 2400 | - <head> |
| 2401 | - <meta charset="utf-8" /> |
| 2402 | - <link rel="stylesheet" href="/main.css" /> |
| 2403 | - <link href="/assets/ayllu_logo.svg" rel="icon" type="image/svg+xml" /> |
| 2404 | - <link href="/assets/ayllu_logo.png" rel="icon" sizes="any" type="image/png" /> |
| 2405 | - <title>Ayllu</title> |
| 2406 | - </head> |
| 2407 | - <nav> |
| 2408 | - <ul> |
| 2409 | - <li> |
| 2410 | - <a href="/"> |
| 2411 | - <img class="logo" src="/assets/ayllu_logo.png" /> |
| 2412 | - </a> |
| 2413 | - </li> |
| 2414 | - </ul> |
| 2415 | - <ul> |
| 2416 | - <li> |
| 2417 | - <a href="https://ayllu-forge.org/browse">browse</a> |
| 2418 | - </li> |
| 2419 | - <li> |
| 2420 | - <a href="/docs">docs</a> |
| 2421 | - </li> |
| 2422 | - </ul> |
| 2423 | - </nav> |
| 2424 | - <body class="container"> |
| 2425 | - <div class="wrapper"> |
| 2426 | - <main class="page-body"> |
| 2427 | - {% block doc_nav %} |
| 2428 | - {% endblock doc_nav %} |
| 2429 | - {% block content %} |
| 2430 | - {% endblock |
| 2431 | - content %} |
| 2432 | - </main> |
| 2433 | - <footer class="page-footer"> |
| 2434 | - {{ now() | date(format="%Y") }}, <a href="/ayllu/ayllu/blob/main/ATTRIBUTIONS.md">attributions</a> |
| 2435 | - </footer> |
| 2436 | - </div> |
| 2437 | - </body> |
| 2438 | - </html> |
| 2439 | diff --git a/www/templates/docs_home.html b/www/templates/docs_home.html |
| 2440 | deleted file mode 100644 |
| 2441 | index 5314d36..0000000 |
| 2442 | --- a/www/templates/docs_home.html |
| 2443 | +++ /dev/null |
| 2444 | @@ -1,21 +0,0 @@ |
| 2445 | - {% extends "base.html" %} |
| 2446 | - {% block title %} |
| 2447 | - {{ page.title }} | {{ super() }} |
| 2448 | - {% endblock title %} |
| 2449 | - {% block doc_nav %} |
| 2450 | - {% endblock doc_nav %} |
| 2451 | - {% block content %} |
| 2452 | - <div class="documentation"> |
| 2453 | - <div class="side-panel"> |
| 2454 | - {% set section = get_section(path="docs/_index.md") %} |
| 2455 | - <ul> |
| 2456 | - {% for page in section.pages %} |
| 2457 | - <li class="{% if current_path == page.path %}active{% endif %}"> |
| 2458 | - <a href="{{ page.permalink }}">{{ page.title }}</a> |
| 2459 | - </li> |
| 2460 | - {% endfor %} |
| 2461 | - </ul> |
| 2462 | - </div> |
| 2463 | - <div class="doc-content">{{ section.content | safe }}</div> |
| 2464 | - </div> |
| 2465 | - {% endblock content %} |
| 2466 | diff --git a/www/templates/index.html b/www/templates/index.html |
| 2467 | deleted file mode 100644 |
| 2468 | index 7155bae..0000000 |
| 2469 | --- a/www/templates/index.html |
| 2470 | +++ /dev/null |
| 2471 | @@ -1,4 +0,0 @@ |
| 2472 | - {% extends "base.html" %} |
| 2473 | - {% block content %} |
| 2474 | - {{ section.content | safe }} |
| 2475 | - {% endblock content %} |
| 2476 | diff --git a/www/templates/page.html b/www/templates/page.html |
| 2477 | deleted file mode 100644 |
| 2478 | index 8ed6c76..0000000 |
| 2479 | --- a/www/templates/page.html |
| 2480 | +++ /dev/null |
| 2481 | @@ -1,21 +0,0 @@ |
| 2482 | - {% extends "base.html" %} |
| 2483 | - {% block title %} |
| 2484 | - {{ page.title }} | {{ super() }} |
| 2485 | - {% endblock title %} |
| 2486 | - {% block doc_nav %} |
| 2487 | - {% endblock doc_nav %} |
| 2488 | - {% block content %} |
| 2489 | - <div class="documentation"> |
| 2490 | - <div class="side-panel"> |
| 2491 | - {% set section = get_section(path="docs/_index.md") %} |
| 2492 | - <ul> |
| 2493 | - {% for page in section.pages %} |
| 2494 | - <li class="{% if current_path == page.path %}active{% endif %}"> |
| 2495 | - <a href="{{ page.permalink }}">{{ page.title }}</a> |
| 2496 | - </li> |
| 2497 | - {% endfor %} |
| 2498 | - </ul> |
| 2499 | - </div> |
| 2500 | - <div class="doc-content">{{ page.content | safe }}</div> |
| 2501 | - </div> |
| 2502 | - {% endblock content %} |