Compare commits

...

18 Commits

Author SHA1 Message Date
41966da44e Merge branch 'dev' 2025-09-23 15:32:09 +02:00
cef935dd44 feat: started to write deploy ci 2025-09-23 15:26:53 +02:00
e4f5537d34 feat: continued blog creation blog 2025-09-23 15:26:33 +02:00
0afc9d7144 feat: contiuned act runner blog 2025-09-23 15:25:54 +02:00
8fa6fff160 feat: reduces header lvl for mdsvex 2025-09-23 15:25:26 +02:00
6b2202d82d feat: added local fonts 2025-09-23 15:24:57 +02:00
51e8fa69de feat: added bsky link 2025-09-23 15:24:04 +02:00
0c61c70f85 feat: gitea action test
All checks were successful
Gitea Actions Demo / Explore-Gitea-Actions (push) Successful in 1m12s
2025-09-18 11:45:47 +02:00
11809f93ad feat: new blog entry 2025-09-18 11:42:26 +02:00
be8731e48e feat: improved inlince code styling 2025-09-18 11:41:41 +02:00
31a6fe1a99 fix: fixed merge 2025-09-15 17:31:47 +02:00
eda2ec6359 feat: added first test content 2025-09-15 17:31:47 +02:00
373231849b feat: order blog entrys by date and direct link if source is available 2025-09-15 17:31:47 +02:00
011d83e4cc feat: added Layout for Blog posts together with custom components for images 2025-09-15 17:31:47 +02:00
c31ebb6a21 feat: added main styling 2025-09-15 17:31:47 +02:00
5b334fcb9f feat: default layout including nav bar 2025-09-15 17:31:47 +02:00
5888e69d01 feat: reordered html component of blog entry list and added styles 2025-09-15 17:31:47 +02:00
eb4fe3b595 feat: added rose pine theme from prism syntax 2025-09-15 17:31:23 +02:00
32 changed files with 891 additions and 78 deletions

View File

@@ -0,0 +1,24 @@
name: Gitea Actions Demo
run-name: ${{ gitea.actor }} is testing out Gitea Actions 🚀
on:
push:
branches:
- main
jobs:
Build:
runs-on: ubuntu-latest
steps:
- run: echo "🎉 The job was automatically triggered by a ${{ gitea.event_name }} event."
- run: echo "🐧 This job is now running on a ${{ runner.os }} server hosted by Gitea!"
- run: echo "🔎 The name of your branch is ${{ gitea.ref }} and your repository is ${{ gitea.repository }}."
- name: Check out repository code
uses: actions/checkout@v5
- run: |
cd ${{ gitea.workspace }}
- run: npm i
- run: npm run build
- run: ls build
- run: echo "🍏 This job's status is ${{ job.status }}."

135
2 Normal file
View File

@@ -0,0 +1,135 @@
@import '/node_modules/@rose-pine/palette/dist/css/rose-pine-hsl.css';
@import url('https://fonts.googleapis.com/css2?family=Fraunces:ital,opsz,wght@0,9..144,100..900;1,9..144,100..900&display=swap');
.fraunces-me {
}
body {
color: var(--rp-moon-text);
background: var(--rp-moon-base);
padding: 0;
margin: 0;
text-align: justify;
}
pre {
background: var(--rp-moon-base);
border-radius: 0.5rem;
}
a {
color: var(--rp-moon-iris);
text-decoration: none;
}
a:visited {
color: hsl(from var(--rp-moon-iris) h s calc(l * 0.85))
}
.nav {
margin: auto;
margin-top: 1rem;
padding: 2rem;
max-width: 60rem;
width: calc(100%-4rem);
font-family: "Fraunces", serif;
font-optical-sizing: auto;
font-weight: 400;
font-style: normal;
font-variation-settings:
"SOFT" 0,
"WONK" 0;
font-size:1.728rem;
}
a.nav{
margin: 1rem;
margin-left: 0rem;
padding-left: 0rem;
color: var(--rp-moon-text);
}
.main {
background: var(--rp-moon-surface);
padding: 1rem;
margin: auto;
margin-top: 1rem;
max-width: 60rem;
width: calc(100%-4rem);
box-shadow: 0px 0px 1rem 0px hsl(from var(--rp-moon-base) h s calc(l * 0.85));
border-radius: 0.5rem;
}
hr {
color: var(--rp-moon-muted);
}
.blog-entry{
background: var(--rp-moon-overlay);
padding-left: 0.5rem;
border-radius: 0.5rem;
#display: block;
#height:10rem;
width:100%;
color: var(--rp-moon-text) !important;
text-decoration : none !important;
display: flex;
}
.blog-entry:hover{
box-shadow: 0px 0px 1rem 0px hsl(from var(--rp-moon-surface) h s calc(l * 0.85));
transition: 0.15s;
}
.blog-entry div {
width: calc(100% - 15rem);
min-width: 20rem;
}
.blog-entry img{
#height:100%;
width:15rem;
object-fit: cover;
border-radius: 0 0.5rem 0.5rem 0;
}
@media only screen and (max-width: 600px) {
.blog-entry div {
width: 100%;
}
.blog-entry img {
width: 100%;
}
}
.blog-entry h4{
margin-top:1rem;
}
h1{font-size: 2.986rem}
h2{font-size: 2.488rem}
h3{font-size: 2.074rem}
h4{font-size: 1.728rem}
h1, h2, h3, h4{
font-family: "Fraunces", serif;
font-optical-sizing: auto;
font-weight: 400;
font-style: normal;
text-align: left;
font-variation-settings:
"SOFT" 0,
"WONK" 0;
}

