First version with notes
This commit is contained in:
parent
cb91e02327
commit
86aef1608b
45 changed files with 7075 additions and 0 deletions
24
.gitignore
vendored
Normal file
24
.gitignore
vendored
Normal file
|
@ -0,0 +1,24 @@
|
|||
# build output
|
||||
# dist/ # It's intentional to push the build
|
||||
|
||||
# generated types
|
||||
.astro/
|
||||
|
||||
# dependencies
|
||||
node_modules/
|
||||
|
||||
# logs
|
||||
npm-debug.log*
|
||||
yarn-debug.log*
|
||||
yarn-error.log*
|
||||
pnpm-debug.log*
|
||||
|
||||
# environment variables
|
||||
.env
|
||||
.env.production
|
||||
|
||||
# macOS-specific files
|
||||
.DS_Store
|
||||
|
||||
# jetbrains setting folder
|
||||
.idea/
|
4
.vscode/extensions.json
vendored
Normal file
4
.vscode/extensions.json
vendored
Normal file
|
@ -0,0 +1,4 @@
|
|||
{
|
||||
"recommendations": ["astro-build.astro-vscode"],
|
||||
"unwantedRecommendations": []
|
||||
}
|
11
.vscode/launch.json
vendored
Normal file
11
.vscode/launch.json
vendored
Normal file
|
@ -0,0 +1,11 @@
|
|||
{
|
||||
"version": "0.2.0",
|
||||
"configurations": [
|
||||
{
|
||||
"command": "./node_modules/.bin/astro dev",
|
||||
"name": "Development server",
|
||||
"request": "launch",
|
||||
"type": "node-terminal"
|
||||
}
|
||||
]
|
||||
}
|
12
astro.config.mjs
Normal file
12
astro.config.mjs
Normal file
|
@ -0,0 +1,12 @@
|
|||
// @ts-check
|
||||
import { defineConfig } from 'astro/config';
|
||||
import remarkAlert from 'remark-github-blockquote-alert';
|
||||
|
||||
|
||||
// https://astro.build/config
|
||||
export default defineConfig({
|
||||
integrations: [],
|
||||
markdown: {
|
||||
remarkPlugins: [remarkAlert]
|
||||
}
|
||||
});
|
19
content.config.ts
Normal file
19
content.config.ts
Normal file
|
@ -0,0 +1,19 @@
|
|||
// 1. Import utilities from `astro:content`
|
||||
import { defineCollection, z } from "astro:content";
|
||||
|
||||
// 2. Import loader(s)
|
||||
import { glob, file } from "astro/loaders";
|
||||
|
||||
// 3. Define your collection(s)
|
||||
const notes = defineCollection({
|
||||
loader: glob({ pattern: "**/*.md", base: "./src/content/notes" }),
|
||||
schema: z.object({
|
||||
slug: z.string(),
|
||||
title: z.string(),
|
||||
createdAt: z.coerce.date(),
|
||||
updatedAt: z.coerce.date(),
|
||||
}),
|
||||
});
|
||||
|
||||
// 4. Export a single `collections` object to register your collection(s)
|
||||
export const collections = { notes };
|
4
dist/_astro/code-brackets.BU7QaIgc.svg
vendored
Normal file
4
dist/_astro/code-brackets.BU7QaIgc.svg
vendored
Normal file
|
@ -0,0 +1,4 @@
|
|||
<?xml version="1.0" encoding="utf-8"?><!-- Uploaded to: SVG Repo, www.svgrepo.com, Generator: SVG Repo Mixer Tools -->
|
||||
<svg width="800px" height="800px" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M8 8L3 12L8 16M16 16L21 12L16 8" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
</svg>
|
After Width: | Height: | Size: 339 B |
4
dist/_astro/note.BjCyRRIL.svg
vendored
Normal file
4
dist/_astro/note.BjCyRRIL.svg
vendored
Normal file
|
@ -0,0 +1,4 @@
|
|||
<?xml version="1.0" encoding="utf-8"?><!-- Uploaded to: SVG Repo, www.svgrepo.com, Generator: SVG Repo Mixer Tools -->
|
||||
<svg width="800px" height="800px" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M13 3H7C5.89543 3 5 3.89543 5 5V19C5 20.1046 5.89543 21 7 21H17C18.1046 21 19 20.1046 19 19V9M13 3L19 9M13 3V8C13 8.55228 13.4477 9 14 9H19M9 13H15M9 17H15" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
</svg>
|
After Width: | Height: | Size: 464 B |
14
dist/about/index.html
vendored
Normal file
14
dist/about/index.html
vendored
Normal file
|
@ -0,0 +1,14 @@
|
|||
<!DOCTYPE html><html lang="en"> <head><meta charset="UTF-8"><meta name="description" content="Evalyte"><meta name="viewport" content="width=device-width"><!--<link rel="icon" type="image/svg+xml" href="/favicon.svg" />--><meta name="generator" content="Astro v5.9.2"><title>Evalyte - About</title><script defer src="https://umami.evalyte.net/script.js" data-website-id="4fd77337-0f39-4eac-b19b-c09ebf8c8db3"></script><style>@font-face{font-family:Comfortaa;src:url(/fonts/Comfortaa-Regular.ttf);font-weight:400}@font-face{font-family:Comfortaa;src:url(/fonts/Comfortaa-Bold.ttf);font-weight:700}:root{--primary: #5d9eda;--secondary: #b1d0ee;--background: #282c34;--pane: #21252b;--surface: #31353f;--surface2: #51555f;--text: #d1d1d1;--headline: #ffffff;--hint: #797979;color:var(--text);--default-gap: 16px}a{text-decoration:none;color:var(--secondary)}nav>a{color:var(--text)}body{margin:0;min-height:100vh;display:flex;flex-direction:column}html{margin:0;font-family:system-ui,sans-serif;background:var(--background)}main{flex:1}header{background:var(--pane)}header>div{display:flex;flex-direction:row;align-items:center;justify-content:space-between;gap:2rem;margin:auto;padding:16px;font-family:Comfortaa;font-weight:700;font-size:1rem;@media (min-width: 1200px){width:1200px}}nav{display:flex;flex-direction:row;align-items:center;gap:2rem}#logo{font-size:2rem;color:var(--primary);text-wrap:nowrap}h1,h2,h3,h4{font-family:Comfortaa;font-weight:400;color:var(--headline);padding:0}h1{color:var(--primary);font-size:3rem}h2{font-size:2rem}h3{font-size:1.5rem}h4{font-size:1.25rem}code{font-family:Menlo,Monaco,Lucida Console,Liberation Mono,DejaVu Sans Mono,Bitstream Vera Sans Mono,Courier New,monospace}code:not(pre>code){background-color:#21252b;font-size:.9rem;padding:0 4px;border-radius:4px}.astro-code{padding:16px;max-width:80vw}pre{background-color:#21252b!important}.markdown-alert-title{margin-bottom:8px}footer{color:var(--hint);text-align:center;margin-bottom:16px}
|
||||
main[data-astro-cid-kh7btl4r]{margin:auto;padding:32px;width:800px;max-width:calc(100% - 2rem);display:flex;flex-direction:column}section[data-astro-cid-kh7btl4r]{display:flex;flex-direction:column}
|
||||
</style></head> <body> <header> <div> <a href="/" id="logo">> _</a> <nav> <a href="https://code.evalyte.net" target="_blank">Repositories</a> <!--<a href="/devlog">Devlog</a>--> <a href="/notes">Notes</a> <!--<a href="/utilities">Utilities</a>--> <!--<a href="/services">Services</a>--> <a href="/about">About</a> </nav> </div> </header> <main data-astro-cid-kh7btl4r> <section data-astro-cid-kh7btl4r> <h1 data-astro-cid-kh7btl4r>Hello, World</h1> <p data-astro-cid-kh7btl4r>
|
||||
I'm a self-taught developer who likes to create desktop & web applications, custom tools and sometimes games.<br data-astro-cid-kh7btl4r><br data-astro-cid-kh7btl4r>
|
||||
As I really like to understand how things work, I do a lot of projects and enjoy reinventing the wheel, creating my own software, this is the reason this website exists.
|
||||
</p> </section> <section data-astro-cid-kh7btl4r> <h1 data-astro-cid-kh7btl4r>What exactly is Evalyte ?</h1> <p data-astro-cid-kh7btl4r>
|
||||
Evalyte is the brand for my projects, a namespace, my lab and my way of sharing about software and open source, it's like my home, it's not my nickname.<br data-astro-cid-kh7btl4r><br data-astro-cid-kh7btl4r>
|
||||
You'll find here mostly desktop apps, web apps and other things related to tech.<br data-astro-cid-kh7btl4r><br data-astro-cid-kh7btl4r>
|
||||
Everything I make available here is free and open source, most are self-made but I might also host existing software.
|
||||
</p> </section> <section data-astro-cid-kh7btl4r> <h1 data-astro-cid-kh7btl4r>Want to contribute ?</h1> <p data-astro-cid-kh7btl4r>
|
||||
You can report issues or make suggestions,
|
||||
but I don't accept contributions in the form code or pull request, I want to stay the
|
||||
only owner and developer for now.
|
||||
</p> </section> </main> <footer>© 2024 Evalyte</footer> </body></html>
|
BIN
dist/fonts/Comfortaa-Bold.ttf
vendored
Normal file
BIN
dist/fonts/Comfortaa-Bold.ttf
vendored
Normal file
Binary file not shown.
BIN
dist/fonts/Comfortaa-Light.ttf
vendored
Normal file
BIN
dist/fonts/Comfortaa-Light.ttf
vendored
Normal file
Binary file not shown.
BIN
dist/fonts/Comfortaa-Medium.ttf
vendored
Normal file
BIN
dist/fonts/Comfortaa-Medium.ttf
vendored
Normal file
Binary file not shown.
BIN
dist/fonts/Comfortaa-Regular.ttf
vendored
Normal file
BIN
dist/fonts/Comfortaa-Regular.ttf
vendored
Normal file
Binary file not shown.
BIN
dist/fonts/Comfortaa-SemiBold.ttf
vendored
Normal file
BIN
dist/fonts/Comfortaa-SemiBold.ttf
vendored
Normal file
Binary file not shown.
9
dist/index.html
vendored
Normal file
9
dist/index.html
vendored
Normal file
|
@ -0,0 +1,9 @@
|
|||
<!DOCTYPE html><html lang="en"> <head><meta charset="UTF-8"><meta name="description" content="Evalyte"><meta name="viewport" content="width=device-width"><!--<link rel="icon" type="image/svg+xml" href="/favicon.svg" />--><meta name="generator" content="Astro v5.9.2"><title>Evalyte</title><script defer src="https://umami.evalyte.net/script.js" data-website-id="4fd77337-0f39-4eac-b19b-c09ebf8c8db3"></script><style>@font-face{font-family:Comfortaa;src:url(/fonts/Comfortaa-Regular.ttf);font-weight:400}@font-face{font-family:Comfortaa;src:url(/fonts/Comfortaa-Bold.ttf);font-weight:700}:root{--primary: #5d9eda;--secondary: #b1d0ee;--background: #282c34;--pane: #21252b;--surface: #31353f;--surface2: #51555f;--text: #d1d1d1;--headline: #ffffff;--hint: #797979;color:var(--text);--default-gap: 16px}a{text-decoration:none;color:var(--secondary)}nav>a{color:var(--text)}body{margin:0;min-height:100vh;display:flex;flex-direction:column}html{margin:0;font-family:system-ui,sans-serif;background:var(--background)}main{flex:1}header{background:var(--pane)}header>div{display:flex;flex-direction:row;align-items:center;justify-content:space-between;gap:2rem;margin:auto;padding:16px;font-family:Comfortaa;font-weight:700;font-size:1rem;@media (min-width: 1200px){width:1200px}}nav{display:flex;flex-direction:row;align-items:center;gap:2rem}#logo{font-size:2rem;color:var(--primary);text-wrap:nowrap}h1,h2,h3,h4{font-family:Comfortaa;font-weight:400;color:var(--headline);padding:0}h1{color:var(--primary);font-size:3rem}h2{font-size:2rem}h3{font-size:1.5rem}h4{font-size:1.25rem}code{font-family:Menlo,Monaco,Lucida Console,Liberation Mono,DejaVu Sans Mono,Bitstream Vera Sans Mono,Courier New,monospace}code:not(pre>code){background-color:#21252b;font-size:.9rem;padding:0 4px;border-radius:4px}.astro-code{padding:16px;max-width:80vw}pre{background-color:#21252b!important}.markdown-alert-title{margin-bottom:8px}footer{color:var(--hint);text-align:center;margin-bottom:16px}
|
||||
h4[data-astro-cid-md6ke2xi]{color:var(--text);text-align:center}p[data-astro-cid-md6ke2xi]{color:var(--text)}.card[data-astro-cid-md6ke2xi]{transition-duration:.5s;min-width:256px;border:1px solid var(--surface2);background:var(--surface);&:hover{box-shadow:inset 0 0 100px 100px #6464641a}padding:16px 32px;border-radius:8px;display:flex;flex-direction:row;align-items:center;gap:16px}.image[data-astro-cid-md6ke2xi]{color:var(--secondary);stroke:currentColor;width:64px;height:64px}.description[data-astro-cid-md6ke2xi]{text-align:center}h1[data-astro-cid-j7pv25f6]{margin:0}main[data-astro-cid-j7pv25f6]{padding-top:0;display:flex;flex-direction:column;gap:32px}#page-intro[data-astro-cid-j7pv25f6]{display:flex;flex-direction:column;align-items:center;gap:32px;padding:32px 32px 96px;background:var(--pane)}#content[data-astro-cid-j7pv25f6]{margin-left:auto;margin-right:auto;display:flex;flex-direction:column;align-items:center;gap:32px;@media (min-width: 1200px){width:1200px}}#description[data-astro-cid-j7pv25f6]{margin-bottom:32px}#firstline[data-astro-cid-j7pv25f6]{text-align:center;margin-top:32px;margin-bottom:32px}.presentation-section[data-astro-cid-j7pv25f6]{width:100%;display:flex;flex-direction:row;gap:32px}.image-text[data-astro-cid-j7pv25f6]{flex:1}.image-text[data-astro-cid-j7pv25f6] div[data-astro-cid-j7pv25f6]{display:flex;flex-direction:column;gap:32px;align-items:start;justify-content:center;padding:16px}.side-to-side-text[data-astro-cid-j7pv25f6]{flex:1;display:flex;flex-direction:column;gap:32px;align-items:start;justify-content:center;padding:16px}.button[data-astro-cid-j7pv25f6]{color:var(--secondary);background:none;border:1px solid var(--secondary);border-radius:8px;padding:8px 16px;font-size:1.5rem;cursor:pointer}.button[data-astro-cid-j7pv25f6]:hover{background-color:#b1d0ee09}h2[data-astro-cid-j7pv25f6]{color:var(--headline)}
|
||||
</style></head> <body> <header> <div> <a href="/" id="logo">> _</a> <nav> <a href="https://code.evalyte.net" target="_blank">Repositories</a> <!--<a href="/devlog">Devlog</a>--> <a href="/notes">Notes</a> <!--<a href="/utilities">Utilities</a>--> <!--<a href="/services">Services</a>--> <a href="/about">About</a> </nav> </div> </header> <main data-astro-cid-j7pv25f6> <div id="page-intro" data-astro-cid-j7pv25f6> <h1 data-astro-cid-j7pv25f6>Evalyte</h1> </div> <p id="firstline" data-astro-cid-j7pv25f6>
|
||||
Welcome, I'm <strong data-astro-cid-j7pv25f6>Vyn</strong>, and <strong data-astro-cid-j7pv25f6>Evalyte</strong> is my place where I share things, enjoy.
|
||||
</p> <div id="content" data-astro-cid-j7pv25f6> <a href="https://code.evalyte.net" target="_blank" class="card" data-astro-cid-md6ke2xi> <svg width="800px" height="800px" viewBox="0 0 24 24" fill="none" class="image" data-astro-cid-md6ke2xi="true">
|
||||
<path d="M8 8L3 12L8 16M16 16L21 12L16 8" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" />
|
||||
</svg> <div class="text" data-astro-cid-md6ke2xi> <h4 data-astro-cid-md6ke2xi> Repositories </h4> <!--<p class="description">--> <!--{description}--> <!--</p>--> </div> </a> <a href="/notes" target="_self" class="card" data-astro-cid-md6ke2xi> <svg width="800px" height="800px" viewBox="0 0 24 24" fill="none" class="image" data-astro-cid-md6ke2xi="true">
|
||||
<path d="M13 3H7C5.89543 3 5 3.89543 5 5V19C5 20.1046 5.89543 21 7 21H17C18.1046 21 19 20.1046 19 19V9M13 3L19 9M13 3V8C13 8.55228 13.4477 9 14 9H19M9 13H15M9 17H15" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" />
|
||||
</svg> <div class="text" data-astro-cid-md6ke2xi> <h4 data-astro-cid-md6ke2xi> Notes </h4> <!--<p class="description">--> <!--{description}--> <!--</p>--> </div> </a> <!--<PortalCategory title="Devlog" description="ok" href="/devlog" image={Devlog}/>--> </div> </main> <footer>© 2024 Evalyte</footer> </body></html>
|
5
dist/notes/index.html
vendored
Normal file
5
dist/notes/index.html
vendored
Normal file
|
@ -0,0 +1,5 @@
|
|||
<!DOCTYPE html><html lang="en"> <head><meta charset="UTF-8"><meta name="description" content="Evalyte"><meta name="viewport" content="width=device-width"><!--<link rel="icon" type="image/svg+xml" href="/favicon.svg" />--><meta name="generator" content="Astro v5.9.2"><title>Evalyte - Notes</title><script defer src="https://umami.evalyte.net/script.js" data-website-id="4fd77337-0f39-4eac-b19b-c09ebf8c8db3"></script><style>@font-face{font-family:Comfortaa;src:url(/fonts/Comfortaa-Regular.ttf);font-weight:400}@font-face{font-family:Comfortaa;src:url(/fonts/Comfortaa-Bold.ttf);font-weight:700}:root{--primary: #5d9eda;--secondary: #b1d0ee;--background: #282c34;--pane: #21252b;--surface: #31353f;--surface2: #51555f;--text: #d1d1d1;--headline: #ffffff;--hint: #797979;color:var(--text);--default-gap: 16px}a{text-decoration:none;color:var(--secondary)}nav>a{color:var(--text)}body{margin:0;min-height:100vh;display:flex;flex-direction:column}html{margin:0;font-family:system-ui,sans-serif;background:var(--background)}main{flex:1}header{background:var(--pane)}header>div{display:flex;flex-direction:row;align-items:center;justify-content:space-between;gap:2rem;margin:auto;padding:16px;font-family:Comfortaa;font-weight:700;font-size:1rem;@media (min-width: 1200px){width:1200px}}nav{display:flex;flex-direction:row;align-items:center;gap:2rem}#logo{font-size:2rem;color:var(--primary);text-wrap:nowrap}h1,h2,h3,h4{font-family:Comfortaa;font-weight:400;color:var(--headline);padding:0}h1{color:var(--primary);font-size:3rem}h2{font-size:2rem}h3{font-size:1.5rem}h4{font-size:1.25rem}code{font-family:Menlo,Monaco,Lucida Console,Liberation Mono,DejaVu Sans Mono,Bitstream Vera Sans Mono,Courier New,monospace}code:not(pre>code){background-color:#21252b;font-size:.9rem;padding:0 4px;border-radius:4px}.astro-code{padding:16px;max-width:80vw}pre{background-color:#21252b!important}.markdown-alert-title{margin-bottom:8px}footer{color:var(--hint);text-align:center;margin-bottom:16px}
|
||||
h4[data-astro-cid-dohjnao5]{color:var(--secondary);text-align:center}p[data-astro-cid-dohjnao5]{color:var(--text)}.card[data-astro-cid-dohjnao5]{border:1px solid var(--surface2);background:var(--surface);transition-duration:.5s;&:hover{box-shadow:inset 0 0 100px 100px #6464641a}padding-left:16px;padding-right:16px;border-radius:8px;display:flex;flex-direction:row;align-items:start;gap:16px}.date[data-astro-cid-dohjnao5]{margin-left:auto;align-self:end;color:var(--hint);margin-bottom:8px}main[data-astro-cid-mejek24l]{margin:auto;padding:32px;width:800px;max-width:calc(100% - 2rem);display:flex;flex-direction:column;align-items:center}#description[data-astro-cid-mejek24l]{text-align:center;margin-top:32px;margin-bottom:32px}#applications[data-astro-cid-mejek24l]{padding:32px;display:flex;flex-direction:column;width:100%;gap:16px}
|
||||
</style></head> <body> <header> <div> <a href="/" id="logo">> _</a> <nav> <a href="https://code.evalyte.net" target="_blank">Repositories</a> <!--<a href="/devlog">Devlog</a>--> <a href="/notes">Notes</a> <!--<a href="/utilities">Utilities</a>--> <!--<a href="/services">Services</a>--> <a href="/about">About</a> </nav> </div> </header> <main data-astro-cid-mejek24l> <h1 data-astro-cid-mejek24l>Notes</h1> <p id="description" data-astro-cid-mejek24l>
|
||||
Random things that might be useful.
|
||||
</p> <section id="applications" data-astro-cid-mejek24l> <a href="/notes/selfhost-forgejo-with-podman-without-quadlet" class="card" data-astro-cid-dohjnao5> <h4 data-astro-cid-dohjnao5>Selfhost Forgejo with Podman without Quadlet</h4> <div class="date" data-astro-cid-dohjnao5>6/11/2025</div> </a> <a href="/notes/quick-sort-algorithm" class="card" data-astro-cid-dohjnao5> <h4 data-astro-cid-dohjnao5>Quick Sort algorithm</h4> <div class="date" data-astro-cid-dohjnao5>2/1/2021</div> </a> </section> </main> <footer>© 2024 Evalyte</footer> </body></html>
|
51
dist/notes/quick-sort-algorithm/index.html
vendored
Normal file
51
dist/notes/quick-sort-algorithm/index.html
vendored
Normal file
|
@ -0,0 +1,51 @@
|
|||
<!DOCTYPE html><html lang="en"> <head><meta charset="UTF-8"><meta name="description" content="Evalyte"><meta name="viewport" content="width=device-width"><!--<link rel="icon" type="image/svg+xml" href="/favicon.svg" />--><meta name="generator" content="Astro v5.9.2"><title>undefined - Evalyte</title><script defer src="https://umami.evalyte.net/script.js" data-website-id="4fd77337-0f39-4eac-b19b-c09ebf8c8db3"></script><style>@media (prefers-color-scheme: dark){.markdown-alert{--color-border-default: #30363d;--color-accent-fg: #58a6ff;--color-accent-emphasis: #1f6feb;--color-danger-fg: #f85149;--color-danger-emphasis: #da3633;--color-attention-fg: #d29922;--color-attention-emphasis: #9e6a03;--color-done-fg: #a371f7;--color-done-emphasis: #8957e5;--color-success-fg: #3fb950;--color-success-emphasis: #238636}}@media (prefers-color-scheme: light){.markdown-alert{--color-border-default: #d0d7de;--color-accent-fg: #0969da;--color-accent-emphasis: #0969da;--color-danger-fg: #d1242f;--color-danger-emphasis: #cf222e;--color-attention-fg: #9a6700;--color-attention-emphasis: #9a6700;--color-done-fg: #8250df;--color-done-emphasis: #8250df;--color-success-fg: #1a7f37;--color-success-emphasis: #1f883d}}.markdown-alert{border-left:.25em solid var(--borderColor-default, var(--color-border-default));color:inherit;margin-bottom:16px;padding:.5rem 1em}.markdown-alert>:last-child{margin-bottom:0!important}.markdown-alert .markdown-alert-title{align-items:center;display:flex;font-size:14px;font-weight:500;line-height:1}.markdown-alert .markdown-alert-title svg.octicon{margin-right:8px!important;margin-right:var(--base-size-8,8px)!important;fill:currentColor}.markdown-alert.markdown-alert-note{border-left-color:var(--borderColor-accent-emphasis,var(--color-accent-emphasis))}.markdown-alert.markdown-alert-note .markdown-alert-title{color:var(--color-accent-fg);color:var(--fgColor-accent,var(--color-accent-fg))}.markdown-alert.markdown-alert-tip{border-left-color:var(--borderColor-success-emphasis,var(--color-success-emphasis))}.markdown-alert.markdown-alert-tip .markdown-alert-title{color:var(--color-success-fg);color:var(--fgColor-success,var(--color-success-fg))}.markdown-alert.markdown-alert-important{border-left-color:var(--borderColor-done-emphasis,var(--color-done-emphasis))}.markdown-alert.markdown-alert-important .markdown-alert-title{color:var(--color-done-fg);color:var(--fgColor-done,var(--color-done-fg))}.markdown-alert.markdown-alert-warning{border-left-color:var(--borderColor-attention-emphasis,var(--color-attention-emphasis))}.markdown-alert.markdown-alert-warning .markdown-alert-title{color:var(--color-attention-fg);color:var(--fgColor-attention,var(--color-attention-fg))}.markdown-alert.markdown-alert-caution{border-left-color:var(--borderColor-danger-emphasis,var(--color-danger-emphasis))}.markdown-alert.markdown-alert-caution .markdown-alert-title{color:var(--color-danger-fg);color:var(--fgColor-danger,var(--color-danger-fg))}main[data-astro-cid-hhdr4bp3]{padding:32px;display:flex;flex-direction:column;align-items:center;margin:auto;max-width:1200px;gap:32px}
|
||||
@font-face{font-family:Comfortaa;src:url(/fonts/Comfortaa-Regular.ttf);font-weight:400}@font-face{font-family:Comfortaa;src:url(/fonts/Comfortaa-Bold.ttf);font-weight:700}:root{--primary: #5d9eda;--secondary: #b1d0ee;--background: #282c34;--pane: #21252b;--surface: #31353f;--surface2: #51555f;--text: #d1d1d1;--headline: #ffffff;--hint: #797979;color:var(--text);--default-gap: 16px}a{text-decoration:none;color:var(--secondary)}nav>a{color:var(--text)}body{margin:0;min-height:100vh;display:flex;flex-direction:column}html{margin:0;font-family:system-ui,sans-serif;background:var(--background)}main{flex:1}header{background:var(--pane)}header>div{display:flex;flex-direction:row;align-items:center;justify-content:space-between;gap:2rem;margin:auto;padding:16px;font-family:Comfortaa;font-weight:700;font-size:1rem;@media (min-width: 1200px){width:1200px}}nav{display:flex;flex-direction:row;align-items:center;gap:2rem}#logo{font-size:2rem;color:var(--primary);text-wrap:nowrap}h1,h2,h3,h4{font-family:Comfortaa;font-weight:400;color:var(--headline);padding:0}h1{color:var(--primary);font-size:3rem}h2{font-size:2rem}h3{font-size:1.5rem}h4{font-size:1.25rem}code{font-family:Menlo,Monaco,Lucida Console,Liberation Mono,DejaVu Sans Mono,Bitstream Vera Sans Mono,Courier New,monospace}code:not(pre>code){background-color:#21252b;font-size:.9rem;padding:0 4px;border-radius:4px}.astro-code{padding:16px;max-width:80vw}pre{background-color:#21252b!important}.markdown-alert-title{margin-bottom:8px}footer{color:var(--hint);text-align:center;margin-bottom:16px}
|
||||
</style></head> <body> <header> <div> <a href="/" id="logo">> _</a> <nav> <a href="https://code.evalyte.net" target="_blank">Repositories</a> <!--<a href="/devlog">Devlog</a>--> <a href="/notes">Notes</a> <!--<a href="/utilities">Utilities</a>--> <!--<a href="/services">Services</a>--> <a href="/about">About</a> </nav> </div> </header> <main data-astro-cid-hhdr4bp3> <div style="display:flex;flex-direction:column;gap:var(--default-gap);justify-content:center;align-items:start"> <div style="display:flex;flex-direction:column;gap:var(--default-gap);justify-content:center;align-items:start"> <h1 data-astro-cid-hhdr4bp3>Quick Sort algorithm</h1> </div> <div style="flex:1"> <p data-astro-cid-hhdr4bp3> <p>To explain the Quick Sort algorithm, let’s take a simple example:</p>
|
||||
<p>We have an array of number (integer) in random order, but we want them in ascending order, so we have to sort them, here comes the Quick Sort algorithm.</p>
|
||||
<p><em>Note: The range of the numbers and the length of the array have no importance for the algorithm itself, but it will have a performance cost.</em></p>
|
||||
<h2 id="algorithm">Algorithm</h2>
|
||||
<p>Select a number, called “pivot”, chosen arbritrary from the array itself, put all the numbers lower than the pivot before it and all the numbers greater after it, split the current partition into 2 new partitions (the ones before and after the pivot), and repeat the procedure for each partition until there is no partition left (when the array length is 1).</p>
|
||||
<p>The Quick Sort algorithm steps are:</p>
|
||||
<ul>
|
||||
<li>Select a pivot value from the partition and move it at the end of the partition (P, the pivot value).</li>
|
||||
<li>Remember the start index of the current partition (S, the start index).</li>
|
||||
<li>for each element (E), if E is lower or equal than P, then swap value E with the value at index S, then increment S.</li>
|
||||
<li>Use the pivot P to divide the partition into 2 new partitions.</li>
|
||||
<li>Repeat the algorithm for the 2 newly created partitions until there is no partition left.</li>
|
||||
</ul>
|
||||
<h2 id="implementation">Implementation</h2>
|
||||
<h4 id="go">Go</h4>
|
||||
<pre class="astro-code github-dark" style="background-color:#24292e;color:#e1e4e8; overflow-x: auto;" tabindex="0" data-language="go"><code><span class="line"><span style="color:#F97583">func</span><span style="color:#B392F0"> Swap</span><span style="color:#E1E4E8">(</span><span style="color:#FFAB70">partition</span><span style="color:#E1E4E8"> []</span><span style="color:#F97583">int</span><span style="color:#E1E4E8">, </span><span style="color:#FFAB70">i</span><span style="color:#F97583"> int</span><span style="color:#E1E4E8">, </span><span style="color:#FFAB70">j</span><span style="color:#F97583"> int</span><span style="color:#E1E4E8">) {</span></span>
|
||||
<span class="line"><span style="color:#E1E4E8"> partition[i], partition[j] </span><span style="color:#F97583">=</span><span style="color:#E1E4E8"> partition[j], partition[i]</span></span>
|
||||
<span class="line"><span style="color:#E1E4E8">}</span></span>
|
||||
<span class="line"></span>
|
||||
<span class="line"><span style="color:#F97583">func</span><span style="color:#B392F0"> QuickSort</span><span style="color:#E1E4E8">(</span><span style="color:#FFAB70">partition</span><span style="color:#E1E4E8"> []</span><span style="color:#F97583">int</span><span style="color:#E1E4E8">) {</span></span>
|
||||
<span class="line"><span style="color:#B392F0"> Swap</span><span style="color:#E1E4E8">(partition, </span><span style="color:#B392F0">len</span><span style="color:#E1E4E8">(partition) </span><span style="color:#F97583">/</span><span style="color:#79B8FF"> 2</span><span style="color:#E1E4E8">, </span><span style="color:#B392F0">len</span><span style="color:#E1E4E8">(partition) </span><span style="color:#F97583">-</span><span style="color:#79B8FF"> 1</span><span style="color:#E1E4E8">) </span><span style="color:#6A737D">// Select the pivot from the middle (arbitrary) of the partition and swap it with the last element</span></span>
|
||||
<span class="line"></span>
|
||||
<span class="line"><span style="color:#E1E4E8"> startIndex </span><span style="color:#F97583">:=</span><span style="color:#79B8FF"> 0</span></span>
|
||||
<span class="line"><span style="color:#E1E4E8"> pivot </span><span style="color:#F97583">:=</span><span style="color:#E1E4E8"> partition[</span><span style="color:#B392F0">len</span><span style="color:#E1E4E8">(partition) </span><span style="color:#F97583">-</span><span style="color:#79B8FF"> 1</span><span style="color:#E1E4E8">] </span><span style="color:#6A737D">// Since we already swapped the pivot, we get the value directly from the end of the partition</span></span>
|
||||
<span class="line"></span>
|
||||
<span class="line"><span style="color:#F97583"> for</span><span style="color:#E1E4E8"> i </span><span style="color:#F97583">:=</span><span style="color:#E1E4E8"> startIndex; i </span><span style="color:#F97583"><</span><span style="color:#B392F0"> len</span><span style="color:#E1E4E8">(partition); i</span><span style="color:#F97583">++</span><span style="color:#E1E4E8"> {</span></span>
|
||||
<span class="line"><span style="color:#F97583"> if</span><span style="color:#E1E4E8"> partition[i] </span><span style="color:#F97583"><=</span><span style="color:#E1E4E8"> pivot {</span></span>
|
||||
<span class="line"><span style="color:#B392F0"> Swap</span><span style="color:#E1E4E8">(partition, i, startIndex)</span></span>
|
||||
<span class="line"><span style="color:#E1E4E8"> startIndex</span><span style="color:#F97583">++</span></span>
|
||||
<span class="line"><span style="color:#E1E4E8"> }</span></span>
|
||||
<span class="line"><span style="color:#E1E4E8"> }</span></span>
|
||||
<span class="line"></span>
|
||||
<span class="line"><span style="color:#6A737D"> // startIndex now point at the first element of the values greater or equal than the pivot</span></span>
|
||||
<span class="line"><span style="color:#F97583"> if</span><span style="color:#E1E4E8"> startIndex </span><span style="color:#F97583">></span><span style="color:#79B8FF"> 1</span><span style="color:#E1E4E8"> {</span></span>
|
||||
<span class="line"><span style="color:#B392F0"> QuickSort</span><span style="color:#E1E4E8">(partition[:startIndex </span><span style="color:#F97583">-</span><span style="color:#79B8FF"> 1</span><span style="color:#E1E4E8">])</span></span>
|
||||
<span class="line"><span style="color:#E1E4E8"> }</span></span>
|
||||
<span class="line"></span>
|
||||
<span class="line"><span style="color:#F97583"> if</span><span style="color:#B392F0"> len</span><span style="color:#E1E4E8">(partition) </span><span style="color:#F97583">-</span><span style="color:#E1E4E8"> startIndex </span><span style="color:#F97583">></span><span style="color:#79B8FF"> 1</span><span style="color:#E1E4E8"> {</span></span>
|
||||
<span class="line"><span style="color:#B392F0"> QuickSort</span><span style="color:#E1E4E8">(partition[startIndex:])</span></span>
|
||||
<span class="line"><span style="color:#E1E4E8"> }</span></span>
|
||||
<span class="line"><span style="color:#E1E4E8">}</span></span></code></pre>
|
||||
<h2 id="performance-speed">Performance (speed)</h2>
|
||||
<p>Average: O(n*log(n))<br>
|
||||
Best case: O(n*log(n))<br>
|
||||
Worst case: O(n²)</p>
|
||||
<h2 id="sources">Sources</h2>
|
||||
<p><a href="https://fr.wikipedia.org/wiki/Tri_rapide">https://fr.wikipedia.org/wiki/Tri_rapide</a> (fr)<br>
|
||||
<a href="https://en.wikipedia.org/wiki/Quicksort">https://en.wikipedia.org/wiki/Quicksort</a> (en)<br>
|
||||
My experience.</p> </p> </div> </div> </main> <footer>© 2024 Evalyte</footer> </body></html>
|
36
dist/notes/selfhost-forgejo-with-podman-without-quadlet/index.html
vendored
Normal file
36
dist/notes/selfhost-forgejo-with-podman-without-quadlet/index.html
vendored
Normal file
|
@ -0,0 +1,36 @@
|
|||
<!DOCTYPE html><html lang="en"> <head><meta charset="UTF-8"><meta name="description" content="Evalyte"><meta name="viewport" content="width=device-width"><!--<link rel="icon" type="image/svg+xml" href="/favicon.svg" />--><meta name="generator" content="Astro v5.9.2"><title>undefined - Evalyte</title><script defer src="https://umami.evalyte.net/script.js" data-website-id="4fd77337-0f39-4eac-b19b-c09ebf8c8db3"></script><style>@media (prefers-color-scheme: dark){.markdown-alert{--color-border-default: #30363d;--color-accent-fg: #58a6ff;--color-accent-emphasis: #1f6feb;--color-danger-fg: #f85149;--color-danger-emphasis: #da3633;--color-attention-fg: #d29922;--color-attention-emphasis: #9e6a03;--color-done-fg: #a371f7;--color-done-emphasis: #8957e5;--color-success-fg: #3fb950;--color-success-emphasis: #238636}}@media (prefers-color-scheme: light){.markdown-alert{--color-border-default: #d0d7de;--color-accent-fg: #0969da;--color-accent-emphasis: #0969da;--color-danger-fg: #d1242f;--color-danger-emphasis: #cf222e;--color-attention-fg: #9a6700;--color-attention-emphasis: #9a6700;--color-done-fg: #8250df;--color-done-emphasis: #8250df;--color-success-fg: #1a7f37;--color-success-emphasis: #1f883d}}.markdown-alert{border-left:.25em solid var(--borderColor-default, var(--color-border-default));color:inherit;margin-bottom:16px;padding:.5rem 1em}.markdown-alert>:last-child{margin-bottom:0!important}.markdown-alert .markdown-alert-title{align-items:center;display:flex;font-size:14px;font-weight:500;line-height:1}.markdown-alert .markdown-alert-title svg.octicon{margin-right:8px!important;margin-right:var(--base-size-8,8px)!important;fill:currentColor}.markdown-alert.markdown-alert-note{border-left-color:var(--borderColor-accent-emphasis,var(--color-accent-emphasis))}.markdown-alert.markdown-alert-note .markdown-alert-title{color:var(--color-accent-fg);color:var(--fgColor-accent,var(--color-accent-fg))}.markdown-alert.markdown-alert-tip{border-left-color:var(--borderColor-success-emphasis,var(--color-success-emphasis))}.markdown-alert.markdown-alert-tip .markdown-alert-title{color:var(--color-success-fg);color:var(--fgColor-success,var(--color-success-fg))}.markdown-alert.markdown-alert-important{border-left-color:var(--borderColor-done-emphasis,var(--color-done-emphasis))}.markdown-alert.markdown-alert-important .markdown-alert-title{color:var(--color-done-fg);color:var(--fgColor-done,var(--color-done-fg))}.markdown-alert.markdown-alert-warning{border-left-color:var(--borderColor-attention-emphasis,var(--color-attention-emphasis))}.markdown-alert.markdown-alert-warning .markdown-alert-title{color:var(--color-attention-fg);color:var(--fgColor-attention,var(--color-attention-fg))}.markdown-alert.markdown-alert-caution{border-left-color:var(--borderColor-danger-emphasis,var(--color-danger-emphasis))}.markdown-alert.markdown-alert-caution .markdown-alert-title{color:var(--color-danger-fg);color:var(--fgColor-danger,var(--color-danger-fg))}main[data-astro-cid-hhdr4bp3]{padding:32px;display:flex;flex-direction:column;align-items:center;margin:auto;max-width:1200px;gap:32px}
|
||||
@font-face{font-family:Comfortaa;src:url(/fonts/Comfortaa-Regular.ttf);font-weight:400}@font-face{font-family:Comfortaa;src:url(/fonts/Comfortaa-Bold.ttf);font-weight:700}:root{--primary: #5d9eda;--secondary: #b1d0ee;--background: #282c34;--pane: #21252b;--surface: #31353f;--surface2: #51555f;--text: #d1d1d1;--headline: #ffffff;--hint: #797979;color:var(--text);--default-gap: 16px}a{text-decoration:none;color:var(--secondary)}nav>a{color:var(--text)}body{margin:0;min-height:100vh;display:flex;flex-direction:column}html{margin:0;font-family:system-ui,sans-serif;background:var(--background)}main{flex:1}header{background:var(--pane)}header>div{display:flex;flex-direction:row;align-items:center;justify-content:space-between;gap:2rem;margin:auto;padding:16px;font-family:Comfortaa;font-weight:700;font-size:1rem;@media (min-width: 1200px){width:1200px}}nav{display:flex;flex-direction:row;align-items:center;gap:2rem}#logo{font-size:2rem;color:var(--primary);text-wrap:nowrap}h1,h2,h3,h4{font-family:Comfortaa;font-weight:400;color:var(--headline);padding:0}h1{color:var(--primary);font-size:3rem}h2{font-size:2rem}h3{font-size:1.5rem}h4{font-size:1.25rem}code{font-family:Menlo,Monaco,Lucida Console,Liberation Mono,DejaVu Sans Mono,Bitstream Vera Sans Mono,Courier New,monospace}code:not(pre>code){background-color:#21252b;font-size:.9rem;padding:0 4px;border-radius:4px}.astro-code{padding:16px;max-width:80vw}pre{background-color:#21252b!important}.markdown-alert-title{margin-bottom:8px}footer{color:var(--hint);text-align:center;margin-bottom:16px}
|
||||
</style></head> <body> <header> <div> <a href="/" id="logo">> _</a> <nav> <a href="https://code.evalyte.net" target="_blank">Repositories</a> <!--<a href="/devlog">Devlog</a>--> <a href="/notes">Notes</a> <!--<a href="/utilities">Utilities</a>--> <!--<a href="/services">Services</a>--> <a href="/about">About</a> </nav> </div> </header> <main data-astro-cid-hhdr4bp3> <div style="display:flex;flex-direction:column;gap:var(--default-gap);justify-content:center;align-items:start"> <div style="display:flex;flex-direction:column;gap:var(--default-gap);justify-content:center;align-items:start"> <h1 data-astro-cid-hhdr4bp3>Selfhost Forgejo with Podman without Quadlet</h1> </div> <div style="flex:1"> <p data-astro-cid-hhdr4bp3> <p>When self-hosting Forgejo, <a href="https://forgejo.org/docs/latest/admin/installation/">the official documentation</a>
|
||||
provides the steps for binary, Docker and Podman.</p>
|
||||
<p>However the provided steps for installing with Podman use Quadlet, and if you’re out of luck and
|
||||
Quadlet isn’t available in your environment you have to use the Podman CLI, but your lose some nice
|
||||
things that Quadlet has, especially restart on boot.</p>
|
||||
<p>Unfortunatly the Forgejo documentation doesn’t tell us how to but it’s easily deductible from the
|
||||
Quadlet/Systemd config file they provide</p>
|
||||
<h3 id="script">Script</h3>
|
||||
<div class="markdown-alert markdown-alert-note" dir="auto">
|
||||
<p class="markdown-alert-title" dir="auto"><svg class="octicon" viewBox="0 0 16 16" width="16" height="16" aria-hidden="true"><path d="M0 8a8 8 0 1 1 16 0A8 8 0 0 1 0 8Zm8-6.5a6.5 6.5 0 1 0 0 13 6.5 6.5 0 0 0 0-13ZM6.5 7.75A.75.75 0 0 1 7.25 7h1a.75.75 0 0 1 .75.75v2.75h.25a.75.75 0 0 1 0 1.5h-2a.75.75 0 0 1 0-1.5h.25v-2h-.25a.75.75 0 0 1-.75-.75ZM8 6a1 1 0 1 1 0-2 1 1 0 0 1 0 2Z"></path></svg>NOTE</p>
|
||||
<p>You might need to modify some values in the script below for your use case</p>
|
||||
</div>
|
||||
<p>First, create a directory named <code>forgejo-volume</code>, then create the <code>data</code> and <code>conf</code> directories
|
||||
inside it so you have <code>forgejo-volume/data</code> and <code>forgejo-volume/conf</code></p>
|
||||
<p>Then the command is:</p>
|
||||
<pre class="astro-code github-dark" style="background-color:#24292e;color:#e1e4e8; overflow-x: auto;" tabindex="0" data-language="bash"><code><span class="line"><span style="color:#B392F0">podman</span><span style="color:#9ECBFF"> run</span><span style="color:#79B8FF"> \</span></span>
|
||||
<span class="line"><span style="color:#79B8FF"> --name</span><span style="color:#9ECBFF"> forgejo</span><span style="color:#79B8FF"> \</span></span>
|
||||
<span class="line"><span style="color:#79B8FF"> --restart=always</span><span style="color:#79B8FF"> \</span></span>
|
||||
<span class="line"><span style="color:#79B8FF"> --userns=keep-id:uid=1000,gid=1000</span><span style="color:#79B8FF"> \</span></span>
|
||||
<span class="line"><span style="color:#79B8FF"> -p</span><span style="color:#9ECBFF"> 3000:3000</span><span style="color:#79B8FF"> \</span></span>
|
||||
<span class="line"><span style="color:#79B8FF"> -p</span><span style="color:#9ECBFF"> 2222:2222</span><span style="color:#79B8FF"> \</span></span>
|
||||
<span class="line"><span style="color:#79B8FF"> -v</span><span style="color:#9ECBFF"> ./forgejo-volume/data:/var/lib/gitea</span><span style="color:#79B8FF"> \</span></span>
|
||||
<span class="line"><span style="color:#79B8FF"> -v</span><span style="color:#9ECBFF"> ./forgejo-volume/conf:/etc/gitea</span><span style="color:#79B8FF"> \</span></span>
|
||||
<span class="line"><span style="color:#9ECBFF"> codeberg.org/forgejo/forgejo:11-rootless</span></span></code></pre>
|
||||
<p>Some explanation:</p>
|
||||
<ul>
|
||||
<li><code>--restart=always</code> allows us to restart the container on boot, you need to tell systemd to do it
|
||||
with <code>systemctl --user enable podman-restart.service</code></li>
|
||||
<li><code>--userns=keep-id:uid=1000,gid=1000</code> allows us to keep the permissions for the volume while
|
||||
using 1000 for the UID and GID inside the container (because we are using the rootless version)</li>
|
||||
<li><code>-p 3000:3000</code> Forgejo will listen on port 3000</li>
|
||||
<li><code>-p 2222:2222</code> Forgejo will accept SSH through port 2222</li>
|
||||
<li>the two following <code>-v</code> parameters map the volume to the directories inside the container</li>
|
||||
</ul> </p> </div> </div> </main> <footer>© 2024 Evalyte</footer> </body></html>
|
7
dist/services/index.html
vendored
Normal file
7
dist/services/index.html
vendored
Normal file
|
@ -0,0 +1,7 @@
|
|||
<!DOCTYPE html><html lang="en"> <head><meta charset="UTF-8"><meta name="description" content="Evalyte"><meta name="viewport" content="width=device-width"><!--<link rel="icon" type="image/svg+xml" href="/favicon.svg" />--><meta name="generator" content="Astro v5.9.2"><title>Evalyte - Services</title><script defer src="https://umami.evalyte.net/script.js" data-website-id="4fd77337-0f39-4eac-b19b-c09ebf8c8db3"></script><style>@font-face{font-family:Comfortaa;src:url(/fonts/Comfortaa-Regular.ttf);font-weight:400}@font-face{font-family:Comfortaa;src:url(/fonts/Comfortaa-Bold.ttf);font-weight:700}:root{--primary: #5d9eda;--secondary: #b1d0ee;--background: #282c34;--pane: #21252b;--surface: #31353f;--surface2: #51555f;--text: #d1d1d1;--headline: #ffffff;--hint: #797979;color:var(--text);--default-gap: 16px}a{text-decoration:none;color:var(--secondary)}nav>a{color:var(--text)}body{margin:0;min-height:100vh;display:flex;flex-direction:column}html{margin:0;font-family:system-ui,sans-serif;background:var(--background)}main{flex:1}header{background:var(--pane)}header>div{display:flex;flex-direction:row;align-items:center;justify-content:space-between;gap:2rem;margin:auto;padding:16px;font-family:Comfortaa;font-weight:700;font-size:1rem;@media (min-width: 1200px){width:1200px}}nav{display:flex;flex-direction:row;align-items:center;gap:2rem}#logo{font-size:2rem;color:var(--primary);text-wrap:nowrap}h1,h2,h3,h4{font-family:Comfortaa;font-weight:400;color:var(--headline);padding:0}h1{color:var(--primary);font-size:3rem}h2{font-size:2rem}h3{font-size:1.5rem}h4{font-size:1.25rem}code{font-family:Menlo,Monaco,Lucida Console,Liberation Mono,DejaVu Sans Mono,Bitstream Vera Sans Mono,Courier New,monospace}code:not(pre>code){background-color:#21252b;font-size:.9rem;padding:0 4px;border-radius:4px}.astro-code{padding:16px;max-width:80vw}pre{background-color:#21252b!important}.markdown-alert-title{margin-bottom:8px}footer{color:var(--hint);text-align:center;margin-bottom:16px}
|
||||
main[data-astro-cid-ucd2ps2b]{margin:auto;padding:32px;width:800px;max-width:calc(100% - 2rem);display:flex;flex-direction:column;align-items:center}#description[data-astro-cid-ucd2ps2b]{text-align:center;margin-top:32px;margin-bottom:32px}#applications[data-astro-cid-ucd2ps2b]{padding:32px;display:grid;width:100%;grid-template-columns:repeat(auto-fill,minmax(200px,1fr));gap:32px}#empty[data-astro-cid-ucd2ps2b]{color:var(--hint)}
|
||||
</style></head> <body> <header> <div> <a href="/" id="logo">> _</a> <nav> <a href="https://code.evalyte.net" target="_blank">Repositories</a> <!--<a href="/devlog">Devlog</a>--> <a href="/notes">Notes</a> <!--<a href="/utilities">Utilities</a>--> <!--<a href="/services">Services</a>--> <a href="/about">About</a> </nav> </div> </header> <main data-astro-cid-ucd2ps2b> <h1 data-astro-cid-ucd2ps2b>Services</h1> <p id="description" data-astro-cid-ucd2ps2b>
|
||||
Open source, self-hostable or use the free instances with limits
|
||||
</p> <section id="applications" data-astro-cid-ucd2ps2b> <!--<Card title="Awary" body="Logs and metrics for your apps" href="#"/>--> <!--<Card title="Share" body="Share text, images and links easily" href="#"/>--> <!--<Card title="Anilist Tierlist" body="Make a tierlist using your Anilist lists" href="#"/>--> <!--<Card title="Kona" body="Discord User app" href="#"/>--> </section> <p id="empty" data-astro-cid-ucd2ps2b>
|
||||
It feels a little bit empty here for now :)
|
||||
</p> </main> <footer>© 2024 Evalyte</footer> </body></html>
|
7
dist/utilities/index.html
vendored
Normal file
7
dist/utilities/index.html
vendored
Normal file
|
@ -0,0 +1,7 @@
|
|||
<!DOCTYPE html><html lang="en"> <head><meta charset="UTF-8"><meta name="description" content="Evalyte"><meta name="viewport" content="width=device-width"><!--<link rel="icon" type="image/svg+xml" href="/favicon.svg" />--><meta name="generator" content="Astro v5.9.2"><title>Evalyte - Utilities</title><script defer src="https://umami.evalyte.net/script.js" data-website-id="4fd77337-0f39-4eac-b19b-c09ebf8c8db3"></script><style>@font-face{font-family:Comfortaa;src:url(/fonts/Comfortaa-Regular.ttf);font-weight:400}@font-face{font-family:Comfortaa;src:url(/fonts/Comfortaa-Bold.ttf);font-weight:700}:root{--primary: #5d9eda;--secondary: #b1d0ee;--background: #282c34;--pane: #21252b;--surface: #31353f;--surface2: #51555f;--text: #d1d1d1;--headline: #ffffff;--hint: #797979;color:var(--text);--default-gap: 16px}a{text-decoration:none;color:var(--secondary)}nav>a{color:var(--text)}body{margin:0;min-height:100vh;display:flex;flex-direction:column}html{margin:0;font-family:system-ui,sans-serif;background:var(--background)}main{flex:1}header{background:var(--pane)}header>div{display:flex;flex-direction:row;align-items:center;justify-content:space-between;gap:2rem;margin:auto;padding:16px;font-family:Comfortaa;font-weight:700;font-size:1rem;@media (min-width: 1200px){width:1200px}}nav{display:flex;flex-direction:row;align-items:center;gap:2rem}#logo{font-size:2rem;color:var(--primary);text-wrap:nowrap}h1,h2,h3,h4{font-family:Comfortaa;font-weight:400;color:var(--headline);padding:0}h1{color:var(--primary);font-size:3rem}h2{font-size:2rem}h3{font-size:1.5rem}h4{font-size:1.25rem}code{font-family:Menlo,Monaco,Lucida Console,Liberation Mono,DejaVu Sans Mono,Bitstream Vera Sans Mono,Courier New,monospace}code:not(pre>code){background-color:#21252b;font-size:.9rem;padding:0 4px;border-radius:4px}.astro-code{padding:16px;max-width:80vw}pre{background-color:#21252b!important}.markdown-alert-title{margin-bottom:8px}footer{color:var(--hint);text-align:center;margin-bottom:16px}
|
||||
main[data-astro-cid-ube2l6lb]{margin:auto;padding:32px;width:800px;max-width:calc(100% - 2rem);display:flex;flex-direction:column;align-items:center}#description[data-astro-cid-ube2l6lb]{text-align:center;margin-top:32px;margin-bottom:32px}#applications[data-astro-cid-ube2l6lb]{padding:32px;display:grid;width:100%;grid-template-columns:repeat(auto-fill,minmax(200px,1fr));gap:32px}#empty[data-astro-cid-ube2l6lb]{color:var(--hint)}
|
||||
</style></head> <body> <header> <div> <a href="/" id="logo">> _</a> <nav> <a href="https://code.evalyte.net" target="_blank">Repositories</a> <!--<a href="/devlog">Devlog</a>--> <a href="/notes">Notes</a> <!--<a href="/utilities">Utilities</a>--> <!--<a href="/services">Services</a>--> <a href="/about">About</a> </nav> </div> </header> <main data-astro-cid-ube2l6lb> <h1 data-astro-cid-ube2l6lb>Utilities</h1> <p id="description" data-astro-cid-ube2l6lb>
|
||||
Free & open source
|
||||
</p> <section id="applications" data-astro-cid-ube2l6lb> <!--<Card title="Sway wallpaper" body="Display wallpapers on Sway with added functionalities" href="#"/>--> </section> <p id="empty" data-astro-cid-ube2l6lb>
|
||||
It feels a little bit empty here for now :)
|
||||
</p> </main> <footer>© 2024 Evalyte</footer> </body></html>
|
5952
package-lock.json
generated
Normal file
5952
package-lock.json
generated
Normal file
File diff suppressed because it is too large
Load diff
18
package.json
Normal file
18
package.json
Normal file
|
@ -0,0 +1,18 @@
|
|||
{
|
||||
"name": "",
|
||||
"type": "module",
|
||||
"version": "0.0.1",
|
||||
"scripts": {
|
||||
"dev": "astro dev",
|
||||
"start": "astro dev",
|
||||
"build": "astro check && astro build",
|
||||
"preview": "astro preview",
|
||||
"astro": "astro"
|
||||
},
|
||||
"dependencies": {
|
||||
"@astrojs/check": "^0.9.4",
|
||||
"astro": "^5.9.2",
|
||||
"remark-github-blockquote-alert": "^1.3.1",
|
||||
"typescript": "^5.6.3"
|
||||
}
|
||||
}
|
BIN
public/fonts/Comfortaa-Bold.ttf
Normal file
BIN
public/fonts/Comfortaa-Bold.ttf
Normal file
Binary file not shown.
BIN
public/fonts/Comfortaa-Light.ttf
Normal file
BIN
public/fonts/Comfortaa-Light.ttf
Normal file
Binary file not shown.
BIN
public/fonts/Comfortaa-Medium.ttf
Normal file
BIN
public/fonts/Comfortaa-Medium.ttf
Normal file
Binary file not shown.
BIN
public/fonts/Comfortaa-Regular.ttf
Normal file
BIN
public/fonts/Comfortaa-Regular.ttf
Normal file
Binary file not shown.
BIN
public/fonts/Comfortaa-SemiBold.ttf
Normal file
BIN
public/fonts/Comfortaa-SemiBold.ttf
Normal file
Binary file not shown.
15
src/components/Box.astro
Normal file
15
src/components/Box.astro
Normal file
|
@ -0,0 +1,15 @@
|
|||
---
|
||||
interface Props {
|
||||
flex?: number
|
||||
}
|
||||
|
||||
const { flex } = Astro.props;
|
||||
const style = {
|
||||
flex: flex
|
||||
}
|
||||
---
|
||||
|
||||
|
||||
<div style={style}>{<slot/>}</div>
|
||||
|
||||
|
31
src/components/Button.astro
Normal file
31
src/components/Button.astro
Normal file
|
@ -0,0 +1,31 @@
|
|||
---
|
||||
interface Props {
|
||||
href?: string;
|
||||
}
|
||||
|
||||
const { href } = Astro.props;
|
||||
---
|
||||
|
||||
|
||||
<a href={href} target="_blank" class="button">{<slot/>}</a>
|
||||
|
||||
|
||||
<style>
|
||||
|
||||
.button {
|
||||
color: var(--secondary);
|
||||
background: none;
|
||||
border: 1px solid var(--secondary);
|
||||
border-radius: 8px;
|
||||
padding: 8px;
|
||||
padding-left: 16px;
|
||||
padding-right: 16px;
|
||||
font-size: 1.5rem;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.button:hover {
|
||||
background-color: #b1d0ee09;
|
||||
}
|
||||
|
||||
</style>
|
51
src/components/Card.astro
Normal file
51
src/components/Card.astro
Normal file
|
@ -0,0 +1,51 @@
|
|||
---
|
||||
interface Props {
|
||||
title: string;
|
||||
createdAt: Date;
|
||||
updatedAt: Date;
|
||||
href: string;
|
||||
}
|
||||
|
||||
const { href, title, createdAt } = Astro.props;
|
||||
---
|
||||
|
||||
<a href={href} class="card">
|
||||
<h4>{title}</h4>
|
||||
<div class="date">{createdAt?.toLocaleDateString()}</div>
|
||||
</a>
|
||||
|
||||
<style>
|
||||
|
||||
h4 {
|
||||
color: var(--secondary);
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
p {
|
||||
color: var(--text);
|
||||
}
|
||||
|
||||
.card {
|
||||
border: 1px solid var(--surface2);
|
||||
background: var(--surface);
|
||||
transition-duration: 0.5s;
|
||||
&:hover {
|
||||
box-shadow: inset 0 0 100px 100px rgba(100, 100, 100, 0.1);
|
||||
}
|
||||
padding-left: 16px;
|
||||
padding-right: 16px;
|
||||
border-radius: 8px;
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
align-items: start;
|
||||
gap: 16px;
|
||||
}
|
||||
|
||||
.date {
|
||||
margin-left: auto;
|
||||
align-self: end;
|
||||
color: var(--hint);
|
||||
margin-bottom: 8px;
|
||||
}
|
||||
|
||||
</style>
|
22
src/components/Flex.astro
Normal file
22
src/components/Flex.astro
Normal file
|
@ -0,0 +1,22 @@
|
|||
---
|
||||
interface Props {
|
||||
direction?: "row" | "column";
|
||||
gap?: number
|
||||
justify?: "start" | "end" | "center"
|
||||
align?: "start" | "end" | "center"
|
||||
}
|
||||
|
||||
const { direction, gap, justify, align } = Astro.props;
|
||||
const style = {
|
||||
display: "flex",
|
||||
flexDirection: direction ?? "row",
|
||||
gap: gap ? `${gap}px` : "var(--default-gap)",
|
||||
justifyContent: justify ?? "center",
|
||||
alignItems: align ?? "center"
|
||||
}
|
||||
---
|
||||
|
||||
|
||||
<div style={style}>{<slot/>}</div>
|
||||
|
||||
|
65
src/components/PortalCategory.astro
Normal file
65
src/components/PortalCategory.astro
Normal file
|
@ -0,0 +1,65 @@
|
|||
---
|
||||
interface Props {
|
||||
title: string;
|
||||
description: string;
|
||||
href: string;
|
||||
openInNewTab?: boolean
|
||||
image: ((_props: astroHTML.JSX.SVGAttributes) => any) & ImageMetadata;
|
||||
}
|
||||
|
||||
const { href, title, openInNewTab } = Astro.props;
|
||||
---
|
||||
|
||||
<a href={href} target={openInNewTab ? "_blank" : "_self"} class="card">
|
||||
<Astro.props.image class="image"/>
|
||||
<div class="text">
|
||||
<h4>
|
||||
{title}
|
||||
</h4>
|
||||
<!--<p class="description">-->
|
||||
<!--{description}-->
|
||||
<!--</p>-->
|
||||
</div>
|
||||
</a>
|
||||
|
||||
<style>
|
||||
|
||||
h4 {
|
||||
color: var(--text);
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
p {
|
||||
color: var(--text);
|
||||
}
|
||||
|
||||
.card {
|
||||
transition-duration: 0.5s;
|
||||
min-width: 256px;
|
||||
border: 1px solid var(--surface2);
|
||||
background: var(--surface);
|
||||
&:hover {
|
||||
box-shadow: inset 0 0 100px 100px rgba(100, 100, 100, 0.1);
|
||||
}
|
||||
padding: 16px;
|
||||
padding-left: 32px;
|
||||
padding-right: 32px;
|
||||
border-radius: 8px;
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
align-items: center;
|
||||
gap: 16px;
|
||||
}
|
||||
|
||||
.image {
|
||||
color: var(--secondary);
|
||||
stroke: currentColor;
|
||||
width: 64px;
|
||||
height: 64px;
|
||||
}
|
||||
|
||||
.description {
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
</style>
|
69
src/content/notes/quick-sort-algorithm.md
Normal file
69
src/content/notes/quick-sort-algorithm.md
Normal file
|
@ -0,0 +1,69 @@
|
|||
---
|
||||
slug: quick-sort-algorithm
|
||||
title: Quick Sort algorithm
|
||||
createdAt: 2021-02-01
|
||||
description: Description and implementation of the Quick Sort algorithm
|
||||
---
|
||||
|
||||
To explain the Quick Sort algorithm, let's take a simple example:
|
||||
|
||||
We have an array of number (integer) in random order, but we want them in ascending order, so we have to sort them, here comes the Quick Sort algorithm.
|
||||
|
||||
*Note: The range of the numbers and the length of the array have no importance for the algorithm itself, but it will have a performance cost.*
|
||||
|
||||
## Algorithm
|
||||
|
||||
Select a number, called "pivot", chosen arbritrary from the array itself, put all the numbers lower than the pivot before it and all the numbers greater after it, split the current partition into 2 new partitions (the ones before and after the pivot), and repeat the procedure for each partition until there is no partition left (when the array length is 1).
|
||||
|
||||
The Quick Sort algorithm steps are:
|
||||
|
||||
- Select a pivot value from the partition and move it at the end of the partition (P, the pivot value).
|
||||
- Remember the start index of the current partition (S, the start index).
|
||||
- for each element (E), if E is lower or equal than P, then swap value E with the value at index S, then increment S.
|
||||
- Use the pivot P to divide the partition into 2 new partitions.
|
||||
- Repeat the algorithm for the 2 newly created partitions until there is no partition left.
|
||||
|
||||
## Implementation
|
||||
|
||||
#### Go
|
||||
|
||||
```go
|
||||
func Swap(partition []int, i int, j int) {
|
||||
partition[i], partition[j] = partition[j], partition[i]
|
||||
}
|
||||
|
||||
func QuickSort(partition []int) {
|
||||
Swap(partition, len(partition) / 2, len(partition) - 1) // Select the pivot from the middle (arbitrary) of the partition and swap it with the last element
|
||||
|
||||
startIndex := 0
|
||||
pivot := partition[len(partition) - 1] // Since we already swapped the pivot, we get the value directly from the end of the partition
|
||||
|
||||
for i := startIndex; i < len(partition); i++ {
|
||||
if partition[i] <= pivot {
|
||||
Swap(partition, i, startIndex)
|
||||
startIndex++
|
||||
}
|
||||
}
|
||||
|
||||
// startIndex now point at the first element of the values greater or equal than the pivot
|
||||
if startIndex > 1 {
|
||||
QuickSort(partition[:startIndex - 1])
|
||||
}
|
||||
|
||||
if len(partition) - startIndex > 1 {
|
||||
QuickSort(partition[startIndex:])
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## Performance (speed)
|
||||
|
||||
Average: O(n\*log(n))
|
||||
Best case: O(n\*log(n))
|
||||
Worst case: O(n²)
|
||||
|
||||
## Sources
|
||||
|
||||
https://fr.wikipedia.org/wiki/Tri_rapide (fr)
|
||||
https://en.wikipedia.org/wiki/Quicksort (en)
|
||||
My experience.
|
50
src/content/notes/selfhost-forgejo-podman.md
Normal file
50
src/content/notes/selfhost-forgejo-podman.md
Normal file
|
@ -0,0 +1,50 @@
|
|||
---
|
||||
slug: selfhost-forgejo-with-podman-without-quadlet
|
||||
title: Selfhost Forgejo with Podman without Quadlet
|
||||
createdAt: 2025-06-11
|
||||
updatedAt: 2025-06-11
|
||||
---
|
||||
|
||||
When self-hosting Forgejo, [the official documentation](https://forgejo.org/docs/latest/admin/installation/)
|
||||
provides the steps for binary, Docker and Podman.
|
||||
|
||||
However the provided steps for installing with Podman use Quadlet, and if you're out of luck and
|
||||
Quadlet isn't available in your environment you have to use the Podman CLI, but your lose some nice
|
||||
things that Quadlet has, especially restart on boot.
|
||||
|
||||
Unfortunatly the Forgejo documentation doesn't tell us how to but it's easily deductible from the
|
||||
Quadlet/Systemd config file they provide
|
||||
|
||||
### Script
|
||||
|
||||
> [!NOTE]
|
||||
> You might need to modify some values in the script below for your use case
|
||||
|
||||
First, create a directory named `forgejo-volume`, then create the `data` and `conf` directories
|
||||
inside it so you have `forgejo-volume/data` and `forgejo-volume/conf`
|
||||
|
||||
Then the command is:
|
||||
|
||||
```bash
|
||||
podman run \
|
||||
--name forgejo \
|
||||
--restart=always \
|
||||
--userns=keep-id:uid=1000,gid=1000 \
|
||||
-p 3000:3000 \
|
||||
-p 2222:2222 \
|
||||
-v ./forgejo-volume/data:/var/lib/gitea \
|
||||
-v ./forgejo-volume/conf:/etc/gitea \
|
||||
codeberg.org/forgejo/forgejo:11-rootless
|
||||
```
|
||||
|
||||
Some explanation:
|
||||
|
||||
- `--restart=always` allows us to restart the container on boot, you need to tell systemd to do it
|
||||
with `systemctl --user enable podman-restart.service`
|
||||
- `--userns=keep-id:uid=1000,gid=1000` allows us to keep the permissions for the volume while
|
||||
using 1000 for the UID and GID inside the container (because we are using the rootless version)
|
||||
- `-p 3000:3000` Forgejo will listen on port 3000
|
||||
- `-p 2222:2222` Forgejo will accept SSH through port 2222
|
||||
- the two following `-v` parameters map the volume to the directories inside the container
|
||||
|
||||
|
1
src/env.d.ts
vendored
Normal file
1
src/env.d.ts
vendored
Normal file
|
@ -0,0 +1 @@
|
|||
/// <reference path="../.astro/types.d.ts" />
|
4
src/images/code-brackets.svg
Normal file
4
src/images/code-brackets.svg
Normal file
|
@ -0,0 +1,4 @@
|
|||
<?xml version="1.0" encoding="utf-8"?><!-- Uploaded to: SVG Repo, www.svgrepo.com, Generator: SVG Repo Mixer Tools -->
|
||||
<svg width="800px" height="800px" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M8 8L3 12L8 16M16 16L21 12L16 8" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
</svg>
|
After Width: | Height: | Size: 339 B |
4
src/images/devlog.svg
Normal file
4
src/images/devlog.svg
Normal file
|
@ -0,0 +1,4 @@
|
|||
<?xml version="1.0" encoding="utf-8"?><!-- Uploaded to: SVG Repo, www.svgrepo.com, Generator: SVG Repo Mixer Tools -->
|
||||
<svg width="800px" height="800px" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M20.9485 11.0195C21.2909 11.6283 21.2909 12.3717 20.9485 12.9805L17.5735 18.9805C17.2192 19.6103 16.5529 20 15.8303 20H8.16969C7.44715 20 6.78078 19.6103 6.42654 18.9805L3.05154 12.9805C2.70908 12.3717 2.70908 11.6283 3.05154 11.0195L6.42654 5.01948C6.78078 4.38972 7.44715 4 8.16969 4H15.8303C16.5529 4 17.2192 4.38972 17.5735 5.01948L20.9485 11.0195Z" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
</svg>
|
After Width: | Height: | Size: 661 B |
4
src/images/note.svg
Normal file
4
src/images/note.svg
Normal file
|
@ -0,0 +1,4 @@
|
|||
<?xml version="1.0" encoding="utf-8"?><!-- Uploaded to: SVG Repo, www.svgrepo.com, Generator: SVG Repo Mixer Tools -->
|
||||
<svg width="800px" height="800px" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M13 3H7C5.89543 3 5 3.89543 5 5V19C5 20.1046 5.89543 21 7 21H17C18.1046 21 19 20.1046 19 19V9M13 3L19 9M13 3V8C13 8.55228 13.4477 9 14 9H19M9 13H15M9 17H15" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
</svg>
|
After Width: | Height: | Size: 464 B |
194
src/layouts/Layout.astro
Normal file
194
src/layouts/Layout.astro
Normal file
|
@ -0,0 +1,194 @@
|
|||
---
|
||||
interface Props {
|
||||
title: string;
|
||||
}
|
||||
|
||||
const { title } = Astro.props;
|
||||
---
|
||||
|
||||
<!doctype html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8" />
|
||||
<meta name="description" content="Evalyte" />
|
||||
<meta name="viewport" content="width=device-width" />
|
||||
<!--<link rel="icon" type="image/svg+xml" href="/favicon.svg" />-->
|
||||
<meta name="generator" content={Astro.generator} />
|
||||
<title>{title}</title>
|
||||
<script defer src="https://umami.evalyte.net/script.js" data-website-id="4fd77337-0f39-4eac-b19b-c09ebf8c8db3"></script>
|
||||
</head>
|
||||
<body>
|
||||
<header>
|
||||
<div>
|
||||
<a href="/" id="logo">> _</a>
|
||||
<nav>
|
||||
<a href="https://code.evalyte.net" target="_blank">Repositories</a>
|
||||
<!--<a href="/devlog">Devlog</a>-->
|
||||
<a href="/notes">Notes</a>
|
||||
<!--<a href="/utilities">Utilities</a>-->
|
||||
<!--<a href="/services">Services</a>-->
|
||||
<a href="/about">About</a>
|
||||
</nav>
|
||||
</div>
|
||||
</header>
|
||||
<slot />
|
||||
<footer>© 2024 Evalyte</footer>
|
||||
</body>
|
||||
</html>
|
||||
<style is:global>
|
||||
@font-face {
|
||||
font-family: 'Comfortaa';
|
||||
src: url('/fonts/Comfortaa-Regular.ttf');
|
||||
font-weight: normal;
|
||||
}
|
||||
@font-face {
|
||||
font-family: 'Comfortaa';
|
||||
src: url('/fonts/Comfortaa-Bold.ttf');
|
||||
font-weight: bold;
|
||||
}
|
||||
:root {
|
||||
--primary: #5d9eda;
|
||||
--secondary: #b1d0ee;
|
||||
--background: #282c34;
|
||||
--pane: #21252b;
|
||||
--surface: #31353f;
|
||||
--surface2: #51555f;
|
||||
/*--background: #333333;*/
|
||||
/*--pane: #242424;*/
|
||||
/*--surface: #434343;*/
|
||||
--text: #d1d1d1;
|
||||
--headline: #ffffff;
|
||||
--hint: #797979;
|
||||
|
||||
color: var(--text);
|
||||
|
||||
/* components */
|
||||
--default-gap: 16px;
|
||||
}
|
||||
|
||||
|
||||
|
||||
a {
|
||||
text-decoration: none;
|
||||
color: var(--secondary);
|
||||
}
|
||||
|
||||
nav > a {
|
||||
color: var(--text);
|
||||
}
|
||||
|
||||
body {
|
||||
margin: 0;
|
||||
min-height: 100vh;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
}
|
||||
|
||||
html {
|
||||
margin: 0;
|
||||
font-family: system-ui, sans-serif;
|
||||
background: var(--background);
|
||||
}
|
||||
|
||||
main {
|
||||
flex: 1;
|
||||
}
|
||||
|
||||
header {
|
||||
background: var(--pane);
|
||||
}
|
||||
|
||||
header > div {
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
align-items: center;
|
||||
justify-content: space-between;
|
||||
gap: 2rem;
|
||||
margin: auto;
|
||||
padding: 16px;
|
||||
font-family: "Comfortaa";
|
||||
font-weight: bold;
|
||||
font-size: 1rem;
|
||||
|
||||
@media (min-width: 1200px) {
|
||||
width: 1200px;
|
||||
}
|
||||
}
|
||||
|
||||
nav {
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
align-items: center;
|
||||
gap: 2rem;
|
||||
}
|
||||
|
||||
#logo {
|
||||
font-size: 2rem;
|
||||
color: var(--primary);
|
||||
text-wrap: nowrap;
|
||||
}
|
||||
|
||||
h1, h2, h3, h4 {
|
||||
font-family: "Comfortaa";
|
||||
font-weight: normal;
|
||||
color: var(--headline);
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
h1 {
|
||||
color: var(--primary);
|
||||
font-size: 3rem;
|
||||
}
|
||||
|
||||
h2 {
|
||||
font-size: 2rem;
|
||||
}
|
||||
|
||||
h3 {
|
||||
font-size: 1.5rem;
|
||||
}
|
||||
|
||||
h4 {
|
||||
font-size: 1.25rem;
|
||||
}
|
||||
|
||||
code {
|
||||
font-family:
|
||||
Menlo,
|
||||
Monaco,
|
||||
Lucida Console,
|
||||
Liberation Mono,
|
||||
DejaVu Sans Mono,
|
||||
Bitstream Vera Sans Mono,
|
||||
Courier New,
|
||||
monospace;
|
||||
}
|
||||
|
||||
code:not(pre > code) {
|
||||
padding: 0px;
|
||||
background-color: #21252b;
|
||||
font-size: 0.9rem;
|
||||
padding-left: 4px;
|
||||
padding-right: 4px;
|
||||
border-radius: 4px;
|
||||
}
|
||||
|
||||
.astro-code {
|
||||
padding: 16px;
|
||||
max-width: 80vw;
|
||||
}
|
||||
|
||||
pre {
|
||||
background-color: #21252b !important;
|
||||
}
|
||||
|
||||
.markdown-alert-title {
|
||||
margin-bottom: 8px;
|
||||
}
|
||||
|
||||
footer {
|
||||
color: var(--hint);
|
||||
text-align: center;
|
||||
margin-bottom: 16px;
|
||||
}
|
||||
</style>
|
54
src/pages/about.astro
Normal file
54
src/pages/about.astro
Normal file
|
@ -0,0 +1,54 @@
|
|||
---
|
||||
import Layout from '../layouts/Layout.astro';
|
||||
---
|
||||
|
||||
<Layout title="Evalyte - About">
|
||||
<main>
|
||||
<section>
|
||||
<h1>Hello, World</h1>
|
||||
<p>
|
||||
I'm a self-taught developer who likes to create desktop & web applications, custom tools and sometimes games.</br></br>
|
||||
|
||||
As I really like to understand how things work, I do a lot of projects and enjoy reinventing the wheel, creating my own software, this is the reason this website exists.
|
||||
</p>
|
||||
</section>
|
||||
|
||||
<section>
|
||||
<h1>What exactly is Evalyte ?</h1>
|
||||
<p>
|
||||
Evalyte is the brand for my projects, a namespace, my lab and my way of sharing about software and open source, it's like my home, it's not my nickname.</br></br>
|
||||
|
||||
You'll find here mostly desktop apps, web apps and other things related to tech.</br></br>
|
||||
|
||||
Everything I make available here is free and open source, most are self-made but I might also host existing software.
|
||||
</p>
|
||||
</section>
|
||||
<section>
|
||||
<h1>Want to contribute ?</h1>
|
||||
<p>
|
||||
You can report issues or make suggestions,
|
||||
but I don't accept contributions in the form code or pull request, I want to stay the
|
||||
only owner and developer for now.
|
||||
</p>
|
||||
</section>
|
||||
</main>
|
||||
</Layout>
|
||||
|
||||
<style>
|
||||
|
||||
|
||||
main {
|
||||
margin: auto;
|
||||
padding: 32px;
|
||||
width: 800px;
|
||||
max-width: calc(100% - 2rem);
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
}
|
||||
|
||||
section {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
}
|
||||
|
||||
</style>
|
128
src/pages/index.astro
Normal file
128
src/pages/index.astro
Normal file
|
@ -0,0 +1,128 @@
|
|||
---
|
||||
import Layout from '../layouts/Layout.astro';
|
||||
import PortalCategory from "../components/PortalCategory.astro"
|
||||
import CodeBrackets from '../images/code-brackets.svg'
|
||||
import Note from '../images/note.svg'
|
||||
import Devlog from '../images/devlog.svg'
|
||||
---
|
||||
|
||||
<Layout title="Evalyte">
|
||||
<main>
|
||||
<div id="page-intro">
|
||||
<h1>Evalyte</h1>
|
||||
</div>
|
||||
<p id="firstline">
|
||||
Welcome, I'm <strong>Vyn</strong>, and <strong>Evalyte</strong> is my place where I share things, enjoy.
|
||||
</p>
|
||||
<div id="content">
|
||||
<PortalCategory title="Repositories" description="ok" href="https://code.evalyte.net" openInNewTab image={CodeBrackets}/>
|
||||
<PortalCategory title="Notes" description="ok" href="/notes" image={Note}/>
|
||||
<!--<PortalCategory title="Devlog" description="ok" href="/devlog" image={Devlog}/>-->
|
||||
</div>
|
||||
</main>
|
||||
</Layout>
|
||||
|
||||
<style>
|
||||
|
||||
h1 {
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
main {
|
||||
padding-top: 0;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
gap: 32px;
|
||||
}
|
||||
|
||||
#page-intro {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
gap: 32px;
|
||||
padding: 32px;
|
||||
padding-bottom: 96px;
|
||||
background: var(--pane);
|
||||
}
|
||||
|
||||
#content {
|
||||
margin-left: auto;
|
||||
margin-right: auto;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
gap: 32px;
|
||||
|
||||
@media (min-width: 1200px) {
|
||||
width: 1200px;
|
||||
}
|
||||
}
|
||||
|
||||
#description {
|
||||
margin-bottom: 32px;
|
||||
}
|
||||
|
||||
#firstline {
|
||||
text-align: center;
|
||||
margin-top: 32px;
|
||||
margin-bottom: 32px;
|
||||
}
|
||||
|
||||
/*.image > img {*/
|
||||
/*width: 100%;*/
|
||||
/*height: auto;*/
|
||||
/*box-shadow: rgba(0, 0, 0, 0.25) 0px 54px 55px, rgba(0, 0, 0, 0.12) 0px -12px 30px, rgba(0, 0, 0, 0.12) 0px 4px 6px, rgba(0, 0, 0, 0.17) 0px 12px 13px, rgba(0, 0, 0, 0.09) 0px -3px 5px;*/
|
||||
/*}*/
|
||||
|
||||
.presentation-section {
|
||||
width: 100%;
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
gap: 32px;
|
||||
}
|
||||
|
||||
.image-text {
|
||||
flex: 1;
|
||||
}
|
||||
|
||||
.image-text div {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
gap: 32px;
|
||||
align-items: start;
|
||||
justify-content: center;
|
||||
padding:16px;
|
||||
}
|
||||
|
||||
.side-to-side-text {
|
||||
flex: 1;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
gap: 32px;
|
||||
align-items: start;
|
||||
justify-content: center;
|
||||
padding:16px;
|
||||
}
|
||||
|
||||
.button {
|
||||
color: var(--secondary);
|
||||
background: none;
|
||||
border: 1px solid var(--secondary);
|
||||
border-radius: 8px;
|
||||
padding: 8px;
|
||||
padding-left: 16px;
|
||||
padding-right: 16px;
|
||||
font-size: 1.5rem;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.button:hover {
|
||||
background-color: #b1d0ee09;
|
||||
}
|
||||
|
||||
h2 {
|
||||
color: var(--headline);
|
||||
}
|
||||
|
||||
|
||||
</style>
|
46
src/pages/notes/[id].astro
Normal file
46
src/pages/notes/[id].astro
Normal file
|
@ -0,0 +1,46 @@
|
|||
---
|
||||
import "remark-github-blockquote-alert/alert.css";
|
||||
import Layout from '../../layouts/Layout.astro';
|
||||
import Flex from '../../components/Flex.astro';
|
||||
import Box from '../../components/Box.astro';
|
||||
import { getCollection, render } from 'astro:content';
|
||||
|
||||
export async function getStaticPaths() {
|
||||
const posts = await getCollection("notes");
|
||||
return posts.map(post => ({
|
||||
params: { id: post.data.slug, slug: post.data.slug },
|
||||
props: { post },
|
||||
}));
|
||||
}
|
||||
|
||||
const { post } = Astro.props;
|
||||
const { Content } = await render(post);
|
||||
---
|
||||
<Layout title={`${post.data.name} - Evalyte`}>
|
||||
<main>
|
||||
<Flex direction="column" align="start">
|
||||
<Flex direction="column" align="start">
|
||||
<h1>{post.data.title}</h1>
|
||||
</Flex>
|
||||
<Box flex={1}>
|
||||
<p>
|
||||
<Content/>
|
||||
</p>
|
||||
</Box>
|
||||
</Flex>
|
||||
</main>
|
||||
</Layout>
|
||||
|
||||
<style>
|
||||
|
||||
main {
|
||||
padding: 32px;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
margin: auto;
|
||||
max-width: 1200px;
|
||||
gap: 32px;
|
||||
}
|
||||
|
||||
</style>
|
48
src/pages/notes/index.astro
Normal file
48
src/pages/notes/index.astro
Normal file
|
@ -0,0 +1,48 @@
|
|||
---
|
||||
import Layout from '../../layouts/Layout.astro';
|
||||
import Card from '../../components/Card.astro';
|
||||
import { getCollection } from 'astro:content';
|
||||
const notes = await getCollection("notes")
|
||||
---
|
||||
|
||||
<Layout title="Evalyte - Notes">
|
||||
<main>
|
||||
<h1>Notes</h1>
|
||||
<p id="description">
|
||||
Random things that might be useful.
|
||||
</p>
|
||||
<section id="applications">
|
||||
{notes.map(note => (
|
||||
<Card title={note.data.title} createdAt={note.data.createdAt} updatedAt={note.data.updatedAt} href={`/notes/${note.data.slug}`}/>
|
||||
))}
|
||||
</section>
|
||||
</main>
|
||||
</Layout>
|
||||
|
||||
<style>
|
||||
|
||||
main {
|
||||
margin: auto;
|
||||
padding: 32px;
|
||||
width: 800px;
|
||||
max-width: calc(100% - 2rem);
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: center;;
|
||||
}
|
||||
|
||||
#description {
|
||||
text-align: center;
|
||||
margin-top: 32px;
|
||||
margin-bottom: 32px;
|
||||
}
|
||||
|
||||
#applications {
|
||||
padding: 32px;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
width: 100%;
|
||||
gap: 16px;
|
||||
}
|
||||
|
||||
</style>
|
54
src/pages/services.astro
Normal file
54
src/pages/services.astro
Normal file
|
@ -0,0 +1,54 @@
|
|||
---
|
||||
import Layout from '../layouts/Layout.astro';
|
||||
import Card from '../components/Card.astro';
|
||||
---
|
||||
|
||||
<Layout title="Evalyte - Services">
|
||||
<main>
|
||||
<h1>Services</h1>
|
||||
<p id="description">
|
||||
Open source, self-hostable or use the free instances with limits
|
||||
</p>
|
||||
<section id="applications">
|
||||
<!--<Card title="Awary" body="Logs and metrics for your apps" href="#"/>-->
|
||||
<!--<Card title="Share" body="Share text, images and links easily" href="#"/>-->
|
||||
<!--<Card title="Anilist Tierlist" body="Make a tierlist using your Anilist lists" href="#"/>-->
|
||||
<!--<Card title="Kona" body="Discord User app" href="#"/>-->
|
||||
</section>
|
||||
<p id="empty">
|
||||
It feels a little bit empty here for now :)
|
||||
</p>
|
||||
</main>
|
||||
</Layout>
|
||||
|
||||
<style>
|
||||
|
||||
main {
|
||||
margin: auto;
|
||||
padding: 32px;
|
||||
width: 800px;
|
||||
max-width: calc(100% - 2rem);
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: center;;
|
||||
}
|
||||
|
||||
#description {
|
||||
text-align: center;
|
||||
margin-top: 32px;
|
||||
margin-bottom: 32px;
|
||||
}
|
||||
|
||||
#applications {
|
||||
padding: 32px;
|
||||
display: grid;
|
||||
width: 100%;
|
||||
grid-template-columns: repeat(auto-fill, minmax(200px, 1fr));
|
||||
gap: 32px;
|
||||
}
|
||||
|
||||
#empty {
|
||||
color: var(--hint);
|
||||
}
|
||||
|
||||
</style>
|
51
src/pages/utilities.astro
Normal file
51
src/pages/utilities.astro
Normal file
|
@ -0,0 +1,51 @@
|
|||
---
|
||||
import Layout from '../layouts/Layout.astro';
|
||||
import Card from '../components/Card.astro';
|
||||
---
|
||||
|
||||
<Layout title="Evalyte - Utilities">
|
||||
<main>
|
||||
<h1>Utilities</h1>
|
||||
<p id="description">
|
||||
Free & open source
|
||||
</p>
|
||||
<section id="applications">
|
||||
<!--<Card title="Sway wallpaper" body="Display wallpapers on Sway with added functionalities" href="#"/>-->
|
||||
</section>
|
||||
<p id="empty">
|
||||
It feels a little bit empty here for now :)
|
||||
</p>
|
||||
</main>
|
||||
</Layout>
|
||||
|
||||
<style>
|
||||
|
||||
main {
|
||||
margin: auto;
|
||||
padding: 32px;
|
||||
width: 800px;
|
||||
max-width: calc(100% - 2rem);
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: center;;
|
||||
}
|
||||
|
||||
#description {
|
||||
text-align: center;
|
||||
margin-top: 32px;
|
||||
margin-bottom: 32px;
|
||||
}
|
||||
|
||||
#applications {
|
||||
padding: 32px;
|
||||
display: grid;
|
||||
width: 100%;
|
||||
grid-template-columns: repeat(auto-fill, minmax(200px, 1fr));
|
||||
gap: 32px;
|
||||
}
|
||||
|
||||
#empty {
|
||||
color: var(--hint);
|
||||
}
|
||||
|
||||
</style>
|
7
tsconfig.json
Normal file
7
tsconfig.json
Normal file
|
@ -0,0 +1,7 @@
|
|||
{
|
||||
"extends": "astro/tsconfigs/strict",
|
||||
"compilerOptions": {
|
||||
"strictNullChecks": true,
|
||||
"allowJs": true
|
||||
}
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue