6 Commits

Author SHA1 Message Date
697ec596aa feat: release 0.1.0
All checks were successful
release-image-harbor / build (push) Successful in 38s
test-build / build (push) Successful in 51s
release-image-gitea / build (push) Successful in 51s
release-image-gitea / release (push) Successful in 1m30s
release-image-harbor / release (push) Successful in 4m29s
renovate / renovate (push) Successful in 1m17s
2026-02-08 16:25:18 -06:00
48c3fabb0a feat: add content 2026-02-08 16:24:54 -06:00
a5ef209186 feat: update index page 2026-02-08 15:55:50 -06:00
337f94de8b feat: update styling 2026-02-08 15:41:11 -06:00
2c66f054ac feat: release 0.0.12
All checks were successful
test-build / build (push) Successful in 58s
renovate / renovate (push) Successful in 1m23s
2026-02-08 15:10:30 -06:00
f4203df217 feat: replace theme with rapide 2026-02-08 15:09:55 -06:00
17 changed files with 183 additions and 89 deletions

View File

@@ -28,7 +28,7 @@ ENV HOST=0.0.0.0
ENV SITE_URL=https://docs.alexlebens.dev ENV SITE_URL=https://docs.alexlebens.dev
ENV PORT=4321 ENV PORT=4321
LABEL version="0.0.11" LABEL version="0.1.0"
LABEL description="Astro based documentation website" LABEL description="Astro based documentation website"
EXPOSE $PORT EXPOSE $PORT

View File

