📖 Use hugo/docsy for docs (#414)
Fixes: https://github.com/kairos-io/kairos/issues/235 Fixes: https://github.com/kairos-io/kairos/issues/233 Fixes: #232 Fixes: #231 Fixes: #230 Fixes: #229 Fixes: #228 Fixes: #193 Fixes: #192 Signed-off-by: mudler <mudler@c3os.io> Signed-off-by: mudler <mudler@c3os.io>
5
.gitignore
vendored
@ -15,6 +15,11 @@ docs/dist
|
||||
docs/.vscode
|
||||
coverage.out
|
||||
.DS_Store
|
||||
/docs/bin/
|
||||
/docs/public/
|
||||
/docs/resources/
|
||||
/docs/node_modules/
|
||||
/docs/tech-doc-hugo
|
||||
|
||||
# editor and IDE paraphernalia
|
||||
.idea
|
||||
|
10
.gitmodules
vendored
@ -1,3 +1,7 @@
|
||||
[submodule "docs/themes/hugo-theme-learn"]
|
||||
path = docs/themes/hugo-theme-learn
|
||||
url = https://github.com/matcornic/hugo-theme-learn.git
|
||||
|
||||
[submodule "themes/docsy"]
|
||||
path = themes/docsy
|
||||
url = https://github.com/google/docsy
|
||||
[submodule "docs/themes/docsy"]
|
||||
path = docs/themes/docsy
|
||||
url = https://github.com/google/docsy.git
|
||||
|
1
docs/CNAME
Normal file
@ -0,0 +1 @@
|
||||
kairos.io
|
@ -1,17 +1,13 @@
|
||||
export HUGO_VERSION?=0.91.2
|
||||
export HUGO_VERSION?=0.105.0
|
||||
export HUGO_PLATFORM?=Linux-64bit
|
||||
|
||||
export ROOT_DIR:=$(shell dirname $(realpath $(lastword $(MAKEFILE_LIST))))/
|
||||
export ROOT_DIR:=$(shell dirname $(realpath $(lastword $(MAKEFILE_LIST))))
|
||||
|
||||
.DEFAULT_GOAL := build
|
||||
|
||||
.PHONY: build
|
||||
build:
|
||||
scripts/build.sh
|
||||
cp -r dist/* public
|
||||
ifneq (,$(wildcard ./CNAME))
|
||||
cp -rf CNAME public/
|
||||
endif
|
||||
|
||||
.PHONY: serve
|
||||
serve:
|
||||
|
@ -1,45 +1,25 @@
|
||||
# Astro Starter Kit: Minimal
|
||||
# :book: Kairos documentation
|
||||
|
||||
The Kairos documentation uses [docsy](https://docsy.dev).
|
||||
|
||||
## Test your changes
|
||||
|
||||
After cloning the repo (with submodules), just run `make serve` to test the website locally.
|
||||
|
||||
```
|
||||
npm init astro -- --template minimal
|
||||
$> git clone --recurse-submodule https://github.com/kairos-io/kairos
|
||||
$> cd kairos/docs
|
||||
$> make serve
|
||||
```
|
||||
|
||||
[](https://stackblitz.com/github/withastro/astro/tree/latest/examples/minimal)
|
||||
|
||||
> 🧑🚀 **Seasoned astronaut?** Delete this file. Have fun!
|
||||
|
||||
## 🚀 Project Structure
|
||||
|
||||
Inside of your Astro project, you'll see the following folders and files:
|
||||
If you have a local copy already checked out, sync the submodules:
|
||||
|
||||
```
|
||||
/
|
||||
├── public/
|
||||
├── src/
|
||||
│ └── pages/
|
||||
│ └── index.astro
|
||||
└── package.json
|
||||
$> git submodule update --init --recursive --depth 1
|
||||
```
|
||||
|
||||
Astro looks for `.astro` or `.md` files in the `src/pages/` directory. Each page is exposed as a route based on its file name.
|
||||
To run the website locally in other platforms, e.g. MacOS:
|
||||
|
||||
There's nothing special about `src/components/`, but that's where we like to put any Astro/React/Vue/Svelte/Preact components.
|
||||
|
||||
Any static assets, like images, can be placed in the `public/` directory.
|
||||
|
||||
## 🧞 Commands
|
||||
|
||||
All commands are run from the root of the project, from a terminal:
|
||||
|
||||
| Command | Action |
|
||||
| :--------------------- | :----------------------------------------------- |
|
||||
| `npm install` | Installs dependencies |
|
||||
| `npm run dev` | Starts local dev server at `localhost:3000` |
|
||||
| `npm run build` | Build your production site to `./dist/` |
|
||||
| `npm run preview` | Preview your build locally, before deploying |
|
||||
| `npm run astro ...` | Run CLI commands like `astro add`, `astro check` |
|
||||
| `npm run astro --help` | Get help using the Astro CLI |
|
||||
|
||||
## 👀 Want to learn more?
|
||||
|
||||
Feel free to check [our documentation](https://docs.astro.build) or jump into our [Discord server](https://astro.build/chat).
|
||||
```
|
||||
$> HUGO_PLATFORM=macOS-64bit make serve
|
||||
```
|
||||
|
0
docs/assets/css/sections.css
Normal file
21
docs/assets/icons/logo.svg
Normal file
@ -0,0 +1,21 @@
|
||||
<svg width="347" height="125" viewBox="0 0 347 125" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<rect width="24.8171" height="24.8171" transform="matrix(-0.86601 0.500028 -3.18907e-05 1 64.6367 12.8008)" fill="#AEAEAE"/>
|
||||
<rect width="24.8171" height="24.8171" transform="matrix(-0.86601 -0.500028 3.18907e-05 1 43.1436 25.2109)" fill="#D6D6D6"/>
|
||||
<rect width="24.8171" height="24.8171" transform="matrix(-0.866041 0.499972 0.866041 0.499972 43.1436 0.394531)" fill="white"/>
|
||||
<rect width="24.8171" height="24.8171" transform="matrix(3.19859e-05 1 0.86601 0.500028 21.6487 37.6211)" fill="#D6D6D6"/>
|
||||
<rect width="24.8171" height="24.8171" transform="matrix(-0.866041 0.499973 0.866041 0.499972 21.6487 62.4336)" fill="white"/>
|
||||
<rect width="24.8171" height="24.8171" transform="matrix(-3.17834e-05 1 0.866009 -0.500028 0.157593 50.0312)" fill="#AEAEAE"/>
|
||||
<rect width="24.8171" height="24.8171" transform="matrix(-0.86601 0.500028 -3.19781e-05 1 64.6389 87.2539)" fill="#AEAEAE"/>
|
||||
<rect width="24.8171" height="24.8171" transform="matrix(-0.866009 -0.500028 3.18033e-05 1 43.1458 99.6641)" fill="#D6D6D6"/>
|
||||
<rect width="24.8171" height="24.8171" transform="matrix(-0.866041 0.499972 0.866041 0.499973 43.1458 74.8477)" fill="white"/>
|
||||
<rect width="24.8171" height="24.8171" transform="matrix(0.86601 -0.500028 3.18907e-05 -1 64.6334 112.082)" fill="#AEAEAE"/>
|
||||
<rect width="24.8171" height="24.8171" transform="matrix(0.86601 0.500028 -3.18907e-05 -1 86.1266 99.6719)" fill="#D6D6D6"/>
|
||||
<rect width="24.8171" height="24.8171" transform="matrix(0.866041 -0.499972 -0.866041 -0.499972 86.1266 124.488)" fill="white"/>
|
||||
<rect width="24.8171" height="24.8171" transform="matrix(-0.86601 0.500028 -3.19781e-05 1 129.114 50.0273)" fill="#AEAEAE"/>
|
||||
<rect width="24.8171" height="24.8171" transform="matrix(-0.866009 -0.500028 3.18033e-05 1 107.62 62.4375)" fill="#D6D6D6"/>
|
||||
<rect width="24.8171" height="24.8171" transform="matrix(-0.866041 0.499972 0.866041 0.499973 107.62 37.6211)" fill="white"/>
|
||||
<rect width="24.8171" height="24.8171" transform="matrix(0.86601 -0.500028 3.18907e-05 -1 64.635 37.6289)" fill="#AEAEAE"/>
|
||||
<rect width="24.8171" height="24.8171" transform="matrix(0.86601 0.500028 -3.18907e-05 -1 86.1282 25.2188)" fill="#D6D6D6"/>
|
||||
<rect width="24.8171" height="24.8171" transform="matrix(0.866041 -0.499972 -0.866041 -0.499972 86.1282 50.0352)" fill="white"/>
|
||||
<path d="M189.374 82.9414L174.851 65.159V82.9414H166.846V43.031H174.851V60.9278L189.374 43.031H199.037L182.57 62.8147L199.495 82.9414H189.374ZM202.702 66.9887C202.702 63.7867 203.331 60.9468 204.589 58.4691C205.885 55.9914 207.619 54.0855 209.792 52.7513C212.003 51.4171 214.461 50.7501 217.168 50.7501C219.531 50.7501 221.59 51.2265 223.343 52.1795C225.135 53.1325 226.564 54.3332 227.631 55.7817V51.2647H235.694V82.9414H227.631V78.31C226.602 79.7966 225.173 81.0355 223.343 82.0266C221.551 82.9795 219.474 83.456 217.111 83.456C214.442 83.456 212.003 82.7699 209.792 81.3976C207.619 80.0253 205.885 78.1003 204.589 75.6226C203.331 73.1068 202.702 70.2288 202.702 66.9887ZM227.631 67.103C227.631 65.159 227.25 63.5008 226.488 62.1285C225.725 60.7181 224.696 59.6508 223.4 58.9265C222.104 58.1642 220.713 57.783 219.226 57.783C217.74 57.783 216.367 58.1451 215.109 58.8694C213.851 59.5936 212.822 60.661 212.022 62.0714C211.259 63.4436 210.878 65.0827 210.878 66.9887C210.878 68.8946 211.259 70.5718 212.022 72.0204C212.822 73.4308 213.851 74.5171 215.109 75.2795C216.405 76.0419 217.778 76.4231 219.226 76.4231C220.713 76.4231 222.104 76.061 223.4 75.3367C224.696 74.5743 225.725 73.507 226.488 72.1347C227.25 70.7243 227.631 69.0471 227.631 67.103ZM247.571 47.4909C246.161 47.4909 244.979 47.0525 244.026 46.1758C243.112 45.261 242.654 44.1364 242.654 42.8023C242.654 41.4681 243.112 40.3627 244.026 39.4859C244.979 38.5711 246.161 38.1137 247.571 38.1137C248.982 38.1137 250.144 38.5711 251.059 39.4859C252.012 40.3627 252.489 41.4681 252.489 42.8023C252.489 44.1364 252.012 45.261 251.059 46.1758C250.144 47.0525 248.982 47.4909 247.571 47.4909ZM251.517 51.2647V82.9414H243.512V51.2647H251.517ZM267.431 56.182C268.46 54.5048 269.794 53.1897 271.433 52.2367C273.11 51.2837 275.016 50.8072 277.151 50.8072V59.2124H275.035C272.519 59.2124 270.614 59.8033 269.317 60.985C268.06 62.1666 267.431 64.2251 267.431 67.1602V82.9414H259.426V51.2647H267.431V56.182ZM296.608 83.456C293.559 83.456 290.814 82.7889 288.375 81.4548C285.935 80.0825 284.01 78.1575 282.6 75.6798C281.228 73.202 280.541 70.3431 280.541 67.103C280.541 63.8629 281.247 61.004 282.657 58.5263C284.106 56.0486 286.069 54.1426 288.546 52.8085C291.024 51.4362 293.788 50.7501 296.837 50.7501C299.887 50.7501 302.65 51.4362 305.128 52.8085C307.606 54.1426 309.55 56.0486 310.96 58.5263C312.409 61.004 313.133 63.8629 313.133 67.103C313.133 70.3431 312.39 73.202 310.903 75.6798C309.455 78.1575 307.472 80.0825 304.957 81.4548C302.479 82.7889 299.696 83.456 296.608 83.456ZM296.608 76.4803C298.057 76.4803 299.41 76.1372 300.668 75.4511C301.964 74.7268 302.993 73.6595 303.756 72.2491C304.518 70.8387 304.899 69.1233 304.899 67.103C304.899 64.0916 304.099 61.7855 302.498 60.1845C300.935 58.5454 299.01 57.7258 296.723 57.7258C294.436 57.7258 292.511 58.5454 290.948 60.1845C289.423 61.7855 288.661 64.0916 288.661 67.103C288.661 70.1144 289.404 72.4397 290.891 74.0788C292.415 75.6798 294.321 76.4803 296.608 76.4803ZM331.127 83.456C328.535 83.456 326.209 82.9986 324.151 82.0837C322.093 81.1308 320.453 79.8538 319.234 78.2528C318.052 76.6518 317.404 74.8793 317.29 72.9352H325.352C325.504 74.155 326.095 75.1652 327.124 75.9657C328.192 76.7662 329.507 77.1664 331.07 77.1664C332.594 77.1664 333.776 76.8615 334.615 76.2516C335.491 75.6417 335.93 74.8602 335.93 73.9072C335.93 72.878 335.396 72.1157 334.329 71.6201C333.299 71.0865 331.641 70.5147 329.354 69.9048C326.991 69.333 325.047 68.7421 323.522 68.1322C322.035 67.5223 320.739 66.5884 319.634 65.3305C318.567 64.0726 318.033 62.3763 318.033 60.2416C318.033 58.4882 318.528 56.8872 319.52 55.4387C320.549 53.9902 321.997 52.8466 323.865 52.008C325.771 51.1694 328.001 50.7501 330.555 50.7501C334.329 50.7501 337.34 51.703 339.589 53.609C341.838 55.4768 343.077 58.0117 343.306 61.2137H335.644C335.529 59.9558 334.996 58.9647 334.043 58.2404C333.128 57.478 331.889 57.0968 330.326 57.0968C328.878 57.0968 327.753 57.3637 326.953 57.8973C326.19 58.431 325.809 59.1743 325.809 60.1273C325.809 61.1946 326.343 62.0142 327.41 62.586C328.477 63.1196 330.136 63.6723 332.385 64.2441C334.672 64.8159 336.559 65.4067 338.045 66.0166C339.532 66.6266 340.809 67.5795 341.876 68.8756C342.982 70.1335 343.553 71.8107 343.592 73.9072C343.592 75.7369 343.077 77.3761 342.048 78.8246C341.057 80.2731 339.608 81.4167 337.702 82.2553C335.834 83.0558 333.643 83.456 331.127 83.456Z" fill="white"/>
|
||||
</svg>
|
After Width: | Height: | Size: 6.6 KiB |
29
docs/assets/scss/_variables_project.scss
Normal file
@ -0,0 +1,29 @@
|
||||
/*
|
||||
|
||||
Add styles or override variables from the theme here.
|
||||
|
||||
*/
|
||||
|
||||
$primary: #ee5007;
|
||||
$secondary: #e1e5ee;
|
||||
$enable-gradients: true;
|
||||
$enable-rounded: false;
|
||||
$enable-shadows: true;
|
||||
$google_font_name: "Noto Sans";
|
||||
$google_font_family: "Noto+Sans:0,300;0,400;0,500;0,600;0,700;1,300;1,400;1,500;1,600;1,700";
|
||||
$td-enable-google-fonts: false;
|
||||
|
||||
|
||||
a {
|
||||
color: #009ffd
|
||||
}
|
||||
|
||||
a:hover {
|
||||
color: #03153a
|
||||
}
|
||||
|
||||
// Disables text "Kairos" in the menu. Logo contains it already
|
||||
.td-navbar .navbar-brand__name {
|
||||
display: none;
|
||||
}
|
||||
|
@ -1,11 +0,0 @@
|
||||
import { defineConfig } from "astro/config";
|
||||
import react from "@astrojs/react";
|
||||
import mdx from "@astrojs/mdx";
|
||||
|
||||
// https://astro.build/config
|
||||
export default defineConfig({
|
||||
integrations: [mdx(), react()],
|
||||
build: {
|
||||
format: "file",
|
||||
},
|
||||
});
|
148
docs/config.toml
Normal file
@ -0,0 +1,148 @@
|
||||
baseURL = "https://kairos.io"
|
||||
title = "Kairos"
|
||||
|
||||
enableRobotsTXT = true
|
||||
|
||||
# Hugo allows theme composition (and inheritance). The precedence is from left to right.
|
||||
theme = ["docsy"]
|
||||
|
||||
# Will give values to .Lastmod etc.
|
||||
enableGitInfo = true
|
||||
prism_syntax_highlighting = true
|
||||
# Language settings
|
||||
contentDir = "content/en"
|
||||
defaultContentLanguage = "en"
|
||||
defaultContentLanguageInSubdir = false
|
||||
# Useful when translating.
|
||||
enableMissingTranslationPlaceholders = true
|
||||
|
||||
disableKinds = ["taxonomy", "taxonomyTerm"]
|
||||
|
||||
# Highlighting config
|
||||
pygmentsCodeFences = true
|
||||
pygmentsUseClasses = false
|
||||
# Use the new Chroma Go highlighter in Hugo.
|
||||
pygmentsUseClassic = false
|
||||
#pygmentsOptions = "linenos=table"
|
||||
# See https://help.farbox.com/pygments.html
|
||||
pygmentsStyle = "tango"
|
||||
|
||||
# Configure how URLs look like per section.
|
||||
[permalinks]
|
||||
blog = "/:section/:year/:month/:day/:slug/"
|
||||
|
||||
## Configuration for BlackFriday markdown parser: https://github.com/russross/blackfriday
|
||||
[blackfriday]
|
||||
plainIDAnchors = true
|
||||
hrefTargetBlank = true
|
||||
angledQuotes = false
|
||||
latexDashes = true
|
||||
|
||||
# Image processing configuration.
|
||||
[imaging]
|
||||
resampleFilter = "CatmullRom"
|
||||
quality = 75
|
||||
anchor = "smart"
|
||||
|
||||
[services]
|
||||
[services.googleAnalytics]
|
||||
# Comment out the next line to disable GA tracking. Also disables the feature described in [params.ui.feedback].
|
||||
id = "UA-00000000-0"
|
||||
|
||||
# Language configuration
|
||||
|
||||
[languages]
|
||||
[languages.en]
|
||||
title = "Kairos"
|
||||
description = "The immutable edge Kubernetes"
|
||||
languageName ="English"
|
||||
# Weight used for sorting.
|
||||
weight = 1
|
||||
|
||||
[[menu.main]]
|
||||
name = "Contribution guidelines"
|
||||
weight = 50
|
||||
url = "https://github.com/kairos-io/kairos/contribute"
|
||||
pre = "<i class='fab fa-github'></i>"
|
||||
post = ""
|
||||
[markup]
|
||||
[markup.goldmark]
|
||||
[markup.goldmark.renderer]
|
||||
unsafe = true
|
||||
[markup.highlight]
|
||||
# See a complete list of available styles at https://xyproto.github.io/splash/docs/all.html
|
||||
style = "dracula"
|
||||
# Everything below this are Site Params
|
||||
|
||||
[params]
|
||||
copyright = "Kairos authors"
|
||||
privacy_policy = "https://policies.google.com/privacy"
|
||||
|
||||
# First one is picked as the Twitter card image if not set on page.
|
||||
# images = ["images/project-illustration.png"]
|
||||
|
||||
# Menu title if your navbar has a versions selector to access old versions of your site.
|
||||
# This menu appears only if you have at least one [params.versions] set.
|
||||
version_menu = "Releases"
|
||||
|
||||
# Repository configuration (URLs for in-page links to opening issues and suggesting changes)
|
||||
github_repo = "https://github.com/kairos-io/kairos"
|
||||
# An optional link to a related project repo. For example, the sibling repository where your product code lives.
|
||||
github_project_repo = "https://github.com/kairos-io/kairos"
|
||||
|
||||
# Specify a value here if your content directory is not in your repo's root directory
|
||||
github_subdir = "docs"
|
||||
github_branch = "master"
|
||||
# Google Custom Search Engine ID. Remove or comment out to disable search.
|
||||
#gcs_engine_id = "011737558837375720776:fsdu1nryfng"
|
||||
|
||||
# Enable Algolia DocSearch
|
||||
algolia_docsearch = false
|
||||
|
||||
# Enable Lunr.js offline search
|
||||
offlineSearch = true
|
||||
|
||||
# User interface configuration
|
||||
[params.ui]
|
||||
# Enable to show the side bar menu in its compact state.
|
||||
sidebar_menu_compact = false
|
||||
# Set to true to disable breadcrumb navigation.
|
||||
breadcrumb_disable = true
|
||||
# Set to true to hide the sidebar search box (the top nav search box will still be displayed if search is enabled)
|
||||
sidebar_search_disable = false
|
||||
# Set to false if you don't want to display a logo (/assets/icons/logo.svg) in the top nav bar
|
||||
navbar_logo = true
|
||||
# Set to true to disable the About link in the site footer
|
||||
footer_about_disable = false
|
||||
|
||||
# Adds a H2 section titled "Feedback" to the bottom of each doc. The responses are sent to Google Analytics as events.
|
||||
# This feature depends on [services.googleAnalytics] and will be disabled if "services.googleAnalytics.id" is not set.
|
||||
# If you want this feature, but occasionally need to remove the "Feedback" section from a single page,
|
||||
# add "hide_feedback: true" to the page's front matter.
|
||||
[params.ui.feedback]
|
||||
enable = true
|
||||
# The responses that the user sees after clicking "yes" (the page was helpful) or "no" (the page was not helpful).
|
||||
yes = 'Awesome! Glad to hear it! Please <a href="https://github.com/kairos-io/kairos/issues/new">tell us how we can improve</a>.'
|
||||
no = 'Oh snap! Sorry to hear that. Please <a href="https://github.com/kairos-io/kairos/issues/new">tell us how we can improve</a>.'
|
||||
|
||||
[params.links]
|
||||
[[params.links.developer]]
|
||||
name = "GitHub"
|
||||
url = "https://github.com/kairos-io/kairos"
|
||||
icon = "fab fa-github"
|
||||
desc = "Development takes place here!"
|
||||
[[params.links.user]]
|
||||
name = "Matrix"
|
||||
url = "https://matrix.to/#/#kairos-io:matrix.org"
|
||||
icon = "fa fa-message"
|
||||
desc = "Join us on Matrix!"
|
||||
[[params.links.user]]
|
||||
name = "Github discussions"
|
||||
url = "https://github.com/kairos-io/kairos/discussions"
|
||||
icon = "fa fa-comments"
|
||||
desc = "Questions?"
|
||||
[[params.links.user]]
|
||||
name = "Office hours calendar"
|
||||
url = "https://calendar.google.com/calendar/embed?src=c_6d65f26502a5a67c9570bb4c16b622e38d609430bce6ce7fc1d8064f2df09c11%40group.calendar.google.com&ctz=Europe%2FRome"
|
||||
icon = "fa fa-calendar"
|
||||
desc = "Join us in our Office hours!"
|
6
docs/content/en/community/_index.md
Normal file
@ -0,0 +1,6 @@
|
||||
---
|
||||
title: Community
|
||||
menu:
|
||||
main:
|
||||
weight: 40
|
||||
---
|
8
docs/content/en/docs/Advanced/_index.md
Normal file
@ -0,0 +1,8 @@
|
||||
---
|
||||
title: "Advanced"
|
||||
linkTitle: "Advanced"
|
||||
weight: 5
|
||||
description: >
|
||||
Advanced settings
|
||||
---
|
||||
|
@ -1,13 +1,10 @@
|
||||
---
|
||||
layout: "../../layouts/docs/Layout.astro"
|
||||
title: "Configuring a node after install"
|
||||
index: 3
|
||||
title: "Pushing configuration to a node after installation"
|
||||
linkTitle: "After install"
|
||||
weight: 1
|
||||
description: >
|
||||
---
|
||||
|
||||
import Info from "../../components/Info.astro";
|
||||
|
||||
# Configuration after installation
|
||||
|
||||
Kairos configuration mechanism is based on the `cloud-config `file given during installation, however, it's possible to extend the configuration by providing additional cloud-configs in either `/oem` or `/usr/local/cloud-config`.
|
||||
|
||||
By default, `kairos` reads in lexicographic order YAML cloud-config files in the directories above, indeed, after installation you should be able to see the configuration generated by the interactive-installer as `/oem/99_custom.yaml` in the system.
|
||||
@ -43,11 +40,11 @@ To install [system-upgrade-controller](https://github.com/rancher/system-upgrade
|
||||
kubectl apply -f https://github.com/rancher/system-upgrade-controller/releases/download/v0.9.1/system-upgrade-controller.yaml
|
||||
```
|
||||
|
||||
<Info>
|
||||
{{% alert title="Note" %}}
|
||||
|
||||
Several roll-out strategies can be used with `system-upgrade-controller` which are not illustrated here in this example. For instance, it can be specified in the number of hosts which are running the upgrades, filtering by labels, and more. [Refer to the project documentation](https://github.com/rancher/system-upgrade-controller) on how to create efficient strategies to roll plans on the nodes. In the example above, the plans are applied to every host of the cluster, one-by-one in sequence.
|
||||
|
||||
</Info>
|
||||
{{% /alert %}}
|
||||
|
||||
The following pushes a new cloud config over the `/oem` directory and reboots the node:
|
||||
|
@ -1,17 +1,16 @@
|
||||
---
|
||||
layout: "../../layouts/docs/Layout.astro"
|
||||
title: "Build"
|
||||
index: 3
|
||||
title: "Build Kairos appliances"
|
||||
linkTitle: "Build"
|
||||
weight: 5
|
||||
description: >
|
||||
---
|
||||
|
||||
import Info from "../../components/Info.astro";
|
||||
{{% alert title="Note" %}}
|
||||
|
||||
# Build Kairos-based appliances
|
||||
|
||||
<Info>
|
||||
This page is a work in progress!
|
||||
The feature is experimental and API is likely going to be subject to changes, don't rely on it yet!
|
||||
</Info>
|
||||
{{% /alert %}}
|
||||
|
||||
|
||||
This documentation section describes how the Kairos Kubernetes Native API extensions can be used to build custom appliances or booting medium for Kairos.
|
||||
|
||||
@ -22,7 +21,7 @@ Note the same can be achieved by using advanced configuration and actually modif
|
||||
|
||||
For such purposes Kairos provides a set of Kubernetes Native Extensions that allows to programmatically generate Installable mediums, Cloud Images and Netboot artifacts to provide on-demand customization to further exploit Kubernetes patterns to automatically provision nodes using control-plane management clusters - however, the same toolset can be used manually to build appliances in order to develop and debug locally.
|
||||
|
||||
The [automated](/installation/automated) section already shows some examples of how to leverage the Kubernetes Native Extensions and use the Kairos images to build appliances, in this section we will cover and describe in detail how to leverage the CRDs and the Kairos factory to build custom appliances.
|
||||
The [automated](/docs/installation/automated) section already shows some examples of how to leverage the Kubernetes Native Extensions and use the Kairos images to build appliances, in this section we will cover and describe in detail how to leverage the CRDs and the Kairos factory to build custom appliances.
|
||||
|
||||
## Prerequisites
|
||||
|
||||
@ -77,7 +76,7 @@ spec:
|
||||
|
||||
Apply the manifest with `kubectl apply`.
|
||||
|
||||
Note, the CRD allows to specify a custom Cloud config file, [check out the full configuration reference](/reference/configuration).
|
||||
Note, the CRD allows to specify a custom Cloud config file, [check out the full configuration reference](/docs/reference/configuration).
|
||||
|
||||
The controller will create a pod that builds the ISO ( we can follow the process by tailing to the containers log ) and later makes it accessible to its own dedicated service (nodeport by default):
|
||||
|
@ -1,11 +1,10 @@
|
||||
---
|
||||
layout: "../../layouts/docs/Layout.astro"
|
||||
title: "Customizing the system image"
|
||||
index: 7
|
||||
linkTitle: "Customization"
|
||||
weight: 2
|
||||
description: >
|
||||
---
|
||||
|
||||
# Customizing
|
||||
|
||||
Kairos is a container-based OS, if you want to change Kairos and add a package, it is required to build only a Docker image.
|
||||
|
||||
For example:
|
@ -1,14 +1,15 @@
|
||||
---
|
||||
layout: "../../layouts/docs/Layout.astro"
|
||||
title: "Live layering"
|
||||
index: 8
|
||||
linkTitle: "Live layering"
|
||||
weight: 4
|
||||
description: >
|
||||
---
|
||||
|
||||
# Live layering
|
||||
|
||||
Live layering allows to activates/deactivates system extension images. System extension images may – dynamically at runtime — extend the `/usr/` and `/opt/` directory hierarchies with additional files.
|
||||
|
||||
Kairos supports live layering with `systemd-sysext`. Currently it is supported only on the `openSUSE` and `Fedora` flavors.
|
||||
Kairos supports live layering with `systemd-sysext`. Currently it is supported only on the `openSUSE`, `Fedora` and `Ubuntu` flavors with `systemd-sysext`.
|
||||
|
||||
## Description
|
||||
|
@ -1,11 +1,10 @@
|
||||
---
|
||||
layout: "../../layouts/docs/Layout.astro"
|
||||
title: "Networking"
|
||||
index: 8
|
||||
linkTitle: "Networking"
|
||||
weight: 3
|
||||
description: >
|
||||
---
|
||||
|
||||
# Networking settings
|
||||
|
||||
By default, Kairos ISOs are configured to automatically get an IP from the network interface. However, depending on the base system you have chosen, there are different way to configure networking. This section collects information on setting network configuration depending on the base that is being chosen (openSUSE, Alpine, Ubuntu).
|
||||
|
||||
There are different network managers depending on the distro:
|
||||
@ -18,9 +17,8 @@ There are different network managers depending on the distro:
|
||||
|
||||
To get a static IP, you can additionally define the following in your configuration file, depending on the network-manager being used:
|
||||
|
||||
{{< tabs groupId="staticIP">}}
|
||||
{{% tab name="connman" %}}
|
||||
|
||||
{{< tabpane text=true right=true >}}
|
||||
{{% tab header="connman" %}}
|
||||
```yaml
|
||||
stages:
|
||||
initramfs:
|
||||
@ -33,31 +31,8 @@ stages:
|
||||
IPv4 = 10.1.1.1/16/10.1.0.1
|
||||
Nameservers = 10.1.0.1
|
||||
```
|
||||
|
||||
{{% /tab %}}
|
||||
{{% tab name="wicked" %}}
|
||||
|
||||
```yaml
|
||||
name: "Default network configuration"
|
||||
stages:
|
||||
boot:
|
||||
- commands:
|
||||
- wicked ifup eth0
|
||||
initramfs:
|
||||
- name: "Setup network"
|
||||
files:
|
||||
- path: /etc/sysconfig/network/ifcfg-eth0
|
||||
content: |
|
||||
BOOTPROTO='static'
|
||||
IPADDR='192.168.1.2/24'
|
||||
permissions: 0600
|
||||
owner: 0
|
||||
group: 0
|
||||
```
|
||||
|
||||
{{% /tab %}}
|
||||
{{% tab name="systemd-networkd" %}}
|
||||
|
||||
{{% tab header="systemd-networkd" %}}
|
||||
```yaml
|
||||
stages:
|
||||
initramfs:
|
||||
@ -73,17 +48,15 @@ stages:
|
||||
Gateway=10.1.0.1
|
||||
DNS=10.1.0.1
|
||||
```
|
||||
|
||||
{{% /tab %}}
|
||||
{{< /tabs >}}
|
||||
{{< /tabpane >}}
|
||||
|
||||
## Bonding
|
||||
|
||||
Bonding setup with Ubuntu can be configured via systemd-networkd (Ubuntu based images) and wicked (openSUSE based images), consider the following examples:
|
||||
|
||||
{{< tabs groupId="bonding">}}
|
||||
{{% tab name="systemd-networkd" %}}
|
||||
|
||||
{{< tabpane text=true right=true >}}
|
||||
{{% tab header="systemd-networkd" %}}
|
||||
```yaml
|
||||
#node-config
|
||||
name: "My Deployment"
|
||||
@ -149,71 +122,43 @@ k3s-agent:
|
||||
K3S_TOKEN: "KubeSecret"
|
||||
K3S_URL: https://hostname:6443
|
||||
```
|
||||
|
||||
{{% /tab %}}
|
||||
{{% tab name="wicked" %}}
|
||||
|
||||
{{% tab header="connman" %}}
|
||||
```yaml
|
||||
name: "My Deployment"
|
||||
stages:
|
||||
boot:
|
||||
- name: "Setup network"
|
||||
commands:
|
||||
- wicked ifup bond0
|
||||
initramfs:
|
||||
- name: "Setup user and password"
|
||||
users:
|
||||
kairos:
|
||||
password: "kairos"
|
||||
- name: "Setup hostname"
|
||||
hostname: "hostname.domain.tld"
|
||||
- name: "Setup network files"
|
||||
files:
|
||||
- path: /etc/sysconfig/network/ifcfg-bond0
|
||||
content: |
|
||||
BONDING_MASTER='yes'
|
||||
BONDING_MODULE_OPTS='mode=802.3ad miimon=100 lacp_rate=fast'
|
||||
BONDING_SLAVE0='eth0'
|
||||
BONDING_SLAVE1='eth1'
|
||||
STARTMODE='onboot'
|
||||
BOOTPROTO='dhcp'
|
||||
HWADDR='11:22:33:44:55:66'
|
||||
ZONE='public'
|
||||
IPADDR=''
|
||||
NETMASK=''
|
||||
permissions: 0600
|
||||
owner: 0
|
||||
group: 0
|
||||
- path: /etc/sysconfig/network/ifcfg-eth0
|
||||
content: |
|
||||
BOOTPROTO='none'
|
||||
STARTMODE='hotplug'
|
||||
permissions: 0600
|
||||
owner: 0
|
||||
group: 0
|
||||
- path: /etc/sysconfig/network/ifcfg-eth1
|
||||
content: |
|
||||
BOOTPROTO='none'
|
||||
STARTMODE='hotplug'
|
||||
permissions: 0600
|
||||
owner: 0
|
||||
group: 0
|
||||
network:
|
||||
- name: "Setup user ssh-keys"
|
||||
authorized_keys:
|
||||
kairos:
|
||||
- "ssh-rsa AAA..."
|
||||
- "ssh-rsa AAA..."
|
||||
boot:
|
||||
- name: "Setup network"
|
||||
commands:
|
||||
- modprobe bonding mode=4 miimon=100
|
||||
- ifenslave bond0 eno1
|
||||
- ifenslave bond0 eno2
|
||||
- ifenslave bond0 eno3
|
||||
- ifenslave bond0 eno4
|
||||
- ifconfig bond0 up hw ether 11:22:33:44:55:66
|
||||
- ifup bond0
|
||||
- sleep 5
|
||||
- rc-service connman restart
|
||||
initramfs:
|
||||
- name: "Setup network files"
|
||||
files:
|
||||
- path: /var/lib/connman/default.config
|
||||
content: |
|
||||
[service_eth]
|
||||
Type = ethernet
|
||||
IPv4 = off
|
||||
IPv6 = off
|
||||
|
||||
k3s-agent:
|
||||
enabled: true
|
||||
env:
|
||||
K3S_TOKEN: "MySecretToken"
|
||||
K3S_URL: https://server.domain.tld:6443
|
||||
[service_bond0]
|
||||
Type = ethernet
|
||||
DeviceName = bond0
|
||||
IPv4 = dhcp
|
||||
MAC = 11:22:33:44:55:66
|
||||
permissions: 0644
|
||||
owner: 0
|
||||
group: 0
|
||||
```
|
||||
|
||||
{{% /tab %}}
|
||||
{{< /tabs >}}
|
||||
{{< /tabpane >}}
|
||||
|
||||
### References
|
||||
|
@ -1,12 +1,10 @@
|
||||
---
|
||||
layout: "../../layouts/docs/Layout.astro"
|
||||
title: "P2P configuration"
|
||||
index: 2
|
||||
linkTitle: "P2P"
|
||||
weight: 6
|
||||
description: >
|
||||
---
|
||||
|
||||
|
||||
## Single node cluster
|
||||
|
||||
When the p2p featureset is enabled by specifying a `kairos` block, by default are expected multiple nodes to join: this is required in order to correctly handle co-ordination among the nodes of a cluster.
|
||||
|
||||
To create a single-node cluster, we need to force both the `role` and the `ip` by disabling `DHCP`:
|
7
docs/content/en/docs/Architecture/_index.md
Normal file
@ -0,0 +1,7 @@
|
||||
---
|
||||
title: "Architecture"
|
||||
linkTitle: "Architecture"
|
||||
weight: 4
|
||||
description: >
|
||||
---
|
||||
|
@ -1,11 +1,11 @@
|
||||
---
|
||||
layout: "../../layouts/docs/Layout.astro"
|
||||
title: "Cloud-init based"
|
||||
index: 2
|
||||
title: "Cloud init based"
|
||||
linkTitle: "Cloud init based"
|
||||
weight: 3
|
||||
date: 2022-11-13
|
||||
description: >
|
||||
---
|
||||
|
||||
# Cloud-init based
|
||||
|
||||
Kairos supports the [standard cloud-init syntax](https://github.com/mudler/yip#compatibility-with-cloud-init-format) and [its own extended syntax](https://github.com/mudler/yip) to allow to configure a system declaratively with a cloud-config centric approach.
|
||||
|
||||
If you are not familiar with the concepts of cloud-init, [official cloud-init](https://cloud-init.io/) is a recommended read.
|
||||
@ -17,7 +17,6 @@ Multiple cloud-init files can be present in the system and Kairos will read them
|
||||
|
||||
In Kairos the `/oem` directory keeps track of all the configuration of the system and stores the configuration files. Multiple files are allowed and they are all executed during the various system stages. `/usr/local/cloud-config` can be optionally used as well to store cloud config files in the persistent partition instead. `/system/oem` is instead reserved to default cloud-init files that are shipped by the base OS image.
|
||||
|
||||
|
||||
By using the standard cloud-config syntax, a subset of the functionalities are available and the settings will be executed in the boot stage.
|
||||
|
||||
## Boot stages
|
@ -1,19 +1,19 @@
|
||||
---
|
||||
layout: "../../layouts/docs/Layout.astro"
|
||||
title: "Container-based OS"
|
||||
index: 2
|
||||
title: "Container based"
|
||||
linkTitle: "Container"
|
||||
weight: 2
|
||||
date: 2022-11-13
|
||||
description: >
|
||||
---
|
||||
|
||||
# Container-based OS
|
||||
|
||||
Kairos is a container-based operating system (OS).
|
||||
|
||||
A container-based operating system is an OS that is shipped via containers. Indeed, if it happens to be based on Linux (most probably), you can run the container image as well on your Docker daemon. The image being booted is the container, which contains all the required pieces in order to boot (Kernel, Initrd, Init system). There is no real container runtime running the image. The container is used to construct an image internally that is then used to boot the system in an A/B fashion, so there is no overhead introduced. The system being booted is actually a snapshot of the container.
|
||||
|
||||
**Single-image** The OS is a single container image which contains all the OS components, including Kernel and Initrd.
|
||||
**Tamper-proof upgrades** Upgrades are atomic, A/B swaps with fallback mechanisms and automatic boot assessment.
|
||||
**Distributed via container registries** Bootable images are standard OCI artifacts that can be hosted in any container regist
|
||||
**Platform Engineer-friendly** Adapt the infrastructure to your needs by plugging images into your already-existing workflow pipeline. Customizing an immutable OS becomes as easy as writing a Dockerfile.
|
||||
- **Single-image** The OS is a single container image which contains all the OS components, including Kernel and Initrd.
|
||||
- **Tamper-proof upgrades** Upgrades are atomic, A/B swaps with fallback mechanisms and automatic boot assessment.
|
||||
- **Distributed via container registries** Bootable images are standard OCI artifacts that can be hosted in any container regist
|
||||
- **Platform Engineer-friendly** Adapt the infrastructure to your needs by plugging images into your already-existing workflow pipeline. Customizing an immutable OS becomes as easy as writing a Dockerfile.
|
||||
|
||||
## A/B Upgrades
|
||||
|
||||
@ -40,7 +40,7 @@ If you are familiar with Dockerfiles, then you are good to go to roll your own c
|
||||
|
||||
## Container Image based OS
|
||||
|
||||
The Image support matrix in [here](/reference/image_matrix) lists all the container images built from our CI on every release of Kairos.
|
||||
The Image support matrix in [here](/docs/reference/image_matrix) lists all the container images built from our CI on every release of Kairos.
|
||||
|
||||
To inspect an image and run it locally, you can use a container engine like Docker or Podman:
|
||||
|
||||
@ -89,7 +89,7 @@ total 102M
|
||||
6692029 -rw-r--r-- 1 root root 11M Apr 16 2020 vmlinuz-5.14.21-150400.24.21-default
|
||||
```
|
||||
|
||||
The CI process generates bootable medium by the container images, and similarly, we can modify this image to introduce our changes and remaster an ISO as described in [Automated installation](/installation/automated), but that can be resumed in the following steps:
|
||||
The CI process generates bootable medium by the container images, and similarly, we can modify this image to introduce our changes and remaster an ISO as described in [Automated installation](/docs/installation/automated), but that can be resumed in the following steps:
|
||||
|
||||
```bash
|
||||
$ docker run -ti --name custom-container quay.io/kairos/core-alpine:v1.1.0
|
||||
@ -117,4 +117,4 @@ For upgrading to a container image see [manual upgrades](/upgrade/manual) and [k
|
||||
|
||||
## See also
|
||||
|
||||
- [ISO remastering](/installation/automated#iso-remastering)
|
||||
- [ISO remastering](/docs/installation/automated#iso-remastering)
|
@ -1,11 +1,11 @@
|
||||
---
|
||||
layout: "../../layouts/docs/Layout.astro"
|
||||
title: "Immutable layout"
|
||||
index: 3
|
||||
title: "Immutable"
|
||||
linkTitle: "Immutable"
|
||||
weight: 1
|
||||
date: 2022-11-13
|
||||
description: >
|
||||
---
|
||||
|
||||
# Immutable layout
|
||||
|
||||
Kairos adopts an immutable layout and derivatives created with its toolkit inherits the same immutability aspects.
|
||||
|
||||
An immutable OS is a carefully engineered system which boots in a restricted, permissionless mode, where certain paths of the system are not writable. For instance, after installation it's not possible to install additional packages in the system, and any configuration change is discarded after reboot.
|
@ -1,11 +1,11 @@
|
||||
---
|
||||
layout: "../../layouts/docs/Layout.astro"
|
||||
title: "Meta-Distribution"
|
||||
index: 4
|
||||
linkTitle: "Meta-Distribution"
|
||||
weight: 4
|
||||
date: 2022-11-13
|
||||
description: >
|
||||
---
|
||||
|
||||
# Meta distribution
|
||||
|
||||
We like to define Kairos as a meta-Linux Distribution, as its goal is to convert other distros to an immutable layout with Kubernetes Native components.
|
||||
|
||||
## Kairos
|
@ -1,7 +1,9 @@
|
||||
---
|
||||
layout: "../../layouts/docs/Layout.astro"
|
||||
title: "P2P Network"
|
||||
index: 5
|
||||
linkTitle: "P2P Network"
|
||||
weight: 5
|
||||
date: 2022-11-13
|
||||
description: >
|
||||
---
|
||||
|
||||
# P2P Network
|
6
docs/content/en/docs/Development/_index.md
Normal file
@ -0,0 +1,6 @@
|
||||
---
|
||||
title: "Development"
|
||||
linkTitle: "Development"
|
||||
weight: 7
|
||||
description: >
|
||||
---
|
@ -1,7 +1,10 @@
|
||||
---
|
||||
layout: "../../layouts/docs/Layout.astro"
|
||||
title: "Development"
|
||||
index: 1
|
||||
title: "Development notes"
|
||||
linkTitle: "Development"
|
||||
weight: 1
|
||||
date: 2022-11-13
|
||||
description: >
|
||||
Guidelines when developing Kairos
|
||||
---
|
||||
|
||||
Here you can find development notes intended for maintainers and guidance for new contributors.
|
@ -1,13 +1,11 @@
|
||||
---
|
||||
layout: "../../layouts/docs/Layout.astro"
|
||||
title: "Installation"
|
||||
index: 2
|
||||
title: "Getting Started"
|
||||
linkTitle: "Getting Started"
|
||||
weight: 2
|
||||
description: >
|
||||
Getting started with Kairos
|
||||
---
|
||||
|
||||
import Info from "../../components/Info.astro";
|
||||
|
||||
# Installation
|
||||
|
||||
The goal of this quickstart is to use the Kairos releases artifacts to build a Kubernetes [k3s](https://k3s.io) cluster in a VM.
|
||||
|
||||
Kairos releases ship a set of artifacts (ISO, images, etc. ) that we will use as we assume we don't have any prior cluster(s) available to generate them. Kairos Kubernetes Native components allow the creation of these artifacts inside Kubernetes from a set of input images.
|
||||
@ -26,12 +24,12 @@ Kairos can be used to turn any Linux Distribution into an immutable system; howe
|
||||
|
||||
You can find the latest releases in the [release page on GitHub](https://github.com/kairos-io/provider-kairos/releases). For instance, download the [kairos-opensuse-v1.0.0-k3sv1.24.3+k3s1.iso](https://github.com/kairos-io/provider-kairos/releases/download/v1.0.0/kairos-opensuse-v1.0.0-k3sv1.24.3+k3s1.iso) ISO file to pick the openSUSE based version, where `v1.24.3+k3s1` in the name is the `k3s` version and `v1.0.0` is the Kairos one.
|
||||
|
||||
<Info>
|
||||
{{% alert title="Note" %}}
|
||||
The releases in the [kairos-io/kairos](https://github.com/kairos-io/kairos/releases) repository are the Kairos core images that ship without K3s and P2P full-mesh functionalities; however, further extensions can be installed dynamically in runtime by using the Kairos bundles mechanism.
|
||||
|
||||
The releases in [kairos-io/provider-kairos](https://github.com/kairos-io/provider-kairos/releases) ship `k3s` and `P2P` full-mesh instead. These options need to be explicitly enabled. In follow-up releases, _k3s-only_ artifacts will also be available.
|
||||
|
||||
</Info>
|
||||
{{% /alert %}}
|
||||
|
||||
## Booting
|
||||
|
||||
@ -48,8 +46,8 @@ You should be greeted with a GRUB boot menu, where multiple entries are availabl
|
||||
Choosing the appropriate entry depends on how you plan to install Kairos.
|
||||
|
||||
- The first entry will boot into installation with the QR code ( we are going to cover below ).
|
||||
- The second entry will boot into [Manual installation](/installation/manual) - a console will be started, see the documentation for more details on how to install manually.
|
||||
- The third boot option boots the [Interactive installation](/installation/interactive). You can use the interactive installer to drive the installation from the terminal host and skip the Configuration and Provisioning step below.
|
||||
- The second entry will boot into [Manual installation](/docs/installation/manual) - a console will be started, see the documentation for more details on how to install manually.
|
||||
- The third boot option boots the [Interactive installation](/docs/installation/interactive). You can use the interactive installer to drive the installation from the terminal host and skip the Configuration and Provisioning step below.
|
||||
|
||||
Select the first entry or let the machine boot, and eventually a QR code will be printed out of the screen:
|
||||
|
||||
@ -79,7 +77,7 @@ k3s:
|
||||
enabled: true
|
||||
```
|
||||
|
||||
Save the configuration file as `config.yaml`, as we will use it later in the process. [Check out the full configuration reference](/reference/configuration).
|
||||
Save the configuration file as `config.yaml`, as we will use it later in the process. [Check out the full configuration reference](/docs/reference/configuration).
|
||||
|
||||
**Note**:
|
||||
|
||||
@ -89,19 +87,19 @@ Save the configuration file as `config.yaml`, as we will use it later in the pro
|
||||
- `dns` sets the DNS for the machine.
|
||||
- `k3s.enabled=true` enables K3s.
|
||||
|
||||
<Info>
|
||||
{{% alert title="Note" %}}
|
||||
|
||||
Several configurations can be added at this stage. [See the configuration reference](/reference/configuration) for further reading.
|
||||
Several configurations can be added at this stage. [See the configuration reference](/docs/reference/configuration) for further reading.
|
||||
|
||||
</Info>
|
||||
{{% /alert %}}
|
||||
|
||||
## Provisioning
|
||||
|
||||
<Info>
|
||||
{{% alert title="Note" %}}
|
||||
|
||||
You can find instructions showing how to use the Kairos CLI below. In case you prefer to install via SSH and log in to the box, see the [Manual installation](/installation/manual) section or the [Interactive installation](/installation/interactive) section to perform the installation manually from the console.
|
||||
You can find instructions showing how to use the Kairos CLI below. In case you prefer to install via SSH and log in to the box, see the [Manual installation](/docs/installation/manual) section or the [Interactive installation](/docs/installation/interactive) section to perform the installation manually from the console.
|
||||
|
||||
</Info>
|
||||
{{% /alert %}}
|
||||
|
||||
To trigger the installation process via QR code, you need to use the Kairos CLI. The CLI is currently available only for Linux and Windows. It can be downloaded from the release artifact:
|
||||
|
||||
@ -169,16 +167,16 @@ The K3s `kubeconfig` file is available at `/etc/rancher/k3s/k3s.yaml`. Please re
|
||||
|
||||
There are other ways to install Kairos:
|
||||
|
||||
- [Automated installation](/installation/automated)
|
||||
- [Manual login and installation](/installation/manual)
|
||||
- [Create decentralized clusters](/installation/p2p)
|
||||
- [Take over installation](/installation/takeover)
|
||||
- [Raspberry Pi](/installation/raspberry)
|
||||
- [Automated installation](/docs/installation/automated)
|
||||
- [Manual login and installation](/docs/installation/manual)
|
||||
- [Create decentralized clusters](/docs/installation/p2p)
|
||||
- [Take over installation](/docs/installation/takeover)
|
||||
- [Raspberry Pi](/docs/installation/raspberry)
|
||||
- [Netboot (TODO)]()
|
||||
- [CAPI Lifecycle Management (TODO)]()
|
||||
|
||||
## What's Next?
|
||||
|
||||
- [Upgrade nodes with Kubernetes](/upgrade/kubernetes)
|
||||
- [Upgrade nodes manually](/upgrade/manual)
|
||||
- [Immutable architecture](/architecture/immutable)
|
||||
- [Upgrade nodes with Kubernetes](/docs/upgrade/kubernetes)
|
||||
- [Upgrade nodes manually](/docs/upgrade/manual)
|
||||
- [Immutable architecture](/docs/architecture/immutable)
|
8
docs/content/en/docs/Installation/_index.md
Normal file
@ -0,0 +1,8 @@
|
||||
---
|
||||
title: "Installation"
|
||||
linkTitle: "Installation"
|
||||
weight: 2
|
||||
description: >
|
||||
Kairos Installation reference
|
||||
---
|
||||
|
@ -1,11 +1,12 @@
|
||||
---
|
||||
layout: "../../layouts/docs/Layout.astro"
|
||||
title: "Automated installation"
|
||||
index: 4
|
||||
title: "Automated"
|
||||
linkTitle: "Automated"
|
||||
weight: 3
|
||||
date: 2022-11-13
|
||||
description: >
|
||||
Install Kairos automatically, with zero touch provisioning
|
||||
---
|
||||
|
||||
# Automated installation
|
||||
|
||||
It is possible to drive the installation automatically by configuring a specific portion of the `install` configuration file .
|
||||
The configuration file then can be supplied in various way, by either creating an additional ISO to mount (if a VM burn to USB stick or if bare metal), specifying a configuration via URL or even create an ISO from a container image with an embedded configuration file, which we are going to explore here.
|
||||
|
@ -1,7 +1,10 @@
|
||||
---
|
||||
layout: "../../layouts/docs/Layout.astro"
|
||||
title: "Interactive installation"
|
||||
index: 3
|
||||
title: "Interactive"
|
||||
linkTitle: "Interactive"
|
||||
weight: 2
|
||||
date: 2022-11-13
|
||||
description: >
|
||||
Install Kairos interactively
|
||||
---
|
||||
|
||||
# Interactive installation
|
@ -1,20 +1,22 @@
|
||||
---
|
||||
layout: "../../layouts/docs/Layout.astro"
|
||||
title: "Manual installation"
|
||||
index: 2
|
||||
linkTitle: "Manual installation"
|
||||
weight: 1
|
||||
date: 2022-11-13
|
||||
description: >
|
||||
Install Kairos manually
|
||||
---
|
||||
|
||||
import Info from "../../components/Info.astro";
|
||||
|
||||
# Manual installation
|
||||
|
||||
To install manually, follow the [quickstart](/quickstart/installation). When the QR code is prompted at the screen, you will be able to log in via SSH to the box with the password `kairos` as `kairos` user.
|
||||
To install manually, follow the [quickstart](/docs/getting-started). When the QR code is prompted at the screen, you will be able to log in via SSH to the box with the password `kairos` as `kairos` user.
|
||||
|
||||
<Info>
|
||||
{{% alert title="Note" %}}
|
||||
|
||||
**Note**: After the installation, the password login is disabled, users, and SSH keys to log in must be configured via cloud-init.
|
||||
|
||||
</Info>
|
||||
{{% /alert %}}
|
||||
|
||||
|
||||
## Installation
|
||||
|
@ -1,16 +1,19 @@
|
||||
---
|
||||
layout: "../../layouts/docs/Layout.astro"
|
||||
title: "Full P2P mesh support"
|
||||
index: 5
|
||||
title: "P2P support"
|
||||
linkTitle: "P2P support"
|
||||
weight: 5
|
||||
date: 2022-11-13
|
||||
description: >
|
||||
Install Kairos with p2p support
|
||||
---
|
||||
|
||||
import Info from "../../components/Info.astro";
|
||||
|
||||
# Full-mesh P2P support
|
||||
|
||||
<Info>
|
||||
{{% alert title="Note" %}}
|
||||
|
||||
This feature is crazy and experimental!
|
||||
</Info>
|
||||
|
||||
{{% /alert %}}
|
||||
|
||||
This section will guide you on how to leverage the peer-to-peer (P2P), full-mesh capabilities of Kairos.
|
||||
|
||||
@ -20,7 +23,7 @@ A hybrid network is automatically set up between all the nodes, so there is no n
|
||||
|
||||
Kairos can be configured to automatically bootstrap a Kubernetes cluster with the full-mesh functionalities, or it can include an additional interface to the machines to let them communicate within a new network segment.
|
||||
|
||||
If you are not familiar with the process, it is suggested to follow the [quickstart](/quickstart/installation) first and the steps below, in sequence.
|
||||
If you are not familiar with the process, it is suggested to follow the [quickstart](/docs/getting-started) first and the steps below, in sequence.
|
||||
|
||||
The section below explains the difference in the configuration options to enable P2P full-mesh during the installation phase.
|
||||
|
||||
@ -62,7 +65,6 @@ This is an optional, unique identifier for the cluster. It allows bootstrapping
|
||||
|
||||
Force a role for the node. Available: `worker`, `master`.
|
||||
|
||||
For a full reference of all the supported use cases, see [cloud-init](https://rancher.github.io/elemental-toolkit/docs/reference/cloud_init/).
|
||||
|
||||
## Join new nodes
|
||||
|
@ -1,14 +1,15 @@
|
||||
---
|
||||
layout: "../../layouts/docs/Layout.astro"
|
||||
title: "Raspberry Pi"
|
||||
index: 6
|
||||
title: "RaspberryPi"
|
||||
linkTitle: "RaspberryPi"
|
||||
weight: 4
|
||||
date: 2022-11-13
|
||||
description: >
|
||||
Install Kairos on RaspberryPi 3 and 4
|
||||
---
|
||||
|
||||
# Raspberry Pi support
|
||||
|
||||
Kairos supports Raspberry Pi model 3 and 4 with 64bit architecture.
|
||||
|
||||
If you are not familiar with the process, it is suggested to follow the [quickstart](/quickstart/installation) first to see how Kairos works.
|
||||
If you are not familiar with the process, it is suggested to follow the [quickstart](/docs/getting-started) first to see how Kairos works.
|
||||
|
||||
## Prerequisites
|
||||
|
||||
@ -32,6 +33,8 @@ Plug the SD card to your system. To flash the image, you can either use Etcher o
|
||||
xzcat kairos-opensuse-arm-rpi-v1.0.0-rc2-k3sv1.21.14+k3s1.img | sudo dd of=<device> oflag=sync status=progress bs=10MB
|
||||
```
|
||||
|
||||
Once the image is flashed, there is no need to carry any other installation steps. We can boot the image, or apply our config.
|
||||
|
||||
## Boot
|
||||
|
||||
Use the SD Card to boot. The default username/password is `kairos`/`kairos`.
|
||||
@ -50,7 +53,7 @@ $ sudo cp cloud-config.yaml /tmp/persistent/cloud-config
|
||||
$ sudo umount /tmp/persistent
|
||||
```
|
||||
|
||||
You can push additional `cloud config` files. For a full reference check out the [docs](/reference/configuration) and also [configuration after-installation](/advanced/after-install)
|
||||
You can push additional `cloud config` files. For a full reference check out the [docs](/docs/reference/configuration) and also [configuration after-installation](/docs/advanced/after-install)
|
||||
|
||||
## Customizing the disk image
|
||||
|
@ -1,12 +1,14 @@
|
||||
---
|
||||
layout: "../../layouts/docs/Layout.astro"
|
||||
title: "Take over installation"
|
||||
index: 7
|
||||
title: "Takeover"
|
||||
linkTitle: "Takeover"
|
||||
weight: 6
|
||||
date: 2022-11-13
|
||||
description: >
|
||||
---
|
||||
|
||||
# Takeover installations
|
||||
|
||||
Kairos supports takeover installations. See [the Elemental-toolkit docs](https://rancher.github.io/elemental-toolkit/docs/getting-started/install/#installation-from-3rd-party-livecd-or-rescue-mediums). Here are a few summarized steps:
|
||||
Kairos supports takeover installations. Here are a few summarized steps:
|
||||
|
||||
- From the dedicated control panel (OVH, Hetzner, etc.), boot in *rescue* mode
|
||||
- [Install docker](https://docs.docker.com/engine/install/debian/) and run for example:
|
6
docs/content/en/docs/Reference/_index.md
Normal file
@ -0,0 +1,6 @@
|
||||
---
|
||||
title: "Reference"
|
||||
linkTitle: "Reference"
|
||||
weight: 6
|
||||
description: >
|
||||
---
|
@ -1,11 +1,12 @@
|
||||
---
|
||||
layout: "../../layouts/docs/Layout.astro"
|
||||
title: "Architecture"
|
||||
index: 2
|
||||
linkTitle: "Architecture"
|
||||
weight: 1
|
||||
date: 2022-11-13
|
||||
description: >
|
||||
Kairos internal architecture
|
||||
---
|
||||
|
||||
# Architecture
|
||||
|
||||
This section contains refrences to how Kairos works internally.
|
||||
|
||||
## Setup process
|
@ -1,11 +1,11 @@
|
||||
---
|
||||
layout: "../../layouts/docs/Layout.astro"
|
||||
title: "CLI"
|
||||
index: 3
|
||||
linkTitle: "CLI"
|
||||
weight: 3
|
||||
date: 2022-11-13
|
||||
description: >
|
||||
---
|
||||
|
||||
# CLI reference
|
||||
|
||||
A CLI is provided as part of releases associated to each Kairos version.
|
||||
|
||||
The CLI can be used from an external machine to generate network tokens and pair nodes on first-boot.
|
@ -1,11 +1,11 @@
|
||||
---
|
||||
layout: "../../layouts/docs/Layout.astro"
|
||||
title: "Configuration reference"
|
||||
index: 5
|
||||
title: "Configuration"
|
||||
linkTitle: "Configuration"
|
||||
weight: 2
|
||||
date: 2022-11-13
|
||||
description: >
|
||||
---
|
||||
|
||||
# Configuration reference
|
||||
|
||||
Here you can find a full reference of the fields available to configure a Kairos node.
|
||||
|
||||
```yaml
|
||||
@ -165,9 +165,8 @@ stages:
|
||||
|
||||
The `k3s` and the `k3s-agent` block are used to customize the environment and argument settings of K3s, consider:
|
||||
|
||||
{{< tabs groupId="k3s">}}
|
||||
{{% tab name="server" %}}
|
||||
|
||||
{{< tabpane text=true right=true >}}
|
||||
{{% tab header="server" %}}
|
||||
```yaml
|
||||
k3s:
|
||||
enabled: true
|
||||
@ -178,10 +177,8 @@ k3s:
|
||||
args:
|
||||
- ...
|
||||
```
|
||||
|
||||
{{% /tab %}}
|
||||
{{% tab name="agent" %}}
|
||||
|
||||
{{% tab header="agent" %}}
|
||||
```yaml
|
||||
k3s-agent:
|
||||
enabled: true
|
||||
@ -192,9 +189,8 @@ k3s-agent:
|
||||
args:
|
||||
-
|
||||
```
|
||||
|
||||
{{% /tab %}}
|
||||
{{< /tabs >}}
|
||||
{{< /tabpane >}}
|
||||
|
||||
See also the [examples](https://github.com/kairos-io/kairos/tree/master/examples) folder in the repository to configure K3s manually.
|
||||
|
||||
@ -316,7 +312,7 @@ stages:
|
||||
homedir: "/home/testuser"
|
||||
```
|
||||
|
||||
This configuration can be either manually copied over, or can be propagated also via Kubernetes using the system upgrade controller. See [the after-install](/advanced/after-install) section for an example.
|
||||
This configuration can be either manually copied over, or can be propagated also via Kubernetes using the system upgrade controller. See [the after-install](/docs/advanced/after-install) section for an example.
|
||||
|
||||
```bash
|
||||
❯ ssh testuser@192.168.1.238
|
||||
@ -339,7 +335,7 @@ P2P functionalities are experimental Kairos features and disabled by default. In
|
||||
|
||||
### `kairos.network_token`
|
||||
|
||||
This defines the network token used by peers to join the p2p virtual private network. You can generate it with the Kairos CLI with `kairos generate-token`. Check out [the P2P section](/installation/p2p) for more instructions.
|
||||
This defines the network token used by peers to join the p2p virtual private network. You can generate it with the Kairos CLI with `kairos generate-token`. Check out [the P2P section](/docs/installation/p2p) for more instructions.
|
||||
|
||||
### `kairos.role`
|
||||
|
@ -1,16 +1,16 @@
|
||||
---
|
||||
layout: "../../layouts/docs/Layout.astro"
|
||||
title: "Entangle CRDs"
|
||||
index: 2
|
||||
linkTitle: "Entangle"
|
||||
weight: 8
|
||||
date: 2022-11-13
|
||||
description: >
|
||||
---
|
||||
|
||||
import Info from "../../components/Info.astro";
|
||||
{{% alert title="Note" %}}
|
||||
|
||||
<Info>
|
||||
This section is a work in progress!
|
||||
|
||||
**Note**: This section is a work in progress!
|
||||
|
||||
</Info>
|
||||
{{% /alert %}}
|
||||
|
||||
Kairos has two Kubernetes Native extensions that allows to interconnect services between different clusters via P2P with a shared secret.
|
||||
|
@ -1,11 +1,11 @@
|
||||
---
|
||||
layout: "../../layouts/docs/Layout.astro"
|
||||
title: "Frequently asked questions"
|
||||
index: 6
|
||||
linkTitle: "FAQ"
|
||||
weight: 9
|
||||
date: 2022-11-13
|
||||
description: >
|
||||
---
|
||||
|
||||
import Info from "../../components/Info.astro";
|
||||
|
||||
# FAQ
|
||||
|
||||
## What is the difference between Kairos compared to Talos/Sidero Metal and Flatcar?
|
@ -1,18 +1,16 @@
|
||||
---
|
||||
layout: "../../layouts/docs/Layout.astro"
|
||||
title: "Image support matrix"
|
||||
index: 7
|
||||
linkTitle: "Image support matrix"
|
||||
weight: 5
|
||||
date: 2022-11-13
|
||||
description: >
|
||||
---
|
||||
|
||||
import Info from "../../components/Info.astro";
|
||||
|
||||
# Image support matrix
|
||||
|
||||
Kairos builds several artifacts for user convenience which are based on openSUSE, Alpine Linux, and Ubuntu.
|
||||
|
||||
The images are pushed over quay.io, and are available for installation and upgrading.
|
||||
|
||||
The installable mediums part of the releases are generated with the methods described in the [automated installation reference](/installation/automated/#iso-remastering) from the images sources listed below, and the images can be used to point over for upgrades, as well.
|
||||
The installable mediums part of the releases are generated with the methods described in the [automated installation reference](/docs/installation/automated/#iso-remastering) from the images sources listed below, and the images can be used to point over for upgrades, as well.
|
||||
|
||||
|
||||
| **Flavor/Variant** | **Core (no k3s)** | **Standard(k3s+opt.full-mesh)** |
|
@ -1,16 +1,16 @@
|
||||
---
|
||||
layout: "../../layouts/docs/Layout.astro"
|
||||
title: "Remote Recovery mode"
|
||||
index: 6
|
||||
title: "Recovery mode"
|
||||
linkTitle: "Recovery mode"
|
||||
weight: 7
|
||||
date: 2022-11-13
|
||||
description: >
|
||||
---
|
||||
|
||||
import Info from "../../components/Info.astro";
|
||||
|
||||
The Kairos recovery mode can be used to recover a damaged system or to regain access remotely (with assistance) to a machine which has been lost access to. The recovery mode is accessible only from the GRUB menu, from both the LiveCD, and an installed system.
|
||||
|
||||
<Info>
|
||||
{{% alert title="Note" %}}
|
||||
On installed system, there are two recovery modes available during boot. Below describes only how the Kairos remote recovery works. The manual recovery entry has nothing special from the standard Elemental-toolkit recovery mode. It can be used to reset the A/B partitions (with the user/pass used during setup) and perform any other operation without remote access.
|
||||
</Info>
|
||||
{{% /alert %}}
|
||||
|
||||
## Boot into recovery mode
|
||||
|
@ -1,11 +1,11 @@
|
||||
---
|
||||
layout: "../../layouts/docs/Layout.astro"
|
||||
title: "Reset"
|
||||
index: 9
|
||||
title: "Reset a node"
|
||||
linkTitle: "Reset"
|
||||
weight: 4
|
||||
date: 2022-11-13
|
||||
description: >
|
||||
---
|
||||
|
||||
# Reset node state
|
||||
|
||||
Kairos has a recovery mechanism built-in which can be leveraged to restore the system to a known point. At installation time, the recovery partition is created from the installation medium and can be used to restore the system from scratch, leaving configuration and persistent data intact.
|
||||
|
||||
The reset will regenerate the bootloader and the images in the COS_STATE partition by using the recovery image.
|
@ -1,11 +1,11 @@
|
||||
---
|
||||
layout: "../../layouts/docs/Layout.astro"
|
||||
title: "Troubleshooting"
|
||||
index: 4
|
||||
linkTitle: "Troubleshooting"
|
||||
weight: 6
|
||||
date: 2022-11-13
|
||||
description: >
|
||||
---
|
||||
|
||||
# Troubleshooting
|
||||
|
||||
Things can go wrong. This section tries to give guidelines in helping out identify potential issues.
|
||||
|
||||
It is important first to check out if your issue was already submitted [in the issue tracker](https://github.com/kairos-io/kairos/issues).
|
6
docs/content/en/docs/Upgrade/_index.md
Normal file
@ -0,0 +1,6 @@
|
||||
---
|
||||
title: "Upgrade"
|
||||
linkTitle: "Upgrade"
|
||||
weight: 3
|
||||
description: >
|
||||
---
|
@ -1,14 +1,12 @@
|
||||
---
|
||||
layout: "../../layouts/docs/Layout.astro"
|
||||
title: "Upgrading from Kubernetes"
|
||||
index: 3
|
||||
linkTitle: "Upgrading from Kubernetes"
|
||||
weight: 1
|
||||
date: 2022-11-13
|
||||
description: >
|
||||
---
|
||||
|
||||
import Info from "../../components/Info.astro";
|
||||
|
||||
# Upgrading from Kubernetes
|
||||
|
||||
Kairos upgrades can be driven either manually or via Kubernetes. In order to trigger upgrades, it is required to apply a Central Registration Depository (CRD®) to the target cluster for the upgrade.
|
||||
Kairos upgrades can be performed either manually or via Kubernetes if the cluster is composed of Kairos nodes. In order to trigger upgrades, it is required to apply a Central Registration Depository (CRD®) to the target cluster for the upgrade.
|
||||
|
||||
### Upgrading from version X to version Y with Kubernetes
|
||||
|
||||
@ -56,11 +54,11 @@ EOF
|
||||
|
||||
To check all the available versions, see the [images](https://quay.io/repository/kairos/kairos-opensuse?tab=tags) available on the container registry, corresponding to the flavor/version selected.
|
||||
|
||||
<Info>
|
||||
{{% alert title="Note" %}}
|
||||
|
||||
Several upgrade strategies can be used with `system-upgrade-controller` which are not illustrated here in this example. For instance, it can be specified in the number of hosts which are running the upgrades, filtering by labels, and more. [Refer to the project documentation](https://github.com/rancher/system-upgrade-controller) on how to create efficient strategies to roll upgrades on the nodes. In the example above, the upgrades are applied to every host of the cluster, one-by-one in sequence.
|
||||
|
||||
</Info>
|
||||
{{% /alert %}}
|
||||
|
||||
A pod should appear right after which carries on the upgrade and automatically reboots the node:
|
||||
|
||||
@ -179,6 +177,6 @@ spec:
|
||||
|
||||
## What's next?
|
||||
|
||||
- [Upgrade nodes manually](/upgrade/manual)
|
||||
- [Immutable architecture](/architecture/immutable)
|
||||
- [Create decentralized clusters](/installation/p2p)
|
||||
- [Upgrade nodes manually](/docs/upgrade/manual)
|
||||
- [Immutable architecture](/docs/architecture/immutable)
|
||||
- [Create decentralized clusters](/docs/installation/p2p)
|
@ -1,7 +1,9 @@
|
||||
---
|
||||
layout: "../../layouts/docs/Layout.astro"
|
||||
title: "Manual"
|
||||
index: 2
|
||||
linkTitle: "Manual"
|
||||
weight: 2
|
||||
date: 2022-11-13
|
||||
description: >
|
||||
---
|
||||
|
||||
# Upgrading manually
|
28
docs/src/pages/quickstart/index.mdx → docs/content/en/docs/_index.md
Normal file → Executable file
@ -1,10 +1,12 @@
|
||||
---
|
||||
layout: "../../layouts/docs/Layout.astro"
|
||||
title: "Welcome"
|
||||
index: 2
|
||||
---
|
||||
|
||||
# Welcome
|
||||
---
|
||||
title: "Welcome"
|
||||
linkTitle: "Documentation"
|
||||
weight: 20
|
||||
menu:
|
||||
main:
|
||||
weight: 20
|
||||
---
|
||||
|
||||
Welcome to the Kairos documentation!
|
||||
|
||||
@ -14,11 +16,11 @@ At a glance:
|
||||
|
||||
- Community Driven
|
||||
- Open Source
|
||||
- [Meta-Distribution](/architecture/meta), distro agnostic
|
||||
- [Immutable](/architecture/immutable)
|
||||
- [Meta-Distribution](/docs/architecture/meta), distro agnostic
|
||||
- [Immutable](/docs/architecture/immutable)
|
||||
- Secure
|
||||
- [Container-based](/architecture/container)
|
||||
- [P2P Mesh](/architecture/network)
|
||||
- [Container-based](/docs/architecture/container)
|
||||
- [P2P Mesh](/docs/architecture/network)
|
||||
|
||||
Kairos can be used to:
|
||||
|
||||
@ -27,7 +29,7 @@ Kairos can be used to:
|
||||
- Manage the cluster lifecycle with Kubernetes—from building to provisioning and upgrading.
|
||||
- Create a multiple-node, single cluster which spans across regions.
|
||||
|
||||
To become familiar with Kairos, check out the [quickstart](/quickstart/installation).
|
||||
To become familiar with Kairos, check out the [quickstart](/docs/getting-started).
|
||||
|
||||
## What is it ?
|
||||
|
||||
@ -141,8 +143,6 @@ Requirements: Needs only Docker.
|
||||
Run `./earthly.sh +all --FLAVOR=opensuse`, should produce a Docker image along with a working ISO.
|
||||
|
||||
|
||||
|
||||
|
||||
## What's next?
|
||||
|
||||
See the [quickstart](/quickstart/) to install Kairos on a VM and create a Kubernetes cluster!
|
||||
See the [quickstart](/docs/getting-started) to install Kairos on a VM and create a Kubernetes cluster!
|
25
docs/content/en/docs/contribution-guidelines.md
Normal file
@ -0,0 +1,25 @@
|
||||
---
|
||||
title: "Contributing"
|
||||
linkTitle: "Contribution guidelines"
|
||||
weight: 20
|
||||
menu:
|
||||
main:
|
||||
weight: 20
|
||||
---
|
||||
|
||||
{{< blocks/section color="secondary" >}}
|
||||
{{% blocks/feature icon="fa" %}}
|
||||
|
||||
{{% /blocks/feature %}}
|
||||
{{% blocks/feature icon="fa-brands fa-github" url="https://github.com/kairos-io/kairos/contribute" %}}
|
||||
|
||||
That's awesome! We welcome any contribution!
|
||||
|
||||
If you wish to start contributing, and want to understand more our process check out:
|
||||
- [Contribution guidelines](https://github.com/kairos-io/kairos/blob/master/CONTRIBUTING.md)
|
||||
- [Governance](https://github.com/kairos-io/kairos/blob/master/GOVERNANCE.md)
|
||||
{{% /blocks/feature %}}
|
||||
{{% blocks/feature icon="fa" %}}
|
||||
|
||||
{{% /blocks/feature %}}
|
||||
{{< /blocks/section >}}
|
4
docs/content/en/search-index.md
Normal file
@ -0,0 +1,4 @@
|
||||
---
|
||||
type: "search-index"
|
||||
url: "index.json"
|
||||
---
|
6
docs/content/en/search.md
Normal file
@ -0,0 +1,6 @@
|
||||
---
|
||||
title: Search Results
|
||||
layout: search
|
||||
|
||||
---
|
||||
|
@ -1,7 +0,0 @@
|
||||
---
|
||||
index: 1;
|
||||
---
|
||||
|
||||
<script is:inline>
|
||||
window.location.pathname = `/quickstart/quickstart`;
|
||||
</script>
|
@ -1,8 +0,0 @@
|
||||
{
|
||||
"compilerOptions": {
|
||||
"module": "commonjs",
|
||||
"target": "es6"
|
||||
},
|
||||
"exclude": ["node_modules"],
|
||||
"include": ["src/**/*"]
|
||||
}
|
10
docs/layouts/404.html
Normal file
@ -0,0 +1,10 @@
|
||||
{{ define "main"}}
|
||||
<main id="main">
|
||||
<div>
|
||||
<h1 id="title">Not found</h1>
|
||||
<p>Oops! This page doesn't exist. Try going back to our <a href="{{ "/" | relURL }}">home page</a>.</p>
|
||||
|
||||
<p>You can learn how to make a 404 page like this in <a href="https://gohugo.io/templates/404/">Custom 404 Pages</a>.</p>
|
||||
</div>
|
||||
</main>
|
||||
{{ end }}
|
61
docs/layouts/index.html
Normal file
9
docs/layouts/shortcodes/githubembed.html
Normal file
@ -0,0 +1,9 @@
|
||||
{{/* https://github.com/haideralipunjabi/hugo-shortcodes/tree/master/github */}}
|
||||
|
||||
{{ $dataJ := getJSON "https://api.github.com/repos/" (.Get "repo") "/contents/" (.Get "file") }}
|
||||
{{ $con := base64Decode $dataJ.content }}
|
||||
|
||||
{{ highlight $con (.Get "lang") (.Get "options") }}
|
||||
|
||||
<small> <i class='fab fa-github'></i> <i>Complete source code: <a target=_blank href="{{ print "https://github.com/" ( .Get "repo" ) "/blob/master/" (.Get "file" ) }}">{{ print "https://github.com/" ( .Get "repo" ) "/blob/master/" (.Get "file" ) }}</a></i> </small>
|
||||
<hr>
|
6627
docs/package-lock.json
generated
@ -1,30 +1,12 @@
|
||||
{
|
||||
"name": "@kairos/docs",
|
||||
"version": "0.0.1",
|
||||
"private": true,
|
||||
"scripts": {
|
||||
"dev": "astro dev",
|
||||
"start": "astro dev",
|
||||
"build": "astro build",
|
||||
"preview": "astro preview",
|
||||
"astro": "astro"
|
||||
},
|
||||
"dependencies": {
|
||||
"@astrojs/mdx": "^0.11.1",
|
||||
"@astrojs/react": "^1.1.2",
|
||||
"@fortawesome/fontawesome-svg-core": "^6.2.0",
|
||||
"@fortawesome/free-regular-svg-icons": "^6.2.0",
|
||||
"@fortawesome/free-solid-svg-icons": "^6.2.0",
|
||||
"@fortawesome/react-fontawesome": "^0.2.0",
|
||||
"astro": "^1.2.2",
|
||||
"install": "^0.13.0",
|
||||
"npm": "^9.0.0",
|
||||
"react": "^18.2.0",
|
||||
"react-dom": "^18.2.0"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@types/react": "^18.0.20",
|
||||
"eslint-plugin-react-hooks": "^4.6.0",
|
||||
"prettier-plugin-astro": "^0.7.0"
|
||||
"autoprefixer": "^10.4.13",
|
||||
"postcss": "^8.4.19",
|
||||
"postcss-cli": "^10.0.0"
|
||||
},
|
||||
"scripts": {
|
||||
"get:submodule": "git submodule update --init --depth 1",
|
||||
"_prepare:docsy": "cd themes/docsy && npm install",
|
||||
"prepare": "npm run get:submodule && npm run _prepare:docsy"
|
||||
}
|
||||
}
|
||||
|
@ -1 +0,0 @@
|
||||
kairos.io
|
@ -1,5 +1,25 @@
|
||||
#!/bin/bash
|
||||
set -e
|
||||
|
||||
npm install
|
||||
npm run build
|
||||
BASE_URL="${BASE_URL:-https://kairos.io}"
|
||||
|
||||
binpath="${ROOT_DIR}/bin"
|
||||
publicpath="${ROOT_DIR}/public"
|
||||
|
||||
if [ ! -e "${binpath}/hugo" ];
|
||||
then
|
||||
[[ ! -d "${binpath}" ]] && mkdir -p "${binpath}"
|
||||
wget https://github.com/gohugoio/hugo/releases/download/v"${HUGO_VERSION}"/hugo_extended_"${HUGO_VERSION}"_"${HUGO_PLATFORM}".tar.gz -O "$binpath"/hugo.tar.gz
|
||||
tar -xvf "$binpath"/hugo.tar.gz -C "${binpath}"
|
||||
rm -rf "$binpath"/hugo.tar.gz
|
||||
chmod +x "$binpath"/hugo
|
||||
fi
|
||||
|
||||
rm -rf "${publicpath}" || true
|
||||
[[ ! -d "${publicpath}" ]] && mkdir -p "${publicpath}"
|
||||
|
||||
npm install --save-dev autoprefixer postcss-cli postcss
|
||||
|
||||
HUGO_ENV="production" "${binpath}/hugo" --gc -b "${BASE_URL}" -d "${publicpath}"
|
||||
|
||||
cp -rf CNAME $publicpath
|
||||
|
@ -1,8 +1,6 @@
|
||||
#!/bin/bash
|
||||
set -e
|
||||
|
||||
# not used in netlify
|
||||
|
||||
"${ROOT_DIR}"/scripts/build.sh
|
||||
|
||||
git branch -D gh-pages || true
|
||||
@ -13,3 +11,4 @@ git rm -rf .
|
||||
|
||||
cp -rfv public/* ./
|
||||
rm -rf public/
|
||||
|
||||
|
@ -1,4 +1,14 @@
|
||||
#!/bin/bash
|
||||
set -e
|
||||
|
||||
npx serve dist
|
||||
binpath="${ROOT_DIR}/bin"
|
||||
if [ ! -e "${binpath}/hugo" ];
|
||||
then
|
||||
[[ ! -d "${binpath}" ]] && mkdir -p "${binpath}"
|
||||
wget https://github.com/gohugoio/hugo/releases/download/v"${HUGO_VERSION}"/hugo_extended_"${HUGO_VERSION}"_"${HUGO_PLATFORM}".tar.gz -O "$binpath"/hugo.tar.gz
|
||||
tar -xvf "$binpath"/hugo.tar.gz -C "${binpath}"
|
||||
rm -rf "$binpath"/hugo.tar.gz
|
||||
chmod +x "$binpath"/hugo
|
||||
fi
|
||||
|
||||
"${binpath}/hugo" --baseURL="$BASE_URL" -s "$ROOT_DIR" serve
|
Before Width: | Height: | Size: 123 KiB |
@ -1,21 +0,0 @@
|
||||
<svg width="185" height="215" viewBox="0 0 185 215" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<rect width="24.8171" height="24.8171" transform="matrix(-0.86601 0.500028 -3.18907e-05 1 92.1172 12.4531)" fill="#EE5007"/>
|
||||
<rect width="24.8171" height="24.8171" transform="matrix(-0.86601 -0.500028 3.18907e-05 1 70.624 24.8633)" fill="#FF7442"/>
|
||||
<rect width="24.8171" height="24.8171" transform="matrix(-0.866041 0.499972 0.866041 0.499972 70.624 0.046875)" fill="#FB9E70"/>
|
||||
<rect width="24.8171" height="24.8171" transform="matrix(3.19859e-05 1 0.86601 0.500028 49.1294 37.2734)" fill="#FF7442"/>
|
||||
<rect width="24.8171" height="24.8171" transform="matrix(-0.866041 0.499973 0.866041 0.499972 49.1294 62.0859)" fill="#FB9E70"/>
|
||||
<rect width="24.8171" height="24.8171" transform="matrix(-3.17834e-05 1 0.866009 -0.500028 27.6382 49.6836)" fill="#EE5007"/>
|
||||
<rect width="24.8171" height="24.8171" transform="matrix(-0.86601 0.500028 -3.19781e-05 1 92.1196 86.9062)" fill="#EE5007"/>
|
||||
<rect width="24.8171" height="24.8171" transform="matrix(-0.866009 -0.500028 3.18033e-05 1 70.6265 99.3164)" fill="#FF7442"/>
|
||||
<rect width="24.8171" height="24.8171" transform="matrix(-0.866041 0.499972 0.866041 0.499973 70.6265 74.5)" fill="#FB9E70"/>
|
||||
<rect width="24.8171" height="24.8171" transform="matrix(0.86601 -0.500028 3.18907e-05 -1 92.1143 111.734)" fill="#EE5007"/>
|
||||
<rect width="24.8171" height="24.8171" transform="matrix(0.86601 0.500028 -3.18907e-05 -1 113.607 99.3242)" fill="#FF7442"/>
|
||||
<rect width="24.8171" height="24.8171" transform="matrix(0.866041 -0.499972 -0.866041 -0.499972 113.607 124.141)" fill="#FB9E70"/>
|
||||
<rect width="24.8171" height="24.8171" transform="matrix(-0.86601 0.500028 -3.19781e-05 1 156.594 49.6797)" fill="#EE5007"/>
|
||||
<rect width="24.8171" height="24.8171" transform="matrix(-0.866009 -0.500028 3.18033e-05 1 135.101 62.0898)" fill="#FF7442"/>
|
||||
<rect width="24.8171" height="24.8171" transform="matrix(-0.866041 0.499972 0.866041 0.499973 135.101 37.2734)" fill="#FB9E70"/>
|
||||
<rect width="24.8171" height="24.8171" transform="matrix(0.86601 -0.500028 3.18907e-05 -1 92.1157 37.2812)" fill="#EE5007"/>
|
||||
<rect width="24.8171" height="24.8171" transform="matrix(0.86601 0.500028 -3.18907e-05 -1 113.609 24.8711)" fill="#FF7442"/>
|
||||
<rect width="24.8171" height="24.8171" transform="matrix(0.866041 -0.499972 -0.866041 -0.499972 113.609 49.6875)" fill="#FB9E70"/>
|
||||
<path d="M26.5888 206.93L12.0655 189.147V206.93H4.06053V167.019H12.0655V184.916L26.5888 167.019H36.2519L19.7845 186.803L36.7093 206.93H26.5888ZM39.9162 190.977C39.9162 187.775 40.5452 184.935 41.8031 182.457C43.0991 179.98 44.8335 178.074 47.0063 176.74C49.2172 175.405 51.6759 174.738 54.3823 174.738C56.7457 174.738 58.8041 175.215 60.5575 176.168C62.3491 177.121 63.7786 178.322 64.8459 179.77V175.253H72.908V206.93H64.8459V202.298C63.8167 203.785 62.3872 205.024 60.5575 206.015C58.766 206.968 56.6885 207.444 54.3251 207.444C51.6568 207.444 49.2172 206.758 47.0063 205.386C44.8335 204.014 43.0991 202.089 41.8031 199.611C40.5452 197.095 39.9162 194.217 39.9162 190.977ZM64.8459 191.091C64.8459 189.147 64.4647 187.489 63.7023 186.117C62.94 184.706 61.9108 183.639 60.6147 182.915C59.3187 182.152 57.9273 181.771 56.4407 181.771C54.9541 181.771 53.5818 182.133 52.3239 182.858C51.066 183.582 50.0367 184.649 49.2362 186.06C48.4739 187.432 48.0927 189.071 48.0927 190.977C48.0927 192.883 48.4739 194.56 49.2362 196.009C50.0367 197.419 51.066 198.505 52.3239 199.268C53.6199 200.03 54.9922 200.411 56.4407 200.411C57.9273 200.411 59.3187 200.049 60.6147 199.325C61.9108 198.563 62.94 197.495 63.7023 196.123C64.4647 194.713 64.8459 193.035 64.8459 191.091ZM84.7859 171.479C83.3755 171.479 82.1938 171.041 81.2409 170.164C80.326 169.249 79.8686 168.125 79.8686 166.791C79.8686 165.456 80.326 164.351 81.2409 163.474C82.1938 162.559 83.3755 162.102 84.7859 162.102C86.1963 162.102 87.3589 162.559 88.2738 163.474C89.2268 164.351 89.7032 165.456 89.7032 166.791C89.7032 168.125 89.2268 169.249 88.2738 170.164C87.3589 171.041 86.1963 171.479 84.7859 171.479ZM88.7312 175.253V206.93H80.7263V175.253H88.7312ZM104.645 180.17C105.674 178.493 107.008 177.178 108.648 176.225C110.325 175.272 112.231 174.796 114.365 174.796V183.201H112.25C109.734 183.201 107.828 183.792 106.532 184.973C105.274 186.155 104.645 188.213 104.645 191.148V206.93H96.6401V175.253H104.645V180.17ZM133.823 207.444C130.773 207.444 128.029 206.777 125.589 205.443C123.15 204.071 121.225 202.146 119.814 199.668C118.442 197.19 117.756 194.331 117.756 191.091C117.756 187.851 118.461 184.992 119.871 182.515C121.32 180.037 123.283 178.131 125.761 176.797C128.239 175.424 131.002 174.738 134.052 174.738C137.101 174.738 139.865 175.424 142.343 176.797C144.82 178.131 146.764 180.037 148.175 182.515C149.623 184.992 150.347 187.851 150.347 191.091C150.347 194.331 149.604 197.19 148.118 199.668C146.669 202.146 144.687 204.071 142.171 205.443C139.693 206.777 136.911 207.444 133.823 207.444ZM133.823 200.469C135.271 200.469 136.625 200.125 137.883 199.439C139.179 198.715 140.208 197.648 140.97 196.237C141.733 194.827 142.114 193.112 142.114 191.091C142.114 188.08 141.313 185.774 139.712 184.173C138.149 182.534 136.224 181.714 133.937 181.714C131.65 181.714 129.725 182.534 128.162 184.173C126.638 185.774 125.875 188.08 125.875 191.091C125.875 194.103 126.618 196.428 128.105 198.067C129.63 199.668 131.536 200.469 133.823 200.469ZM168.341 207.444C165.749 207.444 163.424 206.987 161.365 206.072C159.307 205.119 157.668 203.842 156.448 202.241C155.266 200.64 154.618 198.868 154.504 196.923H162.566C162.719 198.143 163.309 199.153 164.339 199.954C165.406 200.754 166.721 201.155 168.284 201.155C169.809 201.155 170.99 200.85 171.829 200.24C172.706 199.63 173.144 198.848 173.144 197.896C173.144 196.866 172.61 196.104 171.543 195.608C170.514 195.075 168.856 194.503 166.569 193.893C164.205 193.321 162.261 192.73 160.736 192.121C159.25 191.511 157.954 190.577 156.848 189.319C155.781 188.061 155.247 186.365 155.247 184.23C155.247 182.476 155.743 180.875 156.734 179.427C157.763 177.978 159.212 176.835 161.08 175.996C162.985 175.158 165.215 174.738 167.769 174.738C171.543 174.738 174.555 175.691 176.804 177.597C179.053 179.465 180.291 182 180.52 185.202H172.858C172.744 183.944 172.21 182.953 171.257 182.229C170.342 181.466 169.104 181.085 167.541 181.085C166.092 181.085 164.968 181.352 164.167 181.886C163.405 182.419 163.024 183.163 163.024 184.116C163.024 185.183 163.557 186.002 164.625 186.574C165.692 187.108 167.35 187.661 169.599 188.232C171.886 188.804 173.773 189.395 175.26 190.005C176.746 190.615 178.023 191.568 179.091 192.864C180.196 194.122 180.768 195.799 180.806 197.896C180.806 199.725 180.291 201.364 179.262 202.813C178.271 204.261 176.823 205.405 174.917 206.244C173.049 207.044 170.857 207.444 168.341 207.444Z" fill="black"/>
|
||||
</svg>
|
Before Width: | Height: | Size: 6.6 KiB |
Before Width: | Height: | Size: 8.3 KiB |
Before Width: | Height: | Size: 31 KiB |
@ -1,8 +0,0 @@
|
||||
<link rel="apple-touch-icon" sizes="180x180" href="/favicon/apple-touch-icon.png" />
|
||||
<link rel="icon" type="image/png" sizes="32x32" href="/favicon/favicon-32x32.png" />
|
||||
<link rel="icon" type="image/png" sizes="16x16" href="/favicon/favicon-16x16.png" />
|
||||
<link rel="manifest" href="/favicon/site.webmanifest" />
|
||||
<link rel="shortcut icon" href="/favicon/favicon.ico" />
|
||||
<meta name="msapplication-TileColor" content="#da532c" />
|
||||
<meta name="msapplication-config" content="/favicon/browserconfig.xml" />
|
||||
<meta name="theme-color" content="#ffffff" />
|
@ -1,21 +0,0 @@
|
||||
---
|
||||
---
|
||||
|
||||
<div class="box">
|
||||
<slot />
|
||||
</div>
|
||||
|
||||
<style>
|
||||
.box {
|
||||
padding: 10px;
|
||||
border-radius: 4px;
|
||||
margin-bottom: 1em;
|
||||
background: rgba(77, 158, 240, 0.1);
|
||||
border: 1px solid rgba(77, 158, 240, 0.4);
|
||||
}
|
||||
|
||||
.box code {
|
||||
background: rgba(77,158,240,0.1);
|
||||
border: 1px solid rgba(77,158,240,0.4);
|
||||
}
|
||||
</style>
|
1
docs/src/env.d.ts
vendored
@ -1 +0,0 @@
|
||||
/// <reference types="astro/client" />
|
@ -1,29 +0,0 @@
|
||||
---
|
||||
---
|
||||
|
||||
<header>
|
||||
<div class="content"></div>
|
||||
</header>
|
||||
|
||||
<style>
|
||||
header {
|
||||
max-height: 90px;
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
align-items: center;
|
||||
width: 100%;
|
||||
margin: 1px auto;
|
||||
padding: 0.3rem 3rem;
|
||||
border-bottom: 1px solid #ddd;
|
||||
position: fixed;
|
||||
background-color: #fff;
|
||||
top: -1px;
|
||||
z-index: 10;
|
||||
}
|
||||
|
||||
header .content {
|
||||
max-width: 1200px;
|
||||
width: 100%;
|
||||
display: flex;
|
||||
}
|
||||
</style>
|
@ -1,112 +0,0 @@
|
||||
---
|
||||
import Header from "./Header.astro";
|
||||
import LeftSidebar from "./LeftSidebar/index";
|
||||
import RightSidebar from "./RightSidebar/index";
|
||||
import Navbar from "./Navbar/index";
|
||||
import PageContent from "./PageContent.astro";
|
||||
import Favicon from "../../components/Favicon.astro";
|
||||
import "../../styles/theme.css";
|
||||
import "../../styles/index.css";
|
||||
|
||||
const currentPage = Astro.url.pathname;
|
||||
const { frontmatter, headings } = Astro.props;
|
||||
const content = await Astro.glob("../../pages/**/*.(md|mdx)");
|
||||
---
|
||||
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
<title>Documentation</title>
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||
<title>
|
||||
{frontmatter.title}
|
||||
</title>
|
||||
<style>
|
||||
.layout {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
padding-left: 0;
|
||||
padding-right: 0;
|
||||
position: relative;
|
||||
overflow-x: hidden;
|
||||
}
|
||||
|
||||
#grid-main {
|
||||
padding: 24px;
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
height: 100%;
|
||||
margin-top: 70px;
|
||||
flex-grow: 1;
|
||||
}
|
||||
|
||||
@media (min-width: 1024px) {
|
||||
#grid-main {
|
||||
margin-top: 0;
|
||||
padding: 40px;
|
||||
}
|
||||
}
|
||||
|
||||
#grid-left {
|
||||
background-color: #fff;
|
||||
position: relative;
|
||||
max-width: 300px;
|
||||
min-width: 300px;
|
||||
width: 100%;
|
||||
display: none;
|
||||
}
|
||||
|
||||
#grid-left .navbar {
|
||||
display: none;
|
||||
}
|
||||
|
||||
@media (min-width: 1024px) {
|
||||
#grid-left {
|
||||
display: block;
|
||||
}
|
||||
#grid-left .navbar {
|
||||
display: block;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
<Favicon />
|
||||
<link rel="preconnect" href="https://fonts.googleapis.com" />
|
||||
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
|
||||
<link
|
||||
href="https://fonts.googleapis.com/css2?family=Noto+Sans:ital,wght@0,300;0,400;0,500;0,600;0,700;1,300;1,400;1,500;1,600;1,700&display=swap"
|
||||
rel="stylesheet"
|
||||
/>
|
||||
<style is:global>
|
||||
.layout > * {
|
||||
height: 100%;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
* {
|
||||
font-family: "Noto Sans";
|
||||
}
|
||||
</style>
|
||||
<script is:inline>
|
||||
window.addEventListener("DOMContentLoaded", () => {
|
||||
var target = document.querySelector('[aria-current="page"]');
|
||||
if (target && target.offsetTop > window.innerHeight - 100) {
|
||||
document.querySelector(".nav").scrollTop = target.offsetTop;
|
||||
}
|
||||
});
|
||||
</script>
|
||||
</head>
|
||||
<body>
|
||||
<aside id="grid-left" title="Site Navigation">
|
||||
<LeftSidebar currentPage={currentPage} content={content} cb={() => {}} />
|
||||
</aside>
|
||||
<main class="layout">
|
||||
<Navbar currentPage={currentPage} content={content} client:visible />
|
||||
<div id="grid-main">
|
||||
<PageContent frontmatter={frontmatter} headings={headings}>
|
||||
<slot />
|
||||
</PageContent>
|
||||
|
||||
<RightSidebar headings={headings} />
|
||||
</div>
|
||||
</main>
|
||||
</body>
|
||||
</html>
|
@ -1,95 +0,0 @@
|
||||
.nav {
|
||||
width: 100%;
|
||||
max-width: 300px;
|
||||
height: 100vh;
|
||||
position: fixed;
|
||||
overflow-y: auto;
|
||||
overflow-x: hidden;
|
||||
border-right: 1px solid #ddd;
|
||||
z-index: 10;
|
||||
}
|
||||
|
||||
.nav-list {
|
||||
padding: 0;
|
||||
overflow-x: visible;
|
||||
margin: 0;
|
||||
padding-left: 1.6rem;
|
||||
}
|
||||
|
||||
.nav > .nav-list {
|
||||
padding: 1px 1rem 1rem 1rem;
|
||||
margin-top: -1px;
|
||||
background-color: #fafafa;
|
||||
}
|
||||
|
||||
.nav-group-title {
|
||||
font-size: 1rem;
|
||||
font-weight: 700;
|
||||
padding: 0.1rem 1rem;
|
||||
text-transform: uppercase;
|
||||
margin-bottom: 0.5rem;
|
||||
}
|
||||
|
||||
.nav-link a {
|
||||
font-size: 1rem;
|
||||
font: inherit;
|
||||
color: #000000;
|
||||
text-decoration: none;
|
||||
display: block;
|
||||
padding: 0.25rem 0;
|
||||
margin: 0.25rem 0;
|
||||
opacity: 0.9;
|
||||
line-height: 1.3;
|
||||
position: relative;
|
||||
width: fit-content;
|
||||
}
|
||||
|
||||
.nav-group {
|
||||
margin: 1.2rem 0;
|
||||
}
|
||||
|
||||
.nav-group > a {
|
||||
opacity: 1;
|
||||
font-weight: bold;
|
||||
margin-bottom: 0;
|
||||
}
|
||||
|
||||
.nav-link > a:hover {
|
||||
text-decoration: none;
|
||||
color: #E06948;
|
||||
}
|
||||
|
||||
.nav-link > a:hover {
|
||||
color: #E06948;
|
||||
}
|
||||
|
||||
.nav-link:not(.nav-group) > a[aria-current="page"] {
|
||||
color: #E06948;
|
||||
}
|
||||
|
||||
.nav-group > a[aria-current="page"]::after {
|
||||
content: "";
|
||||
position: absolute;
|
||||
height: 1px;
|
||||
width: 100%;
|
||||
background-color: #e06948;
|
||||
bottom: 0px;
|
||||
right: 0;
|
||||
}
|
||||
|
||||
|
||||
.nav > .hero-logo {
|
||||
padding: 36px;
|
||||
margin: 0px auto;
|
||||
display: flex;
|
||||
background-color: #fff;
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
}
|
||||
|
||||
.nav > .hero-logo::after {
|
||||
content: "DOCS";
|
||||
display: block;
|
||||
font-weight: 500;
|
||||
}
|
@ -1,109 +0,0 @@
|
||||
import { faTimes } from "@fortawesome/free-solid-svg-icons";
|
||||
import { FontAwesomeIcon } from "@fortawesome/react-fontawesome";
|
||||
import { useMemo } from "react";
|
||||
import heroImage from "../../../assets/logos/kairos-black.svg";
|
||||
import "./LeftSidebar.css";
|
||||
|
||||
const folderOrder = [
|
||||
"quickstart",
|
||||
"installation",
|
||||
"upgrade",
|
||||
"architecture",
|
||||
"advanced",
|
||||
"reference",
|
||||
"sdk",
|
||||
];
|
||||
|
||||
export default function Sidebar({ content, currentPage, cb }) {
|
||||
const currentPageMatch = useMemo(
|
||||
() => "/" + currentPage.slice(1),
|
||||
[currentPage]
|
||||
);
|
||||
|
||||
const menu = useMemo(() => {
|
||||
const navGroups = content.reduce((acc, { frontmatter, url }) => {
|
||||
const partitions = url.split("/");
|
||||
if (partitions[1] === partitions[2]) {
|
||||
return {
|
||||
...acc,
|
||||
[partitions[1]]: {
|
||||
url,
|
||||
title: frontmatter.title,
|
||||
children: [],
|
||||
},
|
||||
};
|
||||
}
|
||||
return acc;
|
||||
}, {});
|
||||
|
||||
return content.reduce((acc, { frontmatter, url }) => {
|
||||
const partitions = url.split("/");
|
||||
if (partitions.length <= 1) {
|
||||
return acc;
|
||||
}
|
||||
const folder = partitions[1];
|
||||
if (partitions[1] === partitions[2]) {
|
||||
return acc;
|
||||
}
|
||||
|
||||
return {
|
||||
...acc,
|
||||
[folder]: {
|
||||
...acc[folder],
|
||||
children: [
|
||||
...(acc?.[folder]?.children || []),
|
||||
{
|
||||
url,
|
||||
title: frontmatter.title,
|
||||
index: frontmatter.index,
|
||||
},
|
||||
],
|
||||
},
|
||||
};
|
||||
}, navGroups);
|
||||
}, [content]);
|
||||
|
||||
return (
|
||||
<nav className="nav">
|
||||
<FontAwesomeIcon id="esc-button" icon={faTimes} onClick={cb} />
|
||||
<div className="hero-logo">
|
||||
<a href="/">
|
||||
<img src={heroImage} alt="main logo" width="135" />
|
||||
</a>
|
||||
</div>
|
||||
<ul className="nav-list">
|
||||
{folderOrder.map((header, index) => {
|
||||
const item = menu[header];
|
||||
|
||||
return (
|
||||
<li className="nav-group nav-link" key={index}>
|
||||
<strong
|
||||
{...(currentPageMatch === item?.url && {
|
||||
"aria-current": "page",
|
||||
})}
|
||||
>
|
||||
{item?.title}
|
||||
</strong>
|
||||
<ul className="nav-list">
|
||||
{(item?.children || [])
|
||||
.sort((a, b) => a.index - b.index)
|
||||
.map((child, index) => (
|
||||
<li className="nav-link" key={index}>
|
||||
<a
|
||||
href={child.url}
|
||||
{...(currentPageMatch === child.url && {
|
||||
"aria-current": "page",
|
||||
})}
|
||||
>
|
||||
{child?.title}
|
||||
</a>
|
||||
</li>
|
||||
))}
|
||||
</ul>
|
||||
</li>
|
||||
);
|
||||
})}
|
||||
</ul>
|
||||
</nav>
|
||||
);
|
||||
}
|
@ -1,82 +0,0 @@
|
||||
.navbar {
|
||||
overflow: hidden;
|
||||
background-color: #fff;
|
||||
position: relative;
|
||||
}
|
||||
|
||||
.sidebar {
|
||||
position: relative;
|
||||
}
|
||||
|
||||
#esc-button {
|
||||
z-index: 11;
|
||||
display: block;
|
||||
position: absolute;
|
||||
right: 20px;
|
||||
top: 15px;
|
||||
font-size: 27px;
|
||||
}
|
||||
|
||||
#esc-button:active {
|
||||
color: #ee5007;
|
||||
}
|
||||
|
||||
@media (min-width: 1024px) {
|
||||
#esc-button {
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
|
||||
.sidebar > nav {
|
||||
left: 0px;
|
||||
transition: left 0.3s ease-out;
|
||||
}
|
||||
|
||||
.sidebar-hidden > nav {
|
||||
border-right: 0;
|
||||
left: -300px;
|
||||
transition: left 0.3s ease-out;
|
||||
}
|
||||
|
||||
.sidebar-hidden > #esc-button {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.navbar-wrap {
|
||||
position: fixed;
|
||||
height: 70px;
|
||||
width: 100%;
|
||||
border-bottom: 1px solid rgba(0, 0, 0, 0.1);
|
||||
background-color: #fff;
|
||||
z-index: 10;
|
||||
padding: 24px;
|
||||
}
|
||||
|
||||
@media (min-width: 1024px) {
|
||||
.navbar-wrap {
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
|
||||
#hamburger {
|
||||
font-size: 27px;
|
||||
height: 27px;
|
||||
}
|
||||
|
||||
.navbar-wrap > svg:active {
|
||||
color: #ee5007;
|
||||
}
|
||||
|
||||
.overlay {
|
||||
display: block;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
backdrop-filter: blur(4px);
|
||||
opacity: 1;
|
||||
z-index: 9;
|
||||
position: fixed;
|
||||
}
|
||||
|
||||
.overlay-hidden {
|
||||
display: none;
|
||||
}
|
@ -1,37 +0,0 @@
|
||||
import { useState } from "react";
|
||||
import LeftSideBar from "../LeftSidebar/index";
|
||||
import { FontAwesomeIcon } from "@fortawesome/react-fontawesome";
|
||||
import { faBars } from "@fortawesome/free-solid-svg-icons";
|
||||
import "./Navbar.css";
|
||||
|
||||
export default function Navbar(props) {
|
||||
const [hidden, setNavbarVisibility] = useState(true);
|
||||
|
||||
return (
|
||||
<>
|
||||
<div className="navbar-wrap">
|
||||
<FontAwesomeIcon
|
||||
icon={faBars}
|
||||
id="hamburger"
|
||||
onClick={() => {
|
||||
setNavbarVisibility(!hidden);
|
||||
}}
|
||||
/>
|
||||
</div>
|
||||
<div className={`${hidden ? "sidebar-hidden" : "sidebar"}`}>
|
||||
<LeftSideBar
|
||||
{...props}
|
||||
cb={() => {
|
||||
setNavbarVisibility(true);
|
||||
}}
|
||||
/>
|
||||
<div
|
||||
className={`${hidden ? "overlay-hidden" : "overlay"}`}
|
||||
onClick={() => {
|
||||
setNavbarVisibility(!hidden);
|
||||
}}
|
||||
/>
|
||||
</div>
|
||||
</>
|
||||
);
|
||||
}
|
@ -1,33 +0,0 @@
|
||||
---
|
||||
const { frontmatter } = Astro.props;
|
||||
const title = frontmatter.title;
|
||||
---
|
||||
|
||||
<article id="article" class="content">
|
||||
<section class="main-section">
|
||||
<slot />
|
||||
</section>
|
||||
</article>
|
||||
|
||||
<style>
|
||||
.content {
|
||||
padding: 0;
|
||||
height: 100%;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
max-width: 75ch;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.content > section {
|
||||
margin-bottom: 4rem;
|
||||
}
|
||||
|
||||
.block {
|
||||
display: block;
|
||||
}
|
||||
|
||||
.content-title {
|
||||
font-size: 2em;
|
||||
}
|
||||
</style>
|
@ -1,45 +0,0 @@
|
||||
#grid-right {
|
||||
display: none;
|
||||
width: auto;
|
||||
flex-grow: 1;
|
||||
}
|
||||
|
||||
.toc {
|
||||
margin-left: 2rem;
|
||||
position: fixed;
|
||||
}
|
||||
|
||||
.toc ul {
|
||||
list-style: none;
|
||||
padding: 0;
|
||||
margin: 1rem 0.5rem;
|
||||
position: relative;
|
||||
border-left: 2px solid #e06948;
|
||||
}
|
||||
|
||||
.toc li {
|
||||
font-size: 1rem;
|
||||
padding: 0.1rem 0 0.1rem 1rem;
|
||||
}
|
||||
|
||||
.toc li > a {
|
||||
display: inline-flex;
|
||||
gap: 0.5em;
|
||||
width: 100%;
|
||||
padding: 0.4em 0;
|
||||
text-underline-offset: 0.08em;
|
||||
align-items: center;
|
||||
text-decoration: none;
|
||||
color: #000;
|
||||
opacity: 0.9;
|
||||
}
|
||||
|
||||
.toc li > a:hover {
|
||||
color: #e06948;
|
||||
}
|
||||
|
||||
@media (min-width: 1024px) {
|
||||
#grid-right {
|
||||
display: flex;
|
||||
}
|
||||
}
|
@ -1,23 +0,0 @@
|
||||
import "./RightSidebar.css";
|
||||
|
||||
export default function RightSidebar({ headings }) {
|
||||
const secondDepthHeadings = headings.filter((item) => item.depth === 2);
|
||||
if (!secondDepthHeadings.length) {
|
||||
return null;
|
||||
}
|
||||
|
||||
return (
|
||||
<aside id="grid-right" title="Table of Contents">
|
||||
<nav className="toc">
|
||||
<h4>Table of contents</h4>
|
||||
<ul>
|
||||
{secondDepthHeadings.map((heading) => (
|
||||
<li className="toc-item" key={heading.slug}>
|
||||
<a href={`#${heading.slug}`}>{heading.text}</a>
|
||||
</li>
|
||||
))}
|
||||
</ul>
|
||||
</nav>
|
||||
</aside>
|
||||
);
|
||||
}
|
@ -1,331 +0,0 @@
|
||||
---
|
||||
import heroImage from "../../assets/logos/kairos-white-column.png";
|
||||
import footerLogo from "../../assets/index/footer.png";
|
||||
import Sections from "./Sections";
|
||||
import Favicon from "../../components/Favicon.astro";
|
||||
---
|
||||
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||
<link
|
||||
href="https://fonts.googleapis.com/css2?family=Noto+Sans:ital,wght@0,300;0,400;0,500;0,600;0,700;1,300;1,400;1,500;1,600;1,700&display=swap"
|
||||
rel="stylesheet"
|
||||
/>
|
||||
<link
|
||||
href="https://fonts.googleapis.com/css2?family=Noto+Sans+Mono:ital,wght@0,300;0,400;0,500;0,600;0,700;1,300;1,400;1,500;1,600;1,700&display=swap"
|
||||
rel="stylesheet"
|
||||
/>
|
||||
<Favicon />
|
||||
<style>
|
||||
.wrapper {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
}
|
||||
|
||||
body {
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
* {
|
||||
font-family: "Noto Sans";
|
||||
box-sizing: border-box;
|
||||
}
|
||||
|
||||
.hero {
|
||||
position: relative;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
@media (min-width: 1024px) {
|
||||
.hero {
|
||||
height: 45vw;
|
||||
}
|
||||
}
|
||||
|
||||
.hero {
|
||||
display: block;
|
||||
width: 100%;
|
||||
height: auto;
|
||||
}
|
||||
|
||||
.hero-logo {
|
||||
margin-bottom: 58px;
|
||||
}
|
||||
|
||||
@media (min-width: 1024px) {
|
||||
.hero-logo {
|
||||
margin-right: 260px;
|
||||
margin-bottom: 0px;
|
||||
}
|
||||
}
|
||||
|
||||
.overlay {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
min-height: 708px;
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
padding: 0 24px;
|
||||
background-color: #03153a;
|
||||
}
|
||||
|
||||
.constraint {
|
||||
width: 100%;
|
||||
max-width: 1300px;
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
}
|
||||
|
||||
.constraint.vertical {
|
||||
flex-direction: column;
|
||||
}
|
||||
|
||||
.constraint.vertical > .header {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
width: 100%;
|
||||
max-width: 1200px;
|
||||
margin-top: 60px;
|
||||
}
|
||||
|
||||
@media (min-width: 1024px) {
|
||||
.constraint.vertical > .header {
|
||||
flex-direction: row;
|
||||
margin-top: 0px;
|
||||
}
|
||||
}
|
||||
|
||||
.title {
|
||||
font-weight: 700;
|
||||
font-size: 58px;
|
||||
line-height: 80px;
|
||||
letter-spacing: 0.02em;
|
||||
color: #ffffff;
|
||||
margin-top: 0;
|
||||
}
|
||||
|
||||
.subtitle {
|
||||
font-weight: 500;
|
||||
font-size: 31px;
|
||||
line-height: 130%;
|
||||
letter-spacing: 0.01em;
|
||||
color: #ffffff;
|
||||
}
|
||||
|
||||
.title > span {
|
||||
color: #e06948;
|
||||
}
|
||||
|
||||
.grid {
|
||||
display: grid;
|
||||
grid-gap: 2rem;
|
||||
}
|
||||
|
||||
.sectionTitle {
|
||||
font-weight: 700;
|
||||
font-size: var(--f-u8);
|
||||
margin-top: 4rem;
|
||||
margin-bottom: 2rem;
|
||||
}
|
||||
|
||||
.roles {
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
gap: 0.5em;
|
||||
font-size: var(--f-d1);
|
||||
}
|
||||
|
||||
.role {
|
||||
position: relative;
|
||||
display: inline-block;
|
||||
white-space: nowrap;
|
||||
font-weight: 900;
|
||||
color: var(--t-bg);
|
||||
background-color: var(--t-fg);
|
||||
padding: 0.25em 0.5em;
|
||||
z-index: 2;
|
||||
}
|
||||
|
||||
.invert {
|
||||
position: absolute;
|
||||
color: var(--t-fg);
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
top: 0;
|
||||
left: 0;
|
||||
pointer-events: none;
|
||||
clip-path: polygon(0% 100%, 100% 100%, 100% 200%, 0% 200%);
|
||||
transition: clip-path cubic-bezier(0.4, 0, 0.5, 1) 150ms;
|
||||
}
|
||||
|
||||
.desc {
|
||||
font-weight: 400;
|
||||
font-size: 24px;
|
||||
line-height: 170%;
|
||||
color: #ffffff;
|
||||
max-width: 748px;
|
||||
margin: 64px 0;
|
||||
max-width: 600px;
|
||||
}
|
||||
|
||||
@media (min-width: 1024px) {
|
||||
.desc {
|
||||
max-width: 1199px;
|
||||
font-size: 18px;
|
||||
}
|
||||
}
|
||||
|
||||
.desc span {
|
||||
color: #ee5007;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
.bio {
|
||||
line-height: 2;
|
||||
margin-bottom: 2rem;
|
||||
}
|
||||
|
||||
.bio > span:first-of-type {
|
||||
line-height: 1;
|
||||
margin-bottom: 0.5em;
|
||||
display: block;
|
||||
font-weight: 700;
|
||||
font-size: var(--f-u4);
|
||||
}
|
||||
|
||||
.orange-line {
|
||||
height: 16px;
|
||||
width: 100%;
|
||||
background: #ee5007;
|
||||
}
|
||||
|
||||
.buttons {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
@media (min-width: 420px) {
|
||||
.buttons {
|
||||
flex-direction: row;
|
||||
align-items: flex-start;
|
||||
}
|
||||
}
|
||||
|
||||
.buttons > a {
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
padding: 8px 16px;
|
||||
width: 210px;
|
||||
height: 50px;
|
||||
font-weight: 600;
|
||||
font-size: 22px;
|
||||
line-height: 100%;
|
||||
color: #ffffff;
|
||||
text-decoration: none;
|
||||
border-radius: 4px;
|
||||
margin-top: 53px;
|
||||
}
|
||||
|
||||
@media (min-width: 420px) {
|
||||
.buttons > a {
|
||||
margin-right: 40px;
|
||||
}
|
||||
}
|
||||
|
||||
#quickstart {
|
||||
background: #ee5007;
|
||||
box-shadow: 0px 0px 2px rgba(0, 0, 0, 0.2),
|
||||
0px 1px 2px rgba(0, 0, 0, 0.1), inset 0px -1px 0px rgba(0, 0, 0, 0.2);
|
||||
border-radius: 4px;
|
||||
}
|
||||
|
||||
#download {
|
||||
border: 1px solid #8facd4;
|
||||
box-shadow: inset 0px -1px 0px rgba(0, 0, 0, 0.2);
|
||||
filter: drop-shadow(0px 0px 2px rgba(0, 0, 0, 0.2))
|
||||
drop-shadow(0px 1px 2px rgba(0, 0, 0, 0.1));
|
||||
color: #8facd4;
|
||||
}
|
||||
|
||||
footer {
|
||||
background: #e06948;
|
||||
height: 250px;
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
.sections-title {
|
||||
font-weight: 600;
|
||||
font-size: 32px;
|
||||
line-height: 50px;
|
||||
color: #0a2239;
|
||||
margin-top: 123px;
|
||||
text-align: center;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<div class="orange-line"></div>
|
||||
<header class="hero">
|
||||
<div class="overlay">
|
||||
<div class="constraint vertical">
|
||||
<div class="header">
|
||||
<div class="hero-logo">
|
||||
<img src={heroImage} alt="main logo" width="200" />
|
||||
</div>
|
||||
<div>
|
||||
<h1 class="title">
|
||||
Edge, but <span>better</span>
|
||||
</h1>
|
||||
<span class="subtitle"
|
||||
>The immutable Linux meta-distribution <br /> for edge Kubernetes</span
|
||||
>
|
||||
<div class="buttons">
|
||||
<a id="quickstart" href="/quickstart/installation/">
|
||||
Quickstart
|
||||
</a>
|
||||
<a
|
||||
id="download"
|
||||
href="https://github.com/kairos-io/provider-kairos/releases"
|
||||
>Download</a
|
||||
>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<p class="desc">
|
||||
With <span>Kairos</span> you can build immutable, bootable Kubernetes
|
||||
and OS images for your edge devices as easily as writing a Dockerfile.
|
||||
Optional P2P mesh with distributed ledger automates node bootstrapping
|
||||
and coordination. Updating nodes is as easy as CI/CD: push a new image
|
||||
to your container registry and let secure, risk-free A/B atomic upgrades
|
||||
do the rest.
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</header>
|
||||
<main class="wrapper">
|
||||
<div class="constraint vertical">
|
||||
<div class="sections-title">What makes Kairos different?</div>
|
||||
<Sections />
|
||||
</div>
|
||||
</main>
|
||||
<footer>
|
||||
<img src={footerLogo} height="122px" alt="footer logo" />
|
||||
</footer>
|
||||
</body>
|
||||
</html>
|
@ -1,190 +0,0 @@
|
||||
.section-wrapper {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
}
|
||||
|
||||
.sections {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
max-width: 1200px;
|
||||
justify-content: center;
|
||||
}
|
||||
|
||||
.sections[aria-current="horizontal"] {
|
||||
flex-direction: column;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
@media (min-width: 1024px) {
|
||||
.sections[aria-current="horizontal"] {
|
||||
flex-direction: row;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
.main-section {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
padding: 64px 48px;
|
||||
box-sizing: border-box;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
|
||||
.main-section > .sections {
|
||||
padding-bottom: 0;
|
||||
}
|
||||
|
||||
.main-section > .title {
|
||||
font-weight: 600;
|
||||
font-size: 42px;
|
||||
line-height: 52px;
|
||||
text-align: center;
|
||||
color: #161B33;
|
||||
margin: 43px 0;
|
||||
}
|
||||
|
||||
.secondary-section {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
border-bottom: 1px solid rgba(0, 0, 0, 0.1);
|
||||
padding: 32px 0;
|
||||
}
|
||||
|
||||
@media (min-width: 1024px) {
|
||||
.secondary-section {
|
||||
flex-direction: row;
|
||||
}
|
||||
}
|
||||
|
||||
.secondary-section img {
|
||||
margin-top: 80px;
|
||||
margin-bottom: 40px;
|
||||
}
|
||||
|
||||
.secondary-section:first-child {
|
||||
padding-top: 0;
|
||||
}
|
||||
|
||||
.secondary-section:last-child {
|
||||
border-bottom: 0;
|
||||
padding-bottom: 0;
|
||||
|
||||
}
|
||||
|
||||
.secondary-section > .title {
|
||||
min-width: 0px;
|
||||
width: 100%;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
justify-content: flex-start;
|
||||
font-family: 'Noto Sans Mono';
|
||||
font-weight: 700;
|
||||
font-size: 24px;
|
||||
line-height: 38px;
|
||||
color: #161B33;
|
||||
text-align: center;
|
||||
margin-bottom: 32px;
|
||||
}
|
||||
|
||||
@media (min-width: 1024px) {
|
||||
.secondary-section > .title {
|
||||
min-width: 480px;
|
||||
}
|
||||
}
|
||||
|
||||
.sections[aria-current="horizontal"] p {
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.sections[aria-current="horizontal"] p {
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.sections[aria-current="horizontal"] > .secondary-section {
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
border-bottom: 0;
|
||||
padding: 0;
|
||||
width: 100%;
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
@media (min-width: 1024px) {
|
||||
.sections[aria-current="horizontal"] > .secondary-section {
|
||||
margin: 0 24px;
|
||||
}
|
||||
}
|
||||
|
||||
.sections[aria-current="horizontal"]> .secondary-section .image-container {
|
||||
height: 100px;
|
||||
display: flex;
|
||||
justify-content: flex-end;
|
||||
}
|
||||
|
||||
.sections[aria-current="horizontal"] > .secondary-section .image-container-removeHeight {
|
||||
display: flex;
|
||||
justify-content: flex-end;
|
||||
}
|
||||
.sections[aria-current="horizontal"]>.secondary-section img {
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
.sections[aria-current="horizontal"] > .secondary-section:first-child {
|
||||
margin-left: 0;
|
||||
}
|
||||
.sections[aria-current="horizontal"] > .secondary-section:last-child {
|
||||
margin-right: 0;
|
||||
}
|
||||
|
||||
.sections[aria-current="horizontal"] > .secondary-section > .title {
|
||||
padding: 32px 12px;
|
||||
flex-grow: 1;
|
||||
width: 100%;
|
||||
min-width: auto;
|
||||
max-width: 340px;
|
||||
}
|
||||
|
||||
.sections[aria-current="horizontal"] > .secondary-section > .title > div {
|
||||
margin: 32px 0;
|
||||
}
|
||||
|
||||
.tertiary-section {
|
||||
margin-bottom: 24px;
|
||||
border-bottom: 1px solid rgba(0, 0, 0, 0.1);
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.tertiary-section:last-child {
|
||||
border-bottom: 0px;
|
||||
margin-bottom: 0px;
|
||||
}
|
||||
|
||||
.tertiary-section > .title {
|
||||
font-family: 'Noto Sans Mono';
|
||||
font-style: normal;
|
||||
font-weight: 700;
|
||||
font-size: 24px;
|
||||
line-height: 33px;
|
||||
color: #161B33;
|
||||
margin-bottom: 16px;
|
||||
}
|
||||
|
||||
.sections p {
|
||||
font-family: Noto Sans;
|
||||
font-weight: 400;
|
||||
font-size: 16px;
|
||||
line-height: 160%;
|
||||
letter-spacing: 0.01em;
|
||||
color: #344079;
|
||||
margin-top: 0;
|
||||
margin-bottom: 24px;
|
||||
}
|
||||
|
@ -1,189 +0,0 @@
|
||||
import "./Sections.css";
|
||||
import explore from "../../assets/index/explore.png";
|
||||
import github from "../../assets/index/github.png";
|
||||
import book from "../../assets/index/book.png";
|
||||
|
||||
import one from "../../assets/index/1.png";
|
||||
import two from "../../assets/index/2.png";
|
||||
import three from "../../assets/index/3.png";
|
||||
import four from "../../assets/index/4.png";
|
||||
import five from "../../assets/index/5.png";
|
||||
import six from "../../assets/index/6.png";
|
||||
import seven from "../../assets/index/7.png";
|
||||
|
||||
const MAIN_SECTIONS = [
|
||||
{
|
||||
direction: "vertical",
|
||||
sections: [
|
||||
{
|
||||
title: <>The Immutable <br/> edge factory</>,
|
||||
icon: one,
|
||||
sections: [
|
||||
{
|
||||
title: "Let's get meta:",
|
||||
description:
|
||||
"We call Kairos a meta-Linux Distribution. Why meta? Because it sits as a container layer, turning any Linux distro into an immutable system distributed via container registries. With Kairos, the OS is the container image, which is used for new installations and upgrades.",
|
||||
},
|
||||
{
|
||||
title: "Bring your own OS:",
|
||||
description:
|
||||
"The Kairos 'factory' enables you to build custom bootable-OS images for your edge devices, from your choice of OS (including openSUSE, Alpine and Ubuntu), and your choice of edge Kubernetes distribution—Kairos is totally agnostic.",
|
||||
},
|
||||
{
|
||||
title: "Repeatable, immutable:",
|
||||
description:
|
||||
"Each node boots from the same image, so no more snowflakes in your clusters, and each system is immutable—it boots in a restricted, permissionless mode, where certain paths are not writeable. For instance, after an installation it's not possible to install additional packages in the system, and any configuration change is discarded after a reboot. This dramatically reduces the attack surface and the impact of malicious actors gaining access to the device.",
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
title: <>Welcome to the <br/> self-driving edge</>,
|
||||
icon: two,
|
||||
sections: [
|
||||
{
|
||||
title: "Zero touch provisioning:",
|
||||
description:
|
||||
"Keeping simplicity while providing complex solutions is a key factor of Kairos. Onboarding of nodes can be done via QR code, manually, remotely via SSH, interactively, or completely automated with Kubernetes, with zero touch provisioning.",
|
||||
},
|
||||
{
|
||||
title: "Secure peer to peer mesh with VPN:",
|
||||
description:
|
||||
"Kairos optionally supports P2P full-mesh out of the box. New devices wake up with a shared secret and distributed ledger of other nodes and clusters to look for—they form a unified overlay network that’s E2E encrypted to discover other devices, even spanning multiple networks, to bootstrap the cluster.",
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
title: <>Containerize your <br/> lifecycle management</>,
|
||||
icon: three,
|
||||
sections: [
|
||||
{
|
||||
title: "Treat your OS just like any app:",
|
||||
description:
|
||||
"Each Kairos OS is created as easily as writing a Dockerfile—no custom recipes or arcane languages here. You can run and customize the container images locally with Docker, Podman, or your container engine of choice exactly how you do for apps already.",
|
||||
},
|
||||
{
|
||||
title: "Run your pipeline to the edge: ",
|
||||
description:
|
||||
"Your built OS is a container-based, single image that is distributed via container registries, so it plugs neatly into your existing CI/CD pipelines. It makes edge scale as repeatable and portable as driving containers. Customizing, mirroring of images, scanning vulnerabilities, gating upgrades, patching CVEs are some of the endless possibilities. Updating nodes is just as easy as selecting a new version via Kubernetes. Each node will pull the update from your repo, installing on A/B partitions for zero-risk upgrades with failover.",
|
||||
},
|
||||
{
|
||||
title: "Run K8s with K8s:",
|
||||
description:
|
||||
"Use Kubernetes management principles to manage and provision your clusters. Kairos supports automatic node provisioning via CRDs; upgrade management via Kubernetes; node repurposing and machine auto scaling capabilities; and complete configuration management via cloud-init.",
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
title: <>A community soul</>,
|
||||
icon: four,
|
||||
sections: [
|
||||
{
|
||||
title: "On the shoulders of giants:",
|
||||
description:
|
||||
"Kairos draws on the strength of the cloud-native ecosystem, not just for principles and approaches, but components. Cluster API is optionally supported as well, and can be used to manage Kubernetes clusters using native Kubernetes APIs with zero touch provisioning. ",
|
||||
},
|
||||
{
|
||||
title: "Extensively tested:",
|
||||
description:
|
||||
"We move fast, but we try not to break stuff—particularly your nodes. Every change in the Kairos codebase runs through highly engineered automated testing before release to catch bugs earlier.",
|
||||
},
|
||||
{
|
||||
title: "Designed for everyone:",
|
||||
description:
|
||||
"While Kairos has been engineered for large-scale use by DevOps and IT Engineering teams working in cloud, bare metal, edge and embedded systems environments, we welcome makers, hobbyists, and anyone in the community to participate in driving forward our vision of the immutable, decentralized, and containerized edge.",
|
||||
},
|
||||
{
|
||||
title: "Backed by Spectro Cloud:",
|
||||
description:
|
||||
<>Kairos is a vibrant, active project with time and financial backing from Spectro Cloud, a Kubernetes management platform provider with a strong commitment to the open source community. It is a silver member of the CNCF and LF Edge, a Certified Kubernetes Service Provider, and a contributor to projects such as Cluster API. Find more about Spectro Cloud <a href="https://www.spectrocloud.com/" target="_blank" rel="noopener noreferrer">here</a>.</>,
|
||||
},
|
||||
],
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
direction: "horizontal",
|
||||
sections: [
|
||||
{
|
||||
title: "Installation",
|
||||
icon: five,
|
||||
description:
|
||||
"See how to get up and running with Kairos, in less than 15 minutes!",
|
||||
},
|
||||
{
|
||||
title: "Architecture",
|
||||
icon: six,
|
||||
description:
|
||||
"Get inside Kairos, from the factory to P2P mesh capabilities.",
|
||||
},
|
||||
{
|
||||
title: "Examples",
|
||||
icon: seven,
|
||||
description:
|
||||
"Stretch your wings with best practices of common tasks after installing Kairos.",
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
title: "Join our community",
|
||||
direction: "horizontal",
|
||||
theme: "gray",
|
||||
sections: [
|
||||
{
|
||||
title: "Contribute on Github",
|
||||
icon: github,
|
||||
noHeight: true,
|
||||
iconWidth: "64",
|
||||
link: "https://github.com/kairos-io/kairos"
|
||||
},
|
||||
{
|
||||
title: "Documentation",
|
||||
icon: book,
|
||||
noHeight: true,
|
||||
iconWidth: "64",
|
||||
link: "/quickstart/"
|
||||
},
|
||||
],
|
||||
},
|
||||
];
|
||||
|
||||
export default function Sections() {
|
||||
function renderTertiarySections(section, index) {
|
||||
return (
|
||||
<div className="tertiary-section" key={index}>
|
||||
<div className="title">{section.title}</div>
|
||||
<p>{section.description}</p>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
function renderSecondarySections(section, index) {
|
||||
const SectionTitle = section.link ? "a" : "div";
|
||||
|
||||
return (
|
||||
<div className="secondary-section" key={index}>
|
||||
<SectionTitle className="title" {...(section.link ? {href: section.link} : {})}>
|
||||
<div className={`${section.noHeight ? "image-container-removeHeight" : "image-container"}`}><img src={section.icon} alt="section logo" width={section.iconWidth || "112"} /></div>
|
||||
<div>{section.title}</div>
|
||||
<p>{section.description}</p>
|
||||
</SectionTitle>
|
||||
{section.sections?.length && (
|
||||
<div>{section.sections.map(renderTertiarySections)}</div>
|
||||
)}
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
||||
function renderMainSections(section, index) {
|
||||
return (
|
||||
<div className="main-section" key={index}>
|
||||
{section.title && <div className="title">{section.title}</div>}
|
||||
<div className="sections" aria-current={section.direction}>
|
||||
{section.sections.map(renderSecondarySections)}
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
return (
|
||||
<div className="sections">{MAIN_SECTIONS.map(renderMainSections)}</div>
|
||||
);
|
||||
}
|
@ -1,7 +0,0 @@
|
||||
---
|
||||
layout: "../../layouts/docs/Layout.astro"
|
||||
title: "Advanced configuration"
|
||||
index: 1
|
||||
---
|
||||
|
||||
# Examples
|
@ -1,9 +0,0 @@
|
||||
---
|
||||
layout: "../../layouts/docs/Layout.astro"
|
||||
title: "Architecture"
|
||||
index: 1
|
||||
---
|
||||
|
||||
# Installing Kairos on bare metal, VMs...
|
||||
|
||||
## Automates, pairs, and takes over installs
|
@ -1,5 +0,0 @@
|
||||
---
|
||||
import MainLayout from "../layouts/landing/Layout.astro";
|
||||
---
|
||||
|
||||
<MainLayout />
|
@ -1,10 +0,0 @@
|
||||
---
|
||||
layout: "../../layouts/docs/Layout.astro"
|
||||
title: "Installation"
|
||||
index: 1
|
||||
---
|
||||
|
||||
# Installation
|
||||
|
||||
The provisioning of Kairos into nodes can be performed in different ways.
|
||||
This section guides you into provisioning Kairos into your nodes by use-case.
|
@ -1,9 +0,0 @@
|
||||
---
|
||||
layout: "../../layouts/docs/Layout.astro"
|
||||
title: "Quickstart"
|
||||
index: 1
|
||||
---
|
||||
|
||||
# Quickstart
|
||||
|
||||
Provisioning of Kairos into bare metal, edge, embedded devices, and cloud.
|
@ -1,7 +0,0 @@
|
||||
---
|
||||
layout: "../../layouts/docs/Layout.astro"
|
||||
title: "Reference"
|
||||
index: 1
|
||||
---
|
||||
|
||||
# Basics
|
@ -1,7 +0,0 @@
|
||||
---
|
||||
layout: "../../layouts/docs/Layout.astro"
|
||||
title: "Software Development Kit"
|
||||
index: 1
|
||||
---
|
||||
|
||||
Kairos has an internal SDK kit which enables to build extensions that allows to customize and control the OS from a unified SDK which supports multiple languages.
|
@ -1,7 +0,0 @@
|
||||
---
|
||||
layout: "../../layouts/docs/Layout.astro"
|
||||
title: "SDK"
|
||||
index: 1
|
||||
---
|
||||
|
||||
# SDK
|
@ -1,9 +0,0 @@
|
||||
---
|
||||
layout: "../../layouts/docs/Layout.astro"
|
||||
title: "Upgrade"
|
||||
index: 1
|
||||
---
|
||||
|
||||
# Installing Kairos on bare metal, VMs, ...
|
||||
|
||||
## Automates, Pairs, and takes over install
|
@ -1,312 +0,0 @@
|
||||
* {
|
||||
box-sizing: border-box;
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
/* Global focus outline reset */
|
||||
*:focus:not(:focus-visible) {
|
||||
outline: none;
|
||||
}
|
||||
|
||||
:root {
|
||||
--user-font-scale: 1rem - 16px;
|
||||
--max-width: calc(100% - 1rem);
|
||||
}
|
||||
|
||||
@media (min-width: 50em) {
|
||||
:root {
|
||||
--max-width: 46em;
|
||||
}
|
||||
}
|
||||
|
||||
body {
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
min-height: 100vh;
|
||||
font-family: var(--font-body);
|
||||
font-size: 1rem;
|
||||
font-size: clamp(0.9rem, 0.75rem + 0.375vw + var(--user-font-scale), 1rem);
|
||||
line-height: 1.5;
|
||||
max-width: 100vw;
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
nav ul {
|
||||
list-style: none;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
.content > section > * + * {
|
||||
margin-top: 1.25rem;
|
||||
}
|
||||
|
||||
.content > section > :first-child {
|
||||
margin-top: 0;
|
||||
}
|
||||
|
||||
h1,
|
||||
h2 {
|
||||
position: relative;
|
||||
}
|
||||
|
||||
:is(h2, h3):not(:first-child) {
|
||||
margin-top: 3rem;
|
||||
}
|
||||
|
||||
:is(h4, h5, h6):not(:first-child) {
|
||||
margin-top: 2rem;
|
||||
}
|
||||
|
||||
h1 {
|
||||
font-size: 3.25rem;
|
||||
font-weight: 800;
|
||||
font-style: normal;
|
||||
font-weight: 600;
|
||||
font-size: 50px;
|
||||
line-height: 75px;
|
||||
letter-spacing: -0.02em;
|
||||
color: #0D1440;
|
||||
margin: 40px 0;
|
||||
}
|
||||
|
||||
h2 {
|
||||
font-weight: 500;
|
||||
font-size: 32px;
|
||||
line-height: 32px;
|
||||
color: #0D1440;
|
||||
margin: 40px 0;
|
||||
}
|
||||
|
||||
h3 {
|
||||
font-size: 1.75rem;
|
||||
}
|
||||
|
||||
h4 {
|
||||
font-size: 1.3rem;
|
||||
}
|
||||
|
||||
h5 {
|
||||
font-size: 1rem;
|
||||
}
|
||||
|
||||
p {
|
||||
line-height: 1.65em;
|
||||
}
|
||||
|
||||
.content ul {
|
||||
line-height: 1.4em;
|
||||
}
|
||||
|
||||
p,
|
||||
.content ul {
|
||||
color: var(--theme-text-light);
|
||||
}
|
||||
|
||||
small,
|
||||
.text_small {
|
||||
font-size: 0.833rem;
|
||||
}
|
||||
|
||||
a {
|
||||
color: var(--theme-text-accent);
|
||||
font-weight: 400;
|
||||
text-underline-offset: 0.08em;
|
||||
align-items: center;
|
||||
gap: 0.5rem;
|
||||
}
|
||||
|
||||
article > section :is(ul, ol) > * + * {
|
||||
margin-top: 0.75rem;
|
||||
}
|
||||
|
||||
article > section nav :is(ul, ol) > * + * {
|
||||
margin-top: inherit;
|
||||
}
|
||||
|
||||
article > section li > :is(p, pre, blockquote):not(:first-child) {
|
||||
margin-top: 1rem;
|
||||
}
|
||||
|
||||
article > section :is(ul, ol) {
|
||||
padding-left: 1em;
|
||||
}
|
||||
|
||||
article > section nav :is(ul, ol) {
|
||||
padding-left: inherit;
|
||||
}
|
||||
|
||||
article > section nav {
|
||||
margin-top: 1rem;
|
||||
margin-bottom: 2rem;
|
||||
}
|
||||
|
||||
article > section ::marker {
|
||||
font-weight: bold;
|
||||
color: var(--theme-text-light);
|
||||
}
|
||||
|
||||
article > section iframe {
|
||||
width: 100%;
|
||||
height: auto;
|
||||
aspect-ratio: 16 / 9;
|
||||
}
|
||||
|
||||
a > code {
|
||||
position: relative;
|
||||
color: var(--theme-text-accent);
|
||||
background: transparent;
|
||||
text-underline-offset: var(--padding-block);
|
||||
}
|
||||
|
||||
a > code::before {
|
||||
content: "";
|
||||
position: absolute;
|
||||
top: 0;
|
||||
right: 0;
|
||||
bottom: 0;
|
||||
left: 0;
|
||||
display: block;
|
||||
background: var(--theme-accent);
|
||||
opacity: var(--theme-accent-opacity);
|
||||
border-radius: var(--border-radius);
|
||||
}
|
||||
|
||||
a:hover,
|
||||
a:focus {
|
||||
text-decoration: underline;
|
||||
}
|
||||
|
||||
a:focus {
|
||||
outline: 2px solid currentColor;
|
||||
outline-offset: 0.25em;
|
||||
}
|
||||
|
||||
strong {
|
||||
font-weight: 600;
|
||||
color: inherit;
|
||||
}
|
||||
|
||||
/* Supporting Content */
|
||||
|
||||
code {
|
||||
--border-radius: 3px;
|
||||
--padding-block: 0.2rem;
|
||||
--padding-inline: 0.33rem;
|
||||
|
||||
font-family: var(--font-mono);
|
||||
font-size: 0.85em;
|
||||
color: inherit;
|
||||
background-color: var(--theme-code-inline-bg);
|
||||
padding: var(--padding-block) var(--padding-inline);
|
||||
margin: calc(var(--padding-block) * -1) -0.125em;
|
||||
border-radius: var(--border-radius);
|
||||
word-break: break-word;
|
||||
}
|
||||
|
||||
pre.astro-code > code {
|
||||
all: unset;
|
||||
}
|
||||
|
||||
pre > code {
|
||||
font-size: 1em;
|
||||
}
|
||||
|
||||
table,
|
||||
pre {
|
||||
position: relative;
|
||||
--padding-block: 1rem;
|
||||
--padding-inline: 2rem;
|
||||
padding: var(--padding-block) var(--padding-inline);
|
||||
padding-right: calc(var(--padding-inline) * 2);
|
||||
margin-left: 0;
|
||||
margin-right: 0;
|
||||
font-family: var(--font-mono);
|
||||
|
||||
line-height: 1.5;
|
||||
font-size: 0.85em;
|
||||
overflow-y: hidden;
|
||||
overflow-x: auto;
|
||||
}
|
||||
|
||||
@media (min-width: 1024px) {
|
||||
table,
|
||||
pre {
|
||||
margin-left: calc(var(--padding-inline) * -1);
|
||||
margin-right: calc(var(--padding-inline) * -1);
|
||||
}
|
||||
}
|
||||
|
||||
table {
|
||||
width: 100%;
|
||||
padding: var(--padding-block) 0;
|
||||
margin: 0;
|
||||
border-collapse: collapse;
|
||||
}
|
||||
|
||||
/* Zebra striping */
|
||||
tr:nth-of-type(odd) {
|
||||
background: var(--theme-bg-hover);
|
||||
}
|
||||
th {
|
||||
background: var(--color-black);
|
||||
color: var(--theme-color);
|
||||
font-weight: bold;
|
||||
border-bottom: 1px solid #ddd;
|
||||
}
|
||||
td,
|
||||
th {
|
||||
padding: 6px;
|
||||
text-align: left;
|
||||
}
|
||||
|
||||
pre {
|
||||
background-color: var(--theme-code-bg);
|
||||
color: var(--theme-code-text);
|
||||
}
|
||||
|
||||
blockquote code {
|
||||
background-color: var(--theme-bg);
|
||||
}
|
||||
|
||||
@media (min-width: 37.75em) {
|
||||
pre {
|
||||
--padding-inline: 1.25rem;
|
||||
border-radius: 8px;
|
||||
margin-left: 0;
|
||||
margin-right: 0;
|
||||
}
|
||||
}
|
||||
|
||||
blockquote {
|
||||
margin: 2rem 0;
|
||||
padding: 1.25em 1.5rem;
|
||||
border-left: 3px solid var(--theme-text-light);
|
||||
background-color: var(--theme-bg-offset);
|
||||
border-radius: 0 0.25rem 0.25rem 0;
|
||||
line-height: 1.7;
|
||||
}
|
||||
|
||||
img {
|
||||
max-width: 100%;
|
||||
}
|
||||
|
||||
button {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-items: center;
|
||||
gap: 0.25em;
|
||||
padding: 0.33em 0.67em;
|
||||
border: 0;
|
||||
background: var(--theme-bg);
|
||||
display: flex;
|
||||
font-size: 1rem;
|
||||
align-items: center;
|
||||
gap: 0.25em;
|
||||
border-radius: 99em;
|
||||
color: var(--theme-text);
|
||||
background-color: var(--theme-bg);
|
||||
}
|
||||
|
||||
h2:target {
|
||||
scroll-margin: calc(var(--theme-sidebar-offset, 5rem) + 2rem) 0 2rem;
|
||||
}
|
@ -1,91 +0,0 @@
|
||||
:root {
|
||||
--font-mono: Noto Sans;
|
||||
|
||||
--color-base-white: 0, 0%;
|
||||
--color-base-black: 240, 100%;
|
||||
--color-base-gray: 215, 14%;
|
||||
--color-base-blue: 212, 100%;
|
||||
--color-base-blue-dark: 212, 72%;
|
||||
--color-base-green: 158, 79%;
|
||||
--color-base-orange: 22, 100%;
|
||||
--color-base-purple: 269, 79%;
|
||||
--color-base-red: 351, 100%;
|
||||
--color-base-yellow: 41, 100%;
|
||||
|
||||
--color-gray-5: var(--color-base-gray), 5%;
|
||||
--color-gray-10: var(--color-base-gray), 10%;
|
||||
--color-gray-20: var(--color-base-gray), 20%;
|
||||
--color-gray-30: var(--color-base-gray), 30%;
|
||||
--color-gray-40: #0D1440;
|
||||
--color-gray-50: var(--color-base-gray), 50%;
|
||||
--color-gray-60: var(--color-base-gray), 60%;
|
||||
--color-gray-70: var(--color-base-gray), 70%;
|
||||
--color-gray-80: var(--color-base-gray), 80%;
|
||||
--color-gray-90: var(--color-base-gray), 90%;
|
||||
--color-gray-95: var(--color-base-gray), 95%;
|
||||
|
||||
--color-blue: #409BF6;
|
||||
--color-blue-dark: var(--color-base-blue-dark), 39%;
|
||||
--color-green: var(--color-base-green), 42%;
|
||||
--color-orange: var(--color-base-orange), 50%;
|
||||
--color-purple: var(--color-base-purple), 54%;
|
||||
--color-red: var(--color-base-red), 54%;
|
||||
--color-yellow: var(--color-base-yellow), 59%;
|
||||
}
|
||||
|
||||
:root {
|
||||
color-scheme: light;
|
||||
--theme-accent: hsla(var(--color-blue), 1);
|
||||
--theme-text-accent: #409BF6;
|
||||
--theme-accent-opacity: 0.15;
|
||||
--theme-divider: hsla(var(--color-gray-95), 1);
|
||||
--theme-text: hsla(var(--color-gray-10), 1);
|
||||
--theme-text-light: #0D1440;
|
||||
/* @@@: not used anywhere */
|
||||
--theme-text-lighter: hsla(var(--color-gray-80), 1);
|
||||
--theme-bg: hsla(var(--color-base-white), 100%, 1);
|
||||
--theme-bg-hover: hsla(var(--color-gray-95), 1);
|
||||
--theme-bg-offset: hsla(var(--color-gray-90), 1);
|
||||
--theme-bg-accent: hsla(var(--color-blue), var(--theme-accent-opacity));
|
||||
--theme-code-inline-bg: hsla(var(--color-gray-95), 1);
|
||||
--theme-code-inline-text: var(--theme-text);
|
||||
--theme-code-bg: hsla(217, 19%, 27%, 1);
|
||||
--theme-code-text: hsla(var(--color-gray-95), 1);
|
||||
--theme-navbar-bg: hsla(var(--color-base-white), 100%, 1);
|
||||
--theme-navbar-height: 6rem;
|
||||
--theme-selection-color: hsla(var(--color-white), 1);
|
||||
--theme-selection-bg: hsla(var(--color-orange), var(--theme-accent-opacity));
|
||||
}
|
||||
|
||||
body {
|
||||
background: var(--theme-bg);
|
||||
color: var(--theme-text);
|
||||
}
|
||||
|
||||
:root.theme-dark {
|
||||
color-scheme: dark;
|
||||
--theme-accent-opacity: 0.15;
|
||||
--theme-accent: hsla(var(--color-blue), 1);
|
||||
--theme-text-accent: hsla(var(--color-blue), 1);
|
||||
--theme-divider: hsla(var(--color-gray-10), 1);
|
||||
--theme-text: hsla(var(--color-gray-90), 1);
|
||||
--theme-text-light: hsla(var(--color-gray-80), 1);
|
||||
|
||||
/* @@@: not used anywhere */
|
||||
--theme-text-lighter: hsla(var(--color-gray-40), 1);
|
||||
--theme-bg: hsla(215, 28%, 17%, 1);
|
||||
--theme-bg-hover: hsla(var(--color-gray-40), 1);
|
||||
--theme-bg-offset: hsla(var(--color-gray-5), 1);
|
||||
--theme-code-inline-bg: hsla(var(--color-gray-10), 1);
|
||||
--theme-code-inline-text: hsla(var(--color-base-white), 100%, 1);
|
||||
--theme-code-bg: hsla(var(--color-gray-5), 1);
|
||||
--theme-code-text: hsla(var(--color-base-white), 100%, 1);
|
||||
--theme-navbar-bg: hsla(215, 28%, 17%, 1);
|
||||
--theme-selection-color: hsla(var(--color-base-orange), 100%, 1);
|
||||
--theme-selection-bg: hsla(var(--color-purple), var(--theme-accent-opacity));
|
||||
}
|
||||
|
||||
::selection {
|
||||
color: var(--theme-selection-color);
|
||||
background-color: var(--theme-selection-bg);
|
||||
}
|
Before Width: | Height: | Size: 14 KiB After Width: | Height: | Size: 14 KiB |
Before Width: | Height: | Size: 6.2 KiB After Width: | Height: | Size: 6.2 KiB |
Before Width: | Height: | Size: 1.3 KiB After Width: | Height: | Size: 1.3 KiB |
Before Width: | Height: | Size: 2.0 KiB After Width: | Height: | Size: 2.0 KiB |
Before Width: | Height: | Size: 15 KiB After Width: | Height: | Size: 15 KiB |
Before Width: | Height: | Size: 7.2 KiB After Width: | Height: | Size: 7.2 KiB |