lots of stuff ig

This commit is contained in:
ArgentumCation 2024-07-18 17:25:13 -04:00
parent c7c8b0c8cc
commit 643784b1ab
13 changed files with 317 additions and 84 deletions

View file

@ -3,6 +3,7 @@ import mdx from "@astrojs/mdx";
import nodejs from "@astrojs/node"; import nodejs from "@astrojs/node";
import { remarkReadingTime } from "./remark-reading-time.mjs"; import { remarkReadingTime } from "./remark-reading-time.mjs";
import { modifiedTime } from "./remark-modified-time.mjs"; import { modifiedTime } from "./remark-modified-time.mjs";
import remarkCallout from "@r4ai/remark-callout";
export default defineConfig({ export default defineConfig({
site: "https://argentumcation.com", site: "https://argentumcation.com",
@ -11,7 +12,7 @@ export default defineConfig({
shikiConfig: { shikiConfig: {
theme: "css-variables", theme: "css-variables",
}, },
remarkPlugins: [remarkReadingTime, modifiedTime], remarkPlugins: [remarkReadingTime, modifiedTime, remarkCallout],
}, },
adapter: nodejs({ adapter: nodejs({
mode: "standalone", mode: "standalone",

View file

@ -24,16 +24,19 @@
"@astrojs/mdx": "^1.1.0", "@astrojs/mdx": "^1.1.0",
"@astrojs/node": "^6.0.1", "@astrojs/node": "^6.0.1",
"@astrojs/rss": "^3.0.0", "@astrojs/rss": "^3.0.0",
"@r4ai/remark-callout": "^0.4.0",
"accessible-astro-components": "^1.6.6", "accessible-astro-components": "^1.6.6",
"astro": "^3.2.0", "astro": "^3.2.0",
"astro-icon": "^0.8.1", "astro-icon": "^0.8.1",
"dayjs": "^1.11.10", "dayjs": "^1.11.10",
"highlight.js": "^11.8.0", "highlight.js": "^11.8.0",
"htmx.org": "^1.9.6", "htmx.org": "^1.9.6",
"markdown-it": "^14.1.0",
"mdast-util-to-string": "^4.0.0", "mdast-util-to-string": "^4.0.0",
"npm-watch": "^0.11.0", "npm-watch": "^0.11.0",
"reading-time": "^1.5.0", "reading-time": "^1.5.0",
"rollup": "^3.29.4", "rollup": "^3.29.4",
"sanitize-html": "^2.13.0",
"sass": "^1.68.0" "sass": "^1.68.0"
}, },
"devDependencies": { "devDependencies": {

115
pnpm-lock.yaml generated
View file

@ -20,6 +20,9 @@ dependencies:
'@astrojs/rss': '@astrojs/rss':
specifier: ^3.0.0 specifier: ^3.0.0
version: 3.0.0 version: 3.0.0
'@r4ai/remark-callout':
specifier: ^0.4.0
version: 0.4.0
accessible-astro-components: accessible-astro-components:
specifier: ^1.6.6 specifier: ^1.6.6
version: 1.6.6 version: 1.6.6
@ -38,6 +41,9 @@ dependencies:
htmx.org: htmx.org:
specifier: ^1.9.6 specifier: ^1.9.6
version: 1.9.6 version: 1.9.6
markdown-it:
specifier: ^14.1.0
version: 14.1.0
mdast-util-to-string: mdast-util-to-string:
specifier: ^4.0.0 specifier: ^4.0.0
version: 4.0.0 version: 4.0.0
@ -50,6 +56,9 @@ dependencies:
rollup: rollup:
specifier: ^3.29.4 specifier: ^3.29.4
version: 3.29.4 version: 3.29.4
sanitize-html:
specifier: ^2.13.0
version: 2.13.0
sass: sass:
specifier: ^1.68.0 specifier: ^1.68.0
version: 1.68.0 version: 1.68.0
@ -1017,6 +1026,14 @@ packages:
'@nodelib/fs.scandir': 2.1.5 '@nodelib/fs.scandir': 2.1.5
fastq: 1.15.0 fastq: 1.15.0
/@r4ai/remark-callout@0.4.0:
resolution: {integrity: sha512-bJJCmKVyKwRYul0O+oI62gGCKqUcXL1wihmxMiFT3y98DL5fTpzd1jjlHshJHf+sdg3tHfRUlVmxC2U4OlF1kg==}
engines: {node: '>=16'}
dependencies:
defu: 6.1.4
unist-util-visit: 5.0.0
dev: false
/@trysound/sax@0.2.0: /@trysound/sax@0.2.0:
resolution: {integrity: sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==} resolution: {integrity: sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==}
engines: {node: '>=10.13.0'} engines: {node: '>=10.13.0'}
@ -1913,6 +1930,15 @@ packages:
resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==}
dev: true dev: true
/deepmerge@4.3.1:
resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==}
engines: {node: '>=0.10.0'}
dev: false
/defu@6.1.4:
resolution: {integrity: sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg==}
dev: false
/depd@2.0.0: /depd@2.0.0:
resolution: {integrity: sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==} resolution: {integrity: sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==}
engines: {node: '>= 0.8'} engines: {node: '>= 0.8'}
@ -1963,6 +1989,14 @@ packages:
entities: 2.2.0 entities: 2.2.0
dev: false dev: false
/dom-serializer@2.0.0:
resolution: {integrity: sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==}
dependencies:
domelementtype: 2.3.0
domhandler: 5.0.3
entities: 4.5.0
dev: false
/domelementtype@2.3.0: /domelementtype@2.3.0:
resolution: {integrity: sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==} resolution: {integrity: sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==}
dev: false dev: false
@ -1974,6 +2008,13 @@ packages:
domelementtype: 2.3.0 domelementtype: 2.3.0
dev: false dev: false
/domhandler@5.0.3:
resolution: {integrity: sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==}
engines: {node: '>= 4'}
dependencies:
domelementtype: 2.3.0
dev: false
/domutils@2.8.0: /domutils@2.8.0:
resolution: {integrity: sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==} resolution: {integrity: sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==}
dependencies: dependencies:
@ -1982,6 +2023,14 @@ packages:
domhandler: 4.3.1 domhandler: 4.3.1
dev: false dev: false
/domutils@3.1.0:
resolution: {integrity: sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA==}
dependencies:
dom-serializer: 2.0.0
domelementtype: 2.3.0
domhandler: 5.0.3
dev: false
/dset@3.1.2: /dset@3.1.2:
resolution: {integrity: sha512-g/M9sqy3oHe477Ar4voQxWtaPIFw1jTdKZuomOjhCcBx9nHUNn0pu6NopuFFrTh/TRZIKEj+76vLWFu9BNKk+Q==} resolution: {integrity: sha512-g/M9sqy3oHe477Ar4voQxWtaPIFw1jTdKZuomOjhCcBx9nHUNn0pu6NopuFFrTh/TRZIKEj+76vLWFu9BNKk+Q==}
engines: {node: '>=4'} engines: {node: '>=4'}
@ -2035,6 +2084,11 @@ packages:
resolution: {integrity: sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==} resolution: {integrity: sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==}
dev: false dev: false
/entities@4.5.0:
resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==}
engines: {node: '>=0.12'}
dev: false
/es-module-lexer@1.3.1: /es-module-lexer@1.3.1:
resolution: {integrity: sha512-JUFAyicQV9mXc3YRxPnDlrfBKpqt6hUYzz9/boprUJHs4e4KVr3XwOF70doO6gwXUor6EWZJAyWAfKki84t20Q==} resolution: {integrity: sha512-JUFAyicQV9mXc3YRxPnDlrfBKpqt6hUYzz9/boprUJHs4e4KVr3XwOF70doO6gwXUor6EWZJAyWAfKki84t20Q==}
dev: false dev: false
@ -2116,7 +2170,6 @@ packages:
/escape-string-regexp@4.0.0: /escape-string-regexp@4.0.0:
resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==}
engines: {node: '>=10'} engines: {node: '>=10'}
dev: true
/escape-string-regexp@5.0.0: /escape-string-regexp@5.0.0:
resolution: {integrity: sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==} resolution: {integrity: sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==}
@ -2635,6 +2688,15 @@ packages:
resolution: {integrity: sha512-0quDb7s97CfemeJAnW9wC0hw78MtW7NU3hqtCD75g2vFlDLt36llsYD7uB7SUzojLMP24N5IatXf7ylGXiGG9A==} resolution: {integrity: sha512-0quDb7s97CfemeJAnW9wC0hw78MtW7NU3hqtCD75g2vFlDLt36llsYD7uB7SUzojLMP24N5IatXf7ylGXiGG9A==}
dev: false dev: false
/htmlparser2@8.0.2:
resolution: {integrity: sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA==}
dependencies:
domelementtype: 2.3.0
domhandler: 5.0.3
domutils: 3.1.0
entities: 4.5.0
dev: false
/htmx.org@1.9.6: /htmx.org@1.9.6:
resolution: {integrity: sha512-4Zebo9nzg8u2ZHuIJmvB/nQS6kIMLIoEfhTg/oRwyCIJhL5MLA/jPU1EPEBtGOmG4ZG0k05Vpd3sab2+zfvteQ==} resolution: {integrity: sha512-4Zebo9nzg8u2ZHuIJmvB/nQS6kIMLIoEfhTg/oRwyCIJhL5MLA/jPU1EPEBtGOmG4ZG0k05Vpd3sab2+zfvteQ==}
dev: false dev: false
@ -2810,6 +2872,11 @@ packages:
engines: {node: '>=12'} engines: {node: '>=12'}
dev: false dev: false
/is-plain-object@5.0.0:
resolution: {integrity: sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==}
engines: {node: '>=0.10.0'}
dev: false
/is-reference@3.0.2: /is-reference@3.0.2:
resolution: {integrity: sha512-v3rht/LgVcsdZa3O2Nqs+NMowLOxeOm7Ay9+/ARQ2F+qEoANRcqrjAZKGN0v8ymUetZGgkp26LTnGT7H0Qo9Pg==} resolution: {integrity: sha512-v3rht/LgVcsdZa3O2Nqs+NMowLOxeOm7Ay9+/ARQ2F+qEoANRcqrjAZKGN0v8ymUetZGgkp26LTnGT7H0Qo9Pg==}
dependencies: dependencies:
@ -2915,6 +2982,12 @@ packages:
type-check: 0.4.0 type-check: 0.4.0
dev: true dev: true
/linkify-it@5.0.0:
resolution: {integrity: sha512-5aHCbzQRADcdP+ATqnDuhhJ/MRIqDkZX5pyjFHRRysS8vZ5AbqGEoFIb6pYHPZ+L/OC2Lc+xT8uHVVR5CAK/wQ==}
dependencies:
uc.micro: 2.1.0
dev: false
/load-yaml-file@0.2.0: /load-yaml-file@0.2.0:
resolution: {integrity: sha512-OfCBkGEw4nN6JLtgRidPX6QxjBQGQf72q3si2uvqyFEMbycSFFHwAZeXx6cJgFM9wmLrf9zBwCP3Ivqa+LLZPw==} resolution: {integrity: sha512-OfCBkGEw4nN6JLtgRidPX6QxjBQGQf72q3si2uvqyFEMbycSFFHwAZeXx6cJgFM9wmLrf9zBwCP3Ivqa+LLZPw==}
engines: {node: '>=6'} engines: {node: '>=6'}
@ -2978,6 +3051,18 @@ packages:
engines: {node: '>=0.10.0'} engines: {node: '>=0.10.0'}
dev: false dev: false
/markdown-it@14.1.0:
resolution: {integrity: sha512-a54IwgWPaeBCAAsv13YgmALOF1elABB08FxO9i+r4VFk5Vl4pKokRPeX8u5TCgSsPi6ec1otfLjdOpVcgbpshg==}
hasBin: true
dependencies:
argparse: 2.0.1
entities: 4.5.0
linkify-it: 5.0.0
mdurl: 2.0.0
punycode.js: 2.3.1
uc.micro: 2.1.0
dev: false
/markdown-table@3.0.3: /markdown-table@3.0.3:
resolution: {integrity: sha512-Z1NL3Tb1M9wH4XESsCDEksWoKTdlUafKc4pt0GRwjUyXaCFZ+dc3g2erqB6zm3szA2IUSi7VnPI+o/9jnxh9hw==} resolution: {integrity: sha512-Z1NL3Tb1M9wH4XESsCDEksWoKTdlUafKc4pt0GRwjUyXaCFZ+dc3g2erqB6zm3szA2IUSi7VnPI+o/9jnxh9hw==}
dev: false dev: false
@ -3186,6 +3271,10 @@ packages:
resolution: {integrity: sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==} resolution: {integrity: sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==}
dev: false dev: false
/mdurl@2.0.0:
resolution: {integrity: sha512-Lf+9+2r+Tdp5wXDXC4PcIBjTDtq4UKjCPMQhKIuzpJNW0b96kVqSwW0bT7FhRSfmAiFYgP+SCRvdrDozfh0U5w==}
dev: false
/merge-stream@2.0.0: /merge-stream@2.0.0:
resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==}
dev: false dev: false
@ -3847,6 +3936,10 @@ packages:
unist-util-visit-children: 2.0.2 unist-util-visit-children: 2.0.2
dev: false dev: false
/parse-srcset@1.0.2:
resolution: {integrity: sha512-/2qh0lav6CmI15FzA3i/2Bzk2zCgQhGMkvhOhKNcBVQ1ldgpbfiNTVslmooUmWJcADi1f1kIeynbDRVzNlfR6Q==}
dev: false
/parse5@6.0.1: /parse5@6.0.1:
resolution: {integrity: sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==} resolution: {integrity: sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==}
dev: false dev: false
@ -4003,6 +4096,11 @@ packages:
dev: false dev: false
optional: true optional: true
/punycode.js@2.3.1:
resolution: {integrity: sha512-uxFIHU0YlHYhDQtV4R9J6a52SLx28BCjT+4ieh7IGbgwVJWO+km431c4yRlREUAsAmt/uMjQUyQHNEPf0M39CA==}
engines: {node: '>=6'}
dev: false
/punycode@2.3.1: /punycode@2.3.1:
resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==}
engines: {node: '>=6'} engines: {node: '>=6'}
@ -4249,6 +4347,17 @@ packages:
resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==}
dev: false dev: false
/sanitize-html@2.13.0:
resolution: {integrity: sha512-Xff91Z+4Mz5QiNSLdLWwjgBDm5b1RU6xBT0+12rapjiaR7SwfRdjw8f+6Rir2MXKLrDicRFHdb51hGOAxmsUIA==}
dependencies:
deepmerge: 4.3.1
escape-string-regexp: 4.0.0
htmlparser2: 8.0.2
is-plain-object: 5.0.0
parse-srcset: 1.0.2
postcss: 8.4.31
dev: false
/sass-formatter@0.7.9: /sass-formatter@0.7.9:
resolution: {integrity: sha512-CWZ8XiSim+fJVG0cFLStwDvft1VI7uvXdCNJYXhDvowiv+DsbD1nXLiQ4zrE5UBvj5DWZJ93cwN0NX5PMsr1Pw==} resolution: {integrity: sha512-CWZ8XiSim+fJVG0cFLStwDvft1VI7uvXdCNJYXhDvowiv+DsbD1nXLiQ4zrE5UBvj5DWZJ93cwN0NX5PMsr1Pw==}
dependencies: dependencies:
@ -4777,6 +4886,10 @@ packages:
engines: {node: '>=14.17'} engines: {node: '>=14.17'}
hasBin: true hasBin: true
/uc.micro@2.1.0:
resolution: {integrity: sha512-ARDJmphmdvUk6Glw7y9DQ2bFkKBHwQHLi2lsaH6PPmz/Ka9sFOBsBluozhDltWmnv9u/cF6Rt87znRTPV+yp/A==}
dev: false
/undefsafe@2.0.5: /undefsafe@2.0.5:
resolution: {integrity: sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA==} resolution: {integrity: sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA==}
dev: false dev: false

View file

@ -23,14 +23,14 @@ const { title, description } = Astro.props;
</script> </script>
<script src="https://unpkg.com/hyperscript.org@0.9.11"></script> <script src="https://unpkg.com/hyperscript.org@0.9.11"></script>
<link <link
rel="stylesheet" rel="stylesheet"
href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css"
/> />
<!-- Set default theme --> <!-- Set default theme -->
<script is:inline> <script is:inline>
const theme = (() => { const theme = (() => {
if (localStorage.getItem("theme")?.startsWith("theme_")) { if (localStorage.getItem("theme")?.startsWith("theme_")) {
return localStorage.getItem("theme"); return localStorage.getItem("theme");
} }
@ -38,7 +38,7 @@ const theme = (() => {
return "theme_lunar_witch"; return "theme_lunar_witch";
} }
return "theme_Bluloco-Zsh-Light"; return "theme_Bluloco-Zsh-Light";
})(); })();
window.localStorage.setItem("theme", theme); window.localStorage.setItem("theme", theme);
document.documentElement.classList.add(theme); document.documentElement.classList.add(theme);
</script> </script>

View file

@ -21,7 +21,7 @@ themes.delete("default");
(<span class="p-name">Mira</span>) (<span class="p-name">Mira</span>)
</a> </a>
<!-- Author Metadata --> <!-- Author Metadata -->
<div hidden=""> <div style="display: none">
<span class="p-honorific-suffix">Kendo 3-Kyu Emeritus</span> <span class="p-honorific-suffix">Kendo 3-Kyu Emeritus</span>
<img <img
style="float:left; margin-right:4px" style="float:left; margin-right:4px"
@ -32,7 +32,41 @@ themes.delete("default");
<a class="u-email" href="mailto:mira@ミラ.コム">mira@ミラ.コム</a> <a class="u-email" href="mailto:mira@ミラ.コム">mira@ミラ.コム</a>
<span class="dt-bday">20XX-04-02</span> <span class="dt-bday">20XX-04-02</span>
<div> <div>
<span class="u-key"><!-- TODO --></span> <link
rel="pgpkey"
type="application/pgp-keys"
title="ArgentumCation's PGP Key"
href="https://keyserver.ubuntu.com/pks/lookup?op=get&search=0xdd8583a510deb949714ed847430c50ca90f98bbe"
/>
<pre
class="u-key">
-----BEGIN PGP PUBLIC KEY BLOCK-----
xjMEZIjWHxYJKwYBBAHaRw8BAQdAtI4ucxI1PHAJNSIj2TITGcW4BWK2muk3sFfh
cyTHvrXNMkFyZ2VudHVtQ2F0aW9uIDxhcmdlbnR1bWNhdGlvbkBhcmdlbnR1bWNh
dGlvbi5jb20+wo4EExYKADYFCwkIBwIGFQoJCAsCBRYCAwEAAh4EFiEE3YWDpRDe
uUlxTthHQwxQypD5i74FAmSOOF8CGwEACgkQQwxQypD5i74vTwD/Y3T/Jet8zvAK
8MhZvEG1H+M/eQFZaAzvSA2FOWmTRo8A+wbyQCbun9Bb5fCZ4/kxHcaGzVgUJSst
4j/RMrWUXdIMwo4EExYKADYCGyMWIQTdhYOlEN65SXFO2EdDDFDKkPmLvgUCZI35
+gULCQgHAgYVCgkICwIFFgIDAQACHgQACgkQQwxQypD5i747swEA/ugdrs+omBA1
2qNqysT9QPqcPnVjSSvYVpVYjNBVvNcBAIDoQJ4T3IEv353iY6oaZfRwoHeFNYWr
xJwaGReiIDQFwpMEExYKADsWIQTdhYOlEN65SXFO2EdDDFDKkPmLvgUCZIjWHwIb
IwULCQgHAgIiAgYVCgkICwIEFgIDAQIeBwIXgAAKCRBDDFDKkPmLvl3wAQCPR0mt
8omFlGLTYi8XJqGu/ha+wGeGrNCh7LixYHfHkwD+Im2LqQkcNXLAJPDK1vGGOh0A
D+bSiGT+5Ly40/gkPw7OOARkiNYfEgorBgEEAZdVAQUBAQdAFfcK11UfBm4IPs9w
i7YrZ78OxMRm4wf0qdSCQ7vQTDoDAQgHwn4EGBYKACYCGwwWIQTdhYOlEN65SXFO
2EdDDFDKkPmLvgUCZI442gUJAeaWOwAKCRBDDFDKkPmLvixuAP9xx1LE2u2qK85v
w8tX0Xq0CYMcoJHlCkr5QClBd5v9MwD/anBykPYGnZaMXpqwAEFeY/YkhGWgThkK
zzjj1FvXywDCeAQYFgoAIBYhBN2Fg6UQ3rlJcU7YR0MMUMqQ+Yu+BQJkiNYfAhsM
AAoJEEMMUMqQ+Yu+mwsBAJV56nL80qeusyuAGrwX+Olgto8tXpmyCVFp825lJRPr
AP93N28QeqAnPssteJrWMUN/vrPC8WMebSkvu9jj252dAc4zBGSOOGYWCSsGAQQB
2kcPAQEHQOY3LSWsg9XK1rI7r2E+1tmX3Vi7W5opwkvqO6AsduZRwsA1BBgWCgAm
FiEE3YWDpRDeuUlxTthHQwxQypD5i74FAmSOOGYCGyIFCQHhM4AAgQkQQwxQypD5
i752IAQZFgoAHRYhBJg7grqI4mDBitvwbRVrumZ8pbPPBQJkjjhmAAoJEBVrumZ8
pbPPVE8A/0PuUBsaR5QJP7CjiRB0oGmFs4Q/xTLV+PFoUNQNPNlGAQDxJNx844Bs
spKDee99cgh6KMzRApNjNAmDBkKezFilBw2HAQDATl1ZehPrkQA1H6ytL0mELqQY
lJj4vTGSsBtTxmZ2NgD9HBjGd6OEAjJR7pAmF+720JzDHgtELnFI1E+/5JkNyAw= =staE
-----END PGP PUBLIC KEY BLOCK-----
</pre>
</div> </div>
<span class="p-gender-identity">Who even knows anymore? (She/They)</span> <span class="p-gender-identity">Who even knows anymore? (She/They)</span>
<span class="u-sound" <span class="u-sound"
@ -66,6 +100,30 @@ themes.delete("default");
</div> </div>
</form> </form>
</div> </div>
<table class="palette">
<tr>
<td style="background-color:var(--background)">&nbsp;</td>
<td style="background-color:var(--black)">&nbsp;</td>
<td style="background-color:var(--red)">&nbsp;</td>
<td style="background-color:var(--green)">&nbsp;</td>
<td style="background-color:var(--yellow)">&nbsp;</td>
<td style="background-color:var(--blue)">&nbsp;</td>
<td style="background-color:var(--magenta)">&nbsp;</td>
<td style="background-color:var(--cyan)">&nbsp;</td>
<td style="background-color:var(--white)">&nbsp;</td>
</tr>
<tr>
<td style="background-color:var(--foreground)">&nbsp;</td>
<td style="background-color:var(--bright-black)">&nbsp;</td>
<td style="background-color:var(--bright-red)">&nbsp;</td>
<td style="background-color:var(--bright-green)">&nbsp;</td>
<td style="background-color:var(--bright-yellow)">&nbsp;</td>
<td style="background-color:var(--bright-blue)">&nbsp;</td>
<td style="background-color:var(--bright-magenta)">&nbsp;</td>
<td style="background-color:var(--bright-cyan)">&nbsp;</td>
<td style="background-color:var(--bright-white)">&nbsp;</td>
</tr>
</table>
<p style="margin:auto"> <p style="margin:auto">
<a href="https://fediring.net/previous?host=argentumcation.com">←</a> <a href="https://fediring.net/previous?host=argentumcation.com">←</a>
<a href="https://fediring.net/">Fediring</a> <a href="https://fediring.net/">Fediring</a>

View file

@ -39,11 +39,13 @@ tags: [linux, btrfs]
--- ---
- btrbk > [!todo] TODO
- in place conversion >
- subvol layout > - btrbk
- dual Linux boot > - in place conversion
- dual boot with windows > - subvol layout
- automated package manager snapshots > - dual Linux boot
- Swapfiles > - dual boot with windows
- zfs comparison > - automated package manager snapshots
> - Swapfiles
> - zfs comparison

View file

@ -2,7 +2,7 @@
title: "Getting up and running with Traefik" title: "Getting up and running with Traefik"
author: "ArgentumCation" author: "ArgentumCation"
layout: ../../layouts/Layout.astro layout: ../../layouts/Layout.astro
pubDate: "03 Apr, 2023" pubDate: "2023-04-03"
slug: "traefik-setup" slug: "traefik-setup"
--- ---
@ -11,10 +11,10 @@ slug: "traefik-setup"
- only problem is its an absolute bitch to set up - only problem is its an absolute bitch to set up
- Here's a stripped down `docker-compose.yml` to give you an idea of how I have it set up - Here's a stripped down `docker-compose.yml` to give you an idea of how I have it set up
- The end result should be a lighttpd server running on `blog.argentumcation.com` - The end result should be a lighttpd server running on `blog.argentumcation.com`
```yaml ```yaml
# Just setting some default values for my containers # Just setting some default values for my containers
x-service_defaults: x-service_defaults: &service_defaults
&service_defaults
env_file: .env env_file: .env
restart: unless-stopped restart: unless-stopped
extra_hosts: extra_hosts:
@ -32,11 +32,11 @@ services:
labels: labels:
- traefik.http.services.traefik-docker.loadbalancer.server.port=8080 - traefik.http.services.traefik-docker.loadbalancer.server.port=8080
# For the management interface # For the management interface
- '8080:8080' - "8080:8080"
# To let traefik receive incoming HTTP traffic # To let traefik receive incoming HTTP traffic
- '80:80' - "80:80"
# To let traefik receive incoming HTTPS traffic # To let traefik receive incoming HTTPS traffic
- '443:443' - "443:443"
volumes: volumes:
# This lets traefik see your docker services # This lets traefik see your docker services
- $DOCKER_SOCK:/var/run/docker.sock:ro - $DOCKER_SOCK:/var/run/docker.sock:ro
@ -57,8 +57,10 @@ services:
# automatically, but we'll just be explicit here # automatically, but we'll just be explicit here
- traefik.http.services.lighttpd-docker.loadbalancer.server.port=80 - traefik.http.services.lighttpd-docker.loadbalancer.server.port=80
``` ```
- `traefik.secrets.env` contains my cloudflare API key so that Traefik can automatically add DNS routes - `traefik.secrets.env` contains my cloudflare API key so that Traefik can automatically add DNS routes
- For reference, here's my `.env` file - For reference, here's my `.env` file
```sh ```sh
# GENERAL # GENERAL
PUBLIC=argentumcation.com PUBLIC=argentumcation.com
@ -80,8 +82,10 @@ PGID=1000
USER_UID=1000 USER_UID=1000
USER_GID=1000 USER_GID=1000
``` ```
- And of course, the actual traefik configuration files: - And of course, the actual traefik configuration files:
- `traefik.yml`: - `traefik.yml`:
```yaml ```yaml
accessLog: accessLog:
filePath: ./traefik-access.log filePath: ./traefik-access.log
@ -130,9 +134,10 @@ providers:
file: file:
directory: /etc/traefik/ directory: /etc/traefik/
watch: true watch: true
``` ```
- `traefik-dynamic.yml` - `traefik-dynamic.yml`
```yaml ```yaml
http: http:
middlewares: #This should redirect incoming http connections to https middlewares: #This should redirect incoming http connections to https

View file

@ -1,14 +1,11 @@
// 1. Import utilities from `astro:content` // 1. Import utilities from `astro:content`
import { z, defineCollection } from "astro:content"; import { defineCollection } from "astro:content";
import { rssSchema } from "@astrojs/rss";
// 2. Define your collection(s) // 2. Define your collection(s)
const blogCollection = defineCollection({ const blogCollection = defineCollection({
type: "content", type: "content",
schema: z.object({ schema: rssSchema,
title: z.string(),
tags: z.array(z.string()).optional(),
pubDate: z.string(),
author: z.string(),
}),
}); });
// 3. Export a single `collections` object to register your collection(s) // 3. Export a single `collections` object to register your collection(s)
// This key should match your collection directory name in "src/content" // This key should match your collection directory name in "src/content"

View file

@ -25,8 +25,10 @@ document.documentElement.classList.add(theme);
<body class="container"> <body class="container">
<Header /> <Header />
<main> <main>
<h1>{title}</h1> <article class="h-entry">
<h1 "p-name">{title}</h1>
<slot /> <slot />
</article>
</main> </main>
<Footer /> <Footer />
</body> </body>

View file

@ -5,17 +5,17 @@ import Footer from "../components/Footer.astro";
import dayjs from "dayjs"; import dayjs from "dayjs";
import utc from "dayjs/plugin/utc"; import utc from "dayjs/plugin/utc";
const { minutesRead } = Astro.props.frontmatter const { minutesRead } = Astro.props.frontmatter;
const { const {
frontmatter: { title, description, pubDate, image, author }, frontmatter: { title, description, pubDate, image, author, slug },
} = Astro.props; } = Astro.props;
dayjs.extend(utc); dayjs.extend(utc);
const lastModified = dayjs() const lastModified = (
.utc(Astro.props.frontmatter.lastModified) dayjs(Astro.props.frontmatter.pubDate) ??
.format("YYYY-MM-DD HH:mm:ss UTC"); dayjs().utc(Astro.props.frontmatter.lastModified)
).format("YYYY-MM-DD HH:mm:ss");
--- ---
<html lang="en"> <html lang="en">
@ -23,26 +23,27 @@ const lastModified = dayjs()
<BaseHead title={title} description={description} /> <BaseHead title={title} description={description} />
</head> </head>
<body class="container"> <body class="container">
<div class="meta u-url">{Astro.url}</div>
<Header /> <Header />
<main> <main>
<article> <article class="h-entry">
<div class="article-head"> <h1 class="p-name">{title}</h1>
<h1 class="title">{title}</h1>
<em>Written by: {author}</em><br /> <em>Written by: {author}</em><br />
{minutesRead} <br /> {minutesRead}
Published on: <time>{lastModified}</time> <br /> <br />
Last Changed: <time class="dt-published">{lastModified}</time>
<br />
{image && <img width={720} height={360} src={image} alt="" />} {image && <img width={720} height={360} src={image} alt="" />}
</div> <div class="e-content">
<div class="article-body">
<hr /> <hr />
<slot /> <slot />
</div> </div>
</article> </article>
</main>
<div class="footer-container">
<Footer /> <Footer />
</div>
<style> <style>
.meta {
display: none;
}
html { html {
min-height: 100vh; min-height: 100vh;
} }
@ -51,5 +52,6 @@ const lastModified = dayjs()
margin-top: 10px; margin-top: 10px;
} }
</style> </style>
</main>
</body> </body>
</html> </html>

