diff --git a/.gitignore b/.gitignore
index eee7383..a19ff3e 100644
--- a/.gitignore
+++ b/.gitignore
@@ -2,6 +2,7 @@ node_modules
dist
netlify/functions/search/data.json
netlify/functions/search/index.json
+src/site/styles/theme.*.css
# Local Netlify folder
.netlify
.idea/
\ No newline at end of file
diff --git a/package-lock.json b/package-lock.json
index 3359222..7681aca 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -17,6 +17,7 @@
"eleventy-favicon": "^1.1.2",
"eleventy-plugin-toc": "^1.1.5",
"fs-file-tree": "^1.1.1",
+ "glob": "^8.1.0",
"gray-matter": "^4.0.3",
"lunr": "^2.3.9",
"markdown-it": "^13.0.1",
@@ -795,8 +796,7 @@
"node_modules/balanced-match": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
- "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
- "dev": true
+ "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="
},
"node_modules/base64-js": {
"version": "1.5.1",
@@ -2237,8 +2237,7 @@
"node_modules/fs.realpath": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
- "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=",
- "dev": true
+ "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8="
},
"node_modules/fsevents": {
"version": "2.3.2",
@@ -2333,20 +2332,18 @@
"integrity": "sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw=="
},
"node_modules/glob": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz",
- "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==",
- "dev": true,
+ "version": "8.1.0",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz",
+ "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==",
"dependencies": {
"fs.realpath": "^1.0.0",
"inflight": "^1.0.4",
"inherits": "2",
- "minimatch": "^3.0.4",
- "once": "^1.3.0",
- "path-is-absolute": "^1.0.0"
+ "minimatch": "^5.0.1",
+ "once": "^1.3.0"
},
"engines": {
- "node": "*"
+ "node": ">=12"
},
"funding": {
"url": "https://github.com/sponsors/isaacs"
@@ -2364,6 +2361,25 @@
"node": ">= 6"
}
},
+ "node_modules/glob/node_modules/brace-expansion": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz",
+ "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==",
+ "dependencies": {
+ "balanced-match": "^1.0.0"
+ }
+ },
+ "node_modules/glob/node_modules/minimatch": {
+ "version": "5.1.6",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz",
+ "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==",
+ "dependencies": {
+ "brace-expansion": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
"node_modules/global": {
"version": "4.4.0",
"resolved": "https://registry.npmjs.org/global/-/global-4.4.0.tgz",
@@ -2660,7 +2676,6 @@
"version": "1.0.6",
"resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
"integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
- "dev": true,
"dependencies": {
"once": "^1.3.0",
"wrappy": "1"
@@ -3154,6 +3169,26 @@
"node": ">=10"
}
},
+ "node_modules/js-beautify/node_modules/glob": {
+ "version": "7.2.3",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz",
+ "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==",
+ "dev": true,
+ "dependencies": {
+ "fs.realpath": "^1.0.0",
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "^3.1.1",
+ "once": "^1.3.0",
+ "path-is-absolute": "^1.0.0"
+ },
+ "engines": {
+ "node": "*"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
"node_modules/js-stringify": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/js-stringify/-/js-stringify-1.0.2.tgz",
@@ -4260,7 +4295,7 @@
"node_modules/path-is-absolute": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
- "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=",
+ "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==",
"dev": true,
"engines": {
"node": ">=0.10.0"
@@ -4953,6 +4988,26 @@
"rimraf": "bin.js"
}
},
+ "node_modules/rimraf/node_modules/glob": {
+ "version": "7.2.3",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz",
+ "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==",
+ "dev": true,
+ "dependencies": {
+ "fs.realpath": "^1.0.0",
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "^3.1.1",
+ "once": "^1.3.0",
+ "path-is-absolute": "^1.0.0"
+ },
+ "engines": {
+ "node": "*"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
"node_modules/run-parallel": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz",
@@ -7091,8 +7146,7 @@
"balanced-match": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
- "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
- "dev": true
+ "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="
},
"base64-js": {
"version": "1.5.1",
@@ -8223,8 +8277,7 @@
"fs.realpath": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
- "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=",
- "dev": true
+ "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8="
},
"fsevents": {
"version": "2.3.2",
@@ -8297,17 +8350,33 @@
"integrity": "sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw=="
},
"glob": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz",
- "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==",
- "dev": true,
+ "version": "8.1.0",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz",
+ "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==",
"requires": {
"fs.realpath": "^1.0.0",
"inflight": "^1.0.4",
"inherits": "2",
- "minimatch": "^3.0.4",
- "once": "^1.3.0",
- "path-is-absolute": "^1.0.0"
+ "minimatch": "^5.0.1",
+ "once": "^1.3.0"
+ },
+ "dependencies": {
+ "brace-expansion": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz",
+ "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==",
+ "requires": {
+ "balanced-match": "^1.0.0"
+ }
+ },
+ "minimatch": {
+ "version": "5.1.6",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz",
+ "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==",
+ "requires": {
+ "brace-expansion": "^2.0.1"
+ }
+ }
}
},
"glob-parent": {
@@ -8525,7 +8594,6 @@
"version": "1.0.6",
"resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
"integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
- "dev": true,
"requires": {
"once": "^1.3.0",
"wrappy": "1"
@@ -8893,6 +8961,22 @@
"editorconfig": "^0.15.3",
"glob": "^7.1.3",
"nopt": "^5.0.0"
+ },
+ "dependencies": {
+ "glob": {
+ "version": "7.2.3",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz",
+ "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==",
+ "dev": true,
+ "requires": {
+ "fs.realpath": "^1.0.0",
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "^3.1.1",
+ "once": "^1.3.0",
+ "path-is-absolute": "^1.0.0"
+ }
+ }
}
},
"js-stringify": {
@@ -9757,7 +9841,7 @@
"path-is-absolute": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
- "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=",
+ "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==",
"dev": true
},
"path-key": {
@@ -10319,6 +10403,22 @@
"dev": true,
"requires": {
"glob": "^7.1.3"
+ },
+ "dependencies": {
+ "glob": {
+ "version": "7.2.3",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz",
+ "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==",
+ "dev": true,
+ "requires": {
+ "fs.realpath": "^1.0.0",
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "^3.1.1",
+ "once": "^1.3.0",
+ "path-is-absolute": "^1.0.0"
+ }
+ }
}
},
"run-parallel": {
diff --git a/package.json b/package.json
index 8b839ee..dbeefce 100644
--- a/package.json
+++ b/package.json
@@ -4,12 +4,13 @@
"description": "",
"main": "index.js",
"scripts": {
- "start": "npm-run-all build:sass --parallel watch:*",
+ "start": "npm-run-all get-theme build:sass --parallel watch:*",
"watch:sass": "sass --watch src/site/styles:dist/styles",
"watch:eleventy": "cross-env ELEVENTY_ENV=dev eleventy --serve",
"build:eleventy": "cross-env ELEVENTY_ENV=prod NODE_OPTIONS=--max-old-space-size=4096 eleventy",
"build:sass": "sass src/site/styles:dist/styles",
- "build": "npm-run-all build:*",
+ "get-theme": "node src/site/get-theme.js",
+ "build": "npm-run-all get-theme build:*",
"postbuild": "node src/site/lunr-index.js"
},
"keywords": [],
@@ -31,6 +32,7 @@
"eleventy-favicon": "^1.1.2",
"eleventy-plugin-toc": "^1.1.5",
"fs-file-tree": "^1.1.1",
+ "glob": "^8.1.0",
"gray-matter": "^4.0.3",
"lunr": "^2.3.9",
"markdown-it": "^13.0.1",
diff --git a/plugin-info.json b/plugin-info.json
index 9b4ee36..ee6055d 100644
--- a/plugin-info.json
+++ b/plugin-info.json
@@ -48,6 +48,7 @@
"src/helpers/constants.js",
"src/helpers/utils.js",
"src/helpers/linkUtils.js",
- "netlify/functions/search/search.js"
+ "netlify/functions/search/search.js",
+ "src/site/get-theme.js"
]
}
\ No newline at end of file
diff --git a/src/site/_data/meta.js b/src/site/_data/meta.js
index 9feb10c..9c4c5f2 100644
--- a/src/site/_data/meta.js
+++ b/src/site/_data/meta.js
@@ -1,39 +1,26 @@
require("dotenv").config();
const axios = require("axios");
+const fs = require("fs");
+const crypto = require("crypto");
+const glob = require("glob");
+module.exports = async () => {
+ let baseUrl = process.env.SITE_BASE_URL || "";
+ if (baseUrl && !baseUrl.startsWith("http")) {
+ baseUrl = "https://" + baseUrl;
+ }
+ let themeStyle = glob.sync("src/site/styles/theme.*.css")[0] || "";
+ if (themeStyle) {
+ themeStyle = themeStyle.split("site")[1];
+ }
+ const meta = {
+ env: process.env.ELEVENTY_ENV,
+ theme: process.env.THEME,
+ themeStyle,
+ baseTheme: process.env.BASE_THEME || "dark",
+ siteName: process.env.SITE_NAME_HEADER || "Digital Garden",
+ siteBaseUrl: baseUrl,
+ };
-module.exports = async() => {
- let themeStyle = "";
- let themeUrl = process.env.THEME;
- if (themeUrl) {
- //https://forum.obsidian.md/t/1-0-theme-migration-guide/42537
- //Not all themes with no legacy mark have a theme.css file, so we need to check for it
- try{
- await axios.get(themeUrl);
- }catch{
- if(themeUrl.indexOf("theme.css") > -1){
- themeUrl = themeUrl.replace("theme.css", "obsidian.css");
- }
- else if(themeUrl.indexOf("obsidian.css") > -1){
- themeUrl = themeUrl.replace("obsidian.css", "theme.css");
- }
- }
-
- const res = await axios.get(themeUrl);
- themeStyle = ``;
- }
- let baseUrl = process.env.SITE_BASE_URL || "";
- if(baseUrl && !baseUrl.startsWith("http")){
- baseUrl = "https://" + baseUrl;
- }
- const meta ={
- env: process.env.ELEVENTY_ENV,
- theme: process.env.THEME,
- themeStyle: themeStyle,
- baseTheme: process.env.BASE_THEME || "dark",
- siteName: process.env.SITE_NAME_HEADER || "Digital Garden",
- siteBaseUrl: baseUrl,
- };
-
- return meta;
+ return meta;
};
diff --git a/src/site/_includes/components/pageheader.njk b/src/site/_includes/components/pageheader.njk
index 4e6178d..0d400ba 100644
--- a/src/site/_includes/components/pageheader.njk
+++ b/src/site/_includes/components/pageheader.njk
@@ -23,7 +23,7 @@
{%-if meta.themeStyle%}
- {{meta.themeStyle | safe}}
+
{% else %}
{%endif%}
diff --git a/src/site/get-theme.js b/src/site/get-theme.js
new file mode 100644
index 0000000..f752516
--- /dev/null
+++ b/src/site/get-theme.js
@@ -0,0 +1,39 @@
+require("dotenv").config();
+const axios = require("axios");
+const fs = require("fs");
+const crypto = require("crypto");
+const glob = require("glob");
+
+async function getTheme() {
+ let themeUrl = process.env.THEME;
+ if (themeUrl) {
+ //https://forum.obsidian.md/t/1-0-theme-migration-guide/42537
+ //Not all themes with no legacy mark have a theme.css file, so we need to check for it
+ try {
+ await axios.get(themeUrl);
+ } catch {
+ if (themeUrl.indexOf("theme.css") > -1) {
+ themeUrl = themeUrl.replace("theme.css", "obsidian.css");
+ } else if (themeUrl.indexOf("obsidian.css") > -1) {
+ themeUrl = themeUrl.replace("obsidian.css", "theme.css");
+ }
+ }
+
+ const res = await axios.get(themeUrl);
+ try {
+ const existing = glob.sync("src/site/styles/theme.*.css");
+ existing.forEach((file) => {
+ fs.rmSync(file);
+ });
+ } catch {}
+ const hashSum = crypto.createHash("sha256");
+ hashSum.update(res.data);
+ const hex = hashSum.digest("hex");
+ fs.writeFileSync(
+ `src/site/styles/theme.${hex.substring(0, 8)}.css`,
+ res.data
+ );
+ }
+}
+
+getTheme();