118
package-lock.json generated
View File

@@ -8,7 +8,9 @@
"name": "blog",
"version": "0.0.1",
"dependencies": {
"prism-rose-pine": "github:rose-pine/prism#main"
"@rose-pine/palette": "github:rose-pine/rose-pine-palette",
"prism-rose-pine": "github:rose-pine/prism#main",
"svelte-preprocess": "^6.0.3"
},
"devDependencies": {
"@eslint/compat": "^1.2.5",
@@ -701,7 +703,6 @@
"version": "0.3.13",
"resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz",
"integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==",
"dev": true,
"license": "MIT",
"dependencies": {
"@jridgewell/sourcemap-codec": "^1.5.0",
@@ -712,7 +713,6 @@
"version": "2.3.5",
"resolved": "https://registry.npmjs.org/@jridgewell/remapping/-/remapping-2.3.5.tgz",
"integrity": "sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==",
"dev": true,
"license": "MIT",
"dependencies": {
"@jridgewell/gen-mapping": "^0.3.5",
@@ -723,7 +723,6 @@
"version": "3.1.2",
"resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz",
"integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=6.0.0"
@@ -733,14 +732,12 @@
"version": "1.5.5",
"resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz",
"integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==",
"dev": true,
"license": "MIT"
},
"node_modules/@jridgewell/trace-mapping": {
"version": "0.3.30",
"resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.30.tgz",
"integrity": "sha512-GQ7Nw5G2lTu/BtHTKfXhKHok2WGetd4XYcVKGx00SjAk8GMwgJM3zr6zORiPGuOE+/vkc90KtTosSSvaCjKb2Q==",
"dev": true,
"license": "MIT",
"dependencies": {
"@jridgewell/resolve-uri": "^3.1.0",
@@ -1087,12 +1084,11 @@
]
},
"node_modules/@rose-pine/palette": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/@rose-pine/palette/-/palette-2.1.0.tgz",
"integrity": "sha512-CVts9RNQU2wCn5rnWJ3QVlLQdjbxJktoGT+U5K8k+9HDgmC8n25C+QjrQ8l4XNTPCl1YzKCdpTy7H8qHutkC5w==",
"version": "4.0.1",
"resolved": "git+ssh://git@github.com/rose-pine/rose-pine-palette.git#20998b7abfc40a47d73586140e01d71f53e7e405",
"license": "MIT",
"engines": {
"node": ">=12"
"node": ">=16"
},
"funding": {
"url": "https://github.com/rose-pine/palette?sponsor=1"
@@ -1109,7 +1105,6 @@
"version": "1.0.5",
"resolved": "https://registry.npmjs.org/@sveltejs/acorn-typescript/-/acorn-typescript-1.0.5.tgz",
"integrity": "sha512-IwQk4yfwLdibDlrXVE04jTZYlLnwsTT2PIOQQGNLWfjavGifnk1JD1LcZjZaBTRcxZu2FfPfNLOE04DSu9lqtQ==",
"dev": true,
"license": "MIT",
"peerDependencies": {
"acorn": "^8.9.0"
@@ -1136,9 +1131,9 @@
}
},
"node_modules/@sveltejs/kit": {
"version": "2.37.1",
"resolved": "https://registry.npmjs.org/@sveltejs/kit/-/kit-2.37.1.tgz",
"integrity": "sha512-4T9rF2Roe7RGvHfcn6+n92Yc2NF88k7ljFz9+wE0jWxyencqRpadr2/CvlcQbbTXf1ozmFxgMO6af+qm+1mPFw==",
"version": "2.38.0",
"resolved": "https://registry.npmjs.org/@sveltejs/kit/-/kit-2.38.0.tgz",
"integrity": "sha512-iLmykJOv4PAZvuC0niq1HUoK/LZdfsTW1CpkPAAnroYeYiV7Bp73Eeh/As8u0Y1n/2IDM+p9cdoHYufcpvkXkQ==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -1224,7 +1219,6 @@
"version": "1.0.8",
"resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz",
"integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==",
"dev": true,
"license": "MIT"
},
"node_modules/@types/json-schema": {
@@ -1513,7 +1507,6 @@
"version": "8.15.0",
"resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz",
"integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==",
"dev": true,
"license": "MIT",
"bin": {
"acorn": "bin/acorn"
@@ -1576,7 +1569,6 @@
"version": "5.3.2",
"resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.2.tgz",
"integrity": "sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw==",
"dev": true,
"license": "Apache-2.0",
"engines": {
"node": ">= 0.4"
@@ -1586,7 +1578,6 @@
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-4.1.0.tgz",
"integrity": "sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==",
"dev": true,
"license": "Apache-2.0",
"engines": {
"node": ">= 0.4"
@@ -1670,7 +1661,6 @@
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.1.tgz",
"integrity": "sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=6"
@@ -1983,7 +1973,6 @@
"version": "1.2.2",
"resolved": "https://registry.npmjs.org/esm-env/-/esm-env-1.2.2.tgz",
"integrity": "sha512-Epxrv+Nr/CaL4ZcFGPJIYLWFom+YeV1DqMLHJoEd9SYRxNbaFruBwfEX/kkHUJf55j2+TUbmDcmuilbP1TmXHA==",
"dev": true,
"license": "MIT"
},
"node_modules/espree": {
@@ -2021,7 +2010,6 @@
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/esrap/-/esrap-2.1.0.tgz",
"integrity": "sha512-yzmPNpl7TBbMRC5Lj2JlJZNPml0tzqoqP5B1JXycNUwtqma9AKCO0M2wHrdgsHcy1WRW7S9rJknAMtByg3usgA==",
"dev": true,
"license": "MIT",
"dependencies": {
"@jridgewell/sourcemap-codec": "^1.4.15"
@@ -2335,7 +2323,6 @@
"version": "3.0.3",
"resolved": "https://registry.npmjs.org/is-reference/-/is-reference-3.0.3.tgz",
"integrity": "sha512-ixkJoqQvAP88E6wLydLGGqCJsrFUnqoH6HnaczB8XmDH1oaWU+xxdptvikTgaEhtZ53Ky6YXiBuUI2WXLMCwjw==",
"dev": true,
"license": "MIT",
"dependencies": {
"@types/estree": "^1.0.6"
@@ -2427,7 +2414,7 @@
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz",
"integrity": "sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==",
"dev": true,
"devOptional": true,
"license": "MIT",
"engines": {
"node": ">=10"
@@ -2437,7 +2424,6 @@
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/locate-character/-/locate-character-3.0.0.tgz",
"integrity": "sha512-SW13ws7BjaeJ6p7Q6CO2nchbYEc3X3J6WrmTTDto7yMPqVSZTUyY5Tjbid+Ab8gLnATtygYtiDIJGQRRn2ZOiA==",
"dev": true,
"license": "MIT"
},
"node_modules/locate-path": {
@@ -2467,7 +2453,6 @@
"version": "0.30.19",
"resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.19.tgz",
"integrity": "sha512-2N21sPY9Ws53PZvsEpVtNuSW+ScYbQdp4b9qUaL+9QkHUrGFKo56Lg9Emg5s9V/qrtNBmiR01sYhUOwu3H+VOw==",
"dev": true,
"license": "MIT",
"dependencies": {
"@jridgewell/sourcemap-codec": "^1.5.5"
@@ -2572,7 +2557,7 @@
"version": "3.3.11",
"resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz",
"integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==",
"dev": true,
"devOptional": true,
"funding": [
{
"type": "github",
@@ -2681,7 +2666,7 @@
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz",
"integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==",
"dev": true,
"devOptional": true,
"license": "ISC"
},
"node_modules/picomatch": {
@@ -2701,7 +2686,7 @@
"version": "8.5.6",
"resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.6.tgz",
"integrity": "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==",
"dev": true,
"devOptional": true,
"funding": [
{
"type": "opencollective",
@@ -2730,7 +2715,7 @@
"version": "3.1.4",
"resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-3.1.4.tgz",
"integrity": "sha512-6DiM4E7v4coTE4uzA8U//WhtPwyhiim3eyjEMFCnUpzbrkK9wJHgKDT2mR+HbtSrd/NubVaYTOpSpjUl8NQeRg==",
"dev": true,
"devOptional": true,
"license": "MIT",
"dependencies": {
"lilconfig": "^2.0.5",
@@ -2760,7 +2745,7 @@
"version": "1.10.2",
"resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz",
"integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==",
"dev": true,
"devOptional": true,
"license": "ISC",
"engines": {
"node": ">= 6"
@@ -2883,6 +2868,18 @@
"node": ">=12"
}
},
"node_modules/prism-rose-pine/node_modules/@rose-pine/palette": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/@rose-pine/palette/-/palette-2.1.0.tgz",
"integrity": "sha512-CVts9RNQU2wCn5rnWJ3QVlLQdjbxJktoGT+U5K8k+9HDgmC8n25C+QjrQ8l4XNTPCl1YzKCdpTy7H8qHutkC5w==",
"license": "MIT",
"engines": {
"node": ">=12"
},
"funding": {
"url": "https://github.com/rose-pine/palette?sponsor=1"
}
},
"node_modules/prism-rose-pine/node_modules/prettier": {
"version": "2.8.8",
"resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.8.tgz",
@@ -3121,7 +3118,7 @@
"version": "1.2.1",
"resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz",
"integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==",
"dev": true,
"devOptional": true,
"license": "BSD-3-Clause",
"engines": {
"node": ">=0.10.0"
@@ -3157,7 +3154,6 @@
"version": "5.38.7",
"resolved": "https://registry.npmjs.org/svelte/-/svelte-5.38.7.tgz",
"integrity": "sha512-1ld9TPZSdUS3EtYGQzisU2nhwXoIzNQcZ71IOU9fEmltaUofQnVfW5CQuhgM/zFsZ43arZXS1BRKi0MYgUV91w==",
"dev": true,
"license": "MIT",
"dependencies": {
"@jridgewell/remapping": "^2.3.4",
@@ -3232,6 +3228,61 @@
}
}
},
"node_modules/svelte-preprocess": {
"version": "6.0.3",
"resolved": "https://registry.npmjs.org/svelte-preprocess/-/svelte-preprocess-6.0.3.tgz",
"integrity": "sha512-PLG2k05qHdhmRG7zR/dyo5qKvakhm8IJ+hD2eFRQmMLHp7X3eJnjeupUtvuRpbNiF31RjVw45W+abDwHEmP5OA==",
"hasInstallScript": true,
"license": "MIT",
"engines": {
"node": ">= 18.0.0"
},
"peerDependencies": {
"@babel/core": "^7.10.2",
"coffeescript": "^2.5.1",
"less": "^3.11.3 || ^4.0.0",
"postcss": "^7 || ^8",
"postcss-load-config": ">=3",
"pug": "^3.0.0",
"sass": "^1.26.8",
"stylus": ">=0.55",
"sugarss": "^2.0.0 || ^3.0.0 || ^4.0.0",
"svelte": "^4.0.0 || ^5.0.0-next.100 || ^5.0.0",
"typescript": "^5.0.0"
},
"peerDependenciesMeta": {
"@babel/core": {
"optional": true
},
"coffeescript": {
"optional": true
},
"less": {
"optional": true
},
"postcss": {
"optional": true
},
"postcss-load-config": {
"optional": true
},
"pug": {
"optional": true
},
"sass": {
"optional": true
},
"stylus": {
"optional": true
},
"sugarss": {
"optional": true
},
"typescript": {
"optional": true
}
}
},
"node_modules/tinyglobby": {
"version": "0.2.15",
"resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.15.tgz",
@@ -3302,7 +3353,7 @@
"version": "5.9.2",
"resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.2.tgz",
"integrity": "sha512-CWBzXQrc/qOkhidw1OzBTQuYRbfyxDXJMVJ1XNwUHGROVmuaeiEm3OslpZ1RV96d7SKKjZKrSJu3+t/xlw3R9A==",
"dev": true,
"devOptional": true,
"license": "Apache-2.0",
"bin": {
"tsc": "bin/tsc",
@@ -3562,7 +3613,6 @@
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/zimmerframe/-/zimmerframe-1.1.2.tgz",
"integrity": "sha512-rAbqEGa8ovJy4pyBxZM70hg4pE6gDgaQ0Sl9M3enG3I0d6H4XSAM3GeNGLKnsBpuijUow064sf7ww1nutC5/3w==",
"dev": true,
"license": "MIT"
}
}

View File

@@ -34,6 +34,8 @@
"vite": "^7.0.4"
},
"dependencies": {
"prism-rose-pine": "github:rose-pine/prism#main"
"@rose-pine/palette": "github:rose-pine/rose-pine-palette",
"prism-rose-pine": "github:rose-pine/prism#main",
"svelte-preprocess": "^6.0.3"
}
}

View File

@@ -1,6 +1,12 @@
<script lang="ts">
import favicon from '$lib/assets/favicon.svg';
import '/node_modules/@rose-pine/palette/dist/css/rose-pine-hsl.css';
import '/node_modules/@rose-pine/palette/dist/css/rose-pine-hsl.css';
import 'prism-rose-pine/dist/prism-rose-pine-moon.css';
import './style.css';
import './style.css';
let { children } = $props();
</script>
@@ -8,4 +14,16 @@
<link rel="icon" href={favicon} />
</svelte:head>
<nav>
<a href="/">Home</a>
<a href="/about">About</a>
<a href="https://bsky.app/profile/amyt3a.bsky.social"
><svg fill="none" class="bsky" viewBox="0 0 64 57"
><path
fill="var(--rp-moon-pine)"
d="M13.873 3.805C21.21 9.332 29.103 20.537 32 26.55v15.882c0-.338-.13.044-.41.867-1.512 4.456-7.418 21.847-20.923 7.944-7.111-7.32-3.819-14.64 9.125-16.85-7.405 1.264-15.73-.825-18.014-9.015C1.12 23.022 0 8.51 0 6.55 0-3.268 8.579-.182 13.873 3.805ZM50.127 3.805C42.79 9.332 34.897 20.537 32 26.55v15.882c0-.338.13.044.41.867 1.512 4.456 7.418 21.847 20.923 7.944 7.111-7.32 3.819-14.64-9.125-16.85 7.405 1.264 15.73-.825 18.014-9.015C62.88 23.022 64 8.51 64 6.55c0-9.818-8.578-6.732-13.873-2.745Z"
></path></svg
></a
>
</nav>
{@render children?.()}

View File

@@ -1,19 +1,95 @@
<script lang="ts">
import type { MDsveXComponent } from '$lib/types';
import type { SvelteComponent } from 'svelte';
import './style-entries.css';
const blog_entries: [string, SvelteComponent][] = Object.entries(
let blog_entries: [string, SvelteComponent][] = Object.entries(
import.meta.glob('/src/routes/blogs/**/+page.svx', { eager: true })
).map(([key, value]) => [
key.split('/src/routes').pop()?.split('/+page.svx').slice(0, -1).pop() as string,
value as MDsveXComponent
]);
console.log(blog_entries);
]).map(([link,val])=>
typeof val.metadata?.src !== 'undefined' ? [val.metadata?.src, val] : [link,val]
).map(([link,val])=>{
if(val.metadata)
val.metadata.date = Date.parse(val.metadata?.date);
return [link,val];
}
).sort(([link1,a],[link2,b])=>b.metadata?.date-a.metadata?.date);
console.log(blog_entries);
</script>
<h1>Welcome to SvelteKit</h1>
<p>Visit <a href="https://svelte.dev/docs/kit">svelte.dev/docs/kit</a> to read the documentation</p>
{#each blog_entries as [href, page]}
<a {href}>{page.metadata?.title}</a><br />
<svelte:component this={page.default} />
{/each}
<main>
<div class="start">
<h1>Welcome to SvelteKit</h1>
<p>
Visit <a href="https://svelte.dev/docs/kit">svelte.dev/docs/kit</a> to read the documentation
</p>
</div>
{#each blog_entries as [href, page]}
<a {href}>
<div class="blog-entry">
<div>
<h4>{page.metadata?.title}</h4>
<p>{page.metadata?.desc}</p>
<p class="date">{new Date(page.metadata?.date).toDateString()}</p>
</div>
<img src="blog-1.png" class="blog-image" />
</div>
</a>
<br />
<!-- svelte:component this={page.default} /-->
{/each}
</main>
<style>
.start {
padding: var(--d2);
}
.blog-entry {
background: var(--rp-moon-surface);
border-radius: var(--border-round);
width: 100%;
color: var(--rp-moon-text);
display: flex;
flex-flow: row wrap;
box-shadow: 0px 0px 1rem 0px hsl(from var(--rp-moon-base) h s calc(l * 0.75));
transition: 0.2s;
}
.blog-entry:hover {
box-shadow: 0px 0px 1rem 0px hsl(from var(--rp-moon-base) h s calc(l * 0.55));
background: var(--rp-moon-overlay);
transition: 0.2s;
}
.blog-entry div {
width: calc(100% - 15rem - var(--d2) * 2);
padding: var(--d2);
}
.blog-entry img {
width: 15rem;
object-fit: cover;
border-radius: 0 var(--border-round) var(--border-round) 0;
}
@media only screen and (max-width: 700px) {
.blog-entry div {
width: calc(100% - var(--d2) * 2);
}
.blog-entry img {
width: 100%;
max-height: 14rem;
border-radius: 0 0rem var(--border-round) var(--border-round) ;
}
}
.blog-entry h4 {
margin-top: 0.5rem;
margin-bottom: 0.5rem;
}
</style>

View File

@@ -0,0 +1,54 @@
---
title: "The creation of this Blog"
date: 2025-09-12
desc: "The goal was to create an easy to maintain blog with while the main focus relays on keeping the effort
to write new posts minimal. This is more a ressource summery with tips, than an full tutorial."
---
# Static side generation
The stack consists of:
- [svelte + svelte-kit](https://svelte.dev/docs/kit/introduction)
- [mdsvex](https://mdsvex.pngwn.io/)
- [static adapter](https://svelte.dev/docs/kit/adapter-static)
The core functionallity provides which allow you to combine svelte and markdown.
![Tasd|20rem](/blog-1.png)
# Image sizing
I want to be able to rezise an image in markdown without using HTML,
just like in obsidian, by declaring the width after the alt text `![some alt text|<width>](/some-image.png)`.
To archive that I replace every img that that mdsvex creates with some new written `img` component:
```ts
//img.svelte
<script lang="ts">
export let src;
export let alt;
let width;
[alt, width = '20rem'] = alt.split('|');
</script>
<img {src} style="width:{width}; max-width:100%; margin:auto; display:block" {alt} />
```
And then needs to be imported in the mdsvex layout:
```ts
<script context="module">
import img from './img.svelte';
export { img };
</script>
```
This is desctibed in furhter details by the [mdsvex docs](https://mdsvex.pngwn.io/docs#custom-components)
and this [issue](https://github.com/pngwn/MDsveX/discussions/292).
# Colors
I love the [rose pine](https://rosepinetheme.com/) color palette. I use it privatly for some applications,
and think it improves this blog too.
Both the [prism theme](https://github.com/rose-pine/prism) and [color palette](https://github.com/rose-pine/rose-pine-palette)
can be added as npm package and used without compications.

View File

@@ -0,0 +1,7 @@
---
title: "64k Demo"
date: 2025-09-15
desc: "Dev Diary of the Demo"
---
asd

View File

@@ -0,0 +1,138 @@
---
title: Setup up Gitea Runner with Podman in LXC
desc: "For some time now I already host a gitea instace and now with this blog I finally have some real usage for CI, but setting up gitea actions in an LXC and using Podman instead of Docker Engine was not as straight forward as expected."
date: 2025-09-17
---
# Setup PVE
Setup Proxmox, so podman can run in unpreviliged container.
Podman uses high user ids for it's containers, so we need to extend the range that is usable by LXCs.
It is also required to change the limit explictly in the containers config, and we need to add a kernel module.
Those ranges are defined in `/etc/subuid` for user ids and `/etc/subgid` for group ids,
in the from of `<usr>:<start_uid>:<count>`.
You could change them manually or change them with
(the first number defines the start and the secound the end of ids)
```bash
usermod --add-subuids 100000-300000 --add-subgids 100000-300000 root
```
So `/etc/subuid` should contains `root:100000:200000`.
We also need to edit the LXC config `/etc/pve/lxc/<VMID>.conf`.
```yaml
# <container_uid> <host_uid> <count>
lxc.idmap: u 0 100000 165536 # uids 0..165536 (container) -> 100000..265536 (host)
lxc.idmap: g 0 100000 165536 # gids
lxc.cgroup2.devices.allow: c 10:200 rwm # cgroup2 for PVE >= 7.0
lxc.mount.entry: /dev/net dev/net none bind,create=dir
```
I got the information from [here](https://forum.proxmox.com/threads/podman-in-rootless-mode-on-lxc-container.141790/)
together with infos from the [official docu](https://github.com/containers/podman/blob/main/docs/tutorials/rootless_tutorial.md#etcsubuid-and-etcsubgid-configuration).
# Setup LXC
As we want to run podman as an unpreviliged user, lets create on:
```bash
useradd -U <USER_NAME>
```
```bash
apt install podman
systemctl --user -M act@ enable podman.socket
```
First, since we wanna run this rootless, we need a new unpreviliged user.
The binary is [here available](https://dl.gitea.com/act_runner/).
I placed it there `/usr/local/bin/act_runner` and made it executable by the new created user.
```bash
cd /usr/local/bin
curl https://dl.gitea.com/act_runner/0.2.13/act_runner-0.2.13-linux-amd64 > act_runner
chmod +x act_runner
chown act:act act_runner
```
A config that references the regrister file and the podman socket is needed, I placed it in
`/etc/act_runner/config.yaml`
``` bash
mkdir /etc/act_runner
chown -R act:act /etc/act_runner
```
```yaml
# config.yaml
runner:
file: /etc/act_runner/.runner
envs:
XDG_RUNTIME_DIR directory: "/run/user/1000"
container:
docker_host: "unix:///run/user/<USER_ID>/podman/docker.sock"
cache:
# Enable cache server to use actions/cache.
enabled: true
# The directory to store the cache data.
# If it's empty, the cache data will be stored in $HOME/.cache/actcache.
dir: "/etc/act_runner/cache"
```
And last but not least, we need to regristrate the runner, wich will create the runner file:
The token is accsasible through `Settings -> Actions -> Runners -> Create new Runner`.
(I'd recommend running the regristration as the unpreviliged user.)
```bash
/usr/local/bin/act_runner register -c /etc/act_runner/config.yaml \
--instance <GITEA ADRESS> --token <TOKEN>
--no-interactive
```
### Create Act Runner User Service
Create a user service in in the following file: `/usr/lib/systemd/user/act_runner.servic`
```ini
Description=Gitea Actions runner
Documentation=https://gitea.com/gitea/act_runner
After=podman.socket
[Service]
ExecStart=/usr/local/bin/act_runner daemon -c /etc/act_runner/config.yaml
Delegate=true
Type=simple
[Install]
WantedBy=default.target
```
## Auto start user Services
To start the user services, you can add a drop-in and add the Install, by running:
```bash
systemctl edit user@1001 --drop-in=start_act_runner
```
and inserting
```ini
[Unit]
After=gitea.service
[Install]
WantedBy=multi-user.target
```
In the end, all left to do is, enable the user:
```bash
systemctl status user@1001
```

View File

@@ -0,0 +1,81 @@
<script context="module">
import img from './img.svelte';
import h1 from './h1.svelte';
import h2 from './h2.svelte';
import h3 from './h3.svelte';
export { img, h1, h2, h3 };
</script>
<script>
export let title;
export let date;
export let desc;
let ddate = new Date(Date.parse(date));
</script>
<main>
<div class="title">
<!-- prettier-ignore -->
<h1>{title}</h1><p class="date">Last updated {ddate.toDateString()}</p>
</div>
<div class="blog-text">
<p>{desc}</p>
<slot>
<!-- the mdsvex content will be slotted in here -->
</slot>
</div>
</main>
<style>
main {
padding: 0;
border-radius: 1rem;
}
.title {
padding: 0 var(--d3) 0;
#display: table;
flex-wrap: row;
#height: 5rem;
margin-bottom: -12px;
#white-space: nowrap;
}
.title h1 {
width: calc(100% - 15rem);
margin: 0;
vertical-align: baseline;
display: inline-block;
}
.title p {
width: 15rem;
display: inline-block;
text-align: right;
margin: 0;
#float: right;
}
@media only screen and (max-width: 700px) {
.title {
margin-bottom: -5.3px;
}
.title h1 {
display: block;
width: 100%;
}
.title p {
width: 100%;
}
}
.blog-text {
border-radius: var(--border-round);
background: var(--rp-moon-surface);
box-shadow: 0px 0px 0.5rem 0px hsl(from var(--rp-moon-pine) h calc(s * 0.5) calc(l * 0.25));
padding: var(--d2) var(--d3) var(--d4);
}
</style>

View File

@@ -0,0 +1,7 @@
---
title: "FemDev GameJam - Catastrophe"
date: 2024-11-10
src: "https://elkortes.itch.io/catastrophe"
desc: "I took part in the amazing FemDev Game and helped to creathe this little game.
My work are the animations, 3d Models and some texturing"
---

View File

@@ -0,0 +1,6 @@
---
title: "Flame Demo"
date: 2024-11-26
src: "https://madeio.net/fox"
desc: "A WebGL Project wich shows that deffered rendering and volumetric fog is very possible in Three.js"
---

View File

@@ -0,0 +1 @@
<h2><slot /></h2>

View File

@@ -0,0 +1 @@
<h3><slot /></h3>

View File

@@ -0,0 +1 @@
<h4><slot /></h4>

View File

@@ -0,0 +1,9 @@
<script lang="ts">
export let src;
export let alt;
let width;
[alt, width = '20rem'] = alt.split('|');
</script>
<img {src} style="width:{width}; max-width:100%; margin:auto; display:block" {alt} />

View File

@@ -0,0 +1,10 @@
.blog-text{
border-radius: 0.5rem;
background: var(--rp-moon-surface);
box-shadow: 0px 0px 1rem 0px hsl(from var(--rp-moon-base) h s calc(l * 0.85));
margin: -1rem;
padding: 1rem;
}

View File

@@ -1,18 +0,0 @@
---
title: "Blog Entry #1"
---
# Title
---
1. asd
2. asd
3. asd
```js
{..., lib}:
{
"hello" = "world";
}
```

0
src/routes/main.svelte Normal file
View File

View File

@@ -0,0 +1,47 @@
.blog-entry{
background: var(--rp-moon-surface);
border-radius: 0.5rem;
width:100%;
color: var(--rp-moon-text) !important;
text-decoration : none !important;
display: flex;
flex-flow: row wrap;
box-shadow: 0px 0px 1rem 0px hsl(from var(--rp-moon-base) h s calc(l * 0.85));
}
.blog-entry:hover{
box-shadow: 0px 0px 1rem 0px hsl(from var(--rp-moon-base) h s calc(l * 0.75));
background: var(--rp-moon-overlay);
transition: 0.2s;
}
.blog-entry div {
width: calc(100% - 17rem);
padding: 1rem;
}
.blog-entry img{
width:15rem;
object-fit: cover;
border-radius: 0 0.5rem 0.5rem 0;
}
@media only screen and (max-width: 700px) {
.blog-entry div {
width: calc( 100% - 2rem);
}
.blog-entry img {
width: 100%;
max-height: 15rem;
border-radius: 0 0rem 0.5rem 0.5rem;
}
}
.blog-entry h4{
margin-top:0.5rem;
margin-bottom: 0.5rem;
}

150
src/routes/style.css Normal file
View File

@@ -0,0 +1,150 @@
@import url('https://fonts.googleapis.com/css2?family=Fraunces:ital,opsz,wght@0,9..144,100..900;1,9..144,100..900&display=swap');
@font-face {
font-family: 'fira';
font-style: normal;
font-weight: 500;
src: url('/fonts/FiraCode-Regular.ttf') format('truetype');
}
@font-face {
font-family: 'Fraunces';
font-style: normal;
font-weight: 100 900;
src: url('/fonts/Fraunces.woff2') format('woff2');
}
@font-face {
font-family: 'Inter';
font-style: normal;
font-weight: 400;
src: url('/fonts/Inter.ttf') format('truetype');
}
:root{
--d1:1.0rem;
--d2:1.5rem;
--d3:2.25rem;
--d4:3.375rem;
--d5:5.0625rem;
--d6:7.59375rem;
--d7:11.390625rem;
--d8:17.0859375rem;
--d9:25.62890625rem;
--d10:38.443359375rem;
--border-round:var(--d2);
}
body {
color: var(--rp-moon-text);
background: var(--rp-moon-base);
padding: 0;
max-width: 60rem;
width:100%;
margin: auto;
text-align: justify;
font-family: Inter;
}
code {
background: var(--rp-moon-base);
padding: 3px;
border-radius: 0.5rem;
font-family: fira;
}
pre {
background: var(--rp-moon-base);
border-radius: 0.5rem;
}
pre code{
padding:0px;
}
a {
color: var(--rp-moon-iris);
text-decoration: none;
&:visited {
color: hsl(from var(--rp-moon-iris) h s calc(l * 0.85))
}
}
h1,h2,h3,h4,p:first-child {
#margin-top: 0;
}
nav {
margin-top: 1rem;
padding: 0 var(--d3) 0;
font-family: "Fraunces", serif;
font-optical-sizing: auto;
font-weight: 400;
font-style: normal;
font-variation-settings:
"SOFT" 0,
"WONK" 0;
font-size:1.728rem;
}
nav a{
margin: 1rem;
margin-left: 0rem;
padding-left: 0rem;
color: var(--rp-moon-foam);
#text-decoration: underline;
&:visited {
color: var(--rp-moon-foam);
}
}
main {
#padding: 0 2rem 2rem;
margin-top: var(--d3);
width: 100%;
#box-shadow: 0px 0px 1rem 0px hsl(from var(--rp-moon-base) h s calc(l * 0.85));
}
.date{
text-align: right;
color: var(--rp-moon-subtle);
font-family: Fraunces;
}
hr {
color: var(--rp-moon-muted);
}
.bsky{
display:block;
height: 2rem;
float:right;
}
h1{font-size: 2.986rem}
h2{font-size: 2.488rem}
h3{font-size: 2.074rem}
h4{font-size: 1.728rem}
h1, h2, h3, h4{
font-family: "Fraunces", serif;
font-optical-sizing: auto;
font-weight: 400;
font-style: normal;
text-align: left;
font-variation-settings:
"SOFT" 0,
"WONK" 0;
}
h4{
color: var(--rp-moon-foam);
}

BIN
static/blog-1.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 39 KiB

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

BIN
static/fonts/Fraunces.woff2 Normal file

Binary file not shown.

BIN
static/fonts/Inter.ttf Normal file

Binary file not shown.

View File

@@ -2,24 +2,38 @@ import adapter from '@sveltejs/adapter-static';
import { vitePreprocess } from '@sveltejs/vite-plugin-svelte';
import { mdsvex } from 'mdsvex';
import { join, dirname } from 'path';
import { fileURLToPath } from 'url';
const __filename = fileURLToPath(import.meta.url);
const __dirname = dirname(__filename);
const path_to_layout = join(__dirname, './src/routes/blogs/blog.svelte');
/** @type {import('@sveltejs/kit').Config} */
const config = {
// Consult https://svelte.dev/docs/kit/integrations
// for more information about preprocessors
preprocess: [vitePreprocess(), mdsvex()],
kit: {
// adapter-auto only supports some environments, see https://svelte.dev/docs/kit/adapter-auto for a list.
// If your environment is not supported, or you settled on a specific environment, switch out the adapter.
// See https://svelte.dev/docs/kit/adapters for more information about adapters.
adapter: adapter({
pages: 'build',
assets: 'build',
fallback: undefined,
precompress: false,
strict: true
})
},
extensions: ['.svelte', '.svx']
// Consult https://svelte.dev/docs/kit/integrations
// for more information about preprocessors
preprocess: [vitePreprocess(), mdsvex({
layout: {
_: path_to_layout
}
})],
kit: {
// adapter-auto only supports some environments, see https://svelte.dev/docs/kit/adapter-auto for a list.
// If your environment is not supported, or you settled on a specific environment, switch out the adapter.
// See https://svelte.dev/docs/kit/adapters for more information about adapters.
adapter: adapter({
pages: 'build',
assets: 'build',
fallback: undefined,
precompress: false,
strict: true
})
},
extensions: ['.svelte', '.svx']
};
export default config;