New article!
All checks were successful
Docker Deploy / build-and-push (push) Successful in 4m36s

This commit is contained in:
2025-12-21 01:09:02 -07:00
parent 70ee8a2c42
commit 3b5f33aaf7
3 changed files with 155 additions and 117 deletions

View File

@@ -21,7 +21,7 @@
"@tailwindcss/vite": "^4.1.18", "@tailwindcss/vite": "^4.1.18",
"astro": "^5.16.6", "astro": "^5.16.6",
"astro-icon": "^1.1.5", "astro-icon": "^1.1.5",
"lucide-preact": "^0.561.0", "lucide-preact": "^0.562.0",
"preact": "^10.28.0", "preact": "^10.28.0",
"react": "^19.2.3", "react": "^19.2.3",
"sharp": "^0.34.5", "sharp": "^0.34.5",

232
pnpm-lock.yaml generated
View File

@@ -10,10 +10,10 @@ importers:
dependencies: dependencies:
'@astrojs/mdx': '@astrojs/mdx':
specifier: ^4.3.13 specifier: ^4.3.13
version: 4.3.13(astro@5.16.6(@types/node@25.0.3)(jiti@2.6.1)(lightningcss@1.30.2)(rollup@4.53.5)(typescript@5.8.3)) version: 4.3.13(astro@5.16.6(@types/node@25.0.3)(jiti@2.6.1)(lightningcss@1.30.2)(rollup@4.54.0)(typescript@5.8.3))
'@astrojs/node': '@astrojs/node':
specifier: ^9.5.1 specifier: ^9.5.1
version: 9.5.1(astro@5.16.6(@types/node@25.0.3)(jiti@2.6.1)(lightningcss@1.30.2)(rollup@4.53.5)(typescript@5.8.3)) version: 9.5.1(astro@5.16.6(@types/node@25.0.3)(jiti@2.6.1)(lightningcss@1.30.2)(rollup@4.54.0)(typescript@5.8.3))
'@astrojs/preact': '@astrojs/preact':
specifier: ^4.1.3 specifier: ^4.1.3
version: 4.1.3(@babel/core@7.28.5)(@types/node@25.0.3)(jiti@2.6.1)(lightningcss@1.30.2)(preact@10.28.0) version: 4.1.3(@babel/core@7.28.5)(@types/node@25.0.3)(jiti@2.6.1)(lightningcss@1.30.2)(preact@10.28.0)
@@ -37,13 +37,13 @@ importers:
version: 4.1.18(vite@6.4.1(@types/node@25.0.3)(jiti@2.6.1)(lightningcss@1.30.2)) version: 4.1.18(vite@6.4.1(@types/node@25.0.3)(jiti@2.6.1)(lightningcss@1.30.2))
astro: astro:
specifier: ^5.16.6 specifier: ^5.16.6
version: 5.16.6(@types/node@25.0.3)(jiti@2.6.1)(lightningcss@1.30.2)(rollup@4.53.5)(typescript@5.8.3) version: 5.16.6(@types/node@25.0.3)(jiti@2.6.1)(lightningcss@1.30.2)(rollup@4.54.0)(typescript@5.8.3)
astro-icon: astro-icon:
specifier: ^1.1.5 specifier: ^1.1.5
version: 1.1.5 version: 1.1.5
lucide-preact: lucide-preact:
specifier: ^0.561.0 specifier: ^0.562.0
version: 0.561.0(preact@10.28.0) version: 0.562.0(preact@10.28.0)
preact: preact:
specifier: ^10.28.0 specifier: ^10.28.0
version: 10.28.0 version: 10.28.0
@@ -643,113 +643,113 @@ packages:
rollup: rollup:
optional: true optional: true
'@rollup/rollup-android-arm-eabi@4.53.5': '@rollup/rollup-android-arm-eabi@4.54.0':
resolution: {integrity: sha512-iDGS/h7D8t7tvZ1t6+WPK04KD0MwzLZrG0se1hzBjSi5fyxlsiggoJHwh18PCFNn7tG43OWb6pdZ6Y+rMlmyNQ==} resolution: {integrity: sha512-OywsdRHrFvCdvsewAInDKCNyR3laPA2mc9bRYJ6LBp5IyvF3fvXbbNR0bSzHlZVFtn6E0xw2oZlyjg4rKCVcng==}
cpu: [arm] cpu: [arm]
os: [android] os: [android]
'@rollup/rollup-android-arm64@4.53.5': '@rollup/rollup-android-arm64@4.54.0':
resolution: {integrity: sha512-wrSAViWvZHBMMlWk6EJhvg8/rjxzyEhEdgfMMjREHEq11EtJ6IP6yfcCH57YAEca2Oe3FNCE9DSTgU70EIGmVw==} resolution: {integrity: sha512-Skx39Uv+u7H224Af+bDgNinitlmHyQX1K/atIA32JP3JQw6hVODX5tkbi2zof/E69M1qH2UoN3Xdxgs90mmNYw==}
cpu: [arm64] cpu: [arm64]
os: [android] os: [android]
'@rollup/rollup-darwin-arm64@4.53.5': '@rollup/rollup-darwin-arm64@4.54.0':
resolution: {integrity: sha512-S87zZPBmRO6u1YXQLwpveZm4JfPpAa6oHBX7/ghSiGH3rz/KDgAu1rKdGutV+WUI6tKDMbaBJomhnT30Y2t4VQ==} resolution: {integrity: sha512-k43D4qta/+6Fq+nCDhhv9yP2HdeKeP56QrUUTW7E6PhZP1US6NDqpJj4MY0jBHlJivVJD5P8NxrjuobZBJTCRw==}
cpu: [arm64] cpu: [arm64]
os: [darwin] os: [darwin]
'@rollup/rollup-darwin-x64@4.53.5': '@rollup/rollup-darwin-x64@4.54.0':
resolution: {integrity: sha512-YTbnsAaHo6VrAczISxgpTva8EkfQus0VPEVJCEaboHtZRIb6h6j0BNxRBOwnDciFTZLDPW5r+ZBmhL/+YpTZgA==} resolution: {integrity: sha512-cOo7biqwkpawslEfox5Vs8/qj83M/aZCSSNIWpVzfU2CYHa2G3P1UN5WF01RdTHSgCkri7XOlTdtk17BezlV3A==}
cpu: [x64] cpu: [x64]
os: [darwin] os: [darwin]
'@rollup/rollup-freebsd-arm64@4.53.5': '@rollup/rollup-freebsd-arm64@4.54.0':
resolution: {integrity: sha512-1T8eY2J8rKJWzaznV7zedfdhD1BqVs1iqILhmHDq/bqCUZsrMt+j8VCTHhP0vdfbHK3e1IQ7VYx3jlKqwlf+vw==} resolution: {integrity: sha512-miSvuFkmvFbgJ1BevMa4CPCFt5MPGw094knM64W9I0giUIMMmRYcGW/JWZDriaw/k1kOBtsWh1z6nIFV1vPNtA==}
cpu: [arm64] cpu: [arm64]
os: [freebsd] os: [freebsd]
'@rollup/rollup-freebsd-x64@4.53.5': '@rollup/rollup-freebsd-x64@4.54.0':
resolution: {integrity: sha512-sHTiuXyBJApxRn+VFMaw1U+Qsz4kcNlxQ742snICYPrY+DDL8/ZbaC4DVIB7vgZmp3jiDaKA0WpBdP0aqPJoBQ==} resolution: {integrity: sha512-KGXIs55+b/ZfZsq9aR026tmr/+7tq6VG6MsnrvF4H8VhwflTIuYh+LFUlIsRdQSgrgmtM3fVATzEAj4hBQlaqQ==}
cpu: [x64] cpu: [x64]
os: [freebsd] os: [freebsd]
'@rollup/rollup-linux-arm-gnueabihf@4.53.5': '@rollup/rollup-linux-arm-gnueabihf@4.54.0':
resolution: {integrity: sha512-dV3T9MyAf0w8zPVLVBptVlzaXxka6xg1f16VAQmjg+4KMSTWDvhimI/Y6mp8oHwNrmnmVl9XxJ/w/mO4uIQONA==} resolution: {integrity: sha512-EHMUcDwhtdRGlXZsGSIuXSYwD5kOT9NVnx9sqzYiwAc91wfYOE1g1djOEDseZJKKqtHAHGwnGPQu3kytmfaXLQ==}
cpu: [arm] cpu: [arm]
os: [linux] os: [linux]
'@rollup/rollup-linux-arm-musleabihf@4.53.5': '@rollup/rollup-linux-arm-musleabihf@4.54.0':
resolution: {integrity: sha512-wIGYC1x/hyjP+KAu9+ewDI+fi5XSNiUi9Bvg6KGAh2TsNMA3tSEs+Sh6jJ/r4BV/bx/CyWu2ue9kDnIdRyafcQ==} resolution: {integrity: sha512-+pBrqEjaakN2ySv5RVrj/qLytYhPKEUwk+e3SFU5jTLHIcAtqh2rLrd/OkbNuHJpsBgxsD8ccJt5ga/SeG0JmA==}
cpu: [arm] cpu: [arm]
os: [linux] os: [linux]
'@rollup/rollup-linux-arm64-gnu@4.53.5': '@rollup/rollup-linux-arm64-gnu@4.54.0':
resolution: {integrity: sha512-Y+qVA0D9d0y2FRNiG9oM3Hut/DgODZbU9I8pLLPwAsU0tUKZ49cyV1tzmB/qRbSzGvY8lpgGkJuMyuhH7Ma+Vg==} resolution: {integrity: sha512-NSqc7rE9wuUaRBsBp5ckQ5CVz5aIRKCwsoa6WMF7G01sX3/qHUw/z4pv+D+ahL1EIKy6Enpcnz1RY8pf7bjwng==}
cpu: [arm64] cpu: [arm64]
os: [linux] os: [linux]
'@rollup/rollup-linux-arm64-musl@4.53.5': '@rollup/rollup-linux-arm64-musl@4.54.0':
resolution: {integrity: sha512-juaC4bEgJsyFVfqhtGLz8mbopaWD+WeSOYr5E16y+1of6KQjc0BpwZLuxkClqY1i8sco+MdyoXPNiCkQou09+g==} resolution: {integrity: sha512-gr5vDbg3Bakga5kbdpqx81m2n9IX8M6gIMlQQIXiLTNeQW6CucvuInJ91EuCJ/JYvc+rcLLsDFcfAD1K7fMofg==}
cpu: [arm64] cpu: [arm64]
os: [linux] os: [linux]
'@rollup/rollup-linux-loong64-gnu@4.53.5': '@rollup/rollup-linux-loong64-gnu@4.54.0':
resolution: {integrity: sha512-rIEC0hZ17A42iXtHX+EPJVL/CakHo+tT7W0pbzdAGuWOt2jxDFh7A/lRhsNHBcqL4T36+UiAgwO8pbmn3dE8wA==} resolution: {integrity: sha512-gsrtB1NA3ZYj2vq0Rzkylo9ylCtW/PhpLEivlgWe0bpgtX5+9j9EZa0wtZiCjgu6zmSeZWyI/e2YRX1URozpIw==}
cpu: [loong64] cpu: [loong64]
os: [linux] os: [linux]
'@rollup/rollup-linux-ppc64-gnu@4.53.5': '@rollup/rollup-linux-ppc64-gnu@4.54.0':
resolution: {integrity: sha512-T7l409NhUE552RcAOcmJHj3xyZ2h7vMWzcwQI0hvn5tqHh3oSoclf9WgTl+0QqffWFG8MEVZZP1/OBglKZx52Q==} resolution: {integrity: sha512-y3qNOfTBStmFNq+t4s7Tmc9hW2ENtPg8FeUD/VShI7rKxNW7O4fFeaYbMsd3tpFlIg1Q8IapFgy7Q9i2BqeBvA==}
cpu: [ppc64] cpu: [ppc64]
os: [linux] os: [linux]
'@rollup/rollup-linux-riscv64-gnu@4.53.5': '@rollup/rollup-linux-riscv64-gnu@4.54.0':
resolution: {integrity: sha512-7OK5/GhxbnrMcxIFoYfhV/TkknarkYC1hqUw1wU2xUN3TVRLNT5FmBv4KkheSG2xZ6IEbRAhTooTV2+R5Tk0lQ==} resolution: {integrity: sha512-89sepv7h2lIVPsFma8iwmccN7Yjjtgz0Rj/Ou6fEqg3HDhpCa+Et+YSufy27i6b0Wav69Qv4WBNl3Rs6pwhebQ==}
cpu: [riscv64] cpu: [riscv64]
os: [linux] os: [linux]
'@rollup/rollup-linux-riscv64-musl@4.53.5': '@rollup/rollup-linux-riscv64-musl@4.54.0':
resolution: {integrity: sha512-GwuDBE/PsXaTa76lO5eLJTyr2k8QkPipAyOrs4V/KJufHCZBJ495VCGJol35grx9xryk4V+2zd3Ri+3v7NPh+w==} resolution: {integrity: sha512-ZcU77ieh0M2Q8Ur7D5X7KvK+UxbXeDHwiOt/CPSBTI1fBmeDMivW0dPkdqkT4rOgDjrDDBUed9x4EgraIKoR2A==}
cpu: [riscv64] cpu: [riscv64]
os: [linux] os: [linux]
'@rollup/rollup-linux-s390x-gnu@4.53.5': '@rollup/rollup-linux-s390x-gnu@4.54.0':
resolution: {integrity: sha512-IAE1Ziyr1qNfnmiQLHBURAD+eh/zH1pIeJjeShleII7Vj8kyEm2PF77o+lf3WTHDpNJcu4IXJxNO0Zluro8bOw==} resolution: {integrity: sha512-2AdWy5RdDF5+4YfG/YesGDDtbyJlC9LHmL6rZw6FurBJ5n4vFGupsOBGfwMRjBYH7qRQowT8D/U4LoSvVwOhSQ==}
cpu: [s390x] cpu: [s390x]
os: [linux] os: [linux]
'@rollup/rollup-linux-x64-gnu@4.53.5': '@rollup/rollup-linux-x64-gnu@4.54.0':
resolution: {integrity: sha512-Pg6E+oP7GvZ4XwgRJBuSXZjcqpIW3yCBhK4BcsANvb47qMvAbCjR6E+1a/U2WXz1JJxp9/4Dno3/iSJLcm5auw==} resolution: {integrity: sha512-WGt5J8Ij/rvyqpFexxk3ffKqqbLf9AqrTBbWDk7ApGUzaIs6V+s2s84kAxklFwmMF/vBNGrVdYgbblCOFFezMQ==}
cpu: [x64] cpu: [x64]
os: [linux] os: [linux]
'@rollup/rollup-linux-x64-musl@4.53.5': '@rollup/rollup-linux-x64-musl@4.54.0':
resolution: {integrity: sha512-txGtluxDKTxaMDzUduGP0wdfng24y1rygUMnmlUJ88fzCCULCLn7oE5kb2+tRB+MWq1QDZT6ObT5RrR8HFRKqg==} resolution: {integrity: sha512-JzQmb38ATzHjxlPHuTH6tE7ojnMKM2kYNzt44LO/jJi8BpceEC8QuXYA908n8r3CNuG/B3BV8VR3Hi1rYtmPiw==}
cpu: [x64] cpu: [x64]
os: [linux] os: [linux]
'@rollup/rollup-openharmony-arm64@4.53.5': '@rollup/rollup-openharmony-arm64@4.54.0':
resolution: {integrity: sha512-3DFiLPnTxiOQV993fMc+KO8zXHTcIjgaInrqlG8zDp1TlhYl6WgrOHuJkJQ6M8zHEcntSJsUp1XFZSY8C1DYbg==} resolution: {integrity: sha512-huT3fd0iC7jigGh7n3q/+lfPcXxBi+om/Rs3yiFxjvSxbSB6aohDFXbWvlspaqjeOh+hx7DDHS+5Es5qRkWkZg==}
cpu: [arm64] cpu: [arm64]
os: [openharmony] os: [openharmony]
'@rollup/rollup-win32-arm64-msvc@4.53.5': '@rollup/rollup-win32-arm64-msvc@4.54.0':
resolution: {integrity: sha512-nggc/wPpNTgjGg75hu+Q/3i32R00Lq1B6N1DO7MCU340MRKL3WZJMjA9U4K4gzy3dkZPXm9E1Nc81FItBVGRlA==} resolution: {integrity: sha512-c2V0W1bsKIKfbLMBu/WGBz6Yci8nJ/ZJdheE0EwB73N3MvHYKiKGs3mVilX4Gs70eGeDaMqEob25Tw2Gb9Nqyw==}
cpu: [arm64] cpu: [arm64]
os: [win32] os: [win32]
'@rollup/rollup-win32-ia32-msvc@4.53.5': '@rollup/rollup-win32-ia32-msvc@4.54.0':
resolution: {integrity: sha512-U/54pTbdQpPLBdEzCT6NBCFAfSZMvmjr0twhnD9f4EIvlm9wy3jjQ38yQj1AGznrNO65EWQMgm/QUjuIVrYF9w==} resolution: {integrity: sha512-woEHgqQqDCkAzrDhvDipnSirm5vxUXtSKDYTVpZG3nUdW/VVB5VdCYA2iReSj/u3yCZzXID4kuKG7OynPnB3WQ==}
cpu: [ia32] cpu: [ia32]
os: [win32] os: [win32]
'@rollup/rollup-win32-x64-gnu@4.53.5': '@rollup/rollup-win32-x64-gnu@4.54.0':
resolution: {integrity: sha512-2NqKgZSuLH9SXBBV2dWNRCZmocgSOx8OJSdpRaEcRlIfX8YrKxUT6z0F1NpvDVhOsl190UFTRh2F2WDWWCYp3A==} resolution: {integrity: sha512-dzAc53LOuFvHwbCEOS0rPbXp6SIhAf2txMP5p6mGyOXXw5mWY8NGGbPMPrs4P1WItkfApDathBj/NzMLUZ9rtQ==}
cpu: [x64] cpu: [x64]
os: [win32] os: [win32]
'@rollup/rollup-win32-x64-msvc@4.53.5': '@rollup/rollup-win32-x64-msvc@4.54.0':
resolution: {integrity: sha512-JRpZUhCfhZ4keB5v0fe02gQJy05GqboPOaxvjugW04RLSYYoB/9t2lx2u/tMs/Na/1NXfY8QYjgRljRpN+MjTQ==} resolution: {integrity: sha512-hYT5d3YNdSh3mbCU1gwQyPgQd3T2ne0A3KG8KSBdav5TiBg6eInVmV+TeR5uHufiIgSFg0XsOWGW5/RhNcSvPg==}
cpu: [x64] cpu: [x64]
os: [win32] os: [win32]
@@ -997,8 +997,8 @@ packages:
base64-js@1.5.1: base64-js@1.5.1:
resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==}
baseline-browser-mapping@2.9.9: baseline-browser-mapping@2.9.11:
resolution: {integrity: sha512-V8fbOCSeOFvlDj7LLChUcqbZrdKD9RU/VR260piF1790vT0mfLSwGc/Qzxv3IqiTukOpNtItePa0HBpMAj7MDg==} resolution: {integrity: sha512-Sg0xJUNDU1sJNGdfGWhVHX0kkZ+HWcvmVymJbj6NSgZZmW/8S9Y2HQ5euytnIgakgxN6papOAWiwDo1ctFDcoQ==}
hasBin: true hasBin: true
bidi-js@1.0.3: bidi-js@1.0.3:
@@ -1029,8 +1029,8 @@ packages:
resolution: {integrity: sha512-8WB3Jcas3swSvjIeA2yvCJ+Miyz5l1ZmB6HFb9R1317dt9LCQoswg/BGrmAmkWVEszSrrg4RwmO46qIm2OEnSA==} resolution: {integrity: sha512-8WB3Jcas3swSvjIeA2yvCJ+Miyz5l1ZmB6HFb9R1317dt9LCQoswg/BGrmAmkWVEszSrrg4RwmO46qIm2OEnSA==}
engines: {node: '>=16'} engines: {node: '>=16'}
caniuse-lite@1.0.30001760: caniuse-lite@1.0.30001761:
resolution: {integrity: sha512-7AAMPcueWELt1p3mi13HR/LHH0TJLT11cnwDJEs3xA4+CK/PLKeO9Kl1oru24htkyUKtkGCvAx4ohB0Ttry8Dw==} resolution: {integrity: sha512-JF9ptu1vP2coz98+5051jZ4PwQgd2ni8A+gYSN7EA7dPKIMf0pDlSUxhdmVOaV3/fYK5uWBkgSXJaRLr4+3A6g==}
ccount@2.0.1: ccount@2.0.1:
resolution: {integrity: sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==} resolution: {integrity: sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==}
@@ -1641,8 +1641,8 @@ packages:
lru-cache@5.1.1: lru-cache@5.1.1:
resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==}
lucide-preact@0.561.0: lucide-preact@0.562.0:
resolution: {integrity: sha512-K8FHyuvOACZybztKYljWyzWylN4l5M7XXDw9v+HEto7WdNo1Y8QcoNdHeN7U4GygWtJNJlEtsLH1YPsfVAvBQA==} resolution: {integrity: sha512-1LOH/QVkxZ0zMspMPcVAbEfmwKHM3llG8ikA8j2M7GaMKRHZLn32PohXnvmsqDMhrCBsBc9pt1ybPCUYteywtQ==}
peerDependencies: peerDependencies:
preact: ^10.27.2 preact: ^10.27.2
@@ -2111,8 +2111,8 @@ packages:
retext@9.0.0: retext@9.0.0:
resolution: {integrity: sha512-sbMDcpHCNjvlheSgMfEcVrZko3cDzdbe1x/e7G66dFp0Ff7Mldvi2uv6JkJQzdRcvLYE8CA8Oe8siQx8ZOgTcA==} resolution: {integrity: sha512-sbMDcpHCNjvlheSgMfEcVrZko3cDzdbe1x/e7G66dFp0Ff7Mldvi2uv6JkJQzdRcvLYE8CA8Oe8siQx8ZOgTcA==}
rollup@4.53.5: rollup@4.54.0:
resolution: {integrity: sha512-iTNAbFSlRpcHeeWu73ywU/8KuU/LZmNCSxp6fjQkJBD3ivUb8tpDrXhIxEzA05HlYMEwmtaUnb3RP+YNv162OQ==} resolution: {integrity: sha512-3nk8Y3a9Ea8szgKhinMlGMhGMw89mqule3KWczxhIzqudyHdCIOHw8WJlj/r329fACjKLEh13ZSk7oE22kyeIw==}
engines: {node: '>=18.0.0', npm: '>=8.0.0'} engines: {node: '>=18.0.0', npm: '>=8.0.0'}
hasBin: true hasBin: true
@@ -2593,12 +2593,12 @@ snapshots:
transitivePeerDependencies: transitivePeerDependencies:
- supports-color - supports-color
'@astrojs/mdx@4.3.13(astro@5.16.6(@types/node@25.0.3)(jiti@2.6.1)(lightningcss@1.30.2)(rollup@4.53.5)(typescript@5.8.3))': '@astrojs/mdx@4.3.13(astro@5.16.6(@types/node@25.0.3)(jiti@2.6.1)(lightningcss@1.30.2)(rollup@4.54.0)(typescript@5.8.3))':
dependencies: dependencies:
'@astrojs/markdown-remark': 6.3.10 '@astrojs/markdown-remark': 6.3.10
'@mdx-js/mdx': 3.1.1 '@mdx-js/mdx': 3.1.1
acorn: 8.15.0 acorn: 8.15.0
astro: 5.16.6(@types/node@25.0.3)(jiti@2.6.1)(lightningcss@1.30.2)(rollup@4.53.5)(typescript@5.8.3) astro: 5.16.6(@types/node@25.0.3)(jiti@2.6.1)(lightningcss@1.30.2)(rollup@4.54.0)(typescript@5.8.3)
es-module-lexer: 1.7.0 es-module-lexer: 1.7.0
estree-util-visit: 2.0.0 estree-util-visit: 2.0.0
hast-util-to-html: 9.0.5 hast-util-to-html: 9.0.5
@@ -2612,10 +2612,10 @@ snapshots:
transitivePeerDependencies: transitivePeerDependencies:
- supports-color - supports-color
'@astrojs/node@9.5.1(astro@5.16.6(@types/node@25.0.3)(jiti@2.6.1)(lightningcss@1.30.2)(rollup@4.53.5)(typescript@5.8.3))': '@astrojs/node@9.5.1(astro@5.16.6(@types/node@25.0.3)(jiti@2.6.1)(lightningcss@1.30.2)(rollup@4.54.0)(typescript@5.8.3))':
dependencies: dependencies:
'@astrojs/internal-helpers': 0.7.5 '@astrojs/internal-helpers': 0.7.5
astro: 5.16.6(@types/node@25.0.3)(jiti@2.6.1)(lightningcss@1.30.2)(rollup@4.53.5)(typescript@5.8.3) astro: 5.16.6(@types/node@25.0.3)(jiti@2.6.1)(lightningcss@1.30.2)(rollup@4.54.0)(typescript@5.8.3)
send: 1.2.1 send: 1.2.1
server-destroy: 1.0.1 server-destroy: 1.0.1
transitivePeerDependencies: transitivePeerDependencies:
@@ -3221,78 +3221,78 @@ snapshots:
estree-walker: 2.0.2 estree-walker: 2.0.2
picomatch: 2.3.1 picomatch: 2.3.1
'@rollup/pluginutils@5.3.0(rollup@4.53.5)': '@rollup/pluginutils@5.3.0(rollup@4.54.0)':
dependencies: dependencies:
'@types/estree': 1.0.8 '@types/estree': 1.0.8
estree-walker: 2.0.2 estree-walker: 2.0.2
picomatch: 4.0.3 picomatch: 4.0.3
optionalDependencies: optionalDependencies:
rollup: 4.53.5 rollup: 4.54.0
'@rollup/rollup-android-arm-eabi@4.53.5': '@rollup/rollup-android-arm-eabi@4.54.0':
optional: true optional: true
'@rollup/rollup-android-arm64@4.53.5': '@rollup/rollup-android-arm64@4.54.0':
optional: true optional: true
'@rollup/rollup-darwin-arm64@4.53.5': '@rollup/rollup-darwin-arm64@4.54.0':
optional: true optional: true
'@rollup/rollup-darwin-x64@4.53.5': '@rollup/rollup-darwin-x64@4.54.0':
optional: true optional: true
'@rollup/rollup-freebsd-arm64@4.53.5': '@rollup/rollup-freebsd-arm64@4.54.0':
optional: true optional: true
'@rollup/rollup-freebsd-x64@4.53.5': '@rollup/rollup-freebsd-x64@4.54.0':
optional: true optional: true
'@rollup/rollup-linux-arm-gnueabihf@4.53.5': '@rollup/rollup-linux-arm-gnueabihf@4.54.0':
optional: true optional: true
'@rollup/rollup-linux-arm-musleabihf@4.53.5': '@rollup/rollup-linux-arm-musleabihf@4.54.0':
optional: true optional: true
'@rollup/rollup-linux-arm64-gnu@4.53.5': '@rollup/rollup-linux-arm64-gnu@4.54.0':
optional: true optional: true
'@rollup/rollup-linux-arm64-musl@4.53.5': '@rollup/rollup-linux-arm64-musl@4.54.0':
optional: true optional: true
'@rollup/rollup-linux-loong64-gnu@4.53.5': '@rollup/rollup-linux-loong64-gnu@4.54.0':
optional: true optional: true
'@rollup/rollup-linux-ppc64-gnu@4.53.5': '@rollup/rollup-linux-ppc64-gnu@4.54.0':
optional: true optional: true
'@rollup/rollup-linux-riscv64-gnu@4.53.5': '@rollup/rollup-linux-riscv64-gnu@4.54.0':
optional: true optional: true
'@rollup/rollup-linux-riscv64-musl@4.53.5': '@rollup/rollup-linux-riscv64-musl@4.54.0':
optional: true optional: true
'@rollup/rollup-linux-s390x-gnu@4.53.5': '@rollup/rollup-linux-s390x-gnu@4.54.0':
optional: true optional: true
'@rollup/rollup-linux-x64-gnu@4.53.5': '@rollup/rollup-linux-x64-gnu@4.54.0':
optional: true optional: true
'@rollup/rollup-linux-x64-musl@4.53.5': '@rollup/rollup-linux-x64-musl@4.54.0':
optional: true optional: true
'@rollup/rollup-openharmony-arm64@4.53.5': '@rollup/rollup-openharmony-arm64@4.54.0':
optional: true optional: true
'@rollup/rollup-win32-arm64-msvc@4.53.5': '@rollup/rollup-win32-arm64-msvc@4.54.0':
optional: true optional: true
'@rollup/rollup-win32-ia32-msvc@4.53.5': '@rollup/rollup-win32-ia32-msvc@4.54.0':
optional: true optional: true
'@rollup/rollup-win32-x64-gnu@4.53.5': '@rollup/rollup-win32-x64-gnu@4.54.0':
optional: true optional: true
'@rollup/rollup-win32-x64-msvc@4.53.5': '@rollup/rollup-win32-x64-msvc@4.54.0':
optional: true optional: true
'@shikijs/core@3.20.0': '@shikijs/core@3.20.0':
@@ -3495,7 +3495,7 @@ snapshots:
transitivePeerDependencies: transitivePeerDependencies:
- supports-color - supports-color
astro@5.16.6(@types/node@25.0.3)(jiti@2.6.1)(lightningcss@1.30.2)(rollup@4.53.5)(typescript@5.8.3): astro@5.16.6(@types/node@25.0.3)(jiti@2.6.1)(lightningcss@1.30.2)(rollup@4.54.0)(typescript@5.8.3):
dependencies: dependencies:
'@astrojs/compiler': 2.13.0 '@astrojs/compiler': 2.13.0
'@astrojs/internal-helpers': 0.7.5 '@astrojs/internal-helpers': 0.7.5
@@ -3503,7 +3503,7 @@ snapshots:
'@astrojs/telemetry': 3.3.0 '@astrojs/telemetry': 3.3.0
'@capsizecss/unpack': 3.0.1 '@capsizecss/unpack': 3.0.1
'@oslojs/encoding': 1.1.0 '@oslojs/encoding': 1.1.0
'@rollup/pluginutils': 5.3.0(rollup@4.53.5) '@rollup/pluginutils': 5.3.0(rollup@4.54.0)
acorn: 8.15.0 acorn: 8.15.0
aria-query: 5.3.2 aria-query: 5.3.2
axobject-query: 4.1.0 axobject-query: 4.1.0
@@ -3611,7 +3611,7 @@ snapshots:
base64-js@1.5.1: {} base64-js@1.5.1: {}
baseline-browser-mapping@2.9.9: {} baseline-browser-mapping@2.9.11: {}
bidi-js@1.0.3: bidi-js@1.0.3:
dependencies: dependencies:
@@ -3640,8 +3640,8 @@ snapshots:
browserslist@4.28.1: browserslist@4.28.1:
dependencies: dependencies:
baseline-browser-mapping: 2.9.9 baseline-browser-mapping: 2.9.11
caniuse-lite: 1.0.30001760 caniuse-lite: 1.0.30001761
electron-to-chromium: 1.5.267 electron-to-chromium: 1.5.267
node-releases: 2.0.27 node-releases: 2.0.27
update-browserslist-db: 1.2.3(browserslist@4.28.1) update-browserslist-db: 1.2.3(browserslist@4.28.1)
@@ -3650,7 +3650,7 @@ snapshots:
camelcase@8.0.0: {} camelcase@8.0.0: {}
caniuse-lite@1.0.30001760: {} caniuse-lite@1.0.30001761: {}
ccount@2.0.1: {} ccount@2.0.1: {}
@@ -4315,7 +4315,7 @@ snapshots:
dependencies: dependencies:
yallist: 3.1.1 yallist: 3.1.1
lucide-preact@0.561.0(preact@10.28.0): lucide-preact@0.562.0(preact@10.28.0):
dependencies: dependencies:
preact: 10.28.0 preact: 10.28.0
@@ -5131,32 +5131,32 @@ snapshots:
retext-stringify: 4.0.0 retext-stringify: 4.0.0
unified: 11.0.5 unified: 11.0.5
rollup@4.53.5: rollup@4.54.0:
dependencies: dependencies:
'@types/estree': 1.0.8 '@types/estree': 1.0.8
optionalDependencies: optionalDependencies:
'@rollup/rollup-android-arm-eabi': 4.53.5 '@rollup/rollup-android-arm-eabi': 4.54.0
'@rollup/rollup-android-arm64': 4.53.5 '@rollup/rollup-android-arm64': 4.54.0
'@rollup/rollup-darwin-arm64': 4.53.5 '@rollup/rollup-darwin-arm64': 4.54.0
'@rollup/rollup-darwin-x64': 4.53.5 '@rollup/rollup-darwin-x64': 4.54.0
'@rollup/rollup-freebsd-arm64': 4.53.5 '@rollup/rollup-freebsd-arm64': 4.54.0
'@rollup/rollup-freebsd-x64': 4.53.5 '@rollup/rollup-freebsd-x64': 4.54.0
'@rollup/rollup-linux-arm-gnueabihf': 4.53.5 '@rollup/rollup-linux-arm-gnueabihf': 4.54.0
'@rollup/rollup-linux-arm-musleabihf': 4.53.5 '@rollup/rollup-linux-arm-musleabihf': 4.54.0
'@rollup/rollup-linux-arm64-gnu': 4.53.5 '@rollup/rollup-linux-arm64-gnu': 4.54.0
'@rollup/rollup-linux-arm64-musl': 4.53.5 '@rollup/rollup-linux-arm64-musl': 4.54.0
'@rollup/rollup-linux-loong64-gnu': 4.53.5 '@rollup/rollup-linux-loong64-gnu': 4.54.0
'@rollup/rollup-linux-ppc64-gnu': 4.53.5 '@rollup/rollup-linux-ppc64-gnu': 4.54.0
'@rollup/rollup-linux-riscv64-gnu': 4.53.5 '@rollup/rollup-linux-riscv64-gnu': 4.54.0
'@rollup/rollup-linux-riscv64-musl': 4.53.5 '@rollup/rollup-linux-riscv64-musl': 4.54.0
'@rollup/rollup-linux-s390x-gnu': 4.53.5 '@rollup/rollup-linux-s390x-gnu': 4.54.0
'@rollup/rollup-linux-x64-gnu': 4.53.5 '@rollup/rollup-linux-x64-gnu': 4.54.0
'@rollup/rollup-linux-x64-musl': 4.53.5 '@rollup/rollup-linux-x64-musl': 4.54.0
'@rollup/rollup-openharmony-arm64': 4.53.5 '@rollup/rollup-openharmony-arm64': 4.54.0
'@rollup/rollup-win32-arm64-msvc': 4.53.5 '@rollup/rollup-win32-arm64-msvc': 4.54.0
'@rollup/rollup-win32-ia32-msvc': 4.53.5 '@rollup/rollup-win32-ia32-msvc': 4.54.0
'@rollup/rollup-win32-x64-gnu': 4.53.5 '@rollup/rollup-win32-x64-gnu': 4.54.0
'@rollup/rollup-win32-x64-msvc': 4.53.5 '@rollup/rollup-win32-x64-msvc': 4.54.0
fsevents: 2.3.3 fsevents: 2.3.3
safe-buffer@5.2.1: {} safe-buffer@5.2.1: {}
@@ -5491,7 +5491,7 @@ snapshots:
fdir: 6.5.0(picomatch@4.0.3) fdir: 6.5.0(picomatch@4.0.3)
picomatch: 4.0.3 picomatch: 4.0.3
postcss: 8.5.6 postcss: 8.5.6
rollup: 4.53.5 rollup: 4.54.0
tinyglobby: 0.2.15 tinyglobby: 0.2.15
optionalDependencies: optionalDependencies:
'@types/node': 25.0.3 '@types/node': 25.0.3

