- {icon ? (
-

- ) : (
-
-
-
- )}
-
-
+
+ {
+ icon ? (
+

+ ) : (
+
+
+
+ )
+ }
+
+
{name}
-
- {compact && (
-
-
- {stars}
-
- )}
-
- {!compact && (
- <>
- {description && {description}
}
-
+ {
+ compact && (
+
- {stars}
- {repo && (
- <>
- ·
-
- >
- )}
-
- >
- )}
+ {stars}
+
+ )
+ }
+
+ {
+ !compact && (
+ <>
+ {description &&
{description}
}
+
+
+ {stars}
+ {repo && (
+ <>
+ ·
+
+ >
+ )}
+
+ >
+ )
+ }
diff --git a/src/components/SectionHeader.astro b/src/components/SectionHeader.astro
--- a/src/components/SectionHeader.astro
+++ b/src/components/SectionHeader.astro
@@ -10,9 +10,14 @@ ---
diff --git a/src/components/SocialLinks.astro b/src/components/SocialLinks.astro
--- a/src/components/SocialLinks.astro
+++ b/src/components/SocialLinks.astro
@@ -14,12 +14,32 @@ }
const defaultLinks: SocialLink[] = [
{ href: "/feed.xml", label: "rss feed", icon: "fa7-solid:rss" },
- { href: "https://github.com/isabelroses", label: "GitHub", icon: "fa7-brands:github" },
- { href: "https://akko.isabelroses.com/isabel", label: "mastodon", icon: "fa7-brands:mastodon" },
- { href: "https://bsky.app/profile/did:plc:qxichs7jsycphrsmbujwqbfb", label: "bluesky", icon: "fa7-brands:bluesky" },
+ {
+ href: "https://github.com/isabelroses",
+ label: "GitHub",
+ icon: "fa7-brands:github",
+ },
+ {
+ href: "https://akko.isabelroses.com/isabel",
+ label: "mastodon",
+ icon: "fa7-brands:mastodon",
+ },
+ {
+ href: "https://bsky.app/profile/did:plc:qxichs7jsycphrsmbujwqbfb",
+ label: "bluesky",
+ icon: "fa7-brands:bluesky",
+ },
// { href: "/api/discord", label: "Discord", icon: "fa7-brands:discord" },
- { href: "mailto:isabel@isabelroses.com", label: "email", icon: "fa7-solid:envelope" },
- { href: "https://www.twitch.tv/isabelrosess", label: "Twitch", icon: "fa7-brands:twitch" },
+ {
+ href: "mailto:isabel@isabelroses.com",
+ label: "email",
+ icon: "fa7-solid:envelope",
+ },
+ {
+ href: "https://www.twitch.tv/isabelrosess",
+ label: "Twitch",
+ icon: "fa7-brands:twitch",
+ },
{ href: "https://ko-fi.com/isabelroses", label: "Ko-fi", svg: "kofi" },
];
diff --git a/src/components/ThemeSwitcher.astro b/src/components/ThemeSwitcher.astro
--- a/src/components/ThemeSwitcher.astro
+++ b/src/components/ThemeSwitcher.astro
@@ -15,28 +15,52 @@
-
diff --git a/src/content.config.ts b/src/content.config.ts
--- a/src/content.config.ts
+++ b/src/content.config.ts
@@ -1,6 +1,7 @@
import { glob, type Loader } from "astro/loaders";
-import { defineCollection, z } from "astro:content";
+import { defineCollection } from "astro:content";
import { readingTime } from "reading-time-estimator";
+import { z } from "astro/zod";
const blog = z.object({
title: z.string(),
@@ -17,7 +18,7 @@ });
type BlogPost = z.infer
;
-const customLoader: Loader = {
+const customLoader = {
...glob,
name: "customLoader",
load: async (loaderParams) => {
@@ -29,25 +30,19 @@ pattern: "**/*.md",
});
await baseLoader.load.call(this, loaderParams);
- let items = [...store.values()];
+ const items = [...store.values()];
store.clear();
- const sorted = items.sort(
- (a, b) =>
- new Date((b.data as BlogPost).date).getTime() -
- new Date((a.data as BlogPost).date).getTime(),
- );
+ // we used to sort here but getCollection is none-deterministic so our sort
+ // order became jumbled as of astro v6 so we cannot do that anymore
items.forEach((item) => {
- const readTime = readingTime(item.body ?? "", 200);
+ const readTime = readingTime(item.body ?? "");
item.data.readTime = readTime.minutes;
- });
-
- sorted.forEach((item) => {
store.set({ ...item });
});
},
-};
+} satisfies Loader;
const blogCollection = defineCollection({
loader: customLoader,
diff --git a/src/content/nix-pds-guide.md b/src/content/nix-pds-guide.md
--- a/src/content/nix-pds-guide.md
+++ b/src/content/nix-pds-guide.md
@@ -6,6 +6,7 @@ updated: 2025-12-09
tags:
- guide
- nix
+ - nixos
---
## Introduction
diff --git a/src/lib/consts.ts b/src/lib/consts.ts
--- a/src/lib/consts.ts
+++ b/src/lib/consts.ts
@@ -51,7 +51,7 @@ href: null,
repo: "https://github.com/charm-community/freeze.nvim",
stars: 84,
},
-{
+ {
name: "my websiteite",
description: "The site that you're currently on.",
icon: null,
@@ -104,7 +104,7 @@ },
{
name: "rooot",
link: "https://rooot.gay",
- image: "rooot.gif"
+ image: "rooot.gif",
},
{
name: "autumn",
diff --git a/src/pages/blog/[...slug].astro b/src/pages/blog/[...slug].astro
--- a/src/pages/blog/[...slug].astro
+++ b/src/pages/blog/[...slug].astro
@@ -7,9 +7,9 @@ import BackLink from "@components/BackLink.astro";
import Tag from "@components/Tag.astro";
export async function getStaticPaths() {
- const posts = await getCollection("blog", ({ data }) => {
+ const posts = (await getCollection("blog", ({ data }) => {
return !data.draft && !data.archived;
- });
+ })).sort((a, b) => new Date(b.data.date).getTime() - new Date(a.data.date).getTime());
return posts.map((post, index) => ({
params: { slug: post.id },
@@ -42,31 +42,34 @@
{post.data.title}
·
{post.data.readTime} min read
- {post.data.updated && (
- <>
- ·
-
- updated {post.data.updated.toLocaleDateString("en-GB", {
- day: "numeric",
- month: "short",
- year: "numeric",
- })}
-
- >
- )}
+ {
+ post.data.updated && (
+ <>
+ ·
+
+ updated{" "}
+ {post.data.updated.toLocaleDateString("en-GB", {
+ day: "numeric",
+ month: "short",
+ year: "numeric",
+ })}
+
+ >
+ )
+ }
- {post.data.tags.map((tag: string) => (
-
- ))}
+ {post.data.tags.map((tag: string) => )}
@@ -100,39 +103,51 @@ id="copy-link"
class="share-icon cursor-pointer relative"
aria-label="Copy link"
>
-
-
+
+
-