Compare commits
17 Commits
fd6a778d1f
...
main
| Author | SHA1 | Date | |
|---|---|---|---|
| bcdfe98c92 | |||
| bab803d538 | |||
| 9df992aba3 | |||
| df65ad1e10 | |||
| 9f58fc3c32 | |||
| f8f105a766 | |||
| 91aa5cc835 | |||
| 64bbaac403 | |||
| 7f94201212 | |||
| a085df81b4 | |||
| 6fdb515289 | |||
| 910038a5e3 | |||
| 47473a53b5 | |||
| 9a30210864 | |||
| 474d75f42d | |||
| 6fb0bbebbd | |||
| 4249085236 |
41
_config.ts
41
_config.ts
@@ -2,26 +2,57 @@ 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);
|
||||||
|
const decoder = new TextDecoder("utf-8");
|
||||||
|
const svg = decoder.decode(
|
||||||
|
Deno.readFileSync(`./icons/${iconName}.svg`),
|
||||||
|
);
|
||||||
|
return 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;
|
||||||
|
|||||||
114
_djot.ts
114
_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));
|
|
||||||
}
|
|
||||||
|
|
||||||
export default async function djotLoader(path: string | URL) {
|
|
||||||
const content = await Deno.readTextFile(path);
|
const content = await Deno.readTextFile(path);
|
||||||
|
|
||||||
const ast = djot.parse(content);
|
const ast = djot.parse(content);
|
||||||
|
|
||||||
djot.applyFilter(ast, () => {
|
|
||||||
return {
|
|
||||||
link: (el) => {
|
|
||||||
if (el.destination) {
|
|
||||||
el.destination = el.destination.replace(
|
|
||||||
/(\.dj)(#[^.\s]+)?$/,
|
|
||||||
(_match: string, _ext: string, section: string) => {
|
|
||||||
return section ? section : "";
|
|
||||||
},
|
|
||||||
);
|
|
||||||
}
|
|
||||||
},
|
|
||||||
};
|
|
||||||
});
|
|
||||||
|
|
||||||
const title = extractTitle(ast);
|
const title = extractTitle(ast);
|
||||||
const html = djot.renderHTML(ast);
|
|
||||||
|
|
||||||
return {
|
return {
|
||||||
title,
|
title,
|
||||||
content: html,
|
content,
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
const stripMarkupSourceLinks: Filter = () => {
|
||||||
|
return {
|
||||||
|
link: (el: djot.Link) => {
|
||||||
|
if (el.destination) {
|
||||||
|
el.destination = el.destination.replace(
|
||||||
|
/(.(?:dj|md))(#[^.\s]+)?$/,
|
||||||
|
(_match: string, _ext: string, section: string) => {
|
||||||
|
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);
|
||||||
|
});
|
||||||
|
|
||||||
|
return djot.renderHTML(
|
||||||
|
content,
|
||||||
|
this.renderOptions,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
addHelper() {}
|
||||||
|
|
||||||
|
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
|
||||||
@@ -1,4 +0,0 @@
|
|||||||
fr: |
|
|
||||||
Je suis étudiant en troisième année d’école d’ingénieur en informatique et mathématiques appliquées (M2). J’ai un fort intérêt pour les systèmes et leur architecture, la cybersécurité, le réseau, l’infrastructure et le développement. Je suis en recherche d'un stage de fin d'études de 5-6 mois qui me permettrait d'appliquer mes connaissances.
|
|
||||||
en: |
|
|
||||||
I’m a third year student (M2) in computer science and engineering school. I’m interested in multiple fields: systems, architecture, cybersecurity, networking, infrastructure and development. I fuel this long-standing passion in my personal time. I am looking for a 5-6 months end-of-studies internship that will allow me apply my knowledge to real problems.
|
|
||||||
@@ -1,8 +0,0 @@
|
|||||||
title:
|
|
||||||
fr: Compétences
|
|
||||||
en: Skills
|
|
||||||
priority: 3
|
|
||||||
content: |
|
|
||||||
- *C*, *Rust*, *C++*, *Java*, *Python*, *C\#*, Zig, TS, OCaml, Lua
|
|
||||||
- Unix, Shell, Git, GDB, Docker, Nix, React, SQL, QEMU, Terraform, CMake, Gitlab CI, Buildbot, QNX, FreeRTOS, CUDA
|
|
||||||
- RISC-V, ARMv7, AArch64, x86_64
|
|
||||||
2
résumé/.gitignore
vendored
Normal file
2
résumé/.gitignore
vendored
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
*.pdf
|
||||||
|
profile-circle.png
|
||||||
6
résumé/Makefile
Normal file
6
résumé/Makefile
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
data := $(wildcard _data/**/*.yml)
|
||||||
|
|
||||||
|
all: all.pdf fr.pdf en.pdf
|
||||||
|
|
||||||
|
%.pdf: %.typ main.typ $(data)
|
||||||
|
typst compile $*.typ
|
||||||
5
résumé/README.md
Normal file
5
résumé/README.md
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
# Résumé
|
||||||
|
|
||||||
|
To build the PDF versions, simply `make`. Before that, the profile picture
|
||||||
|
should be in this directory under the path `profile-circle.png`, since it is
|
||||||
|
not checked out for privacy.
|
||||||
4
résumé/_data/introduction.yml
Normal file
4
résumé/_data/introduction.yml
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
fr: |
|
||||||
|
Je suis étudiant en 3#super[ème] année d’école d’ingénieur en informatique et mathématiques appliquées (M2). J’ai un fort intérêt pour les systèmes et leur architecture, la cybersécurité, le réseau, l’infrastructure et le développement. Je suis en recherche d'un stage de fin d'études de 5-6 mois qui me permettrait d'appliquer mes connaissances à de vrais problèmes.
|
||||||
|
en: |
|
||||||
|
I’m a 3#super[rd] year student (M2) in computer science and engineering school. I’m interested in multiple fields: systems, architecture, cybersecurity, networking, infrastructure and development. I fuel this long-standing passion in my personal time. I am looking for a 5-6 months end-of-studies internship that will allow me apply my knowledge to real problems.
|
||||||
@@ -59,8 +59,8 @@ items:
|
|||||||
end: 09/2022
|
end: 09/2022
|
||||||
description:
|
description:
|
||||||
context:
|
context:
|
||||||
fr: Laboratoire de recherche, dans le cadre du dispositif des stages d’excellence de l’Université Grenoble Alpes.
|
fr: Laboratoire de recherche, dans le cadre des stages d’excellence de l’Université Grenoble Alpes.
|
||||||
en: Research laboratory internship for the “stage d’excellence” program at Université Grenoble Alpes
|
en: Research laboratory internship for the “stage d’excellence” program at Université Grenoble Alpes
|
||||||
tasks:
|
tasks:
|
||||||
fr:
|
fr:
|
||||||
- Connecter les outils du VERIMAG avec des environnements d’apprentissage par renforcement (OpenAI Gym)
|
- Connecter les outils du VERIMAG avec des environnements d’apprentissage par renforcement (OpenAI Gym)
|
||||||
9
résumé/_data/sections/skills.yml
Normal file
9
résumé/_data/sections/skills.yml
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
title:
|
||||||
|
fr: Compétences
|
||||||
|
en: Skills
|
||||||
|
priority: 3
|
||||||
|
content: |
|
||||||
|
- *C*, *Rust*, *C++*, *Java*, *Python*, *C\#*, Zig, TS, OCaml, Lua, Shell, SQL
|
||||||
|
- Linux, FreeBSD, QNX, FreeRTOS, QEMU, Docker, React
|
||||||
|
- *Git*, *CMake*, *Nix*, *GDB*, Gitlab CI, Buildbot, Terraform, CUDA, OpenCL
|
||||||
|
- RISC-V, ARMv7, AArch64, x86
|
||||||
@@ -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>
|
||||||
3
résumé/all.typ
Normal file
3
résumé/all.typ
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
#import "main.typ": mkCV
|
||||||
|
#let languages = ("fr", "en")
|
||||||
|
#languages.map(mkCV).join()
|
||||||
2
résumé/en.typ
Normal file
2
résumé/en.typ
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
#import "main.typ": mkCV
|
||||||
|
#mkCV("en")
|
||||||
2
résumé/fr.typ
Normal file
2
résumé/fr.typ
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
#import "main.typ": mkCV
|
||||||
|
#mkCV("fr")
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
#import "localize.typ": localize
|
#import "localize.typ": localize
|
||||||
|
|
||||||
#let languages = ("fr", "en")
|
#let mkCV(language) = [
|
||||||
|
|
||||||
#set page(
|
#set page(
|
||||||
paper: "a4",
|
paper: "a4",
|
||||||
@@ -8,24 +8,19 @@
|
|||||||
margin: 10mm,
|
margin: 10mm,
|
||||||
)
|
)
|
||||||
|
|
||||||
#languages.map(language => [
|
|
||||||
|
|
||||||
#set text(lang: language)
|
#set text(lang: language)
|
||||||
#let accent-color = rgb(0x06, 0x92, 0xaa, 255)
|
#let accent-color = rgb(0x06, 0x92, 0xaa, 255)
|
||||||
|
|
||||||
#let load-section(path) = localize(language, yaml(path))
|
#let load(path) = localize(language, yaml(path))
|
||||||
|
|
||||||
#let education = load-section("_data/sections/education.yml")
|
#let education = load("_data/sections/education.yml")
|
||||||
#let experiences = load-section("_data/sections/experiences.yml")
|
#let experiences = load("_data/sections/experiences.yml")
|
||||||
#let hobbies = load-section("_data/sections/hobbies.yml")
|
#let hobbies = load("_data/sections/hobbies.yml")
|
||||||
#let languages = load-section("_data/sections/languages.yml")
|
#let languages = load("_data/sections/languages.yml")
|
||||||
#let skills = load-section("_data/sections/skills.yml")
|
#let skills = load("_data/sections/skills.yml")
|
||||||
#let introduction = load-section("_data/introduction.yml")
|
#let introduction = load("_data/introduction.yml")
|
||||||
|
#let contact = yaml("_data/contact.yml")
|
||||||
#let data = yaml("data.yml")
|
#let words = load("_data/words.yml")
|
||||||
#let words = localize(language, yaml("_data/words.yml"))
|
|
||||||
|
|
||||||
#let tr(key) = key.split(".").fold(words, (d, k) => d.at(k)).at(language)
|
|
||||||
|
|
||||||
#let date-range(date) = [ #date.begin --- #date.end ]
|
#let date-range(date) = [ #date.begin --- #date.end ]
|
||||||
|
|
||||||
@@ -50,7 +45,7 @@
|
|||||||
1 Rue Auguste Renoir \
|
1 Rue Auguste Renoir \
|
||||||
38400 Saint-Martin-d'Hères \
|
38400 Saint-Martin-d'Hères \
|
||||||
(+33) 06 58 92 15 86 \
|
(+33) 06 58 92 15 86 \
|
||||||
#for email in data.emails [
|
#for email in contact.emails [
|
||||||
#link("mailto:" + email) \
|
#link("mailto:" + email) \
|
||||||
]
|
]
|
||||||
#link("https://rpqt.fr")
|
#link("https://rpqt.fr")
|
||||||
@@ -79,7 +74,7 @@
|
|||||||
scope: "parent",
|
scope: "parent",
|
||||||
[
|
[
|
||||||
#line(length: 100%)
|
#line(length: 100%)
|
||||||
#introduction
|
#eval(introduction, mode: "markup")
|
||||||
#line(length: 100%)
|
#line(length: 100%)
|
||||||
]
|
]
|
||||||
)
|
)
|
||||||
@@ -130,11 +125,11 @@
|
|||||||
#for hobby in hobbies.items [
|
#for hobby in hobbies.items [
|
||||||
#if hobby.keys().contains("items") [
|
#if hobby.keys().contains("items") [
|
||||||
*#hobby.name*
|
*#hobby.name*
|
||||||
#hobby.items.map(i => [ - #i]).join()
|
#hobby.items.map(i => [ - #eval(i, mode: "markup")]).join()
|
||||||
] else [
|
] else [
|
||||||
*#hobby.name* -- #hobby.at("content")
|
*#hobby.name* -- #eval(hobby.at("content"), mode: "markup")
|
||||||
]
|
]
|
||||||
|
|
||||||
]
|
]
|
||||||
|
|
||||||
]).join()
|
]
|
||||||
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