Merge remote-tracking branch 'upstream/main' into schedule

This commit is contained in:
Clas Wen 2025-07-12 14:47:09 +08:00
commit 306a19f4b4
7 changed files with 226 additions and 409 deletions

View file

@ -1,16 +1,19 @@
import { defineConfig } from "astro/config" import { defineConfig } from "astro/config";
import { SITE_URL } from "./src/consts" import { SITE_URL } from "./src/consts";
import vue from "@astrojs/vue" import vue from "@astrojs/vue";
import tailwind from "@astrojs/tailwind" import tailwind from "@astrojs/tailwind";
import react from "@astrojs/react" import react from "@astrojs/react";
import { handleLocalCoverPlugin } from "./src/plugins/cover" import { handleLocalCoverPlugin } from "./src/plugins/cover";
import { themePipeline } from "./src/plugins/theme" import { themePipeline } from "./src/plugins/theme";
import remarkToc from "remark-toc";
import rehypeSlug from "rehype-slug";
// https://astro.build/config // https://astro.build/config
export default defineConfig({ export default defineConfig({
site: SITE_URL, site: SITE_URL,
markdown: { markdown: {
rehypePlugins: [handleLocalCoverPlugin, ...themePipeline], remarkPlugins: [[remarkToc, { heading: "目录", tight: true }]],
rehypePlugins: [rehypeSlug, handleLocalCoverPlugin, ...themePipeline],
syntaxHighlight: "shiki", syntaxHighlight: "shiki",
shikiConfig: { shikiConfig: {
themes: { themes: {
@ -33,16 +36,13 @@ export default defineConfig({
"/active": { "/active": {
target: "https://active.nbtca.space", target: "https://active.nbtca.space",
changeOrigin: true, changeOrigin: true,
rewrite: path => path.replace(/^\/active/, ""), rewrite: (path) => path.replace(/^\/active/, ""),
}, },
"/saturday": { "/saturday": {
target: "http://localhost:4000", target: "http://localhost:4000",
rewrite: path => path.replace(/^\/saturday/, ""), rewrite: (path) => path.replace(/^\/saturday/, ""),
}, },
}, },
}, },
// optimizeDeps: {
// exclude: ["dayjs"],
// },
}, },
}) });

View file

@ -38,6 +38,8 @@
"react": "^18.3.1", "react": "^18.3.1",
"react-dom": "^18.3.1", "react-dom": "^18.3.1",
"rehype": "^13.0.2", "rehype": "^13.0.2",
"rehype-slug": "^6.0.0",
"remark-toc": "^9.0.0",
"sharp": "^0.33.5", "sharp": "^0.33.5",
"tailwindcss": "^3.4.17", "tailwindcss": "^3.4.17",
"unist-util-visit": "^5.0.0", "unist-util-visit": "^5.0.0",
@ -49,6 +51,7 @@
"@cspell/eslint-plugin": "^8.19.2", "@cspell/eslint-plugin": "^8.19.2",
"@eslint/js": "^9.25.1", "@eslint/js": "^9.25.1",
"@hey-api/openapi-ts": "^0.53.12", "@hey-api/openapi-ts": "^0.53.12",
"@tailwindcss/typography": "^0.5.16",
"@types/eslint__js": "^8.42.3", "@types/eslint__js": "^8.42.3",
"@types/md5": "^2.3.5", "@types/md5": "^2.3.5",
"@types/qrcode": "^1.5.5", "@types/qrcode": "^1.5.5",

View file

@ -80,6 +80,12 @@ importers:
rehype: rehype:
specifier: ^13.0.2 specifier: ^13.0.2
version: 13.0.2 version: 13.0.2
rehype-slug:
specifier: ^6.0.0
version: 6.0.0
remark-toc:
specifier: ^9.0.0
version: 9.0.0
sharp: sharp:
specifier: ^0.33.5 specifier: ^0.33.5
version: 0.33.5 version: 0.33.5
@ -108,6 +114,9 @@ importers:
'@hey-api/openapi-ts': '@hey-api/openapi-ts':
specifier: ^0.53.12 specifier: ^0.53.12
version: 0.53.12(magicast@0.3.5)(typescript@5.8.3) version: 0.53.12(magicast@0.3.5)(typescript@5.8.3)
'@tailwindcss/typography':
specifier: ^0.5.16
version: 0.5.16(tailwindcss@3.4.17)
'@types/eslint__js': '@types/eslint__js':
specifier: ^8.42.3 specifier: ^8.42.3
version: 8.42.3 version: 8.42.3
@ -2371,6 +2380,11 @@ packages:
'@swc/helpers@0.5.17': '@swc/helpers@0.5.17':
resolution: {integrity: sha512-5IKx/Y13RsYd+sauPb2x+U/xZikHjolzfuDgTAl/Tdf3Q8rslRvC19NKDLgAJQ6wsqADk10ntlv08nPFw/gO/A==} resolution: {integrity: sha512-5IKx/Y13RsYd+sauPb2x+U/xZikHjolzfuDgTAl/Tdf3Q8rslRvC19NKDLgAJQ6wsqADk10ntlv08nPFw/gO/A==}
'@tailwindcss/typography@0.5.16':
resolution: {integrity: sha512-0wDLwCVF5V3x3b1SGXPCDcdsbDHMBe+lkFzBRaHeLvNi+nrrnZ1lA18u+OTWO8iSWU2GxUOCvlXtDuqftc1oiA==}
peerDependencies:
tailwindcss: '>=3.0.0 || insiders || >=4.0.0-alpha.20 || >=4.0.0-beta.1'
'@tanstack/react-virtual@3.11.3': '@tanstack/react-virtual@3.11.3':
resolution: {integrity: sha512-vCU+OTylXN3hdC8RKg68tPlBPjjxtzon7Ys46MgrSLE+JhSjSTPvoQifV6DQJeJmA8Q3KT6CphJbejupx85vFw==} resolution: {integrity: sha512-vCU+OTylXN3hdC8RKg68tPlBPjjxtzon7Ys46MgrSLE+JhSjSTPvoQifV6DQJeJmA8Q3KT6CphJbejupx85vFw==}
peerDependencies: peerDependencies:
@ -2462,6 +2476,9 @@ packages:
'@types/react@18.3.23': '@types/react@18.3.23':
resolution: {integrity: sha512-/LDXMQh55EzZQ0uVAZmKKhfENivEvWz6E+EYzh+/MCjMhNsotd+ZHhBGIjFDTi6+fz0OhQQQLbTgdQIxxCsC0w==} resolution: {integrity: sha512-/LDXMQh55EzZQ0uVAZmKKhfENivEvWz6E+EYzh+/MCjMhNsotd+ZHhBGIjFDTi6+fz0OhQQQLbTgdQIxxCsC0w==}
'@types/ungap__structured-clone@1.2.0':
resolution: {integrity: sha512-ZoaihZNLeZSxESbk9PUAPZOlSpcKx81I1+4emtULDVmBLkYutTcMlCj2K9VNlf9EWODxdO6gkAqEaLorXwZQVA==}
'@types/unist@3.0.3': '@types/unist@3.0.3':
resolution: {integrity: sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==} resolution: {integrity: sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==}
@ -2877,11 +2894,11 @@ packages:
resolution: {integrity: sha512-F3PH5k5juxom4xktynS7MoFY+NUWH5LC4CnH11YB8NPew+HLpmBLCybSAEyb2F+4pRXhuhWqFesoQd6DAyc2hw==} resolution: {integrity: sha512-F3PH5k5juxom4xktynS7MoFY+NUWH5LC4CnH11YB8NPew+HLpmBLCybSAEyb2F+4pRXhuhWqFesoQd6DAyc2hw==}
engines: {node: '>=18'} engines: {node: '>=18'}
brace-expansion@1.1.11: brace-expansion@1.1.12:
resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} resolution: {integrity: sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==}
brace-expansion@2.0.1: brace-expansion@2.0.2:
resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} resolution: {integrity: sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==}
braces@3.0.3: braces@3.0.3:
resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==}
@ -3752,6 +3769,9 @@ packages:
hast-util-from-parse5@8.0.3: hast-util-from-parse5@8.0.3:
resolution: {integrity: sha512-3kxEVkEKt0zvcZ3hCRYI8rqrgwtlIOFMWkbclACvjlDw8Li9S2hk/d51OI0nr/gIpdMHNepwgOKqZ/sy0Clpyg==} resolution: {integrity: sha512-3kxEVkEKt0zvcZ3hCRYI8rqrgwtlIOFMWkbclACvjlDw8Li9S2hk/d51OI0nr/gIpdMHNepwgOKqZ/sy0Clpyg==}
hast-util-heading-rank@3.0.0:
resolution: {integrity: sha512-EJKb8oMUXVHcWZTDepnr+WNbfnXKFNf9duMesmr4S8SXTJBJ9M4Yok08pu9vxdJwdlGRhVumk9mEhkEvKGifwA==}
hast-util-is-element@3.0.0: hast-util-is-element@3.0.0:
resolution: {integrity: sha512-Val9mnv2IWpLbNPqc/pUem+a7Ipj2aHacCwgNfTiK0vJKl0LF+4Ba4+v1oPHFpf3bLYmreq0/l3Gud9S5OH42g==} resolution: {integrity: sha512-Val9mnv2IWpLbNPqc/pUem+a7Ipj2aHacCwgNfTiK0vJKl0LF+4Ba4+v1oPHFpf3bLYmreq0/l3Gud9S5OH42g==}
@ -3767,6 +3787,9 @@ packages:
hast-util-to-parse5@8.0.0: hast-util-to-parse5@8.0.0:
resolution: {integrity: sha512-3KKrV5ZVI8if87DVSi1vDeByYrkGzg4mEfeu4alwgmmIeARiBLKCZS2uw5Gb6nU9x9Yufyj3iudm6i7nl52PFw==} resolution: {integrity: sha512-3KKrV5ZVI8if87DVSi1vDeByYrkGzg4mEfeu4alwgmmIeARiBLKCZS2uw5Gb6nU9x9Yufyj3iudm6i7nl52PFw==}
hast-util-to-string@3.0.1:
resolution: {integrity: sha512-XelQVTDWvqcl3axRfI0xSeoVKzyIFPwsAGSLIsKdJKQMXDYJS4WYrBNF/8J7RdhIcFI2BOHgAifggsvsxp/3+A==}
hast-util-to-text@4.0.2: hast-util-to-text@4.0.2:
resolution: {integrity: sha512-KK6y/BN8lbaq654j7JgBydev7wuNMcID54lkRav1P0CaE1e47P72AWWPiGKXTJU271ooYzcvTAn/Zt0REnvc7A==} resolution: {integrity: sha512-KK6y/BN8lbaq654j7JgBydev7wuNMcID54lkRav1P0CaE1e47P72AWWPiGKXTJU271ooYzcvTAn/Zt0REnvc7A==}
@ -4139,6 +4162,12 @@ packages:
resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==}
engines: {node: '>=10'} engines: {node: '>=10'}
lodash.castarray@4.4.0:
resolution: {integrity: sha512-aVx8ztPv7/2ULbArGJ2Y42bG1mEQ5mGjpdvrbJcJFU3TbYybe+QlLS4pst9zV52ymy2in1KpFPiZnAOATxD4+Q==}
lodash.isplainobject@4.0.6:
resolution: {integrity: sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==}
lodash.merge@4.6.2: lodash.merge@4.6.2:
resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==}
@ -4222,6 +4251,9 @@ packages:
mdast-util-to-string@4.0.0: mdast-util-to-string@4.0.0:
resolution: {integrity: sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg==} resolution: {integrity: sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg==}
mdast-util-toc@7.1.0:
resolution: {integrity: sha512-2TVKotOQzqdY7THOdn2gGzS9d1Sdd66bvxUyw3aNpWfcPXCLYSJCCgfPy30sEtuzkDraJgqF35dzgmz6xlvH/w==}
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==}
@ -4680,6 +4712,10 @@ packages:
peerDependencies: peerDependencies:
postcss: ^8.2.14 postcss: ^8.2.14
postcss-selector-parser@6.0.10:
resolution: {integrity: sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w==}
engines: {node: '>=4'}
postcss-selector-parser@6.1.2: postcss-selector-parser@6.1.2:
resolution: {integrity: sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==} resolution: {integrity: sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==}
engines: {node: '>=4'} engines: {node: '>=4'}
@ -4799,6 +4835,9 @@ packages:
rehype-raw@7.0.0: rehype-raw@7.0.0:
resolution: {integrity: sha512-/aE8hCfKlQeA8LmyeyQvQF3eBiLRGNlfBJEvWH7ivp9sBqs7TNqBL5X3v157rM4IFETqDnIOO+z5M/biZbo9Ww==} resolution: {integrity: sha512-/aE8hCfKlQeA8LmyeyQvQF3eBiLRGNlfBJEvWH7ivp9sBqs7TNqBL5X3v157rM4IFETqDnIOO+z5M/biZbo9Ww==}
rehype-slug@6.0.0:
resolution: {integrity: sha512-lWyvf/jwu+oS5+hL5eClVd3hNdmwM1kAC0BUvEGD19pajQMIzcNUd/k9GsfQ+FfECvX+JE+e9/btsKH0EjJT6A==}
rehype-stringify@10.0.1: rehype-stringify@10.0.1:
resolution: {integrity: sha512-k9ecfXHmIPuFVI61B9DeLPN0qFHfawM6RsuX48hoqlaKSF61RskNjSm1lI8PhBEM0MRdLxVVm4WmTqJQccH9mA==} resolution: {integrity: sha512-k9ecfXHmIPuFVI61B9DeLPN0qFHfawM6RsuX48hoqlaKSF61RskNjSm1lI8PhBEM0MRdLxVVm4WmTqJQccH9mA==}
@ -4821,6 +4860,9 @@ packages:
remark-stringify@11.0.0: remark-stringify@11.0.0:
resolution: {integrity: sha512-1OSmLd3awB/t8qdoEOMazZkNsfVTeY4fTsgzcQFdXNq8ToTN4ZGwrMnlda4K6smTFKD+GRV6O48i6Z4iKgPPpw==} resolution: {integrity: sha512-1OSmLd3awB/t8qdoEOMazZkNsfVTeY4fTsgzcQFdXNq8ToTN4ZGwrMnlda4K6smTFKD+GRV6O48i6Z4iKgPPpw==}
remark-toc@9.0.0:
resolution: {integrity: sha512-KJ9txbo33GjDAV1baHFze7ij4G8c7SGYoY8Kzsm2gzFpbhL/bSoVpMMzGa3vrNDSWASNd/3ppAqL7cP2zD6JIA==}
repeat-string@1.6.1: repeat-string@1.6.1:
resolution: {integrity: sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==} resolution: {integrity: sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==}
engines: {node: '>=0.10'} engines: {node: '>=0.10'}
@ -8772,6 +8814,14 @@ snapshots:
dependencies: dependencies:
tslib: 2.8.1 tslib: 2.8.1
'@tailwindcss/typography@0.5.16(tailwindcss@3.4.17)':
dependencies:
lodash.castarray: 4.4.0
lodash.isplainobject: 4.0.6
lodash.merge: 4.6.2
postcss-selector-parser: 6.0.10
tailwindcss: 3.4.17
'@tanstack/react-virtual@3.11.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': '@tanstack/react-virtual@3.11.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
dependencies: dependencies:
'@tanstack/virtual-core': 3.11.3 '@tanstack/virtual-core': 3.11.3
@ -8875,6 +8925,8 @@ snapshots:
'@types/prop-types': 15.7.14 '@types/prop-types': 15.7.14
csstype: 3.1.3 csstype: 3.1.3
'@types/ungap__structured-clone@1.2.0': {}
'@types/unist@3.0.3': {} '@types/unist@3.0.3': {}
'@types/uuid@10.0.0': {} '@types/uuid@10.0.0': {}
@ -9463,12 +9515,12 @@ snapshots:
widest-line: 5.0.0 widest-line: 5.0.0
wrap-ansi: 9.0.0 wrap-ansi: 9.0.0
brace-expansion@1.1.11: brace-expansion@1.1.12:
dependencies: dependencies:
balanced-match: 1.0.2 balanced-match: 1.0.2
concat-map: 0.0.1 concat-map: 0.0.1
brace-expansion@2.0.1: brace-expansion@2.0.2:
dependencies: dependencies:
balanced-match: 1.0.2 balanced-match: 1.0.2
@ -10475,6 +10527,10 @@ snapshots:
vfile-location: 5.0.3 vfile-location: 5.0.3
web-namespaces: 2.0.1 web-namespaces: 2.0.1
hast-util-heading-rank@3.0.0:
dependencies:
'@types/hast': 3.0.4
hast-util-is-element@3.0.0: hast-util-is-element@3.0.0:
dependencies: dependencies:
'@types/hast': 3.0.4 '@types/hast': 3.0.4
@ -10523,6 +10579,10 @@ snapshots:
web-namespaces: 2.0.1 web-namespaces: 2.0.1
zwitch: 2.0.4 zwitch: 2.0.4
hast-util-to-string@3.0.1:
dependencies:
'@types/hast': 3.0.4
hast-util-to-text@4.0.2: hast-util-to-text@4.0.2:
dependencies: dependencies:
'@types/hast': 3.0.4 '@types/hast': 3.0.4
@ -10871,6 +10931,10 @@ snapshots:
dependencies: dependencies:
p-locate: 5.0.0 p-locate: 5.0.0
lodash.castarray@4.4.0: {}
lodash.isplainobject@4.0.6: {}
lodash.merge@4.6.2: {} lodash.merge@4.6.2: {}
log-symbols@6.0.0: log-symbols@6.0.0:
@ -11040,6 +11104,16 @@ snapshots:
dependencies: dependencies:
'@types/mdast': 4.0.4 '@types/mdast': 4.0.4
mdast-util-toc@7.1.0:
dependencies:
'@types/mdast': 4.0.4
'@types/ungap__structured-clone': 1.2.0
'@ungap/structured-clone': 1.3.0
github-slugger: 2.0.0
mdast-util-to-string: 4.0.0
unist-util-is: 6.0.0
unist-util-visit: 5.0.0
merge-stream@2.0.0: {} merge-stream@2.0.0: {}
merge2@1.4.1: {} merge2@1.4.1: {}
@ -11246,15 +11320,15 @@ snapshots:
minimatch@3.1.2: minimatch@3.1.2:
dependencies: dependencies:
brace-expansion: 1.1.11 brace-expansion: 1.1.12
minimatch@5.1.6: minimatch@5.1.6:
dependencies: dependencies:
brace-expansion: 2.0.1 brace-expansion: 2.0.2
minimatch@9.0.5: minimatch@9.0.5:
dependencies: dependencies:
brace-expansion: 2.0.1 brace-expansion: 2.0.2
minimist@1.2.8: {} minimist@1.2.8: {}
@ -11582,6 +11656,11 @@ snapshots:
postcss: 8.5.3 postcss: 8.5.3
postcss-selector-parser: 6.1.2 postcss-selector-parser: 6.1.2
postcss-selector-parser@6.0.10:
dependencies:
cssesc: 3.0.0
util-deprecate: 1.0.2
postcss-selector-parser@6.1.2: postcss-selector-parser@6.1.2:
dependencies: dependencies:
cssesc: 3.0.0 cssesc: 3.0.0
@ -11718,6 +11797,14 @@ snapshots:
hast-util-raw: 9.1.0 hast-util-raw: 9.1.0
vfile: 6.0.3 vfile: 6.0.3
rehype-slug@6.0.0:
dependencies:
'@types/hast': 3.0.4
github-slugger: 2.0.0
hast-util-heading-rank: 3.0.0
hast-util-to-string: 3.0.1
unist-util-visit: 5.0.0
rehype-stringify@10.0.1: rehype-stringify@10.0.1:
dependencies: dependencies:
'@types/hast': 3.0.4 '@types/hast': 3.0.4
@ -11772,6 +11859,11 @@ snapshots:
mdast-util-to-markdown: 2.1.2 mdast-util-to-markdown: 2.1.2
unified: 11.0.5 unified: 11.0.5
remark-toc@9.0.0:
dependencies:
'@types/mdast': 4.0.4
mdast-util-toc: 7.1.0
repeat-string@1.6.1: {} repeat-string@1.6.1: {}
require-directory@2.1.1: {} require-directory@2.1.1: {}