View file

@ -1,6 +1,9 @@
import rss from "@astrojs/rss"; import rss from "@astrojs/rss";
import { getCollection } from "astro:content"; import { getCollection } from "astro:content";
import sanitizeHtml from 'sanitize-html';
import MarkdownIt from 'markdown-it';
const parser = new MarkdownIt();
export async function GET(context) { export async function GET(context) {
const blog = await getCollection("blog"); const blog = await getCollection("blog");
return rss({ return rss({
@ -11,7 +14,7 @@ export async function GET(context) {
title: post.data.title, title: post.data.title,
pubDate: post.data.pubDate, pubDate: post.data.pubDate,
description: post.data.description, description: post.data.description,
customData: post.data.customData, content: sanitizeHtml(parser.render(post.body)),
// Compute RSS link from post `slug` // Compute RSS link from post `slug`
// This example assumes all posts are rendered as `/blog/[slug]` routes // This example assumes all posts are rendered as `/blog/[slug]` routes
link: `/posts/${post.slug}/`, link: `/posts/${post.slug}/`,

View file

@ -1,15 +1,16 @@
--- ---
import { getCollection } from 'astro:content'; import { getCollection } from "astro:content";
// 1. Generate a new path for every collection entry // 1. Generate a new path for every collection entry
export async function getStaticPaths() { export async function getStaticPaths() {
const blogEntries = await getCollection('blog'); const blogEntries = await getCollection("blog");
return blogEntries.map(entry => ({ return blogEntries.map((entry) => ({
params: { slug: entry.slug }, props: { entry }, params: { slug: entry.slug },
props: { entry },
})); }));
} }
// 2. For your template, you can get the entry directly from the prop // 2. For your template, you can get the entry directly from the prop
const { entry } = Astro.props; const { entry } = Astro.props;
const { Content } = await entry.render(); const { Content } = await entry.render();
--- ---
<h1>{entry.data.title}</h1>
<Content /> <Content />

View file

@ -1,4 +1,5 @@
@import "https://unpkg.com/terminal.css@0.7.4/dist/terminal.min.css"; @import "https://unpkg.com/terminal.css@0.7.4/dist/terminal.min.css";
@import url("https://fonts.googleapis.com/css2?family=Recursive:wght,MONO@300..1000,1&display=swap");
:root { :root {
/* Terminal Colors */ /* Terminal Colors */
@ -27,7 +28,7 @@
--astro-code-token-punctuation: var(--base05, --foreground); --astro-code-token-punctuation: var(--base05, --foreground);
--astro-code-token-link: var(--base09, var(--orange, var(--cyan))); --astro-code-token-link: var(--base09, var(--orange, var(--cyan)));
/*Fonts*/ /*Fonts*/
--mono-font-stack: monospace, sans-serif; --mono-font-stack: "Recursive", monospace;
--font-stack: var(--mono-font-stack); --font-stack: var(--mono-font-stack);
} }
@ -276,3 +277,48 @@ ol ol ol ol ol ol ol ol ol ol {
width: 88px; width: 88px;
height: 31px; height: 31px;
} }
div[data-callout] {
padding: 0.75em;
color: var(--background-color);
}
div[data-callout-type="todo"] {
background-color: var(--foreground);
}
div[data-callout-type="info"] {
background-color: var(--primary-color);
}
div[data-callout-type="question"] {
background-color: var(--tertiary-color);
}
div[data-callout-type="warn"] {
background-color: var(--base03, var(--yellow));
}
div[data-callout-type="fail"] {
background-color: var(--error-color);
}
div[data-callout-type="error"] {
background-color: var(--error-color);
}
div[data-callout-title] {
font-weight: bold;
font-size: 1.5em;
}
.palette {
margin: auto;
width: min-content;
}
.palette td {
border: none;
line-height: 1em;
max-width: 4em;
}