diff --git a/src/components/Navbar.astro b/src/components/Navbar.astro
index 3f7f8b51..dacbeaa5 100644
--- a/src/components/Navbar.astro
+++ b/src/components/Navbar.astro
@@ -6,19 +6,22 @@ import DrawerToggler from "./DrawerToggler.astro";
import HorizontalContainer from "./HorizontalContainer.astro";
import ThemeSwitcher from "./ThemeSwitcher.astro";
import Dropdown from "./Dropdown.astro";
-import { getCollection } from "astro:content";
+import {
+ getConceptPagesAlphabetical,
+ getStartPagesByOrderParam,
+} from "../content/collections";
import { conceptPagePath, startPagePath } from "../lib/utils";
import Drawer from "./Drawer.astro";
const { title, githubUrl, navbarLinks } = site;
-const startPages = (await getCollection("start")).map(
+const startPages = (await getStartPagesByOrderParam()).map(
({ slug, data: { title } }) => {
return { title, href: startPagePath(slug) };
},
);
-const conceptPages = (await getCollection("concepts")).map(
+const conceptPages = (await getConceptPagesAlphabetical()).map(
({ slug, data: { title } }) => {
return { title, href: conceptPagePath(slug) };
},
diff --git a/src/components/Pagination.astro b/src/components/Pagination.astro
index ea0e0ade..5106655e 100644
--- a/src/components/Pagination.astro
+++ b/src/components/Pagination.astro
@@ -1,7 +1,7 @@
---
import Link from "./Link.astro";
-import { getCollection } from "astro:content";
import { startPagePath } from "../lib/utils";
+import { getStartPagesByOrderParam } from "../content/collections";
type Props = {
order: number;
@@ -9,7 +9,8 @@ type Props = {
const { order } = Astro.props;
-const startPages = await getCollection("start");
+const startPages = await getStartPagesByOrderParam();
+
const previousPage = startPages.find(
({ data: { order: pageOrder } }) => pageOrder === order - 1,
);
diff --git a/src/components/mdx/Languages.astro b/src/components/mdx/Languages.astro
index 1531c545..ad7e386f 100644
--- a/src/components/mdx/Languages.astro
+++ b/src/components/mdx/Languages.astro
@@ -17,7 +17,7 @@ const { languages } = site;
diff --git a/src/content/collections.ts b/src/content/collections.ts
new file mode 100644
index 00000000..c145d75c
--- /dev/null
+++ b/src/content/collections.ts
@@ -0,0 +1,12 @@
+import { getCollection } from "astro:content";
+
+export const getStartPagesByOrderParam = async () => {
+ return (await getCollection("start")).sort(
+ ({ data: { order: orderA } }, { data: { order: orderB } }) =>
+ orderA - orderB,
+ );
+};
+
+export const getConceptPagesAlphabetical = () => {
+ return getCollection("concepts");
+};
diff --git a/src/pages/concepts/[slug].astro b/src/pages/concepts/[slug].astro
index 642c618c..fd4fdf85 100644
--- a/src/pages/concepts/[slug].astro
+++ b/src/pages/concepts/[slug].astro
@@ -1,6 +1,5 @@
---
import type { GetStaticPaths } from "astro";
-import { getCollection } from "astro:content";
import Admonition from "../../components/mdx/Admonition.astro";
import NixStorePath from "../../components/mdx/NixStorePath.astro";
import Layout from "../../layouts/Layout.astro";
@@ -16,11 +15,10 @@ import A from "../../components/mdx/A.astro";
import H2 from "../../components/mdx/H2.astro";
import H3 from "../../components/mdx/H3.astro";
import H4 from "../../components/mdx/H4.astro";
+import { getConceptPagesAlphabetical } from "../../content/collections";
export const getStaticPaths = (async () => {
- const conceptPages = await getCollection("concepts");
-
- return conceptPages.map((page) => ({
+ return (await getConceptPagesAlphabetical()).map((page) => ({
params: { slug: page.slug },
props: { page },
}));
@@ -33,7 +31,7 @@ const {
const { Content } = await page.render();
const relatedConceptPages: { title: string; href: string }[] = (
- await getCollection("concepts")
+ await getConceptPagesAlphabetical()
)
.filter(({ slug }) => related.includes(slug))
.map(({ slug, data: { title } }) => {
diff --git a/src/pages/concepts/index.astro b/src/pages/concepts/index.astro
index 08d34005..d537be1d 100644
--- a/src/pages/concepts/index.astro
+++ b/src/pages/concepts/index.astro
@@ -1,5 +1,4 @@
---
-import { getCollection } from "astro:content";
import Layout from "../../layouts/Layout.astro";
import HorizontalContainer from "../../components/HorizontalContainer.astro";
import Hero from "../../components/Hero.astro";
@@ -7,12 +6,13 @@ import QuickStart from "../../components/QuickStart.astro";
import Grid3 from "../../components/Grid3.astro";
import HoverableLink from "../../components/HoverableLink.astro";
import { conceptPagePath } from "../../lib/utils";
+import { getConceptPagesAlphabetical } from "../../content/collections";
const title = "Concepts";
const heroTitle = "Nix concepts";
const description = "The whys and the hows of Nix";
-const conceptPages = await getCollection("concepts");
+const conceptPages = await getConceptPagesAlphabetical();
---
diff --git a/src/pages/llms-full.txt.ts b/src/pages/llms-full.txt.ts
index 68dfb1c5..ef549c81 100644
--- a/src/pages/llms-full.txt.ts
+++ b/src/pages/llms-full.txt.ts
@@ -1,8 +1,11 @@
+import {
+ getConceptPagesAlphabetical,
+ getStartPagesByOrderParam,
+} from "../content/collections";
import { conceptPagePath, startPagePath } from "../lib/utils";
import { site } from "../site";
import { FORMATS } from "./llms.txt";
import type { APIRoute } from "astro";
-import { getCollection } from "astro:content";
import Handlebars from "handlebars";
import fs from "node:fs";
import path from "node:path";
@@ -17,8 +20,8 @@ const templateFile = fs.readFileSync(
const template = Handlebars.compile(templateFile);
export const GET: APIRoute = async () => {
- const startPages = await getCollection("start");
- const conceptPages = await getCollection("concepts");
+ const startPages = await getStartPagesByOrderParam();
+ const conceptPages = await getConceptPagesAlphabetical();
const content = template({
root,
diff --git a/src/pages/llms-small.txt.ts b/src/pages/llms-small.txt.ts
index 6b1eb955..52195f6b 100644
--- a/src/pages/llms-small.txt.ts
+++ b/src/pages/llms-small.txt.ts
@@ -1,7 +1,10 @@
+import {
+ getConceptPagesAlphabetical,
+ getStartPagesByOrderParam,
+} from "../content/collections";
import { site } from "../site";
import { FORMATS } from "./llms.txt";
import type { APIRoute } from "astro";
-import { getCollection } from "astro:content";
import Handlebars from "handlebars";
import fs from "node:fs";
import path from "node:path";
@@ -16,8 +19,8 @@ const templateFile = fs.readFileSync(
const template = Handlebars.compile(templateFile);
export const GET: APIRoute = async () => {
- const startPages = await getCollection("start");
- const conceptPages = await getCollection("concepts");
+ const startPages = await getStartPagesByOrderParam();
+ const conceptPages = await getConceptPagesAlphabetical();
const content = template({
root,
diff --git a/src/pages/llms.txt.ts b/src/pages/llms.txt.ts
index 8cdf7d7d..514bbfe2 100644
--- a/src/pages/llms.txt.ts
+++ b/src/pages/llms.txt.ts
@@ -1,7 +1,10 @@
+import {
+ getConceptPagesAlphabetical,
+ getStartPagesByOrderParam,
+} from "../content/collections";
import { conceptPagePath, startPagePath } from "../lib/utils";
import { site } from "../site";
import type { APIRoute } from "astro";
-import { getCollection } from "astro:content";
import Handlebars from "handlebars";
import fs from "node:fs";
import path from "node:path";
@@ -37,8 +40,8 @@ const templateFile = fs.readFileSync(
const template = Handlebars.compile(templateFile);
export const GET: APIRoute = async () => {
- const startPages = await getCollection("start");
- const conceptPages = await getCollection("concepts");
+ const startPages = await getStartPagesByOrderParam();
+ const conceptPages = await getConceptPagesAlphabetical();
const content = template({
root,
diff --git a/src/pages/start/[slug].astro b/src/pages/start/[slug].astro
index 55378fb1..53aff937 100644
--- a/src/pages/start/[slug].astro
+++ b/src/pages/start/[slug].astro
@@ -1,6 +1,5 @@
---
import type { GetStaticPaths } from "astro";
-import { getCollection } from "astro:content";
import Admonition from "../../components/mdx/Admonition.astro";
import ExternalSources from "../../components/ExternalSources.astro";
import Language from "../../components/mdx/Language.astro";
@@ -17,11 +16,10 @@ import H4 from "../../components/mdx/H4.astro";
import Pagination from "../../components/Pagination.astro";
import Separator from "../../components/Separator.astro";
import FeedbackBar from "../../components/FeedbackBar.astro";
+import { getStartPagesByOrderParam } from "../../content/collections";
export const getStaticPaths = (async () => {
- const startPages = await getCollection("start");
-
- return startPages.map((page) => ({
+ return (await getStartPagesByOrderParam()).map((page) => ({
params: { slug: page.slug.substring(1) },
props: { page },
}));
@@ -33,7 +31,7 @@ const {
} = page;
const { Content } = await page.render();
-const numQuickStartPages = (await getCollection("start")).length;
+const numQuickStartPages = (await getStartPagesByOrderParam()).length;
---
diff --git a/src/pages/start/index.astro b/src/pages/start/index.astro
index bda79907..8d66fb30 100644
--- a/src/pages/start/index.astro
+++ b/src/pages/start/index.astro
@@ -1,18 +1,18 @@
---
-import { getCollection } from "astro:content";
import Layout from "../../layouts/Layout.astro";
import Hero from "../../components/Hero.astro";
import HorizontalContainer from "../../components/HorizontalContainer.astro";
import Grid2 from "../../components/Grid2.astro";
import HoverableLink from "../../components/HoverableLink.astro";
import { startPagePath } from "../../lib/utils";
+import { getStartPagesByOrderParam } from "../../content/collections";
const title = "Start";
const heroTitle = "Quick start";
const description =
"Get a taste of Nix's power and learn key concepts along the way";
-const startPages = await getCollection("start");
+const startPages = await getStartPagesByOrderParam();
---