View file

@ -76,7 +76,9 @@ const dateFormatted = formatDate(pubDate)
</div> </div>
</div> </div>
</div> </div>
<slot /> <div class="prose prose-neutral dark:prose-invert max-w-none">
<slot />
</div>
<div class="component"> <div class="component">
<div class="component-content"> <div class="component-content">
<div class="article-copyright"> <div class="article-copyright">
@ -88,7 +90,13 @@ const dateFormatted = formatDate(pubDate)
</a </a
> >
<p class="content"> <p class="content">
作者: {frontmatter.author} 发表日期:{dateFormatted} 作者:
{
typeof frontmatter.author === "object"
? <a href={frontmatter.author.url} target="_blank" rel="noopener">{frontmatter.author.name}</a>
: frontmatter.author
}
,发表日期:{dateFormatted}
</p> </p>
</div> </div>
</div> </div>

View file

@ -10,387 +10,8 @@ cover:
tags: ["指南"] tags: ["指南"]
--- ---
# 前言 #
Arch奉行[极简主义](https://wiki.archlinux.org/title/Arch_Linux)用户可以自行构建任何想要的功能接下来以实际本机部署为例简单介绍如何构建属于自己的archlinux
# 目录
- [准备工作](#准备工作)
- [安装介质构建](#安装介质构建)
- [基础安装](#基础安装)
- [1. 使用arch引导盘](#1.使用arch引导盘)
- [2. UEFI检查](#2.uefi检查)
- [3. 联网](#3.-联网)
- [4. 测试连通性](#4.-测试连通性)
- [5. 同步系统时钟](#5.-同步系统时钟)
- [6. 换国内源](#6.-换国内源(在国际互联网内可忽略))
- [7. 建立btrfs分区](#7.-建立btrfs分区)
- [8. 挂载,请依序从根目录开始挂载](#8.-挂载,请依序从根目录开始挂载)
- [9. 安装系统](#9.-安装系统)
- [10. 生成fstab文件](#10.-生成fstab文件)
- [11. 进入写好的新系统](#11.-进入写好的新系统)
- [12. 设置主机名称与时区](#12.-设置主机名称与时区)
- [13. 硬件时间设置](#13.-硬件时间设置)
- [14. 设置区域](#14.-设置区域)
- [15. 设置root密码](#15.-设置root密码)
- [16. 安装微码](#16.-安装微码)
- [17. 安装Grub引导](#17.-安装grub引导)
- [18. 完成安装](#18.-完成安装)
# 准备工作
电脑U盘任何移动存储介质网络基本检索能力
1. 不论你采取何种镜像方案,即使是离线版镜像构建我也推荐你准备网络条件,这样可以确保内核和工具的更新,当然如果你足够熟练也可自行抉择
2. 如果是无线网络请确保wifi名称是自己记得住的英文名因为tty环境下是没有办法显示中文的会变成一个个没办法识别的方块
3. 如果你希望在同一块硬盘上安装双系统请为archlinux留下足够大小的硬盘空间为了给自己留下安装其他软件的余地请至少[准备100GB(貌似还没有补充相关教学,请自行搜索)](请补充磁盘分区教学)并且确保EFI分区容量不小于256MB或者[新增一个额外的挂载点](https://wiki.archlinux.org/title/EFI_system_partition)
4. 检查Win10分区是否启用Bitlocker加密请提前获取恢复密钥并且关闭电源计划中的快速启动
> 在操作前请确保仔细阅读并对不太理解的检索学习,谨慎操作,及时备份,数据无价。
# 安装介质的构建
1. 仅推荐从[archlinux官方的镜像源](https://archlinux.org/download/)下载请注意arch是滚动发行版
2. 如果你要自行编译,请参考[“内核/传统编译”](https://wiki.archlinux.org/title/Kernel/Traditional_compilation)
3. 如果使用官方提供的安装镜像,我推荐你使用[ventory](https://www.ventoy.net/)烧录
# 基础安装
## 1.使用arch引导盘
> 关机插入U盘后启动进入bios选择从U盘启动在第一个选项回车以进入arch安装环境
## 2.UEFI检查
```bash
$ systemctl stop reflector.service
# 禁用自动更新软件源,因为地理上造成的特殊网络环境最好关掉
```
```bash
$ ls /sys/firmware/efi/efivars
# 若输出了一堆efi变量则启动方式确实为UEFI模式本帖发布的2025年绝大多数机器是UEFI引导的
```
## 3. 联网
> archlinux的安装必须要求网络环境离线安装步骤则更为繁琐可参考社区的[Offline installation](https://wiki.archlinux.org/title/Offline_installation)
有线网络连接则按下不表,连上网线检查接口提示灯是否闪烁,等待几秒地址分配完成建立连接后即可联网
当然在校园网环境下则需要上级路由完成认证,可以参考[nbtverify](https://github.com/nbtca/nbtverify)项目
无线网络则调用iwctl进行连接
```bash
$ lspci -k | grep Network
# 检查无线网卡有没有干活,若明确无问题可以跳过检查
```
> 检查内核是否加载了无线网卡驱动
> 一般会显示形如: 00:14.3 Network controller: Intel Corporation Wi-Fi 6 AX201 (rev 20)
> 若没有执行检查无线连接是否被禁用(blocked: yes)
```bash
$ rfkill list
# 无线网卡一般叫 wlan0
```
```bash
$ ip link set wlan0 up
# 若有类似报错:Operation not possible due to RF-kill则执行
$ rfkill unblock wifi
```
```bash
# 使用iwctl联网
iwctl # 进入交互式命令行
device list # 列出无线网卡设备名,比如无线网卡看到叫 wlan0
station wlan0 scan # 扫描网络
station wlan0 get-networks # 列出所有 wifi 网络
station wlan0 connect wifi-name # 进行连接,注意这里无法输入中文。回车后输入密码即可
exit # 连接成功后退出
```
## 4. 测试连通性
```bash
ping www.bilibili.com # 测试网络连通与否
```
> 若在网络配置上有一些意外情况,可以参见[网络配置/无线网络配置](https://wiki.archlinux.org/title/Network_configuration/Wireless)
## 5. 同步系统时钟
```bash
$ timedatectl set-ntp true # 将系统时间与网络时间进行同步
$ timedatectl status # 检查服务状态
```
## 6. 换国内源(在国际互联网内可忽略)
```bash
$ vim /etc/pacman.d/mirrorlist # 准备换源,若上级路由完成代理即可忽略
Server = https://mirrors.ustc.edu.cn/archlinux/$repo/os/$arch # 中国科学技术大学开源镜像站
Server = https://mirrors.tuna.tsinghua.edu.cn/archlinux/$repo/os/$arch # 清华大学开源软件镜像站
Server = https://repo.huaweicloud.com/archlinux/$repo/os/$arch # 华为开源镜像站
```
## 7. 建立btrfs分区
```bash
$ lsblk # 显示当前分区情况
```
- 请仔细检查自己要安装arch的目标硬盘名字
- sda,nvme分别是sata和nvme协议
- sata协议的硬盘排序为sda、sdb、sdc等sda1、sda2为分区排序
- nvme协议的硬盘排序为nvme0n1、nvme1n1、nvme2n1等nvme0n1p1、nvme0n1p2为分区排序
- 以sata硬盘为示范具体硬盘自己更换指令
```bash
$ cfdisk /dev/sdx # 对安装 archlinux 的磁盘分区
```
> 是不是进入了友好的TUI页面XD
- 因为已经预先留下了空间给arch所以应该是有若干个G的FreeSpace
- 首先创建 Swap 分区。选中 Free space > 再选中操作 [New] > 然后按下回车 Enter 以新建 swap 分区(类似 Windows 的交换文件)
按下回车后会提示输入 分区大小Swap 分区建议为电脑内存大小的 60%,或者和内存大小相等 > 然后按下回车 Enter
- 默认新建的类型是 Linux filesystem我们需要将类型更改为 Linux swap。选中操作 [Type] > 然后按下回车 Enter > 通过方向键 ↑ 和 ↓ 选中 Linux swap > 最后按下回车 Enter
- 我们再只需要一个分区即可(因为使用 Btrfs 文件系统,所以根目录和用户主目录在一个分区上),所以类似的:选中 Free space > 再选中操作 [New] > 然后按下回车 Enter 以新建分区
输入 分区大小(默认是剩余的全部空间。请根据实际情况输入)> 然后按下回车 Enter
- 分区类型默认即可,无需更改。接下来选中操作 [Write] 并回车 Enter > 输入 yes 并回车 Enter 确认分区操作
要是没写入就是白忙活,所以确认[Write]了喔
```
☢️ 警告
再次提醒!请仔细检查命令和操作的正确性,否则将出现不可预料的情况。最危险的是可能造成数据丢失!
常见的错误包括不小心把 Windows 的分区删掉了 😥。
```
```bash
$ fdisk -l
# 复查磁盘情况
```
```bash
$ mkfs.fat -F32 /dev/sdxn
# 格式化并创建 Btrfs 子卷
```
> 如果你是双系统那么无需格式化因为linux可以共享Windows的EFI分区参见[Dual boot with Windows](https://wiki.archlinux.org/title/Dual_boot_with_Windows),只需注意EFI分区大小是否足够你安装
```bash
$ mkswap /dev/sdxn
# 格式化 Swap 分区
```
```bash
$ mkfs.btrfs -L myArch /dev/sdxn
# 格式化 Btrfs 分区
```
```bash
$ mount -t btrfs -o compress=zstd /dev/sdxn /mnt
# 挂载分区以创建子卷
```
```bash
$ btrfs subvolume create /mnt/@ # 创建 / 目录子卷
$ btrfs subvolume create /mnt/@home # 创建 /home 目录子卷
# 创建Btrfs子卷
```
```bash
$ umount /mnt
# 卸载/mnt以挂载子卷
```
## 8. 挂载,请依序从根目录开始挂载
```bash
$ mount -t btrfs -o subvol=/@,compress=zstd /dev/sdxn /mnt # 挂载 / 目录
$ mkdir /mnt/home # 创建 /home 目录
$ mount -t btrfs -o subvol=/@home,compress=zstd /dev/sdxn /mnt/home # 挂载 /home 目录
$ mkdir -p /mnt/boot # 创建 /boot 目录
$ mount /dev/sdxn /mnt/boot # 挂载 /boot 目录
$ swapon /dev/sdxn # 挂载交换分区
```
```zsh
$ df -h # 检查挂载
$ free -h # 复查Swap分区挂载
```
## 9. 安装系统
```bash
$ pacstrap /mnt base base-devel linux linux-firmware btrfs-progs
# 如果使用btrfs文件系统额外安装一个btrfs-progs包
```
```bash
$ pacman -S archlinux-keyring
# 如果提示 GPG 证书错误,可能是因为使用的不是最新的镜像文件,可以通过更新 archlinux-keyring 解决此问题
```
```zsh
$ pacstrap /mnt networkmanager vim sudo zsh zsh-completions
# 使用pacstrap脚本安装必要功能性软件
```
## 10. 生成fstab文件
> 生成fstab以定义磁盘分区受当前挂载情况影响
```zsh
$ genfstab -U /mnt > /mnt/etc/fstab
```
## 11. 进入写好的新系统
```zsh
$ arch-chroot /mnt
# 代码高亮消失了不要慌说明你已经成功change root了
```
## 12. 设置主机名称与时区
```zsh
$ vim /etc/hostname
# 给电脑起个名字吧XD不要包含特殊字符和空格不然有坑的并且不起主机名会有时候出奇怪问题一些GUI程序莫名其妙死了不论怎样还是起一个名字
```
```zsh
$ vim /etc/hosts
# 编辑主机host
```
> 填入如下内容(其中myarch替换成你自己的主机名中间间隙不是空格是tab对齐强迫症狂喜XD)
```zsh
127.0.0.1 localhost
::1 localhost
127.0.1.1 myarch.localdomain myarch
```
```zsh
$ ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
# 在上海时区创建符号链接
# 别问为什么是上海因为没有北京XD当然你也可以使用其他时区
```
```zsh
$ ls /usr/share/zoneinfo/
# 检查你要的时区,更换上条命令的地址
```
## 13. 硬件时间设置
```zsh
$ hwclock --systohc
# 系统时间同步到硬件时间
```
## 14. 设置区域
```zsh
$ vim /etc/locale.gen
# 编辑 /etc/locale.gen去掉 en_US.UTF-8 UTF-8 以及 zh_CN.UTF-8 UTF-8 行前的注释符号(#
# 这一步决定了软件使用的语言和字符集
```
```zsh
$ locale-gen
# 生成locale
```
```zsh
$ echo 'LANG=en_US.UTF-8' > /etc/locale.conf
# 注入locale.conf不推荐任何中文localetty会乱码
```
## 15. 设置root密码
```zsh
$ passwd root
# 输入密码是隐式的并不会显示并非键盘坏了XD
```
## 16. 安装微码
```zsh
$ pacman -S intel-ucode # Intel
$ pacman -S amd-ucode #AMD
```
## 17. 安装Grub引导
```zsh
$ pacman -S grub efibootmgr os-prober
# grub是启动引导器efibootmgr是被启动器用来向nvram写入启动项os-prober用于引导win10
```
```zsh
$ grub-install --target=x86_64-efi --efi-directory=/boot --bootloader-id=ARCH
# 安装grub到EFI分区
```
```zsh
$ vim /etc/default/grub
# 编辑启动参数
```
```zsh
# 修改"loglevel=3 quiet" 至 "loglevel=5 nowatchdog"
# 文件末尾新增一行GRUB_DISABLE_OS_PROBER=false
```
- 去掉 GRUB_CMDLINE_LINUX_DEFAULT 一行中最后的 quiet 参数
- 把 loglevel 的数值从 3 改成 5。这样是为了后续如果出现系统错误方便排错
- 加入 nowatchdog 参数,这可以显著提高开关机速度
- 加入os-prober参数用于引导win10
```zsh
$ grub-mkconfig -o /boot/grub/grub.cfg
# 生成grub所需配置文件
```
> 若检查到win10则会多出一行“Found Windows Boot Manager on /dev/nvme0n1p1@/EFI/Microsoft/Boot/bootmgfw.efi done”的回显若win10在另一块硬盘则不会输出进系统后重新挂载再跑一遍即可
> 此处的全部参数可参见[archwiki](https://wiki.archlinux.org/title/GRUB)
## 18. 完成安装
```zsh
$ exit # 退回安装环境
$ umount -R /mnt # 卸载新分区
$ reboot # 重启
```
> 重启后用root账户登录
```zsh
$ systemctl enable --now NetworkManager # 设置开机自启并立即启动 NetworkManager 服务
$ ping www.bilibili.com # 测试网络连接
```
> 如果是无线网的话
```zsh
$ nmcli dev wifi list # 显示附近的 Wi-Fi 网络
$ nmcli dev wifi connect "Wi-Fi名SSID" password "网络密码" # 连接指定的无线网络
```
```zsh
$ nmtui
# 个人还是比较喜欢nmtui比较友好XD
```
```zsh
$ pacman -S fastfetch
$ fastfetch
# 安装fastfetch检查系统信息
# 喜闻乐见的neofetch时间XD
```
```zsh
$ shutdown 0
$ shutdown -h now
$ poweroff
# 上面三个命令都是关机,🤣记得关机,电源策略还没写呢
```
---
# 恭喜🎉
> 至此你已经完成一个基础无图形界面的archlinux安装了
> 图形化安装应该会在下一次更新发布,不过还是那句老话:多看手册
> 本文抛砖引玉,希望能吸引更多同好前来计协蕉流♂
# 本文调整格式和内容中,若急需请移步本人临时渲染的[blog](https://us.m1ng.space/posts/myarch/)
🖥 [小明](https://m1ng.space/) 写于2025年05月29日

View file

@ -0,0 +1,88 @@
---
layout: "../../layouts/MarkdownPost.astro"
title: "在Apple Silicon Mac上使用Minecraft光影和模组"
pubDate: 2025-06-10
description: "🤪"
author:
name: "小明"
url: "https://m1ng.space/"
cover:
url: "https://i.pinimg.com/736x/6f/00/d7/6f00d73e426549d0f5b1bb873bf2015f.jpg"
alt: "cover"
tags: ["指南"]
---
# 简介
> 在本指南中我们将向您展示如何使用Iris Shaders模组在Mac上为Minecraft添加光影和模组。这种方法可以增强Mac上Minecraft的视觉效果和游戏体验包括使用Apple Silicon芯片的Mac。我们将介绍安装过程确保您能获得视觉效果出众且运行流畅的Minecraft体验。无论您是刚接触模组和光影还是想要升级您的Minecraft设置这个简明的指南都能满足您的需求。
您需要的所有链接都在这里:
| content | link |
| :------------: | :------------------------------------: |
| Minecraft Java | <https://www.minecraft.net/> |
| Fabric | <https://fabricmc.net/use/installer/> |
| Fabric API | <https://modrinth.com/mod/fabric-api/> |
| Sodium | <https://modrinth.com/mod/sodium> |
| Iris | <https://modrinth.com/mod/iris> |
## 目录
## 1. 安装Fabric
第一步是安装Fabric加载器。前往 <https://fabricmc.net/use/installer/>
并点击Download installer (Universal/.JAR)下载fabric。
双击.jar包安装Fabric加载器。根据您的情况安装特定版本或最新版本。
## 2. 安装必要的模组
安装Fabric加载器后打开Minecraft启动器。您会发现有一个fabri-loader-1.XX.
X只需点击开始游戏下载一些必要的包。
如果一切正确,您就会进入游戏。现在关闭游戏并前往**/Library/Application Support/minecraft**。
您需要创建两个新文件夹一个叫mods在这里放模组和一个叫shaderpacks在这里放光影
现在您需要下载:
- [Fabric API](https://modrinth.com/mod/fabric-api/)
> Fabric API是一个极简的Minecraft模组工具链提供了一个灵活的框架来创建模组。以其快速更新和与新Minecraft版本的兼容性而闻名它支持客户端和服务器端模组使其成为模组社区中的热门选择。
- [Sodium](https://modrinth.com/mod/sodium)
> Sodium是一个Minecraft性能优化模组可以显著提高游戏的帧率并减少延迟。它设计用于与Fabric模组加载器一起工作专注于优化游戏的渲染引擎。通过重写游戏图形引擎的关键部分Sodium提供了更流畅的游戏体验特别是在低端硬件上。它以能够在不影响游戏视觉质量的情况下提升性能而备受好评是希望改善Minecraft体验的玩家的热门选择。
- [Iris](https://modrinth.com/mod/iris)
> Iris是一个用于在Fabric上使用光影的Minecraft模组提供与Sodium的兼容性以增强性能和视觉效果。它简化了光影管理允许高级照明和效果。
> 将下载的文件放入`mods`文件夹。
```bash
➜ mods tree
.
├── fabric-api-0.102.0+1.21.jar
├── iris-fabric-1.8.8+mc1.21.1.jar
├── litematica-fabric-1.21-0.19.58.jar
├── malilib-fabric-1.21-0.21.8.jar
├── reeses-sodium-options-fabric-1.8.3+mc1.21.4.jar
├── sodium-extra-fabric-0.6.0+mc1.21.1.jar
└── sodium-fabric-0.6.13+mc1.21.1.jar
1 directory, 7 files
```
下载这些模组后打开游戏检查是否一切正常。如果有错误可能是因为Mac击支持或版本不兼容。选择正确的版本下载。
## 3. 下载您的光影包
前往 <https://modrinth.com/shaders><https://minecraftshader.com> 下载光影。您需要注意这些光影是否支持Mac。
将下载的光影放入shaderpacks。打开游戏并点击选项>视频设置–>光影包,现在您可以看到您的光影了。
然后在列表中点击您想要的光影包,点击应用,然后完成。
## 4. 享受游戏
恭喜您,尽情享受游戏吧。

View file

@ -1,7 +1,12 @@
import { heroui } from "@heroui/react" import { heroui } from "@heroui/react"
import typography from "@tailwindcss/typography"
/** @type {import('tailwindcss').Config} */ /** @type {import('tailwindcss').Config} */
export default { export default {
content: ["./src/**/*.{astro,html,js,jsx,md,mdx,svelte,ts,tsx,vue}", "./node_modules/@heroui/theme/dist/**/*.{js,ts,jsx,tsx}"], content: [
"./src/**/*.{astro,html,js,jsx,md,mdx,svelte,ts,tsx,vue}",
"./node_modules/@heroui/theme/dist/**/*.{js,ts,jsx,tsx}",
],
theme: { theme: {
screens: { screens: {
xs: "416px", xs: "416px",
@ -16,5 +21,5 @@ export default {
}, },
}, },
darkMode: ["selector", "body.theme-dark"], darkMode: ["selector", "body.theme-dark"],
plugins: [heroui()], plugins: [heroui(), typography()],
} }