View File

@@ -0,0 +1,38 @@
---
title: "Switching to Linux"
description: "Leaving the bloat with a free solution."
pubDate: "2025-12-21"
tags: ["linux", "techtips"]
---
I have decided to move my daily workflow away from Windows. Microsoft has, for a long time now, been engaging in an age-old practice known as enshittification. Windows used to be a platform on which I did my work, communicated with friends, and played far too many hours of MapleStory. Now the entire operating system feels like those malicious ad-filled spam websites you'd end up on trying to... obtain Linux ISOs (iykyk). The final straw was the aggressive integration of AI features, which are being pushed onto users regardless of interest or privacy concerns.
### What is Linux?
Simply put, Linux is an operating system that stays out of your way. It does everything you would expect a modern operating system to do, but it does these things without the telemetry or rushed AI features. Linux offers a level of ownership that is becoming rare in modern technology. When you install software or change a setting, the system respects that decision without reverting it after an update. Now, the more complex answer is that Linux is a kernel, and different "distributions" are more complete operating systems built around the Linux kernel. I will get to which ones I recommend for newcomers in a moment.
### Gaming
In the past, Linux struggled with gaming for the simple reason that games were not built with support for Linux in mind. This meant that translation layers such as Wine were required to run most games, and even this was not a guarantee. Thanks to Valve and the broader Linux gaming community, we have made significant progress here! Steam's Proton compatibility layer has done wonders for this, helping Linux users run most of their library. Unless you are playing titles with aggressive kernel-level anti-cheat (Battlefield 6, Apex Legends, etc), the gaming experience is indistinguishable from Windows.
### Desktop Environments
One concept that confuses new Linux users is the Desktop Environment (DE). On Windows, the desktop environment is tightly coupled with the operating system, and is not highly customizable. With Linux, the interface is just another piece of software you can swap out. This means you can choose a DE that behaves like Windows, macOS, or something fully keyboard-driven. Having this level of choice allows you to tailor your machine to *you*.
If you would like a more macOS-like experience, I recommend either **GNOME** or **COSMIC**. If you are looking for a Windows-like experience, **KDE** is the way to go.
### Distributions
While the amount of choice in Linux distributions can seem daunting, there are a few I can whole-heartedly recommend for new users:
#### [Fedora](https://www.fedoraproject.org/workstation/download)
Fedora is a fully open-source, rock-solid, and easy to use distribution. It provides regularly updated software packages and has a built-in "app store" that makes installing and updating software painless.
For this distribution, I would recommend the GNOME or KDE Desktop Environments.
#### [Pop!_OS](https://system76.com/pop/download/)
Pop!_OS is an open-source, Debian-based distribution that focuses on excellent support, stability, and performance with its COSMIC desktop environment. It also provides regularly updated software packages and has a built-in "app store" that makes installing and updating software painless.
For this distribution, I would recommend the COSMIC or KDE Desktop Environments.
Feel free to reach out if you have any questions about making the switch. I can be reached by email at [me@atri.dad](mailto:me@atri.dad).