├── requirements.txt ├── .gitignore ├── .github └── workflows │ ├── ci.yml │ ├── update-all-themes.yml │ └── generate.yml ├── README.md ├── LICENSE ├── generate_docs.py └── .gitmodules /requirements.txt: -------------------------------------------------------------------------------- 1 | toml==0.10.2 -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | *.pyc 2 | .idea/ 3 | site/ 4 | env/ 5 | venv/ -------------------------------------------------------------------------------- /.github/workflows/ci.yml: -------------------------------------------------------------------------------- 1 | name: test 2 | on: 3 | push: 4 | branches: 5 | - master 6 | pull_request: 7 | 8 | 9 | jobs: 10 | generate-test: 11 | runs-on: ubuntu-latest 12 | steps: 13 | - name: Checkout latest 14 | uses: actions/checkout@master 15 | with: 16 | submodules: "recursive" 17 | - name: Setup Python 3 18 | uses: actions/setup-python@v2 19 | with: 20 | python-version: '3.10' 21 | - name: Install Python requirements 22 | run: pip install -r requirements.txt 23 | - name: Run the generator script 24 | run: python generate_docs.py site -------------------------------------------------------------------------------- /.github/workflows/update-all-themes.yml: -------------------------------------------------------------------------------- 1 | name: Update all themes 2 | 3 | on: 4 | workflow_dispatch: 5 | schedule: 6 | - cron: "51 5 * * 1" 7 | 8 | jobs: 9 | update-all-themes: 10 | runs-on: ubuntu-latest 11 | steps: 12 | - uses: actions/checkout@v4 13 | with: 14 | submodules: "recursive" 15 | - name: Update submodules 16 | run: "git submodule update --remote" 17 | - name: Commit, push and generate 18 | env: 19 | GH_TOKEN: ${{ github.token }} 20 | run: | 21 | git status 22 | if [[ `git status --short` ]]; then 23 | git config --global user.email "action@github.com" 24 | git config --global user.name "GitHub Action" 25 | git commit -am "Update all themes" 26 | git push 27 | gh workflow run generate.yml 28 | fi 29 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Zola themes 2 | 3 | All the community themes for Zola. 4 | 5 | ## Adding your theme 6 | 7 | Follow the guidelines on the [documentation](https://www.getzola.org/documentation/themes/creating-a-theme/). 8 | 9 | Once this is done, do a pull request to this repository adding your theme as a git submodule. 10 | 11 | Themes are updated semi-regularly and all themes in this repo will be featured on the themes page of the Zola site. 12 | 13 | ## Generating themes site 14 | 15 | Clone this repo and run `git submodule update --init --recursive`. 16 | 17 | You will need python3 and the requirements listed in `requirements.txt` installed. 18 | 19 | To generate the markdown pages: 20 | 21 | ```bash 22 | $ python generate_docs.py DESTINATION_FOLDER 23 | ``` 24 | 25 | Note that this will erase `DESTINATION_FOLDER` first so be careful. 26 | 27 | ## Updating all themes 28 | 29 | ```bash 30 | $ git submodule update --remote --merge 31 | ``` 32 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2017 Vincent Prouillet 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /.github/workflows/generate.yml: -------------------------------------------------------------------------------- 1 | on: 2 | push: 3 | branches: 4 | - master 5 | workflow_dispatch: 6 | 7 | name: Generate themes site 8 | 9 | jobs: 10 | generate: 11 | name: Generate the static themes site 12 | runs-on: ubuntu-latest 13 | steps: 14 | - name: Checkout latest 15 | uses: actions/checkout@master 16 | with: 17 | submodules: "recursive" 18 | - name: Setup Python 3 19 | uses: actions/setup-python@v2 20 | with: 21 | python-version: '3.8' 22 | - name: Install Python requirements 23 | run: pip install -r requirements.txt 24 | - name: Run the generator script 25 | run: python generate_docs.py site 26 | - uses: actions/upload-artifact@v4 27 | with: 28 | name: themes-directory 29 | path: site/* 30 | - name: Checkout zola repo 31 | uses: actions/checkout@v2 32 | with: 33 | repository: 'getzola/zola' 34 | path: 'zola' 35 | token: ${{ secrets.TOKEN }} 36 | - name: Copy updated themes site 37 | run: | 38 | cp -r site/* zola/docs/content/themes/ 39 | - name: Commit files 40 | run: | 41 | cd zola 42 | git config --local user.email "action@github.com" 43 | git config --local user.name "GitHub Action" 44 | git add docs/content/themes 45 | git commit -m "Update themes gallery" -a 46 | - name: Create pull request 47 | uses: peter-evans/create-pull-request@v3 48 | with: 49 | title: 'Update themes gallery' 50 | path: 'zola' 51 | token: ${{ secrets.TOKEN }} 52 | branch-suffix: 'timestamp' 53 | -------------------------------------------------------------------------------- /generate_docs.py: -------------------------------------------------------------------------------- 1 | import os 2 | import re 3 | import shutil 4 | import subprocess 5 | import sys 6 | 7 | import toml 8 | 9 | 10 | MD_ANCHOR_LINKS = r"\[(.+)\]\(#.+\)" 11 | 12 | def find_file(directory, filename): 13 | """Find a file in the given directory regardless of case.""" 14 | lower_filename = filename.lower() 15 | for file in os.listdir(directory): 16 | if file.lower() == lower_filename: 17 | return file # Return the correctly-cased filename 18 | return None # File not found 19 | 20 | def slugify(s): 21 | """ 22 | From: http://blog.dolphm.com/slugify-a-string-in-python/ 23 | 24 | Simplifies ugly strings into something URL-friendly. 25 | >>> print slugify("[Some] _ Article's Title--") 26 | some-articles-title 27 | """ 28 | s = s.lower() 29 | for c in [' ', '-', '.', '/']: 30 | s = s.replace(c, '_') 31 | s = re.sub('\W', '', s) 32 | s = s.replace('_', ' ') 33 | s = re.sub('\s+', ' ', s) 34 | s = s.strip() 35 | return s.replace(' ', '-') 36 | 37 | # Store errors to print them at the end. 38 | errors = [] 39 | 40 | class Theme(object): 41 | def __init__(self, name, path): 42 | print("Loading %s" % name) 43 | self.name = name 44 | self.path = path 45 | 46 | try: 47 | with open(os.path.join(self.path, "theme.toml")) as f: 48 | self.metadata = toml.load(f) 49 | except Exception as e: 50 | error_message = f"Theme '{self.name}' encountered a TOML parsing issue: {str(e)}" 51 | errors.append(error_message) 52 | self.metadata = None 53 | return # exit the constructor early 54 | 55 | 56 | with open(os.path.join(self.path, find_file(self.path, "README.md"))) as f: 57 | self.readme = f.read() 58 | self.readme = self.readme.replace("{{", "{{/*").replace("}}", "*/}}").replace("{%", "{%/*").replace("%}", "*/%}") 59 | self.readme = re.sub(MD_ANCHOR_LINKS, r"\1", self.readme) 60 | self.repository = self.get_repository_url() 61 | self.initial_commit_date, self.last_commit_date = self.get_commit_dates() 62 | 63 | def get_repository_url(self): 64 | command = "git -C {} remote -v".format(self.path) 65 | (_, git_remotes) = subprocess.getstatusoutput(command) 66 | cleaned = ( 67 | git_remotes 68 | .split("\n")[0] 69 | .split("\t")[1] 70 | .replace(" (fetch)", "") 71 | ) 72 | if cleaned.startswith("git@"): 73 | cleaned = cleaned.replace("git@github.com:", "https://github.com/").replace(".git", "") 74 | return cleaned 75 | 76 | def get_commit_dates(self): 77 | command = f'git -C {self.name} log --reverse --format=%aI' 78 | (_, date) = subprocess.getstatusoutput(command) 79 | dates = date.split("\n") 80 | 81 | # last, first 82 | return dates[0], dates[len(dates) - 1] 83 | 84 | def to_zola_content(self): 85 | """ 86 | Returns the page content for Zola 87 | """ 88 | return """ 89 | +++ 90 | title = "{title}" 91 | description = "{description}" 92 | template = "theme.html" 93 | date = {updated} 94 | 95 | [taxonomies] 96 | theme-tags = {tags} 97 | 98 | [extra] 99 | created = {created} 100 | updated = {updated} 101 | repository = "{repository}" 102 | homepage = "{homepage}" 103 | minimum_version = "{min_version}" 104 | license = "{license}" 105 | demo = "{demo}" 106 | 107 | [extra.author] 108 | name = "{author_name}" 109 | homepage = "{author_homepage}" 110 | +++ 111 | 112 | {readme} 113 | """.format( 114 | title=self.metadata["name"], 115 | description=self.metadata["description"], 116 | created=self.initial_commit_date, 117 | updated=self.last_commit_date, 118 | repository=self.repository, 119 | homepage=self.metadata.get("homepage", self.repository), 120 | min_version=self.metadata["min_version"], 121 | license=self.metadata["license"], 122 | tags=self.metadata.get("tags", "[]"), 123 | author_name=self.metadata["author"]["name"], 124 | author_homepage=self.metadata["author"].get("homepage", ""), 125 | demo=self.metadata.get("demo", ""), 126 | readme=self.readme, 127 | ) 128 | 129 | def to_zola_folder(self, container): 130 | """ 131 | Creates the page folder containing the screenshot and the info in 132 | content/themes 133 | """ 134 | page_dir = os.path.join(container, self.name) 135 | os.makedirs(page_dir) 136 | 137 | with open(os.path.join(page_dir, "index.md"), "w") as f: 138 | print("Writing theme info as zola content: {}".format(self.name)) 139 | f.write(self.to_zola_content()) 140 | 141 | shutil.copyfile( 142 | os.path.join(self.path, find_file(self.path, "screenshot.png")), 143 | os.path.join(page_dir, "screenshot.png"), 144 | ) 145 | 146 | 147 | def read_themes(): 148 | base = "./" 149 | themes = [] 150 | 151 | for item in sorted(os.listdir(base)): 152 | full_path = os.path.join(base, item) 153 | if item == "env" or item == "venv": 154 | continue 155 | # themes is the name i'm giving locally when building in this folder 156 | if item.startswith(".") or not os.path.isdir(full_path) or item == "themes": 157 | continue 158 | 159 | if find_file(full_path, "README.md") == None: 160 | error_message = f"Theme '{item}' is missing README.md." 161 | errors.append(error_message) 162 | continue 163 | 164 | if find_file(full_path, "screenshot.png") == None: 165 | error_message = f"Theme '{item}' is missing screenshot.png." 166 | errors.append(error_message) 167 | continue 168 | 169 | theme = Theme(item, full_path) 170 | 171 | # Check if metadata was successfully loaded. 172 | if theme.metadata is None: 173 | continue 174 | 175 | required_metadata = ['name'] 176 | metadata_check = [required for required in required_metadata if required not in theme.metadata] 177 | if len(metadata_check) > 0: 178 | error_message = f"Theme '{theme.name}' is missing required metadata: {', '.join(metadata_check)}." 179 | errors.append(error_message) 180 | continue 181 | 182 | themes.append(theme) 183 | 184 | return themes 185 | 186 | 187 | if __name__ == "__main__": 188 | if len(sys.argv) != 2: 189 | raise Exception("Missing destination folder as argument!") 190 | 191 | destination = sys.argv[1] 192 | all_themes = read_themes() 193 | 194 | # Delete everything first in this folder 195 | if os.path.exists(destination): 196 | shutil.rmtree(destination) 197 | os.makedirs(destination) 198 | 199 | with open(os.path.join(destination, "_index.md"), "w") as f: 200 | f.write(""" 201 | +++ 202 | template = "themes.html" 203 | sort_by = "date" 204 | +++ 205 | """) 206 | 207 | for t in all_themes: 208 | t.to_zola_folder(destination) 209 | 210 | # Display errors. 211 | if errors: 212 | print("\n\n" + "="*60) 213 | print("ERROR SUMMARY:") 214 | print("-"*60) 215 | for error in errors: 216 | print(error) 217 | print("-"*60) 218 | print("="*60 + "\n") 219 | 220 | # Print summary of themes processed. 221 | print(f"\nThemes successfully processed: {len(all_themes)}") 222 | print(f"Themes with errors: {len(errors)}") 223 | -------------------------------------------------------------------------------- /.gitmodules: -------------------------------------------------------------------------------- 1 | [submodule "hyde"] 2 | path = hyde 3 | url = https://github.com/getzola/hyde.git 4 | [submodule "after-dark"] 5 | path = after-dark 6 | url = https://github.com/getzola/after-dark.git 7 | [submodule "feather"] 8 | path = feather 9 | url = https://github.com/piedoom/feather.git 10 | branch = master 11 | [submodule "even"] 12 | path = even 13 | url = https://github.com/getzola/even.git 14 | [submodule "book"] 15 | path = book 16 | url = https://github.com/getzola/book.git 17 | [submodule "dinkleberg"] 18 | path = dinkleberg 19 | url = https://github.com/rust-br/dinkleberg.git 20 | [submodule "Ergo"] 21 | path = Ergo 22 | url = https://github.com/insipx/Ergo.git 23 | [submodule "zola-theme-hikari"] 24 | path = zola-theme-hikari 25 | url = https://github.com/waynee95/zola-theme-hikari.git 26 | [submodule "Zulma"] 27 | path = Zulma 28 | url = https://github.com/Worble/Zulma.git 29 | [submodule "hallo"] 30 | path = hallo 31 | url = https://github.com/flyingP0tat0/zola-hallo.git 32 | [submodule "sam"] 33 | path = sam 34 | url = https://github.com/janbaudisch/zola-sam.git 35 | [submodule "zerm"] 36 | path = zerm 37 | url = https://github.com/ejmg/zerm.git 38 | [submodule "hermit"] 39 | path = hermit 40 | url = https://github.com/VersBinarii/hermit_zola.git 41 | [submodule "slim"] 42 | path = slim 43 | url = https://github.com/jameshclrk/zola-slim.git 44 | [submodule "clean-blog"] 45 | path = clean-blog 46 | url = https://github.com/dave-tucker/zola-clean-blog.git 47 | [submodule "zola-pickles"] 48 | path = zola-pickles 49 | url = https://github.com/lukehsiao/zola-pickles.git 50 | [submodule "docsascode-theme"] 51 | path = docsascode-theme 52 | url = https://github.com/codeandmedia/zola_docsascode_theme.git 53 | [submodule "lightspeed"] 54 | path = lightspeed 55 | url = https://github.com/carpetscheme/lightspeed.git 56 | [submodule "zola-henry"] 57 | path = zola-henry 58 | url = https://github.com/sirodoht/zola-henry.git 59 | [submodule "zola.386"] 60 | path = zola.386 61 | url = https://github.com/lopes/zola.386.git 62 | [submodule "simple-dev-blog"] 63 | path = simple-dev-blog 64 | url = https://github.com/bennetthardwick/simple-dev-blog-zola-starter.git 65 | [submodule "anpu"] 66 | path = anpu 67 | url = https://github.com/zbrox/anpu-zola-theme.git 68 | [submodule "zola-paper"] 69 | path = zola-paper 70 | url = https://github.com/schoenenberg/zola-paper.git 71 | [submodule "float"] 72 | path = float 73 | url = https://gitlab.com/float-theme/float.git 74 | [submodule "solar-theme-zola"] 75 | path = solar-theme-zola 76 | url = https://github.com/hulufei/solar-theme-zola.git 77 | [submodule "codinfox-zola"] 78 | path = codinfox-zola 79 | url = https://github.com/svavs/codinfox-zola.git 80 | [submodule "particle"] 81 | path = particle 82 | url = https://github.com/svavs/particle-zola.git 83 | [submodule "DeepThought"] 84 | path = DeepThought 85 | url = https://github.com/RatanShreshtha/DeepThought.git 86 | [submodule "oceanic-zen"] 87 | path = oceanic-zen 88 | url = https://github.com/barlog-m/oceanic-zen.git 89 | branch = main 90 | [submodule "hephaestus"] 91 | path = hephaestus 92 | url = https://github.com/BConquest/hephaestus.git 93 | branch = main 94 | [submodule "emily"] 95 | path = emily 96 | url = https://github.com/kyoheiu/emily_zola_theme.git 97 | [submodule "anatole-zola"] 98 | path = anatole-zola 99 | url = https://github.com/longfangsong/anatole-zola.git 100 | [submodule "zola_easydocs_theme"] 101 | path = zola_easydocs_theme 102 | url = https://github.com/codeandmedia/zola_easydocs_theme.git 103 | [submodule "dose"] 104 | path = dose 105 | url = https://github.com/oltdaniel/dose.git 106 | [submodule "soapstone"] 107 | path = soapstone 108 | url = https://github.com/MattyRad/soapstone.git 109 | [submodule "ntun"] 110 | path = ntun 111 | url = https://github.com/Netoun/ntun.git 112 | [submodule "nasm-theme"] 113 | path = nasm-theme 114 | url = https://github.com/lucasnasm/nasm-theme.git 115 | [submodule "adidoks"] 116 | path = adidoks 117 | url = https://github.com/aaranxu/adidoks.git 118 | [submodule "tale-zola"] 119 | path = tale-zola 120 | url = https://github.com/aaranxu/tale-zola.git 121 | [submodule "papaya"] 122 | path = papaya 123 | url = https://github.com/justint/papaya.git 124 | [submodule "karzok"] 125 | path = karzok 126 | url = https://github.com/kogeletey/karzok.git 127 | [submodule "resume"] 128 | path = resume 129 | url = https://github.com/AlongWY/zola-resume.git 130 | [submodule "blow"] 131 | path = blow 132 | url = https://github.com/tchartron/blow.git 133 | branch = main 134 | [submodule "hook"] 135 | path = hook 136 | url = https://github.com/InputUsername/zola-hook.git 137 | [submodule "serene"] 138 | path = serene 139 | url = https://github.com/isunjn/serene.git 140 | [submodule "zolastrap"] 141 | path = zolastrap 142 | url = https://github.com/marcodpt/zolastrap.git 143 | [submodule "kodama-theme"] 144 | path = kodama-theme 145 | url = https://github.com/adfaure/kodama-theme.git 146 | [submodule "zhuia"] 147 | path = zhuia 148 | url = https://github.com/gicrisf/zhuia.git 149 | [submodule "abridge"] 150 | path = abridge 151 | url = https://github.com/Jieiku/abridge.git 152 | [submodule "seje2"] 153 | path = seje2 154 | url = https://github.com/eatradish/seje2.git 155 | [submodule "zola-theme-course"] 156 | path = zola-theme-course 157 | url = https://github.com/elegaanz/zola-theme-course.git 158 | [submodule "kangae"] 159 | path = kangae 160 | url = https://github.com/ayushnix/kangae.git 161 | [submodule "archie-zola"] 162 | path = archie-zola 163 | url = https://github.com/XXXMrG/archie-zola.git 164 | [submodule "apollo"] 165 | path = apollo 166 | url = https://github.com/not-matthias/apollo.git 167 | [submodule "zola-theme-terminimal"] 168 | path = zola-theme-terminimal 169 | url = https://github.com/pawroman/zola-theme-terminimal.git 170 | [submodule "mont"] 171 | path = mont 172 | url = https://github.com/kyoheiu/mont.git 173 | [submodule "tilde"] 174 | path = tilde 175 | url = https://git.sr.ht/~savoy/tilde 176 | [submodule "zplit"] 177 | path = zplit 178 | url = https://github.com/gicrisf/zplit.git 179 | [submodule "shadharon"] 180 | path = shadharon 181 | url = https://github.com/syedzayyan/shadharon.git 182 | [submodule "boring"] 183 | path = boring 184 | url = https://github.com/ssiyad/boring.git 185 | [submodule "toucan"] 186 | path = toucan 187 | url = https://git.42l.fr/HugoTrentesaux/toucan.git 188 | [submodule "albatros"] 189 | path = albatros 190 | url = https://git.42l.fr/HugoTrentesaux/Albatros.git 191 | [submodule "inky"] 192 | path = inky 193 | url = https://github.com/jimmyff/zola-inky.git 194 | [submodule "seagull"] 195 | path = seagull 196 | url = https://git.42l.fr/HugoTrentesaux/seagull.git 197 | [submodule "HayFlow"] 198 | path = HayFlow 199 | url = https://gitlab.com/cyril-marpaud/hayflow.git 200 | [submodule "tabi"] 201 | path = tabi 202 | url = https://github.com/welpo/tabi.git 203 | [submodule "bearblog"] 204 | path = bearblog 205 | url = https://codeberg.org/alanpearce/zola-bearblog.git 206 | [submodule "andromeda"] 207 | path = andromeda 208 | url = https://github.com/Pixadus/andromeda-theme.git 209 | [submodule "just-the-docs"] 210 | path = just-the-docs 211 | url = https://github.com/jakeswenson/zola-just-the-docs.git 212 | [submodule "anemone"] 213 | path = anemone 214 | url = https://github.com/Speyll/anemone.git 215 | [submodule "zolarwind"] 216 | path = zolarwind 217 | url = https://github.com/thomasweitzel/zolarwind.git 218 | [submodule "tranquil"] 219 | path = tranquil 220 | url = https://github.com/TeaDrinkingProgrammer/tranquil.git 221 | [submodule "kita"] 222 | path = kita 223 | url = https://github.com/st1020/kita.git 224 | [submodule "polymathic"] 225 | path = polymathic 226 | url = https://github.com/anvlkv/polymathic.git 227 | [submodule "duckquill"] 228 | path = duckquill 229 | url = https://codeberg.org/daudix/duckquill.git 230 | [submodule "mabuya"] 231 | path = mabuya 232 | url = https://github.com/semanticdata/mabuya.git 233 | [submodule "minimal-dark"] 234 | path = minimal-dark 235 | url = https://github.com/kuznetsov17/minimal-dark.git 236 | [submodule "zola-minimal"] 237 | path = zola-minimal 238 | url = https://github.com/semanticdata/zola-minimal.git 239 | [submodule "halve-z"] 240 | path = halve-z 241 | url = https://github.com/charlesrocket/halve-z.git 242 | [submodule "pico"] 243 | path = pico 244 | url = https://github.com/kuznetsov17/pico.git 245 | [submodule "academic-workshop"] 246 | path = academic-workshop 247 | url = https://github.com/aterenin/academic-workshop.git 248 | [submodule "academic-paper"] 249 | path = academic-paper 250 | url = https://github.com/aterenin/academic-paper.git 251 | [submodule "zallery"] 252 | path = zallery 253 | url = https://github.com/gamingrobot/zallery.git 254 | [submodule "coco"] 255 | path = coco 256 | url = https://github.com/es-romo/coco.git 257 | [submodule "zola-hacker"] 258 | path = zola-hacker 259 | url = https://github.com/en9inerd/zola-hacker 260 | [submodule "zola-grayscale"] 261 | path = zola-grayscale 262 | url = https://github.com/mattimustang/zola-grayscale.git 263 | [submodule "neovim-theme"] 264 | path = neovim-theme 265 | url = git@github.com:Super-Botman/neovim-theme.git 266 | [submodule "project-portfolio"] 267 | path = project-portfolio 268 | url = git@github.com:awinterstein/zola-theme-project-portfolio.git 269 | [submodule "zluinav"] 270 | path = zluinav 271 | url = https://github.com/harrymkt/zluinav 272 | [submodule "linkita"] 273 | path = linkita 274 | url = https://codeberg.org/salif/linkita.git 275 | branch = linkita 276 | [submodule "re137"] 277 | path = re137 278 | url = git@github.com:tinikov/re137.git 279 | [submodule "zola-agency"] 280 | path = zola-agency 281 | url = https://git.sr.ht/~vonzimp/zola-agency 282 | [submodule "radion"] 283 | path = radion 284 | url = https://github.com/micahkepe/radion.git 285 | [submodule "zola-theme-jiaxiang.wang"] 286 | path = zola-theme-jiaxiang.wang 287 | url = https://github.com/iWangJiaxiang/zola-theme-jiaxiang.wang 288 | branch = main 289 | [submodule "homepage-creators"] 290 | path = homepage-creators 291 | url = https://github.com/iWangJiaxiang/Homepage-Creators.git 292 | branch = main 293 | [submodule "zola-folio"] 294 | path = zola-folio 295 | url = https://github.com/evjrob/zola-folio 296 | [submodule "portfolio-starter-kit"] 297 | path = portfolio-starter-kit 298 | url = https://github.com/roblesch/portfolio-starter-kit.git 299 | [submodule "zola-futu"] 300 | path = zola-futu 301 | url = git@github.com:inhzus/zola-futu.git 302 | [submodule "daisy"] 303 | path = daisy 304 | url = https://codeberg.org/winterstein/zola-theme-daisy.git 305 | branch = main 306 | [submodule "BelResume"] 307 | path = BelResume 308 | url = https://github.com/cx48/BelResume.git 309 | [submodule "carbon"] 310 | path = carbon 311 | url = https://github.com/nik-rev/carbon.git 312 | branch = main 313 | [submodule "BelTree"] 314 | path = BelTree 315 | url = https://github.com/cx48/BelTree 316 | [submodule "parchment"] 317 | path = parchment 318 | url = https://github.com/jsonfry/parchment 319 | [submodule "peritus"] 320 | path = peritus 321 | url = https://github.com/jskaza/peritus.git 322 | [submodule "vonge"] 323 | path = vonge 324 | url = https://github.com/paberr/vonge-zola-theme 325 | [submodule "terminus"] 326 | path = terminus 327 | url = https://github.com/ebkalderon/terminus.git 328 | [submodule "olivine"] 329 | path = olivine 330 | url = https://github.com/dongryul-kim/olivine.git 331 | [submodule "coffee"] 332 | path = coffee 333 | url = https://github.com/Myxogastria0808/coffee.git 334 | [submodule "coast"] 335 | path = coast 336 | url = https://github.com/Myxogastria0808/coast.git 337 | [submodule "lekhz"] 338 | path = lekhz 339 | url = https://github.com/ba11b0y/lekhz.git 340 | [submodule "goyo"] 341 | path = goyo 342 | url = https://github.com/hahwul/goyo 343 | [submodule "papermod_2"] 344 | path = papermod_2 345 | url = https://github.com/dawnandrew100/zola-theme-papermod-2 346 | [submodule "landing-grid"] 347 | path = landing-grid 348 | url = https://github.com/fastup-one/landing-grid-zola.git 349 | [submodule "photography-theme"] 350 | path = photography-theme 351 | url = https://codeberg.org/arbs09/photography-theme.git 352 | [submodule "marisa-theme"] 353 | path = marisa-theme 354 | url = https://codeberg.org/bitinn/marisa-theme.git 355 | [submodule "zola-no-style-please"] 356 | path = zola-no-style-please 357 | url = https://git.sr.ht/~gumxcc/zola-no-style-please 358 | [submodule "kirifuji"] 359 | path = kirifuji 360 | url = https://codeberg.org/yukari/kirifuji-zola.git 361 | [submodule "themes/artist"] 362 | path = themes/artist 363 | url = https://github.com/Pooletergeist/artist-zola-theme.git 364 | [submodule "cela"] 365 | path = cela 366 | url = https://github.com/edwardzcn-decade/cela.git 367 | [submodule "xuan"] 368 | path = xuan 369 | url = https://github.com/jhq223/xuan.git 370 | [submodule "MATbook"] 371 | path = MATbook 372 | url = https://github.com/srliu3264/MATbook.git 373 | [submodule "zap"] 374 | path = zap 375 | url = https://github.com/jimmyff/zola-zap.git 376 | --------------------------------------------------------------------------------