Compare commits
11 Commits
47473a53b5
...
bab803d538
| Author | SHA1 | Date | |
|---|---|---|---|
| bab803d538 | |||
| 9df992aba3 | |||
| df65ad1e10 | |||
| 9f58fc3c32 | |||
| f8f105a766 | |||
| 91aa5cc835 | |||
| 64bbaac403 | |||
| 7f94201212 | |||
| a085df81b4 | |||
| 6fdb515289 | |||
| 910038a5e3 |
37
_config.ts
37
_config.ts
@@ -2,26 +2,53 @@ import lume from "lume/mod.ts";
|
|||||||
import nav from "lume/plugins/nav.ts";
|
import nav from "lume/plugins/nav.ts";
|
||||||
import codeHighlight from "lume/plugins/code_highlight.ts";
|
import codeHighlight from "lume/plugins/code_highlight.ts";
|
||||||
import googleFonts from "lume/plugins/google_fonts.ts";
|
import googleFonts from "lume/plugins/google_fonts.ts";
|
||||||
import { djotRender } from "./_djot.ts";
|
import djotPlugin from "./_djot.ts";
|
||||||
|
import djot from "@djot/djot";
|
||||||
|
|
||||||
const site = lume();
|
const site = lume();
|
||||||
|
|
||||||
|
site.filter("lowercasePL", (lang: string) => {
|
||||||
|
switch (lang) {
|
||||||
|
case "C++":
|
||||||
|
return "cpp";
|
||||||
|
case "C#":
|
||||||
|
return "csharp";
|
||||||
|
case "Python 3":
|
||||||
|
return "python3";
|
||||||
|
default:
|
||||||
|
return lang.toLowerCase();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
site.use(nav());
|
site.use(nav());
|
||||||
site.use(codeHighlight());
|
site.use(codeHighlight());
|
||||||
|
|
||||||
|
site.use(djotPlugin({
|
||||||
|
renderOptions: {
|
||||||
|
overrides: {
|
||||||
|
symb: (symbol: djot.Symb, renderer: djot.HTMLRenderer) => {
|
||||||
|
if (symbol.alias.startsWith("si-")) {
|
||||||
|
const iconName = symbol.alias.substring(3);
|
||||||
|
return `<img class="text-icon" src="/icons/${iconName}.svg">`;
|
||||||
|
}
|
||||||
|
return renderer.renderAstNodeDefault(symbol);
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}));
|
||||||
|
|
||||||
site.use(googleFonts({
|
site.use(googleFonts({
|
||||||
cssFile: "/styles/main.css",
|
cssFile: "/styles/main.css",
|
||||||
placeholder: "/* import fonts */",
|
placeholder: "/* import fonts */",
|
||||||
fonts: {
|
fonts: {
|
||||||
"Atkinson Hyperlegible": "https://fonts.google.com/share?selection.family=Atkinson+Hyperlegible:ital,wght@0,400;0,700;1,400;1,700",
|
"Atkinson Hyperlegible Next":
|
||||||
|
"https://fonts.googleapis.com/css2?family=Atkinson+Hyperlegible+Next:ital,wght@0,200..800;1,200..800",
|
||||||
"JetBrains Mono": "https://fonts.google.com/share?selection.family=JetBrains+Mono:ital,wght@0,100..800;1,100..800",
|
"JetBrains Mono": "https://fonts.google.com/share?selection.family=JetBrains+Mono:ital,wght@0,100..800;1,100..800",
|
||||||
},
|
},
|
||||||
}));
|
}));
|
||||||
|
|
||||||
site.copy("/styles");
|
site.copy("/styles");
|
||||||
site.copy("favicon.svg");
|
site.copy("favicon.svg");
|
||||||
|
site.copy("/icons")
|
||||||
site.data("djot", djotRender);
|
|
||||||
site.filter("djot", djotRender);
|
|
||||||
|
|
||||||
export default site;
|
export default site;
|
||||||
|
|||||||
98
_djot.ts
98
_djot.ts
@@ -1,4 +1,25 @@
|
|||||||
import djot from "@djot/djot";
|
import djot from "@djot/djot";
|
||||||
|
import Site from "lume/core/site.ts";
|
||||||
|
import { merge } from "lume/core/utils/object.ts";
|
||||||
|
|
||||||
|
// Djot does not export these types
|
||||||
|
type Filter = object;
|
||||||
|
type HTMLRenderOptions = object;
|
||||||
|
|
||||||
|
export interface Options {
|
||||||
|
/** The list of file extensions this plugin applies to */
|
||||||
|
extensions?: string[];
|
||||||
|
|
||||||
|
filters?: Filter[];
|
||||||
|
|
||||||
|
/** Options passed to djot library */
|
||||||
|
renderOptions?: HTMLRenderOptions;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Default options
|
||||||
|
export const defaults: Options = {
|
||||||
|
extensions: [".dj", ".djot"],
|
||||||
|
};
|
||||||
|
|
||||||
function extractTitle(ast: djot.Doc): string {
|
function extractTitle(ast: djot.Doc): string {
|
||||||
const firstSection = ast.children.find((c) => c.tag == "section");
|
const firstSection = ast.children.find((c) => c.tag == "section");
|
||||||
@@ -10,35 +31,80 @@ function extractTitle(ast: djot.Doc): string {
|
|||||||
return title ?? "No title";
|
return title ?? "No title";
|
||||||
}
|
}
|
||||||
|
|
||||||
export function djotRender(content: string): string {
|
export async function djotLoader(path: string | URL) {
|
||||||
return djot.renderHTML(djot.parse(content));
|
const content = await Deno.readTextFile(path);
|
||||||
|
const ast = djot.parse(content);
|
||||||
|
const title = extractTitle(ast);
|
||||||
|
|
||||||
|
return {
|
||||||
|
title,
|
||||||
|
content,
|
||||||
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
export default async function djotLoader(path: string | URL) {
|
const stripMarkupSourceLinks: Filter = () => {
|
||||||
const content = await Deno.readTextFile(path);
|
|
||||||
|
|
||||||
const ast = djot.parse(content);
|
|
||||||
|
|
||||||
djot.applyFilter(ast, () => {
|
|
||||||
return {
|
return {
|
||||||
link: (el) => {
|
link: (el: djot.Link) => {
|
||||||
if (el.destination) {
|
if (el.destination) {
|
||||||
el.destination = el.destination.replace(
|
el.destination = el.destination.replace(
|
||||||
/(\.dj)(#[^.\s]+)?$/,
|
/(.(?:dj|md))(#[^.\s]+)?$/,
|
||||||
(_match: string, _ext: string, section: string) => {
|
(_match: string, _ext: string, section: string) => {
|
||||||
return section ? section : "";
|
return section ?? "";
|
||||||
},
|
},
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
const defaultFilters = [
|
||||||
|
stripMarkupSourceLinks,
|
||||||
|
];
|
||||||
|
|
||||||
|
export class DjotEngine implements Lume.Engine {
|
||||||
|
filters: Filter[];
|
||||||
|
renderOptions?: HTMLRenderOptions;
|
||||||
|
|
||||||
|
constructor(filters: Filter[] = [], renderOptions?: HTMLRenderOptions) {
|
||||||
|
this.filters = [...defaultFilters, ...filters];
|
||||||
|
this.renderOptions = renderOptions;
|
||||||
|
}
|
||||||
|
|
||||||
|
render(
|
||||||
|
content: string | djot.Doc,
|
||||||
|
_data?: Record<string, unknown>,
|
||||||
|
_filename?: string,
|
||||||
|
): string {
|
||||||
|
if (typeof content === "string") {
|
||||||
|
content = djot.parse(content);
|
||||||
|
}
|
||||||
|
|
||||||
|
this.filters.forEach((filter, _index, _array) => {
|
||||||
|
djot.applyFilter(content, filter);
|
||||||
});
|
});
|
||||||
|
|
||||||
const title = extractTitle(ast);
|
return djot.renderHTML(
|
||||||
const html = djot.renderHTML(ast);
|
content,
|
||||||
|
this.renderOptions,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
return {
|
addHelper() {}
|
||||||
title,
|
|
||||||
content: html,
|
deleteCache() {}
|
||||||
|
}
|
||||||
|
|
||||||
|
export default function (userOptions?: Options) {
|
||||||
|
const options = merge(defaults, userOptions);
|
||||||
|
|
||||||
|
return function (site: Site) {
|
||||||
|
const engine = new DjotEngine(options.filters, options.renderOptions);
|
||||||
|
|
||||||
|
site.loadPages(options.extensions, {
|
||||||
|
loader: djotLoader,
|
||||||
|
engine,
|
||||||
|
});
|
||||||
|
|
||||||
|
site.filter("djot", (content) => engine.render(content as string));
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -15,11 +15,11 @@
|
|||||||
<nav>
|
<nav>
|
||||||
<a href="/" id="site-root" class="nav-menu-item">rpqt.fr</a>
|
<a href="/" id="site-root" class="nav-menu-item">rpqt.fr</a>
|
||||||
<ul class="nav-menu">
|
<ul class="nav-menu">
|
||||||
{{ for item of nav.menu().children }}
|
{{ for item of ["now", "projects", "socials"] }}
|
||||||
<li>
|
<li>
|
||||||
<a href="{{ item.data.url }}" class="nav-menu-item"
|
<a href="/{{ item }}" class="nav-menu-item"
|
||||||
{{ url.startsWith(item.data.url) ? 'id="header-nav-current"' : '' }}
|
{{ url.startsWith("/" + item) ? 'id="header-nav-current"' : '' }}
|
||||||
>{{ item.slug }}</a>
|
>{{ item }}</a>
|
||||||
</li>
|
</li>
|
||||||
{{ /for }}
|
{{ /for }}
|
||||||
</ul>
|
</ul>
|
||||||
|
|||||||
119
deno.lock
generated
119
deno.lock
generated
@@ -1,5 +1,5 @@
|
|||||||
{
|
{
|
||||||
"version": "4",
|
"version": "5",
|
||||||
"specifiers": {
|
"specifiers": {
|
||||||
"jsr:@davidbonnet/astring@1.8.6": "1.8.6",
|
"jsr:@davidbonnet/astring@1.8.6": "1.8.6",
|
||||||
"jsr:@luca/esbuild-deno-loader@0.11.1": "0.11.1",
|
"jsr:@luca/esbuild-deno-loader@0.11.1": "0.11.1",
|
||||||
@@ -224,7 +224,8 @@
|
|||||||
},
|
},
|
||||||
"npm": {
|
"npm": {
|
||||||
"@djot/djot@0.3.2": {
|
"@djot/djot@0.3.2": {
|
||||||
"integrity": "sha512-joMKR24B8rxueyFiJbpZAqEiypjvOyzTxzkhyr0q5mM/sUBaOD3unna/9IxtOotFugViyYlkIRaiXg3xM//zxg=="
|
"integrity": "sha512-joMKR24B8rxueyFiJbpZAqEiypjvOyzTxzkhyr0q5mM/sUBaOD3unna/9IxtOotFugViyYlkIRaiXg3xM//zxg==",
|
||||||
|
"bin": true
|
||||||
},
|
},
|
||||||
"@emnapi/runtime@1.3.1": {
|
"@emnapi/runtime@1.3.1": {
|
||||||
"integrity": "sha512-kEBmG8KyqtxJZv+ygbEim+KCGtIq1fC22Ms3S4ziXmYKm8uyoLX0MHONVKwp+9opg390VaKRNt4a7A9NwmpNhw==",
|
"integrity": "sha512-kEBmG8KyqtxJZv+ygbEim+KCGtIq1fC22Ms3S4ziXmYKm8uyoLX0MHONVKwp+9opg390VaKRNt4a7A9NwmpNhw==",
|
||||||
@@ -234,87 +235,124 @@
|
|||||||
},
|
},
|
||||||
"@img/sharp-darwin-arm64@0.33.5": {
|
"@img/sharp-darwin-arm64@0.33.5": {
|
||||||
"integrity": "sha512-UT4p+iz/2H4twwAoLCqfA9UH5pI6DggwKEGuaPy7nCVQ8ZsiY5PIcrRvD1DzuY3qYL07NtIQcWnBSY/heikIFQ==",
|
"integrity": "sha512-UT4p+iz/2H4twwAoLCqfA9UH5pI6DggwKEGuaPy7nCVQ8ZsiY5PIcrRvD1DzuY3qYL07NtIQcWnBSY/heikIFQ==",
|
||||||
"dependencies": [
|
"optionalDependencies": [
|
||||||
"@img/sharp-libvips-darwin-arm64"
|
"@img/sharp-libvips-darwin-arm64"
|
||||||
]
|
],
|
||||||
|
"os": ["darwin"],
|
||||||
|
"cpu": ["arm64"]
|
||||||
},
|
},
|
||||||
"@img/sharp-darwin-x64@0.33.5": {
|
"@img/sharp-darwin-x64@0.33.5": {
|
||||||
"integrity": "sha512-fyHac4jIc1ANYGRDxtiqelIbdWkIuQaI84Mv45KvGRRxSAa7o7d1ZKAOBaYbnepLC1WqxfpimdeWfvqqSGwR2Q==",
|
"integrity": "sha512-fyHac4jIc1ANYGRDxtiqelIbdWkIuQaI84Mv45KvGRRxSAa7o7d1ZKAOBaYbnepLC1WqxfpimdeWfvqqSGwR2Q==",
|
||||||
"dependencies": [
|
"optionalDependencies": [
|
||||||
"@img/sharp-libvips-darwin-x64"
|
"@img/sharp-libvips-darwin-x64"
|
||||||
]
|
],
|
||||||
|
"os": ["darwin"],
|
||||||
|
"cpu": ["x64"]
|
||||||
},
|
},
|
||||||
"@img/sharp-libvips-darwin-arm64@1.0.4": {
|
"@img/sharp-libvips-darwin-arm64@1.0.4": {
|
||||||
"integrity": "sha512-XblONe153h0O2zuFfTAbQYAX2JhYmDHeWikp1LM9Hul9gVPjFY427k6dFEcOL72O01QxQsWi761svJ/ev9xEDg=="
|
"integrity": "sha512-XblONe153h0O2zuFfTAbQYAX2JhYmDHeWikp1LM9Hul9gVPjFY427k6dFEcOL72O01QxQsWi761svJ/ev9xEDg==",
|
||||||
|
"os": ["darwin"],
|
||||||
|
"cpu": ["arm64"]
|
||||||
},
|
},
|
||||||
"@img/sharp-libvips-darwin-x64@1.0.4": {
|
"@img/sharp-libvips-darwin-x64@1.0.4": {
|
||||||
"integrity": "sha512-xnGR8YuZYfJGmWPvmlunFaWJsb9T/AO2ykoP3Fz/0X5XV2aoYBPkX6xqCQvUTKKiLddarLaxpzNe+b1hjeWHAQ=="
|
"integrity": "sha512-xnGR8YuZYfJGmWPvmlunFaWJsb9T/AO2ykoP3Fz/0X5XV2aoYBPkX6xqCQvUTKKiLddarLaxpzNe+b1hjeWHAQ==",
|
||||||
|
"os": ["darwin"],
|
||||||
|
"cpu": ["x64"]
|
||||||
},
|
},
|
||||||
"@img/sharp-libvips-linux-arm64@1.0.4": {
|
"@img/sharp-libvips-linux-arm64@1.0.4": {
|
||||||
"integrity": "sha512-9B+taZ8DlyyqzZQnoeIvDVR/2F4EbMepXMc/NdVbkzsJbzkUjhXv/70GQJ7tdLA4YJgNP25zukcxpX2/SueNrA=="
|
"integrity": "sha512-9B+taZ8DlyyqzZQnoeIvDVR/2F4EbMepXMc/NdVbkzsJbzkUjhXv/70GQJ7tdLA4YJgNP25zukcxpX2/SueNrA==",
|
||||||
|
"os": ["linux"],
|
||||||
|
"cpu": ["arm64"]
|
||||||
},
|
},
|
||||||
"@img/sharp-libvips-linux-arm@1.0.5": {
|
"@img/sharp-libvips-linux-arm@1.0.5": {
|
||||||
"integrity": "sha512-gvcC4ACAOPRNATg/ov8/MnbxFDJqf/pDePbBnuBDcjsI8PssmjoKMAz4LtLaVi+OnSb5FK/yIOamqDwGmXW32g=="
|
"integrity": "sha512-gvcC4ACAOPRNATg/ov8/MnbxFDJqf/pDePbBnuBDcjsI8PssmjoKMAz4LtLaVi+OnSb5FK/yIOamqDwGmXW32g==",
|
||||||
|
"os": ["linux"],
|
||||||
|
"cpu": ["arm"]
|
||||||
},
|
},
|
||||||
"@img/sharp-libvips-linux-s390x@1.0.4": {
|
"@img/sharp-libvips-linux-s390x@1.0.4": {
|
||||||
"integrity": "sha512-u7Wz6ntiSSgGSGcjZ55im6uvTrOxSIS8/dgoVMoiGE9I6JAfU50yH5BoDlYA1tcuGS7g/QNtetJnxA6QEsCVTA=="
|
"integrity": "sha512-u7Wz6ntiSSgGSGcjZ55im6uvTrOxSIS8/dgoVMoiGE9I6JAfU50yH5BoDlYA1tcuGS7g/QNtetJnxA6QEsCVTA==",
|
||||||
|
"os": ["linux"],
|
||||||
|
"cpu": ["s390x"]
|
||||||
},
|
},
|
||||||
"@img/sharp-libvips-linux-x64@1.0.4": {
|
"@img/sharp-libvips-linux-x64@1.0.4": {
|
||||||
"integrity": "sha512-MmWmQ3iPFZr0Iev+BAgVMb3ZyC4KeFc3jFxnNbEPas60e1cIfevbtuyf9nDGIzOaW9PdnDciJm+wFFaTlj5xYw=="
|
"integrity": "sha512-MmWmQ3iPFZr0Iev+BAgVMb3ZyC4KeFc3jFxnNbEPas60e1cIfevbtuyf9nDGIzOaW9PdnDciJm+wFFaTlj5xYw==",
|
||||||
|
"os": ["linux"],
|
||||||
|
"cpu": ["x64"]
|
||||||
},
|
},
|
||||||
"@img/sharp-libvips-linuxmusl-arm64@1.0.4": {
|
"@img/sharp-libvips-linuxmusl-arm64@1.0.4": {
|
||||||
"integrity": "sha512-9Ti+BbTYDcsbp4wfYib8Ctm1ilkugkA/uscUn6UXK1ldpC1JjiXbLfFZtRlBhjPZ5o1NCLiDbg8fhUPKStHoTA=="
|
"integrity": "sha512-9Ti+BbTYDcsbp4wfYib8Ctm1ilkugkA/uscUn6UXK1ldpC1JjiXbLfFZtRlBhjPZ5o1NCLiDbg8fhUPKStHoTA==",
|
||||||
|
"os": ["linux"],
|
||||||
|
"cpu": ["arm64"]
|
||||||
},
|
},
|
||||||
"@img/sharp-libvips-linuxmusl-x64@1.0.4": {
|
"@img/sharp-libvips-linuxmusl-x64@1.0.4": {
|
||||||
"integrity": "sha512-viYN1KX9m+/hGkJtvYYp+CCLgnJXwiQB39damAO7WMdKWlIhmYTfHjwSbQeUK/20vY154mwezd9HflVFM1wVSw=="
|
"integrity": "sha512-viYN1KX9m+/hGkJtvYYp+CCLgnJXwiQB39damAO7WMdKWlIhmYTfHjwSbQeUK/20vY154mwezd9HflVFM1wVSw==",
|
||||||
|
"os": ["linux"],
|
||||||
|
"cpu": ["x64"]
|
||||||
},
|
},
|
||||||
"@img/sharp-linux-arm64@0.33.5": {
|
"@img/sharp-linux-arm64@0.33.5": {
|
||||||
"integrity": "sha512-JMVv+AMRyGOHtO1RFBiJy/MBsgz0x4AWrT6QoEVVTyh1E39TrCUpTRI7mx9VksGX4awWASxqCYLCV4wBZHAYxA==",
|
"integrity": "sha512-JMVv+AMRyGOHtO1RFBiJy/MBsgz0x4AWrT6QoEVVTyh1E39TrCUpTRI7mx9VksGX4awWASxqCYLCV4wBZHAYxA==",
|
||||||
"dependencies": [
|
"optionalDependencies": [
|
||||||
"@img/sharp-libvips-linux-arm64"
|
"@img/sharp-libvips-linux-arm64"
|
||||||
]
|
],
|
||||||
|
"os": ["linux"],
|
||||||
|
"cpu": ["arm64"]
|
||||||
},
|
},
|
||||||
"@img/sharp-linux-arm@0.33.5": {
|
"@img/sharp-linux-arm@0.33.5": {
|
||||||
"integrity": "sha512-JTS1eldqZbJxjvKaAkxhZmBqPRGmxgu+qFKSInv8moZ2AmT5Yib3EQ1c6gp493HvrvV8QgdOXdyaIBrhvFhBMQ==",
|
"integrity": "sha512-JTS1eldqZbJxjvKaAkxhZmBqPRGmxgu+qFKSInv8moZ2AmT5Yib3EQ1c6gp493HvrvV8QgdOXdyaIBrhvFhBMQ==",
|
||||||
"dependencies": [
|
"optionalDependencies": [
|
||||||
"@img/sharp-libvips-linux-arm"
|
"@img/sharp-libvips-linux-arm"
|
||||||
]
|
],
|
||||||
|
"os": ["linux"],
|
||||||
|
"cpu": ["arm"]
|
||||||
},
|
},
|
||||||
"@img/sharp-linux-s390x@0.33.5": {
|
"@img/sharp-linux-s390x@0.33.5": {
|
||||||
"integrity": "sha512-y/5PCd+mP4CA/sPDKl2961b+C9d+vPAveS33s6Z3zfASk2j5upL6fXVPZi7ztePZ5CuH+1kW8JtvxgbuXHRa4Q==",
|
"integrity": "sha512-y/5PCd+mP4CA/sPDKl2961b+C9d+vPAveS33s6Z3zfASk2j5upL6fXVPZi7ztePZ5CuH+1kW8JtvxgbuXHRa4Q==",
|
||||||
"dependencies": [
|
"optionalDependencies": [
|
||||||
"@img/sharp-libvips-linux-s390x"
|
"@img/sharp-libvips-linux-s390x"
|
||||||
]
|
],
|
||||||
|
"os": ["linux"],
|
||||||
|
"cpu": ["s390x"]
|
||||||
},
|
},
|
||||||
"@img/sharp-linux-x64@0.33.5": {
|
"@img/sharp-linux-x64@0.33.5": {
|
||||||
"integrity": "sha512-opC+Ok5pRNAzuvq1AG0ar+1owsu842/Ab+4qvU879ippJBHvyY5n2mxF1izXqkPYlGuP/M556uh53jRLJmzTWA==",
|
"integrity": "sha512-opC+Ok5pRNAzuvq1AG0ar+1owsu842/Ab+4qvU879ippJBHvyY5n2mxF1izXqkPYlGuP/M556uh53jRLJmzTWA==",
|
||||||
"dependencies": [
|
"optionalDependencies": [
|
||||||
"@img/sharp-libvips-linux-x64"
|
"@img/sharp-libvips-linux-x64"
|
||||||
]
|
],
|
||||||
|
"os": ["linux"],
|
||||||
|
"cpu": ["x64"]
|
||||||
},
|
},
|
||||||
"@img/sharp-linuxmusl-arm64@0.33.5": {
|
"@img/sharp-linuxmusl-arm64@0.33.5": {
|
||||||
"integrity": "sha512-XrHMZwGQGvJg2V/oRSUfSAfjfPxO+4DkiRh6p2AFjLQztWUuY/o8Mq0eMQVIY7HJ1CDQUJlxGGZRw1a5bqmd1g==",
|
"integrity": "sha512-XrHMZwGQGvJg2V/oRSUfSAfjfPxO+4DkiRh6p2AFjLQztWUuY/o8Mq0eMQVIY7HJ1CDQUJlxGGZRw1a5bqmd1g==",
|
||||||
"dependencies": [
|
"optionalDependencies": [
|
||||||
"@img/sharp-libvips-linuxmusl-arm64"
|
"@img/sharp-libvips-linuxmusl-arm64"
|
||||||
]
|
],
|
||||||
|
"os": ["linux"],
|
||||||
|
"cpu": ["arm64"]
|
||||||
},
|
},
|
||||||
"@img/sharp-linuxmusl-x64@0.33.5": {
|
"@img/sharp-linuxmusl-x64@0.33.5": {
|
||||||
"integrity": "sha512-WT+d/cgqKkkKySYmqoZ8y3pxx7lx9vVejxW/W4DOFMYVSkErR+w7mf2u8m/y4+xHe7yY9DAXQMWQhpnMuFfScw==",
|
"integrity": "sha512-WT+d/cgqKkkKySYmqoZ8y3pxx7lx9vVejxW/W4DOFMYVSkErR+w7mf2u8m/y4+xHe7yY9DAXQMWQhpnMuFfScw==",
|
||||||
"dependencies": [
|
"optionalDependencies": [
|
||||||
"@img/sharp-libvips-linuxmusl-x64"
|
"@img/sharp-libvips-linuxmusl-x64"
|
||||||
]
|
],
|
||||||
|
"os": ["linux"],
|
||||||
|
"cpu": ["x64"]
|
||||||
},
|
},
|
||||||
"@img/sharp-wasm32@0.33.5": {
|
"@img/sharp-wasm32@0.33.5": {
|
||||||
"integrity": "sha512-ykUW4LVGaMcU9lu9thv85CbRMAwfeadCJHRsg2GmeRa/cJxsVY9Rbd57JcMxBkKHag5U/x7TSBpScF4U8ElVzg==",
|
"integrity": "sha512-ykUW4LVGaMcU9lu9thv85CbRMAwfeadCJHRsg2GmeRa/cJxsVY9Rbd57JcMxBkKHag5U/x7TSBpScF4U8ElVzg==",
|
||||||
"dependencies": [
|
"dependencies": [
|
||||||
"@emnapi/runtime"
|
"@emnapi/runtime"
|
||||||
]
|
],
|
||||||
|
"cpu": ["wasm32"]
|
||||||
},
|
},
|
||||||
"@img/sharp-win32-ia32@0.33.5": {
|
"@img/sharp-win32-ia32@0.33.5": {
|
||||||
"integrity": "sha512-T36PblLaTwuVJ/zw/LaH0PdZkRz5rd3SmMHX8GSmR7vtNSP5Z6bQkExdSK7xGWyxLw4sUknBuugTelgw2faBbQ=="
|
"integrity": "sha512-T36PblLaTwuVJ/zw/LaH0PdZkRz5rd3SmMHX8GSmR7vtNSP5Z6bQkExdSK7xGWyxLw4sUknBuugTelgw2faBbQ==",
|
||||||
|
"os": ["win32"],
|
||||||
|
"cpu": ["ia32"]
|
||||||
},
|
},
|
||||||
"@img/sharp-win32-x64@0.33.5": {
|
"@img/sharp-win32-x64@0.33.5": {
|
||||||
"integrity": "sha512-MpY/o8/8kj+EcnxwvrP4aTJSWw/aZ7JIGR4aBeZkZw5B7/Jn+tY9/VNwtcoGmdT7GfggGIU4kygOMSbYnOrAbg=="
|
"integrity": "sha512-MpY/o8/8kj+EcnxwvrP4aTJSWw/aZ7JIGR4aBeZkZw5B7/Jn+tY9/VNwtcoGmdT7GfggGIU4kygOMSbYnOrAbg==",
|
||||||
|
"os": ["win32"],
|
||||||
|
"cpu": ["x64"]
|
||||||
},
|
},
|
||||||
"@js-temporal/polyfill@0.4.4": {
|
"@js-temporal/polyfill@0.4.4": {
|
||||||
"integrity": "sha512-2X6bvghJ/JAoZO52lbgyAPFj8uCflhTo2g7nkFzEQdXd/D8rEeD4HtmTEpmtGCva260fcd66YNXBOYdnmHqSOg==",
|
"integrity": "sha512-2X6bvghJ/JAoZO52lbgyAPFj8uCflhTo2g7nkFzEQdXd/D8rEeD4HtmTEpmtGCva260fcd66YNXBOYdnmHqSOg==",
|
||||||
@@ -406,7 +444,8 @@
|
|||||||
"mdurl",
|
"mdurl",
|
||||||
"punycode.js",
|
"punycode.js",
|
||||||
"uc.micro"
|
"uc.micro"
|
||||||
]
|
],
|
||||||
|
"bin": true
|
||||||
},
|
},
|
||||||
"mdurl@2.0.0": {
|
"mdurl@2.0.0": {
|
||||||
"integrity": "sha512-Lf+9+2r+Tdp5wXDXC4PcIBjTDtq4UKjCPMQhKIuzpJNW0b96kVqSwW0bT7FhRSfmAiFYgP+SCRvdrDozfh0U5w=="
|
"integrity": "sha512-Lf+9+2r+Tdp5wXDXC4PcIBjTDtq4UKjCPMQhKIuzpJNW0b96kVqSwW0bT7FhRSfmAiFYgP+SCRvdrDozfh0U5w=="
|
||||||
@@ -421,11 +460,17 @@
|
|||||||
"integrity": "sha512-uxFIHU0YlHYhDQtV4R9J6a52SLx28BCjT+4ieh7IGbgwVJWO+km431c4yRlREUAsAmt/uMjQUyQHNEPf0M39CA=="
|
"integrity": "sha512-uxFIHU0YlHYhDQtV4R9J6a52SLx28BCjT+4ieh7IGbgwVJWO+km431c4yRlREUAsAmt/uMjQUyQHNEPf0M39CA=="
|
||||||
},
|
},
|
||||||
"semver@7.7.1": {
|
"semver@7.7.1": {
|
||||||
"integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA=="
|
"integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==",
|
||||||
|
"bin": true
|
||||||
},
|
},
|
||||||
"sharp@0.33.5": {
|
"sharp@0.33.5": {
|
||||||
"integrity": "sha512-haPVm1EkS9pgvHrQ/F3Xy+hgcuMV0Wm9vfIBSiwZ05k+xgb0PkBQpGsAA/oWdDobNaZTH5ppvHtzCFbnSEwHVw==",
|
"integrity": "sha512-haPVm1EkS9pgvHrQ/F3Xy+hgcuMV0Wm9vfIBSiwZ05k+xgb0PkBQpGsAA/oWdDobNaZTH5ppvHtzCFbnSEwHVw==",
|
||||||
"dependencies": [
|
"dependencies": [
|
||||||
|
"color",
|
||||||
|
"detect-libc",
|
||||||
|
"semver"
|
||||||
|
],
|
||||||
|
"optionalDependencies": [
|
||||||
"@img/sharp-darwin-arm64",
|
"@img/sharp-darwin-arm64",
|
||||||
"@img/sharp-darwin-x64",
|
"@img/sharp-darwin-x64",
|
||||||
"@img/sharp-libvips-darwin-arm64",
|
"@img/sharp-libvips-darwin-arm64",
|
||||||
@@ -444,11 +489,9 @@
|
|||||||
"@img/sharp-linuxmusl-x64",
|
"@img/sharp-linuxmusl-x64",
|
||||||
"@img/sharp-wasm32",
|
"@img/sharp-wasm32",
|
||||||
"@img/sharp-win32-ia32",
|
"@img/sharp-win32-ia32",
|
||||||
"@img/sharp-win32-x64",
|
"@img/sharp-win32-x64"
|
||||||
"color",
|
],
|
||||||
"detect-libc",
|
"scripts": true
|
||||||
"semver"
|
|
||||||
]
|
|
||||||
},
|
},
|
||||||
"simple-swizzle@0.2.2": {
|
"simple-swizzle@0.2.2": {
|
||||||
"integrity": "sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==",
|
"integrity": "sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==",
|
||||||
@@ -733,6 +776,7 @@
|
|||||||
"https://deno.land/x/lume@v3.0.1/core/searcher.ts": "19530e0149ca925334f98052863a52cdfbbeea9977342b209829999a34e816a6",
|
"https://deno.land/x/lume@v3.0.1/core/searcher.ts": "19530e0149ca925334f98052863a52cdfbbeea9977342b209829999a34e816a6",
|
||||||
"https://deno.land/x/lume@v3.0.1/core/server.ts": "19cdd234f18c601d8386c7aa6d589616ce367fc571a96d4715f220a522e17ae8",
|
"https://deno.land/x/lume@v3.0.1/core/server.ts": "19cdd234f18c601d8386c7aa6d589616ce367fc571a96d4715f220a522e17ae8",
|
||||||
"https://deno.land/x/lume@v3.0.1/core/site.ts": "2fd2103559eeed80574947c5b357b05c0d55d90e6135d82ffd2e5facac4bfef0",
|
"https://deno.land/x/lume@v3.0.1/core/site.ts": "2fd2103559eeed80574947c5b357b05c0d55d90e6135d82ffd2e5facac4bfef0",
|
||||||
|
"https://deno.land/x/lume@v3.0.1/core/slugifier.ts": "3cb058f841f6eba1862f70f43e21de591af99cc6efacd9bb11dc0dbbab9eb703",
|
||||||
"https://deno.land/x/lume@v3.0.1/core/source.ts": "b766b3d45df0df97fefabbc57f745d1ad7be308df1949291946516c8648289f7",
|
"https://deno.land/x/lume@v3.0.1/core/source.ts": "b766b3d45df0df97fefabbc57f745d1ad7be308df1949291946516c8648289f7",
|
||||||
"https://deno.land/x/lume@v3.0.1/core/utils/cli_options.ts": "ce8731a5e9c23b95217b6967dc4e5c434637a33d16806189acc6a87728b2e649",
|
"https://deno.land/x/lume@v3.0.1/core/utils/cli_options.ts": "ce8731a5e9c23b95217b6967dc4e5c434637a33d16806189acc6a87728b2e649",
|
||||||
"https://deno.land/x/lume@v3.0.1/core/utils/concurrent.ts": "cb0775b3d95f3faa356aa3a3e489dccef8807ed93cc4f84fcf5bc81e87c29504",
|
"https://deno.land/x/lume@v3.0.1/core/utils/concurrent.ts": "cb0775b3d95f3faa356aa3a3e489dccef8807ed93cc4f84fcf5bc81e87c29504",
|
||||||
@@ -769,6 +813,7 @@
|
|||||||
"https://deno.land/x/lume@v3.0.1/deps/hex.ts": "828718f24a780ff3ade8d0a8a5b57497cb31c257560ef12af99b6eb1a31e3bbd",
|
"https://deno.land/x/lume@v3.0.1/deps/hex.ts": "828718f24a780ff3ade8d0a8a5b57497cb31c257560ef12af99b6eb1a31e3bbd",
|
||||||
"https://deno.land/x/lume@v3.0.1/deps/highlight.ts": "e8f830a1137ff7e8246ce21518452b8cbf8089db409458c6d9c31040c11d8428",
|
"https://deno.land/x/lume@v3.0.1/deps/highlight.ts": "e8f830a1137ff7e8246ce21518452b8cbf8089db409458c6d9c31040c11d8428",
|
||||||
"https://deno.land/x/lume@v3.0.1/deps/http.ts": "c9c148ce51d3dc64de768972907e02b2870f96bd3423219252a40b8f7bad4383",
|
"https://deno.land/x/lume@v3.0.1/deps/http.ts": "c9c148ce51d3dc64de768972907e02b2870f96bd3423219252a40b8f7bad4383",
|
||||||
|
"https://deno.land/x/lume@v3.0.1/deps/icons.ts": "73e24df578e30f0b290cf6c7147875facbdb4e21abc56edb2919b4640ab77140",
|
||||||
"https://deno.land/x/lume@v3.0.1/deps/init.ts": "05d45af66ebdfe63e43540618f51ece8f99d98dc49de890f10eeb43abe9ed0f3",
|
"https://deno.land/x/lume@v3.0.1/deps/init.ts": "05d45af66ebdfe63e43540618f51ece8f99d98dc49de890f10eeb43abe9ed0f3",
|
||||||
"https://deno.land/x/lume@v3.0.1/deps/jsonc.ts": "79f0eddc3c9e593310eb8e5918eb1506b1c7d7816e4ecb96894f634ecbe626ff",
|
"https://deno.land/x/lume@v3.0.1/deps/jsonc.ts": "79f0eddc3c9e593310eb8e5918eb1506b1c7d7816e4ecb96894f634ecbe626ff",
|
||||||
"https://deno.land/x/lume@v3.0.1/deps/lightningcss.ts": "19f090ee781028aacd9817f204972b162c065e4c0ea99e24935eb489d2aadfd6",
|
"https://deno.land/x/lume@v3.0.1/deps/lightningcss.ts": "19f090ee781028aacd9817f204972b162c065e4c0ea99e24935eb489d2aadfd6",
|
||||||
@@ -787,12 +832,14 @@
|
|||||||
"https://deno.land/x/lume@v3.0.1/mod.ts": "4ed2edf622df6109304095952f8a02844f5abc2992b6c9886af632b058f1a8f4",
|
"https://deno.land/x/lume@v3.0.1/mod.ts": "4ed2edf622df6109304095952f8a02844f5abc2992b6c9886af632b058f1a8f4",
|
||||||
"https://deno.land/x/lume@v3.0.1/plugins/code_highlight.ts": "ac6327e688e9e8fbd7798bdcc5f76b46d27db3e22ea3b74f545dc3296e8a1261",
|
"https://deno.land/x/lume@v3.0.1/plugins/code_highlight.ts": "ac6327e688e9e8fbd7798bdcc5f76b46d27db3e22ea3b74f545dc3296e8a1261",
|
||||||
"https://deno.land/x/lume@v3.0.1/plugins/google_fonts.ts": "7093462756c503499d8d3d14a6abfbf131bacd41f5d7602ecfc2775a8ee2b7b2",
|
"https://deno.land/x/lume@v3.0.1/plugins/google_fonts.ts": "7093462756c503499d8d3d14a6abfbf131bacd41f5d7602ecfc2775a8ee2b7b2",
|
||||||
|
"https://deno.land/x/lume@v3.0.1/plugins/icons.ts": "de11277acc85e2d882e21a88ab44c454bd9ea3dbf02cfe60efffef0cdd5a8996",
|
||||||
"https://deno.land/x/lume@v3.0.1/plugins/json.ts": "5c49499e56b919ec848d4118ec97dd4fe0a323a6cc4c648dc45ab55297614c12",
|
"https://deno.land/x/lume@v3.0.1/plugins/json.ts": "5c49499e56b919ec848d4118ec97dd4fe0a323a6cc4c648dc45ab55297614c12",
|
||||||
"https://deno.land/x/lume@v3.0.1/plugins/markdown.ts": "7e82d897c1e35bf119dcd18b6aec7a6ba5aa06848897b34ff9cd161ec7c8757e",
|
"https://deno.land/x/lume@v3.0.1/plugins/markdown.ts": "7e82d897c1e35bf119dcd18b6aec7a6ba5aa06848897b34ff9cd161ec7c8757e",
|
||||||
"https://deno.land/x/lume@v3.0.1/plugins/modules.ts": "4e177c0ffe972b9deef10db2bf0ae52b405418af4dbac03db9e7ffbd6a3ec6ae",
|
"https://deno.land/x/lume@v3.0.1/plugins/modules.ts": "4e177c0ffe972b9deef10db2bf0ae52b405418af4dbac03db9e7ffbd6a3ec6ae",
|
||||||
"https://deno.land/x/lume@v3.0.1/plugins/nav.ts": "505b2140d35c992e05b471f34e7b9f38ddd1cd13d588eb9fb3622ce59592ccac",
|
"https://deno.land/x/lume@v3.0.1/plugins/nav.ts": "505b2140d35c992e05b471f34e7b9f38ddd1cd13d588eb9fb3622ce59592ccac",
|
||||||
"https://deno.land/x/lume@v3.0.1/plugins/paginate.ts": "6a1a9a24d0fabed2f722a6a6f29d98559219c69475685034181816e82d367f2e",
|
"https://deno.land/x/lume@v3.0.1/plugins/paginate.ts": "6a1a9a24d0fabed2f722a6a6f29d98559219c69475685034181816e82d367f2e",
|
||||||
"https://deno.land/x/lume@v3.0.1/plugins/search.ts": "5acb5be828bbbd012fb9226cb97ec3e370d43d05aa44d16e7e7d50bab368b442",
|
"https://deno.land/x/lume@v3.0.1/plugins/search.ts": "5acb5be828bbbd012fb9226cb97ec3e370d43d05aa44d16e7e7d50bab368b442",
|
||||||
|
"https://deno.land/x/lume@v3.0.1/plugins/slugify_urls.ts": "ec2a78b13f094d99c90d1789149d98a60ea39297cbdc1d514fd267d8c8a42b85",
|
||||||
"https://deno.land/x/lume@v3.0.1/plugins/toml.ts": "e5bf35ed4915587acd453f002b00ae9b88c1782cadc25c703d7642a390af43ea",
|
"https://deno.land/x/lume@v3.0.1/plugins/toml.ts": "e5bf35ed4915587acd453f002b00ae9b88c1782cadc25c703d7642a390af43ea",
|
||||||
"https://deno.land/x/lume@v3.0.1/plugins/url.ts": "15f2e80b6fcbf86f8795a3676b8d533bab003ac016ff127e58165a6ac3bffc1a",
|
"https://deno.land/x/lume@v3.0.1/plugins/url.ts": "15f2e80b6fcbf86f8795a3676b8d533bab003ac016ff127e58165a6ac3bffc1a",
|
||||||
"https://deno.land/x/lume@v3.0.1/plugins/vento.ts": "d74100c7168d49b3817559792c9a8fd1d380b3244051d92dfebc7531cb8b7665",
|
"https://deno.land/x/lume@v3.0.1/plugins/vento.ts": "d74100c7168d49b3817559792c9a8fd1d380b3244051d92dfebc7531cb8b7665",
|
||||||
|
|||||||
@@ -27,7 +27,6 @@
|
|||||||
pkgs.nil # Nix language server
|
pkgs.nil # Nix language server
|
||||||
pkgs.nixfmt-rfc-style
|
pkgs.nixfmt-rfc-style
|
||||||
pkgs.typst
|
pkgs.typst
|
||||||
pkgs.pandoc
|
|
||||||
pkgs.tinymist
|
pkgs.tinymist
|
||||||
pkgs.vscode-css-languageserver
|
pkgs.vscode-css-languageserver
|
||||||
];
|
];
|
||||||
|
|||||||
1
icons/codeberg.svg
Normal file
1
icons/codeberg.svg
Normal file
@@ -0,0 +1 @@
|
|||||||
|
<svg class="text-icon" role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><title>Codeberg</title><path d="M11.999.747A11.974 11.974 0 0 0 0 12.75c0 2.254.635 4.465 1.833 6.376L11.837 6.19c.072-.092.251-.092.323 0l4.178 5.402h-2.992l.065.239h3.113l.882 1.138h-3.674l.103.374h3.86l.777 1.003h-4.358l.135.483h4.593l.695.894h-5.038l.165.589h5.326l.609.785h-5.717l.182.65h6.038l.562.727h-6.397l.183.65h6.717A12.003 12.003 0 0 0 24 12.75 11.977 11.977 0 0 0 11.999.747zm3.654 19.104.182.65h5.326c.173-.204.353-.433.513-.65zm.385 1.377.18.65h3.563c.233-.198.485-.428.712-.65zm.383 1.377.182.648h1.203c.356-.204.685-.412 1.042-.648zz"/></svg>
|
||||||
|
After Width: | Height: | Size: 650 B |
1
icons/gitea.svg
Normal file
1
icons/gitea.svg
Normal file
@@ -0,0 +1 @@
|
|||||||
|
<svg class="text-icon" role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><title>Gitea</title><path d="M4.209 4.603c-.247 0-.525.02-.84.088-.333.07-1.28.283-2.054 1.027C-.403 7.25.035 9.685.089 10.052c.065.446.263 1.687 1.21 2.768 1.749 2.141 5.513 2.092 5.513 2.092s.462 1.103 1.168 2.119c.955 1.263 1.936 2.248 2.89 2.367 2.406 0 7.212-.004 7.212-.004s.458.004 1.08-.394c.535-.324 1.013-.893 1.013-.893s.492-.527 1.18-1.73c.21-.37.385-.729.538-1.068 0 0 2.107-4.471 2.107-8.823-.042-1.318-.367-1.55-.443-1.627-.156-.156-.366-.153-.366-.153s-4.475.252-6.792.306c-.508.011-1.012.023-1.512.027v4.474l-.634-.301c0-1.39-.004-4.17-.004-4.17-1.107.016-3.405-.084-3.405-.084s-5.399-.27-5.987-.324c-.187-.011-.401-.032-.648-.032zm.354 1.832h.111s.271 2.269.6 3.597C5.549 11.147 6.22 13 6.22 13s-.996-.119-1.641-.348c-.99-.324-1.409-.714-1.409-.714s-.73-.511-1.096-1.52C1.444 8.73 2.021 7.7 2.021 7.7s.32-.859 1.47-1.145c.395-.106.863-.12 1.072-.12zm8.33 2.554c.26.003.509.127.509.127l.868.422-.529 1.075a.686.686 0 0 0-.614.359.685.685 0 0 0 .072.756l-.939 1.924a.69.69 0 0 0-.66.527.687.687 0 0 0 .347.763.686.686 0 0 0 .867-.206.688.688 0 0 0-.069-.882l.916-1.874a.667.667 0 0 0 .237-.02.657.657 0 0 0 .271-.137 8.826 8.826 0 0 1 1.016.512.761.761 0 0 1 .286.282c.073.21-.073.569-.073.569-.087.29-.702 1.55-.702 1.55a.692.692 0 0 0-.676.477.681.681 0 1 0 1.157-.252c.073-.141.141-.282.214-.431.19-.397.515-1.16.515-1.16.035-.066.218-.394.103-.814-.095-.435-.48-.638-.48-.638-.467-.301-1.116-.58-1.116-.58s0-.156-.042-.27a.688.688 0 0 0-.148-.241l.516-1.062 2.89 1.401s.48.218.583.619c.073.282-.019.534-.069.657-.24.587-2.1 4.317-2.1 4.317s-.232.554-.748.588a1.065 1.065 0 0 1-.393-.045l-.202-.08-4.31-2.1s-.417-.218-.49-.596c-.083-.31.104-.691.104-.691l2.073-4.272s.183-.37.466-.497a.855.855 0 0 1 .35-.077z"/></svg>
|
||||||
|
After Width: | Height: | Size: 1.8 KiB |
1
icons/github.svg
Normal file
1
icons/github.svg
Normal file
@@ -0,0 +1 @@
|
|||||||
|
<svg class="text-icon" role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><title>GitHub</title><path d="M12 .297c-6.63 0-12 5.373-12 12 0 5.303 3.438 9.8 8.205 11.385.6.113.82-.258.82-.577 0-.285-.01-1.04-.015-2.04-3.338.724-4.042-1.61-4.042-1.61C4.422 18.07 3.633 17.7 3.633 17.7c-1.087-.744.084-.729.084-.729 1.205.084 1.838 1.236 1.838 1.236 1.07 1.835 2.809 1.305 3.495.998.108-.776.417-1.305.76-1.605-2.665-.3-5.466-1.332-5.466-5.93 0-1.31.465-2.38 1.235-3.22-.135-.303-.54-1.523.105-3.176 0 0 1.005-.322 3.3 1.23.96-.267 1.98-.399 3-.405 1.02.006 2.04.138 3 .405 2.28-1.552 3.285-1.23 3.285-1.23.645 1.653.24 2.873.12 3.176.765.84 1.23 1.91 1.23 3.22 0 4.61-2.805 5.625-5.475 5.92.42.36.81 1.096.81 2.22 0 1.606-.015 2.896-.015 3.286 0 .315.21.69.825.57C20.565 22.092 24 17.592 24 12.297c0-6.627-5.373-12-12-12"/></svg>
|
||||||
|
After Width: | Height: | Size: 841 B |
1
icons/gitlab.svg
Normal file
1
icons/gitlab.svg
Normal file
@@ -0,0 +1 @@
|
|||||||
|
<svg class="text-icon" role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><title>GitLab</title><path d="m23.6004 9.5927-.0337-.0862L20.3.9814a.851.851 0 0 0-.3362-.405.8748.8748 0 0 0-.9997.0539.8748.8748 0 0 0-.29.4399l-2.2055 6.748H7.5375l-2.2057-6.748a.8573.8573 0 0 0-.29-.4412.8748.8748 0 0 0-.9997-.0537.8585.8585 0 0 0-.3362.4049L.4332 9.5015l-.0325.0862a6.0657 6.0657 0 0 0 2.0119 7.0105l.0113.0087.03.0213 4.976 3.7264 2.462 1.8633 1.4995 1.1321a1.0085 1.0085 0 0 0 1.2197 0l1.4995-1.1321 2.4619-1.8633 5.006-3.7489.0125-.01a6.0682 6.0682 0 0 0 2.0094-7.003z"/></svg>
|
||||||
|
After Width: | Height: | Size: 592 B |
63
icons/radicle.svg
Normal file
63
icons/radicle.svg
Normal file
@@ -0,0 +1,63 @@
|
|||||||
|
<svg class="text-icon" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 44 44" fill="none">
|
||||||
|
<g shape-rendering="crispEdges">
|
||||||
|
<rect x="8" y="0" width="4" height="4" fill="#5555FF"/>
|
||||||
|
<rect x="32" y="0" width="4" height="4" fill="#5555FF"/>
|
||||||
|
<rect x="12" y="4" width="4" height="4" fill="#5555FF"/>
|
||||||
|
<rect x="28" y="4" width="4" height="4" fill="#5555FF"/>
|
||||||
|
<rect x="12" y="8" width="4" height="4" fill="#5555FF"/>
|
||||||
|
<rect x="16" y="8" width="4" height="4" fill="#3333DD"/>
|
||||||
|
<rect x="20" y="8" width="4" height="4" fill="#5555FF"/>
|
||||||
|
<rect x="24" y="8" width="4" height="4" fill="#3333DD"/>
|
||||||
|
<rect x="28" y="8" width="4" height="4" fill="#5555FF"/>
|
||||||
|
<rect x="8" y="12" width="4" height="4" fill="#5555FF"/>
|
||||||
|
<rect x="12" y="12" width="4" height="4" fill="#5555FF"/>
|
||||||
|
<rect x="16" y="12" width="4" height="4" fill="#5555FF"/>
|
||||||
|
<rect x="20" y="12" width="4" height="4" fill="#5555FF"/>
|
||||||
|
<rect x="24" y="12" width="4" height="4" fill="#5555FF"/>
|
||||||
|
<rect x="28" y="12" width="4" height="4" fill="#5555FF"/>
|
||||||
|
<rect x="32" y="12" width="4" height="4" fill="#5555FF"/>
|
||||||
|
<rect x="4" y="16" width="4" height="4" fill="#5555FF"/>
|
||||||
|
<rect x="8" y="16" width="4" height="4" fill="#5555FF"/>
|
||||||
|
<rect x="12" y="16" width="4" height="4" fill="#F4F4F4"/>
|
||||||
|
<rect x="16" y="16" width="4" height="4" fill="#F4F4F4"/>
|
||||||
|
<rect x="20" y="16" width="4" height="4" fill="#5555FF"/>
|
||||||
|
<rect x="24" y="16" width="4" height="4" fill="#5555FF"/>
|
||||||
|
<rect x="28" y="16" width="4" height="4" fill="#F4F4F4"/>
|
||||||
|
<rect x="32" y="16" width="4" height="4" fill="#F4F4F4"/>
|
||||||
|
<rect x="36" y="16" width="4" height="4" fill="#5555FF"/>
|
||||||
|
<rect x="4" y="20" width="4" height="4" fill="#5555FF"/>
|
||||||
|
<rect x="8" y="20" width="4" height="4" fill="#5555FF"/>
|
||||||
|
<rect x="12" y="20" width="4" height="4" fill="#F4F4F4"/>
|
||||||
|
<rect x="16" y="20" width="4" height="4" fill="#FF55FF"/>
|
||||||
|
<rect x="20" y="20" width="4" height="4" fill="#5555FF"/>
|
||||||
|
<rect x="24" y="20" width="4" height="4" fill="#5555FF"/>
|
||||||
|
<rect x="28" y="20" width="4" height="4" fill="#F4F4F4"/>
|
||||||
|
<rect x="32" y="20" width="4" height="4" fill="#FF55FF"/>
|
||||||
|
<rect x="36" y="20" width="4" height="4" fill="#5555FF"/>
|
||||||
|
<rect x="0" y="24" width="4" height="4" fill="#3333DD"/>
|
||||||
|
<rect x="4" y="24" width="4" height="4" fill="#3333DD"/>
|
||||||
|
<rect x="8" y="24" width="4" height="4" fill="#3333DD"/>
|
||||||
|
<rect x="12" y="24" width="4" height="4" fill="#3333DD"/>
|
||||||
|
<rect x="16" y="24" width="4" height="4" fill="#3333DD"/>
|
||||||
|
<rect x="20" y="24" width="4" height="4" fill="#3333DD"/>
|
||||||
|
<rect x="24" y="24" width="4" height="4" fill="#3333DD"/>
|
||||||
|
<rect x="28" y="24" width="4" height="4" fill="#3333DD"/>
|
||||||
|
<rect x="32" y="24" width="4" height="4" fill="#3333DD"/>
|
||||||
|
<rect x="36" y="24" width="4" height="4" fill="#3333DD"/>
|
||||||
|
<rect x="40" y="24" width="4" height="4" fill="#3333DD"/>
|
||||||
|
<rect x="8" y="28" width="4" height="4" fill="#3333DD"/>
|
||||||
|
<rect x="16" y="28" width="4" height="4" fill="#5555FF"/>
|
||||||
|
<rect x="24" y="28" width="4" height="4" fill="#5555FF"/>
|
||||||
|
<rect x="32" y="28" width="4" height="4" fill="#3333DD"/>
|
||||||
|
<rect x="8" y="32" width="4" height="4" fill="#3333DD"/>
|
||||||
|
<rect x="16" y="32" width="4" height="4" fill="#5555FF"/>
|
||||||
|
<rect x="24" y="32" width="4" height="4" fill="#5555FF"/>
|
||||||
|
<rect x="32" y="32" width="4" height="4" fill="#3333DD"/>
|
||||||
|
<rect x="16" y="36" width="4" height="4" fill="#5555FF"/>
|
||||||
|
<rect x="24" y="36" width="4" height="4" fill="#5555FF"/>
|
||||||
|
<rect x="12" y="40" width="4" height="4" fill="#5555FF"/>
|
||||||
|
<rect x="16" y="40" width="4" height="4" fill="#5555FF"/>
|
||||||
|
<rect x="24" y="40" width="4" height="4" fill="#5555FF"/>
|
||||||
|
<rect x="28" y="40" width="4" height="4" fill="#5555FF"/>
|
||||||
|
</g>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 3.7 KiB |
1
icons/sourcehut.svg
Normal file
1
icons/sourcehut.svg
Normal file
@@ -0,0 +1 @@
|
|||||||
|
<svg class="text-icon" role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><title>SourceHut</title><path d="M12 0C5.371 0 0 5.371 0 12s5.371 12 12 12 12-5.371 12-12S18.629 0 12 0Zm0 21.677A9.675 9.675 0 0 1 2.323 12 9.675 9.675 0 0 1 12 2.323 9.675 9.675 0 0 1 21.677 12 9.675 9.675 0 0 1 12 21.677Z"/></svg>
|
||||||
|
After Width: | Height: | Size: 323 B |
16
index.dj
Normal file
16
index.dj
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
# rpqt's web corner
|
||||||
|
|
||||||
|
Hi! I'm Romain, a computer science student at [Ensimag][] engineering school.
|
||||||
|
|
||||||
|
I'm interested in many aspects of IT so I try to play a little bit with
|
||||||
|
everything. I love Rust, Nix, Zig, TS and other cool tech.
|
||||||
|
|
||||||
|
## Temporary index
|
||||||
|
|
||||||
|
- [What I'm doing now](./now.dj)
|
||||||
|
- [Projects](./projects)
|
||||||
|
- [Socials](./socials.dj)
|
||||||
|
- [Stuff I use](./uses.dj)
|
||||||
|
- [Résumé/CV (public version)](./résumé/)
|
||||||
|
|
||||||
|
[Ensimag]: https://ensimag.grenoble-inp.fr
|
||||||
13
index.md
13
index.md
@@ -1,13 +0,0 @@
|
|||||||
---
|
|
||||||
layout: layouts/main.vto
|
|
||||||
title: rpqt's web corner
|
|
||||||
---
|
|
||||||
|
|
||||||
# rpqt's web corner
|
|
||||||
|
|
||||||
Hi! I'm Romain, a computer science student at [Ensimag] engineering school.
|
|
||||||
|
|
||||||
I'm interested in many aspects of IT so I try to play a little bit with
|
|
||||||
everything. I love Rust, Nix, Zig, TS and other cool tech.
|
|
||||||
|
|
||||||
[Ensimag]: https://ensimag.grenoble-inp.fr
|
|
||||||
5
now.dj
Normal file
5
now.dj
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
# What I'm up to
|
||||||
|
|
||||||
|
- I am doing an exchange at [AGH][], in Kraków 🇵🇱, from October 2025 to February 2026.
|
||||||
|
|
||||||
|
[AGH]: https://www.agh.edu.pl/en/
|
||||||
5
now.md
5
now.md
@@ -1,5 +0,0 @@
|
|||||||
# What I'm up to
|
|
||||||
|
|
||||||
- I am doing an exchange at [AGH], in Kraków 🇵🇱, from October 2025 to February 2026.
|
|
||||||
|
|
||||||
[AGH]: https://www.agh.edu.pl/en/
|
|
||||||
12
projects.md
12
projects.md
@@ -1,12 +0,0 @@
|
|||||||
# Projects
|
|
||||||
|
|
||||||
## Lila
|
|
||||||
|
|
||||||
A simple programming language. It uses [Cranelift] as a compiler backend.
|
|
||||||
|
|
||||||
## Myrtle
|
|
||||||
|
|
||||||
A note-taking helper similar to [zk].
|
|
||||||
|
|
||||||
[Cranelift]: https://cranelift.dev
|
|
||||||
[zk]: https://zk-org.github.io/zk
|
|
||||||
17
projects/index.dj
Normal file
17
projects/index.dj
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
# Projects
|
||||||
|
|
||||||
|
## [Lila](./lila.dj)
|
||||||
|
|
||||||
|
A simple programming language. It uses [Cranelift][] as a compiler backend.
|
||||||
|
|
||||||
|
## Myrtle
|
||||||
|
|
||||||
|
A note-taking helper similar to [zk][].
|
||||||
|
|
||||||
|
## Statice
|
||||||
|
|
||||||
|
A static site generator supporting [Djot][].
|
||||||
|
|
||||||
|
[Cranelift]: https://cranelift.dev
|
||||||
|
[Djot]: https://djot.net
|
||||||
|
[zk]: https://zk-org.github.io/zk
|
||||||
42
projects/lila.dj
Normal file
42
projects/lila.dj
Normal file
@@ -0,0 +1,42 @@
|
|||||||
|
# Lila
|
||||||
|
|
||||||
|
A simple programming language I make in my free time.
|
||||||
|
I'm trying to make it modular so I can easily try and compare different backends and tooling.
|
||||||
|
|
||||||
|
## Status
|
||||||
|
|
||||||
|
For now it can JIT-compile basic programs using [Cranelift][].
|
||||||
|
|
||||||
|
I'm still not decided on which language features I want to explore.
|
||||||
|
|
||||||
|
## Source mirrors
|
||||||
|
|
||||||
|
- :si-github: [GitHub](https://github.com/rpqt/lila)
|
||||||
|
- :si-gitea: [Gitea](https://git.turifer.dev/rpqt/lila)
|
||||||
|
- :si-sourcehut: [SourceHut](https://git.sr.ht/~rpqt/lila)
|
||||||
|
|
||||||
|
## Roadmap
|
||||||
|
|
||||||
|
### Parsing
|
||||||
|
|
||||||
|
- [x] Pest parser backend
|
||||||
|
- [ ] (wip) [Tree-sitter][] parser backend
|
||||||
|
|
||||||
|
- [ ] (wip) Tree-sitter grammar -- [git][tree-sitter-lila]
|
||||||
|
- [ ] (wip) Parser based on the tree-sitter grammar
|
||||||
|
|
||||||
|
### Static analysis
|
||||||
|
|
||||||
|
- [x] Basic type checking
|
||||||
|
|
||||||
|
### Codegen
|
||||||
|
|
||||||
|
- [x] (wip) Cranelift JIT compiler
|
||||||
|
- [x] Basic CLI
|
||||||
|
- [ ] Run the compiler on Wasm
|
||||||
|
- [ ] Wasm codegen
|
||||||
|
- [ ] REPL
|
||||||
|
|
||||||
|
[Cranelift]: https://cranelift.dev
|
||||||
|
[Tree-sitter]: https://tree-sitter.github.io/tree-sitter
|
||||||
|
[tree-sitter-lila]: https://git.sr.ht/~rpqt/tree-sitter-lila
|
||||||
@@ -36,7 +36,7 @@
|
|||||||
|
|
||||||
<center>
|
<center>
|
||||||
{{ for el of exp.stack }}
|
{{ for el of exp.stack }}
|
||||||
<span class="pl-badge">{{ el }}</span>
|
<span class="pl-badge pl-{{ el |> lowercasePL }}">{{ el }}</span>
|
||||||
{{ /for }}
|
{{ /for }}
|
||||||
</center>
|
</center>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
15
socials.dj
Normal file
15
socials.dj
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
## Forges
|
||||||
|
|
||||||
|
### :si-gitea: [My Gitea instance](https://git.turifer.dev/rpqt)
|
||||||
|
|
||||||
|
### :si-radicle: [Radicle node](https://app.radicle.xyz/nodes/radicle.rpqt.fr)
|
||||||
|
|
||||||
|
### :si-sourcehut: [SourceHut](https://git.sr.ht/~rpqt)
|
||||||
|
|
||||||
|
### :si-github: [GitHub](https://github.com/rpqt)
|
||||||
|
|
||||||
|
### :si-codeberg: [Codeberg](https://codeberg.org/rpqt)
|
||||||
|
|
||||||
|
### :si-gitlab: [GitLab](https://gitlab.com/rpqt)
|
||||||
|
|
||||||
|
### :si-gitlab: [GRICAD GitLab instance](https://gricad-gitlab.univ-grenoble-alpes.fr/paquetr)
|
||||||
@@ -1,9 +0,0 @@
|
|||||||
## Forges
|
|
||||||
|
|
||||||
- [My Gitea instance](https://git.turifer.dev/rpqt)
|
|
||||||
- [Radicle node](https://app.radicle.xyz/nodes/radicle.rpqt.fr)
|
|
||||||
- [SourceHut](https://git.sr.ht/~rpqt)
|
|
||||||
- [GitHub](https://github.com/rpqt)
|
|
||||||
- [Codeberg](https://codeberg.org/rpqt)
|
|
||||||
- [GitLab](https://gitlab.com/rpqt)
|
|
||||||
- [GRICAD GitLab instance](https://gricad-gitlab.univ-grenoble-alpes.fr/paquetr)
|
|
||||||
@@ -5,7 +5,7 @@
|
|||||||
--color-foreground-dimmed: color-mix(in srgb, var(--color-foreground), transparent 40%);
|
--color-foreground-dimmed: color-mix(in srgb, var(--color-foreground), transparent 40%);
|
||||||
/* --color-accent: #0692aa; */
|
/* --color-accent: #0692aa; */
|
||||||
--max-width: 900px;
|
--max-width: 900px;
|
||||||
--font-base-size: 20px;
|
--font-base-size: 1.25rem;
|
||||||
}
|
}
|
||||||
|
|
||||||
@media (prefers-color-scheme: dark) {
|
@media (prefers-color-scheme: dark) {
|
||||||
@@ -19,8 +19,7 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
body {
|
body {
|
||||||
/* font-family: "JetBrains Mono"; */
|
font-family: "Atkinson Hyperlegible Next";
|
||||||
font-family: "Atkinson Hyperlegible";
|
|
||||||
display: grid;
|
display: grid;
|
||||||
grid-template-rows: auto 1fr auto;
|
grid-template-rows: auto 1fr auto;
|
||||||
min-height: 100svh;
|
min-height: 100svh;
|
||||||
@@ -59,8 +58,6 @@ header>nav {
|
|||||||
text-decoration: underline;
|
text-decoration: underline;
|
||||||
}
|
}
|
||||||
|
|
||||||
#site-root {}
|
|
||||||
|
|
||||||
#header-nav-current {
|
#header-nav-current {
|
||||||
font-weight: bold;
|
font-weight: bold;
|
||||||
}
|
}
|
||||||
@@ -76,17 +73,6 @@ h3 {
|
|||||||
margin: 0.5em 0;
|
margin: 0.5em 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
h1::before { content: "#"; }
|
|
||||||
h2::before { content: "##"; }
|
|
||||||
h3::before { content: "###"; }
|
|
||||||
|
|
||||||
h1::before, h2::before, h3::before {
|
|
||||||
font-variant-ligatures: none;
|
|
||||||
margin-right: 0.3em;
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
|
|
||||||
footer {
|
footer {
|
||||||
width: 100%;
|
width: 100%;
|
||||||
text-align: center;
|
text-align: center;
|
||||||
@@ -109,9 +95,39 @@ footer {
|
|||||||
}
|
}
|
||||||
|
|
||||||
.pl-badge {
|
.pl-badge {
|
||||||
border: 1px solid;
|
--color: var(--color-foreground);
|
||||||
border-radius: 8px;
|
border-radius: 8px;
|
||||||
padding: 0.5em;
|
padding: 0em 0.5em;
|
||||||
margin: 0.25em;
|
margin: 0em;
|
||||||
display: inline-block;
|
display: inline-block;
|
||||||
|
font-size: 0.9em;
|
||||||
|
background: color-mix(in srgb, var(--color), transparent 60%);
|
||||||
|
color: var(--color);
|
||||||
|
}
|
||||||
|
|
||||||
|
.pl-python3 {
|
||||||
|
--color: goldenrod;
|
||||||
|
background: color-mix(in srgb, gold, transparent 60%);
|
||||||
|
}
|
||||||
|
|
||||||
|
.pl-cpp {
|
||||||
|
--color: blue;
|
||||||
|
}
|
||||||
|
|
||||||
|
.pl-csharp {
|
||||||
|
--color: purple;
|
||||||
|
}
|
||||||
|
|
||||||
|
.pl-rust {
|
||||||
|
--color: orangered;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* An icon to be displayed within text, at the same size as the text */
|
||||||
|
.text-icon {
|
||||||
|
height: 1em;
|
||||||
|
width: 1em;
|
||||||
|
display: inline;
|
||||||
|
fill: var(--color-foreground);
|
||||||
|
position: relative;
|
||||||
|
top: .125em;
|
||||||
}
|
}
|
||||||
@@ -6,22 +6,22 @@ There are [lots of pages](https://uses.tech) like this one showing developer set
|
|||||||
|
|
||||||
### OS
|
### OS
|
||||||
|
|
||||||
I've used different Linux systems on my machines, mostly [Arch Linux] on my laptop.
|
I've used different Linux systems on my machines, mostly [Arch Linux][] on my laptop.
|
||||||
I recently joined the [_NixOS cult_ ❄️][NixOS], maybe you should too 👀.
|
I recently joined the [_NixOS cult_ ❄️][NixOS], maybe you should too 👀.
|
||||||
My handphone runs on [GrapheneOS].
|
My handphone runs on [GrapheneOS][].
|
||||||
|
|
||||||
### Apps
|
### Apps
|
||||||
|
|
||||||
- **Editor**: helix
|
- *Editor*: helix
|
||||||
- **Terminal**: alacritty, ghostty
|
- *Terminal*: alacritty, ghostty
|
||||||
- **Font**: JetBrains Mono
|
- *Font*: JetBrains Mono
|
||||||
- **Shell**: zsh
|
- *Shell*: zsh
|
||||||
- **Prompt**: starship
|
- *Prompt*: starship
|
||||||
- **History**: atuin
|
- *Shell history*: atuin
|
||||||
- **Other utils**: zoxide, direnv, rg
|
- *Other utils*: zoxide, direnv, rg
|
||||||
- **Web browser**: Firefox, Vanadium
|
- *Web browser*: Firefox, Vanadium
|
||||||
- **VPN**: Tailscale, Zerotier
|
- *VPN*: Tailscale, Zerotier
|
||||||
- **DNS**: Self-hosted [Unbound]
|
- *DNS*: Self-hosted [Unbound][]
|
||||||
|
|
||||||
## Hardware
|
## Hardware
|
||||||
|
|
||||||
@@ -33,7 +33,7 @@ My handphone is a Pixel 7a.
|
|||||||
|
|
||||||
### Keyboard
|
### Keyboard
|
||||||
|
|
||||||
I built a split mechanical keyboard, the (Ferris) [Sweep] LP, which I only use at home.
|
I built a split mechanical keyboard, the (Ferris) [Sweep][] LP, which I only use at home.
|
||||||
|
|
||||||
### Audio
|
### Audio
|
||||||
|
|
||||||
Reference in New Issue
Block a user