@@ -1,4 +1,4 @@
# Starlight Starter Kit: Basics # Starlight
[![Built with Starlight](https://astro.badg.es/v2/built-with-starlight/tiny.svg)](https://starlight.astro.build) [![Built with Starlight](https://astro.badg.es/v2/built-with-starlight/tiny.svg)](https://starlight.astro.build)
@@ -6,8 +6,6 @@
pnpm create astro@latest -- --template starlight pnpm create astro@latest -- --template starlight
``` ```
> 🧑‍🚀 **Seasoned astronaut?** Delete this file. Have fun!
## 🚀 Project Structure ## 🚀 Project Structure
Inside of your Astro + Starlight project, you'll see the following folders and files: Inside of your Astro + Starlight project, you'll see the following folders and files:
@@ -43,7 +41,3 @@ All commands are run from the root of the project, from a terminal:
| `pnpm preview` | Preview your build locally, before deploying | | `pnpm preview` | Preview your build locally, before deploying |
| `pnpm astro ...` | Run CLI commands like `astro add`, `astro check` | | `pnpm astro ...` | Run CLI commands like `astro add`, `astro check` |
| `pnpm astro -- --help` | Get help using the Astro CLI | | `pnpm astro -- --help` | Get help using the Astro CLI |
## 👀 Want to learn more?
Check out [Starlights docs](https://starlight.astro.build/), read [the Astro documentation](https://docs.astro.build), or jump into the [Astro Discord server](https://astro.build/chat).

View File

@@ -4,7 +4,7 @@ import { defineConfig } from "astro/config";
import node from "@astrojs/node"; import node from "@astrojs/node";
import tailwindcss from "@tailwindcss/vite"; import tailwindcss from "@tailwindcss/vite";
import starlight from "@astrojs/starlight"; import starlight from "@astrojs/starlight";
import catppuccin from "@catppuccin/starlight"; import starlightThemeRapide from 'starlight-theme-rapide'
const getSiteURL = () => { const getSiteURL = () => {
if (process.env.SITE_URL) { if (process.env.SITE_URL) {
@@ -20,32 +20,33 @@ export default defineConfig({
integrations: [ integrations: [
tailwindcss(), tailwindcss(),
starlight({ starlight({
title: "My Docs", title: "Alex Lebens Docs",
customCss: [
'./src/styles/custom.css',
],
social: [ social: [
{ {
icon: "github", icon: "external",
label: "GitHub", label: "Homepage",
href: "https://github.com/withastro/starlight", href: "https://www.alexlebens.dev",
}, },
], ],
plugins: [ plugins: [
catppuccin({ starlightThemeRapide()
dark: { flavor: "macchiato", accent: "sapphire" },
light: { flavor: "latte", accent: "sky" }
})
], ],
sidebar: [ sidebar: [
{
label: "Guides",
items: [
// Each item here is one entry in the navigation menu.
{ label: "Example Guide", slug: "guides/example" },
],
},
{ {
label: "Reference", label: "Reference",
autogenerate: { directory: "reference" }, autogenerate: { directory: "reference" },
}, },
{
label: "Guides",
autogenerate: { directory: "guides" },
},
{
label: "Applications",
autogenerate: { directory: "applications" },
},
], ],
}), }),
], ],

View File

@@ -1,7 +1,7 @@
{ {
"name": "site-documentation", "name": "site-documentation",
"type": "module", "type": "module",
"version": "0.0.11", "version": "0.1.0",
"scripts": { "scripts": {
"dev": "astro dev", "dev": "astro dev",
"build": "astro build", "build": "astro build",
@@ -15,13 +15,13 @@
"@astrojs/mdx": "^4.3.13", "@astrojs/mdx": "^4.3.13",
"@astrojs/node": "^9.5.2", "@astrojs/node": "^9.5.2",
"@astrojs/starlight": "^0.37.6", "@astrojs/starlight": "^0.37.6",
"@catppuccin/starlight": "^1.1.1",
"@tailwindcss/postcss": "^4.1.18", "@tailwindcss/postcss": "^4.1.18",
"@tailwindcss/vite": "^4.1.18", "@tailwindcss/vite": "^4.1.18",
"astro": "^5.17.1", "astro": "^5.17.1",
"motion": "^12.33.0", "motion": "^12.33.0",
"sanitize-html": "^2.17.0", "sanitize-html": "^2.17.0",
"sharp": "^0.34.5", "sharp": "^0.34.5",
"starlight-theme-rapide": "^0.5.2",
"tailwindcss": "^4.1.18" "tailwindcss": "^4.1.18"
}, },
"devDependencies": { "devDependencies": {

27
pnpm-lock.yaml generated
View File

@@ -17,9 +17,6 @@ importers:
'@astrojs/starlight': '@astrojs/starlight':
specifier: ^0.37.6 specifier: ^0.37.6
version: 0.37.6(astro@5.17.1(@types/node@25.0.3)(jiti@2.6.1)(lightningcss@1.30.2)(rollup@4.57.1)(typescript@5.9.2)) version: 0.37.6(astro@5.17.1(@types/node@25.0.3)(jiti@2.6.1)(lightningcss@1.30.2)(rollup@4.57.1)(typescript@5.9.2))
'@catppuccin/starlight':
specifier: ^1.1.1
version: 1.1.1(@astrojs/starlight@0.37.6(astro@5.17.1(@types/node@25.0.3)(jiti@2.6.1)(lightningcss@1.30.2)(rollup@4.57.1)(typescript@5.9.2)))(astro@5.17.1(@types/node@25.0.3)(jiti@2.6.1)(lightningcss@1.30.2)(rollup@4.57.1)(typescript@5.9.2))
'@tailwindcss/postcss': '@tailwindcss/postcss':
specifier: ^4.1.18 specifier: ^4.1.18
version: 4.1.18 version: 4.1.18
@@ -38,6 +35,9 @@ importers:
sharp: sharp:
specifier: ^0.34.5 specifier: ^0.34.5
version: 0.34.5 version: 0.34.5
starlight-theme-rapide:
specifier: ^0.5.2
version: 0.5.2(@astrojs/starlight@0.37.6(astro@5.17.1(@types/node@25.0.3)(jiti@2.6.1)(lightningcss@1.30.2)(rollup@4.57.1)(typescript@5.9.2)))
tailwindcss: tailwindcss:
specifier: ^4.1.18 specifier: ^4.1.18
version: 4.1.18 version: 4.1.18
@@ -137,12 +137,6 @@ packages:
resolution: {integrity: sha512-VERIM64vtTP1C4mxQ5thVT9fK0apjPFobqybMtA1UdUujWka24ERHbRHFGmpbbhp73MhV+KSsHQH9C6uOTdEQA==} resolution: {integrity: sha512-VERIM64vtTP1C4mxQ5thVT9fK0apjPFobqybMtA1UdUujWka24ERHbRHFGmpbbhp73MhV+KSsHQH9C6uOTdEQA==}
engines: {node: '>=18'} engines: {node: '>=18'}
'@catppuccin/starlight@1.1.1':
resolution: {integrity: sha512-iyI/gdGfqREetGti3O11l7iMLCmt0LRSbIis8ySlZo8hqb749KyMmisO/9kqBvk2oFKw9hGNDbutcNxKSI2spg==}
peerDependencies:
'@astrojs/starlight': '>=0.34'
astro: ^5.0.0
'@ctrl/tinycolor@4.2.0': '@ctrl/tinycolor@4.2.0':
resolution: {integrity: sha512-kzyuwOAQnXJNLS9PSyrk0CWk35nWJW/zl/6KvnTBMFK65gm7U1/Z5BqjxeapjZCIhQcM/DsrEmcbRwDyXyXK4A==} resolution: {integrity: sha512-kzyuwOAQnXJNLS9PSyrk0CWk35nWJW/zl/6KvnTBMFK65gm7U1/Z5BqjxeapjZCIhQcM/DsrEmcbRwDyXyXK4A==}
engines: {node: '>=14'} engines: {node: '>=14'}
@@ -2412,6 +2406,12 @@ packages:
space-separated-tokens@2.0.2: space-separated-tokens@2.0.2:
resolution: {integrity: sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==} resolution: {integrity: sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==}
starlight-theme-rapide@0.5.2:
resolution: {integrity: sha512-4kNJutt0/3E0rjZvG9hvKeTTHGOHC97t2ZQDwDcokTM25yLgxavFu7BCm2Dm2UTw7fJpRXpu4gUWJ9xAOBmNww==}
engines: {node: '>=18'}
peerDependencies:
'@astrojs/starlight': '>=0.34.0'
statuses@2.0.2: statuses@2.0.2:
resolution: {integrity: sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw==} resolution: {integrity: sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw==}
engines: {node: '>= 0.8'} engines: {node: '>= 0.8'}
@@ -2901,11 +2901,6 @@ snapshots:
dependencies: dependencies:
fontkitten: 1.0.2 fontkitten: 1.0.2
'@catppuccin/starlight@1.1.1(@astrojs/starlight@0.37.6(astro@5.17.1(@types/node@25.0.3)(jiti@2.6.1)(lightningcss@1.30.2)(rollup@4.57.1)(typescript@5.9.2)))(astro@5.17.1(@types/node@25.0.3)(jiti@2.6.1)(lightningcss@1.30.2)(rollup@4.57.1)(typescript@5.9.2))':
dependencies:
'@astrojs/starlight': 0.37.6(astro@5.17.1(@types/node@25.0.3)(jiti@2.6.1)(lightningcss@1.30.2)(rollup@4.57.1)(typescript@5.9.2))
astro: 5.17.1(@types/node@25.0.3)(jiti@2.6.1)(lightningcss@1.30.2)(rollup@4.57.1)(typescript@5.9.2)
'@ctrl/tinycolor@4.2.0': {} '@ctrl/tinycolor@4.2.0': {}
'@emnapi/runtime@1.8.1': '@emnapi/runtime@1.8.1':
@@ -5585,6 +5580,10 @@ snapshots:
space-separated-tokens@2.0.2: {} space-separated-tokens@2.0.2: {}
starlight-theme-rapide@0.5.2(@astrojs/starlight@0.37.6(astro@5.17.1(@types/node@25.0.3)(jiti@2.6.1)(lightningcss@1.30.2)(rollup@4.57.1)(typescript@5.9.2))):
dependencies:
'@astrojs/starlight': 0.37.6(astro@5.17.1(@types/node@25.0.3)(jiti@2.6.1)(lightningcss@1.30.2)(rollup@4.57.1)(typescript@5.9.2))
statuses@2.0.2: {} statuses@2.0.2: {}
stream-replace-string@2.0.0: {} stream-replace-string@2.0.0: {}

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 696 B

After

Width:  |  Height:  |  Size: 9.9 KiB

BIN
public/favicon_icon.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 98 KiB

1
public/favicon_icon.svg Normal file

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 9.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 96 KiB

View File

@@ -1,11 +0,0 @@
---
title: Example Guide
description: A guide in my new Starlight docs site.
---
Guides lead a user through a specific task they want to accomplish, often with a sequence of steps.
Writing a good guide requires thinking about what your users are trying to do.
## Further reading
- Read [about how-to guides](https://diataxis.fr/how-to-guides/) in the Diátaxis framework

View File

@@ -0,0 +1,75 @@
---
title: Talos Upgrade
description: Steps followed for the v1.12.0 upgrade process
---
The upgrade to this version was more extension as there have been migrations to using configuration documents. This required rewriting the configuration document to a series of patches and provide a deterministic generation command for the different host types. In addition there was also a change to storage layout to separate ceph, local-path, and ephemeral storage on the NUC hosts.
## Preparation
The NUC hosts are to be wiped since because of the storage reconfiguration. For the RPIs only the first command with proper image was needed. The new configuration format could be applied later. Both the node and the disks have to be removed.
The following command is used to upgrade the image. This was first to ensure the boot after wipe would still be v1.12.0 to use the updated configuration documents.
```bash
talosctl upgrade --nodes 10.232.1.23 --image factory.talos.dev/metal-installer/495176274ce8f9e87ed052dbc285c67b2a0ed7c5a6212f5c4d086e1a9a1cf614:v1.12.0
```
Wipe command.
```bash
talosctl reset --system-labels-to-wipe EPHEMERAL,STATE --reboot -n 10.232.1.23
```
## Remove old references
Remove the node from the cluster.
```bash
kubectl delete node talos-9vs-6hh
```
Exec into the rook-ceph-tools container in order to remove the disk from the cluster.
```bash
kubectl -n rook-ceph exec -it $(kubectl -n rook-ceph get pod -l "app=rook-ceph-tools" -o jsonpath='{.items\[\*].metadata.name}') -- bash
```
Inside the rook-ceph-tools container remove the OSD/disk and the node:
```bash
ceph osd tree
```
```bash
ceph osd out 0
```
```bash
ceph osd purge 0 --yes-i-really-mean-it
```
```bash
ceph osd crush remove talos-9vs-6hh
```
# Apply new configuration
The wiped node should now be in maintenance mode and ready to be configured. Use the generate command in the README of the talos-config repo to make the configuration to be supplied.
```bash
talosctl apply-config -f generated/worker-nuc.yaml -n 10.232.1.23 --insecure
```
Add the required labels if Talos does not add them:
```yaml
node-role.kubernetes.io/bgp: '65020'
node-role.kubernetes.io/local-storage-node: local-storage-node
node-role.kubernetes.io/rook-osd-node: rook-osd-node
```
## Verification
Verify the disks have been created:
```bash
talosctl get disks -n 10.232.1.23
```
Verify the mount paths and volumes are created:
```bash
talosctl -n 10.232.1.23 ls /var/mnt
```
```bash
talosctl -n 10.232.1.23 get volumestatuses
```

View File

@@ -1,36 +1,30 @@
--- ---
title: Welcome to Starlight title: Documentation for my Homelab
description: Get started building your docs site with Starlight. description: Guides and reference for my homelab infrastructure.
template: splash template: splash
hero: hero:
tagline: Congrats on setting up a new Starlight project! tagline: Guides and reference for my homelab infrastructure.
image: image:
file: ../../assets/houston.webp file: ../../assets/autumn_mountain.png
actions: actions:
- text: Example Guide - text: Introduction
link: /guides/example/ link: /reference/introduction/
icon: right-arrow icon: right-arrow
- text: Read the Starlight docs
link: https://starlight.astro.build
icon: external
variant: minimal
--- ---
import { Card, CardGrid } from '@astrojs/starlight/components'; import { Card, CardGrid, LinkCard } from '@astrojs/starlight/components';
## Next steps ## Hightlights
<CardGrid stagger> <CardGrid stagger>
<Card title="Update content" icon="pencil"> <LinkCard
Edit `src/content/docs/index.mdx` to see this page change. title="Homepage"
</Card> description="Visit my homepage to see what I'm up to and learn more about me."
<Card title="Add new content" icon="add-document"> href="https://www.alexlebens.dev"
Add Markdown or MDX files to `src/content/docs` to create new pages. ></LinkCard>
</Card> <LinkCard
<Card title="Configure your site" icon="setting"> title="Read the Starlight docs"
Edit your `sidebar` and other config in `astro.config.mjs`. description="This site is built with Starlight, the Astro documentation theme. Check out the docs to learn more."
</Card> href="https://starlight.astro.build/"
<Card title="Read the docs" icon="open-book"> ></LinkCard>
Learn more in [the Starlight Docs](https://starlight.astro.build/).
</Card>
</CardGrid> </CardGrid>

View File

@@ -1,11 +0,0 @@
---
title: Example Reference
description: A reference page in my new Starlight docs site.
---
Reference pages are ideal for outlining how things work in terse and clear terms.
Less concerned with telling a story or addressing a specific use case, they should give a comprehensive outline of what you're documenting.
## Further reading
- Read [about reference](https://diataxis.fr/reference/) in the Diátaxis framework

View File

@@ -0,0 +1,16 @@
---
title: Introduction
description: Overiew of the homelab
sidebar:
order: 1
---
Overview of the homelab.
# Hardware
Currently using a mix of RPIs, Intel based NUCs, Synology NAS, and Ubiquity networking.
# Software
Kubernetes for the main cluster. Docker managed by Komodo for the single hosts.

34
src/styles/custom.css Normal file
View File

@@ -0,0 +1,34 @@
@import 'tailwindcss';
@plugin '@tailwindcss/typography';
/* Custom colors */
@theme {
--color-midnight: #0c354d;
--color-turquoise: #0da797;
--color-steel: #4682b4;
--color-bermuda: #7fbab4;
--color-desert: #f9deb2;
--color-bronze: #9e7f5e;
--color-gitea-primary: #609926;
--color-gitea-secondary: #4c7a33;
}
@layer starlight, rapide, overrides;
@layer overrides {
:root {
--sl-color-accent-high: var(--color-steel);
--sl-color-accent-high: var(--color-steel);
--sl-color-accent-low: var(--color-bermuda);
}
:root[data-theme='light'] {
--sl-color-accent: var(--color-steel);
--sl-color-accent-high: var(--color-steel);
--sl-color-accent-low: var(--color-turquoise);
}
.site-title:where(.astro-gmuhlsjs) {
color: var(--color-turquoise);
}
}

View File

@@ -1,7 +1,9 @@
/** @type {import('tailwindcss').Config} */ /** @type {import('tailwindcss').Config} */
module.exports = { module.exports = {
content: ['./src/**/*.{astro,html,js,jsx,md,mdx,svelte,ts,tsx,vue}', '*.{js,ts,jsx,tsx,mdx}'], content: ['./src/**/*.{astro,html,js,jsx,md,mdx,svelte,ts,tsx,vue}', '*.{js,ts,jsx,tsx,mdx}'],
darkMode: 'class', darkMode: ['class', '[data-theme="dark"]'],
theme: {}, theme: {
extend: {},
},
plugins: [require('@tailwindcss/typography')], plugins: [require('@tailwindcss/typography')],
}; };