From 4852cd92d17dd46fd259ab80bbbf2987b7e1cac2 Mon Sep 17 00:00:00 2001 From: Ategon Date: Mon, 26 Feb 2024 03:25:11 -0500 Subject: [PATCH] Add content --- archetypes/default.md | 5 + assets/_custom.scss | 103 ++ assets/_variables.scss | 17 + content/docs/admin-guidelines.md | 3 + content/docs/automation-guidelines.md | 59 + content/docs/code-of-conduct.md | 52 + content/docs/community-guidelines.md | 12 + content/docs/contributing-guidelines.md | 0 content/docs/cookie-policy.md | 7 + content/docs/data-retention-policy.md | 0 content/docs/defederation-policy.md | 45 + content/docs/donation-policy.md | 31 + content/docs/moderator-guidelines.md | 8 + content/docs/privacy-policy.md | 71 + content/docs/terms-of-service.md | 7 + content/docs/test/test.md | 7 + content/menu/_index.md | 19 + content/menu/test/_index.md | 14 + hugo.yaml | 29 + layouts/partials/docs/menu-page-bundle.html | 4 + layouts/partials/docs/menu.html | 25 + static/logo.png | Bin 0 -> 55288 bytes themes/hugo-book/.github/workflows/main.yml | 34 + themes/hugo-book/.gitignore | 4 + themes/hugo-book/LICENSE | 20 + themes/hugo-book/README.md | 358 +++++ themes/hugo-book/archetypes/docs.md | 10 + themes/hugo-book/archetypes/posts.md | 6 + themes/hugo-book/assets/_custom.scss | 3 + themes/hugo-book/assets/_defaults.scss | 66 + themes/hugo-book/assets/_fonts.scss | 39 + themes/hugo-book/assets/_main.scss | 364 +++++ themes/hugo-book/assets/_markdown.scss | 197 +++ themes/hugo-book/assets/_print.scss | 17 + themes/hugo-book/assets/_shortcodes.scss | 104 ++ themes/hugo-book/assets/_utils.scss | 92 ++ themes/hugo-book/assets/_variables.scss | 3 + themes/hugo-book/assets/book.scss | 15 + themes/hugo-book/assets/clipboard.js | 24 + themes/hugo-book/assets/manifest.json | 15 + themes/hugo-book/assets/menu-reset.js | 7 + themes/hugo-book/assets/mermaid.json | 6 + themes/hugo-book/assets/normalize.css | 349 +++++ .../hugo-book/assets/plugins/_numbered.scss | 36 + .../hugo-book/assets/plugins/_scrollbars.scss | 26 + themes/hugo-book/assets/search-data.json | 17 + themes/hugo-book/assets/search.js | 104 ++ themes/hugo-book/assets/sw-register.js | 7 + themes/hugo-book/assets/sw.js | 55 + themes/hugo-book/assets/themes/_auto.scss | 9 + themes/hugo-book/assets/themes/_dark.scss | 3 + themes/hugo-book/assets/themes/_light.scss | 3 + .../hugo-book/exampleSite/assets/_custom.scss | 4 + .../exampleSite/assets/_variables.scss | 1 + themes/hugo-book/exampleSite/config.toml | 122 ++ themes/hugo-book/exampleSite/config.yaml | 118 ++ .../exampleSite/content.bn/_index.md | 79 + .../exampleSite/content.en/_index.md | 41 + .../content.en/docs/example/_index.md | 71 + .../example/collapsed/3rd-level/4th-level.md | 12 + .../example/collapsed/3rd-level/_index.md | 26 + .../docs/example/collapsed/_index.md | 4 + .../content.en/docs/example/hidden.md | 52 + .../docs/example/table-of-contents/_index.md | 85 ++ .../example/table-of-contents/with-toc.md | 64 + .../example/table-of-contents/without-toc.md | 59 + .../content.en/docs/shortcodes/_index.md | 3 + .../content.en/docs/shortcodes/buttons.md | 13 + .../content.en/docs/shortcodes/columns.md | 45 + .../content.en/docs/shortcodes/details.md | 22 + .../content.en/docs/shortcodes/expand.md | 35 + .../content.en/docs/shortcodes/hints.md | 32 + .../content.en/docs/shortcodes/katex.md | 31 + .../content.en/docs/shortcodes/mermaid.md | 41 + .../docs/shortcodes/section/_index.md | 15 + .../docs/shortcodes/section/first-page.md | 6 + .../docs/shortcodes/section/second-page.md | 6 + .../content.en/docs/shortcodes/tabs.md | 50 + .../exampleSite/content.en/menu/index.md | 22 + .../exampleSite/content.en/posts/_index.md | 7 + .../content.en/posts/creating-a-new-theme.md | 1150 +++++++++++++++ .../content.en/posts/goisforlovers.md | 344 +++++ .../content.en/posts/hugoisforlovers.md | 89 ++ .../content.en/posts/migrate-from-jekyll.md | 156 ++ .../exampleSite/content.ru/_index.md | 79 + .../exampleSite/content.zh/_index.md | 79 + ...s_e129fe35b8d0a70789c8a08429469073.content | 1 + ...scss_e129fe35b8d0a70789c8a08429469073.json | 1 + themes/hugo-book/go.mod | 3 + themes/hugo-book/i18n/am.yaml | 14 + themes/hugo-book/i18n/bn.yaml | 14 + themes/hugo-book/i18n/cn.yaml | 21 + themes/hugo-book/i18n/cs.yaml | 14 + themes/hugo-book/i18n/de.yaml | 14 + themes/hugo-book/i18n/en.yaml | 14 + themes/hugo-book/i18n/es.yaml | 14 + themes/hugo-book/i18n/fa.yaml | 20 + themes/hugo-book/i18n/fr.yaml | 14 + themes/hugo-book/i18n/it.yaml | 14 + themes/hugo-book/i18n/ja.yaml | 20 + themes/hugo-book/i18n/jp.yaml | 21 + themes/hugo-book/i18n/ko.yaml | 20 + themes/hugo-book/i18n/nb.yaml | 14 + themes/hugo-book/i18n/pt.yaml | 14 + themes/hugo-book/i18n/ru.yaml | 14 + themes/hugo-book/i18n/sv.yaml | 14 + themes/hugo-book/i18n/tr.yaml | 14 + themes/hugo-book/i18n/uk.yaml | 14 + themes/hugo-book/i18n/zh-TW.yaml | 20 + themes/hugo-book/i18n/zh.yaml | 20 + themes/hugo-book/images/screenshot.png | Bin 0 -> 189080 bytes themes/hugo-book/images/tn.png | Bin 0 -> 195683 bytes themes/hugo-book/layouts/404.html | 34 + .../_default/_markup/render-heading.html | 4 + .../_default/_markup/render-image.html | 19 + .../layouts/_default/_markup/render-link.html | 28 + themes/hugo-book/layouts/_default/baseof.html | 83 ++ themes/hugo-book/layouts/_default/list.html | 1 + themes/hugo-book/layouts/_default/single.html | 1 + .../layouts/partials/docs/brand.html | 8 + .../layouts/partials/docs/comments.html | 2 + .../hugo-book/layouts/partials/docs/date.html | 6 + .../layouts/partials/docs/footer.html | 28 + .../layouts/partials/docs/header.html | 13 + .../partials/docs/html-head-title.html | 1 + .../layouts/partials/docs/html-head.html | 56 + .../layouts/partials/docs/inject/body.html | 0 .../partials/docs/inject/content-after.html | 0 .../partials/docs/inject/content-before.html | 0 .../layouts/partials/docs/inject/footer.html | 0 .../layouts/partials/docs/inject/head.html | 0 .../partials/docs/inject/menu-after.html | 0 .../partials/docs/inject/menu-before.html | 0 .../partials/docs/inject/toc-after.html | 0 .../partials/docs/inject/toc-before.html | 0 .../layouts/partials/docs/languages.html | 33 + .../layouts/partials/docs/menu-bundle.html | 5 + .../layouts/partials/docs/menu-filetree.html | 49 + .../layouts/partials/docs/menu-hugo.html | 28 + .../hugo-book/layouts/partials/docs/menu.html | 25 + .../layouts/partials/docs/post-meta.html | 23 + .../layouts/partials/docs/search.html | 7 + .../layouts/partials/docs/taxonomy.html | 19 + .../layouts/partials/docs/title.html | 17 + .../hugo-book/layouts/partials/docs/toc.html | 3 + themes/hugo-book/layouts/posts/list.html | 22 + themes/hugo-book/layouts/posts/single.html | 13 + .../hugo-book/layouts/shortcodes/button.html | 12 + .../hugo-book/layouts/shortcodes/columns.html | 7 + .../hugo-book/layouts/shortcodes/details.html | 7 + .../hugo-book/layouts/shortcodes/expand.html | 13 + themes/hugo-book/layouts/shortcodes/hint.html | 3 + .../hugo-book/layouts/shortcodes/katex.html | 13 + .../hugo-book/layouts/shortcodes/mermaid.html | 12 + .../hugo-book/layouts/shortcodes/section.html | 12 + themes/hugo-book/layouts/shortcodes/tab.html | 12 + themes/hugo-book/layouts/shortcodes/tabs.html | 15 + themes/hugo-book/layouts/taxonomy/list.html | 13 + .../hugo-book/layouts/taxonomy/taxonomy.html | 22 + themes/hugo-book/static/favicon.png | Bin 0 -> 109 bytes themes/hugo-book/static/favicon.svg | 1 + themes/hugo-book/static/flexsearch.min.js | 42 + .../fonts/roboto-mono-v13-latin-regular.woff | Bin 0 -> 15160 bytes .../fonts/roboto-mono-v13-latin-regular.woff2 | Bin 0 -> 12312 bytes .../static/fonts/roboto-v27-latin-700.woff | Bin 0 -> 20396 bytes .../static/fonts/roboto-v27-latin-700.woff2 | Bin 0 -> 15828 bytes .../fonts/roboto-v27-latin-regular.woff | Bin 0 -> 20332 bytes .../fonts/roboto-v27-latin-regular.woff2 | Bin 0 -> 15688 bytes .../hugo-book/static/katex/auto-render.min.js | 1 + .../static/katex/fonts/KaTeX_AMS-Regular.ttf | Bin 0 -> 70972 bytes .../static/katex/fonts/KaTeX_AMS-Regular.woff | Bin 0 -> 38868 bytes .../katex/fonts/KaTeX_AMS-Regular.woff2 | Bin 0 -> 32944 bytes .../katex/fonts/KaTeX_Caligraphic-Bold.ttf | Bin 0 -> 19316 bytes .../katex/fonts/KaTeX_Caligraphic-Bold.woff | Bin 0 -> 11696 bytes .../katex/fonts/KaTeX_Caligraphic-Bold.woff2 | Bin 0 -> 10448 bytes .../katex/fonts/KaTeX_Caligraphic-Regular.ttf | Bin 0 -> 18684 bytes .../fonts/KaTeX_Caligraphic-Regular.woff | Bin 0 -> 11460 bytes .../fonts/KaTeX_Caligraphic-Regular.woff2 | Bin 0 -> 10240 bytes .../static/katex/fonts/KaTeX_Fraktur-Bold.ttf | Bin 0 -> 35660 bytes .../katex/fonts/KaTeX_Fraktur-Bold.woff | Bin 0 -> 22632 bytes .../katex/fonts/KaTeX_Fraktur-Bold.woff2 | Bin 0 -> 20360 bytes .../katex/fonts/KaTeX_Fraktur-Regular.ttf | Bin 0 -> 34352 bytes .../katex/fonts/KaTeX_Fraktur-Regular.woff | Bin 0 -> 22088 bytes .../katex/fonts/KaTeX_Fraktur-Regular.woff2 | Bin 0 -> 19784 bytes .../static/katex/fonts/KaTeX_Main-Bold.ttf | Bin 0 -> 60784 bytes .../static/katex/fonts/KaTeX_Main-Bold.woff | Bin 0 -> 35464 bytes .../static/katex/fonts/KaTeX_Main-Bold.woff2 | Bin 0 -> 30244 bytes .../katex/fonts/KaTeX_Main-BoldItalic.ttf | Bin 0 -> 44496 bytes .../katex/fonts/KaTeX_Main-BoldItalic.woff | Bin 0 -> 25352 bytes .../katex/fonts/KaTeX_Main-BoldItalic.woff2 | Bin 0 -> 21944 bytes .../static/katex/fonts/KaTeX_Main-Italic.ttf | Bin 0 -> 47640 bytes .../static/katex/fonts/KaTeX_Main-Italic.woff | Bin 0 -> 26228 bytes .../katex/fonts/KaTeX_Main-Italic.woff2 | Bin 0 -> 22748 bytes .../static/katex/fonts/KaTeX_Main-Regular.ttf | Bin 0 -> 69520 bytes .../katex/fonts/KaTeX_Main-Regular.woff | Bin 0 -> 38112 bytes .../katex/fonts/KaTeX_Main-Regular.woff2 | Bin 0 -> 32464 bytes .../katex/fonts/KaTeX_Math-BoldItalic.ttf | Bin 0 -> 39308 bytes .../katex/fonts/KaTeX_Math-BoldItalic.woff | Bin 0 -> 22324 bytes .../katex/fonts/KaTeX_Math-BoldItalic.woff2 | Bin 0 -> 19720 bytes .../static/katex/fonts/KaTeX_Math-Italic.ttf | Bin 0 -> 40992 bytes .../static/katex/fonts/KaTeX_Math-Italic.woff | Bin 0 -> 22844 bytes .../katex/fonts/KaTeX_Math-Italic.woff2 | Bin 0 -> 20096 bytes .../katex/fonts/KaTeX_SansSerif-Bold.ttf | Bin 0 -> 33688 bytes .../katex/fonts/KaTeX_SansSerif-Bold.woff | Bin 0 -> 18516 bytes .../katex/fonts/KaTeX_SansSerif-Bold.woff2 | Bin 0 -> 15732 bytes .../katex/fonts/KaTeX_SansSerif-Italic.ttf | Bin 0 -> 30960 bytes .../katex/fonts/KaTeX_SansSerif-Italic.woff | Bin 0 -> 17572 bytes .../katex/fonts/KaTeX_SansSerif-Italic.woff2 | Bin 0 -> 15024 bytes .../katex/fonts/KaTeX_SansSerif-Regular.ttf | Bin 0 -> 29812 bytes .../katex/fonts/KaTeX_SansSerif-Regular.woff | Bin 0 -> 16228 bytes .../katex/fonts/KaTeX_SansSerif-Regular.woff2 | Bin 0 -> 13708 bytes .../katex/fonts/KaTeX_Script-Regular.ttf | Bin 0 -> 24620 bytes .../katex/fonts/KaTeX_Script-Regular.woff | Bin 0 -> 13428 bytes .../katex/fonts/KaTeX_Script-Regular.woff2 | Bin 0 -> 12064 bytes .../katex/fonts/KaTeX_Size1-Regular.ttf | Bin 0 -> 12916 bytes .../katex/fonts/KaTeX_Size1-Regular.woff | Bin 0 -> 6696 bytes .../katex/fonts/KaTeX_Size1-Regular.woff2 | Bin 0 -> 5592 bytes .../katex/fonts/KaTeX_Size2-Regular.ttf | Bin 0 -> 12172 bytes .../katex/fonts/KaTeX_Size2-Regular.woff | Bin 0 -> 6436 bytes .../katex/fonts/KaTeX_Size2-Regular.woff2 | Bin 0 -> 5392 bytes .../katex/fonts/KaTeX_Size3-Regular.ttf | Bin 0 -> 8120 bytes .../katex/fonts/KaTeX_Size3-Regular.woff | Bin 0 -> 4568 bytes .../katex/fonts/KaTeX_Size3-Regular.woff2 | Bin 0 -> 3728 bytes .../katex/fonts/KaTeX_Size4-Regular.ttf | Bin 0 -> 11016 bytes .../katex/fonts/KaTeX_Size4-Regular.woff | Bin 0 -> 6184 bytes .../katex/fonts/KaTeX_Size4-Regular.woff2 | Bin 0 -> 5028 bytes .../katex/fonts/KaTeX_Typewriter-Regular.ttf | Bin 0 -> 35924 bytes .../katex/fonts/KaTeX_Typewriter-Regular.woff | Bin 0 -> 20260 bytes .../fonts/KaTeX_Typewriter-Regular.woff2 | Bin 0 -> 17272 bytes themes/hugo-book/static/katex/katex.min.css | 1 + themes/hugo-book/static/katex/katex.min.js | 1 + themes/hugo-book/static/mermaid.min.js | 1280 +++++++++++++++++ themes/hugo-book/static/svg/calendar.svg | 1 + themes/hugo-book/static/svg/edit.svg | 1 + themes/hugo-book/static/svg/menu.svg | 1 + themes/hugo-book/static/svg/toc.svg | 1 + themes/hugo-book/static/svg/translate.svg | 1 + themes/hugo-book/theme.toml | 16 + 238 files changed, 7833 insertions(+) create mode 100644 archetypes/default.md create mode 100644 assets/_custom.scss create mode 100644 assets/_variables.scss create mode 100644 content/docs/admin-guidelines.md create mode 100644 content/docs/automation-guidelines.md create mode 100644 content/docs/code-of-conduct.md create mode 100644 content/docs/community-guidelines.md create mode 100644 content/docs/contributing-guidelines.md create mode 100644 content/docs/cookie-policy.md create mode 100644 content/docs/data-retention-policy.md create mode 100644 content/docs/defederation-policy.md create mode 100644 content/docs/donation-policy.md create mode 100644 content/docs/moderator-guidelines.md create mode 100644 content/docs/privacy-policy.md create mode 100644 content/docs/terms-of-service.md create mode 100644 content/docs/test/test.md create mode 100644 content/menu/_index.md create mode 100644 content/menu/test/_index.md create mode 100644 hugo.yaml create mode 100644 layouts/partials/docs/menu-page-bundle.html create mode 100644 layouts/partials/docs/menu.html create mode 100755 static/logo.png create mode 100644 themes/hugo-book/.github/workflows/main.yml create mode 100644 themes/hugo-book/.gitignore create mode 100644 themes/hugo-book/LICENSE create mode 100644 themes/hugo-book/README.md create mode 100644 themes/hugo-book/archetypes/docs.md create mode 100644 themes/hugo-book/archetypes/posts.md create mode 100644 themes/hugo-book/assets/_custom.scss create mode 100644 themes/hugo-book/assets/_defaults.scss create mode 100644 themes/hugo-book/assets/_fonts.scss create mode 100644 themes/hugo-book/assets/_main.scss create mode 100644 themes/hugo-book/assets/_markdown.scss create mode 100644 themes/hugo-book/assets/_print.scss create mode 100644 themes/hugo-book/assets/_shortcodes.scss create mode 100644 themes/hugo-book/assets/_utils.scss create mode 100644 themes/hugo-book/assets/_variables.scss create mode 100644 themes/hugo-book/assets/book.scss create mode 100644 themes/hugo-book/assets/clipboard.js create mode 100644 themes/hugo-book/assets/manifest.json create mode 100644 themes/hugo-book/assets/menu-reset.js create mode 100644 themes/hugo-book/assets/mermaid.json create mode 100644 themes/hugo-book/assets/normalize.css create mode 100644 themes/hugo-book/assets/plugins/_numbered.scss create mode 100644 themes/hugo-book/assets/plugins/_scrollbars.scss create mode 100644 themes/hugo-book/assets/search-data.json create mode 100644 themes/hugo-book/assets/search.js create mode 100644 themes/hugo-book/assets/sw-register.js create mode 100644 themes/hugo-book/assets/sw.js create mode 100644 themes/hugo-book/assets/themes/_auto.scss create mode 100644 themes/hugo-book/assets/themes/_dark.scss create mode 100644 themes/hugo-book/assets/themes/_light.scss create mode 100644 themes/hugo-book/exampleSite/assets/_custom.scss create mode 100644 themes/hugo-book/exampleSite/assets/_variables.scss create mode 100644 themes/hugo-book/exampleSite/config.toml create mode 100644 themes/hugo-book/exampleSite/config.yaml create mode 100644 themes/hugo-book/exampleSite/content.bn/_index.md create mode 100644 themes/hugo-book/exampleSite/content.en/_index.md create mode 100644 themes/hugo-book/exampleSite/content.en/docs/example/_index.md create mode 100644 themes/hugo-book/exampleSite/content.en/docs/example/collapsed/3rd-level/4th-level.md create mode 100644 themes/hugo-book/exampleSite/content.en/docs/example/collapsed/3rd-level/_index.md create mode 100644 themes/hugo-book/exampleSite/content.en/docs/example/collapsed/_index.md create mode 100644 themes/hugo-book/exampleSite/content.en/docs/example/hidden.md create mode 100644 themes/hugo-book/exampleSite/content.en/docs/example/table-of-contents/_index.md create mode 100644 themes/hugo-book/exampleSite/content.en/docs/example/table-of-contents/with-toc.md create mode 100644 themes/hugo-book/exampleSite/content.en/docs/example/table-of-contents/without-toc.md create mode 100644 themes/hugo-book/exampleSite/content.en/docs/shortcodes/_index.md create mode 100644 themes/hugo-book/exampleSite/content.en/docs/shortcodes/buttons.md create mode 100644 themes/hugo-book/exampleSite/content.en/docs/shortcodes/columns.md create mode 100644 themes/hugo-book/exampleSite/content.en/docs/shortcodes/details.md create mode 100644 themes/hugo-book/exampleSite/content.en/docs/shortcodes/expand.md create mode 100644 themes/hugo-book/exampleSite/content.en/docs/shortcodes/hints.md create mode 100644 themes/hugo-book/exampleSite/content.en/docs/shortcodes/katex.md create mode 100644 themes/hugo-book/exampleSite/content.en/docs/shortcodes/mermaid.md create mode 100644 themes/hugo-book/exampleSite/content.en/docs/shortcodes/section/_index.md create mode 100644 themes/hugo-book/exampleSite/content.en/docs/shortcodes/section/first-page.md create mode 100644 themes/hugo-book/exampleSite/content.en/docs/shortcodes/section/second-page.md create mode 100644 themes/hugo-book/exampleSite/content.en/docs/shortcodes/tabs.md create mode 100644 themes/hugo-book/exampleSite/content.en/menu/index.md create mode 100644 themes/hugo-book/exampleSite/content.en/posts/_index.md create mode 100644 themes/hugo-book/exampleSite/content.en/posts/creating-a-new-theme.md create mode 100644 themes/hugo-book/exampleSite/content.en/posts/goisforlovers.md create mode 100644 themes/hugo-book/exampleSite/content.en/posts/hugoisforlovers.md create mode 100644 themes/hugo-book/exampleSite/content.en/posts/migrate-from-jekyll.md create mode 100644 themes/hugo-book/exampleSite/content.ru/_index.md create mode 100644 themes/hugo-book/exampleSite/content.zh/_index.md create mode 100644 themes/hugo-book/exampleSite/resources/_gen/assets/scss/book.scss_e129fe35b8d0a70789c8a08429469073.content create mode 100644 themes/hugo-book/exampleSite/resources/_gen/assets/scss/book.scss_e129fe35b8d0a70789c8a08429469073.json create mode 100644 themes/hugo-book/go.mod create mode 100644 themes/hugo-book/i18n/am.yaml create mode 100644 themes/hugo-book/i18n/bn.yaml create mode 100644 themes/hugo-book/i18n/cn.yaml create mode 100644 themes/hugo-book/i18n/cs.yaml create mode 100644 themes/hugo-book/i18n/de.yaml create mode 100644 themes/hugo-book/i18n/en.yaml create mode 100644 themes/hugo-book/i18n/es.yaml create mode 100644 themes/hugo-book/i18n/fa.yaml create mode 100644 themes/hugo-book/i18n/fr.yaml create mode 100644 themes/hugo-book/i18n/it.yaml create mode 100644 themes/hugo-book/i18n/ja.yaml create mode 100644 themes/hugo-book/i18n/jp.yaml create mode 100644 themes/hugo-book/i18n/ko.yaml create mode 100644 themes/hugo-book/i18n/nb.yaml create mode 100644 themes/hugo-book/i18n/pt.yaml create mode 100644 themes/hugo-book/i18n/ru.yaml create mode 100644 themes/hugo-book/i18n/sv.yaml create mode 100644 themes/hugo-book/i18n/tr.yaml create mode 100644 themes/hugo-book/i18n/uk.yaml create mode 100644 themes/hugo-book/i18n/zh-TW.yaml create mode 100644 themes/hugo-book/i18n/zh.yaml create mode 100644 themes/hugo-book/images/screenshot.png create mode 100644 themes/hugo-book/images/tn.png create mode 100644 themes/hugo-book/layouts/404.html create mode 100644 themes/hugo-book/layouts/_default/_markup/render-heading.html create mode 100644 themes/hugo-book/layouts/_default/_markup/render-image.html create mode 100644 themes/hugo-book/layouts/_default/_markup/render-link.html create mode 100644 themes/hugo-book/layouts/_default/baseof.html create mode 100644 themes/hugo-book/layouts/_default/list.html create mode 100644 themes/hugo-book/layouts/_default/single.html create mode 100644 themes/hugo-book/layouts/partials/docs/brand.html create mode 100644 themes/hugo-book/layouts/partials/docs/comments.html create mode 100644 themes/hugo-book/layouts/partials/docs/date.html create mode 100644 themes/hugo-book/layouts/partials/docs/footer.html create mode 100644 themes/hugo-book/layouts/partials/docs/header.html create mode 100644 themes/hugo-book/layouts/partials/docs/html-head-title.html create mode 100644 themes/hugo-book/layouts/partials/docs/html-head.html create mode 100644 themes/hugo-book/layouts/partials/docs/inject/body.html create mode 100644 themes/hugo-book/layouts/partials/docs/inject/content-after.html create mode 100644 themes/hugo-book/layouts/partials/docs/inject/content-before.html create mode 100644 themes/hugo-book/layouts/partials/docs/inject/footer.html create mode 100644 themes/hugo-book/layouts/partials/docs/inject/head.html create mode 100644 themes/hugo-book/layouts/partials/docs/inject/menu-after.html create mode 100644 themes/hugo-book/layouts/partials/docs/inject/menu-before.html create mode 100644 themes/hugo-book/layouts/partials/docs/inject/toc-after.html create mode 100644 themes/hugo-book/layouts/partials/docs/inject/toc-before.html create mode 100644 themes/hugo-book/layouts/partials/docs/languages.html create mode 100644 themes/hugo-book/layouts/partials/docs/menu-bundle.html create mode 100644 themes/hugo-book/layouts/partials/docs/menu-filetree.html create mode 100644 themes/hugo-book/layouts/partials/docs/menu-hugo.html create mode 100644 themes/hugo-book/layouts/partials/docs/menu.html create mode 100644 themes/hugo-book/layouts/partials/docs/post-meta.html create mode 100644 themes/hugo-book/layouts/partials/docs/search.html create mode 100644 themes/hugo-book/layouts/partials/docs/taxonomy.html create mode 100644 themes/hugo-book/layouts/partials/docs/title.html create mode 100644 themes/hugo-book/layouts/partials/docs/toc.html create mode 100644 themes/hugo-book/layouts/posts/list.html create mode 100644 themes/hugo-book/layouts/posts/single.html create mode 100644 themes/hugo-book/layouts/shortcodes/button.html create mode 100644 themes/hugo-book/layouts/shortcodes/columns.html create mode 100644 themes/hugo-book/layouts/shortcodes/details.html create mode 100644 themes/hugo-book/layouts/shortcodes/expand.html create mode 100644 themes/hugo-book/layouts/shortcodes/hint.html create mode 100644 themes/hugo-book/layouts/shortcodes/katex.html create mode 100644 themes/hugo-book/layouts/shortcodes/mermaid.html create mode 100644 themes/hugo-book/layouts/shortcodes/section.html create mode 100644 themes/hugo-book/layouts/shortcodes/tab.html create mode 100644 themes/hugo-book/layouts/shortcodes/tabs.html create mode 100644 themes/hugo-book/layouts/taxonomy/list.html create mode 100644 themes/hugo-book/layouts/taxonomy/taxonomy.html create mode 100644 themes/hugo-book/static/favicon.png create mode 100644 themes/hugo-book/static/favicon.svg create mode 100644 themes/hugo-book/static/flexsearch.min.js create mode 100644 themes/hugo-book/static/fonts/roboto-mono-v13-latin-regular.woff create mode 100644 themes/hugo-book/static/fonts/roboto-mono-v13-latin-regular.woff2 create mode 100644 themes/hugo-book/static/fonts/roboto-v27-latin-700.woff create mode 100644 themes/hugo-book/static/fonts/roboto-v27-latin-700.woff2 create mode 100644 themes/hugo-book/static/fonts/roboto-v27-latin-regular.woff create mode 100644 themes/hugo-book/static/fonts/roboto-v27-latin-regular.woff2 create mode 100644 themes/hugo-book/static/katex/auto-render.min.js create mode 100644 themes/hugo-book/static/katex/fonts/KaTeX_AMS-Regular.ttf create mode 100644 themes/hugo-book/static/katex/fonts/KaTeX_AMS-Regular.woff create mode 100644 themes/hugo-book/static/katex/fonts/KaTeX_AMS-Regular.woff2 create mode 100644 themes/hugo-book/static/katex/fonts/KaTeX_Caligraphic-Bold.ttf create mode 100644 themes/hugo-book/static/katex/fonts/KaTeX_Caligraphic-Bold.woff create mode 100644 themes/hugo-book/static/katex/fonts/KaTeX_Caligraphic-Bold.woff2 create mode 100644 themes/hugo-book/static/katex/fonts/KaTeX_Caligraphic-Regular.ttf create mode 100644 themes/hugo-book/static/katex/fonts/KaTeX_Caligraphic-Regular.woff create mode 100644 themes/hugo-book/static/katex/fonts/KaTeX_Caligraphic-Regular.woff2 create mode 100644 themes/hugo-book/static/katex/fonts/KaTeX_Fraktur-Bold.ttf create mode 100644 themes/hugo-book/static/katex/fonts/KaTeX_Fraktur-Bold.woff create mode 100644 themes/hugo-book/static/katex/fonts/KaTeX_Fraktur-Bold.woff2 create mode 100644 themes/hugo-book/static/katex/fonts/KaTeX_Fraktur-Regular.ttf create mode 100644 themes/hugo-book/static/katex/fonts/KaTeX_Fraktur-Regular.woff create mode 100644 themes/hugo-book/static/katex/fonts/KaTeX_Fraktur-Regular.woff2 create mode 100644 themes/hugo-book/static/katex/fonts/KaTeX_Main-Bold.ttf create mode 100644 themes/hugo-book/static/katex/fonts/KaTeX_Main-Bold.woff create mode 100644 themes/hugo-book/static/katex/fonts/KaTeX_Main-Bold.woff2 create mode 100644 themes/hugo-book/static/katex/fonts/KaTeX_Main-BoldItalic.ttf create mode 100644 themes/hugo-book/static/katex/fonts/KaTeX_Main-BoldItalic.woff create mode 100644 themes/hugo-book/static/katex/fonts/KaTeX_Main-BoldItalic.woff2 create mode 100644 themes/hugo-book/static/katex/fonts/KaTeX_Main-Italic.ttf create mode 100644 themes/hugo-book/static/katex/fonts/KaTeX_Main-Italic.woff create mode 100644 themes/hugo-book/static/katex/fonts/KaTeX_Main-Italic.woff2 create mode 100644 themes/hugo-book/static/katex/fonts/KaTeX_Main-Regular.ttf create mode 100644 themes/hugo-book/static/katex/fonts/KaTeX_Main-Regular.woff create mode 100644 themes/hugo-book/static/katex/fonts/KaTeX_Main-Regular.woff2 create mode 100644 themes/hugo-book/static/katex/fonts/KaTeX_Math-BoldItalic.ttf create mode 100644 themes/hugo-book/static/katex/fonts/KaTeX_Math-BoldItalic.woff create mode 100644 themes/hugo-book/static/katex/fonts/KaTeX_Math-BoldItalic.woff2 create mode 100644 themes/hugo-book/static/katex/fonts/KaTeX_Math-Italic.ttf create mode 100644 themes/hugo-book/static/katex/fonts/KaTeX_Math-Italic.woff create mode 100644 themes/hugo-book/static/katex/fonts/KaTeX_Math-Italic.woff2 create mode 100644 themes/hugo-book/static/katex/fonts/KaTeX_SansSerif-Bold.ttf create mode 100644 themes/hugo-book/static/katex/fonts/KaTeX_SansSerif-Bold.woff create mode 100644 themes/hugo-book/static/katex/fonts/KaTeX_SansSerif-Bold.woff2 create mode 100644 themes/hugo-book/static/katex/fonts/KaTeX_SansSerif-Italic.ttf create mode 100644 themes/hugo-book/static/katex/fonts/KaTeX_SansSerif-Italic.woff create mode 100644 themes/hugo-book/static/katex/fonts/KaTeX_SansSerif-Italic.woff2 create mode 100644 themes/hugo-book/static/katex/fonts/KaTeX_SansSerif-Regular.ttf create mode 100644 themes/hugo-book/static/katex/fonts/KaTeX_SansSerif-Regular.woff create mode 100644 themes/hugo-book/static/katex/fonts/KaTeX_SansSerif-Regular.woff2 create mode 100644 themes/hugo-book/static/katex/fonts/KaTeX_Script-Regular.ttf create mode 100644 themes/hugo-book/static/katex/fonts/KaTeX_Script-Regular.woff create mode 100644 themes/hugo-book/static/katex/fonts/KaTeX_Script-Regular.woff2 create mode 100644 themes/hugo-book/static/katex/fonts/KaTeX_Size1-Regular.ttf create mode 100644 themes/hugo-book/static/katex/fonts/KaTeX_Size1-Regular.woff create mode 100644 themes/hugo-book/static/katex/fonts/KaTeX_Size1-Regular.woff2 create mode 100644 themes/hugo-book/static/katex/fonts/KaTeX_Size2-Regular.ttf create mode 100644 themes/hugo-book/static/katex/fonts/KaTeX_Size2-Regular.woff create mode 100644 themes/hugo-book/static/katex/fonts/KaTeX_Size2-Regular.woff2 create mode 100644 themes/hugo-book/static/katex/fonts/KaTeX_Size3-Regular.ttf create mode 100644 themes/hugo-book/static/katex/fonts/KaTeX_Size3-Regular.woff create mode 100644 themes/hugo-book/static/katex/fonts/KaTeX_Size3-Regular.woff2 create mode 100644 themes/hugo-book/static/katex/fonts/KaTeX_Size4-Regular.ttf create mode 100644 themes/hugo-book/static/katex/fonts/KaTeX_Size4-Regular.woff create mode 100644 themes/hugo-book/static/katex/fonts/KaTeX_Size4-Regular.woff2 create mode 100644 themes/hugo-book/static/katex/fonts/KaTeX_Typewriter-Regular.ttf create mode 100644 themes/hugo-book/static/katex/fonts/KaTeX_Typewriter-Regular.woff create mode 100644 themes/hugo-book/static/katex/fonts/KaTeX_Typewriter-Regular.woff2 create mode 100644 themes/hugo-book/static/katex/katex.min.css create mode 100644 themes/hugo-book/static/katex/katex.min.js create mode 100644 themes/hugo-book/static/mermaid.min.js create mode 100644 themes/hugo-book/static/svg/calendar.svg create mode 100644 themes/hugo-book/static/svg/edit.svg create mode 100644 themes/hugo-book/static/svg/menu.svg create mode 100644 themes/hugo-book/static/svg/toc.svg create mode 100644 themes/hugo-book/static/svg/translate.svg create mode 100644 themes/hugo-book/theme.toml diff --git a/archetypes/default.md b/archetypes/default.md new file mode 100644 index 0000000..c6f3fce --- /dev/null +++ b/archetypes/default.md @@ -0,0 +1,5 @@ ++++ +title = '{{ replace .File.ContentBaseName "-" " " | title }}' +date = {{ .Date }} +draft = true ++++ diff --git a/assets/_custom.scss b/assets/_custom.scss new file mode 100644 index 0000000..bc78fea --- /dev/null +++ b/assets/_custom.scss @@ -0,0 +1,103 @@ +.book-menu-content nav ul:nth-child(3) { + color: gray; + + label a img { + color: gray; + filter: invert(0.4) + } +} + +.book-search { + input { + transition: all; + transition-duration: 300ms; + width: 100%; + + &:focus { + width: 102%; + color: gold; + } + } +} + +.book-menu-content nav ul:nth-child(6) { + padding-top: 20px; + color: gray; +} + +*:focus { + outline-style: none; + outline-color: transparent; +} + +.book-menu { + strong { + color: gray; + } + + a { + transition: all; + transition-duration: 300ms; + + &:hover { + opacity: .8; + transform: scale(1.05); + + @media (prefers-reduced-motion) { + transform: none; + } + } + + &.active { + color: transparent; + background-clip: text; + background-color: rgb(44,175,208); + background-image: linear-gradient(90deg, rgba(44,175,208,1) 0%, rgba(148,45,253,1) 100%); + } + } +} + +.book-brand { + span { + color: transparent; + background-clip: text; + background-color: rgb(44,175,208); + background-image: linear-gradient(90deg, rgba(44,175,208,1) -50%, rgba(148,45,253,1) 150%); + } +} + +.book-page { + article p:nth-child(2){ + color: gray; + } + a { + color: rgb(70, 100, 200); + } + h1 { + color: rgb(44, 175, 208); + } + + h2 { + color: rgb(88, 85, 233); + } + + h3 { + color: rgb(148, 45, 253); + } +} + +.book-toc-content { + ul { + li a { + transition: all; + transition-duration: 300ms; + color: rgb(150, 150, 150); + } + + ul li a { + transition: all; + transition-duration: 300ms; + color: rgb(100, 100, 100); + } + } +} diff --git a/assets/_variables.scss b/assets/_variables.scss new file mode 100644 index 0000000..957016c --- /dev/null +++ b/assets/_variables.scss @@ -0,0 +1,17 @@ +@mixin theme-dark { + --gray-100: rgba(255, 255, 255, 0.1); + --gray-200: rgba(255, 255, 255, 0.2); + --gray-500: rgba(255, 255, 255, 0.5); + + --color-link: #84b2ff; + --color-visited-link: #b88dff; + + --body-background: #121212; + --body-font-color: #d9dcdf; + + --icon-filter: brightness(0) invert(1); + + --hint-color-info: #6bf; + --hint-color-warning: #fd6; + --hint-color-danger: #f66; +} diff --git a/content/docs/admin-guidelines.md b/content/docs/admin-guidelines.md new file mode 100644 index 0000000..afc141a --- /dev/null +++ b/content/docs/admin-guidelines.md @@ -0,0 +1,3 @@ +--- +BookMenuBundle: '/menu/test' +--- \ No newline at end of file diff --git a/content/docs/automation-guidelines.md b/content/docs/automation-guidelines.md new file mode 100644 index 0000000..a879aa3 --- /dev/null +++ b/content/docs/automation-guidelines.md @@ -0,0 +1,59 @@ +# Automation Guidelines +These are guidelines to follow when using any form of automation on an account hosted on Programming.Dev ("programming.dev", "we", "us", "our") sites or in communities hosted on the site from federated instances. When using automation within communities on other instances make sure to follow their specific guidelines in addition to these if they exist. + +Failure to follow these guidelines may result in the account using the automation being banned from the instance. + +> Guidelines marked with (C) can be overriden by community mods while ones marked with (A) can be overriden by a instance admin if they give permission to you. + +## 1. General Guidelines +This are guidelines that aren't specific to one form of automation and should be followed regardless of the type of automation you are doing. + +### 1.1. Use Mentions as a Prefix +If the automation includes the usage of commands such as help, contact, remindme, generate, etc. it should use the mention of the account as the prefix as opposed to something such as ! or ?. This allows multiple automations to use the same commands without interfering with each other and ensures people are using the one they intended to use. + +### 1.2. No Trigger Overlap (C) +Do not make triggers fill the same niche as an already established one in the community you are posting in. For example if theres already a tldr bot posting tldrs for news posts there doesn't need to be a second one in the comments. (Can be overriden by the community mods) + +### 1.3. No Vote Manupulation +Automation should not be used to affect the voting system in the instance. The vote it will automatically do on the accounts own posts are fine but it should not be used to automatically vote on other people's posts or comments. + +## 2. Bots +These guidelines are specific to bot usage. This means accounts that exist solely to be automated to do things (tldr bot, remindme bot, reply bots, etc.) or that do specific things without any form of human intervention in the chain + +> Examples of things in this category: +> - Automatically posting things from an rss feed +> - Automatically generating tldrs of articles posted to a community +> - Automatically posting a link to an alternate frontend for a site when theres a link to the site + +### 2.1. Mark Bots as Bots +Bot accounts should be marked that they are a bot using the checkbox in the user settings + +### 2.2. Put Contact Info +The owner of the bot and some way to contact them must be in the bot’s bio + +### 2.3. Don't Spam (A) +Bots should not spam posts or comments. Automatically making posts or comments is fine but it should not drown out non automation content. When looking at the last 20 posts in a community, at least 75% should be human created (your specific bot should take less than the 25% for bots since other bots exist to share that with). There are some cases where having a community with mostly or only bot content makes sense (e.g. daily programming quotes, a challenge community that auto posts daily challenges from another site) and in that case you should reach out to an instance admin to get it approved (and you should be one of the mods for that community). When admin approved it still should not drown out human posts in the local feed in the instance. + +### 2.4. Allow Mods to Opt In (A) +Before using a bot in a community allow the mod to opt in to the bots. + +If a bot is deemed to be a well behaving bot that brings net good to the instance it can override this rule as long as it has been approved by an admin. If this happens mods should still be able to opt out of use of your bot. + +## 3. Tools +These guidelines are for tool usage for semi-automated actions or things that don't affect other users. + +> [!note] +> Examples of things in this category: +> - Scheduling posts +> - Monthly/Weekly repeated thread posts in a community +> - Auto marking posts with certain keywords as read for you (this one is more automated but only affects your own account) + +### 3.1. Mark That You Use Automation +As some software doesn't have this built in currently you can just put the information in your bio. This could be something such as "Some actions in this account are automated", "Cyborg account", or "Uses some automation tools". You could also put what specific things you use if you want but it is not required. If the software supports marking an account as a cyborg you can use that instead. + +## Do we Make Updates to these Automation Guidelines? +We may update the Automation Guidelines from time to time. When we do the date at the bottom of the page will change to indicate the date of the most recent changes. In addition, clicking on that date will bring you to the commit in the code repository that shows who edited it, and what was changed. If we make changes we may notify you by posting a notice of such changes in our meta community on the programming.dev site, in the updates account on the bytes.programming.dev site, in the news community in our discord server, and in the news community in our matrix server. We encourage you to review the Automation Guidelines periodically for any modifications. + +## Contact Us +If you have questions or concerns about these Automation Guidelines you should contact us at info@programming.dev. + diff --git a/content/docs/code-of-conduct.md b/content/docs/code-of-conduct.md new file mode 100644 index 0000000..221743b --- /dev/null +++ b/content/docs/code-of-conduct.md @@ -0,0 +1,52 @@ +# Code of Conduct +This code of conduct details the expected conduct of users using Programming.Dev ("programming.dev", "we", "us", "our") sites whether in communities local to our sites or on communities federated with it that is visible from our site. It also applies to other spaces we exist such as our discord server and matrix server. Users visible on our sites regardless of whether they are local or federated may be actioned upon if they do not follow this code of conduct. + +## Expected Behaviour +The following are expected behaviour for people interacting on our sites. + +- **Remember the human:** When interacting with other people on the site they should be interacted with as if they are a human, that is with respect and in a way that you would want to be treated. +- **Keep in mind software differences:** As this is the fediverse, not everyone is interacting from the same software or the same type of software (people in microblogs may join in to the threaded posts, etc.). Due to this not everyone has access to the same features we do so features should not be assumed to be standard (e.g. visible pronouns, markdown, votes). + +## Encouraged Behaviour +The following are encouraged behaviours for people interacting on our sites (that is not following it won't get you actioned upon but it is strongly recommended to follow). +- **Add Alt Text:** When posting an image add alt text to it in some form (if the software has it built in you can use that feature and if not you can provide it beside the image) + +## Unacceptable Behaviour +The following are not allowed in any of our sites and may result in you being actioned upon by moderators or admins. + +- **Doxing:** Do not reveal private information about other people without their explicit permission. +- **Ad Hominem:** When arguing with someone do not attack the person themselves, instead target the argument they are making. +- **Impersonation:** Do not impersonate other people regardless of whether they are in the community or not. +- **Unmarked Sensitive Content:** Do not post sensitive content (such as NSFW) without labelling it as such. If the software does not allow you to label it for people who don't want that content to be able to not see it, do not post the content. +- **Hate Speech:** Do not make remarks directed at sex, gender, ethnicity, orientation, disabilities, etc. +- **Vote Manipulation:** Attempts to manipulate the voting system is not tolerated including the usage of sock puppet accounts, target voting someone for who they are rather than their content, and mass downvoting posts. +- **Encouraging Harm:** Do not tell others to do things such as harm themselves or die. +- **Unwelcome Sexual Advances:** Do not sexually harass other people, regardless of whether they are in the community or the post is about them. +- **Illegal Content:** Do not post things that are illegal in the United States including: CSAM, Copyright Infringement, Lolicon. +- **Unrelated Content:** Do not post content that does not relate to a community in the community. For example if there is a community about posting cute pictures of puppies, do not post NSFW content. +- **Ban Evasion:** If you were banned from a community, do not attempt to evade said ban on another account. +- **Harassment:** Harassment whether in public spaces in the communities or in private messages is not tolerated. + +## Community Specific Guidelines +Some communities within one of our sites may have additional or more specific guidelines in the community description that are expected to be followed when interacting in that community. Failure to follow those guidelines may result in you being actioned upon by moderators. + +## Automation Guidelines +If you use any form of automation on your accounts you must abide by our [Automation Guidelines](https://legal.programming.dev/docs/automation-guidelines). + +## Community Guidelines +If you manage a community on our sites you must abide by our [Community Guidelines](https://legal.programming.dev/docs/community-guidelines). + +## Moderator Guidelines +If you are a moderator for our sites or for a community on our sites you must abide by our [Moderator Guidelines](https://legal.programming.dev/docs/moderator-guidelines). + +## Admin Guidelines +If you are an admin for our sites you must abide by our [Admin Guidelines](https://legal.programming.dev/docs/admin-guidelines). + +## Reporting +When you see someone not behaving according to our code of conduct, if theres a report button built into the software (which should be most software we host) you can report them for the community team in charge of that software to be able to deal with it. If theres no report button email info@programming.dev with the report information. + +## Do we Make Updates to this Code of Conduct? +We may update the Code of Conduct from time to time. When we do the date at the bottom of the page will change to indicate the date of the most recent changes. In addition, clicking on that date will bring you to the commit in the code repository that shows who edited it, and what was changed. If we make changes we may notify you by posting a notice of such changes or by sending you a notification. We encourage you to review the Code of Conduct periodically for any modifications. + +## Contact Us +If you have questions or concerns about this Code of Conduct you should contact us at info@programming.dev. diff --git a/content/docs/community-guidelines.md b/content/docs/community-guidelines.md new file mode 100644 index 0000000..6364ca0 --- /dev/null +++ b/content/docs/community-guidelines.md @@ -0,0 +1,12 @@ +# Community Guidelines +These Community Guidelines detail expected conduct and suggested actions when managing a community on Programming.Dev ("programming.dev", "we", "us", "our") sites. + +## 1. Community Info + +## 2. + +## Do we Make Updates to these Community Guidelines? +We may update the Community Guidelines from time to time. When we do the date at the bottom of the page will change to indicate the date of the most recent changes. In addition, clicking on that date will bring you to the commit in the code repository that shows who edited it, and what was changed. If we make changes we may notify you by posting a notice of such changes in our meta community on the programming.dev site, in the updates account on the bytes.programming.dev site, in the news community in our discord server, and in the news community in our matrix server. We encourage you to review the Community Guidelines periodically for any modifications. + +## Contact Us +If you have questions or concerns about these Community Guidelines you should contact us at info@programming.dev. diff --git a/content/docs/contributing-guidelines.md b/content/docs/contributing-guidelines.md new file mode 100644 index 0000000..e69de29 diff --git a/content/docs/cookie-policy.md b/content/docs/cookie-policy.md new file mode 100644 index 0000000..416a634 --- /dev/null +++ b/content/docs/cookie-policy.md @@ -0,0 +1,7 @@ +# Cookie Policy + +## Do we Make Updates to this Cookie Policy? +We may update the Cookie Policy from time to time. When we do, we will change the "Last Updated" date and author at the top of the page to indicate the date and author of the most recent changes. If we make changes we may notify you by posting a notice of such changes or by sending you a notification. We encourage you to review the Cookie Policy periodically for any modifications. + +## Contact Us +If you have questions or concerns about this Cookie Policy you should contact us at info@programming.dev. diff --git a/content/docs/data-retention-policy.md b/content/docs/data-retention-policy.md new file mode 100644 index 0000000..e69de29 diff --git a/content/docs/defederation-policy.md b/content/docs/defederation-policy.md new file mode 100644 index 0000000..95044c1 --- /dev/null +++ b/content/docs/defederation-policy.md @@ -0,0 +1,45 @@ +# 🌍 Defederation Policy +This document details how Programming.Dev ("programming.dev", "we", "us", "our") choose to defederate with other instances. If an instance wishes to be federated and thus have their content show on our sites they must abide by the policy and ensure they do not do one of the actions in the how an instance gets defederated section. + +## What is Defederation? +Our sites are federated with other instances. Instances are essentially sites but that are instances of federated software. This means that content posted on our sites is visible from other sites and we get content from other sites to interact with on our sites. Someone in a federated forum about cars may browse programming posts on their cars site and comment from there and we may do the same to them. + +Defederating from a instance: +- Makes users from our sites not be able to see things such as posts and comments from users on that instance. +- Makes users from that instance no longer be able to interact with communities or users on our sites in a way thats visible outside of their instance. + +## How does an instance get defederated? +- Instances may be defederated if they break our [Code of Conduct](https://legal.programming.dev/docs/code-of-conduct) whether though encouraging something we disallow or not moderating users that break it. +- Instances that have no active administrators may be defederated. +- Instances that have a lack of security that is not addressed and that puts our users at risk may be defederated. This includes things like having a sign up process that does not stop bots from mass creating accounts. +- Instances that have defederated from us may be defederated to prevent one way conversations where we get content from the other instance but users commenting on that content get no response. + +## Defederated Instances +This is a list of all of the instances we have currently defederated and the reasoning for them: + +Forums & Link Aggregators +``` +burggit.moe - Lolicon, Shotacon, & Ignoring DMCA requests +hexbear.net - Not on allowlist +kbin.cafe - CSAM +mujico.org - Racism +rqd2.net - Pedophilia, Zoophilia, & Biastophilia +``` + +Microblogs +``` +13bells.com - Hate Speech, Homophobia & Transphobia +1611.social - Hate Speech, Homophobia & Racism +4aem.com - Antisemitism +5dollah.click - Racism +more to be added here. Full list is visible on fediseer or our site federation tab if it exists +``` + +## Defederation Appeals +If you are the admin of an instance we have defederated, you wish to reverse the defederation, and you follow our [Code of Conduct](https://legal.programming.dev/docs/code-of-conduct) contact us as info@programming.dev. + +## Are Updates Made to this Defederation Policy? +We may update the Defederation Policy from time to time. When we do the date at the bottom of the page will change to indicate the date of the most recent changes. In addition, clicking on that date will bring you to the commit in the code repository that shows who edited it, and what was changed. If we make changes we may notify you by posting a notice of such changes in our meta community on the programming.dev site, in the updates account on the bytes.programming.dev site, in our blog on the stacks.programming.dev site, in the news community in our discord server, and in the news community in our matrix server. We encourage you to review the Defederation Policy periodically for any modifications. + +## Contact Us +If you have questions or concerns about this Defederation Policy you should contact us at info@programming.dev. diff --git a/content/docs/donation-policy.md b/content/docs/donation-policy.md new file mode 100644 index 0000000..b3e6403 --- /dev/null +++ b/content/docs/donation-policy.md @@ -0,0 +1,31 @@ +# ❤️ Donation Policy +This is a policy that describes how Programming.Dev ("programming.dev", "we", "us", "our") handles and spends donations made towards us. + +## How are Donations Made? +Donations are currently made using [snowe's github sponsors page](https://github.com/sponsors/snowe2010/). If you get another place to donate that is not this it is fake and should be reported to us. + +## How are Donations Spent? +Donations are spent on things relating to our sites. This includes things such as server costs, infrastructure costs, tool costs, and payment for work done relating to it. + +## Who is Considered a Donator? +Donators are people who have at one point made a donation towards us regardless on whether they are currently doing a monthly donation, did one in the past, or did a one time donation. + +## Donation Perks +We offer perks towards donators that have at one point made a donation towards us. These are the current perks donators get: +- A donator role on our discord server. +- An account on our linkstack site https://me.programming.dev for sharing links related to you in a page. + +## Donation Perk Terms +By donating to programming.dev you acknowledge and agree to the following terms: +- **Display Proof:** To get access to a perk you must be able to prove that you are the one that made the donation. +- **Account Requirement:** Access to a perk requires an account on the platform the perk is on. For example to get a discord role you need a discord account. +- **Request Perks:** To get a perk you need to request it from a community team admin in charge of the software the perk is on or from our contact email at info@programming.dev. +- **Refund Policy:** Donations are generally non refundable. If a perk is removed or edited refunds will not be given. +- **Modification of Perks:** Perks may be modified at any time to change details about a perk, add new perks, or remove existing perks. They are privileges and do not constitute a legal right or entitlement. +- **Perk Removal:** Users may have perks taken away from them if they abuse the perk (as in use it in a way it was not intended) or break our [Code of Conduct](https://github.com/programming-dot-dev/p.d-legal/blob/main/CODE-OF-CONDUCT.md). + +## Are Updates Made to this Donation Policy? +We may update the Donation Policy from time to time. When we do the date at the bottom of the page will change to indicate the date of the most recent changes. In addition, clicking on that date will bring you to the commit in the code repository that shows who edited it, and what was changed. If we make changes we may notify you by posting a notice of such changes in our meta community on the programming.dev site, in the updates account on the bytes.programming.dev site, in our blog on the stacks.programming.dev site, in the news community in our discord server, and in the news community in our matrix server. We encourage you to review the Donation Policy periodically for any modifications. + +## Contact Us +If you have questions or concerns about this Donation Policy you should contact us at info@programming.dev. diff --git a/content/docs/moderator-guidelines.md b/content/docs/moderator-guidelines.md new file mode 100644 index 0000000..be5d005 --- /dev/null +++ b/content/docs/moderator-guidelines.md @@ -0,0 +1,8 @@ +# Moderator Guidelines +These moderator guidelines detail expected conduct when moderating a community in one of the Programming.Dev ("programming.dev", "we", "us", "our") sites. + +## Do we Make Updates to these Moderator Guidelines? +We may update the Moderator Guidelines from time to time. When we do the date at the bottom of the page will change to indicate the date of the most recent changes. In addition, clicking on that date will bring you to the commit in the code repository that shows who edited it, and what was changed. If we make changes we may notify you by posting a notice of such changes in our meta community on the programming.dev site, in the updates account on the bytes.programming.dev site, in the news community in our discord server, and in the news community in our matrix server. We encourage you to review the Moderator Guidelines periodically for any modifications. + +## Contact Us +If you have questions or concerns about these Moderator Guidelines you should contact us at info@programming.dev. diff --git a/content/docs/privacy-policy.md b/content/docs/privacy-policy.md new file mode 100644 index 0000000..d7e2e61 --- /dev/null +++ b/content/docs/privacy-policy.md @@ -0,0 +1,71 @@ +# Privacy Policy +This privacy policy describes how Programming.Dev ("programming.dev", "we", "us", "our") collects, protects and uses information provided to us when you use our services including: +- Our websites such as programming.dev or bytes.programming.dev. +- APIs for our websites. +- Any other place we collect information from you and link this Privacy Policy. + +By joining and contributing to our services, you acknowledge that it is running on early release software. Although we take reasonable precautions to maintain the security of personal data provided to us we cannot guarantee that the software is free from defect that will expose any or all of that personal data. + +If you do not agree with all of our policies and practices, do not use our services. If you have any questions or concerns, contact us at info@programming.dev. + +## Site Usage by Children: +All of our services are directed towards people who are at least 16 years old. We do not knowingly collect personal information from people under the age of 16. If you are under the age of 16, please do not use our services. If we learn that personal information from people who are less than 16 years old has been collected, we will deactivate the account and take reasonable measures to delete the data from our records. + +## What do we use Your Information for? +Any information we collect from you may be used in the following ways: + +- To provide the core functionality of our services such as being able to comment on other people's posts or subscribing to communities when you are logged in. +- To aid in moderation of our services, for example to detect vote manipulation. +- To send you information, notifications about other people interacting with your content or sending you messages, or notifications for new posts created, if you opt in to any of these options in the settings. We may also use it to respond to you about inquiries, and/or other requests or questions. + +## What Information do we Collect? +**Account/Profile Information:** + - When creating an account on one of our services you may be asked to enter in a username and password. You may also enter additional information into optional fields such as: email, display name, profile picture, banner image, matrix ID, location, birthday, language, and biography. + - Currently (as of February 10, 2024), all of the optional fields are always listed publicly; your password and email is kept private. + +**Service Provided User Actions:** +- On any of our services, when performing an action the date and time (during when the action is taken) is recorded in addition to saving the content and any media attachments (pictures and/or videos) alongside the performed action. All of this information is publicly available due to the nature of federation which uses the [ActivityPub protocol](https://en.wikipedia.org/wiki/ActivityPub). The actions made by users of our services is sent to other instances using the ActivityPub protocol and then stored on their servers so that they can display the actions correctly on their instances. +- Actions in the context of our provided services and Privacy Policy may include (not exhaustive): + 1. Creating/editing a post or comment. + 2. Voting/reacting on a post or comment. + 3. Subscribing to a community or magazine. + +**Direct Messages:** +- All direct messages sent are unencrypted and may be delivered to other servers if the user you are sending a message to is on a service other than one provided by us. We make a good faith effort to limit the access to direct messages to only authorized persons but other servers may fail to do so, so it is important to review who and what service you are sending messages to. Please keep in mind that operators of our services and any receiving services may view direct messages and that recipients may screenshot, copy, or otherwise re-share them so it is recommended to not share any sensitive information. + +**IPs and Other Metadata:** +- When you log in, we may record the IP address you logged in from, the time and date you logged in at, as well as the name of your browser application. We also have server logs which include the IP address of every request to our server. +- Image embedded metadata [(Exif data)](https://en.wikipedia.org/wiki/Exif), on images hosted on our services are scrubbed/erased. +- Your IP address and email remains private to our services. However, due to the nature of federated services, all of your engagement (profile, posts, comments, messages, votes, etc.) on our services should be considered public and you are responsible for taking appropriate precautions in how you interact with our services. It is highly recommended that you do not share any publicly identifying information on our sites, products, or services. + +## How do we Protect Your Information? +We implement a variety of security measures to maintain the safety of your personal information when you enter, submit, or access your personal information. Among other things, your browser session, as well as the traffic between your applications and the API, are secured with SSL, and your password is hashed using a strong one-way algorithm. You may also enable two factor authentication to further protect your account. + +## What is our Data Retention Policy? +We will make a good faith effort to: +- Retain server logs containing the IP address of all requests to this server, in so far as such logs are kept, no more than 1 day. +- Retain the IP addresses and name of your browser application associated with logins for no more than 1 day. + +You may irreversibly delete your account at any time. However, this does not guarantee all instances will be notified or respect the deletion of your public data. + +## Do we use Cookies? +We use cookies for specific functionalities, which includes Cloudflare clearance and JWT (JSON Web Token) authentication purposes. +- Cloudflare clearance: Cookies provided by Cloudflare to store the proof of passing a Cloudflare challenge. +- JWT: A token to allow you to access and interact with our services after logging in. + +These cookies do not store personally identifiable information and are necessary for the proper functioning of our services. By continuing to use our services, you consent to the use of these essential cookies. + +Please note that you can manage or disable cookies through your browser settings. However, disabling these essential cookies may impact the functionality and security of services. + +## Do we Disclose Any Information to Outside Parties? +We do not sell, trade, or transfer your personal information to outside parties. This does not include trusted third parties who assist us in operating our services, so long as those parties agree to keep this information confidential. + +Your public content may be downloaded by other servers using the [ActivityPub protocol](https://en.wikipedia.org/wiki/ActivityPub), as well as direct messages to the servers of the recipients. + +When you log in to your account on a service not provided by us, it may access your public information as well as password when logging in. + +## Do we Make Updates to This Privacy Policy? +We may update this privacy policy from time to time. When we do, we will change the "Last Updated" date and author at the top of the page to indicate the date and author of the most recent changes. If we make changes we may notify you by posting a notice of such changes or by sending you a notification. We encourage you to review this Privacy Policy periodically for any modifications. + +## Contact Us +If you have questions or concerns about this Privacy Policy you should contact us at info@programming.dev. diff --git a/content/docs/terms-of-service.md b/content/docs/terms-of-service.md new file mode 100644 index 0000000..447f077 --- /dev/null +++ b/content/docs/terms-of-service.md @@ -0,0 +1,7 @@ +# Terms of Service + +## Do we Make Updates to this Terms of Service? +We may update the Terms of Service from time to time. When we do, we will change the "Last Updated" date and author at the top of the page to indicate the date and author of the most recent changes. If we make changes we may notify you by posting a notice of such changes or by sending you a notification. We encourage you to review the Terms of Service periodically for any modifications. + +## Contact Us +If you have questions or concerns about this Terms of Service you should contact us at info@programming.dev. diff --git a/content/docs/test/test.md b/content/docs/test/test.md new file mode 100644 index 0000000..519beaf --- /dev/null +++ b/content/docs/test/test.md @@ -0,0 +1,7 @@ +--- +BookMenuBundle: '/menu/test' +--- + +Test 2A +ASFASF +ASFAISHFIUASF \ No newline at end of file diff --git a/content/menu/_index.md b/content/menu/_index.md new file mode 100644 index 0000000..99a8be7 --- /dev/null +++ b/content/menu/_index.md @@ -0,0 +1,19 @@ +--- +headless: true +--- + +**Documents** +- [🛠️ Admin Guidelines]({{< relref "/docs/admin-guidelines" >}}) +- [🤖 Automation Guidelines]({{< relref "/docs/automation-guidelines" >}}) +- [🤝 Code of Conduct]({{< relref "/docs/code-of-conduct" >}}) +- [🪴 Community Guidelines]({{< relref "/docs/community-guidelines" >}}) +- [🪲 Contributing Guidelines]({{< relref "/docs/contributing-guidelines" >}}) +- [🍪 Cookie Policy]({{< relref "/docs/cookie-policy" >}}) +- [📘 Data Retention Policy]({{< relref "/docs/data-retention-policy" >}}) +- [🌍 Defederation Policy]({{< relref "/docs/defederation-policy" >}}) +- [❤️ Donation Policy]({{< relref "/docs/donation-policy" >}}) +- [🏡 Moderator Guidelines]({{< relref "/docs/moderator-guidelines" >}}) +- [🔒 Privacy Policy]({{< relref "/docs/privacy-policy" >}}) +- [📜 Terms of Service]({{< relref "/docs/terms-of-service" >}}) +- [A]({{< relref "/docs/test/test" >}}) +
diff --git a/content/menu/test/_index.md b/content/menu/test/_index.md new file mode 100644 index 0000000..c34fcfc --- /dev/null +++ b/content/menu/test/_index.md @@ -0,0 +1,14 @@ +--- +headless: true +--- + +**Documents** +- [🛠️ Admin Guidelines]({{< relref "/docs/privacy-policy" >}}) +- [🤖 Automation Guidelines]({{< relref "/docs/automation-guidelines" >}}) +- [🤝 Code of Conduct]({{< relref "/docs/code-of-conduct" >}}) +- [🪴 Community Guidelines]({{< relref "/docs/community-guidelines" >}}) +- [🪲 Contributing Guidelines]({{< relref "/docs/contributing-guidelines" >}}) +- [🍪 Cookie Policy]({{< relref "/docs/cookie-policy" >}}) +- [📘 Data Retention Policy]({{< relref "/docs/data-retention-policy" >}}) +- [A]({{< relref "/docs/test/test" >}}) +
diff --git a/hugo.yaml b/hugo.yaml new file mode 100644 index 0000000..c106f3d --- /dev/null +++ b/hugo.yaml @@ -0,0 +1,29 @@ +baseURL: https://example.com/ +title: P.D Legal +theme: hugo-book + +enableGitInfo: true + +languages: + en: + languageName: English + contentDir: content + weight: 1 + +menu: + # before: [] + after: + - name: "Source" + url: "https://github.com/programming-dot-dev/p.d-legal" + weight: 10 + - name: "Links" + url: "https://me.programming.dev" + weight: 100 + +params: + BookTheme: 'auto' + BookToC: true + BookLogo: 'logo.png' + BookFavicon: 'logo.png' + BookMenuBundle: /menu + BookRepo: https://github.com/programming-dot-dev/p.d-legal diff --git a/layouts/partials/docs/menu-page-bundle.html b/layouts/partials/docs/menu-page-bundle.html new file mode 100644 index 0000000..0bd0278 --- /dev/null +++ b/layouts/partials/docs/menu-page-bundle.html @@ -0,0 +1,4 @@ +{{ with .Site.GetPage .Page.Params.BookMenuBundle }} + {{- $href := printf "href=\"%s\"" $.RelPermalink -}} + {{- replace .Content $href (print $href "class=active") | safeHTML -}} +{{ end }} diff --git a/layouts/partials/docs/menu.html b/layouts/partials/docs/menu.html new file mode 100644 index 0000000..2c3bef5 --- /dev/null +++ b/layouts/partials/docs/menu.html @@ -0,0 +1,25 @@ + + + +{{ $script := resources.Get "menu-reset.js" | resources.Minify }} +{{ with $script.Content }} + +{{ end }} diff --git a/static/logo.png b/static/logo.png new file mode 100755 index 0000000000000000000000000000000000000000..33cb5afa44693eda36f98c10c92b70d33617fbe7 GIT binary patch literal 55288 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 literal 0 HcmV?d00001 diff --git a/themes/hugo-book/.github/workflows/main.yml b/themes/hugo-book/.github/workflows/main.yml new file mode 100644 index 0000000..86ffb38 --- /dev/null +++ b/themes/hugo-book/.github/workflows/main.yml @@ -0,0 +1,34 @@ +name: Build with Hugo + +on: [push, pull_request] + +jobs: + build: + runs-on: ubuntu-latest + strategy: + matrix: + hugo-version: + - 'latest' + - '0.79.0' + steps: + - uses: actions/checkout@v4 + with: + submodules: true # Fetch Hugo themes (true OR recursive) + fetch-depth: 0 # Fetch all history for .GitInfo and .Lastmod + + - name: Setup Hugo + uses: peaceiris/actions-hugo@v2 + with: + hugo-version: ${{ matrix.hugo-version }} + extended: true + + - name: Run Hugo + working-directory: exampleSite + run: hugo --themesDir ../.. + + # - name: Deploy + # uses: peaceiris/actions-gh-pages@v3 + # with: + # github_token: ${{ secrets.GITHUB_TOKEN }} + # publish_dir: ./public + diff --git a/themes/hugo-book/.gitignore b/themes/hugo-book/.gitignore new file mode 100644 index 0000000..5944200 --- /dev/null +++ b/themes/hugo-book/.gitignore @@ -0,0 +1,4 @@ +public/ +exampleSite/public/ +.DS_Store +.hugo_build.lock diff --git a/themes/hugo-book/LICENSE b/themes/hugo-book/LICENSE new file mode 100644 index 0000000..e7a669a --- /dev/null +++ b/themes/hugo-book/LICENSE @@ -0,0 +1,20 @@ +The MIT License (MIT) + +Copyright (c) 2018 Alex Shpak + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of +the Software, and to permit persons to whom the Software is furnished to do so, +subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR +COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/themes/hugo-book/README.md b/themes/hugo-book/README.md new file mode 100644 index 0000000..7e159a4 --- /dev/null +++ b/themes/hugo-book/README.md @@ -0,0 +1,358 @@ +# Hugo Book Theme + +[![Hugo](https://img.shields.io/badge/hugo-0.79-blue.svg)](https://gohugo.io) +[![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg)](LICENSE) +![Build with Hugo](https://github.com/alex-shpak/hugo-book/workflows/Build%20with%20Hugo/badge.svg) + +### [Hugo](https://gohugo.io) documentation theme as simple as plain book + +![Screenshot](https://github.com/alex-shpak/hugo-book/blob/master/images/screenshot.png) + +- [Features](#features) +- [Requirements](#requirements) +- [Installation](#installation) +- [Menu](#menu) +- [Blog](#blog) +- [Configuration](#configuration) +- [Shortcodes](#shortcodes) +- [Versioning](#versioning) +- [Contributing](#contributing) + +## Features + +- Clean simple design +- Light and Mobile-Friendly +- Multi-language support +- Customisable +- Zero initial configuration +- Handy shortcodes +- Comments support +- Simple blog and taxonomy +- Primary features work without JavaScript +- Dark Mode + +## Requirements + +- Hugo 0.79 or higher +- Hugo extended version, read more [here](https://gohugo.io/news/0.48-relnotes/) + +## Installation + +### Install as git submodule +Navigate to your hugo project root and run: + +``` +git submodule add https://github.com/alex-shpak/hugo-book themes/hugo-book +``` + +Then run hugo (or set `theme = "hugo-book"`/`theme: hugo-book` in configuration file) + +``` +hugo server --minify --theme hugo-book +``` + +### Install as hugo module + +You can also add this theme as a Hugo module instead of a git submodule. + +Start with initializing hugo modules, if not done yet: +``` +hugo mod init github.com/repo/path +``` + +Navigate to your hugo project root and add [module] section to your `config.toml`: + +```toml +[module] +[[module.imports]] +path = 'github.com/alex-shpak/hugo-book' +``` + +Then, to load/update the theme module and run hugo: + +```sh +hugo mod get -u +hugo server --minify +``` + +### Creating site from scratch + +Below is an example on how to create a new site from scratch: + +```sh +hugo new site mydocs; cd mydocs +git init +git submodule add https://github.com/alex-shpak/hugo-book themes/hugo-book +cp -R themes/hugo-book/exampleSite/content.en/* ./content +``` + +```sh +hugo server --minify --theme hugo-book +``` + +## Menu + +### File tree menu (default) + +By default, the theme will render pages from the `content/docs` section as a menu in a tree structure. +You can set `title` and `weight` in the front matter of pages to adjust the order and titles in the menu. + +### Leaf bundle menu (Deprecated, to be removed in June 2022) + +You can also use leaf bundle and the content of its `index.md` file as menu. +Given you have the following file structure: + +``` +├── content +│ ├── docs +│ │ ├── page-one.md +│ │ └── page-two.md +│ └── posts +│ ├── post-one.md +│ └── post-two.md +``` + +Create a file `content/menu/index.md` with the content: + +```md ++++ +headless = true ++++ + +- [Book Example]({{< relref "/docs/" >}}) + - [Page One]({{< relref "/docs/page-one" >}}) + - [Page Two]({{< relref "/docs/page-two" >}}) +- [Blog]({{< relref "/posts" >}}) +``` + +And Enable it by setting `BookMenuBundle: /menu` in Site configuration. + +- [Example menu](https://github.com/alex-shpak/hugo-book/blob/master/exampleSite/content.en/menu/index.md) +- [Example config file](https://github.com/alex-shpak/hugo-book/blob/master/exampleSite/config.yaml) +- [Leaf bundles](https://gohugo.io/content-management/page-bundles/) + +## Blog + +A simple blog is supported in the section `posts`. +A blog is not the primary usecase of this theme, so it has only minimal features. + +## Configuration + +### Site Configuration + +There are a few configuration options that you can add to your `config.toml` file. +You can also see the `yaml` example [here](https://github.com/alex-shpak/hugo-book/blob/master/exampleSite/config.yaml). + +```toml +# (Optional) Set Google Analytics if you use it to track your website. +# Always put it on the top of the configuration file, otherwise it won't work +googleAnalytics = "UA-XXXXXXXXX-X" + +# (Optional) If you provide a Disqus shortname, comments will be enabled on +# all pages. +disqusShortname = "my-site" + +# (Optional) Set this to true if you use capital letters in file names +disablePathToLower = true + +# (Optional) Set this to true to enable 'Last Modified by' date and git author +# information on 'doc' type pages. +enableGitInfo = true + +# (Optional) Theme is intended for documentation use, therefore it doesn't render taxonomy. +# You can remove related files with config below +disableKinds = ['taxonomy', 'taxonomyTerm'] + +[params] + # (Optional, default light) Sets color theme: light, dark or auto. + # Theme 'auto' switches between dark and light modes based on browser/os preferences + BookTheme = 'light' + + # (Optional, default true) Controls table of contents visibility on right side of pages. + # Start and end levels can be controlled with markup.tableOfContents setting. + # You can also specify this parameter per page in front matter. + BookToC = true + + # (Optional, default none) Set the path to a logo for the book. If the logo is + # /static/logo.png then the path would be 'logo.png' + BookLogo = 'logo.png' + + # (Optional, default none) Set leaf bundle to render as side menu + # When not specified file structure and weights will be used + # Deprecated, to be removed in June 2022 + BookMenuBundle = '/menu' + + # (Optional, default docs) Specify section of content to render as menu + # You can also set value to "*" to render all sections to menu + BookSection = 'docs' + + # Set source repository location. + # Used for 'Last Modified' and 'Edit this page' links. + BookRepo = 'https://github.com/alex-shpak/hugo-book' + + # Specifies commit portion of the link to the page's last modified commit hash for 'doc' page + # type. + # Required if 'BookRepo' param is set. + # Value used to construct a URL consisting of BookRepo/BookCommitPath/ + # Github uses 'commit', Bitbucket uses 'commits' + BookCommitPath = 'commit' + + # Enable 'Edit this page' links for 'doc' page type. + # Disabled by default. Uncomment to enable. Requires 'BookRepo' param. + # Path must point to the site directory. + BookEditPath = 'edit/master/exampleSite' + + # (Optional, default January 2, 2006) Configure the date format used on the pages + # - In git information + # - In blog posts + BookDateFormat = 'Jan 2, 2006' + + # (Optional, default true) Enables search function with flexsearch, + # Index is built on fly, therefore it might slowdown your website. + # Configuration for indexing can be adjusted in i18n folder per language. + BookSearch = true + + # (Optional, default true) Enables comments template on pages + # By default partials/docs/comments.html includes Disqus template + # See https://gohugo.io/content-management/comments/#configure-disqus + # Can be overwritten by same param in page frontmatter + BookComments = true + + # /!\ This is an experimental feature, might be removed or changed at any time + # (Optional, experimental, default false) Enables portable links and link checks in markdown pages. + # Portable links meant to work with text editors and let you write markdown without {{< relref >}} shortcode + # Theme will print warning if page referenced in markdown does not exists. + BookPortableLinks = true + + # /!\ This is an experimental feature, might be removed or changed at any time + # (Optional, experimental, default false) Enables service worker that caches visited pages and resources for offline use. + BookServiceWorker = true +``` + +### Multi-Language Support + +Theme supports Hugo's [multilingual mode](https://gohugo.io/content-management/multilingual/), just follow configuration guide there. You can also tweak search indexing configuration per language in `i18n` folder. + +### Page Configuration + +You can specify additional params in the front matter of individual pages: + +```toml +# Set type to 'docs' if you want to render page outside of configured section or if you render section other than 'docs' +type = 'docs' + +# Set page weight to re-arrange items in file-tree menu (if BookMenuBundle not set) +weight = 10 + +# (Optional) Set to 'true' to mark page as flat section in file-tree menu (if BookMenuBundle not set) +bookFlatSection = false + +# (Optional) Set to hide nested sections or pages at that level. Works only with file-tree menu mode +bookCollapseSection = true + +# (Optional) Set true to hide page or section from side menu (if BookMenuBundle not set) +bookHidden = false + +# (Optional) Set 'false' to hide ToC from page +bookToC = true + +# (Optional) If you have enabled BookComments for the site, you can disable it for specific pages. +bookComments = true + +# (Optional) Set to 'false' to exclude page from search index. +bookSearchExclude = true + +# (Optional) Set explicit href attribute for this page in a menu (if BookMenuBundle not set) +bookHref = '' +``` + +### Partials + +There are layout partials available for you to easily override components of the theme in `layouts/partials/`. + +In addition to this, there are several empty partials you can override to easily add/inject code. + +| Empty Partial | Placement | +| -------------------------------------------------- | ------------------------------------------- | +| `layouts/partials/docs/inject/head.html` | Before closing `` tag | +| `layouts/partials/docs/inject/body.html` | Before closing `` tag | +| `layouts/partials/docs/inject/footer.html` | After page footer content | +| `layouts/partials/docs/inject/menu-before.html` | At the beginning of `