Compare commits
149 Commits
flake-upda
...
main
Author | SHA1 | Date | |
---|---|---|---|
7e9d590408 | |||
|
ae0ca32563 | ||
3a26ac4323 | |||
|
fc8c260cb5 | ||
96bba0171f | |||
|
584c6f2e01 | ||
25f0ea66b7 | |||
|
fe19b2591c | ||
58ea1d309a | |||
|
27e955e12f | ||
75c7f6052c | |||
|
2834c998f2 | ||
42a4bd5068 | |||
c225dc56b1 | |||
7910e332be | |||
d72a88cd3a | |||
46b4c704ac | |||
3461ee83e0 | |||
6591d73f7c | |||
345216fcb4 | |||
b410b826f4 | |||
0c3192e3cc | |||
|
7bc0506669 | ||
320090825e | |||
|
4f8ac7b388 | ||
e1f2de68e7 | |||
1d63446790 | |||
|
a07ddfbf2f | ||
16bdafca40 | |||
|
3697903c34 | ||
2a698087f6 | |||
4e1b44f747 | |||
632f20ac4e | |||
9a6bfc5d22 | |||
|
f3c172be99 | ||
344e9113a3 | |||
|
b3eec10902 | ||
1c99e0a7c5 | |||
0ca52e8adc | |||
ef130a6754 | |||
|
8b42e462de | ||
56f8bcefbd | |||
|
28a205c5d4 | ||
e23455d0e2 | |||
|
7d84d58da6 | ||
49b000d6f5 | |||
4b756455f4 | |||
e4e80462c4 | |||
c383344de9 | |||
59c43cb228 | |||
a27a032351 | |||
533ef06eba | |||
0c302009b6 | |||
f9f540e90b | |||
0a294e5be4 | |||
01668704ad | |||
9330c4cfca | |||
f457cabdc9 | |||
04a734cf00 | |||
|
6fbd1efc2b | ||
16c9f65476 | |||
a1def4000c | |||
|
65c2cb4099 | ||
2124515ebb | |||
|
328580a5b7 | ||
f6f6647ba6 | |||
c7a1db4255 | |||
85b3d99421 | |||
|
73ed745a2c | ||
09bd1089e9 | |||
|
3031d1ed83 | ||
39a6301271 | |||
fdf258c60f | |||
a23c9d32bc | |||
da723063b3 | |||
2d41407a69 | |||
2ef57ff99d | |||
3c0c6894ca | |||
9545360a3e | |||
014b0e5e68 | |||
b9e94d1efe | |||
a62bfb4d51 | |||
5a444778b2 | |||
d3d3ddd670 | |||
353fa72580 | |||
454b69356b | |||
eea9953bdf | |||
8ea85377a2 | |||
7be5afe882 | |||
0555376c19 | |||
459bf2ca23 | |||
e722c22323 | |||
6d0629373e | |||
85b53e6871 | |||
01a0fbffe1 | |||
f8c293f6b0 | |||
e635bac487 | |||
1754cec484 | |||
1f354ff253 | |||
ea53cc8703 | |||
5db1648e84 | |||
6e0d4bc386 | |||
856b944609 | |||
|
a60e7058be | ||
dcf9e6aae0 | |||
482b66436e | |||
0ff43288e1 | |||
|
f755299a04 | ||
4dd84edf7f | |||
|
db4b0a2e7d | ||
3691764c36 | |||
4aae6de3bd | |||
3cb2e1a85d | |||
a58174ecc6 | |||
|
d6a4c6f440 | ||
0235c161a5 | |||
b83c6e3d10 | |||
28b506881f | |||
75154b3e36 | |||
820513c08b | |||
40616c53f3 | |||
53f50f550c | |||
b31887538e | |||
83e221eb01 | |||
54cc0f0674 | |||
bf416d836f | |||
739752db38 | |||
34fad42f54 | |||
fe5c1ffc8b | |||
d3f4b7003a | |||
74233961c0 | |||
c10e476c7f | |||
|
ed12342077 | ||
406fc386d1 | |||
|
fcbf62779c | ||
feed070c73 | |||
|
c74fac9f75 | ||
7fa2a8ee45 | |||
|
ad1e00dcae | ||
2c69b91fda | |||
|
3f68e370e0 | ||
0ea7bf9112 | |||
|
6bdde7251b | ||
5643f32a7d | |||
|
8cc1da058e | ||
3247e4d981 | |||
f7a1afa253 | |||
|
e197674d62 | ||
3c207d15f1 |
1
.gitattributes
vendored
Normal file
@ -0,0 +1 @@
|
||||
content/videos filter=lfs diff=lfs merge=lfs -text
|
1
.gitignore
vendored
@ -1,4 +1,5 @@
|
||||
/public
|
||||
.vscode
|
||||
.direnv
|
||||
result*
|
||||
.pre-commit-config.yaml
|
||||
|
@ -1,4 +1,4 @@
|
||||
Copyright 2023 cLAN contributers
|
||||
Copyright 2023 Clan contributers
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
|
||||
|
||||
|
23
README.md
@ -1,27 +1,13 @@
|
||||
# Getting start with the repo
|
||||
|
||||
This is the source for the homepage.
|
||||
We use [zola](https://www.getzola.org/) for building a static website.
|
||||
|
||||
## Build the homepage
|
||||
|
||||
This will build the website including pages defined in the clan-core repo under `/docs`:
|
||||
|
||||
```command
|
||||
$ nix build
|
||||
```
|
||||
This is the source for the Clan homepage.
|
||||
|
||||
## Start a local webserver
|
||||
|
||||
This server will include all the pages from clan-core, but doesn't automatically refresh. Also make sure to wipe your browsers cache after each change.
|
||||
|
||||
```command
|
||||
$ nix run .#serve
|
||||
```
|
||||
|
||||
## zola build & serve
|
||||
Alternatively `zola build` and `zola serve` can be used for development but the result will be missing the pages defined in the clan-core repo.
|
||||
|
||||
## Contributing
|
||||
|
||||
Send changes to https://git.clan.lol/clan/clan-homepage
|
||||
@ -31,10 +17,3 @@ Send changes to https://git.clan.lol/clan/clan-homepage
|
||||
```
|
||||
$ nix run .#deploy
|
||||
```
|
||||
|
||||
|
||||
## Create a new post
|
||||
|
||||
```
|
||||
$ nix run .#new-post "September Changelog"
|
||||
```
|
||||
|
29
config.toml
@ -1,6 +1,6 @@
|
||||
# The URL the site will be built for
|
||||
base_url = "https://clan.lol"
|
||||
title = "cLAN"
|
||||
title = "Clan"
|
||||
|
||||
# The site theme to use.
|
||||
theme = "adidoks"
|
||||
@ -26,7 +26,7 @@ taxonomies = [
|
||||
# Whether to build a search index to be used later on by a JavaScript library
|
||||
# When set to "true", a search index is built from the pages and section
|
||||
# content for `default_language`.
|
||||
build_search_index = true
|
||||
build_search_index = false
|
||||
|
||||
[search]
|
||||
# Whether to include the title of the page/section in the index
|
||||
@ -44,7 +44,7 @@ highlight_code = true
|
||||
|
||||
[extra]
|
||||
# Put all your custom variables here
|
||||
author = "cLAN contributors"
|
||||
author = "Clan contributors"
|
||||
email = "admin@clan.lol"
|
||||
|
||||
# If running on netlify.app site, set to true
|
||||
@ -58,7 +58,7 @@ theme_color = "#fff"
|
||||
|
||||
# More about site's title
|
||||
title_separator = "-" # set as |, -, _, etc
|
||||
title_addition = "Build your own cLAN"
|
||||
title_addition = "Build your own Clan"
|
||||
|
||||
|
||||
# Set date format in blog publish metadata
|
||||
@ -103,30 +103,11 @@ url = "https://git.clan.lol/clan/clan-core"
|
||||
post = "v0.1.0"
|
||||
weight = 20
|
||||
|
||||
|
||||
# Menu items
|
||||
[[extra.menu.main]]
|
||||
name = "Docs"
|
||||
section = "docs"
|
||||
url = "/docs/getting-started/introduction/"
|
||||
weight = 10
|
||||
|
||||
[[extra.menu.main]]
|
||||
name = "Blog"
|
||||
section = "blog"
|
||||
url = "/blog/"
|
||||
weight = 20
|
||||
|
||||
# Footer contents
|
||||
[extra.footer]
|
||||
info = 'Powered by <a href="https://www.getzola.org/">Zola</a>, and <a href="https://github.com/aaranxu/adidoks">AdiDoks</a>'
|
||||
|
||||
[[extra.footer.nav]]
|
||||
name = "Privacy"
|
||||
name = "Privacy Policy"
|
||||
url = "/privacy-policy/"
|
||||
weight = 10
|
||||
|
||||
[[extra.footer.nav]]
|
||||
name = "The Vision"
|
||||
url = "/docs/thevision"
|
||||
weight = 20
|
||||
|
@ -1,39 +0,0 @@
|
||||
+++
|
||||
title = "Build your own"
|
||||
|
||||
# The homepage contents
|
||||
[extra]
|
||||
lead = '<img src="/logo/clan-dark.png" class="clogo" width="100px" height="100px" alt="cLAN logo"></img> <br><b>cLAN</b> envisions a new model for a decentralized network, designed to provide families, smaller groups, and small businesses a platform that’s private, secure, and user-friendly. '
|
||||
url = "/docs/thevision/"
|
||||
url_button = "Learn more"
|
||||
repo_version = "cLAN v0.0.0-alpha"
|
||||
repo_license = "Open-source MIT License."
|
||||
repo_url = "https://git.clan.lol/clan/"
|
||||
|
||||
# Menu items
|
||||
[[extra.menu.main]]
|
||||
name = "Docs"
|
||||
section = "docs"
|
||||
url = "/docs/thevision"
|
||||
weight = 10
|
||||
|
||||
[[extra.menu.main]]
|
||||
name = "Blog"
|
||||
section = "blog"
|
||||
url = "/blog/"
|
||||
weight = 20
|
||||
|
||||
|
||||
|
||||
[[extra.list]]
|
||||
title = "Easy to use"
|
||||
content = 'cLAN provides a user-friendly interface that allows you to establish your own private network, complete with services.'
|
||||
|
||||
[[extra.list]]
|
||||
title = "Open-source"
|
||||
content = 'All code for cLAN is freely available and open-source.'
|
||||
|
||||
[[extra.list]]
|
||||
title = "Decentralized"
|
||||
content = "The design of cLAN enables the distribution of your applications/services across several machines. This increases the resilience of the network, ensuring continued operation even if some computers become unavailable."
|
||||
+++
|
@ -1,11 +0,0 @@
|
||||
+++
|
||||
title = "Mic92"
|
||||
description = "Contributor to cLAN."
|
||||
date = 2021-04-01T08:50:45+00:00
|
||||
updated = 2021-04-01T08:50:45+00:00
|
||||
draft = false
|
||||
+++
|
||||
|
||||
Contributor to **clan**.
|
||||
|
||||
[@thalheim](https://thalheim.io)
|
@ -1,18 +0,0 @@
|
||||
+++
|
||||
title = "Authors"
|
||||
description = "The authors of the blog articles."
|
||||
date = 2021-04-01T08:00:00+00:00
|
||||
updated = 2021-04-01T08:00:00+00:00
|
||||
draft = false
|
||||
|
||||
# If add a new author page in this section, please add a new item,
|
||||
# and the format is as follows:
|
||||
#
|
||||
# "author-name-in-url" = "the-full-path-of-the-author-page"
|
||||
#
|
||||
# Note: We use quoted keys here.
|
||||
[extra.author_pages]
|
||||
"Mic92" = "authors/Mic92.md"
|
||||
+++
|
||||
|
||||
The authors of the blog articles.
|
@ -1,15 +0,0 @@
|
||||
+++
|
||||
title = "The Beginning"
|
||||
description = "Introducing cLAN, a new model for a decentralized network, designed to provide families, smaller groups, and small businesses a platform that’s private, secure, and user-friendly."
|
||||
date = 2023-05-01T09:19:42+00:00
|
||||
updated = 2023-05-01T09:19:42+00:00
|
||||
draft = false
|
||||
template = "blog/page.html"
|
||||
|
||||
[taxonomies]
|
||||
authors = ["Mic92"]
|
||||
|
||||
[extra]
|
||||
lead = "Introducing cLAN,"
|
||||
+++
|
||||
a new model for a decentralized network, designed to provide families, smaller groups, and small businesses a platform that's self hosted while pertaining the commodities of a cloud infrastructure.
|
@ -1,7 +0,0 @@
|
||||
+++
|
||||
title = "Blog"
|
||||
description = "Blog"
|
||||
sort_by = "date"
|
||||
paginate_by = 2
|
||||
template = "blog/section.html"
|
||||
+++
|
@ -1,9 +0,0 @@
|
||||
+++
|
||||
title = "Docs"
|
||||
description = "The documents of the AdiDoks theme."
|
||||
date = 2025-05-01T08:00:00+00:00
|
||||
updated = 2021-05-01T08:00:00+00:00
|
||||
sort_by = "weight"
|
||||
weight = 1
|
||||
template = "docs/section.html"
|
||||
+++
|
@ -1,10 +0,0 @@
|
||||
+++
|
||||
title = "Contributing"
|
||||
description = "Find out how to contribute to cLAN."
|
||||
date = 2025-05-01T18:00:00+00:00
|
||||
updated = 2021-05-01T18:00:00+00:00
|
||||
template = "docs/section.html"
|
||||
sort_by = "weight"
|
||||
weight = 4
|
||||
draft = false
|
||||
+++
|
@ -1,28 +0,0 @@
|
||||
+++
|
||||
title = "How to Contribute"
|
||||
description = "Contribute to cLAN, improve documentation, or submit to showcase."
|
||||
date = 2021-05-01T18:10:00+00:00
|
||||
updated = 2021-05-01T18:10:00+00:00
|
||||
draft = false
|
||||
weight = 410
|
||||
sort_by = "weight"
|
||||
template = "docs/page.html"
|
||||
|
||||
[extra]
|
||||
lead = "Contribute to cLAN, improve documentation, or submit to showcase."
|
||||
toc = true
|
||||
top = false
|
||||
+++
|
||||
|
||||
## Contribute
|
||||
|
||||
👉 Explore our repos at [git.clan.lol](https://git.clan.lol/explore/repos)
|
||||
|
||||
👉 [Browse issues](https://git.clan.lol/issues)
|
||||
|
||||
👉 [Create new issue](https://git.clan.lol/clan/clan-core/issues/new)
|
||||
|
||||
|
||||
## Improve these docs
|
||||
|
||||
👉 The documentation lives in [git.clan.lol/clan/clan-homepage](https://git.clan.lol/clan/clan-homepage/src/branch/main/content/docs)
|
@ -1,10 +0,0 @@
|
||||
+++
|
||||
title = "Help"
|
||||
description = "Get help on AdiDoks."
|
||||
date = 2025-05-01T19:00:00+00:00
|
||||
updated = 2021-05-01T19:00:00+00:00
|
||||
template = "docs/section.html"
|
||||
sort_by = "weight"
|
||||
weight = 5
|
||||
draft = false
|
||||
+++
|
@ -1,32 +0,0 @@
|
||||
+++
|
||||
title = "FAQ"
|
||||
description = "Answers to frequently asked questions."
|
||||
date = 2021-05-01T19:30:00+00:00
|
||||
updated = 2021-05-01T19:30:00+00:00
|
||||
draft = false
|
||||
weight = 30
|
||||
sort_by = "weight"
|
||||
template = "docs/page.html"
|
||||
|
||||
[extra]
|
||||
lead = "Answers to frequently asked questions."
|
||||
toc = true
|
||||
top = false
|
||||
+++
|
||||
|
||||
## Keyboard shortcuts for search?
|
||||
|
||||
- focus: `/`
|
||||
- select: `↓` and `↑`
|
||||
- open: `Enter`
|
||||
- close: `Esc`
|
||||
|
||||
## Other documentation?
|
||||
|
||||
- [https://nixos.org](https://nixos.org/)
|
||||
|
||||
## Contact the creator?
|
||||
|
||||
Send an E-mail:
|
||||
|
||||
- <admins@clan.lol>
|
@ -1,122 +0,0 @@
|
||||
<mxfile host="app.diagrams.net" modified="2024-01-04T14:37:14.987Z" agent="Mozilla/5.0 (X11; Linux x86_64; rv:107.0) Gecko/20100101 Firefox/107.0" etag="hDO36PXgKwa7GlXmf0pK" version="21.5.0" type="device">
|
||||
<diagram name="Page-1" id="Page-1">
|
||||
<mxGraphModel dx="3034" dy="1872" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="850" pageHeight="1100" math="0" shadow="0">
|
||||
<root>
|
||||
<mxCell id="0" />
|
||||
<mxCell id="1" value="Connector" parent="0" />
|
||||
<mxCell id="L0__EUAIFv-v6VTxFZ8R-24" value="" style="verticalLabelPosition=bottom;html=1;verticalAlign=top;align=center;strokeColor=none;fillColor=#00BEF2;shape=mxgraph.azure.laptop;pointerEvents=1;" vertex="1" parent="1">
|
||||
<mxGeometry x="250" y="280" width="290" height="240" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="r0mgfz6IdKgSaTeHQ_le-60" value="<div><font style="font-size: 24px;">Different <br></font></div><div><font style="font-size: 24px;">VPN Mesh network</font></div>" style="ellipse;shape=cloud;whiteSpace=wrap;html=1;" parent="1" vertex="1">
|
||||
<mxGeometry x="890" y="950.0000000000001" width="320" height="240" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="r0mgfz6IdKgSaTeHQ_le-33" value="<div><font style="font-size: 24px;">VPN Mesh network</font></div>" style="ellipse;shape=cloud;whiteSpace=wrap;html=1;" parent="1" vertex="1">
|
||||
<mxGeometry x="430" y="560" width="320" height="240" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="r0mgfz6IdKgSaTeHQ_le-67" value="" style="endArrow=classic;html=1;rounded=0;strokeWidth=3;startArrow=classic;startFill=1;entryX=0.25;entryY=0.25;entryDx=0;entryDy=0;entryPerimeter=0;" parent="1" target="r0mgfz6IdKgSaTeHQ_le-33" edge="1">
|
||||
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||
<mxPoint x="380" y="530" as="sourcePoint" />
|
||||
<mxPoint x="590" y="645" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="22" value="<font data-darkreader-inline-color="" style="font-size: 28px; font-family: &quot;calibri&quot;; color: rgb(0, 0, 0); direction: ltr; letter-spacing: 0px; line-height: 120%; opacity: 1; --darkreader-inline-color: #e8e6e3;">Computer connected through VM<br></font>" style="verticalAlign=middle;align=center;vsdxID=28;fillColor=none;gradientColor=none;shape=stencil(nZBLDoAgDERP0z3SIyjew0SURgSD+Lu9kMZoXLhwN9O+tukAlrNpJg1SzDH4QW/URgNYgZTkjA4UkwJUgGXng+6DX1zLfmoymdXo17xh5zmRJ6Q42BWCfc2oJfdAr+Yv+AP9Cb7OJ3H/2JG1HNGz/84klThPVCc=);strokeColor=none;labelBackgroundColor=none;rounded=0;html=1;whiteSpace=wrap;" parent="1" vertex="1">
|
||||
<mxGeometry x="857.5" y="400" width="265" height="130" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="r0mgfz6IdKgSaTeHQ_le-66" value="" style="endArrow=classic;html=1;rounded=0;entryX=0.875;entryY=0.5;entryDx=0;entryDy=0;entryPerimeter=0;strokeWidth=3;startArrow=classic;startFill=1;" parent="1" target="r0mgfz6IdKgSaTeHQ_le-33" edge="1">
|
||||
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||
<mxPoint x="860" y="628.7096774193546" as="sourcePoint" />
|
||||
<mxPoint x="566" y="717" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="ZT00lVDF8hyaAqTCrx0f-22" value="NixOS" style="vsdxID=12;fillColor=#0050ef;shape=stencil(nZBLDoAgDERP0z3SIyjew0SURgSD+Lu9kMZoXLhwN9O+tukAlrNpJg1SzDH4QW/URgNYgZTkjA4UkwJUgGXng+6DX1zLfmoymdXo17xh5zmRJ6Q42BWCfc2oJfdAr+Yv+AP9Cb7OJ3H/2JG1HNGz/84klThPVCc=);strokeColor=#001DBC;strokeWidth=3;labelBackgroundColor=none;rounded=0;html=1;whiteSpace=wrap;fontColor=#ffffff;fontSize=28;" parent="1" vertex="1">
|
||||
<mxGeometry x="300" y="400" width="200" height="36.25" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="eZtIASL5zvcn_9goES__-32" value="<font data-darkreader-inline-color="" style="font-size: 28px; font-family: &quot;calibri&quot;; color: rgb(0, 0, 0); direction: ltr; letter-spacing: 0px; line-height: 120%; opacity: 1; --darkreader-inline-color: #e8e6e3;">Computer directly connected<br></font>" style="verticalAlign=middle;align=left;vsdxID=28;fillColor=none;gradientColor=none;shape=stencil(nZBLDoAgDERP0z3SIyjew0SURgSD+Lu9kMZoXLhwN9O+tukAlrNpJg1SzDH4QW/URgNYgZTkjA4UkwJUgGXng+6DX1zLfmoymdXo17xh5zmRJ6Q42BWCfc2oJfdAr+Yv+AP9Cb7OJ3H/2JG1HNGz/84klThPVCc=);strokeColor=none;labelBackgroundColor=none;rounded=0;html=1;whiteSpace=wrap;" parent="1" vertex="1">
|
||||
<mxGeometry x="522.5" y="319.9950996015936" width="135" height="102.54980079681275" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="ZT00lVDF8hyaAqTCrx0f-23" value="" style="group" parent="1" vertex="1" connectable="0">
|
||||
<mxGeometry x="300" y="320" width="200" height="60" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="eZtIASL5zvcn_9goES__-42" style="vsdxID=12;fillColor=#0050ef;shape=stencil(nZBLDoAgDERP0z3SIyjew0SURgSD+Lu9kMZoXLhwN9O+tukAlrNpJg1SzDH4QW/URgNYgZTkjA4UkwJUgGXng+6DX1zLfmoymdXo17xh5zmRJ6Q42BWCfc2oJfdAr+Yv+AP9Cb7OJ3H/2JG1HNGz/84klThPVCc=);strokeColor=#001DBC;strokeWidth=3;labelBackgroundColor=none;rounded=0;html=1;whiteSpace=wrap;fontColor=#ffffff;" parent="ZT00lVDF8hyaAqTCrx0f-23" vertex="1">
|
||||
<mxGeometry width="200" height="60" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="eZtIASL5zvcn_9goES__-43" value="<font data-darkreader-inline-color="" style="font-size: 28px; font-family: &quot;calibri&quot;; color: rgb(255, 255, 255); direction: ltr; letter-spacing: 0px; line-height: 120%; opacity: 1; --darkreader-inline-color: #e8e6e3;">Mumble Client<br></font>" style="verticalAlign=middle;align=center;vsdxID=25;fillColor=none;shape=stencil(nZBLDoAgDERP0z3SIyjew0SURgSD+Lu9kMZoXLhwN9O+tukAlrNpJg1SzDH4QW/URgNYgZTkjA4UkwJUgGXng+6DX1zLfmoymdXo17xh5zmRJ6Q42BWCfc2oJfdAr+Yv+AP9Cb7OJ3H/2JG1HNGz/84klThPVCc=);strokeColor=none;labelBackgroundColor=none;rounded=0;html=1;whiteSpace=wrap;" parent="ZT00lVDF8hyaAqTCrx0f-23" vertex="1">
|
||||
<mxGeometry x="9.807692307692303" y="13.714285714285712" width="180.3846153846154" height="31.71428571428571" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="L0__EUAIFv-v6VTxFZ8R-32" value="" style="group" vertex="1" connectable="0" parent="1">
|
||||
<mxGeometry x="840" y="520" width="300" height="250" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="L0__EUAIFv-v6VTxFZ8R-25" value="" style="verticalLabelPosition=bottom;html=1;verticalAlign=top;align=center;strokeColor=none;fillColor=#00BEF2;shape=mxgraph.azure.laptop;pointerEvents=1;" vertex="1" parent="L0__EUAIFv-v6VTxFZ8R-32">
|
||||
<mxGeometry width="300" height="250" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="L0__EUAIFv-v6VTxFZ8R-30" value="<font style="font-size: 20px;">VM with NixOS </font>" style="swimlane;whiteSpace=wrap;html=1;" vertex="1" parent="L0__EUAIFv-v6VTxFZ8R-32">
|
||||
<mxGeometry x="45" y="20" width="200" height="150" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="L0__EUAIFv-v6VTxFZ8R-31" value="" style="group" vertex="1" connectable="0" parent="L0__EUAIFv-v6VTxFZ8R-30">
|
||||
<mxGeometry x="10" y="40" width="180" height="90" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="eZtIASL5zvcn_9goES__-39" style="vsdxID=12;fillColor=#0050ef;shape=stencil(nZBLDoAgDERP0z3SIyjew0SURgSD+Lu9kMZoXLhwN9O+tukAlrNpJg1SzDH4QW/URgNYgZTkjA4UkwJUgGXng+6DX1zLfmoymdXo17xh5zmRJ6Q42BWCfc2oJfdAr+Yv+AP9Cb7OJ3H/2JG1HNGz/84klThPVCc=);strokeColor=#001DBC;strokeWidth=3;labelBackgroundColor=none;rounded=0;html=1;whiteSpace=wrap;fontColor=#ffffff;" parent="L0__EUAIFv-v6VTxFZ8R-31" vertex="1">
|
||||
<mxGeometry width="180" height="90" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="eZtIASL5zvcn_9goES__-40" value="<font data-darkreader-inline-color="" style="font-size: 28px; font-family: &quot;calibri&quot;; color: rgb(255, 255, 255); direction: ltr; letter-spacing: 0px; line-height: 120%; opacity: 1; --darkreader-inline-color: #e8e6e3;">Mumble Client<br></font>" style="verticalAlign=middle;align=center;vsdxID=25;fillColor=none;shape=stencil(nZBLDoAgDERP0z3SIyjew0SURgSD+Lu9kMZoXLhwN9O+tukAlrNpJg1SzDH4QW/URgNYgZTkjA4UkwJUgGXng+6DX1zLfmoymdXo17xh5zmRJ6Q42BWCfc2oJfdAr+Yv+AP9Cb7OJ3H/2JG1HNGz/84klThPVCc=);strokeColor=none;labelBackgroundColor=none;rounded=0;html=1;whiteSpace=wrap;" parent="L0__EUAIFv-v6VTxFZ8R-31" vertex="1">
|
||||
<mxGeometry x="8.826923076923094" y="27.64285714285714" width="162.34615384615387" height="47.57142857142858" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="ZT00lVDF8hyaAqTCrx0f-24" value="<div>Linux or MacOS</div>" style="vsdxID=12;fillColor=#0050ef;shape=stencil(nZBLDoAgDERP0z3SIyjew0SURgSD+Lu9kMZoXLhwN9O+tukAlrNpJg1SzDH4QW/URgNYgZTkjA4UkwJUgGXng+6DX1zLfmoymdXo17xh5zmRJ6Q42BWCfc2oJfdAr+Yv+AP9Cb7OJ3H/2JG1HNGz/84klThPVCc=);strokeColor=#001DBC;strokeWidth=3;labelBackgroundColor=none;rounded=0;html=1;whiteSpace=wrap;fontColor=#ffffff;fontSize=28;" parent="L0__EUAIFv-v6VTxFZ8R-32" vertex="1">
|
||||
<mxGeometry x="30" y="205" width="240" height="35" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="L0__EUAIFv-v6VTxFZ8R-45" value="" style="image;points=[];aspect=fixed;html=1;align=center;shadow=0;dashed=0;image=img/lib/allied_telesis/computer_and_terminals/Personal_Computer_with_Server.svg;imageBackground=#FFFFFF;fillStyle=solid;" vertex="1" parent="1">
|
||||
<mxGeometry x="340" y="810" width="457.6" height="457.6" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="L0__EUAIFv-v6VTxFZ8R-40" value="<font style="font-size: 20px;">VM with NixOS </font>" style="swimlane;whiteSpace=wrap;html=1;startSize=23;fillColor=#FFFFFF;gradientColor=none;" vertex="1" parent="1">
|
||||
<mxGeometry x="440" y="1070" width="282.25" height="160" as="geometry">
|
||||
<mxRectangle x="1180" y="730" width="180" height="40" as="alternateBounds" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="L0__EUAIFv-v6VTxFZ8R-50" value="" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="L0__EUAIFv-v6VTxFZ8R-40">
|
||||
<mxGeometry y="30" width="282.25" height="130" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="L0__EUAIFv-v6VTxFZ8R-41" value="" style="group;align=left;" vertex="1" connectable="0" parent="L0__EUAIFv-v6VTxFZ8R-40">
|
||||
<mxGeometry x="52.25" y="50" width="180" height="90" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="L0__EUAIFv-v6VTxFZ8R-42" style="vsdxID=12;fillColor=#0050ef;shape=stencil(nZBLDoAgDERP0z3SIyjew0SURgSD+Lu9kMZoXLhwN9O+tukAlrNpJg1SzDH4QW/URgNYgZTkjA4UkwJUgGXng+6DX1zLfmoymdXo17xh5zmRJ6Q42BWCfc2oJfdAr+Yv+AP9Cb7OJ3H/2JG1HNGz/84klThPVCc=);strokeColor=#001DBC;strokeWidth=3;labelBackgroundColor=none;rounded=0;html=1;whiteSpace=wrap;fontColor=#ffffff;" vertex="1" parent="L0__EUAIFv-v6VTxFZ8R-41">
|
||||
<mxGeometry width="180" height="90" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="L0__EUAIFv-v6VTxFZ8R-43" value="<font data-darkreader-inline-color="" style="font-size: 28px; font-family: &quot;calibri&quot;; color: rgb(255, 255, 255); direction: ltr; letter-spacing: 0px; line-height: 120%; opacity: 1; --darkreader-inline-color: #e8e6e3;">Nextcloud</font><font data-darkreader-inline-color="" style="font-size: 28px; font-family: &quot;calibri&quot;; color: rgb(255, 255, 255); direction: ltr; letter-spacing: 0px; line-height: 120%; opacity: 1; --darkreader-inline-color: #e8e6e3;"></font>" style="verticalAlign=middle;align=center;vsdxID=25;fillColor=none;shape=stencil(nZBLDoAgDERP0z3SIyjew0SURgSD+Lu9kMZoXLhwN9O+tukAlrNpJg1SzDH4QW/URgNYgZTkjA4UkwJUgGXng+6DX1zLfmoymdXo17xh5zmRJ6Q42BWCfc2oJfdAr+Yv+AP9Cb7OJ3H/2JG1HNGz/84klThPVCc=);strokeColor=none;labelBackgroundColor=none;rounded=0;html=1;whiteSpace=wrap;" vertex="1" parent="L0__EUAIFv-v6VTxFZ8R-41">
|
||||
<mxGeometry x="8.826923076923094" y="27.64285714285714" width="162.34615384615387" height="47.57142857142858" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="r0mgfz6IdKgSaTeHQ_le-63" value="" style="endArrow=classic;html=1;rounded=0;strokeWidth=3;startArrow=classic;startFill=1;entryX=0.16;entryY=0.55;entryDx=0;entryDy=0;entryPerimeter=0;exitX=1;exitY=0.5;exitDx=0;exitDy=0;" parent="1" source="L0__EUAIFv-v6VTxFZ8R-50" target="r0mgfz6IdKgSaTeHQ_le-60" edge="1">
|
||||
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||
<mxPoint x="1658.8" y="1118" as="sourcePoint" />
|
||||
<mxPoint x="1149.9999999999998" y="1229.9999999999995" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="r0mgfz6IdKgSaTeHQ_le-65" value="" style="endArrow=classic;html=1;rounded=0;strokeWidth=3;startArrow=classic;startFill=1;entryX=0.55;entryY=0.95;entryDx=0;entryDy=0;entryPerimeter=0;exitX=0.5;exitY=0;exitDx=0;exitDy=0;" parent="1" source="L0__EUAIFv-v6VTxFZ8R-51" target="r0mgfz6IdKgSaTeHQ_le-33" edge="1">
|
||||
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||
<mxPoint x="566.125" y="880" as="sourcePoint" />
|
||||
<mxPoint x="660" y="840" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="L0__EUAIFv-v6VTxFZ8R-46" value="<div><font data-darkreader-inline-color="" style="font-size: 28px; font-family: &quot;calibri&quot;; color: rgb(0, 0, 0); direction: ltr; letter-spacing: 0px; line-height: 120%; opacity: 1; --darkreader-inline-color: #e8e6e3;">Computer joined multiple cLANs</font></div><div><font data-darkreader-inline-color="" style="font-size: 28px; font-family: &quot;calibri&quot;; color: rgb(0, 0, 0); direction: ltr; letter-spacing: 0px; line-height: 120%; opacity: 1; --darkreader-inline-color: #e8e6e3;">&nbsp;through VMs</font></div>" style="verticalAlign=middle;align=right;vsdxID=28;fillColor=none;gradientColor=none;shape=stencil(nZBLDoAgDERP0z3SIyjew0SURgSD+Lu9kMZoXLhwN9O+tukAlrNpJg1SzDH4QW/URgNYgZTkjA4UkwJUgGXng+6DX1zLfmoymdXo17xh5zmRJ6Q42BWCfc2oJfdAr+Yv+AP9Cb7OJ3H/2JG1HNGz/84klThPVCc=);strokeColor=none;labelBackgroundColor=none;rounded=0;html=1;whiteSpace=wrap;" vertex="1" parent="1">
|
||||
<mxGeometry x="70" y="940" width="265" height="130" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="L0__EUAIFv-v6VTxFZ8R-51" value="<font style="font-size: 20px;">VM with NixOS </font>" style="swimlane;whiteSpace=wrap;html=1;startSize=23;fillColor=#FFFFFF;gradientColor=none;" vertex="1" parent="1">
|
||||
<mxGeometry x="420" y="880" width="282.25" height="160" as="geometry">
|
||||
<mxRectangle x="1180" y="730" width="180" height="40" as="alternateBounds" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="L0__EUAIFv-v6VTxFZ8R-52" value="" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="L0__EUAIFv-v6VTxFZ8R-51">
|
||||
<mxGeometry y="30" width="282.25" height="130" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="L0__EUAIFv-v6VTxFZ8R-53" value="" style="group;align=left;" vertex="1" connectable="0" parent="L0__EUAIFv-v6VTxFZ8R-51">
|
||||
<mxGeometry x="52.25" y="50" width="180" height="90" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="L0__EUAIFv-v6VTxFZ8R-54" style="vsdxID=12;fillColor=#0050ef;shape=stencil(nZBLDoAgDERP0z3SIyjew0SURgSD+Lu9kMZoXLhwN9O+tukAlrNpJg1SzDH4QW/URgNYgZTkjA4UkwJUgGXng+6DX1zLfmoymdXo17xh5zmRJ6Q42BWCfc2oJfdAr+Yv+AP9Cb7OJ3H/2JG1HNGz/84klThPVCc=);strokeColor=#001DBC;strokeWidth=3;labelBackgroundColor=none;rounded=0;html=1;whiteSpace=wrap;fontColor=#ffffff;" vertex="1" parent="L0__EUAIFv-v6VTxFZ8R-53">
|
||||
<mxGeometry width="180" height="90" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="L0__EUAIFv-v6VTxFZ8R-55" value="<font data-darkreader-inline-color="" style="font-size: 28px; font-family: &quot;calibri&quot;; color: rgb(255, 255, 255); direction: ltr; letter-spacing: 0px; line-height: 120%; opacity: 1; --darkreader-inline-color: #e8e6e3;">Mumble Server</font>" style="verticalAlign=middle;align=center;vsdxID=25;fillColor=none;shape=stencil(nZBLDoAgDERP0z3SIyjew0SURgSD+Lu9kMZoXLhwN9O+tukAlrNpJg1SzDH4QW/URgNYgZTkjA4UkwJUgGXng+6DX1zLfmoymdXo17xh5zmRJ6Q42BWCfc2oJfdAr+Yv+AP9Cb7OJ3H/2JG1HNGz/84klThPVCc=);strokeColor=none;labelBackgroundColor=none;rounded=0;html=1;whiteSpace=wrap;" vertex="1" parent="L0__EUAIFv-v6VTxFZ8R-53">
|
||||
<mxGeometry x="8.826923076923094" y="27.64285714285714" width="162.34615384615387" height="47.57142857142858" as="geometry" />
|
||||
</mxCell>
|
||||
</root>
|
||||
</mxGraphModel>
|
||||
</diagram>
|
||||
</mxfile>
|
Before Width: | Height: | Size: 174 KiB |
Before Width: | Height: | Size: 29 KiB |
@ -1,272 +0,0 @@
|
||||
+++
|
||||
title = "Technical Overview"
|
||||
description = "Overview of cLAN's architecture, components and security"
|
||||
date = 2021-05-01T18:10:00+00:00
|
||||
updated = 2021-07-13T18:10:00+00:00
|
||||
draft = false
|
||||
weight = 410
|
||||
sort_by = "weight"
|
||||
template = "docs/page.html"
|
||||
|
||||
[extra]
|
||||
lead = "Overview of cLAN's architecture, components and security"
|
||||
toc = true
|
||||
top = false
|
||||
+++
|
||||
|
||||
|
||||
### cLAN
|
||||
|
||||
cLAN envisions a new model for a decentralized network, designed to provide families, smaller groups, and small businesses a platform that's private, secure, and user-friendly. The system transcends the conventional reliance on centralized services, allowing for direct, end-to-end encrypted communication among users. Rooted in open-source software, cLAN ensures no vendor lock-in, and introduces robust features including remote management, backup functionality, user-friendly app store, and fleet management for small businesses.
|
||||
|
||||
|
||||
### Decentralized Network Model
|
||||
|
||||
cLAN incorporates a decentralized network model to tackle the challenges posed by restrictive firewalls, NAT, and the scarcity of ipv4 address space. By leveraging end-to-end encryption, the model ensures all peers within the network are fully connected, allowing services and communication to occur directly.
|
||||
This is achieved by the user of an decentralized virtual private network (VPN). A decentralized VPN is a system that uses multiple servers spread across different locations to create a secure, private network within an organization, enabling secure communication and data transfer without relying on a central server. The VPN serves as an added layer of security, shielding internal services from exposure to the open internet.
|
||||
|
||||
This network model uses a decentralized method, similar to a phonebook, that translates website names into addresses that computers understand (i.e. using mDNS), which helps improve how users interact with the network. Looking forward, for businesses, the model plans to include rules that decide who can access which parts of the network, depending on their job role.
|
||||
|
||||
<!--
|
||||
We will not add this to the initial prototype...
|
||||
|
||||
### On-boarding and communication
|
||||
|
||||
* Motivation: To help on-boarding new people to a group or to communicate within the group, the network needs some form of a communication channel.
|
||||
* Members of the group have different roles (admins, moderators)
|
||||
* Chat-ops: Bots help administrating the network, i.e. allow new peers, deploy to new applications to nodes, query health status of services, alerting/monitoring
|
||||
* For new users we also need a way to expose the chat outside of network to help them joining the network
|
||||
* For now we plan to use the Matrix protocol which gives us the following advantages:
|
||||
* End-to-end decryption and authentication
|
||||
* Decentralized rooms (multiple servers)
|
||||
* Good client support for many platforms
|
||||
* Installation
|
||||
-->
|
||||
|
||||
|
||||
### NixOS as the Operating System
|
||||
|
||||
* Motivation: Maintaining and configuring a decentralized system like cLAN with heterogeneous services on heterogeneous platforms is a challenging task. In professional setups this is usually solved by the use of configuration management. These systems require years of experience and are therefore not approchable by normal users. The solution so far to this problem is to provide instead appliances that are massivly locked in functionality or platforms they support.
|
||||
* To overcome these limitations, we propose NixOS.
|
||||
* NixOS is an operating system that uses a single declarative and consistent configuration to describe the whole system using its own programming language called Nix
|
||||
* While Nix is not necessarily more user-friendly, we believe it's still the best fit to be configured through graphical user interface for the following reasons: The underlying data structures is simple enough to be generated from a user interface / assistant. Because it's declarative unlike other many configuration management systems, different modules can be composed and applied in any order.
|
||||
* Especially in distributed setup where the adminstrator does not necessarily has physical access to the computers that require updates, NixOS provides atomic updates and rollbacks in case an update fail. We like to extend these capabilities with automatic rollbacks to make it easier to recover from a misconfiguration
|
||||
* A user can join one or multiple networks.
|
||||
* We use virtual machines (or containers) to isolate these networks.
|
||||
* A virtual machine is a software-based imitation of a physical computer. It runs its own operating system, independent of the host machine's, allowing multiple virtual mahcines with varied configurations to operate simultaneously on one physical device. Virtual machines are often used for software testing, running outdated applications, and isolating potential security threats.
|
||||
* Applications inside of virtual machines for users are preconfigured for services offered by the network
|
||||
|
||||
The Nix configuration language allows the complete configurability and modifiability of any system it is applied to, regardless of complexity and size. It is used as the basis for NixOS to create a completely reproducible operating system, where the configuration of software services running on those machines is easily shared by using small, human-readable small code snippets called "NixOS Configurations". When using Nix and NixOS, software appears out of thin air, correctly configured the way you intended, each and every time.
|
||||
|
||||
Nixpkgs is a collection of recipes, also referred to as "derivations", which allow the building, sharing and reproduction of an incredibly large set of computer software. These programs are compiled from source, which means they can be modified or sovereignly maintained. These build instructions are written in the Nix programming language.
|
||||
|
||||
Nixpkgs also defines "modules" which permit the sharing of knowledge and implementation on how to run this software correctly. The past 50 years of operating system development and best practices has been encoded in Nixpkgs by legions of contributors. Sharing of esoteric system administration knowledge, previously inaccessible and fragmented across industry experts, has been made easy due to this work.
|
||||
|
||||
From the perspective of the user, software and systems that once required years of experience to provision, can now be boiled down to a single, short Nix expression; a single line of code in most cases.
|
||||
|
||||
|
||||
### Self-hosted backup and restore
|
||||
|
||||
cLAN enables users to easily self-host and backup their data, since one of the perils of self-hosting is data loss. Users can build pre-configured servers from the interface where they also would be notified about devices not being backed up and view information about the storage device, such as available storage and state of arrays.
|
||||
|
||||
It is possible for users to back up devices in their global network, regardless of how they are connected. Services installed provided by cLAN also need to be aware of the backup process i.e. some applications, such as databases, have custom backup and restore procedures that needs to be integrated in the backup procedure.
|
||||
|
||||
|
||||
|
||||
## Components
|
||||
|
||||
<!-- source: https://cgit.lassul.us/project-x-docs/ -->
|
||||
<img width="100%" src="design-overview.drawio.png" alt="Design">
|
||||
(figure 1)
|
||||
|
||||
### Base-OS
|
||||
|
||||
Initially, we will utilize NixOS as the foundational operating system for hosting network-specific virtual machines. Presently, the installation process of NixOS involves advanced technical knowledge, including a degree of proficiency in its unique programming language. However, our solution cLAN aims to simplify this process, enabling even non-technical individuals to successfully install the system.
|
||||
|
||||
Several approaches can be considered to simplify the Base OS installation process:
|
||||
|
||||
* Quick-to-implement solutions:
|
||||
* Develop an installer that establishes a connection to a Virtual Private Network (VPN). This would enable a more proficient user or administrator to provide assistance or even conduct the installation process on behalf of the user.
|
||||
* Design an installer capable of autonomously installing the operating system when initiated, for instance, via PXE (Preboot eXecution Environment) or USB.
|
||||
|
||||
* More effort-intensive approach: Enhance the existing graphical installer to minimize the degree of technical knowledge (such as understanding of Nix) required by the user.
|
||||
|
||||
#### Flake configuration manager
|
||||
|
||||
<!-- TODO: network -->
|
||||
Our aim is to empower users to create a template for a virtual machine, essentially allowing them to define a flake.nix from an assortment of templates we offer as high-level NixOS modules through a graphical user-interface. The user-defined flake will contain several essential elements:
|
||||
|
||||
Documentation: We will provide detailed guides on how to join and communicate within the network, as well as an overview of what the network has to offer. These guides will help users navigate the network and utilize its features to their fullest potential.
|
||||
|
||||
Network joining configuration: To facilitate seamless connectivity, the flake will include configurations for Virtual Private Network (VPN), Domain Name System (DNS), and possibly bootstrap hosts. These configurations will ensure that users can easily join the network and maintain a stable connection.
|
||||
|
||||
A default nixos configuration: Upon spawning a virtual machine, a default NixOS configuration will be included, preloaded with various apps. This feature enables users to kickstart their virtual machine experience with ready-to-use applications, eliminating the need for manual installation and configuration.
|
||||
|
||||
Users will be able to establish their own networks and incorporate various features into it, such as a Git server, a shared Nextcloud instance, or automatic directory synchronization via Syncthing (see also 'Market Place' section below).
|
||||
|
||||
Ideally, we envision this functionality in the form of a web application, an Android app, and possibly a terminal-based application for power users. These platforms will cater to different user preferences, promoting a more inclusive and user-friendly experience.
|
||||
|
||||
an example flake.nix for a virtual machine network:
|
||||
|
||||
```nix
|
||||
{
|
||||
inputs.cLAN.url = "git+https://git.cLAN.com/cLAN";
|
||||
|
||||
outputs = { self, cLAN, ... }:
|
||||
{
|
||||
nixosModules = {
|
||||
default = inputs.cLAN.nixosSystem {
|
||||
imports = [
|
||||
cLAN.nixosModules.default
|
||||
];
|
||||
cLAN = {
|
||||
adminMode = "local";
|
||||
networkLayer= "yggdrasil";
|
||||
applications = {
|
||||
syncthing = {
|
||||
enable = true;
|
||||
sharedFolders = [ "/shared/docs" ];
|
||||
};
|
||||
mumbleClient.server = "mumble.cLAN";
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
||||
```
|
||||
|
||||
To build the final VM,
|
||||
This modules would be build by the VM controller into a system with the following flake.nix
|
||||
|
||||
```nix
|
||||
{
|
||||
inputs.myNetworkFlake = "git+https://somurl-where-I-can-get-flake.nix-from-above";
|
||||
|
||||
outputs = inputs:
|
||||
{
|
||||
nixosConfigurations.me = inputs.myNetworkFlake.inputs.nixpkgs.lib.nixosSystem {
|
||||
imports = [
|
||||
inputs.myNetworkFlake.nixosModules.default
|
||||
./local-overrides.nix
|
||||
];
|
||||
};
|
||||
};
|
||||
}
|
||||
```
|
||||
|
||||
|
||||
|
||||
the upper flake.nix can also be split into a boilerplate flake.nix and a json, which can be generated by a graphical interface.
|
||||
|
||||
```nix
|
||||
{
|
||||
inputs.cLAN.url = "git+https://git.cLAN.com/cLAN";
|
||||
|
||||
outputs = { self, cLAN, ... }:
|
||||
{
|
||||
nixosModules = cLAN.lib.generateNixosModules (builtins.fromJSON (import ./configs.json));
|
||||
};
|
||||
}
|
||||
```
|
||||
|
||||
configs.json
|
||||
|
||||
```json
|
||||
{
|
||||
"default": {
|
||||
"system": "x86_64-linux",
|
||||
"adminMode": "local",
|
||||
"networkLayer": "yggdrasil",
|
||||
"applications": {
|
||||
"syncthing": {
|
||||
"enable": true,
|
||||
"sharedFolders": [ "/shared/docs" ]
|
||||
},
|
||||
"mumbleClient": {
|
||||
"server": "mumble.cLAN"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
<!-- A crude example of how this interface would look like
|
||||
<img width="100%" src="flake_controller_new.png" alt="VM Manager New Network">
|
||||
-->
|
||||
|
||||
### VM Manager
|
||||
|
||||
The Base OS runs the VM Manager for monitoring and managing installed virtual machines. The VM Manager is a graphical interface that allows for various settings adjustments, such as enabling automatic updates, and the addition of new virtual machines.
|
||||
|
||||
Virtual machines are tight to a specific VPN of a particular group, and their configurations are obtained from a remotely accessible flake. A flake is a collection of Nix code that comprehensively outlines the virtual machine's configuration. Virtual machines can be built and updated based on this flake. Networks can advertise their flakes via a Uniform Resource Identifier (URI) such as `nix://https-github.com/someorg/somerepo`, `nix://ipfs-$someIpfsHash`, or `nix://ygg-$someYggAddr`. These URIs can be automatically opened in the virtual manager graphical interface on a user's system when clicked, making the process of joining a network straightforward and efficient.
|
||||
|
||||
If a user intends to join only a single network and their hardware capabilities are limited, an alternative to consider would be to forego the use of a virtual machine. Instead, the network configuration could be integrated directly into the Base-OS to optimize performance and enhance the user experience.
|
||||
|
||||
<img width="100%" src="proxmox.png" alt="Proxmox">
|
||||
|
||||
The interface to the VM-manager for network admins is very similiar to the proxmox interface used for managing multiple VM nodes. Showing a list of networks and corresponding VMs on the left with a detail view and monitoring/log stats in the middle. Information and Interaction with the target system is provided by the Controller described in the next section.
|
||||
|
||||
### Virtual machine controller
|
||||
|
||||
<img width="100%" src="vm-controller.drawio.png" alt="Controller">
|
||||
(figure 2)
|
||||
|
||||
The Virtual Machine (VM) Manager operates on the Base OS, while the VM Controller functions within the virtual machine itself. The latter's role is to regulate the operating system within the VM, and can be managed by either the network administrator or the local user in control of the Base OS. Here are the different modes of control:
|
||||
|
||||
* Remote Control: The network administrator can remotely access the machine using SSH. There's also a user-friendly interface for adjusting configuration settings, viewing computer statistics, or initiating a rebuild.
|
||||
* Local Control: The network administrator sets up a flake which outlines the default services, like VPN and default applications. The local administrator, with root access, can then deploy their services, such as nginx, nextcloud etc., which are integrated with the defaults provided by the flake.
|
||||
* Shared Control: Both the network and local administrators have complete access. While the local user can modify options defined by the flake.nix, either administrator can revoke these changes.
|
||||
|
||||
In order to appeal to a wider audience beyond those already familiar with Nix/NixOS, we're suggesting the development of an easy-to-understand graphical interface. This interface will simplify the use of NixOS modules, provide vital monitoring and debugging information, and enable users to manage their individual virtual machines and NixOS installations more effectively.
|
||||
|
||||
### Market place
|
||||
|
||||
* There is some kind of store/market place where people can publish their flakes/networks
|
||||
* Their source code will reside in their own repo, we might want some mirror (ipfs) in case their infrastructure goes down
|
||||
* Donation/subscription fees for maintaining and creating flakes
|
||||
|
||||
|
||||
### Private network
|
||||
|
||||
* Adding a VPN should be the default for every flake.nix created by the wizard so people can easily communicate with each other and not care about extensive firewalling/ACLS/port forwarding etc. We can support different technologies like wireguard, tinc, yggdrasil, zerotier etc. Different higher level modules have to be created for that.
|
||||
|
||||
### Integration into baseOS window manager
|
||||
|
||||
* We want an integration with the i3/sway window manager where every workspace is it's own VM. At a later point we also want integration for a more common stacking WM (like Gnome).
|
||||
|
||||
## Security
|
||||
|
||||
The flake.nix describes a system which runs inside a virtual machine. It is evaluated on the system which then builds a virtual machine out of it via Nix. This way there is no interaction with the root operating system, except through the nix-daemon.
|
||||
At a later point we can also build containers with the same system and have shared memory, gpu access and generally less overhead. Although additional safety measures have to be implemented for that.
|
||||
|
||||
In this section we discuss security threats and how we design the system to mitigate those.
|
||||
|
||||
### Threat-model and mitigations
|
||||
|
||||
Our threat model is based on the potential risks from various adversaries, each of which are outlined below:
|
||||
|
||||
* Malicious flakes/administrators: This includes individuals or entities with administrative privileges who intentionally act against the interests of the network users. They could manipulate configurations, grant unauthorized access, or misuse sensitive information.
|
||||
Our safeguards will include virtual machine isolation to mitigate the damage an malicious actor can do to the target system. Malicious admins/flakes can only affect the virtual machine but not the Base OS or other virtual machines from other networks. Since the configuration is based on Nix, more experienced users can review it prior to building. This makes the system more auditable compared to a binary distribution, where only ready built packages are downloaded.
|
||||
|
||||
* Malicious members in the network: These are network participants who may attempt to disrupt services, steal sensitive data, or exploit vulnerabilities. To counter this, we will implement methods for administrators to block/remove malicious actors from the network. As a long-term goal, business-oriented setups will include access control measures to regulate network access based on user roles.
|
||||
|
||||
* Attackers from outside the network: These are external entities trying to infiltrate the network to gain unauthorized access or disrupt the network's operations. These are locked outside access to the system by the VPN technology we use. Since there is no way for outside attackers to even reach a virtual machine, they are considered safe for all intents and purposes from outside attackers.
|
||||
* For attempts at lateral movement (i.e., the process of progressing through a network, system by system, in search of valuable data or to cause disruption), we will provide a default configuration for software we ship which we consider safe or hardened, to make it more difficult for an attacker to gain access to multiple systems.
|
||||
|
||||
* Mis-configuration: This refers to inadvertent errors in the setup or configuration of the network that can inadvertently expose it to risks.
|
||||
To address this, we only offer a limited set of options in our high-level modules, which either restrict or issue warnings for configurations deemed to be unsafe.
|
||||
For instance, services are exposed exclusively to the internal network and not to the wider internet, thereby offering an extra layer of security.
|
||||
|
||||
|
||||
### Trusted compute base
|
||||
|
||||
The Trusted Compute Base (TCB) refers to the core set of security-critical elements in a computing system, such as the operating system kernel, hardware, and certain crucial applications. The integrity and reliability of the TCB are vital to the security of the whole system.
|
||||
|
||||
In our case, the TCB encompasses the following key components:
|
||||
|
||||
* The underlying VPN: This crucial part of our TCB provides a secure communication channel between different peers within the network. By encrypting all data that passes through it, the VPN ensures confidentiality and integrity of communications, thus safeguarding against eavesdropping or data tampering attempts.
|
||||
|
||||
* The Hypervisor: Acting as the foundation for our virtual machines, the hypervisor manages and separates different networks, isolating them from one another. This prevents any potential cross-contamination or attacks between virtual machines, preserving the integrity and security of each separate network.
|
||||
|
||||
* Nix Sandbox Isolation: This provides a safe way to build virtual machines, binaries, etc. in an isolated environment from the operating system. With this we can utilize the native speed of the Base OS for building the OS that runs inside the virtual machines.
|
@ -1,70 +0,0 @@
|
||||
<mxfile host="app.diagrams.net" modified="2024-01-05T12:59:03.492Z" agent="Mozilla/5.0 (X11; Linux x86_64; rv:107.0) Gecko/20100101 Firefox/107.0" etag="nRfnfGWJctDRxy5wXqNq" version="22.1.16" type="device">
|
||||
<diagram name="Page-1" id="GEtNjjdXVUXUiFOQShyp">
|
||||
<mxGraphModel dx="1818" dy="1012" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="850" pageHeight="1100" math="0" shadow="0">
|
||||
<root>
|
||||
<mxCell id="0" />
|
||||
<mxCell id="1" parent="0" />
|
||||
<mxCell id="ilsiUmANOehLyqSuM1yz-1" value="" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;" vertex="1" parent="1">
|
||||
<mxGeometry x="185" y="10" width="430" height="430" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="ilsiUmANOehLyqSuM1yz-7" value="" style="group" vertex="1" connectable="0" parent="1">
|
||||
<mxGeometry x="40" y="30" width="130" height="130" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="ilsiUmANOehLyqSuM1yz-6" value="" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;" vertex="1" parent="ilsiUmANOehLyqSuM1yz-7">
|
||||
<mxGeometry width="130" height="130" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="ilsiUmANOehLyqSuM1yz-2" value="" style="fontColor=#0066CC;verticalAlign=top;verticalLabelPosition=bottom;labelPosition=center;align=center;html=1;outlineConnect=0;fillColor=#CCCCCC;strokeColor=#6881B3;gradientColor=none;gradientDirection=north;strokeWidth=2;shape=mxgraph.networks.security_camera;" vertex="1" parent="ilsiUmANOehLyqSuM1yz-7">
|
||||
<mxGeometry x="15" y="25" width="100" height="80" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="ilsiUmANOehLyqSuM1yz-3" value="" style="endArrow=none;html=1;rounded=0;strokeWidth=6;fillColor=#f8cecc;strokeColor=#e01b24;exitX=0;exitY=1;exitDx=0;exitDy=0;entryX=1;entryY=0;entryDx=0;entryDy=0;" edge="1" parent="ilsiUmANOehLyqSuM1yz-7" source="ilsiUmANOehLyqSuM1yz-6" target="ilsiUmANOehLyqSuM1yz-6">
|
||||
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||
<mxPoint x="-270" y="120" as="sourcePoint" />
|
||||
<mxPoint x="-150" y="30" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="ilsiUmANOehLyqSuM1yz-9" value="" style="verticalLabelPosition=bottom;html=1;verticalAlign=top;align=center;strokeColor=none;fillColor=#00BEF2;shape=mxgraph.azure.computer;pointerEvents=1;" vertex="1" parent="1">
|
||||
<mxGeometry x="270" y="120" width="88.89" height="80" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="ilsiUmANOehLyqSuM1yz-10" value="" style="verticalLabelPosition=bottom;html=1;verticalAlign=top;align=center;strokeColor=none;fillColor=#00BEF2;shape=mxgraph.azure.computer;pointerEvents=1;" vertex="1" parent="1">
|
||||
<mxGeometry x="355.55" y="290" width="88.89" height="80" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="ilsiUmANOehLyqSuM1yz-11" value="" style="verticalLabelPosition=bottom;html=1;verticalAlign=top;align=center;strokeColor=none;fillColor=#00BEF2;shape=mxgraph.azure.computer;pointerEvents=1;" vertex="1" parent="1">
|
||||
<mxGeometry x="440" y="120" width="88.89" height="80" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="ilsiUmANOehLyqSuM1yz-12" value="" style="endArrow=classic;startArrow=classic;html=1;rounded=0;entryX=0.5;entryY=1;entryDx=0;entryDy=0;entryPerimeter=0;exitX=0.281;exitY=0;exitDx=0;exitDy=0;exitPerimeter=0;" edge="1" parent="1" source="ilsiUmANOehLyqSuM1yz-10" target="ilsiUmANOehLyqSuM1yz-9">
|
||||
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||
<mxPoint x="280" y="320" as="sourcePoint" />
|
||||
<mxPoint x="330" y="270" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="ilsiUmANOehLyqSuM1yz-13" value="" style="endArrow=classic;startArrow=classic;html=1;rounded=0;entryX=0.5;entryY=1;entryDx=0;entryDy=0;entryPerimeter=0;exitX=0.686;exitY=0;exitDx=0;exitDy=0;exitPerimeter=0;" edge="1" parent="1" source="ilsiUmANOehLyqSuM1yz-10" target="ilsiUmANOehLyqSuM1yz-11">
|
||||
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||
<mxPoint x="421" y="354" as="sourcePoint" />
|
||||
<mxPoint x="344" y="210" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="ilsiUmANOehLyqSuM1yz-14" value="" style="endArrow=classic;startArrow=classic;html=1;rounded=0;entryX=1;entryY=0.5;entryDx=0;entryDy=0;entryPerimeter=0;exitX=0;exitY=0.5;exitDx=0;exitDy=0;exitPerimeter=0;" edge="1" parent="1" source="ilsiUmANOehLyqSuM1yz-11" target="ilsiUmANOehLyqSuM1yz-9">
|
||||
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||
<mxPoint x="395" y="350" as="sourcePoint" />
|
||||
<mxPoint x="344" y="210" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="ilsiUmANOehLyqSuM1yz-15" value="<div><font style="font-size: 19px;">cLAN<br></font></div>" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=19;fontStyle=1" vertex="1" parent="1">
|
||||
<mxGeometry x="370" y="60" width="60" height="30" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="ilsiUmANOehLyqSuM1yz-16" value="<font style="font-size: 19px;">Mesh-VPN</font>" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="1">
|
||||
<mxGeometry x="270" y="200" width="260" height="30" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="ilsiUmANOehLyqSuM1yz-18" value="<font style="font-size: 18px;">Machine</font>" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="1">
|
||||
<mxGeometry x="284.45" y="140" width="60" height="30" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="ilsiUmANOehLyqSuM1yz-19" value="<font style="font-size: 18px;">Machine</font>" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="1">
|
||||
<mxGeometry x="454.45000000000005" y="140" width="60" height="30" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="ilsiUmANOehLyqSuM1yz-20" value="<font style="font-size: 18px;">Machine</font>" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="1">
|
||||
<mxGeometry x="370" y="310" width="60" height="30" as="geometry" />
|
||||
</mxCell>
|
||||
</root>
|
||||
</mxGraphModel>
|
||||
</diagram>
|
||||
</mxfile>
|
Before Width: | Height: | Size: 50 KiB |
Before Width: | Height: | Size: 140 KiB |
@ -1,34 +0,0 @@
|
||||
<mxfile host="app.diagrams.net" modified="2024-01-05T13:13:17.175Z" agent="Mozilla/5.0 (X11; Linux x86_64; rv:107.0) Gecko/20100101 Firefox/107.0" etag="3DFXX_tJUOXZw0FaTeN-" version="22.1.16" type="device">
|
||||
<diagram name="Page-1" id="tz5SLeF9hT5f3y39BwH8">
|
||||
<mxGraphModel dx="1434" dy="842" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="850" pageHeight="1100" math="0" shadow="0">
|
||||
<root>
|
||||
<mxCell id="0" />
|
||||
<mxCell id="1" parent="0" />
|
||||
<mxCell id="trWwFmtepQNAlSAXFZ74-7" value="" style="group" vertex="1" connectable="0" parent="1">
|
||||
<mxGeometry x="850" y="110" width="540" height="380.00000000000006" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="trWwFmtepQNAlSAXFZ74-8" value="" style="verticalLabelPosition=bottom;html=1;verticalAlign=top;align=center;strokeColor=none;fillColor=#00BEF2;shape=mxgraph.azure.laptop;pointerEvents=1;" vertex="1" parent="trWwFmtepQNAlSAXFZ74-7">
|
||||
<mxGeometry x="-4" width="540" height="380.00000000000006" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="trWwFmtepQNAlSAXFZ74-9" value="<div><font style="font-size: 20px;">Virtual machine</font></div>" style="swimlane;whiteSpace=wrap;html=1;" vertex="1" parent="trWwFmtepQNAlSAXFZ74-7">
|
||||
<mxGeometry x="86" y="30.4" width="360" height="129.6" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="trWwFmtepQNAlSAXFZ74-13" value="<div>Linux or MacOS</div>" style="vsdxID=12;fillColor=#0050ef;shape=stencil(nZBLDoAgDERP0z3SIyjew0SURgSD+Lu9kMZoXLhwN9O+tukAlrNpJg1SzDH4QW/URgNYgZTkjA4UkwJUgGXng+6DX1zLfmoymdXo17xh5zmRJ6Q42BWCfc2oJfdAr+Yv+AP9Cb7OJ3H/2JG1HNGz/84klThPVCc=);strokeColor=#001DBC;strokeWidth=3;labelBackgroundColor=none;rounded=0;html=1;whiteSpace=wrap;fontColor=#ffffff;fontSize=28;" vertex="1" parent="trWwFmtepQNAlSAXFZ74-7">
|
||||
<mxGeometry x="86" y="230" width="360" height="46.2" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="trWwFmtepQNAlSAXFZ74-10" value="" style="group" vertex="1" connectable="0" parent="trWwFmtepQNAlSAXFZ74-7">
|
||||
<mxGeometry x="101" y="60" width="330" height="36.2" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="trWwFmtepQNAlSAXFZ74-11" value="<font style="font-size: 20px;"><b>App</b></font>" style="vsdxID=12;fillColor=#0050ef;shape=stencil(nZBLDoAgDERP0z3SIyjew0SURgSD+Lu9kMZoXLhwN9O+tukAlrNpJg1SzDH4QW/URgNYgZTkjA4UkwJUgGXng+6DX1zLfmoymdXo17xh5zmRJ6Q42BWCfc2oJfdAr+Yv+AP9Cb7OJ3H/2JG1HNGz/84klThPVCc=);strokeColor=#001DBC;strokeWidth=3;labelBackgroundColor=none;rounded=0;html=1;whiteSpace=wrap;fontColor=#ffffff;" vertex="1" parent="trWwFmtepQNAlSAXFZ74-10">
|
||||
<mxGeometry width="330" height="36.199999999999996" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="trWwFmtepQNAlSAXFZ74-14" value="<div>QEMU</div>" style="vsdxID=12;fillColor=#0050ef;shape=stencil(nZBLDoAgDERP0z3SIyjew0SURgSD+Lu9kMZoXLhwN9O+tukAlrNpJg1SzDH4QW/URgNYgZTkjA4UkwJUgGXng+6DX1zLfmoymdXo17xh5zmRJ6Q42BWCfc2oJfdAr+Yv+AP9Cb7OJ3H/2JG1HNGz/84klThPVCc=);strokeColor=#001DBC;strokeWidth=3;labelBackgroundColor=none;rounded=0;html=1;whiteSpace=wrap;fontColor=#ffffff;fontSize=28;" vertex="1" parent="trWwFmtepQNAlSAXFZ74-7">
|
||||
<mxGeometry x="86" y="170" width="360" height="46.2" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="trWwFmtepQNAlSAXFZ74-15" value="<div>NixOS</div>" style="vsdxID=12;fillColor=#0050ef;shape=stencil(nZBLDoAgDERP0z3SIyjew0SURgSD+Lu9kMZoXLhwN9O+tukAlrNpJg1SzDH4QW/URgNYgZTkjA4UkwJUgGXng+6DX1zLfmoymdXo17xh5zmRJ6Q42BWCfc2oJfdAr+Yv+AP9Cb7OJ3H/2JG1HNGz/84klThPVCc=);strokeColor=#001DBC;strokeWidth=3;labelBackgroundColor=none;rounded=0;html=1;whiteSpace=wrap;fontColor=#ffffff;fontSize=28;" vertex="1" parent="trWwFmtepQNAlSAXFZ74-7">
|
||||
<mxGeometry x="101" y="110" width="330" height="36.2" as="geometry" />
|
||||
</mxCell>
|
||||
</root>
|
||||
</mxGraphModel>
|
||||
</diagram>
|
||||
</mxfile>
|
Before Width: | Height: | Size: 29 KiB |
@ -1,82 +0,0 @@
|
||||
<mxfile host="app.diagrams.net" modified="2023-06-25T10:07:27.291Z" agent="Mozilla/5.0 (X11; Linux x86_64; rv:107.0) Gecko/20100101 Firefox/107.0" etag="0R5u8sYTEL2zQsEBPwp4" version="21.5.0" type="device">
|
||||
<diagram name="Page-1" id="Page-1">
|
||||
<mxGraphModel dx="774" dy="506" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="850" pageHeight="1100" math="0" shadow="0">
|
||||
<root>
|
||||
<mxCell id="0" />
|
||||
<mxCell id="1" value="Connector" parent="0" />
|
||||
<mxCell id="r0mgfz6IdKgSaTeHQ_le-42" value="" style="group" parent="1" vertex="1" connectable="0">
|
||||
<mxGeometry x="578" y="810" width="709" height="251" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="b6oYJSDJwjR9OZKanJwb-46" value="" style="rounded=1;whiteSpace=wrap;html=1;hachureGap=4;pointerEvents=0;strokeWidth=2;" parent="r0mgfz6IdKgSaTeHQ_le-42" vertex="1">
|
||||
<mxGeometry x="119" y="-30" width="590" height="281" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="eZtIASL5zvcn_9goES__-36" value="<h2>VM Manager<br></h2>" style="vsdxID=14;fillColor=#0050ef;shape=stencil(nZBLDoAgDERP0z3SIyjew0SURgSD+Lu9kMZoXLhwN9O+tukAlrNpJg1SzDH4QW/URgNYgZTkjA4UkwJUgGXng+6DX1zLfmoymdXo17xh5zmRJ6Q42BWCfc2oJfdAr+Yv+AP9Cb7OJ3H/2JG1HNGz/84klThPVCc=);strokeColor=#001DBC;strokeWidth=3;labelBackgroundColor=none;rounded=0;html=1;whiteSpace=wrap;fontColor=#ffffff;" parent="r0mgfz6IdKgSaTeHQ_le-42" vertex="1">
|
||||
<mxGeometry x="514" y="85.53000000000011" width="181" height="49.95" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="eZtIASL5zvcn_9goES__-38" style="vsdxID=48;edgeStyle=none;startArrow=none;endArrow=classic;startSize=5;endSize=5;strokeWidth=3;strokeColor=#000000;spacingTop=0;spacingBottom=0;spacingLeft=0;spacingRight=0;verticalAlign=middle;html=1;labelBackgroundColor=#ffffff;rounded=0;entryX=0.996;entryY=0.504;entryDx=0;entryDy=0;entryPerimeter=0;exitX=0.005;exitY=0.5;exitDx=0;exitDy=0;exitPerimeter=0;startFill=0;endFill=1;" parent="r0mgfz6IdKgSaTeHQ_le-42" edge="1" target="5" source="eZtIASL5zvcn_9goES__-36">
|
||||
<mxGeometry relative="1" as="geometry">
|
||||
<mxPoint x="499" y="50.60557768924302" as="sourcePoint" />
|
||||
<mxPoint x="520" y="-180" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="mQ3fhrx0b4LYlkQwnVk3-25" value="" style="group" vertex="1" connectable="0" parent="r0mgfz6IdKgSaTeHQ_le-42">
|
||||
<mxGeometry x="153" y="-0.754999999999896" width="321" height="222.51999999999998" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="5" value="" style="verticalAlign=middle;align=center;vsdxID=5;shape=stencil(nZBLDoAgDERP0z3SIyjew0SURgSD+Lu9kMZoXLhwN9O+tukAlrNpJg1SzDH4QW/URgNYgZTkjA4UkwJUgGXng+6DX1zLfmoymdXo17xh5zmRJ6Q42BWCfc2oJfdAr+Yv+AP9Cb7OJ3H/2JG1HNGz/84klThPVCc=);strokeWidth=2;labelBackgroundColor=none;rounded=0;html=1;whiteSpace=wrap;" parent="mQ3fhrx0b4LYlkQwnVk3-25" vertex="1">
|
||||
<mxGeometry width="320" height="222.52" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="14" value="<font data-darkreader-inline-color="" style="font-size: 22px; font-family: &quot;calibri&quot;; color: rgb(0, 0, 0); direction: ltr; letter-spacing: 0px; line-height: 120%; opacity: 1; --darkreader-inline-color: #e8e6e3;"><font style="font-size: 28px">VM<br></font></font>" style="verticalAlign=middle;align=center;vsdxID=19;fillColor=none;gradientColor=none;shape=stencil(nZBLDoAgDERP0z3SIyjew0SURgSD+Lu9kMZoXLhwN9O+tukAlrNpJg1SzDH4QW/URgNYgZTkjA4UkwJUgGXng+6DX1zLfmoymdXo17xh5zmRJ6Q42BWCfc2oJfdAr+Yv+AP9Cb7OJ3H/2JG1HNGz/84klThPVCc=);strokeColor=none;labelBackgroundColor=none;rounded=0;html=1;whiteSpace=wrap;" parent="mQ3fhrx0b4LYlkQwnVk3-25" vertex="1">
|
||||
<mxGeometry x="1" y="140.9223306772907" width="320" height="59.33466135458167" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="eZtIASL5zvcn_9goES__-33" value="<h2>Controller Daemon</h2>" style="vsdxID=12;fillColor=#0050ef;shape=stencil(nZBLDoAgDERP0z3SIyjew0SURgSD+Lu9kMZoXLhwN9O+tukAlrNpJg1SzDH4QW/URgNYgZTkjA4UkwJUgGXng+6DX1zLfmoymdXo17xh5zmRJ6Q42BWCfc2oJfdAr+Yv+AP9Cb7OJ3H/2JG1HNGz/84klThPVCc=);strokeColor=#001DBC;strokeWidth=3;labelBackgroundColor=none;rounded=0;html=1;whiteSpace=wrap;fontColor=#ffffff;" parent="mQ3fhrx0b4LYlkQwnVk3-25" vertex="1">
|
||||
<mxGeometry x="30" y="92.02499999999989" width="260" height="48.9" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="mQ3fhrx0b4LYlkQwnVk3-18" value="<h2>Controller Frontend<br></h2>" style="vsdxID=12;fillColor=#0050ef;shape=stencil(nZBLDoAgDERP0z3SIyjew0SURgSD+Lu9kMZoXLhwN9O+tukAlrNpJg1SzDH4QW/URgNYgZTkjA4UkwJUgGXng+6DX1zLfmoymdXo17xh5zmRJ6Q42BWCfc2oJfdAr+Yv+AP9Cb7OJ3H/2JG1HNGz/84klThPVCc=);strokeColor=#001DBC;strokeWidth=3;labelBackgroundColor=none;rounded=0;html=1;whiteSpace=wrap;fontColor=#ffffff;" vertex="1" parent="mQ3fhrx0b4LYlkQwnVk3-25">
|
||||
<mxGeometry x="150" y="33.1" width="140" height="49.95" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="mQ3fhrx0b4LYlkQwnVk3-31" value="<font style="font-size: 28px;" face="calibri">(optional)</font>" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="r0mgfz6IdKgSaTeHQ_le-42">
|
||||
<mxGeometry x="562" y="20" width="60" height="30" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="mQ3fhrx0b4LYlkQwnVk3-16" value="" style="endArrow=classic;html=1;rounded=0;entryX=0.525;entryY=0.02;entryDx=0;entryDy=0;entryPerimeter=0;strokeWidth=3;" edge="1" parent="1" source="mQ3fhrx0b4LYlkQwnVk3-21" target="mQ3fhrx0b4LYlkQwnVk3-18">
|
||||
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||
<mxPoint x="891.4057853270601" y="471.9920318725103" as="sourcePoint" />
|
||||
<mxPoint x="650" y="530" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="mQ3fhrx0b4LYlkQwnVk3-21" value="<font style="font-size: 28px;" face="calibri">Admin</font>" style="ellipse;whiteSpace=wrap;html=1;" vertex="1" parent="1">
|
||||
<mxGeometry x="896" y="420" width="120" height="80" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="15" value="<font data-darkreader-inline-color="" style="font-size: 28px; font-family: Calibri; color: rgb(0, 0, 0); direction: ltr; letter-spacing: 0px; line-height: 120%; opacity: 1; --darkreader-inline-color: #e8e6e3;">Server<br></font>" style="verticalAlign=middle;align=center;vsdxID=20;fillColor=none;gradientColor=none;shape=stencil(nZBLDoAgDERP0z3SIyjew0SURgSD+Lu9kMZoXLhwN9O+tukAlrNpJg1SzDH4QW/URgNYgZTkjA4UkwJUgGXng+6DX1zLfmoymdXo17xh5zmRJ6Q42BWCfc2oJfdAr+Yv+AP9Cb7OJ3H/2JG1HNGz/84klThPVCc=);strokeColor=none;labelBackgroundColor=none;rounded=0;html=1;whiteSpace=wrap;" parent="1" vertex="1">
|
||||
<mxGeometry x="1300" y="919.9973306772908" width="125" height="59.33466135458167" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="mQ3fhrx0b4LYlkQwnVk3-24" value="<font style="font-size: 28px;" face="calibri" color="#000000">User</font>" style="ellipse;whiteSpace=wrap;html=1;fillColor=default;fontColor=#FFFFFF;" vertex="1" parent="1">
|
||||
<mxGeometry x="1305" y="831" width="120" height="80" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="mQ3fhrx0b4LYlkQwnVk3-26" value="" style="endArrow=classic;html=1;rounded=0;entryX=1.008;entryY=0.557;entryDx=0;entryDy=0;entryPerimeter=0;strokeWidth=3;exitX=0;exitY=0.5;exitDx=0;exitDy=0;fillColor=#f5f5f5;strokeColor=#666666;" edge="1" parent="1" source="mQ3fhrx0b4LYlkQwnVk3-24" target="mQ3fhrx0b4LYlkQwnVk3-18">
|
||||
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||
<mxPoint x="910" y="530" as="sourcePoint" />
|
||||
<mxPoint x="907" y="853" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="mQ3fhrx0b4LYlkQwnVk3-27" value="<h2>Controller cli<br></h2>" style="vsdxID=12;fillColor=#0050ef;shape=stencil(nZBLDoAgDERP0z3SIyjew0SURgSD+Lu9kMZoXLhwN9O+tukAlrNpJg1SzDH4QW/URgNYgZTkjA4UkwJUgGXng+6DX1zLfmoymdXo17xh5zmRJ6Q42BWCfc2oJfdAr+Yv+AP9Cb7OJ3H/2JG1HNGz/84klThPVCc=);strokeColor=#001DBC;strokeWidth=3;labelBackgroundColor=none;rounded=0;html=1;whiteSpace=wrap;fontColor=#ffffff;" vertex="1" parent="1">
|
||||
<mxGeometry x="744" y="509.9950000000001" width="140" height="49.95" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="mQ3fhrx0b4LYlkQwnVk3-28" value="" style="endArrow=classic;html=1;rounded=0;entryX=0.203;entryY=0.071;entryDx=0;entryDy=0;entryPerimeter=0;strokeWidth=3;" edge="1" parent="1" source="mQ3fhrx0b4LYlkQwnVk3-27" target="eZtIASL5zvcn_9goES__-33">
|
||||
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||
<mxPoint x="961" y="530" as="sourcePoint" />
|
||||
<mxPoint x="965" y="853" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="r0mgfz6IdKgSaTeHQ_le-33" value="<font style="font-size: 24px;">VPN Mesh network</font>" style="ellipse;shape=cloud;whiteSpace=wrap;html=1;" parent="1" vertex="1">
|
||||
<mxGeometry x="720" y="550" width="320" height="240" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="mQ3fhrx0b4LYlkQwnVk3-30" value="" style="endArrow=classic;html=1;rounded=0;entryX=0.992;entryY=0.492;entryDx=0;entryDy=0;entryPerimeter=0;exitX=0.5;exitY=1;exitDx=0;exitDy=0;strokeWidth=3;" edge="1" parent="1" source="mQ3fhrx0b4LYlkQwnVk3-21" target="mQ3fhrx0b4LYlkQwnVk3-27">
|
||||
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||
<mxPoint x="950" y="520" as="sourcePoint" />
|
||||
<mxPoint x="970" y="540" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
</root>
|
||||
</mxGraphModel>
|
||||
</diagram>
|
||||
</mxfile>
|
Before Width: | Height: | Size: 74 KiB |
@ -1,42 +0,0 @@
|
||||
+++
|
||||
title = "The Vision"
|
||||
description = "The General Vision of this Project"
|
||||
date = 2021-05-01T19:30:00+00:00
|
||||
updated = 2021-05-01T19:30:00+00:00
|
||||
draft = false
|
||||
weight = 30
|
||||
sort_by = "weight"
|
||||
paginator.next = "docs/overview/index.md"
|
||||
template = "docs/page.html"
|
||||
+++
|
||||
|
||||
|
||||
In this context, our vision defines how we envision the behavior of the final product and how users will interact with it. cLAN aims to offer a compelling alternative to the ever-increasing centralization of the internet.
|
||||
|
||||
### Decentralized Networking
|
||||
|
||||
Instead of relying on a centralized cloud accessible via the clearnet, our objective is to establish an encrypted network of interconnected computers, essentially creating a decentralized darknet, which we affectionately call a cLAN.
|
||||
|
||||
### Seamless Onboarding
|
||||
|
||||
Our vision includes providing users with a seamless experience when they join one or multiple cLANs through invitation links. Clicking the link will trigger a popup that seeks confirmation to connect to the network.
|
||||
|
||||
### Effortless VM Integration
|
||||
|
||||
During the joining process, the user's computer (referred to as the client hereafter) will download a file containing information about a virtual machine (VM). The client will then automatically set up the VM, and once complete, this VM will become part of the cLAN.
|
||||
|
||||
Users can also choose to seamlessly integrate the cLAN configuration into their base system, effectively allowing the cLAN admin(s) to remotely manage their system.
|
||||
|
||||
### Dashboard for Services
|
||||
|
||||
Once connected, users will have access to a dashboard displaying all the services offered within this specific cLAN. Within this dashboard, users can effortlessly add applications or decide to host services for fellow cLAN members, such as a Nextcloud instance or backup endpoints.
|
||||
|
||||
### Decentralization and Redundancy
|
||||
|
||||
The core idea is to ensure service decentralization without a single point of failure. If one service fails, another machine within the cLAN network can spin up a replacement service. VMs are designed to be lightweight, minimizing resource consumption.
|
||||
|
||||
### Administrative Control
|
||||
|
||||
Within a cLAN, administrators define the configuration file and have control over who becomes part of the network.
|
||||
|
||||
Go to [Technical Overview](@/docs/overview/index.md) to see more indepth details of our work.
|
@ -1,27 +0,0 @@
|
||||
+++
|
||||
title = "Privacy Policy"
|
||||
description = "We do not use cookies and we do not collect any personal data."
|
||||
date = 2021-05-01T08:00:00+00:00
|
||||
updated = 2020-05-01T08:00:00+00:00
|
||||
draft = false
|
||||
|
||||
[extra]
|
||||
class = "page single"
|
||||
+++
|
||||
|
||||
__TLDR__: We do not use cookies and we do not collect any personal data.
|
||||
|
||||
## Website visitors
|
||||
|
||||
- No personal information is collected.
|
||||
- No information is stored in the browser.
|
||||
- No information is shared with, sent to or sold to third-parties.
|
||||
- No information is shared with advertising companies.
|
||||
- No information is mined and harvested for personal and behavioral trends.
|
||||
- No information is monetized.
|
||||
|
||||
## Contact us
|
||||
|
||||
[Contact us](mailto:admin@clan.lol) if you have any questions.
|
||||
|
||||
Effective Date: _4th July 2023_
|
@ -5,7 +5,7 @@
|
||||
self',
|
||||
...
|
||||
}: let
|
||||
deployScript = pkgs.writeScript "deploy.sh" ''
|
||||
deployScript = pkgs.writeShellScript "deploy.sh" ''
|
||||
export PATH="${lib.makeBinPath [
|
||||
pkgs.coreutils
|
||||
pkgs.openssh
|
||||
@ -23,7 +23,7 @@
|
||||
rsync \
|
||||
-e "ssh -o StrictHostKeyChecking=no $sshExtraArgs" \
|
||||
-a ${self'.packages.default}/ \
|
||||
www@clan.lol:/var/www
|
||||
www@clan.lol:/var/www/clan.lol
|
||||
|
||||
if [ -e ./ssh_key ]; then
|
||||
rm ./ssh_key
|
||||
|
@ -8,12 +8,10 @@
|
||||
}: {
|
||||
devShells.default = pkgs.mkShell {
|
||||
packages = [
|
||||
pkgs.bashInteractive
|
||||
pkgs.zola
|
||||
];
|
||||
inputsFrom = [
|
||||
inputs'.clan-core.devShells.default
|
||||
];
|
||||
shellHook = ''
|
||||
ln -snf "$PWD"/static "$PWD"/website/static
|
||||
'';
|
||||
};
|
||||
};
|
||||
}
|
||||
|
@ -1,41 +0,0 @@
|
||||
{
|
||||
perSystem = {
|
||||
lib,
|
||||
pkgs,
|
||||
self',
|
||||
...
|
||||
}: {
|
||||
apps.new-post.program = builtins.toString (pkgs.writeShellScript "new-post.sh" ''
|
||||
export PATH="${lib.makeBinPath [
|
||||
pkgs.coreutils pkgs.gitMinimal
|
||||
]}"
|
||||
if [ -z "$1" ]; then
|
||||
echo "Usage: new-post.sh <title>"
|
||||
exit 1
|
||||
fi
|
||||
title=$(echo "$1" | tr '[:upper:]' '[:lower:]' | tr ' ' '-')
|
||||
root=$(git rev-parse --show-toplevel)
|
||||
fname="$root/content/blog/$(date +%Y-%m-%d)-$title.md"
|
||||
if [ -f "$fname" ]; then
|
||||
echo "File already exists: $fname"
|
||||
exit 1
|
||||
fi
|
||||
cat <<EOF > "$fname"
|
||||
+++
|
||||
title = "$1"
|
||||
date = "$(date --iso-8601=seconds)"
|
||||
draft = true
|
||||
template = "blog/page.html"
|
||||
[taxonomies]
|
||||
authors = [] # TODO
|
||||
[extra]
|
||||
lead = "Some lead"
|
||||
+++
|
||||
|
||||
Some text
|
||||
EOF
|
||||
echo "Created $fname"
|
||||
git add "$fname"
|
||||
'');
|
||||
};
|
||||
}
|
@ -1,67 +1,34 @@
|
||||
{ self, ... }:
|
||||
{
|
||||
self,
|
||||
inputs,
|
||||
...
|
||||
}: {
|
||||
perSystem = {
|
||||
lib,
|
||||
pkgs,
|
||||
self',
|
||||
...
|
||||
}: let
|
||||
build = baseUrl: pkgs.runCommand "website" {
|
||||
buildInputs = [ pkgs.zola ];
|
||||
} ''
|
||||
mkdir -p $out
|
||||
cp -r ${self}/* .
|
||||
chmod -R u+w .
|
||||
perSystem =
|
||||
{
|
||||
lib,
|
||||
pkgs,
|
||||
self',
|
||||
inputs',
|
||||
...
|
||||
}:
|
||||
let
|
||||
build =
|
||||
baseUrl:
|
||||
pkgs.runCommand "website" { buildInputs = [ ]; } ''
|
||||
mkdir -p $out
|
||||
cp -r ${self}/* .
|
||||
chmod -R u+w .
|
||||
|
||||
substituteInPlace config.toml --replace \
|
||||
'base_url = "https://clan.lol"' \
|
||||
'base_url = "${baseUrl}"' \
|
||||
|
||||
# generates a zola compatible .md from a clan-core/docs/**/*.md
|
||||
generatePage() {
|
||||
local sourceFile="$1"
|
||||
local targetFile="$2"
|
||||
|
||||
# generate title by reading first non-empty line of $file and stripping all '#' symbols
|
||||
title=$(sed -n '/./{p;q}' "$sourceFile" | sed 's/#*//g')
|
||||
echo "generating page from clan-core: $title"
|
||||
|
||||
# generate header with title, template, weight to make zola happy
|
||||
echo -e "+++\ntitle = \"$title\"\ntemplate = \"docs/page.html\"\nweight = 0+++" > "$targetFile"
|
||||
|
||||
# append everything from the file but remove header line starting with '#' and all preceding non-empty lines
|
||||
tail -n +2 "$sourceFile" >> "$targetFile"
|
||||
}
|
||||
|
||||
# inject pages from clan-core
|
||||
for dir in ${inputs.clan-core}/docs/*; do
|
||||
subdir=$(basename $dir)
|
||||
targetDir="content/docs/$subdir"
|
||||
mkdir -p "$targetDir"
|
||||
for file in ${inputs.clan-core}/docs/$subdir/*.md; do
|
||||
target="content/docs/$subdir/$(basename $file)"
|
||||
# only generate page if file doesn't start with _
|
||||
if [[ $(basename $file) == _* ]]; then
|
||||
cat "$file" > "$target"
|
||||
continue
|
||||
fi
|
||||
generatePage "$file" "$target"
|
||||
done
|
||||
done
|
||||
|
||||
zola build
|
||||
cp -r public/* public/.* $out
|
||||
'';
|
||||
in {
|
||||
packages.default = self'.packages.website;
|
||||
packages.website = build "https://clan.lol";
|
||||
packages.website-localhost = build "http://localhost:1111";
|
||||
packages.serve = pkgs.writeScriptBin "serve-local" ''
|
||||
${pkgs.python3}/bin/python -m http.server 1111 \
|
||||
-d ${self'.packages.website-localhost}
|
||||
'';
|
||||
};
|
||||
cp -r website/* website/.* $out
|
||||
rm $out/static
|
||||
cp -r static/ $out/static
|
||||
'';
|
||||
in
|
||||
{
|
||||
packages.default = self'.packages.website;
|
||||
packages.website = build "https://clan.lol";
|
||||
packages.website-localhost = build "http://localhost:1111";
|
||||
packages.serve = pkgs.writeShellScriptBin "serve-local" ''
|
||||
echo "serving: ${self'.packages.website-localhost}"
|
||||
${pkgs.python3}/bin/python -m http.server 1111 \
|
||||
-d website
|
||||
'';
|
||||
};
|
||||
}
|
||||
|
161
flake.lock
@ -1,63 +1,15 @@
|
||||
{
|
||||
"nodes": {
|
||||
"clan-core": {
|
||||
"inputs": {
|
||||
"disko": "disko",
|
||||
"flake-parts": [
|
||||
"flake-parts"
|
||||
],
|
||||
"nixos-generators": "nixos-generators",
|
||||
"nixpkgs": [
|
||||
"nixpkgs"
|
||||
],
|
||||
"sops-nix": "sops-nix",
|
||||
"treefmt-nix": "treefmt-nix"
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1705837716,
|
||||
"narHash": "sha256-YejB4eUGszljJ55elCM21XRqvoYJiPL/6y1voirsbKE=",
|
||||
"ref": "refs/heads/main",
|
||||
"rev": "7b953fe7ab8d170d27e695e7719c1c0526fa64cb",
|
||||
"revCount": 1822,
|
||||
"type": "git",
|
||||
"url": "https://git.clan.lol/clan/clan-core"
|
||||
},
|
||||
"original": {
|
||||
"type": "git",
|
||||
"url": "https://git.clan.lol/clan/clan-core"
|
||||
}
|
||||
},
|
||||
"disko": {
|
||||
"inputs": {
|
||||
"nixpkgs": [
|
||||
"clan-core",
|
||||
"nixpkgs"
|
||||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1705017253,
|
||||
"narHash": "sha256-/ysUOnF/dYJXDTxi/fi4MNN7uYKRji5CKp3EIamXB+0=",
|
||||
"owner": "nix-community",
|
||||
"repo": "disko",
|
||||
"rev": "fa5db12d76f9e8ee11e572cdbe021230e48b6afa",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "nix-community",
|
||||
"repo": "disko",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"flake-parts": {
|
||||
"inputs": {
|
||||
"nixpkgs-lib": "nixpkgs-lib"
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1704982712,
|
||||
"narHash": "sha256-2Ptt+9h8dczgle2Oo6z5ni5rt/uLMG47UFTR1ry/wgg=",
|
||||
"lastModified": 1722555600,
|
||||
"narHash": "sha256-XOQkdLafnb/p9ij77byFQjDf5m5QYl9b2REiVClC+x4=",
|
||||
"owner": "hercules-ci",
|
||||
"repo": "flake-parts",
|
||||
"rev": "07f6395285469419cf9d078f59b5b49993198c00",
|
||||
"rev": "8471fe90ad337a8074e957b69ca4d0089218391d",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
@ -66,50 +18,13 @@
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"nixlib": {
|
||||
"locked": {
|
||||
"lastModified": 1693701915,
|
||||
"narHash": "sha256-waHPLdDYUOHSEtMKKabcKIMhlUOHPOOPQ9UyFeEoovs=",
|
||||
"owner": "nix-community",
|
||||
"repo": "nixpkgs.lib",
|
||||
"rev": "f5af57d3ef9947a70ac86e42695231ac1ad00c25",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "nix-community",
|
||||
"repo": "nixpkgs.lib",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"nixos-generators": {
|
||||
"inputs": {
|
||||
"nixlib": "nixlib",
|
||||
"nixpkgs": [
|
||||
"clan-core",
|
||||
"nixpkgs"
|
||||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1701689616,
|
||||
"narHash": "sha256-ewnfgvRy73HoP5KnYmy1Rcr4m4yShvsb6TCCaKoW8pc=",
|
||||
"owner": "nix-community",
|
||||
"repo": "nixos-generators",
|
||||
"rev": "246219bc21b943c6f6812bb7744218ba0df08600",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "nix-community",
|
||||
"repo": "nixos-generators",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"nixpkgs": {
|
||||
"locked": {
|
||||
"lastModified": 1705677747,
|
||||
"narHash": "sha256-eyM3okYtMgYDgmYukoUzrmuoY4xl4FUujnsv/P6I/zI=",
|
||||
"lastModified": 1723637854,
|
||||
"narHash": "sha256-med8+5DSWa2UnOqtdICndjDAEjxr5D7zaIiK4pn0Q7c=",
|
||||
"owner": "NixOS",
|
||||
"repo": "nixpkgs",
|
||||
"rev": "bbe7d8f876fbbe7c959c90ba2ae2852220573261",
|
||||
"rev": "c3aa7b8938b17aebd2deecf7be0636000d62a2b9",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
@ -121,73 +36,21 @@
|
||||
},
|
||||
"nixpkgs-lib": {
|
||||
"locked": {
|
||||
"dir": "lib",
|
||||
"lastModified": 1703961334,
|
||||
"narHash": "sha256-M1mV/Cq+pgjk0rt6VxoyyD+O8cOUiai8t9Q6Yyq4noY=",
|
||||
"owner": "NixOS",
|
||||
"repo": "nixpkgs",
|
||||
"rev": "b0d36bd0a420ecee3bc916c91886caca87c894e9",
|
||||
"type": "github"
|
||||
"lastModified": 1722555339,
|
||||
"narHash": "sha256-uFf2QeW7eAHlYXuDktm9c25OxOyCoUOQmh5SZ9amE5Q=",
|
||||
"type": "tarball",
|
||||
"url": "https://github.com/NixOS/nixpkgs/archive/a5d394176e64ab29c852d03346c1fc9b0b7d33eb.tar.gz"
|
||||
},
|
||||
"original": {
|
||||
"dir": "lib",
|
||||
"owner": "NixOS",
|
||||
"ref": "nixos-unstable",
|
||||
"repo": "nixpkgs",
|
||||
"type": "github"
|
||||
"type": "tarball",
|
||||
"url": "https://github.com/NixOS/nixpkgs/archive/a5d394176e64ab29c852d03346c1fc9b0b7d33eb.tar.gz"
|
||||
}
|
||||
},
|
||||
"root": {
|
||||
"inputs": {
|
||||
"clan-core": "clan-core",
|
||||
"flake-parts": "flake-parts",
|
||||
"nixpkgs": "nixpkgs"
|
||||
}
|
||||
},
|
||||
"sops-nix": {
|
||||
"inputs": {
|
||||
"nixpkgs": [
|
||||
"clan-core",
|
||||
"nixpkgs"
|
||||
],
|
||||
"nixpkgs-stable": [
|
||||
"clan-core"
|
||||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1704908274,
|
||||
"narHash": "sha256-74W9Yyomv3COGRmKi8zvyA5tL2KLiVkBeaYmYLjXyOw=",
|
||||
"owner": "Mic92",
|
||||
"repo": "sops-nix",
|
||||
"rev": "c0b3a5af90fae3ba95645bbf85d2b64880addd76",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "Mic92",
|
||||
"repo": "sops-nix",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"treefmt-nix": {
|
||||
"inputs": {
|
||||
"nixpkgs": [
|
||||
"clan-core",
|
||||
"nixpkgs"
|
||||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1704649711,
|
||||
"narHash": "sha256-+qxqJrZwvZGilGiLQj3QbYssPdYCwl7ejwMImgH7VBQ=",
|
||||
"owner": "numtide",
|
||||
"repo": "treefmt-nix",
|
||||
"rev": "04f25d7bec9fb29d2c3bacaa48a3304840000d36",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "numtide",
|
||||
"repo": "treefmt-nix",
|
||||
"type": "github"
|
||||
}
|
||||
}
|
||||
},
|
||||
"root": "root",
|
||||
|
@ -4,19 +4,14 @@
|
||||
inputs = {
|
||||
nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
|
||||
flake-parts.url = "github:hercules-ci/flake-parts";
|
||||
|
||||
clan-core.url = "git+https://git.clan.lol/clan/clan-core";
|
||||
clan-core.inputs.flake-parts.follows = "flake-parts";
|
||||
clan-core.inputs.nixpkgs.follows = "nixpkgs";
|
||||
};
|
||||
|
||||
outputs = inputs@{ self, flake-parts, clan-core, ... }:
|
||||
outputs = inputs@{ self, flake-parts, ... }:
|
||||
flake-parts.lib.mkFlake { inherit inputs; } ({ lib, ... }: {
|
||||
systems = [ "x86_64-linux" ];
|
||||
imports = [
|
||||
./flake-parts/deploy.nix
|
||||
./flake-parts/devShells
|
||||
./flake-parts/new-post.nix
|
||||
./flake-parts/website.nix
|
||||
];
|
||||
perSystem = {pkgs, ...}: {
|
||||
|
1
static/.gitattributes
vendored
Normal file
@ -0,0 +1 @@
|
||||
videos filter=lfs diff=lfs merge=lfs -text
|
2117
static/asciinema-player/asciinema-player.css
Normal file
1
static/asciinema-player/asciinema-player.min.js
vendored
Normal file
45
static/asciinema-player/custom-theme.css
Normal file
@ -0,0 +1,45 @@
|
||||
.asciinema-player-theme-alabaster-auto {
|
||||
--term-color-foreground: #000000; /* Black for foreground text */
|
||||
--term-color-background: #f7f7f7; /* Very light gray for background */
|
||||
|
||||
--term-color-0: #000000; /* Black */
|
||||
--term-color-1: #aa3731; /* Red */
|
||||
--term-color-2: #448c37; /* Green */
|
||||
--term-color-3: #cb9000; /* Yellow */
|
||||
--term-color-4: #325cc0; /* Blue */
|
||||
--term-color-5: #7a3e9d; /* Magenta */
|
||||
--term-color-6: #0083b2; /* Cyan */
|
||||
--term-color-7: #bbbbbb; /* White */
|
||||
--term-color-8: #777777; /* Bright black (gray) */
|
||||
--term-color-9: #f05050; /* Bright red */
|
||||
--term-color-10: #60cb00; /* Bright green */
|
||||
--term-color-11: #ffbc5d; /* Bright yellow */
|
||||
--term-color-12: #007acc; /* Bright blue */
|
||||
--term-color-13: #e64ce6; /* Bright magenta */
|
||||
--term-color-14: #00aacb; /* Bright cyan */
|
||||
--term-color-15: #ffffff; /* Bright white */
|
||||
}
|
||||
|
||||
@media (prefers-color-scheme: dark) {
|
||||
.asciinema-player-theme-solarized-auto {
|
||||
--term-color-foreground: #839496;
|
||||
--term-color-background: #002b36;
|
||||
|
||||
--term-color-0: #073642;
|
||||
--term-color-1: #dc322f;
|
||||
--term-color-2: #859900;
|
||||
--term-color-3: #b58900;
|
||||
--term-color-4: #268bd2;
|
||||
--term-color-5: #d33682;
|
||||
--term-color-6: #2aa198;
|
||||
--term-color-7: #eee8d5;
|
||||
--term-color-8: #002b36;
|
||||
--term-color-9: #cb4b16;
|
||||
--term-color-10: #586e75;
|
||||
--term-color-11: #657b83;
|
||||
--term-color-12: #839496;
|
||||
--term-color-13: #6c71c4;
|
||||
--term-color-14: #93a1a1;
|
||||
--term-color-15: #fdf6e3;
|
||||
}
|
||||
}
|
BIN
static/blog-post-jsonschema/nginx-gui.jpg
Normal file
After Width: | Height: | Size: 31 KiB |
BIN
static/cLAN/cLAN--black.jpg
Normal file
After Width: | Height: | Size: 266 KiB |
BIN
static/cLAN/cLAN--black.png
Normal file
After Width: | Height: | Size: 108 KiB |
BIN
static/cLAN/cLAN--white.png
Normal file
After Width: | Height: | Size: 106 KiB |
7823
static/cLAN/cLAN.ai
Normal file
BIN
static/cLAN/cLAN.png
Normal file
After Width: | Height: | Size: 149 KiB |
7121
static/cLAN/cLAN.svg
Normal file
After Width: | Height: | Size: 682 KiB |
BIN
static/cLAN/with text favicon/128x128.png
Normal file
After Width: | Height: | Size: 6.5 KiB |
BIN
static/cLAN/with text favicon/16x16.png
Normal file
After Width: | Height: | Size: 555 B |
BIN
static/cLAN/with text favicon/32x32.png
Normal file
After Width: | Height: | Size: 1.2 KiB |
BIN
static/cLAN/with text favicon/64x64.png
Normal file
After Width: | Height: | Size: 2.8 KiB |
BIN
static/cLAN/without text favicon- black/128x128.png
Normal file
After Width: | Height: | Size: 4.1 KiB |
BIN
static/cLAN/without text favicon- black/16x16.png
Normal file
After Width: | Height: | Size: 360 B |
BIN
static/cLAN/without text favicon- black/32x32.png
Normal file
After Width: | Height: | Size: 815 B |
BIN
static/cLAN/without text favicon- black/64x64.png
Normal file
After Width: | Height: | Size: 1.9 KiB |
BIN
static/cLAN/without text favicon- white/128x128.png
Normal file
After Width: | Height: | Size: 3.1 KiB |
BIN
static/cLAN/without text favicon- white/16x16.png
Normal file
After Width: | Height: | Size: 375 B |
BIN
static/cLAN/without text favicon- white/32x32.png
Normal file
After Width: | Height: | Size: 717 B |
BIN
static/cLAN/without text favicon- white/64x64.png
Normal file
After Width: | Height: | Size: 1.5 KiB |
BIN
static/cLAN/without text favicon/128x128.png
Normal file
After Width: | Height: | Size: 5.9 KiB |
BIN
static/cLAN/without text favicon/16x16.png
Normal file
After Width: | Height: | Size: 490 B |
BIN
static/cLAN/without text favicon/32x32.png
Normal file
After Width: | Height: | Size: 1.1 KiB |
BIN
static/cLAN/without text favicon/64x64.png
Normal file
After Width: | Height: | Size: 2.4 KiB |
BIN
static/logo/128x128.png
Normal file
After Width: | Height: | Size: 2.1 KiB |
Before Width: | Height: | Size: 108 KiB After Width: | Height: | Size: 167 KiB |
Before Width: | Height: | Size: 106 KiB After Width: | Height: | Size: 174 KiB |
Before Width: | Height: | Size: 276 KiB After Width: | Height: | Size: 70 KiB |
BIN
static/profiles/davhau.jpg
Normal file
After Width: | Height: | Size: 102 KiB |
BIN
static/profiles/lassulus.jpg
Normal file
After Width: | Height: | Size: 25 KiB |
BIN
static/profiles/mic92.jpg
Normal file
After Width: | Height: | Size: 55 KiB |
BIN
static/profiles/qubasa.png
Normal file
After Width: | Height: | Size: 243 KiB |
BIN
static/profiles/w_profile.webp
Normal file
After Width: | Height: | Size: 27 KiB |
6
static/videos/backups-script.txt
Normal file
@ -0,0 +1,6 @@
|
||||
# Script for installing NixOS VM.
|
||||
|
||||
```
|
||||
$ clan backups create turingmachine
|
||||
$ clan backups list turingmachine
|
||||
```
|
22
static/videos/backups.cast
Normal file
@ -0,0 +1,22 @@
|
||||
{"version": 2, "width": 133, "height": 43, "timestamp": 1711383511, "env": {"SHELL": "/run/current-system/sw/bin/zsh", "TERM": "tmux-256color"}}
|
||||
[0.043597, "o", "\u001b[?2004h[\u001b[1;36mjoerg\u001b[0m@turingmachine dotfiles]$ "]
|
||||
[0.657845, "o", "\u001b[7mclan backups create turingmachine\u001b[27m"]
|
||||
[1.063664, "o", "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\bclan backups create turingmachine\r\n\u001b[?2004l\r"]
|
||||
[1.150332, "o", "\u001b[32mINFO\u001b[0m: creating backup for turingmachine\r\n"]
|
||||
[1.173937, "o", "warning: 'show-config' is a deprecated alias for 'config show'\r\n"]
|
||||
[1.30232, "o", "Using saved setting for 'extra-substituters = https://cache.thalheim.io' from ~/.local/share/nix/trusted-settings.json.\r\nUsing saved setting for 'extra-trusted-public-keys = cache.thalheim.io-1:R7msbosLEZKrxk/lKxf9BTjOOH7Ax3H0Qj0/6wiHOgc=' from ~/.local/share/nix/trusted-settings.json.\r\n"]
|
||||
[2.054171, "o", "warning: 'show-config' is a deprecated alias for 'config show'\r\n"]
|
||||
[2.197528, "o", "Using saved setting for 'extra-substituters = https://cache.thalheim.io' from ~/.local/share/nix/trusted-settings.json.\r\nUsing saved setting for 'extra-trusted-public-keys = cache.thalheim.io-1:R7msbosLEZKrxk/lKxf9BTjOOH7Ax3H0Qj0/6wiHOgc=' from ~/.local/share/nix/trusted-settings.json.\r\n"]
|
||||
[3.445738, "o", "\u001b[32m[turingmachine]\u001b[0m \u001b[0m$ borgbackup-create\u001b[0m\r\n"]
|
||||
[3.926155, "o", "successfully started backup\r\n"]
|
||||
[3.950673, "o", "\u001b[?2004h[\u001b[1;36mjoerg\u001b[0m@turingmachine dotfiles]$ "]
|
||||
[6.363145, "o", "\u001b[7mclan backups list turingmachine\u001b[27m\r\n\r"]
|
||||
[6.63316, "o", "\u001bM\u001b[C\u001b[C\u001b[C\u001b[C\u001b[C\u001b[C\u001b[C\u001b[C\u001b[C\u001b[C\u001b[C\u001b[C\u001b[C\u001b[C\u001b[C\u001b[C\u001b[C\u001b[C\u001b[C\u001b[C\u001b[C\u001b[C\u001b[C\u001b[C\u001b[C\u001b[C\u001b[C\u001b[C\u001b[C\u001b[C\u001b[C\u001b[Cclan backups list turingmachine\r\n\r\u001bM\r\n\u001b[?2004l\r"]
|
||||
[6.743814, "o", "warning: 'show-config' is a deprecated alias for 'config show'\r\n"]
|
||||
[6.878424, "o", "Using saved setting for 'extra-substituters = https://cache.thalheim.io' from ~/.local/share/nix/trusted-settings.json.\r\nUsing saved setting for 'extra-trusted-public-keys = cache.thalheim.io-1:R7msbosLEZKrxk/lKxf9BTjOOH7Ax3H0Qj0/6wiHOgc=' from ~/.local/share/nix/trusted-settings.json.\r\n"]
|
||||
[7.59352, "o", "warning: 'show-config' is a deprecated alias for 'config show'\r\n"]
|
||||
[7.735757, "o", "Using saved setting for 'extra-substituters = https://cache.thalheim.io' from ~/.local/share/nix/trusted-settings.json.\r\nUsing saved setting for 'extra-trusted-public-keys = cache.thalheim.io-1:R7msbosLEZKrxk/lKxf9BTjOOH7Ax3H0Qj0/6wiHOgc=' from ~/.local/share/nix/trusted-settings.json.\r\n"]
|
||||
[9.009021, "o", "\u001b[32m[turingmachine]\u001b[0m \u001b[0m$ borgbackup-list\u001b[0m\r\n"]
|
||||
[13.64185, "o", "turingmachine::borg@blob64.r:/zdata/borg/turingmachine::turingmachine-turingmachine-2024-01-25T00:00:00\r\nturingmachine::borg@blob64.r:/zdata/borg/turingmachine::turingmachine-turingmachine-2024-02-08T11:00:18\r\nturingmachine::borg@blob64.r:/zdata/borg/turingmachine::turingmachine-turingmachine-2024-02-17T00:00:00.failed\r\nturingmachine::borg@blob64.r:/zdata/borg/turingmachine::turingmachine-turingmachine-2024-02-22T15:41:29\r\nturingmachine::borg@blob64.r:/zdata/borg/turingmachine::turingmachine-turingmachine-2024-02-26T15:11:21\r\nturingmachine::borg@blob64.r:/zdata/borg/turingmachine::turingmachine-turingmachine-2024-03-04T01:00:00\r\nturingmachine::borg@blob64.r:/zdata/borg/turingmachine::turingmachine-turingmachine-2024-03-07T01:00:00.failed\r\nturingmachine::borg@blob64.r:/zdata/borg/turingmachine::turingmachine-turingmachine-2024-03-09T01:00:00\r\nturingmachine::borg@blob64.r:/zdata/borg/turingmachine::turingmachine-turingmachine-2024-03-13T01:00:00\r\nturingmachine::borg@blob64.r:/zdata/borg/turingmachine::turingmachine-turingmachine-2024-03-15T11:10:51\r\nturingmachine::borg@blob64.r:/zdata/borg/turingmachine::turingmachine-turingmachine-2024-03-21T01:00:00\r\nturingmachine::borg@blob64.r:/zdata/borg/turingmachine::turingmachine-turingmachine-2024-03-22T01:00:00\r\n"]
|
||||
[13.666186, "o", "\u001b[?2004h[\u001b[1;36mjoerg\u001b[0m@turingmachine dotfiles]$ "]
|
||||
[15.053423, "o", "\u001b[?2004l\r\r\nexit\r\n"]
|
13
static/videos/nixos-install-script.txt
Normal file
@ -0,0 +1,13 @@
|
||||
# Script for installing NixOS VM.
|
||||
|
||||
```
|
||||
$ USE_TMPDIR=1 TMPDIR=$(pwd) nix run .#nixosConfigurations.installer.config.system.build.nixos-shell
|
||||
$ clan machines install machine-to-install root@localhost:2222
|
||||
vm> poweroff
|
||||
qemu-kvm \
|
||||
-enable-kvm -m 2048 \
|
||||
-nographic \
|
||||
-usb -device u2f-passthru
|
||||
-drive file=disk.img,if=none,id=nvm \
|
||||
-device nvme,serial=deadbeef,drive=nvm
|
||||
```
|
2130
static/videos/nixos-install.cast
Normal file
48
static/videos/secrets-script.txt
Normal file
@ -0,0 +1,48 @@
|
||||
# Machines/Services can define secret generators
|
||||
|
||||
```
|
||||
clan secrets list defaultVM
|
||||
```
|
||||
|
||||
```
|
||||
nvim default-vm/machines.nix
|
||||
```
|
||||
|
||||
```nix
|
||||
clanCore.secrets.root-password = {
|
||||
secrets.root-password = { };
|
||||
facts.root-password-hash = { };
|
||||
generator.path = with pkgs; [
|
||||
coreutils
|
||||
xkcdpass
|
||||
mkpasswd
|
||||
];
|
||||
generator.script = ''
|
||||
xkcdpass -n 3 -d - > $secrets/root-password
|
||||
cat $secrets/root-password | mkpasswd -s -m sha-512 > $facts/root-password-hash
|
||||
'';
|
||||
};
|
||||
```
|
||||
|
||||
# When a machine is started, they are automatically generated and store
|
||||
|
||||
```
|
||||
clan facts generate defaultVM
|
||||
```
|
||||
|
||||
```
|
||||
clan secrets list defaultVM
|
||||
```
|
||||
|
||||
```
|
||||
clan secrets get defaultVM-root-password
|
||||
```
|
||||
|
||||
```
|
||||
clan vms run defaultVM
|
||||
```
|
||||
|
||||
```
|
||||
[root@nixos:~]# cat /run/secrets/defaultVM-root-password
|
||||
iodize-unmixable-spool
|
||||
```
|
144
static/videos/secrets.cast
Normal file
@ -0,0 +1,144 @@
|
||||
{"version": 2, "width": 76, "height": 27, "timestamp": 1711377978, "env": {"SHELL": "/run/current-system/sw/bin/zsh", "TERM": "foot"}}
|
||||
[0.014619, "o", "\u001b[?1049h\u001b[22;0;0t\u001b[?1h\u001b=\u001b[H\u001b[2J\u001b[?12l\u001b[?25h\u001b[?1000l\u001b[?1002l\u001b[?1003l\u001b[?1006l\u001b[?1005l\u001b[?2004h\u001b(B\u001b[m\u001b[?12l\u001b[?25h\u001b[?1006l\u001b[?1000l\u001b[?1002l\u001b[?1003l\u001b[1;1H\u001b[1;27r\u001b[c\u001b[>c\u001b[>q\u001b]10;?\u001b\\\u001b]11;?\u001b\\\u001b[1;1H\u001b[?1006l\u001b[?1000l\u001b[?1002l\u001b[?1003l\u001b[?1006h\u001b[?1000h\u001b[?1002h"]
|
||||
[0.015556, "o", "\u001b]0;turingmachine\u0007\u001b[?25l\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\u001b[38;2;62;68;82m\u001b[48;2;152;195;121m\u001b[1m\r\n 27 \u001b(B\u001b[m\u001b[38;2;152;195;121m\u001b[48;2;40;44;52m\u001b[39m\u001b[48;5;173m \u001b[38;2;40;44;52m\u001b[48;2;0;95;255m\u001b[38;2;235;237;239m 1 bash \u001b[38;2;0;95;255m\u001b[39m\u001b[48;5;173m \u001b[38;2;229;192;123m\u001b[38;2;224;108;117m\u001b[48;2;229;192;123m\u001b(B\u001b[m\u001b[?12l\u001b[?25h\u001b[1;1H"]
|
||||
[0.015782, "o", "\u001b[?1004h\u001b[?7727h\u001b(B\u001b[m\u001b[?12l\u001b[?25h\u001b[?1006l\u001b[?1000l\u001b[?1002l\u001b[?1003l\u001b[1;1H\u001b[1;27r\u001b[?1004h\u001b[?7727h\u001b(B\u001b[m\u001b[?12l\u001b[?25h\u001b[?1006l\u001b[?1000l\u001b[?1002l\u001b[?1003l\u001b[1;1H\u001b[1;27r\u001b[?1004h\u001b[?7727h\u001b(B\u001b[m\u001b[?12l\u001b[?25h\u001b[?1006l\u001b[?1000l\u001b[?1002l\u001b[?1003l\u001b[1;1H\u001b[1;27r\u001b[1;1H\u001b[?1006l\u001b[?1000l\u001b[?1002l\u001b[?1003l\u001b[?1006h\u001b[?1000h\u001b[?1002h"]
|
||||
[0.015952, "o", "\u001b[?25l\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\u001b[38;2;62;68;82m\u001b[48;2;152;195;121m\u001b[1m\r\n 27 \u001b(B\u001b[m\u001b[38;2;152;195;121m\u001b[48;2;40;44;52m\u001b[39m\u001b[48;5;173m \u001b[38;2;40;44;52m\u001b[48;2;0;95;255m\u001b[38;2;235;237;239m 1 bash \u001b[38;2;0;95;255m\u001b[39m\u001b[48;5;173m \u001b[38;2;229;192;123m\u001b[38;2;224;108;117m\u001b[48;2;229;192;123m\u001b(B\u001b[m\u001b[?12l\u001b[?25h\u001b[1;1H"]
|
||||
[0.016306, "o", "\u001b(B\u001b[m\u001b[?12l\u001b[?25h\u001b[?1006l\u001b[?1000l\u001b[?1002l\u001b[?1003l\u001b[1;1H\u001b[1;27r\u001b[1;1H\u001b[?1006l\u001b[?1000l\u001b[?1002l\u001b[?1003l\u001b[?1006h\u001b[?1000h\u001b[?1002h"]
|
||||
[0.016424, "o", "\u001b[?25l\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\u001b[38;2;62;68;82m\u001b[48;2;152;195;121m\u001b[1m\r\n 27 \u001b(B\u001b[m\u001b[38;2;152;195;121m\u001b[48;2;40;44;52m\u001b[39m\u001b[48;5;173m \u001b[38;2;40;44;52m\u001b[48;2;0;95;255m\u001b[38;2;235;237;239m 1 bash \u001b[38;2;0;95;255m\u001b[39m\u001b[48;5;173m \u001b[38;2;229;192;123m\u001b[38;2;224;108;117m\u001b[48;2;229;192;123m\u001b(B\u001b[m\u001b[?12l\u001b[?25h\u001b[1;1H"]
|
||||
[0.080054, "o", "direnv: loading ~/work/clan/democlan/.envrc\r\ndirenv: using flake\r\n"]
|
||||
[0.225534, "o", "evaluating derivation 'git+file:///home/joerg/work/clan/democlan#devShells.x"]
|
||||
[0.275731, "o", "\u001b[3;1Hevaluating derivation 'git+file:///home/joerg/work/clan/democlan#devShells.x"]
|
||||
[0.325851, "o", "\u001b[3;1Hevaluating derivation 'git+file:///home/joerg/work/clan/democlan#devShells.x"]
|
||||
[0.375978, "o", "\u001b[3;1Hevaluating derivation 'git+file:///home/joerg/work/clan/democlan#devShells.x"]
|
||||
[0.426032, "o", "\u001b[3;1Hevaluating derivation 'git+file:///home/joerg/work/clan/democlan#devShells.x"]
|
||||
[0.476127, "o", "\u001b[3;1Hevaluating derivation 'git+file:///home/joerg/work/clan/democlan#devShells.x"]
|
||||
[0.526175, "o", "\u001b[3;1Hevaluating derivation 'git+file:///home/joerg/work/clan/democlan#devShells.x"]
|
||||
[0.576169, "o", "\u001b[3;1Hevaluating derivation 'git+file:///home/joerg/work/clan/democlan#devShells.x"]
|
||||
[0.626397, "o", "\u001b[3;1Hevaluating derivation 'git+file:///home/joerg/work/clan/democlan#devShells.x"]
|
||||
[0.676524, "o", "\u001b[3;1Hevaluating derivation 'git+file:///home/joerg/work/clan/democlan#devShells.x"]
|
||||
[0.726569, "o", "\u001b[3;1Hevaluating derivation 'git+file:///home/joerg/work/clan/democlan#devShells.x"]
|
||||
[0.77665, "o", "\u001b[3;1Hevaluating derivation 'git+file:///home/joerg/work/clan/democlan#devShells.x"]
|
||||
[0.826887, "o", "\u001b[3;1Hevaluating derivation 'git+file:///home/joerg/work/clan/democlan#devShells.x"]
|
||||
[0.877001, "o", "\u001b[3;1Hevaluating derivation 'git+file:///home/joerg/work/clan/democlan#devShells.x"]
|
||||
[0.926991, "o", "\u001b[3;1Hevaluating derivation 'git+file:///home/joerg/work/clan/democlan#devShells.x"]
|
||||
[0.977121, "o", "\u001b[3;1Hevaluating derivation 'git+file:///home/joerg/work/clan/democlan#devShells.x"]
|
||||
[1.027133, "o", "\u001b[3;1Hevaluating derivation 'git+file:///home/joerg/work/clan/democlan#devShells.x"]
|
||||
[1.077282, "o", "\u001b[3;1Hevaluating derivation 'git+file:///home/joerg/work/clan/democlan#devShells.x"]
|
||||
[1.127399, "o", "\u001b[3;1Hevaluating derivation 'git+file:///home/joerg/work/clan/democlan#devShells.x"]
|
||||
[1.177512, "o", "\u001b[3;1Hevaluating derivation 'git+file:///home/joerg/work/clan/democlan#devShells.x"]
|
||||
[1.227677, "o", "\u001b[3;1Hevaluating derivation 'git+file:///home/joerg/work/clan/democlan#devShells.x"]
|
||||
[1.277697, "o", "\u001b[3;1Hevaluating derivation 'git+file:///home/joerg/work/clan/democlan#devShells.x"]
|
||||
[1.327732, "o", "\u001b[3;1Hevaluating derivation 'git+file:///home/joerg/work/clan/democlan#devShells.x"]
|
||||
[1.377784, "o", "\u001b[3;1Hevaluating derivation 'git+file:///home/joerg/work/clan/democlan#devShells.x"]
|
||||
[1.427853, "o", "\u001b[3;1Hevaluating derivation 'git+file:///home/joerg/work/clan/democlan#devShells.x"]
|
||||
[1.47801, "o", "\u001b[3;1H[\u001b[32m\u001b[1m0\u001b(B\u001b[m/1 built] \u001b[K"]
|
||||
[1.528195, "o", "\r[\u001b[32m\u001b[1m0\u001b(B\u001b[m/1 built] \u001b[K"]
|
||||
[1.56773, "o", "\r\u001b[K"]
|
||||
[2.091524, "o", "direnv: nix-direnv: renewed cache\r\n"]
|
||||
[2.114136, "o", "direnv: export +CONFIG_SHELL +HOST_PATH +IN_NIX_SHELL +NIX_BUILD_CORES +NIX_CFLAGS_COMPILE +NIX_ENFORCE_NO_NATIVE +NIX_LDFLAGS +NIX_STORE +SOURCE_DATE_EPOCH +__structuredAttrs +buildInputs +buildPhase +builder +cmakeFlags +configureFlags +depsBuildBuild +depsBuildBuildPropagated +depsBuildTarget +depsBuildTargetPropagated +depsHostHost +depsHostHostPropagated +depsTargetTarget +depsTargetTargetPropagated +doCheck +doInstallCheck +dontAddDisableDepTrack +mesonFlags +name +nativeBuildInputs +out +outputs +patches +phases +preferLocalBuild +propagatedBuildInputs +propagatedNativeBuildInputs +shell +shellHook +stdenv +strictDeps +system ~PATH ~XDG_DATA_DIRS\r\n"]
|
||||
[2.121988, "o", "[\u001b[36m\u001b[1mjoerg\u001b(B\u001b[m@turingmachine democlan]$ "]
|
||||
[2.467178, "o", "\u001b[7mclan secrets list defaultVM\r\n\u001b(B\u001b[m"]
|
||||
[2.791727, "o", "\u001b[13;33Hclan secrets list defaultVM\r\n"]
|
||||
[2.87735, "o", "defaultVM-age.key\r\ndefaultVM-zerotier-identity-secret\r\n"]
|
||||
[2.890919, "o", "[\u001b[36m\u001b[1mjoerg\u001b(B\u001b[m@turingmachine democlan]$ "]
|
||||
[5.9297, "o", "\u001b[7mnvim default-vm/machines.nix\u001b(B\u001b[m"]
|
||||
[6.149461, "o", "\u001b[28Dnvim default-vm/machines.nix\r\n"]
|
||||
[6.162533, "o", "\u001b[?25l\u001b[H\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\u001b[?12l\u001b[?25h\u001b[H"]
|
||||
[6.173904, "o", "\u001b[1;26r\u001b[1;1H\u001b[2;26r\u001b[25S\u001b[1;1H\u001b[K\u001b[1;26r\u001b[26;1H\u001b[K\u001b[1;27r\u001b[1;1H\u001b[?25l"]
|
||||
[6.259909, "o", "\u001b[?12l\u001b[?25h\u001b[1 q"]
|
||||
[6.278019, "o", "\u001b[38;2;0;43;54m\u001b[48;2;253;246;227m \u001b[2;1H \u001b[3;1H \u001b[4;1H \u001b[5;1H \u001b[6;1H \u001b[7;1H \u001b[8;1H \u001b[9;1H \u001b[10;1H \u001b[11;1H \u001b[12;1H \u001b[13;1H \u001b[14;1H \u001b[15;1H \u001b[16;1H \u001b[17;1H \u001b[18;1H \u001b[19;1H \u001b[20;1H \u001b[21;1H \u001b[22;1H \u001b[23;1H \u001b[24;1H \u001b[25;1H \u001b[26;1H \u001b[1;1H\u001b[?25l\u001b(B\u001b[m"]
|
||||
[6.293258, "o", "\u001b[38;2;63;93;114m\u001b[48;2;253;246;227m\u001b[1m\u001b[3m \u001b[38;2;0;43;54mmachines.nix\u001b[38;2;220;50;47m \u001b[38;2;0;43;54m \u001b(B\u001b[m\u001b[38;2;253;246;227m\u001b[48;2;253;246;227m \u001b[38;2;0;43;54m \u001b[3;1H\u001b[38;2;238;232;213m \u001b[38;2;131;148;150m\u001b[48;2;238;232;213m 7 \u001b[38;2;0;43;54m\u001b[48;2;253;246;227m clan\u001b[38;2;203;75;22m.\u001b[38;2;0;43;54mvirtualisation\u001b[38;2;203;75;22m.\u001b[38;2;38;139;210mgraphics\u001b[38;2;0;43;54m = \u001b[38;2;211;54;130mfalse\u001b[38;2;0;43;54m; \u001b[4;1H\u001b[38;2;238;232;213m \u001b[38;2;131;148;150m\u001b[48;2;238;232;213m 8 \u001b[38;2;0;43;54m\u001b[48;2;253;246;227m \u001b[38;2;38;139;210mimports\u001b[38;2;0;43;54m = [ inputs.clan-core.clanModules.diskLayouts ]; \u001b[5;1H\u001b[38;2;238;232;213m \u001b[38;2;131;148;150m\u001b[48;2;238;232;213m 9 \u001b[38;2;0;43;54m\u001b[48;2;253;246;227m clanCore\u001b[38;2;203;75;22m.\u001b[38;2;38;139;210mmachineIcon\u001b[38;2;0;43;54m = \u001b[38;2;42;161;152mnull\u001b[38;2;0;43;54m; \u001b[6;1H\u001b[38;2;238;232;213m \u001b[38;2;131;148;150m\u001b[48;2;238;232;213m 10 \u001b[38;2;0;43;54m\u001b[48;2;253;246;227m clanCore\u001b[38;2;203;75;22m.\u001b[38;2;38;139;210mmachineDescription\u001b[38;2;0;43;54m = \"\u001b[38;2;133;153;0m\u001b[3mA simple NixOS VM\u001b(B\u001b[m\u001b[38;2;0;43;54m\u001b[48;2;253;246;227m\"; \u001b[7;1H\u001b[38;2;238;232;213m \u001b[38;2;131;148;150m\u001b[48;2;238;232;213m 11 \u001b[38;2;0;43;54m\u001b[48;2;253;246;227m clan\u001b[38;2;203;75;22m.\u001b[38;2;0;43;54mdiskLayouts\u001b[38;2;203;75;22m.\u001b[38;2;38;139;210msingleDiskExt4\u001b[38;2;0;43;54m = { \u001b[8;1H\u001b[38;2;238;232;213m \u001b[38;2;131;148;150m\u001b[48;2;238;232;213m 12 \u001b[38;2;0;43;54m\u001b[48;2;253;246;227m \u001b[38;2;38;139;210mdevice\u001b[38;2;0;43;54m = \"\u001b[38;2;133;153;0m\u001b[3m/dev/sda\u001b(B\u001b[m\u001b[38;2;0;43;54m\u001b[48;2;253;246;227m\"; \u001b[9;1H\u001b[38;2;238;232;213m \u001b[38;2;131;148;150m\u001b[48;2;238;232;213m 13 \u001b[38;2;0;43;54m\u001b[48;2;253;246;227m }; \u001b[10;1H\u001b[38;2;238;232;213m \u001b[38;2;131;148;150m\u001b[48;2;238;232;213m 14 \u001b[38;2;0;43;54m\u001b[48;2;253;246;227m \u001b[11;1H\u001b[38;2;238;232;213m \u001b[38;2;131;148;150m\u001b[48;2;238;232;213m 15 \u001b[38;2;0;43;54m\u001b[48;2;253;246;227m services\u001b[38;2;203;75;22m.\u001b[38;2;0;43;54mgetty\u001b[38;2;203;75;22m.\u001b[38;2;38;139;210mautologinUser\u001b[38;2;0;43;54m = \"\u001b[38;2;133;153;0m\u001b[3mroot\u001b(B\u001b[m\u001b[38;2;0;43;54m\u001b[48;2;253;246;227m\"; \u001b[12;1H\u001b[38;2;238;232;213m \u001b[38;2;0;43;54m 16 \u001b[48;2;238;232;213m }; \u001b[13;1H\u001b[38;2;238;232;213m\u001b[48;2;253;246;227m \u001b[38;2;131;148;150m\u001b[48;2;238;232;213m 17 \u001b(B\u001b[m"]
|
||||
[6.293612, "o", "\u001b[2;1H\u001b[38;2;0;43;54m\u001b[48;2;253;246;227m\u001b[1m \u001b[13;6H\u001b(B\u001b[m\u001b[38;2;0;43;54m\u001b[48;2;253;246;227m} \u001b[14;1H\u001b[38;2;238;232;213m \u001b[15;1H \u001b[16;1H \u001b[17;1H \u001b[18;1H \u001b[19;1H \u001b[20;1H \u001b[21;1H \u001b[22;1H \u001b[23;1H \u001b[24;1H \u001b[25;1H \u001b[26;1H\u001b[38;2;253;246;227m\u001b[48;2;7;54;66m \u001b[38;2;7;54;66m\u001b[48;2;253;246;227m \u001b[38;2;63;93;114m \u001b[38;2;0;43;54mnix\u001b[38;2;253;246;227m \u001b[38;2;0;43;54m \u001b[38;2;253;246;227m \u001b[38;2;133;153;0m TS\u001b[38;2;253;246;227m \u001b[38;2;0;43;54m 16:6 94%\u001b[38;2;220;50;47m ██\u001b[38;2;7;54;66m \u001b[38;2;253;246;227m\u001b[48;2;7;54;66m \u001b[12;11H\u001b[?12l\u001b[?25h\u001b[2 q\u001b(B\u001b[m"]
|
||||
[6.293808, "o", "\u001b[?25l\u001b[?12l\u001b[?25h\u001b[2 q"]
|
||||
[6.417767, "o", "\u001b[26;1H\u001b[38;2;0;43;54m\u001b[48;2;253;246;227m \u001b[3;6H\u001b[38;2;101;123;131m▏ ▏ \u001b[38;2;131;148;150m\u001b[48;2;238;232;213m▏\u001b[38;2;101;123;131m\u001b[48;2;253;246;227m \u001b[38;2;38;139;210mclan\u001b[38;2;203;75;22m.\u001b[38;2;38;139;210mvirtualisation\u001b[4;6H\u001b[38;2;101;123;131m▏ ▏ \u001b[38;2;131;148;150m\u001b[48;2;238;232;213m▏\u001b[38;2;101;123;131m\u001b[48;2;253;246;227m \u001b[38;2;38;139;210mimports\u001b[38;2;0;43;54m = \u001b[38;2;69;133;136m[\u001b[38;2;0;43;54m \u001b[38;2;38;139;210minputs\u001b[38;2;0;43;54m.\u001b[38;2;38;139;210mclan-core\u001b[38;2;0;43;54m.\u001b[38;2;38;139;210mclanModules\u001b[38;2;0;43;54m.\u001b[38;2;38;139;210mdiskLayouts\u001b[38;2;0;43;54m \u001b[38;2;69;133;136m]\u001b[5;6H\u001b[38;2;101;123;131m▏ ▏ \u001b[38;2;131;148;150m\u001b[48;2;238;232;213m▏\u001b[38;2;101;123;131m\u001b[48;2;253;246;227m \u001b[38;2;38;139;210mclanCore\u001b[6;6H\u001b[38;2;101;123;131m▏ ▏ \u001b[38;2;131;148;150m\u001b[48;2;238;232;213m▏\u001b[38;2;101;123;131m\u001b[48;2;253;246;227m \u001b[38;2;38;139;210mclanCore\u001b[7;6H\u001b[38;2;101;123;131m▏ ▏ \u001b[38;2;131;148;150m\u001b[48;2;238;232;213m▏\u001b[38;2;101;123;131m\u001b[48;2;253;246;227m \u001b[38;2;38;139;210mclan\u001b[38;2;203;75;22m.\u001b[38;2;38;139;210mdiskLayouts\u001b[38;2;203;75;22m.\u001b[38;2;38;139;210msingleDiskExt4\u001b[38;2;0;43;54m = \u001b[38;2;69;133;136m{\u001b[8;6H\u001b[38;2;101;123;131m▏ ▏ \u001b[38;2;131;148;150m\u001b[48;2;238;232;213m▏\u001b[38;2;101;123;131m\u001b[48;2;253;246;227m ▏ \u001b[9;6H▏ ▏ \u001b[38;2;131;148;150m\u001b[48;2;238;232;213m▏\u001b[38;2;101;123;131m\u001b[48;2;253;246;227m \u001b[38;2;69;133;136m}\u001b[10;6H\u001b[38;2;101;123;131m▏ ▏ \u001b[38;2;131;148;150m\u001b[48;2;238;232;213m▏\u001b[11;6H\u001b[38;2;101;123;131m\u001b[48;2;253;246;227m▏ ▏ \u001b[38;2;131;148;150m\u001b[48;2;238;232;213m▏\u001b[38;2;101;123;131m\u001b[48;2;253;246;227m \u001b[38;2;38;139;210mservices\u001b[38;2;203;75;22m.\u001b[38;2;38;139;210mgetty\u001b[12;6H\u001b[38;2;101;123;131m\u001b[48;2;238;232;213m▏ ▏\u001b[2;1H\u001b[38;2;0;43;54m\u001b[48;2;253;246;227m \u001b[12;9H\u001b[38;2;101;123;131m\u001b[48;2;238;232;213m \u001b[38;2;215;153;33m}\u001b[13;6H\u001b[38;2;204;36;29m\u001b[48;2;253;246;227m}\u001b[26;1H\u001b[38;2;253;246;227m\u001b[48;2;7;54;66m \u001b[38;2;7;54;66m\u001b[48;2;253;246;227m \u001b[38;2;63;93;114m \u001b[38;2;0;43;54mnix\u001b[38;2;253;246;227m \u001b[38;2;0;43;54m \u001b[38;2;253;246;227m \u001b[38;2;0;43;54m nixfmt, nil_ls\u001b[38;2;253;246;227m \u001b[38;2;133;153;0m TS\u001b[38;2;253;246;227m \u001b[38;2;0;43;54m 16:6 94%\u001b[38;2;220;50;47m ██\u001b[38;2;7;54;66m \u001b[38;2;253;246;227m\u001b[48;2;7;54;66m \u001b[12;11H\u001b(B\u001b[m"]
|
||||
[6.425064, "o", "\u001b[3;6H\u001b[38;2;133;153;0m\u001b[48;2;253;246;227m▎ \u001b[38;2;101;123;131m▏ ▏ \u001b[38;2;131;148;150m\u001b[48;2;238;232;213m▏\u001b[38;2;101;123;131m\u001b[48;2;253;246;227m \u001b[38;2;38;139;210mclan\u001b[38;2;203;75;22m.\u001b[38;2;38;139;210mvirtualisation\u001b[38;2;203;75;22m.\u001b[38;2;38;139;210mgraphics\u001b[38;2;0;43;54m = \u001b[38;2;211;54;130mfalse\u001b[38;2;0;43;54m;\u001b[4;6H\u001b[38;2;38;139;210m▎ \u001b[38;2;101;123;131m▏ ▏ \u001b[38;2;131;148;150m\u001b[48;2;238;232;213m▏\u001b[38;2;101;123;131m\u001b[48;2;253;246;227m \u001b[38;2;38;139;210mimports\u001b[38;2;0;43;54m = \u001b[38;2;69;133;136m[\u001b[38;2;0;43;54m \u001b[38;2;38;139;210minputs\u001b[38;2;0;43;54m.\u001b[38;2;38;139;210mclan-core\u001b[38;2;0;43;54m.\u001b[38;2;38;139;210mclanModules\u001b[38;2;0;43;54m.\u001b[38;2;38;139;210mdiskLayouts\u001b[38;2;0;43;54m \u001b[38;2;69;133;136m]\u001b[38;2;0;43;54m;\u001b[5;6H\u001b[38;2;38;139;210m▎ \u001b[38;2;101;123;131m▏ ▏ \u001b[38;2;131;148;150m\u001b[48;2;238;232;213m▏\u001b[38;2;101;123;131m\u001b[48;2;253;246;227m \u001b[38;2;38;139;210mclanCore\u001b[38;2;203;75;22m.\u001b[38;2;38;139;210mmachineIcon\u001b[38;2;0;43;54m = \u001b[38;2;42;161;152mnull\u001b[38;2;0;43;54m;\u001b[6;6H\u001b[38;2;38;139;210m▎ \u001b[38;2;101;123;131m▏ ▏ \u001b[38;2;131;148;150m\u001b[48;2;238;232;213m▏\u001b[38;2;101;123;131m\u001b[48;2;253;246;227m \u001b[38;2;38;139;210mclanCore\u001b[38;2;203;75;22m.\u001b[38;2;38;139;210mmachineDescription\u001b[38;2;0;43;54m = \"\u001b[38;2;133;153;0m\u001b[3mA simple NixOS VM\u001b(B\u001b[m\u001b[38;2;0;43;54m\u001b[48;2;253;246;227m\";\u001b[7;6H\u001b[38;2;38;139;210m▎ \u001b[38;2;101;123;131m▏ ▏ \u001b[38;2;131;148;150m\u001b[48;2;238;232;213m▏\u001b[38;2;101;123;131m\u001b[48;2;253;246;227m \u001b[38;2;38;139;210mclan\u001b[38;2;203;75;22m.\u001b[38;2;38;139;210mdiskLayouts\u001b[38;2;203;75;22m.\u001b[38;2;38;139;210msingleDiskExt4\u001b[38;2;0;43;54m = \u001b[38;2;69;133;136m{\u001b[8;6H\u001b[38;2;38;139;210m▎ \u001b[38;2;101;123;131m▏ ▏ \u001b[38;2;131;148;150m\u001b[48;2;238;232;213m▏\u001b[38;2;101;123;131m\u001b[48;2;253;246;227m ▏ \u001b[38;2;38;139;210mdevice\u001b[38;2;0;43;54m = \"\u001b[38;2;133;153;0m\u001b[3m/dev/sda\u001b(B\u001b[m\u001b[38;2;0;43;54m\u001b[48;2;253;246;227m\";\u001b[9;6H\u001b[38;2;38;139;210m▎ \u001b[38;2;101;123;131m▏ ▏ \u001b[38;2;131;148;150m\u001b[48;2;238;232;213m▏\u001b[38;2;101;123;131m\u001b[48;2;253;246;227m \u001b[38;2;69;133;136m}\u001b[38;2;0;43;54m;\u001b[10;6H \u001b[38;2;101;123;131m▏ ▏ \u001b[38;2;131;148;150m\u001b[48;2;238;232;213m▏\u001b[11;6H\u001b[38;2;38;139;210m\u001b[48;2;253;246;227m▎ \u001b[38;2;101;123;131m▏ ▏ \u001b[?25l\u001b(B\u001b[m"]
|
||||
[6.425108, "o", "\u001b[38;2;131;148;150m\u001b[48;2;238;232;213m▏\u001b[38;2;101;123;131m\u001b[48;2;253;246;227m \u001b[38;2;38;139;210mservices\u001b[38;2;203;75;22m.\u001b[38;2;38;139;210mgetty\u001b[38;2;203;75;22m.\u001b[38;2;38;139;210mautologinUser\u001b[38;2;0;43;54m = \"\u001b[38;2;133;153;0m\u001b[3mroot\u001b(B\u001b[m\u001b[38;2;0;43;54m\u001b[48;2;253;246;227m\";\u001b[12;6H\u001b[38;2;38;139;210m▎ \u001b[38;2;101;123;131m\u001b[48;2;238;232;213m▏ ▏ \u001b[38;2;215;153;33m}\u001b[38;2;0;43;54m;\u001b[13;6H\u001b[48;2;253;246;227m \u001b[38;2;204;36;29m}\u001b[12;13H\u001b[?12l\u001b[?25h\u001b[2 q\u001b(B\u001b[m"]
|
||||
[6.599747, "o", "\u001b[?25l\u001b[38;2;62;68;82m\u001b[48;2;152;195;121m\u001b[1m\u001b[27;1H 27 \u001b(B\u001b[m\u001b[38;2;152;195;121m\u001b[48;2;40;44;52m\u001b[39m\u001b[48;5;173m \u001b[38;2;40;44;52m\u001b[48;2;0;95;255m\u001b[38;2;235;237;239m 1 nvim \u001b[38;2;0;95;255m\u001b[39m\u001b[48;5;173m \u001b[38;2;229;192;123m\u001b[38;2;224;108;117m\u001b[48;2;229;192;123m\u001b(B\u001b[m\u001b[?12l\u001b[?25h\u001b[2 q\u001b[12;13H"]
|
||||
[6.865499, "o", "\u001b[25;1H\u001b[38;2;238;232;213m\u001b[48;2;253;246;227m \u001b[26;1H\u001b[38;2;253;246;227m\u001b[48;2;7;54;66m \u001b[38;2;7;54;66m\u001b[48;2;253;246;227m \u001b[38;2;63;93;114m \u001b[38;2;0;43;54m \u001b[26;5H\u001b[38;2;63;93;114m \u001b[38;2;0;43;54mnix\u001b[38;2;253;246;227m \u001b[38;2;0;43;54m \u001b[38;2;253;246;227m \u001b[38;2;0;43;54m nixfmt, nil_ls\u001b[38;2;253;246;227m \u001b[38;2;133;153;0m TS\u001b[38;2;253;246;227m \u001b[38;2;0;43;54m 16:6 94%\u001b[38;2;220;50;47m ██\u001b[38;2;7;54;66m \u001b[38;2;253;246;227m\u001b[48;2;7;54;66m \u001b[26;4H\u001b[38;2;220;50;47m\u001b[48;2;253;246;227m\u001b[1m main\u001b(B\u001b[m\u001b[38;2;253;246;227m\u001b[48;2;253;246;227m \u001b[38;2;63;93;114m \u001b[38;2;0;43;54mnix\u001b[38;2;253;246;227m \u001b[38;2;133;153;0m\u001b[1m 4\u001b[38;2;38;139;210m 9\u001b(B\u001b[m\u001b[38;2;253;246;227m\u001b[48;2;253;246;227m \u001b[38;2;0;43;54m \u001b[38;2;253;246;227m \u001b[38;2;0;43;54m LSP\u001b[12;13H\u001b(B\u001b[m"]
|
||||
[7.395877, "o", "\u001b[2C\u001b[38;2;147;161;161m\u001b[48;2;238;232;213m Not Committed Yet\u001b[13G\u001b(B\u001b[m"]
|
||||
[8.904583, "o", "\u001b[7;1H\u001b[38;2;238;232;213m\u001b[48;2;253;246;227m\u001b[12;13H\u001b(B\u001b[m"]
|
||||
[10.10217, "o", "\u001b[2C\u001b[38;2;0;43;54m\u001b[48;2;238;232;213m \u001b[13G\u001b(B\u001b[m"]
|
||||
[10.675462, "o", "\u001b[11;2H\u001b[38;2;0;43;54m\u001b[48;2;253;246;227m 15 \u001b[38;2;38;139;210m▎ \u001b[38;2;101;123;131m\u001b[48;2;238;232;213m▏ ▏ \u001b[38;2;131;148;150m▏\u001b[38;2;101;123;131m \u001b[38;2;38;139;210mservices\u001b[38;2;203;75;22m.\u001b[38;2;38;139;210mgetty\u001b[38;2;203;75;22m.\u001b[38;2;38;139;210mautologinUser\u001b[38;2;0;43;54m = \"\u001b[38;2;133;153;0m\u001b[3mroot\u001b(B\u001b[m\u001b[38;2;0;43;54m\u001b[48;2;238;232;213m\"; \u001b[12;2H\u001b[38;2;131;148;150m 16 \u001b[38;2;38;139;210m\u001b[48;2;253;246;227m▎ \u001b[38;2;101;123;131m▏ ▏ \u001b[38;2;215;153;33m}\u001b[38;2;0;43;54m; \u001b[2;2H defaultVM\u001b[26;63H5:6 88%\u001b[38;2;220;50;47m ▇▇\u001b[11;13H\u001b(B\u001b[m"]
|
||||
[10.876321, "o", "\u001b[?25l"]
|
||||
[10.889974, "o", "\u001b[?12l\u001b[?25h\u001b[2 q"]
|
||||
[10.899079, "o", "\u001b[1;16H\u001b[38;2;0;43;54m\u001b[48;2;253;246;227m\u001b[1m\u001b[3m \u001b[38;2;220;50;47m \u001b[38;2;0;43;54m \u001b(B\u001b[m\u001b[38;2;253;246;227m\u001b[48;2;253;246;227m \u001b[11;2H\u001b[38;2;131;148;150m\u001b[48;2;238;232;213m 15 \u001b[38;2;38;139;210m\u001b[48;2;253;246;227m▎ \u001b[38;2;101;123;131m▏ ▏ \u001b[38;2;131;148;150m\u001b[48;2;238;232;213m▏\u001b[38;2;101;123;131m\u001b[48;2;253;246;227m \u001b[38;2;38;139;210mservices\u001b[38;2;203;75;22m.\u001b[38;2;38;139;210mgetty\u001b[38;2;203;75;22m.\u001b[38;2;38;139;210mautologinUser\u001b[38;2;0;43;54m = \"\u001b[38;2;133;153;0m\u001b[3mroot\u001b(B\u001b[m\u001b[38;2;0;43;54m\u001b[48;2;253;246;227m\"; \u001b[12;2H 16 \u001b[38;2;38;139;210m▎ \u001b[38;2;101;123;131m\u001b[48;2;238;232;213m▏ ▏ \u001b[38;2;131;148;150m▏\u001b[38;2;101;123;131m \u001b[38;2;0;43;54mclanCore\u001b[38;2;203;75;22m.\u001b[38;2;0;43;54msecrets\u001b[38;2;203;75;22m.\u001b[38;2;38;139;210mroot-password\u001b[38;2;0;43;54m = { \u001b[13;8H\u001b[38;2;101;123;131m\u001b[48;2;253;246;227m▏ ▏ \u001b[38;2;131;148;150m\u001b[48;2;238;232;213m▏\u001b[38;2;101;123;131m\u001b[48;2;253;246;227m ▏ \u001b[38;2;0;43;54msecrets\u001b[38;2;203;75;22m.\u001b[38;2;38;139;210mroot-password\u001b[38;2;0;43;54m = { };\r\n\u001b[38;2;238;232;213m \u001b[38;2;131;148;150m\u001b[48;2;238;232;213m 18 \u001b[38;2;0;43;54m\u001b[48;2;253;246;227m \u001b[38;2;101;123;131m▏ ▏ \u001b[38;2;131;148;150m\u001b[48;2;238;232;213m▏\u001b[38;2;101;123;131m\u001b[48;2;253;246;227m ▏ \u001b[38;2;0;43;54mfacts\u001b[38;2;203;75;22m.\u001b[38;2;38;139;210mroot-password-hash\u001b[38;2;0;43;54m = { }; \u001b[15;1H\u001b[38;2;238;232;213m \u001b[38;2;131;148;150m\u001b[48;2;238;232;213m 19 \u001b[38;2;0;43;54m\u001b[48;2;253;246;227m \u001b[38;2;101;123;131m▏ ▏ \u001b[38;2;131;148;150m\u001b[48;2;238;232;213m▏\u001b[38;2;101;123;131m\u001b[48;2;253;246;227m ▏ \u001b[38;2;0;43;54mgenerator\u001b[38;2;203;75;22m.\u001b[38;2;38;139;210mpath\u001b[38;2;0;43;54m = \u001b[38;2;220;50;47m\u001b[3mwith\u001b(B\u001b[m\u001b[38;2;0;43;54m\u001b[48;2;253;246;227m pkgs; [ \u001b[16;1H\u001b[38;2;238;232;213m \u001b[38;2;131;148;150m\u001b[48;2;238;232;213m 20 \u001b[38;2;0;43;54m\u001b[48;2;253;246;227m \u001b[38;2;101;123;131m▏ ▏ \u001b[38;2;131;148;150m\u001b[48;2;238;232;213m▏\u001b[38;2;101;123;131m\u001b[48;2;253;246;227m ▏ ▏ \u001b[38;2;0;43;54mcoreutils \u001b[17;1H\u001b[38;2;238;232;213m \u001b[38;2;131;148;150m\u001b[48;2;238;232;213m 21 \u001b[38;2;0;43;54m\u001b[48;2;253;246;227m \u001b[38;2;101;123;131m▏ ▏ \u001b[38;2;131;148;150m\u001b[48;2;238;232;213m▏\u001b[38;2;101;123;131m\u001b[48;2;253;246;227m ▏ ▏ \u001b[38;2;0;43;54mxkcdpass \u001b[18;1H\u001b[38;2;238;232;213m \u001b[38;2;131;148;150m\u001b[48;2;238;232;213m 22 \u001b[38;2;0;43;54m\u001b[48;2;253;246;227m \u001b[38;2;101;123;131m▏ ▏ \u001b[38;2;131;148;150m\u001b[48;2;238;232;213m▏\u001b[?25l\u001b(B\u001b[m"]
|
||||
[10.900033, "o", "\u001b[38;2;101;123;131m\u001b[48;2;253;246;227m ▏ ▏ \u001b[38;2;0;43;54mmkpasswd \u001b[19;1H\u001b[38;2;238;232;213m \u001b[38;2;131;148;150m\u001b[48;2;238;232;213m 23 \u001b[38;2;0;43;54m\u001b[48;2;253;246;227m \u001b[38;2;101;123;131m▏ ▏ \u001b[38;2;131;148;150m\u001b[48;2;238;232;213m▏\u001b[38;2;101;123;131m\u001b[48;2;253;246;227m ▏ \u001b[38;2;0;43;54m]; \u001b[20;1H\u001b[38;2;238;232;213m \u001b[38;2;131;148;150m\u001b[48;2;238;232;213m 24 \u001b[38;2;0;43;54m\u001b[48;2;253;246;227m \u001b[38;2;101;123;131m▏ ▏ \u001b[38;2;131;148;150m\u001b[48;2;238;232;213m▏\u001b[38;2;101;123;131m\u001b[48;2;253;246;227m ▏ \u001b[38;2;0;43;54mgenerator\u001b[38;2;203;75;22m.\u001b[38;2;38;139;210mscript\u001b[38;2;0;43;54m = '' \u001b[21;1H\u001b[38;2;238;232;213m \u001b[38;2;131;148;150m\u001b[48;2;238;232;213m 25 \u001b[38;2;0;43;54m\u001b[48;2;253;246;227m \u001b[38;2;101;123;131m▏ ▏ \u001b[38;2;131;148;150m\u001b[48;2;238;232;213m▏\u001b[38;2;101;123;131m\u001b[48;2;253;246;227m ▏ ▏ \u001b[38;2;133;153;0m\u001b[3mxkcdpass -n 3 -d - > $secrets/root-password\u001b(B\u001b[m\u001b[38;2;0;43;54m\u001b[48;2;253;246;227m \u001b[22;1H\u001b[38;2;238;232;213m \u001b[38;2;131;148;150m\u001b[48;2;238;232;213m 26 \u001b[38;2;0;43;54m\u001b[48;2;253;246;227m \u001b[38;2;101;123;131m▏ ▏ \u001b[38;2;131;148;150m\u001b[48;2;238;232;213m▏\u001b[38;2;101;123;131m\u001b[48;2;253;246;227m ▏ ▏ \u001b[38;2;133;153;0m\u001b[3mcat $secrets/root-password | mkpasswd -s -m sha-512 > $fact\u001b[23;1H\u001b(B\u001b[m\u001b[38;2;238;232;213m\u001b[48;2;253;246;227m \u001b[38;2;131;148;150m\u001b[48;2;238;232;213m 27 \u001b[38;2;0;43;54m\u001b[48;2;253;246;227m \u001b[38;2;101;123;131m▏ ▏ \u001b[38;2;131;148;150m\u001b[48;2;238;232;213m▏\u001b[38;2;101;123;131m\u001b[48;2;253;246;227m ▏ \u001b[38;2;0;43;54m''; \u001b[24;1H\u001b[38;2;238;232;213m \u001b[38;2;131;148;150m\u001b[48;2;238;232;213m 28 \u001b[38;2;0;43;54m\u001b[48;2;253;246;227m \u001b[38;2;101;123;131m▏ ▏ \u001b[38;2;131;148;150m\u001b[48;2;238;232;213m▏\u001b[38;2;101;123;131m\u001b[48;2;253;246;227m \u001b[38;2;0;43;54m}; \u001b[25;1H\u001b[38;2;238;232;213m \u001b[38;2;131;148;150m\u001b[48;2;238;232;213m 29 \u001b[38;2;0;43;54m\u001b[48;2;253;246;227m \u001b[38;2;101;123;131m▏ ▏ \u001b[38;2;215;153;33m}\u001b[38;2;0;43;54m; \u001b[26;63H6:7 53%\u001b[38;2;220;50;47m ▅▅\u001b[12;14H\u001b[?12l\u001b[?25h\u001b[2 q\u001b(B\u001b[m"]
|
||||
[10.900204, "o", "\u001b[?25l\u001b[?12l\u001b[?25h\u001b[2 q"]
|
||||
[10.995571, "o", "\u001b[6G\u001b[38;2;133;153;0m\u001b[48;2;253;246;227m▎ \u001b[13;6H▎ \u001b[14;6H▎ \u001b[15;6H▎ \u001b[16;6H▎ \u001b[17;6H▎ \u001b[18;6H▎ \u001b[19;6H▎ \u001b[20;6H▎ \u001b[21;6H▎ \u001b[22;6H▎ \u001b[23;6H▎ \u001b[24;6H▎ \u001b[25;6H\u001b[38;2;38;139;210m▎ \u001b[12;14H\u001b(B\u001b[m"]
|
||||
[11.060961, "o", "\u001b[26;1H\u001b[38;2;0;43;54m\u001b[48;2;253;246;227mAutoSave: saved at 15:46:29 \u001b[26;28H\u001b(B\u001b[m"]
|
||||
[11.065201, "o", "\u001b[25;1H\u001b[38;2;238;232;213m\u001b[48;2;253;246;227m \u001b[38;2;131;148;150m\u001b[48;2;238;232;213m 29 \u001b[38;2;38;139;210m\u001b[48;2;253;246;227m▎ \u001b[38;2;101;123;131m▏ ▏ \u001b[38;2;215;153;33m}\u001b[38;2;0;43;54m; \u001b[26;1H\u001b[38;2;253;246;227m\u001b[48;2;7;54;66m \u001b[38;2;7;54;66m\u001b[48;2;253;246;227m \u001b[38;2;220;50;47m\u001b[1m main\u001b(B\u001b[m\u001b[38;2;253;246;227m\u001b[48;2;253;246;227m \u001b[38;2;63;93;114m \u001b[38;2;0;43;54mnix\u001b[38;2;253;246;227m \u001b[38;2;133;153;0m\u001b[1m 4\u001b[38;2;38;139;210m 9\u001b(B\u001b[m\u001b[38;2;253;246;227m\u001b[48;2;253;246;227m \u001b[38;2;0;43;54m \u001b[38;2;253;246;227m \u001b[38;2;0;43;54m LSP\u001b[38;2;253;246;227m \u001b[38;2;133;153;0m TS\u001b[38;2;253;246;227m \u001b[38;2;0;43;54m 16:7 53%\u001b[38;2;220;50;47m ▅▅\u001b[1;16H\u001b[1m\u001b[3m \u001b[26;74H\u001b(B\u001b[m\u001b[38;2;7;54;66m\u001b[48;2;253;246;227m \u001b[38;2;253;246;227m\u001b[48;2;7;54;66m \u001b[1;17H\u001b[38;2;220;50;47m\u001b[48;2;253;246;227m\u001b[1m\u001b[3m \u001b[38;2;0;43;54m \u001b(B\u001b[m\u001b[38;2;253;246;227m\u001b[48;2;253;246;227m \u001b[38;2;0;43;54m \u001b[26d\u001b[38;2;133;153;0m\u001b[1m17\u001b[38;2;38;139;210m 9\u001b(B\u001b[m\u001b[38;2;253;246;227m\u001b[48;2;253;246;227m \u001b[12;14H\u001b(B\u001b[m"]
|
||||
[11.065362, "o", "\u001b[?25l\u001b[?12l\u001b[?25h\u001b[2 q"]
|
||||
[11.105869, "o", "\u001b[38;2;38;139;210m\u001b[48;2;238;232;213mclanCore\u001b[38;2;203;75;22m.\u001b[38;2;38;139;210msecrets\u001b[13;16H\u001b[48;2;253;246;227msecrets\u001b[14;16Hfacts\u001b[15;16Hgenerator\u001b[38;2;203;75;22m.\u001b[38;2;38;139;210mpath\u001b[38;2;0;43;54m = \u001b[38;2;220;50;47m\u001b[3mwith\u001b(B\u001b[m\u001b[38;2;0;43;54m\u001b[48;2;253;246;227m \u001b[38;2;38;139;210mpkgs\u001b[16;18Hcoreutils\u001b[17;18Hxkcdpass\u001b[18;18Hmkpasswd\u001b[20;16Hgenerator\u001b[12;14H\u001b(B\u001b[m"]
|
||||
[11.280265, "o", "\u001b[5d\u001b[38;2;253;246;227m\u001b[48;2;133;144;0mclanCore\u001b[6;14HclanCore\u001b[12;14HclanCore\u001b[8D\u001b(B\u001b[m"]
|
||||
[11.418915, "o", "\u001b[26;1H\u001b[38;2;0;43;54m\u001b[48;2;253;246;227m: \u001b[26;2H\u001b(B\u001b[m"]
|
||||
[11.554402, "o", "\u001b[38;2;0;43;54m\u001b[48;2;253;246;227mw\b\u001b(B\u001b[m"]
|
||||
[11.677048, "o", "\u001b[38;2;0;43;54m\u001b[48;2;253;246;227m \b\u001b(B\u001b[m"]
|
||||
[11.682489, "o", "\r\u001b[38;2;253;246;227m\u001b[48;2;38;139;210m \u001b[38;2;38;139;210m\u001b[48;2;253;246;227m \u001b[38;2;220;50;47m\u001b[1m main\u001b(B\u001b[m\u001b[38;2;253;246;227m\u001b[48;2;253;246;227m \u001b[38;2;63;93;114m \u001b[38;2;0;43;54mnix\u001b[38;2;253;246;227m \u001b[38;2;133;153;0m\u001b[1m 17\u001b[38;2;38;139;210m 9\u001b(B\u001b[m\u001b[38;2;253;246;227m\u001b[48;2;253;246;227m \u001b[38;2;0;43;54m \u001b[38;2;253;246;227m \u001b[38;2;0;43;54m LSP\u001b[38;2;253;246;227m \u001b[38;2;133;153;0m TS\u001b[38;2;253;246;227m \u001b[38;2;0;43;54m 16:7 53%\u001b[38;2;220;50;47m ▅▅\r\u001b[38;2;0;43;54m:w \u001b[26;1H\u001b(B\u001b[m"]
|
||||
[11.682546, "o", "\u001b[38;2;0;43;54m\u001b[48;2;253;246;227m\"default-vm/machines.nix\"\u001b(B\u001b[m"]
|
||||
[11.697889, "o", "\u001b[C\u001b[38;2;0;43;54m\u001b[48;2;253;246;227m30L, 852B written\u001b(B\u001b[m"]
|
||||
[11.699485, "o", "\u001b[25;1H\u001b[38;2;238;232;213m\u001b[48;2;253;246;227m \u001b[38;2;131;148;150m\u001b[48;2;238;232;213m 29 \u001b[38;2;38;139;210m\u001b[48;2;253;246;227m▎ \u001b[38;2;101;123;131m▏ ▏ \u001b[38;2;215;153;33m}\u001b[38;2;0;43;54m; \u001b[26;1H\u001b[38;2;253;246;227m\u001b[48;2;38;139;210m \u001b[38;2;38;139;210m\u001b[48;2;253;246;227m \u001b[38;2;220;50;47m\u001b[1m main\u001b(B\u001b[m\u001b[38;2;253;246;227m\u001b[48;2;253;246;227m \u001b[38;2;63;93;114m \u001b[38;2;0;43;54mnix\u001b[38;2;253;246;227m \u001b[38;2;133;153;0m\u001b[1m 17\u001b[38;2;38;139;210m 9\u001b(B\u001b[m\u001b[38;2;253;246;227m\u001b[48;2;253;246;227m \u001b[38;2;0;43;54m \u001b[38;2;253;246;227m \u001b[38;2;0;43;54m LSP\u001b[38;2;253;246;227m \u001b[38;2;133;153;0m TS\u001b[38;2;253;246;227m \u001b[38;2;0;43;54m 16:7 53%\u001b[38;2;220;50;47m ▅▅\r\u001b[38;2;253;246;227m\u001b[48;2;7;54;66m \u001b[38;2;7;54;66m\u001b[48;2;253;246;227m \u001b[70C\u001b[38;2;38;139;210m \u001b[38;2;253;246;227m\u001b[48;2;38;139;210m \u001b[26;4H\u001b[38;2;220;50;47m\u001b[48;2;253;246;227m\u001b[1m main\u001b(B\u001b[m\u001b[38;2;253;246;227m\u001b[48;2;253;246;227m \u001b[38;2;63;93;114m \u001b[38;2;0;43;54mnix\u001b[38;2;253;246;227m \u001b[38;2;133;153;0m\u001b[1m 17\u001b[38;2;38;139;210m 9\u001b(B\u001b[m\u001b[38;2;253;246;227m\u001b[48;2;253;246;227m \u001b[38;2;0;43;54m \u001b[38;2;253;246;227m \u001b[38;2;0;43;54m LSP\u001b[38;2;253;246;227m \u001b[38;2;133;153;0m TS\u001b[38;2;253;246;227m \u001b[38;2;0;43;54m 16:7 53%\u001b[38;2;220;50;47m ▅▅\r\u001b[38;2;0;43;54m\"default-vm/machines.nix\" 30L, 852B written \u001b[12;14H\u001b(B\u001b[m"]
|
||||
[11.703846, "o", "\u001b[25;1H\u001b[38;2;238;232;213m\u001b[48;2;253;246;227m \u001b[38;2;131;148;150m\u001b[48;2;238;232;213m 29 \u001b[38;2;38;139;210m\u001b[48;2;253;246;227m▎ \u001b[38;2;101;123;131m▏ ▏ \u001b[38;2;215;153;33m}\u001b[38;2;0;43;54m; \u001b[26;1H\u001b[38;2;253;246;227m\u001b[48;2;7;54;66m \u001b[38;2;7;54;66m\u001b[48;2;253;246;227m \u001b[38;2;220;50;47m\u001b[1m main\u001b(B\u001b[m\u001b[38;2;253;246;227m\u001b[48;2;253;246;227m \u001b[38;2;63;93;114m \u001b[38;2;0;43;54mnix\u001b[38;2;253;246;227m \u001b[38;2;133;153;0m\u001b[1m 17\u001b[38;2;38;139;210m 9\u001b(B\u001b[m\u001b[38;2;253;246;227m\u001b[48;2;253;246;227m \u001b[38;2;0;43;54m \u001b[38;2;253;246;227m \u001b[38;2;0;43;54m LSP\u001b[38;2;253;246;227m \u001b[38;2;133;153;0m TS\u001b[38;2;253;246;227m \u001b[38;2;0;43;54m 16:7 53%\u001b[38;2;220;50;47m ▅▅\u001b[38;2;7;54;66m \u001b[38;2;253;246;227m\u001b[48;2;7;54;66m \u001b[12;14H\u001b(B\u001b[m"]
|
||||
[11.890889, "o", "\u001b[35C\u001b[38;2;147;161;161m\u001b[48;2;238;232;213m Not Committed Yet\u001b[14G\u001b(B\u001b[m"]
|
||||
[12.131192, "o", "\u001b[26;1H\u001b[38;2;0;43;54m\u001b[48;2;253;246;227m: \u001b[26;2H\u001b(B\u001b[m"]
|
||||
[12.29657, "o", "\u001b[38;2;0;43;54m\u001b[48;2;253;246;227mx\u001b(B\u001b[m"]
|
||||
[12.441358, "o", "\r"]
|
||||
[12.467753, "o", "\u001b[A\u001b[38;2;238;232;213m\u001b[48;2;253;246;227m \u001b[38;2;131;148;150m\u001b[48;2;238;232;213m 29 \u001b[38;2;38;139;210m\u001b[48;2;253;246;227m▎ \u001b[38;2;101;123;131m▏ ▏ \u001b[38;2;215;153;33m}\u001b[38;2;0;43;54m; \u001b[26;1H\u001b[38;2;253;246;227m\u001b[48;2;38;139;210m \u001b[38;2;38;139;210m\u001b[48;2;253;246;227m \u001b[38;2;220;50;47m\u001b[1m main\u001b(B\u001b[m\u001b[38;2;253;246;227m\u001b[48;2;253;246;227m \u001b[38;2;63;93;114m \u001b[38;2;0;43;54mnix\u001b[38;2;253;246;227m \u001b[38;2;133;153;0m\u001b[1m 17\u001b[38;2;38;139;210m 9\u001b(B\u001b[m\u001b[38;2;253;246;227m\u001b[48;2;253;246;227m \u001b[38;2;0;43;54m \u001b[38;2;253;246;227m \u001b[38;2;0;43;54m LSP\u001b[38;2;253;246;227m \u001b[38;2;133;153;0m TS\u001b[38;2;253;246;227m \u001b[38;2;0;43;54m 16:7 53%\u001b[38;2;220;50;47m ▅▅\u001b[38;2;38;139;210m \u001b[38;2;253;246;227m\u001b[48;2;38;139;210m \u001b[3;6H\u001b[38;2;101;123;131m\u001b[48;2;253;246;227m▏ ▏ \u001b[38;2;131;148;150m\u001b[48;2;238;232;213m▏\u001b[38;2;101;123;131m\u001b[48;2;253;246;227m \u001b[38;2;0;43;54m \u001b[4;6H\u001b[38;2;101;123;131m▏ ▏ \u001b[38;2;131;148;150m\u001b[48;2;238;232;213m▏\u001b[38;2;101;123;131m\u001b[48;2;253;246;227m \u001b[38;2;0;43;54m \u001b[5;6H\u001b[38;2;101;123;131m▏ ▏ \u001b[38;2;131;148;150m\u001b[48;2;238;232;213m▏\u001b[38;2;101;123;131m\u001b[48;2;253;246;227m \u001b[38;2;0;43;54m \u001b[6;6H\u001b[38;2;101;123;131m▏ ▏ \u001b[38;2;131;148;150m\u001b[48;2;238;232;213m▏\u001b[38;2;101;123;131m\u001b[48;2;253;246;227m \u001b[38;2;0;43;54m \u001b[7;6H\u001b[38;2;101;123;131m▏ ▏ \u001b[38;2;131;148;150m\u001b[48;2;238;232;213m▏\u001b[38;2;101;123;131m\u001b[48;2;253;246;227m \u001b[38;2;0;43;54m \u001b[8;6H\u001b[38;2;101;123;131m▏ ▏ \u001b[38;2;131;148;150m\u001b[48;2;238;232;213m▏\u001b[38;2;101;123;131m\u001b[48;2;253;246;227m ▏ \u001b[38;2;0;43;54m \u001b[9;6H\u001b[38;2;101;123;131m▏ ▏ \u001b[38;2;131;148;150m\u001b[48;2;238;232;213m▏\u001b[38;2;101;123;131m\u001b[48;2;253;246;227m \u001b[38;2;0;43;54m \u001b[10;6H\u001b[38;2;101;123;131m▏ ▏ \u001b[38;2;131;148;150m\u001b[48;2;238;232;213m▏\u001b[38;2;0;43;54m\u001b[48;2;253;246;227m \u001b[11;6H\u001b[38;2;101;123;131m▏ ▏ \u001b[38;2;131;148;150m\u001b[48;2;238;232;213m▏\u001b[38;2;101;123;131m\u001b[48;2;253;246;227m \u001b[38;2;0;43;54m \u001b[12;6H\u001b[38;2;101;123;131m\u001b[48;2;238;232;213m▏\u001b[38;2;147;161;161m Not Committed Yet\u001b[38;2;0;43;54m \u001b[13;6H\u001b[38;2;101;123;131m\u001b[48;2;253;246;227m▏ ▏ \u001b[38;2;131;148;150m\u001b[48;2;238;232;213m▏\u001b[38;2;101;123;131m\u001b[48;2;253;246;227m ▏ \u001b[38;2;0;43;54m \u001b[14;6H\u001b[38;2;101;123;131m▏ ▏ \u001b[38;2;131;148;150m\u001b[48;2;238;232;213m▏\u001b[38;2;101;123;131m\u001b[48;2;253;246;227m ▏ \u001b[?25l\u001b(B\u001b[m"]
|
||||
[12.468033, "o", "\u001b[38;2;0;43;54m\u001b[48;2;253;246;227m \u001b[15;6H\u001b[38;2;101;123;131m▏ ▏ \u001b[38;2;131;148;150m\u001b[48;2;238;232;213m▏\u001b[38;2;101;123;131m\u001b[48;2;253;246;227m ▏ \u001b[38;2;0;43;54m \u001b[16;6H\u001b[38;2;101;123;131m▏ ▏ \u001b[38;2;131;148;150m\u001b[48;2;238;232;213m▏\u001b[38;2;101;123;131m\u001b[48;2;253;246;227m ▏ ▏ \u001b[38;2;0;43;54m \u001b[17;6H\u001b[38;2;101;123;131m▏ ▏ \u001b[38;2;131;148;150m\u001b[48;2;238;232;213m▏\u001b[38;2;101;123;131m\u001b[48;2;253;246;227m ▏ ▏ \u001b[38;2;0;43;54m \u001b[18;6H\u001b[38;2;101;123;131m▏ ▏ \u001b[38;2;131;148;150m\u001b[48;2;238;232;213m▏\u001b[38;2;101;123;131m\u001b[48;2;253;246;227m ▏ ▏ \u001b[38;2;0;43;54m \u001b[19;6H\u001b[38;2;101;123;131m▏ ▏ \u001b[38;2;131;148;150m\u001b[48;2;238;232;213m▏\u001b[38;2;101;123;131m\u001b[48;2;253;246;227m ▏ \u001b[38;2;0;43;54m \u001b[20;6H\u001b[38;2;101;123;131m▏ ▏ \u001b[38;2;131;148;150m\u001b[48;2;238;232;213m▏\u001b[38;2;101;123;131m\u001b[48;2;253;246;227m ▏ \u001b[38;2;0;43;54m \u001b[21;6H\u001b[38;2;101;123;131m▏ ▏ \u001b[38;2;131;148;150m\u001b[48;2;238;232;213m▏\u001b[38;2;101;123;131m\u001b[48;2;253;246;227m ▏ ▏ \u001b[38;2;0;43;54m \u001b[22;6H\u001b[38;2;101;123;131m▏ ▏ \u001b[38;2;131;148;150m\u001b[48;2;238;232;213m▏\u001b[38;2;101;123;131m\u001b[48;2;253;246;227m ▏ ▏ \u001b[38;2;0;43;54m \u001b[23;6H\u001b[38;2;101;123;131m▏ ▏ \u001b[38;2;131;148;150m\u001b[48;2;238;232;213m▏\u001b[38;2;101;123;131m\u001b[48;2;253;246;227m ▏ \u001b[38;2;0;43;54m \u001b[24;6H\u001b[38;2;101;123;131m▏ ▏ \u001b[38;2;131;148;150m\u001b[48;2;238;232;213m▏\u001b[38;2;101;123;131m\u001b[48;2;253;246;227m \u001b[38;2;0;43;54m \u001b[25;6H\u001b[38;2;101;123;131m▏ ▏ \u001b[38;2;0;43;54m \r\n\u001b[38;2;253;246;227m\u001b[48;2;7;54;66m \u001b[38;2;7;54;66m\u001b[48;2;253;246;227m \u001b[38;2;63;93;114m \u001b[38;2;0;43;54mnix\u001b[38;2;253;246;227m \u001b[38;2;0;43;54m \u001b[38;2;253;246;227m \u001b[38;2;0;43;54m copilot, nixfmt, ni…\u001b[38;2;253;246;227m \u001b[38;2;133;153;0m TS\u001b[38;2;253;246;227m \u001b[38;2;0;43;54m 16:7 53%\u001b[38;2;220;50;47m ▅▅\u001b[38;2;7;54;66m \u001b[38;2;253;246;227m\u001b[48;2;7;54;66m \u001b[26;1H\u001b[?12l\u001b[?25h\u001b[2 q\u001b(B\u001b[m"]
|
||||
[12.468581, "o", "\u001b[27C\u001b[38;2;0;43;54m\u001b[48;2;253;246;227m \u001b[38;2;253;246;227m \u001b[38;2;0;43;54m copilot, nil_ls\r\u001b(B\u001b[m"]
|
||||
[12.479322, "o", "\u001b[?25l\u001b[Hdirenv: loading ~/work/clan/democlan/.envrc\u001b[K\r\ndirenv: using flake\u001b[K\r\ndirenv: nix-direnv: renewed cache\u001b[K\r\ndirenv: export +CONFIG_SHELL +HOST_PATH +IN_NIX_SHELL +NIX_BUILD_CORES +NIX_CFLAGS_COMPILE +NIX_ENFORCE_NO_NATIVE +NIX_LDFLAGS +NIX_STORE +SOURCE_DATE_EPOCH +__structuredAttrs +buildInputs +buildPhase +builder +cmakeFlags +configureFlags +depsBuildBuild +depsBuildBuildPropagated +depsBuildTarget +depsBuildTargetPropagated +depsHostHost +depsHostHostPropagated +depsTargetTarget +depsTargetTargetPropagated +doCheck +doInstallCheck +dontAddDisableDepTrack +mesonFlags +name +nativeBuildInputs +out +outputs +patches +phases +preferLocalBuild +propagatedBuildInputs +propagatedNativeBuildInputs +shell +shellHook +stdenv +strictDeps +system ~PATH ~XDG_DATA_DIRS\u001b[K\r\n[\u001b[36m\u001b[1mjoerg\u001b(B\u001b[m@turingmachine democlan]$ clan secrets list defaultVM\u001b[K\r\ndefaultVM-age.key\u001b[K\r\ndefaultVM-zerotier-identity-secret\u001b[K\r\n[\u001b[36m\u001b[1mjoerg\u001b(B\u001b[m@turingmachine democlan]$ nvim default-vm/machines.nix\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\u001b[?12l\u001b[?25h\u001b[2 q\u001b[9A"]
|
||||
[12.485348, "o", "[\u001b[36m\u001b[1mjoerg\u001b(B\u001b[m@turingmachine democlan]$ "]
|
||||
[12.98701, "o", "\u001b[?25l\u001b[38;2;62;68;82m\u001b[48;2;152;195;121m\u001b[1m\u001b[27;1H 27 \u001b(B\u001b[m\u001b[38;2;152;195;121m\u001b[48;2;40;44;52m\u001b[39m\u001b[48;5;173m \u001b[38;2;40;44;52m\u001b[48;2;0;95;255m\u001b[38;2;235;237;239m 1 bash \u001b[38;2;0;95;255m\u001b[39m\u001b[48;5;173m \u001b[38;2;229;192;123m\u001b[38;2;224;108;117m\u001b[48;2;229;192;123m\u001b(B\u001b[m\u001b[?12l\u001b[?25h\u001b[2 q\u001b[17;33H"]
|
||||
[16.111363, "o", "\u001b[7mclan facts generate defaultVM\r\n\u001b(B\u001b[m"]
|
||||
[16.360303, "o", "\u001b[17;33Hclan facts generate defaultVM\r\n"]
|
||||
[16.600273, "o", "\u001b[32mINFO\u001b[39m: Secret fact 'root-password' for service root-password is missing.\r\n\u001b[32mINFO\u001b[39m: Public fact 'root-password-hash' for service root-password is missing.\u001b[20;1H"]
|
||||
[16.724594, "o", "\u001b[?25l\u001b[38;2;62;68;82m\u001b[48;2;152;195;121m\u001b[1m\u001b[27d 27 \u001b(B\u001b[m\u001b[38;2;152;195;121m\u001b[48;2;40;44;52m\u001b[39m\u001b[48;5;173m \u001b[38;2;40;44;52m\u001b[48;2;0;95;255m\u001b[38;2;235;237;239m 1 python3.11 \u001b[38;2;0;95;255m\u001b[39m\u001b[48;5;173m \u001b[38;2;229;192;123m\u001b[38;2;224;108;117m\u001b[48;2;229;192;123m\u001b(B\u001b[m\u001b[?12l\u001b[?25h\u001b[2 q\u001b[20;1H"]
|
||||
[17.440346, "o", "successfully generated secrets\r\n"]
|
||||
[17.459389, "o", "[\u001b[36m\u001b[1mjoerg\u001b(B\u001b[m@turingmachine democlan]$ "]
|
||||
[19.388773, "o", "\u001b[?25l\u001b[38;2;62;68;82m\u001b[48;2;152;195;121m\u001b[1m\u001b[27;1H 27 \u001b(B\u001b[m\u001b[38;2;152;195;121m\u001b[48;2;40;44;52m\u001b[39m\u001b[48;5;173m \u001b[38;2;40;44;52m\u001b[48;2;0;95;255m\u001b[38;2;235;237;239m 1 bash \u001b[38;2;0;95;255m\u001b[39m\u001b[48;5;173m \u001b[38;2;229;192;123m\u001b[38;2;224;108;117m\u001b[48;2;229;192;123m\u001b(B\u001b[m\u001b[?12l\u001b[?25h\u001b[2 q\u001b[21;33H"]
|
||||
[19.936164, "o", "\u001b[7mclan secrets list defaultVM\r\n\u001b(B\u001b[m"]
|
||||
[20.197546, "o", "\u001b[21;33Hclan secrets list defaultVM\r\n"]
|
||||
[20.285495, "o", "defaultVM-age.key\r\ndefaultVM-zerotier-identity-secret\r\ndefaultVM-root-password\r\n"]
|
||||
[20.300228, "o", "[\u001b[36m\u001b[1mjoerg\u001b(B\u001b[m@turingmachine democlan]$ "]
|
||||
[23.181495, "o", "\u001b[7mclan secrets get defaultVM-root-password\r\n\u001b(B\u001b[m"]
|
||||
[23.418714, "o", "\u001b[25;33Hclan secrets get defaultVM-root-password\r\n"]
|
||||
[23.620955, "o", "\u001b[1;26r\u001b[26;1H\n\u001b[Ahunter-carefully-gothic\r\n\u001b[K\u001b[1;27r\u001b[26;1H"]
|
||||
[23.647279, "o", "[\u001b[36m\u001b[1mjoerg\u001b(B\u001b[m@turingmachine democlan]$ "]
|
||||
[26.577632, "o", "\u001b[1;26r\u001b[26;1H\n\u001b[25;33H\u001b[7mclan vms run defaultVM\u001b(B\u001b[m\r\n\u001b[K\u001b[1;27r\u001b[26;1H"]
|
||||
[26.806946, "o", "\u001b[25;33Hclan vms run defaultVM\r\n"]
|
||||
[27.646545, "o", "\u001b[?25l\u001b[38;2;62;68;82m\u001b[48;2;152;195;121m\u001b[1m\r\n 27 \u001b(B\u001b[m\u001b[38;2;152;195;121m\u001b[48;2;40;44;52m\u001b[39m\u001b[48;5;173m \u001b[38;2;40;44;52m\u001b[48;2;0;95;255m\u001b[38;2;235;237;239m 1 python3.11 \u001b[38;2;0;95;255m\u001b[39m\u001b[48;5;173m \u001b[38;2;229;192;123m\u001b[38;2;224;108;117m\u001b[48;2;229;192;123m\u001b(B\u001b[m\u001b[?12l\u001b[?25h\u001b[2 q\u001b[26;1H"]
|
||||
[29.264462, "o", "\u001b[1;26r\u001b[26;1H\n\u001b[Athese 2 derivations will be built:\r\n\u001b[K\u001b[1;27r\u001b[26;1H"]
|
||||
[29.264861, "o", "\u001b[1;26r\u001b[1;1H\u001b[2S\u001b[24d /nix/store/h9s4nf3z2wzwdq82fs8wl5xv1pdwkdy8-secrets.json.drv\r\n /nix/store/dlw5kpv0k9ghr6qy6n232yijvjps6p1h-deployment.json.drv\u001b[K\r\n\u001b[K\u001b[1;27r\u001b[26;1H"]
|
||||
[29.940855, "o", "\u001b[1;26r\u001b[1;1H\u001b[2S\u001b[24dbuilding '/nix/store/h9s4nf3z2wzwdq82fs8wl5xv1pdwkdy8-secrets.json.drv' on 'ssh-ng://nix@vislor'...\u001b[K\r\n\u001b[K\u001b[1;27r\u001b[26;1H"]
|
||||
[30.696903, "o", "\u001b[1;26r\u001b[26;1H\n\u001b[Acopying 1 paths...\r\n\u001b[K\u001b[1;27r\u001b[26;1H"]
|
||||
[30.69779, "o", "\u001b[1;26r\u001b[1;1H\u001b[2S\u001b[24dcopying path '/nix/store/95hpifr8ki22rn215m4a32l6pzfcadya-source' to 'ssh-ng://nix@vislor'...\u001b[K\r\n\u001b[K\u001b[1;27r\u001b[26;1H"]
|
||||
[31.290212, "o", "\u001b[1;26r\u001b[26;1H\n\u001b[Abuilding '/nix/store/h9s4nf3z2wzwdq82fs8wl5xv1pdwkdy8-secrets.json.drv'...\r\n\u001b[K\u001b[1;27r\u001b[26;1H"]
|
||||
[31.377581, "o", "\u001b[1;26r\u001b[26;1H\n\u001b[Acopying 1 paths...\r\n\u001b[K\u001b[1;27r\u001b[26;1H"]
|
||||
[31.378828, "o", "\u001b[1;26r\u001b[1;1H\u001b[2S\u001b[24dcopying path '/nix/store/s9l1z97hv61cyzh15732hmbir0qgc7my-secrets.json' from 'ssh-ng://nix@vislor'...\u001b[K\r\n\u001b[K\u001b[1;27r\u001b[26;1H"]
|
||||
[31.413254, "o", "\u001b[1;26r\u001b[1;1H\u001b[2S\u001b[24dbuilding '/nix/store/dlw5kpv0k9ghr6qy6n232yijvjps6p1h-deployment.json.drv'...\u001b[K\r\n\u001b[K\u001b[1;27r\u001b[26;1H"]
|
||||
[31.480389, "o", "\u001b[1;26r\u001b[26;1H\n\u001b[Asuccessfully generated secrets\r\n\u001b[K\u001b[1;27r\u001b[26;1H"]
|
||||
[37.98242, "o", "\u001b[1;26r\u001b[26;1H\n\u001b[Athese 7 derivations will be built:\r\n\u001b[K\u001b[1;27r\u001b[26;1H"]
|
||||
[37.985846, "o", "\u001b[1;26r\u001b[1;1H\u001b[9S\u001b[17d /nix/store/6rrrzsnddxnmfi9q0m6lgcgcm9xkq0jr-manifest.json.drv\r\n /nix/store/hhqs3qcii053qr6wjf7891pishs684am-unit-sops-install-secrets.service.drv\u001b[K\r\n /nix/store/67rpkfl5swmhwryz3nad7pf0k407qyd2-system-units.drv\u001b[K\r\n /nix/store/ipxbscwnajmk4i1qcg7jgvdk8k3h23p1-etc.drv\u001b[K\r\n /nix/store/43w4gj6qdjg67yvns68rak304xzmgvn2-nixos-system-nixos-24.05.20240325.57e6b3a.drv\u001b[K\r\n /nix/store/237wdwyg0wxnsdmm4c45m0y9zqvjdi60-closure-info.drv\u001b[K\r\n /nix/store/wb8fxnq0q2bq9mpk2fsf935cx1qvi7sf-vm.json.drv\u001b[K\r\n\u001b[K\u001b[1;27r\u001b[26;1H"]
|
||||
[38.075838, "o", "\u001b[1;26r\u001b[26;1H\n\u001b[Abuilding '/nix/store/6rrrzsnddxnmfi9q0m6lgcgcm9xkq0jr-manifest.json.drv'...\r\n\u001b[K\u001b[1;27r\u001b[26;1H"]
|
||||
[38.196993, "o", "\u001b[1;26r\u001b[1;1H\u001b[2S\u001b[24dbuilding '/nix/store/hhqs3qcii053qr6wjf7891pishs684am-unit-sops-install-secrets.service.drv'...\u001b[K\r\n\u001b[K\u001b[1;27r\u001b[26;1H"]
|
||||
[38.308067, "o", "\u001b[1;26r\u001b[26;1H\n\u001b[Abuilding '/nix/store/67rpkfl5swmhwryz3nad7pf0k407qyd2-system-units.drv'...\r\n\u001b[K\u001b[1;27r\u001b[26;1H"]
|
||||
[39.197022, "o", "\u001b[1;26r\u001b[26;1H\n\u001b[Abuilding '/nix/store/ipxbscwnajmk4i1qcg7jgvdk8k3h23p1-etc.drv'...\r\n\u001b[K\u001b[1;27r\u001b[26;1H"]
|
||||
[39.756427, "o", "\u001b[1;26r\u001b[1;1H\u001b[2S\u001b[24dbuilding '/nix/store/43w4gj6qdjg67yvns68rak304xzmgvn2-nixos-system-nixos-24.05.20240325.57e6b3a.drv'...\u001b[K\r\n\u001b[K\u001b[1;27r\u001b[26;1H"]
|
||||
[40.24132, "o", "\u001b[1;26r\u001b[26;1H\n\u001b[Abuilding '/nix/store/237wdwyg0wxnsdmm4c45m0y9zqvjdi60-closure-info.drv'...\r\n\u001b[K\u001b[1;27r\u001b[26;1H"]
|
||||
[40.360751, "o", "\u001b[1;26r\u001b[26;1H\n\u001b[Abuilding '/nix/store/wb8fxnq0q2bq9mpk2fsf935cx1qvi7sf-vm.json.drv'...\r\n\u001b[K\u001b[1;27r\u001b[26;1H"]
|
||||
[40.592833, "o", "\u001b[1;26r\u001b[1;1H\u001b[3S\u001b[23dFormatting '/home/joerg/.cache/clan/tmp_p0fniar/disk.img', fmt=qcow2 cluster_size=65536 extended_l2=off compression_type=zlib size=1073741824 lazy_refcounts=off refcount_bits=16\u001b[K\r\n\u001b[K\u001b[1;27r\u001b[26;1H"]
|
||||
[40.679182, "o", "\u001b[1;26r\u001b[1;1H\u001b[3S\u001b[23d\u001b[90m[\u001b[39m2024-03-25T14:46:58Z \u001b[33mWARN \u001b[39m virtiofsd::limits\u001b[90m]\u001b[39m Failure when trying to set the limit to 1000000, the hard limit (524288) of open file descriptors is used instead.\u001b[K\r\n\u001b[K\u001b[1;27r\u001b[26;1H"]
|
||||
[40.690331, "o", "\u001b[1;26r\u001b[1;1H\u001b[4S\u001b[22d\u001b[90m[\u001b[39m2024-03-25T14:46:58Z \u001b[33mWARN \u001b[39m virtiofsd::sandbox\u001b[90m]\u001b[39m Couldn't set the process uid as root: -1\u001b[K\r\n\u001b[90m[\u001b[39m2024-03-25T14:46:58Z \u001b[33mWARN \u001b[39m virtiofsd::sandbox\u001b[90m]\u001b[39m Couldn't set the process gid as root: -1\u001b[K\r\n\u001b[K\u001b[1;27r\u001b[26;1H"]
|
||||
[40.692722, "o", "\u001b[1;26r\u001b[1;1H\u001b[2S\u001b[24d\u001b[90m[\u001b[39m2024-03-25T14:46:58Z \u001b[32mINFO \u001b[39m virtiofsd\u001b[90m]\u001b[39m Waiting for vhost-user socket connection...\u001b[K\r\n\u001b[K\u001b[1;27r\u001b[26;1H"]
|
||||
[40.873988, "o", "\u001b[1;26r\u001b[26;1H\n\u001b[A\u001b[90m[\u001b[39m2024-03-25T14:46:59Z \u001b[32mINFO \u001b[39m virtiofsd\u001b[90m]\u001b[39m Client connected, servicing requests\r\n\u001b[K\u001b[1;27r\u001b[26;1H"]
|
||||
[45.061985, "o", "\u001b[1;26r\u001b[1;1H\u001b[5S\u001b[22d\u001b[K\r\n\u001b[32m\u001b[1m<<< Welcome to NixOS 24.05.20240325.57e6b3a (x86_64) - hvc0 >>>\u001b(B\u001b[m\u001b[K\r\n\u001b[K\r\n\u001b[K\r\nnixos \u001b[K\u001b[1;27r\u001b[26;7H"]
|
||||
[45.062251, "o", "\u001b[1;26r\u001b[1;1H\u001b[2S\u001b[24;7Hlogin: root (automatic login)\r\n\u001b[K\r\n\u001b[K\u001b[1;27r\u001b[26;1H"]
|
||||
[45.261259, "o", "\u001b[1;26r\u001b[26;1H\n\u001b[31m\u001b[1m[root@nixos:~]#\u001b(B\u001b[m \u001b[K\u001b[1;27r\u001b[26;17H"]
|
||||
[45.261321, "o", "\u001b[?25l\u001b[?12l\u001b[?25h\u001b[2 q"]
|
||||
[45.821781, "o", "\u001b[1;26r\u001b[26;1H\n\u001b[25;17H\u001b[7mcat /run/secrets/defaultVM-root-password\u001b(B\u001b[m\r\n\u001b[K\u001b[1;27r\u001b[26;1H"]
|
||||
[46.22211, "o", "\u001b[25;17Hcat /run/secrets/defaultVM-root-password\r\n"]
|
||||
[46.232725, "o", "\u001b[1;26r\u001b[26;1H\n\u001b[Ahunter-carefully-gothic\r\n\u001b[K\u001b[1;27r\u001b[26;1H"]
|
||||
[46.23367, "o", "\u001b[1;26r\u001b[26;1H\n\u001b[K\u001b[1;27r\u001b[26;1H"]
|
||||
[46.234259, "o", "\u001b[31m\u001b[1m[root@nixos:~]#\u001b(B\u001b[m "]
|
||||
[46.234487, "o", "\u001b[?25l\u001b[?12l\u001b[?25h\u001b[2 q"]
|
||||
[48.430529, "o", "\u001b[1;27r\u001b(B\u001b[m\u001b[?1l\u001b>\u001b[H\u001b[2J\u001b[ q\u001b[?12l\u001b[?25h\u001b[?1000l\u001b[?1002l\u001b[?1003l\u001b[?1006l\u001b[?1005l\u001b[?2004l\u001b[?7727l\u001b[?1004l\u001b[?1049l\u001b[23;0;0t"]
|
||||
[48.431123, "o", "[detached (from session 27)]\r\n"]
|
BIN
static/videos/show_join.mkv
Normal file
BIN
static/videos/show_join.ove
Normal file
BIN
static/videos/show_join.webm
Normal file
BIN
static/videos/show_run.mkv
Normal file
BIN
static/videos/show_run.ove
Normal file
BIN
static/videos/show_run.webm
Normal file
@ -1,264 +0,0 @@
|
||||
{% macro resource() %}
|
||||
<link rel="preload" as="font" href="{{ get_url(path="fonts/vendor/jost/jost-v4-latin-regular.woff2") | safe }}" type="font/woff2" crossorigin>
|
||||
<link rel="preload" as="font" href="{{ get_url(path="fonts/vendor/jost/jost-v4-latin-700.woff2") | safe }}" type="font/woff2" crossorigin>
|
||||
{% endmacro %}
|
||||
|
||||
|
||||
{% macro stylesheet() %}
|
||||
<link rel="stylesheet" href="{{ get_url(path="main.css") | safe }}">
|
||||
{% endmacro %}
|
||||
|
||||
|
||||
{% macro favicons() %}
|
||||
<meta name="theme-color" content="{{ config.extra.theme_color | default(value="#fff") }}">
|
||||
<link class="favicon" rel="apple-touch-icon" sizes="180x180" href="{{ get_url(path="dark-favicon/128x128.png") | safe }}">
|
||||
<link class="favicon" rel="icon" type="image/png" sizes="32x32" href="{{ get_url(path="dark-favicon/32x32.png") | safe }}">
|
||||
<link class="favicon" rel="icon" type="image/png" sizes="16x16" href="{{ get_url(path="dark-favicon/16x16.png") | safe }}">
|
||||
{% if not config.extra.is_netlify %}
|
||||
<link rel="manifest" href="{{ get_url(path="site.webmanifest") | safe }}" crossorigin>
|
||||
{% endif %}
|
||||
{% endmacro %}
|
||||
|
||||
|
||||
{# type: website or article, generally setting article for blog articles #}
|
||||
{# page_images: using for the blog single template page #}
|
||||
{# page_section: the blog single template page have to pass the parameter #}
|
||||
{# is_404: using for the 404.html template #}
|
||||
{% macro seo(
|
||||
title="",
|
||||
title_addition="",
|
||||
description="",
|
||||
type="website",
|
||||
is_home=false,
|
||||
is_404=false,
|
||||
is_page=false,
|
||||
page_images="",
|
||||
page_section="",
|
||||
created_time="2021-05-01T08:08:00+08:00",
|
||||
updated_time="2021-05-01T08:08:08+08:00"
|
||||
)
|
||||
%}
|
||||
|
||||
{% if is_404 %}
|
||||
<meta name="robots" content="noindex, follow">
|
||||
{% else %}
|
||||
<meta name="robots" content="index, follow">
|
||||
<meta name="googlebot" content="index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1">
|
||||
<meta name="bingbot" content="index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1">
|
||||
{% endif %}
|
||||
{% if current_url %}
|
||||
{% set page_url = current_url %}
|
||||
{% else %}
|
||||
{% set page_url = get_url(path="404.html") %}
|
||||
{% endif %}
|
||||
{% if current_path %}
|
||||
{% set page_path = current_path %}
|
||||
{% else %}
|
||||
{% set page_path = "/404.html" %}
|
||||
{% endif %}
|
||||
<title>{{ title ~ title_addition }}</title>
|
||||
<meta name="description" content="{{ description }}">
|
||||
<link rel="canonical" href="{{ page_url | safe }}">
|
||||
|
||||
{% if config.extra.open.enable %}
|
||||
<meta name="twitter:card" content="summary_large_image">
|
||||
{% if page.extra.images %}
|
||||
{% for image in page.extra.images %}
|
||||
<meta property="twitter:image" content="{{ get_url(path=image) | safe }}">
|
||||
{% endfor %}
|
||||
{% elif section.extra.images %}
|
||||
{% for image in section.extra.images %}
|
||||
<meta property="twitter:image" content="{{ get_url(path=image) | safe }}">
|
||||
{% endfor %}
|
||||
{% elif config.extra.open.image %}
|
||||
<meta name="twitter:image" content="{{ config.base_url | safe }}/{{ config.extra.open.image }}">
|
||||
{% endif %}
|
||||
<meta name="twitter:title" content="{{ title }}">
|
||||
<meta name="twitter:description" content="{{ description }}">
|
||||
<meta name="twitter:site" content="@{{ config.extra.open.twitter_site }}">
|
||||
<meta name="twitter:creator" content="@{{ config.extra.open.twitter_creator }}">
|
||||
|
||||
<meta property="og:title" content="{{ title }}">
|
||||
<meta property="og:description" content="{{ description }}">
|
||||
<meta property="og:type" content="{{ type }}">
|
||||
<meta property="og:url" content="{{ page_url | safe }}">
|
||||
|
||||
{% if page.extra.images %}
|
||||
{% for image in page.extra.images %}
|
||||
<meta property="og:image" content="{{ get_url(path=image) | safe }}">
|
||||
{% endfor %}
|
||||
{% elif section.extra.images %}
|
||||
{% for image in section.extra.images %}
|
||||
<meta property="og:image" content="{{ get_url(path=image) | safe }}">
|
||||
{% endfor %}
|
||||
{% elif config.extra.open.image %}
|
||||
<meta property="og:image" content="{{ config.base_url | safe }}/{{ config.extra.open.image }}">
|
||||
{% endif %}
|
||||
|
||||
<meta property="og:updated_time" content="{{ updated_time }}">
|
||||
<meta property="og:site_name" content="{{ title }}">
|
||||
|
||||
{% if config.extra.open.audio %}
|
||||
<meta property="og:audio" content="{{ config.extra.open.audio }}">
|
||||
{% endif %}
|
||||
|
||||
{% if config.extra.open.locale %}
|
||||
<meta property="og:locale" content="{{ config.extra.open.locale }}">
|
||||
{% endif %}
|
||||
|
||||
{% if config.extra.open.videos %}
|
||||
{% for video in config.extra.open.videos %}
|
||||
<meta property="og:video" content="{{ get_url(path=video) }}">
|
||||
{% endfor %}
|
||||
{% endif %}
|
||||
<meta property="article:publisher" content="https://www.facebook.com/{{ config.extra.open.facebook_publisher }}">
|
||||
<meta property="article:author" content="https://www.facebook.com/{{ config.extra.open.facebook_author }}">
|
||||
<meta property="og:locale" content="{{ config.extra.open.og_locale }}">
|
||||
{% endif %}
|
||||
|
||||
{% if is_home and config.extra.schema %}
|
||||
{% if config.extra.schema.type == "Organization" %}
|
||||
<script type="application/ld+json">
|
||||
{
|
||||
"@context": "https://schema.org",
|
||||
"@type": "Organization",
|
||||
"url": "{{ page_path | safe }}",
|
||||
"name": "{{ title }}",
|
||||
"logo": "{{ page_path | safe }}{{ config.extra.schema.logo }}",
|
||||
"sameAs": [
|
||||
{% if config.extra.schema.twitter %}"{{ config.extra.schema.twitter | safe }}",{% endif %}
|
||||
{% if config.extra.schema.linked_in %}"{{ config.extra.schema.linked_in | safe }}",{% endif %}
|
||||
{% if config.extra.schema.github %}"{{ config.extra.schema.github | safe }}"{% endif %}
|
||||
]
|
||||
}
|
||||
</script>
|
||||
{% endif %}
|
||||
{% if config.extra.schema.type == "Person" %}
|
||||
<script type="application/ld+json">
|
||||
{
|
||||
"@context": "https://schema.org",
|
||||
"@type": "Person",
|
||||
"url": "{{ page_path | safe }}",
|
||||
"name": "{{ title }}",
|
||||
"sameAs": [
|
||||
{% if config.extra.schema.twitter %}"{{ config.extra.schema.twitter | safe }}",{% endif %}
|
||||
{% if config.extra.schema.linked_in %}"{{ config.extra.schema.linked_in | safe }}",{% endif %}
|
||||
{% if config.extra.schema.github %}"{{ config.extra.schema.github | safe }}"{% endif %}
|
||||
]
|
||||
}
|
||||
</script>
|
||||
{% endif %}
|
||||
{% if config.extra.schema.site_links_search_box %}
|
||||
<script type="application/ld+json">
|
||||
{
|
||||
"@context": "https://schema.org",
|
||||
"@type": "WebSite",
|
||||
"url": "{{ page_path | safe }}",
|
||||
"potentialAction": {
|
||||
"@type": "SearchAction",
|
||||
"target": "{{ page_path | safe }}?q={search_term_string}",
|
||||
"query-input": "required name=search_term_string"
|
||||
}
|
||||
}
|
||||
</script>
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
|
||||
{% if is_page and config.extra.schema.section %}
|
||||
{% if config.extra.schema.section == page_section %}
|
||||
<script type="application/ld+json">
|
||||
{
|
||||
"@context": "https://schema.org",
|
||||
"@type": "Article",
|
||||
"mainEntityOfPage": {
|
||||
"@type": "WebPage",
|
||||
"@id": "{{ page_path | safe }}"
|
||||
},
|
||||
"headline": "{{ title }}",
|
||||
"image": {{ page_images }},
|
||||
"datePublished": "{{ created_time }}",
|
||||
"dateModified": "{{ updated_time }}",
|
||||
"author": {
|
||||
"@type": "{{ config.extra.schema.type }}",
|
||||
"name": "{{ title }}"
|
||||
},
|
||||
"publisher": {
|
||||
"@type": "{{ config.extra.schema.type }}",
|
||||
"name": "{{ title }}",
|
||||
{% if config.extra.schema.type == "Organization" %}
|
||||
"logo": {
|
||||
"@type": "ImageObject",
|
||||
"url": "{{ get_url(path=config.extra.schema.logo) | replace(from=config.base_url, to="") | safe }}"
|
||||
}
|
||||
{% endif %}
|
||||
},
|
||||
"description": "{{ description }}"
|
||||
}
|
||||
</script>
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
|
||||
{% set url_prefix = get_url(path="/") | split(pat="://") | first %}
|
||||
{% set url_main = get_url(path="/") | split(pat="://") | last %}
|
||||
{% set url_item = url_prefix ~ "://" ~ url_main ~ "/" %}
|
||||
<script type="application/ld+json">
|
||||
{
|
||||
"@context": "http://schema.org",
|
||||
"@type": "BreadcrumbList",
|
||||
{% if page_path == "/" %}
|
||||
{
|
||||
"@type": "ListItem",
|
||||
"position": 1 ,
|
||||
"name": "Home",
|
||||
"item": "{{ url_item | safe }}"
|
||||
},
|
||||
{% else %}
|
||||
{% set paths = page_path | trim_start_matches(pat="/") | trim_end_matches(pat="/") | split(pat="/") %}
|
||||
{% for val in paths %}
|
||||
{% set name_array = val | split(pat="-") %}
|
||||
{% set_global str = "" %}
|
||||
{% for val in name_array %}
|
||||
{% set cap_val = val | capitalize %}
|
||||
{% set_global str = str ~ cap_val ~ " " %}
|
||||
{% endfor %}
|
||||
{% set name = str | trim_end_matches(pat=" ") | title %}
|
||||
{% if not index %}
|
||||
{
|
||||
"@type": "ListItem",
|
||||
"position": 1 ,
|
||||
"name": "Home",
|
||||
"item": "{{ url_item | safe }}"
|
||||
},
|
||||
{% set_global index = 2 %}
|
||||
{% set_global url_item = url_item ~ val ~ "/" %}
|
||||
{
|
||||
"@type": "ListItem",
|
||||
"position": {{ index }} ,
|
||||
"name": "{{ name }}",
|
||||
"item": "{{ url_item | safe }}"
|
||||
},
|
||||
{% else %}
|
||||
{% set_global index = index + 1 %}
|
||||
{% set_global url_item = url_item ~ val ~ "/" %}
|
||||
{
|
||||
"@type": "ListItem",
|
||||
"position": {{ index }} ,
|
||||
"name": "{{ name }}",
|
||||
"item": "{{ url_item | safe }}"
|
||||
},
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
{% endif %}
|
||||
}
|
||||
</script>
|
||||
|
||||
{% if config.extra.ganalytics %}
|
||||
<script async src="https://www.googletagmanager.com/gtag/js?id={{config.extra.ganalytics}}"></script>
|
||||
<script>
|
||||
window.dataLayer = window.dataLayer || [];
|
||||
function gtag(){dataLayer.push(arguments);}
|
||||
gtag('js', new Date());
|
||||
gtag('config', '{{config.extra.ganalytics}}');
|
||||
</script>
|
||||
{% endif %}
|
||||
{% endmacro %}
|
3
themes/adidoks/.gitignore
vendored
@ -1,3 +0,0 @@
|
||||
public
|
||||
.vs
|
||||
.vscode
|
@ -1,133 +0,0 @@
|
||||
# Contributor Covenant Code of Conduct
|
||||
|
||||
## Our Pledge
|
||||
|
||||
We as members, contributors, and leaders pledge to make participation in our
|
||||
community a harassment-free experience for everyone, regardless of age, body
|
||||
size, visible or invisible disability, ethnicity, sex characteristics, gender
|
||||
identity and expression, level of experience, education, socio-economic status,
|
||||
nationality, personal appearance, race, caste, color, religion, or sexual identity
|
||||
and orientation.
|
||||
|
||||
We pledge to act and interact in ways that contribute to an open, welcoming,
|
||||
diverse, inclusive, and healthy community.
|
||||
|
||||
## Our Standards
|
||||
|
||||
Examples of behavior that contributes to a positive environment for our
|
||||
community include:
|
||||
|
||||
* Demonstrating empathy and kindness toward other people
|
||||
* Being respectful of differing opinions, viewpoints, and experiences
|
||||
* Giving and gracefully accepting constructive feedback
|
||||
* Accepting responsibility and apologizing to those affected by our mistakes,
|
||||
and learning from the experience
|
||||
* Focusing on what is best not just for us as individuals, but for the
|
||||
overall community
|
||||
|
||||
Examples of unacceptable behavior include:
|
||||
|
||||
* The use of sexualized language or imagery, and sexual attention or
|
||||
advances of any kind
|
||||
* Trolling, insulting or derogatory comments, and personal or political attacks
|
||||
* Public or private harassment
|
||||
* Publishing others' private information, such as a physical or email
|
||||
address, without their explicit permission
|
||||
* Other conduct which could reasonably be considered inappropriate in a
|
||||
professional setting
|
||||
|
||||
## Enforcement Responsibilities
|
||||
|
||||
Community leaders are responsible for clarifying and enforcing our standards of
|
||||
acceptable behavior and will take appropriate and fair corrective action in
|
||||
response to any behavior that they deem inappropriate, threatening, offensive,
|
||||
or harmful.
|
||||
|
||||
Community leaders have the right and responsibility to remove, edit, or reject
|
||||
comments, commits, code, wiki edits, issues, and other contributions that are
|
||||
not aligned to this Code of Conduct, and will communicate reasons for moderation
|
||||
decisions when appropriate.
|
||||
|
||||
## Scope
|
||||
|
||||
This Code of Conduct applies within all community spaces, and also applies when
|
||||
an individual is officially representing the community in public spaces.
|
||||
Examples of representing our community include using an official e-mail address,
|
||||
posting via an official social media account, or acting as an appointed
|
||||
representative at an online or offline event.
|
||||
|
||||
## Enforcement
|
||||
|
||||
Instances of abusive, harassing, or otherwise unacceptable behavior may be
|
||||
reported to the community leaders responsible for enforcement at
|
||||
<aaranxu@outlook.com>.
|
||||
All complaints will be reviewed and investigated promptly and fairly.
|
||||
|
||||
All community leaders are obligated to respect the privacy and security of the
|
||||
reporter of any incident.
|
||||
|
||||
## Enforcement Guidelines
|
||||
|
||||
Community leaders will follow these Community Impact Guidelines in determining
|
||||
the consequences for any action they deem in violation of this Code of Conduct:
|
||||
|
||||
### 1. Correction
|
||||
|
||||
**Community Impact**: Use of inappropriate language or other behavior deemed
|
||||
unprofessional or unwelcome in the community.
|
||||
|
||||
**Consequence**: A private, written warning from community leaders, providing
|
||||
clarity around the nature of the violation and an explanation of why the
|
||||
behavior was inappropriate. A public apology may be requested.
|
||||
|
||||
### 2. Warning
|
||||
|
||||
**Community Impact**: A violation through a single incident or series
|
||||
of actions.
|
||||
|
||||
**Consequence**: A warning with consequences for continued behavior. No
|
||||
interaction with the people involved, including unsolicited interaction with
|
||||
those enforcing the Code of Conduct, for a specified period of time. This
|
||||
includes avoiding interactions in community spaces as well as external channels
|
||||
like social media. Violating these terms may lead to a temporary or
|
||||
permanent ban.
|
||||
|
||||
### 3. Temporary Ban
|
||||
|
||||
**Community Impact**: A serious violation of community standards, including
|
||||
sustained inappropriate behavior.
|
||||
|
||||
**Consequence**: A temporary ban from any sort of interaction or public
|
||||
communication with the community for a specified period of time. No public or
|
||||
private interaction with the people involved, including unsolicited interaction
|
||||
with those enforcing the Code of Conduct, is allowed during this period.
|
||||
Violating these terms may lead to a permanent ban.
|
||||
|
||||
### 4. Permanent Ban
|
||||
|
||||
**Community Impact**: Demonstrating a pattern of violation of community
|
||||
standards, including sustained inappropriate behavior, harassment of an
|
||||
individual, or aggression toward or disparagement of classes of individuals.
|
||||
|
||||
**Consequence**: A permanent ban from any sort of public interaction within
|
||||
the community.
|
||||
|
||||
## Attribution
|
||||
|
||||
This Code of Conduct is adapted from the [Contributor Covenant][homepage],
|
||||
version 2.0, available at
|
||||
[https://www.contributor-covenant.org/version/2/0/code_of_conduct.html][v2.0].
|
||||
|
||||
Community Impact Guidelines were inspired by
|
||||
[Mozilla's code of conduct enforcement ladder][Mozilla CoC].
|
||||
|
||||
For answers to common questions about this code of conduct, see the FAQ at
|
||||
[https://www.contributor-covenant.org/faq][FAQ]. Translations are available
|
||||
at [https://www.contributor-covenant.org/translations][translations].
|
||||
|
||||
[homepage]: https://www.contributor-covenant.org
|
||||
[v2.0]: https://www.contributor-covenant.org/version/2/0/code_of_conduct.html
|
||||
[Mozilla CoC]: https://github.com/mozilla/diversity
|
||||
[FAQ]: https://www.contributor-covenant.org/faq
|
||||
[translations]: https://www.contributor-covenant.org/translations
|
||||
|
@ -1,28 +0,0 @@
|
||||
# Contributing
|
||||
|
||||
We'd love your help! Thanks for caring about the theme of Zola.
|
||||
|
||||
## Licensing
|
||||
|
||||
This repository is under the MIT license. You can find the full text of the [license](./LICENSE) in this repository.
|
||||
|
||||
## Code of Conduct
|
||||
|
||||
The AdiDoks theme has a [code of conduct](./CODE_OF_CONDUCT.md) that governs all sub-projects, including this one. Please respect it!
|
||||
|
||||
## Contribute to Doks
|
||||
|
||||
- Follow the [GitHub flow](https://guides.github.com/introduction/flow/).
|
||||
- Follow the [Conventional Commits Specification](https://www.conventionalcommits.org/en/v1.0.0/)
|
||||
|
||||
## Create an issue
|
||||
|
||||
- [Bug report](https://github.com/aaranxu/adidoks/issues/new?template=bug-report---.md)
|
||||
- [Feature request](https://github.com/aaranxu/adidoks/issues/new?template=feature-request---.md)
|
||||
|
||||
## Improve documentation
|
||||
|
||||
👉 The documentation lives in [`./content/docs/`](https://github.com/aaranxu/adidoks/tree/master/content/docs) of the [`adidoks` repository](https://github.com/h-enk/getdoks.org).
|
||||
|
||||
- Follow the [GitHub flow](https://guides.github.com/introduction/flow/).
|
||||
- Follow the [Conventional Commits Specification](https://www.conventionalcommits.org/en/v1.0.0/)
|
@ -1,20 +0,0 @@
|
||||
The MIT License (MIT)
|
||||
|
||||
Copyright (c) 2021 Aaran Xu
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy of
|
||||
this software and associated documentation files (the "Software"), to deal in
|
||||
the Software without restriction, including without limitation the rights to
|
||||
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
|
||||
the Software, and to permit persons to whom the Software is furnished to do so,
|
||||
subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
|
||||
FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
|
||||
COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
|
||||
IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
||||
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
@ -1,177 +0,0 @@
|
||||
# Zola Theme AdiDoks
|
||||
|
||||
AdiDoks is a modern documentation theme, which is a port of the Hugo
|
||||
theme [Doks](https://github.com/h-enk/doks) for Zola.
|
||||
|
||||
## Demo
|
||||
|
||||
[Live Preview](https://adidoks.netlify.app/).
|
||||
|
||||
## Requirements
|
||||
|
||||
Before using the theme, you need to install the [Zola](https://www.getzola.org/documentation/getting-started/installation/) ≥ 0.15.0.
|
||||
|
||||
## Quick Start
|
||||
|
||||
```bash
|
||||
git clone https://github.com/aaranxu/adidoks.git
|
||||
cd adidoks
|
||||
zola serve
|
||||
# open http://127.0.0.1:1111/ in the browser
|
||||
```
|
||||
|
||||
Read more from [the document of the AdiDoks](https://adidoks.org/docs/getting-started/introduction/).
|
||||
|
||||
## Installation
|
||||
|
||||
Just earlier we showed you how to run the theme directly. Now we start to
|
||||
install the theme in an existing site step by step.
|
||||
|
||||
### Step 1: Create a new zola site
|
||||
|
||||
```bash
|
||||
zola init mysite
|
||||
```
|
||||
|
||||
### Step 2: Install AdiDoks
|
||||
|
||||
Download this theme to your themes directory:
|
||||
|
||||
```bash
|
||||
cd mysite/themes
|
||||
git clone https://github.com/aaranxu/adidoks.git
|
||||
```
|
||||
|
||||
Or install as a submodule:
|
||||
|
||||
```bash
|
||||
cd mysite
|
||||
git init # if your project is a git repository already, ignore this command
|
||||
git submodule add https://github.com/aaranxu/adidoks.git themes/adidoks
|
||||
```
|
||||
|
||||
### Step 3: Configuration
|
||||
|
||||
Enable the theme in your `config.toml` in the site directory:
|
||||
|
||||
```toml
|
||||
theme = "adidoks"
|
||||
```
|
||||
|
||||
Or copy the `config.toml.example` from the theme directory to your project's
|
||||
root directory:
|
||||
|
||||
```bash
|
||||
cp themes/adidoks/config.toml.example config.toml
|
||||
```
|
||||
|
||||
### Step 4: Add new content
|
||||
|
||||
You can copy the content from the theme directory to your project:
|
||||
|
||||
```bash
|
||||
cp -r themes/adidoks/content .
|
||||
```
|
||||
|
||||
You can modify or add new posts in the `content/blog`, `content/docs` or other
|
||||
content directories as needed.
|
||||
|
||||
### Step 5: Run the project
|
||||
|
||||
Just run `zola serve` in the root path of the project:
|
||||
|
||||
```bash
|
||||
zola serve
|
||||
```
|
||||
|
||||
AdiDoks will start the Zola development web server accessible by default at
|
||||
`http://127.0.0.1:1111`. Saved changes will live reload in the browser.
|
||||
|
||||
## Customisation
|
||||
|
||||
You can customize your configurations, templates and content for yourself. Look
|
||||
at the `config.toml`, `theme.toml`, `content` files and templates files in this
|
||||
repo for an idea.
|
||||
|
||||
### Global Configuration
|
||||
|
||||
There are some configuration options that you can customize in `config.toml`.
|
||||
|
||||
#### Configuration options before `extra` options
|
||||
|
||||
Set the authors's taxonomies for the site.
|
||||
|
||||
```toml
|
||||
taxonomies = [
|
||||
{name = "authors"},
|
||||
]
|
||||
```
|
||||
|
||||
Use search function for the content.
|
||||
|
||||
```toml
|
||||
build_search_index = true
|
||||
```
|
||||
|
||||
#### Configuration options under the `extra`
|
||||
|
||||
The following options should be under the `[extra]` in `config.toml`
|
||||
|
||||
- `language_code` - set HTML file language (default to `en-US`)
|
||||
- `theme_color` - your site's HTML color (default to `#fff`)
|
||||
- `title_separator` - the separator to your site title, like `|` and `-` (defaults to `|`)
|
||||
- `title_addition` - the additon content for the title of the homepage
|
||||
- `timeformat` - the timeformat for the blog article published date
|
||||
- `timezone` - the timezone for the blog article published date
|
||||
- `edit_page` (and `docs_repo`, `repo_branch`) - whether to show the edit page in the github repo for your docs
|
||||
- `math` (and `library`) - set KaTeX or MathJax library
|
||||
- `[extra.open]` - Open Graph + Twitter Cards for the site
|
||||
- `[extra.schema]` - set JSON-LD for the site
|
||||
- `[[extra.menu.main]]` - the header navigations for the site
|
||||
- `[[extra.menu.social]]` - the social links on the header of the page
|
||||
- `[extra.footer]` - the footer content on the left
|
||||
- `[[extra.footer.nav]]` - the footer navigations on the right
|
||||
|
||||
### Templates
|
||||
|
||||
All pages are extend to the `base.html`, and you can customize them as need.
|
||||
|
||||
### Content
|
||||
|
||||
#### Homepage
|
||||
|
||||
Go to the *content/_index.md* file to add your own homepage content.
|
||||
|
||||
- `[extra]` - the main content of the homepage
|
||||
- `[[extra.ist]]` - the lists' content of the homepage
|
||||
|
||||
#### Sections
|
||||
|
||||
Each section includes a `_index.md`, and you can customize it or add your new
|
||||
section under the `content` folder.
|
||||
|
||||
#### Pages
|
||||
|
||||
There are mainly three types of pages in the site.
|
||||
|
||||
- `blog` - blog article
|
||||
- `docs` - documentation article
|
||||
- `authors` - authors page if you need to add some information for a new author
|
||||
|
||||
## Reporting Issues
|
||||
|
||||
We use GitHub Issues as the official bug tracker for the **AdiDoks**. Please
|
||||
search [existing issues](https://github.com/aaranxu/adidoks/issues). It’s
|
||||
possible someone has already reported the same problem.
|
||||
|
||||
If your problem or idea is not addressed yet, [open a new issue](https://github.com/aaranxu/adidoks/issues/new).
|
||||
|
||||
## Contributing
|
||||
|
||||
We'd love your help! Please see [CONTRIBUTING.md](./CONTRIBUTING.md) to learn
|
||||
about the kinds of contributions we're looking for.
|
||||
|
||||
## License
|
||||
|
||||
**AdiDoks** is distributed under the terms of the
|
||||
[MIT license](https://github.com/aaranxu/adidoks/blob/main/LICENSE).
|
@ -1,132 +0,0 @@
|
||||
# The URL the site will be built for
|
||||
base_url = "https://adidoks.netlify.com"
|
||||
title = "AdiDoks"
|
||||
description = "AdiDoks is a Zola theme helping you build modern documentation websites, which is a port of the Hugo theme Doks for Zola."
|
||||
|
||||
# The default language; used in feeds and search index
|
||||
# Note: the search index doesn't support Chinese/Japanese/Korean Languages
|
||||
default_language = "en"
|
||||
|
||||
# Whether to automatically compile all Sass files in the sass directory
|
||||
compile_sass = true
|
||||
|
||||
# Whether to generate a feed file for the site
|
||||
generate_feed = true
|
||||
|
||||
# When set to "true", the generated HTML files are minified.
|
||||
minify_html = false
|
||||
|
||||
# The taxonomies to be rendered for the site and their configuration.
|
||||
taxonomies = [
|
||||
{name = "authors"}, # Basic definition: no feed or pagination
|
||||
]
|
||||
|
||||
# Whether to build a search index to be used later on by a JavaScript library
|
||||
# When set to "true", a search index is built from the pages and section
|
||||
# content for `default_language`.
|
||||
build_search_index = true
|
||||
|
||||
[languages.fi]
|
||||
title="AdiDoks"
|
||||
|
||||
|
||||
[search]
|
||||
# Whether to include the title of the page/section in the index
|
||||
include_title = true
|
||||
# Whether to include the description of the page/section in the index
|
||||
include_description = false
|
||||
# Whether to include the rendered content of the page/section in the index
|
||||
include_content = true
|
||||
|
||||
[markdown]
|
||||
# Whether to do syntax highlighting.
|
||||
# Theme can be customised by setting the `highlight_theme`
|
||||
# variable to a theme supported by Zola
|
||||
highlight_code = true
|
||||
|
||||
[extra]
|
||||
# Put all your custom variables here
|
||||
author = "Aaran Xu"
|
||||
github = "https://github.com/aaranxu"
|
||||
twitter = "https://twitter.com/aaranxu"
|
||||
email = "aaranxu@outlook.com"
|
||||
ganalytics = "" # Google Analytics code
|
||||
|
||||
# If running on netlify.app site, set to true
|
||||
is_netlify = true
|
||||
|
||||
# Set HTML file language
|
||||
language_code = "en-US"
|
||||
|
||||
# Set theme-color meta tag for Chrome browser
|
||||
theme_color = "#fff"
|
||||
|
||||
# More about site's title
|
||||
title_separator = "|" # set as |, -, _, etc
|
||||
title_addition = "Modern Documentation Theme"
|
||||
|
||||
|
||||
# Set date format in blog publish metadata
|
||||
timeformat = "%Y-%m-%d %H:%M:%S" # e.g. 2021-05-01 09:19:42
|
||||
timezone = "UTC"
|
||||
|
||||
# Edit page on reposity or not
|
||||
edit_page = false
|
||||
docs_repo = "https://github.com/aaranxu/adidoks"
|
||||
repo_branch = "main"
|
||||
|
||||
## Math settings
|
||||
# options: true, false. Enable math support globally,
|
||||
# default: false. You can always enable math on a per page.
|
||||
math = false
|
||||
library = "katex" # options: "katex", "mathjax". default is "katex".
|
||||
|
||||
## Open Graph + Twitter Cards
|
||||
[extra.open]
|
||||
enable = true
|
||||
# this image will be used as fallback if a page has no image of its own
|
||||
image = "doks.png"
|
||||
twitter_site = "aaranxu"
|
||||
twitter_creator = "aaranxu"
|
||||
facebook_author = "ichunyun"
|
||||
facebook_publisher = "ichunyun"
|
||||
og_locale = "en_US"
|
||||
|
||||
## JSON-LD
|
||||
[extra.schema]
|
||||
type = "Organization"
|
||||
logo = "logo-doks.png"
|
||||
twitter = "https://twitter.com/aaranxu"
|
||||
linked_in = ""
|
||||
github = "https://github.com/aaranxu"
|
||||
section = "blog" # see config.extra.main~url
|
||||
## Sitelinks Search Box
|
||||
site_links_search_box = false
|
||||
|
||||
|
||||
[[extra.menu.social]]
|
||||
name = "Twitter"
|
||||
pre = '<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-twitter"><path d="M23 3a10.9 10.9 0 0 1-3.14 1.53 4.48 4.48 0 0 0-7.86 3v1A10.66 10.66 0 0 1 3 4s-4 9 5 13a11.64 11.64 0 0 1-7 2c9 5 20 0 20-11.5a4.5 4.5 0 0 0-.08-.83A7.72 7.72 0 0 0 23 3z"></path></svg>'
|
||||
url = "https://twitter.com/aaranxu"
|
||||
weight = 10
|
||||
|
||||
[[extra.menu.social]]
|
||||
name = "GitHub"
|
||||
pre = '<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-github"><path d="M9 19c-5 1.5-5-2.5-7-3m14 6v-3.87a3.37 3.37 0 0 0-.94-2.61c3.14-.35 6.44-1.54 6.44-7A5.44 5.44 0 0 0 20 4.77 5.07 5.07 0 0 0 19.91 1S18.73.65 16 2.48a13.38 13.38 0 0 0-7 0C6.27.65 5.09 1 5.09 1A5.07 5.07 0 0 0 5 4.77a5.44 5.44 0 0 0-1.5 3.78c0 5.42 3.3 6.61 6.44 7A3.37 3.37 0 0 0 9 18.13V22"></path></svg>'
|
||||
url = "https://github.com/aaranxu/adidoks"
|
||||
post = "v0.1.0"
|
||||
weight = 20
|
||||
|
||||
# Footer contents
|
||||
[extra.footer]
|
||||
info = 'Powered by <a href="https://www.netlify.com/">Netlify</a>, <a href="https://www.getzola.org/">Zola</a>, and <a href="https://github.com/aaranxu/adidoks">AdiDoks</a>'
|
||||
|
||||
[[extra.footer.nav]]
|
||||
name = "Privacy"
|
||||
url = "/privacy-policy/"
|
||||
weight = 10
|
||||
|
||||
[[extra.footer.nav]]
|
||||
name = "Code of Conduct"
|
||||
url = "/docs/contributing/code-of-conduct/"
|
||||
weight = 20
|
@ -1,143 +0,0 @@
|
||||
# The URL the site will be built for
|
||||
base_url = "https://adidoks.netlify.com"
|
||||
title = "AdiDoks"
|
||||
description = "AdiDoks is a Zola theme helping you build modern documentation websites, which is a port of the Hugo theme Doks for Zola."
|
||||
|
||||
# The site theme to use.
|
||||
theme = "adidoks"
|
||||
|
||||
# The default language; used in feeds and search index
|
||||
# Note: the search index doesn't support Chinese/Japanese/Korean Languages
|
||||
default_language = "en"
|
||||
|
||||
# Whether to automatically compile all Sass files in the sass directory
|
||||
compile_sass = true
|
||||
|
||||
# Whether to generate a feed file for the site
|
||||
generate_feed = true
|
||||
|
||||
# When set to "true", the generated HTML files are minified.
|
||||
minify_html = false
|
||||
|
||||
# The taxonomies to be rendered for the site and their configuration.
|
||||
taxonomies = [
|
||||
{name = "authors"}, # Basic definition: no feed or pagination
|
||||
]
|
||||
|
||||
# Whether to build a search index to be used later on by a JavaScript library
|
||||
# When set to "true", a search index is built from the pages and section
|
||||
# content for `default_language`.
|
||||
build_search_index = true
|
||||
|
||||
[search]
|
||||
# Whether to include the title of the page/section in the index
|
||||
include_title = true
|
||||
# Whether to include the description of the page/section in the index
|
||||
include_description = false
|
||||
# Whether to include the rendered content of the page/section in the index
|
||||
include_content = true
|
||||
|
||||
[markdown]
|
||||
# Whether to do syntax highlighting.
|
||||
# Theme can be customised by setting the `highlight_theme`
|
||||
# variable to a theme supported by Zola
|
||||
highlight_code = true
|
||||
|
||||
[extra]
|
||||
# Put all your custom variables here
|
||||
author = "Aaran Xu"
|
||||
github = "https://github.com/aaranxu"
|
||||
twitter = "https://twitter.com/aaranxu"
|
||||
email = "aaranxu@outlook.com"
|
||||
|
||||
# If running on netlify.app site, set to true
|
||||
is_netlify = true
|
||||
|
||||
# Set HTML file language
|
||||
language_code = "en-US"
|
||||
|
||||
# Set theme-color meta tag for Chrome browser
|
||||
theme_color = "#fff"
|
||||
|
||||
# More about site's title
|
||||
title_separator = "|" # set as |, -, _, etc
|
||||
title_addition = "Modern Documentation Theme"
|
||||
|
||||
|
||||
# Set date format in blog publish metadata
|
||||
timeformat = "%B %e, %Y" # e.g. June 14, 2021
|
||||
timezone = "America/New_York"
|
||||
|
||||
# Edit page on reposity or not
|
||||
edit_page = false
|
||||
docs_repo = "https://github.com/aaranxu/adidoks"
|
||||
repo_branch = "main"
|
||||
|
||||
## Math settings
|
||||
# options: true, false. Enable math support globally,
|
||||
# default: false. You can always enable math on a per page.
|
||||
math = false
|
||||
library = "katex" # options: "katex", "mathjax". default is "katex".
|
||||
|
||||
## Open Graph + Twitter Cards
|
||||
[extra.open]
|
||||
enable = true
|
||||
# this image will be used as fallback if a page has no image of its own
|
||||
image = "doks.png"
|
||||
twitter_site = "aaranxu"
|
||||
twitter_creator = "aaranxu"
|
||||
facebook_author = "ichunyun"
|
||||
facebook_publisher = "ichunyun"
|
||||
og_locale = "en_US"
|
||||
|
||||
## JSON-LD
|
||||
[extra.schema]
|
||||
type = "Organization"
|
||||
logo = "logo-doks.png"
|
||||
twitter = "https://twitter.com/aaranxu"
|
||||
linked_in = ""
|
||||
github = "https://github.com/aaranxu"
|
||||
section = "blog" # see config.extra.main~url
|
||||
## Sitelinks Search Box
|
||||
site_links_search_box = false
|
||||
|
||||
|
||||
# Menu items
|
||||
[[extra.menu.main]]
|
||||
name = "Docs"
|
||||
section = "docs"
|
||||
url = "/docs/getting-started/introduction/"
|
||||
weight = 10
|
||||
|
||||
[[extra.menu.main]]
|
||||
name = "Blog"
|
||||
section = "blog"
|
||||
url = "/blog/"
|
||||
weight = 20
|
||||
|
||||
[[extra.menu.social]]
|
||||
name = "Twitter"
|
||||
pre = '<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-twitter"><path d="M23 3a10.9 10.9 0 0 1-3.14 1.53 4.48 4.48 0 0 0-7.86 3v1A10.66 10.66 0 0 1 3 4s-4 9 5 13a11.64 11.64 0 0 1-7 2c9 5 20 0 20-11.5a4.5 4.5 0 0 0-.08-.83A7.72 7.72 0 0 0 23 3z"></path></svg>'
|
||||
url = "https://twitter.com/aaranxu"
|
||||
weight = 10
|
||||
|
||||
[[extra.menu.social]]
|
||||
name = "GitHub"
|
||||
pre = '<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-github"><path d="M9 19c-5 1.5-5-2.5-7-3m14 6v-3.87a3.37 3.37 0 0 0-.94-2.61c3.14-.35 6.44-1.54 6.44-7A5.44 5.44 0 0 0 20 4.77 5.07 5.07 0 0 0 19.91 1S18.73.65 16 2.48a13.38 13.38 0 0 0-7 0C6.27.65 5.09 1 5.09 1A5.07 5.07 0 0 0 5 4.77a5.44 5.44 0 0 0-1.5 3.78c0 5.42 3.3 6.61 6.44 7A3.37 3.37 0 0 0 9 18.13V22"></path></svg>'
|
||||
url = "https://github.com/aaranxu/adidoks"
|
||||
post = "v0.1.0"
|
||||
weight = 20
|
||||
|
||||
# Footer contents
|
||||
[extra.footer]
|
||||
info = 'Powered by <a href="https://www.netlify.com/">Netlify</a>, <a href="https://www.getzola.org/">Zola</a>, and <a href="https://github.com/aaranxu/adidoks">AdiDoks</a>'
|
||||
|
||||
[[extra.footer.nav]]
|
||||
name = "Privacy"
|
||||
url = "/privacy-policy/"
|
||||
weight = 10
|
||||
|
||||
[[extra.footer.nav]]
|
||||
name = "Code of Conduct"
|
||||
url = "/docs/contributing/code-of-conduct/"
|
||||
weight = 20
|
@ -1,51 +0,0 @@
|
||||
+++
|
||||
title = "Nykyaikainen teema dokumentaatiolle"
|
||||
|
||||
|
||||
# The homepage contents
|
||||
[extra]
|
||||
lead = '<b>AdiDoks</b> on nykyaikainen teema dokumentaatiosivustoille. Se on portattu Zolalle Hugo-teemasta nimeltä <a href="https://github.com/h-enk/">Doks</a>.'
|
||||
url = "/docs/getting-started/introduction/"
|
||||
url_button = "Aloita"
|
||||
repo_version = "GitHub v0.1.0"
|
||||
repo_license = "Open-source MIT License."
|
||||
repo_url = "https://github.com/aaranxu/adidoks"
|
||||
|
||||
# Menu items
|
||||
[[extra.menu.main]]
|
||||
name = "Dokumentaatio"
|
||||
section = "docs"
|
||||
url = "/docs/getting-started/introduction/"
|
||||
weight = 10
|
||||
|
||||
[[extra.menu.main]]
|
||||
name = "Blogi"
|
||||
section = "blog"
|
||||
url = "/blog/"
|
||||
weight = 20
|
||||
|
||||
[[extra.list]]
|
||||
title = "Turvallisuustietoinen"
|
||||
content = 'Saat A+-arvosanoja <a href="https://observatory.mozilla.org/analyze/adidoks.org">Mozilla Observatoryssä</a> suoraan. Voit vaihtaa turvallisuusheadereita tarpeidesi mukaan.'
|
||||
|
||||
[[extra.list]]
|
||||
title = "Salamannopea ⚡️"
|
||||
content = 'Saat hyvät pisteet <a href="https://googlechrome.github.io/lighthouse/viewer/?gist=7731347bb8ce999eff7428a8e763b637">Google Lighthousessa</a> defaultina. Doks poistaa tarpeettomat css:t, esinoutaa linkit, ja lataa kuvat laiskasti.'
|
||||
|
||||
[[extra.list]]
|
||||
title = "SEO-valmis"
|
||||
content = "Käytä järkeviä oletusarvoja rakenteiselle datalle, open graphille ja Twitter-korteille. Tai muunna SEO-asetukset mieleisiksesi helposti."
|
||||
|
||||
[[extra.list]]
|
||||
title = "Fulltext-haku"
|
||||
content = "Tee hakuja sivuillesi FlexSearchilla. Muuntele indeksointiasetuksia mieleisiksesi helposti."
|
||||
|
||||
[[extra.list]]
|
||||
title = "Sivujen layoutit"
|
||||
content = "Rakenna sivuja laskeutumisivun, blogisivun tai dokumentaatiolayoutin mukaan. Lisää osioita ja komponentteja tarpeen mukaan."
|
||||
|
||||
[[extra.list]]
|
||||
title = "Dark mode"
|
||||
content = "Vaihda hämärässä käytettävään käyttöliittymäteemaan nappia painamalla. Muuta värit muuttujilla vastaamaan brändiäsi."
|
||||
|
||||
+++
|
@ -1,51 +0,0 @@
|
||||
+++
|
||||
title = "Modern Documentation Theme"
|
||||
|
||||
|
||||
# The homepage contents
|
||||
[extra]
|
||||
lead = '<b>AdiDoks</b> is a modern documentation theme, which is a port of the Hugo theme <a href="https://github.com/h-enk/">Doks</a> for Zola.'
|
||||
url = "/docs/getting-started/introduction/"
|
||||
url_button = "Get started"
|
||||
repo_version = "GitHub v0.1.0"
|
||||
repo_license = "Open-source MIT License."
|
||||
repo_url = "https://github.com/aaranxu/adidoks"
|
||||
|
||||
# Menu items
|
||||
[[extra.menu.main]]
|
||||
name = "Docs"
|
||||
section = "docs"
|
||||
url = "/docs/getting-started/introduction/"
|
||||
weight = 10
|
||||
|
||||
[[extra.menu.main]]
|
||||
name = "Blog"
|
||||
section = "blog"
|
||||
url = "/blog/"
|
||||
weight = 20
|
||||
|
||||
[[extra.list]]
|
||||
title = "Security aware"
|
||||
content = 'Get A+ scores on <a href="https://observatory.mozilla.org/analyze/adidoks.org">Mozilla Observatory</a> out of the box. Easily change the default Security Headers to suit your needs.'
|
||||
|
||||
[[extra.list]]
|
||||
title = "Fast by default ⚡️"
|
||||
content = 'Get 100 scores on <a href="https://googlechrome.github.io/lighthouse/viewer/?gist=7731347bb8ce999eff7428a8e763b637">Google Lighthouse</a> by default. Doks removes unused css, prefetches links, and lazy loads images.'
|
||||
|
||||
[[extra.list]]
|
||||
title = "SEO-ready"
|
||||
content = "Use sensible defaults for structured data, open graph, and Twitter cards. Or easily change the SEO settings to your liking."
|
||||
|
||||
[[extra.list]]
|
||||
title = "Full text search"
|
||||
content = "Search your Doks site with FlexSearch. Easily customize index settings and search options to your liking."
|
||||
|
||||
[[extra.list]]
|
||||
title = "Page layouts"
|
||||
content = "Build pages with a landing page, blog, or documentation layout. Add custom sections and components to suit your needs."
|
||||
|
||||
[[extra.list]]
|
||||
title = "Dark mode"
|
||||
content = "Switch to a low-light UI with the click of a button. Change colors with variables to match your branding."
|
||||
|
||||
+++
|
@ -1,18 +0,0 @@
|
||||
+++
|
||||
title = "Authors"
|
||||
description = "The authurs of the blog articles."
|
||||
date = 2021-04-01T08:00:00+00:00
|
||||
updated = 2021-04-01T08:00:00+00:00
|
||||
draft = false
|
||||
|
||||
# If add a new author page in this section, please add a new item,
|
||||
# and the format is as follows:
|
||||
#
|
||||
# "author-name-in-url" = "the-full-path-of-the-author-page"
|
||||
#
|
||||
# Note: We use quoted keys here.
|
||||
[extra.author_pages]
|
||||
"aaran-xu" = "authors/aaran-xu.md"
|
||||
+++
|
||||
|
||||
The authors of the blog articles.
|
@ -1,11 +0,0 @@
|
||||
+++
|
||||
title = "Aaran Xu"
|
||||
description = "Creator of AdiDoks."
|
||||
date = 2021-04-01T08:50:45+00:00
|
||||
updated = 2021-04-01T08:50:45+00:00
|
||||
draft = false
|
||||
+++
|
||||
|
||||
Creator of **AdiDoks**.
|
||||
|
||||
[@aaranxu](https://github.com/aaranxu)
|
@ -1,7 +0,0 @@
|
||||
+++
|
||||
title = "Blog"
|
||||
description = "Blog"
|
||||
sort_by = "date"
|
||||
paginate_by = 2
|
||||
template = "blog/section.html"
|
||||
+++
|
@ -1,41 +0,0 @@
|
||||
+++
|
||||
title = "Hello World"
|
||||
description = "Introducing Doks, a Hugo theme helping you build modern documentation websites that are secure, fast, and SEO-ready — by default."
|
||||
date = 2021-05-01T09:19:42+00:00
|
||||
updated = 2021-05-01T09:19:42+00:00
|
||||
draft = false
|
||||
template = "blog/page.html"
|
||||
|
||||
[taxonomies]
|
||||
authors = ["Rustaceans"]
|
||||
|
||||
[extra]
|
||||
lead = "This is the source code of the traditional <b>Hello World</b> program."
|
||||
+++
|
||||
|
||||
```rust
|
||||
// This is a comment, and is ignored by the compiler
|
||||
|
||||
// This is the main function
|
||||
fn main() {
|
||||
// Statements here are executed when the compiled binary is called
|
||||
|
||||
// Print text to the console
|
||||
println!("Hello World!");
|
||||
}
|
||||
```
|
||||
|
||||
`println!` is a macro that prints text to the console.
|
||||
|
||||
A binary can be generated using the Rust compiler: `rustc`.
|
||||
|
||||
```bash
|
||||
$ rustc hello.rs
|
||||
```
|
||||
|
||||
`rustc` will produce a `hello` binary that can be executed.
|
||||
|
||||
```bash
|
||||
$ ./hello
|
||||
Hello World!
|
||||
```
|
@ -1,152 +0,0 @@
|
||||
+++
|
||||
title = "Markdown Syntax Guide"
|
||||
description = "Sample article showcasing basic Markdown syntax and formatting for HTML elements."
|
||||
date = 2021-04-20T09:19:42+00:00
|
||||
updated = 2021-04-20T09:19:42+00:00
|
||||
draft = false
|
||||
template = "blog/page.html"
|
||||
|
||||
[taxonomies]
|
||||
authors = ["Public"]
|
||||
|
||||
[extra]
|
||||
lead = "This article offers a sample of basic Markdown syntax that can be used in Zola content files, also it shows whether basic HTML elements are decorated with CSS in a Zola theme."
|
||||
+++
|
||||
|
||||
## Headings
|
||||
|
||||
The following HTML `<h1>`—`<h6>` elements represent six levels of section
|
||||
headings. `<h1>` is the highest section level while `<h6>` is the lowest.
|
||||
|
||||
# H1
|
||||
## H2
|
||||
### H3
|
||||
#### H4
|
||||
##### H5
|
||||
###### H6
|
||||
|
||||
## Paragraph
|
||||
|
||||
Xerum, quo qui aut unt expliquam qui dolut labo. Aque venitatiusda cum,
|
||||
voluptionse latur sitiae dolessi aut parist aut dollo enim qui voluptate ma
|
||||
dolestendit peritin re plis aut quas inctum laceat est volestemque commosa as
|
||||
cus endigna tectur, offic to cor sequas etum rerum idem sintibus eiur? Quianimin
|
||||
porecus evelectur, cum que nis nust voloribus ratem aut omnimi, sitatur?
|
||||
Quiatem. Nam, omnis sum am facea corem alique molestrunt et eos evelece arcillit
|
||||
ut aut eos eos nus, sin conecerem erum fuga. Ri oditatquam, ad quibus unda
|
||||
veliamenimin cusam et facea ipsamus es exerum sitate dolores editium rerore
|
||||
eost, temped molorro ratiae volorro te reribus dolorer sperchicium faceata
|
||||
tiustia prat.
|
||||
|
||||
Itatur? Quiatae cullecum rem ent aut odis in re eossequodi nonsequ idebis ne
|
||||
sapicia is sinveli squiatum, core et que aut hariosam ex eat.
|
||||
|
||||
## Blockquotes
|
||||
|
||||
The blockquote element represents content that is quoted from another source,
|
||||
optionally with a citation which must be within a `footer` or `cite` element,
|
||||
and optionally with in-line changes such as annotations and abbreviations.
|
||||
|
||||
#### Blockquote without attribution
|
||||
|
||||
> Tiam, ad mint andaepu dandae nostion secatur sequo quae.
|
||||
> **Note** that you can use *Markdown syntax* within a blockquote.
|
||||
|
||||
#### Blockquote with attribution
|
||||
|
||||
> Don't communicate by sharing memory, share memory by communicating.<br>
|
||||
> — <cite>Rob Pike[^1]</cite>
|
||||
|
||||
> All men by nature desire to know.<br>
|
||||
> ― <cite>Aristotle[^2]</cite>
|
||||
|
||||
## Tables
|
||||
|
||||
Tables aren't part of the core Markdown spec, but Zola supports them
|
||||
out-of-the-box.
|
||||
|
||||
Name | Age
|
||||
--------|------
|
||||
Bob | 27
|
||||
Alice | 23
|
||||
|
||||
#### Inline Markdown within tables
|
||||
|
||||
| Italics | Bold | Code |
|
||||
| -------- | -------- | ------ |
|
||||
| *italics* | **bold** | `code` |
|
||||
|
||||
## Code Blocks
|
||||
|
||||
#### Code block with backticks
|
||||
|
||||
```html
|
||||
<!doctype html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title>Example HTML5 Document</title>
|
||||
</head>
|
||||
<body>
|
||||
<p>Test</p>
|
||||
</body>
|
||||
</html>
|
||||
```
|
||||
|
||||
#### Code block indented with four spaces
|
||||
|
||||
<!doctype html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title>Example HTML5 Document</title>
|
||||
</head>
|
||||
<body>
|
||||
<p>Test</p>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
## List Types
|
||||
|
||||
#### Ordered List
|
||||
|
||||
1. First item
|
||||
2. Second item
|
||||
3. Third item
|
||||
|
||||
#### Unordered List
|
||||
|
||||
- List item
|
||||
- Another item
|
||||
- And another item
|
||||
|
||||
#### Nested list
|
||||
|
||||
- Fruit
|
||||
- Apple
|
||||
- Orange
|
||||
- Banana
|
||||
- Dairy
|
||||
- Milk
|
||||
- Cheese
|
||||
|
||||
## Other Elements — abbr, sub, sup, kbd, mark
|
||||
|
||||
<abbr title="Graphics Interchange Format">GIF</abbr> is a bitmap image format.
|
||||
|
||||
H<sub>2</sub>O
|
||||
|
||||
X<sup>n</sup> + Y<sup>n</sup> = Z<sup>n</sup>
|
||||
|
||||
Press <kbd><kbd>CTRL</kbd>+<kbd>ALT</kbd>+<kbd>Delete</kbd></kbd> to end the
|
||||
session.
|
||||
|
||||
Most <mark>salamanders</mark> are nocturnal, and hunt for insects, worms, and
|
||||
other small creatures.
|
||||
|
||||
---
|
||||
<!-- Note: There must be a blank line between every two lines of the footnote difinition. -->
|
||||
[^1]: The above quote is excerpted from Rob Pike's [talk](https://www.youtube.com/watch?v=PAAkCSZUG1c)
|
||||
during Gopherfest, November 18, 2015.
|
||||
|
||||
[^2]: The quote is the first sentence of Aristotle's [Metaphysics](http://classics.mit.edu/Aristotle/metaphysics.html).
|
@ -1,48 +0,0 @@
|
||||
+++
|
||||
title = "Math Typesetting"
|
||||
description = "Introducing Doks, a Hugo theme helping you build modern documentation websites that are secure, fast, and SEO-ready — by default."
|
||||
date = 2021-04-08T09:19:42+00:00
|
||||
updated = 2021-04-08T09:19:42+00:00
|
||||
draft = false
|
||||
template = "blog/page.html"
|
||||
|
||||
[taxonomies]
|
||||
authors = ["Public"]
|
||||
|
||||
[extra]
|
||||
lead = "Mathematical notation in a project can be enabled by using third party JavaScript libraries."
|
||||
math = true
|
||||
+++
|
||||
|
||||
|
||||
In this example we will be using [KaTeX](https://katex.org/)
|
||||
|
||||
- Create a macro under `/template/macros/math.html` with a macro named `math`.
|
||||
- Within this macro reference the [Auto-render Extension](https://katex.org/docs/autorender.html) or host these scripts locally.
|
||||
- Import the macro in your templates like so:
|
||||
|
||||
```bash
|
||||
{% import 'macros/math.html' as macros %}
|
||||
{% if page.extra.math or section.extra.math or config.extra.math %}
|
||||
{{ macros::math() }}
|
||||
{% endif %}
|
||||
```
|
||||
|
||||
- To enable KaTex globally set the parameter `extra.math` to `true` in a project's configuration
|
||||
- To enable KaTex on a per page basis include the parameter `extra.math = true` in content files
|
||||
|
||||
**Note:**
|
||||
|
||||
1. The MathJax library is the other optional choice, and you can set the parameter `extra.library` to `mathjax` in a project's configuration
|
||||
2. Use the online reference of [Supported TeX Functions](https://katex.org/docs/supported.html)
|
||||
|
||||
### Examples
|
||||
|
||||
<p>
|
||||
Inline math: \(\varphi = \dfrac{1+\sqrt5}{2}= 1.6180339887…\)
|
||||
</p>
|
||||
|
||||
Block math:
|
||||
$$
|
||||
\varphi = 1+\frac{1} {1+\frac{1} {1+\frac{1} {1+\cdots} } }
|
||||
$$
|