diff --git a/docs/reference/site-config.md b/docs/reference/site-config.md index 1cf9d726cffb..2b061b14c6fe 100644 --- a/docs/reference/site-config.md +++ b/docs/reference/site-config.md @@ -437,6 +437,19 @@ export default { } ``` +### themeDir + +- Type: `string` +- Default: `./.vitepress/theme` if exists, otherwise [Default Theme](../guide/extending-default-theme) path. + +The directory of the [theme entry file](../guide/custom-theme#theme-resolving), relative to [project root](../guide/routing#root-and-source-directory). + +```ts +export default { + themeDir: './awesome-theme' +} +``` + ### ignoreDeadLinks - Type: `boolean | 'localhostLinks' | (string | RegExp | ((link: string) => boolean))[]` diff --git a/src/node/config.ts b/src/node/config.ts index 6d1bbd4938c1..22db79adf7b5 100644 --- a/src/node/config.ts +++ b/src/node/config.ts @@ -97,7 +97,10 @@ export async function resolveConfig( } // resolve theme path - const userThemeDir = resolve(root, 'theme') + const userThemeDir = userConfig.themeDir + ? normalizePath(path.resolve(root, userConfig.themeDir)) + : resolve(root, 'theme') + const themeDir = (await fs.pathExists(userThemeDir)) ? userThemeDir : DEFAULT_THEME_PATH diff --git a/src/node/siteConfig.ts b/src/node/siteConfig.ts index 74174280e8a8..452e253b978c 100644 --- a/src/node/siteConfig.ts +++ b/src/node/siteConfig.ts @@ -64,6 +64,7 @@ export interface UserConfig outDir?: string assetsDir?: string cacheDir?: string + themeDir?: string shouldPreload?: (link: string, page: string) => boolean