{"id":20466050,"url":"https://github.com/withprecedent/ursula","last_synced_at":"2026-04-16T23:02:55.299Z","repository":{"id":242602357,"uuid":"809968744","full_name":"WithPrecedent/ursula","owner":"WithPrecedent","description":"Cookiecutter template for academic writing projects","archived":false,"fork":false,"pushed_at":"2024-09-30T17:14:32.000Z","size":1193,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-01-16T01:16:56.085Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/WithPrecedent.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-06-03T19:51:27.000Z","updated_at":"2024-09-30T16:53:12.000Z","dependencies_parsed_at":"2024-06-11T01:01:46.620Z","dependency_job_id":null,"html_url":"https://github.com/WithPrecedent/ursula","commit_stats":null,"previous_names":["withprecedent/ursula"],"tags_count":2,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/WithPrecedent%2Fursula","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/WithPrecedent%2Fursula/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/WithPrecedent%2Fursula/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/WithPrecedent%2Fursula/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/WithPrecedent","download_url":"https://codeload.github.com/WithPrecedent/ursula/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":242027482,"owners_count":20060106,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-11-15T13:21:17.597Z","updated_at":"2026-04-16T23:02:50.238Z","avatar_url":"https://github.com/WithPrecedent.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# ursula\n\n\u003cp align=\"center\"\u003e\n\u003cimg src=\"https://github.com/WithPrecedent/ursula/blob/main/docs/img/ursula_le_guin.png?raw=true\" alt=\"ursula logo\" style=\"width:250px;\"/\u003e\n\u003c/p\u003e\n\n“*A writer is a person who cares what words mean, what they say, how they say it. Writers know words are their way towards truth and freedom, and so they use them with care, with thought, with fear, with delight. By using words well they strengthen their souls. Story-tellers and poets spend their lives learning that skill and art of using words well. And their words make the souls of their readers stronger, brighter, deeper.*”\n― Ursula K. Le Guin\n\n| | |\n| --- | --- |\n| Version | [![PyPI Latest Release](https://img.shields.io/pypi/v/ursula.svg?style=for-the-badge\u0026color=steelblue\u0026label=PyPI\u0026logo=PyPI\u0026logoColor=yellow)](https://pypi.org/project/ursula/) [![GitHub Latest Release](https://img.shields.io/github/v/tag/WithPrecedent/ursula?style=for-the-badge\u0026color=navy\u0026label=GitHub\u0026logo=github)](https://github.com/WithPrecedent/ursula/releases)\n| Status | [![Development Status](https://img.shields.io/badge/Development-Active-seagreen?style=for-the-badge\u0026logo=git)](https://www.repostatus.org/#active) [![Project Stability](https://img.shields.io/pypi/status/ursula?style=for-the-badge\u0026logo=pypi\u0026label=Stability\u0026logoColor=yellow)](https://pypi.org/project/ursula/)\n| Documentation | [![Hosted By](https://img.shields.io/badge/hosted_by-GitHub_Pages-blue?style=for-the-badge\u0026color=navy\u0026logo=github)](https://withprecedent.github.io/ursula)\n| Compatibility | [![Compatible Python Versions](https://img.shields.io/pypi/pyversions/ursula?style=for-the-badge\u0026color=steelblue\u0026label=Python\u0026logo=python\u0026logoColor=yellow)](https://pypi.python.org/pypi/ursula/) [![Linux](https://img.shields.io/badge/Linux-lightseagreen?style=for-the-badge\u0026logo=linux\u0026labelColor=gray\u0026logoColor=white)](https://www.linux.org/) [![MacOS](https://img.shields.io/badge/MacOS-snow?style=for-the-badge\u0026logo=apple\u0026labelColor=gray)](https://www.apple.com/macos/) [![Windows](https://img.shields.io/badge/windows-blue?style=for-the-badge\u0026logo=Windows\u0026labelColor=gray\u0026color=orangered)](https://www.microsoft.com/en-us/windows?r=1)\n| Stats | [![PyPI Download Rate (per month)](https://img.shields.io/pypi/dm/ursula?style=for-the-badge\u0026color=steelblue\u0026label=Downloads%20💾\u0026logo=pypi\u0026logoColor=yellow)](https://pypi.org/project/ursula) [![GitHub Stars](https://img.shields.io/github/stars/withprecedent/ursula?style=for-the-badge\u0026color=navy\u0026label=Stars%20⭐\u0026logo=github)](https://github.com/withprecedent/ursula/stargazers) [![GitHub Contributors](https://img.shields.io/github/contributors/withprecedent/ursula?style=for-the-badge\u0026color=navy\u0026label=Contributors%20🙋\u0026logo=github)](https://github.com/withprecedent/ursula/graphs/contributors) [![GitHub Issues](https://img.shields.io/github/issues/withprecedent/ursula?style=for-the-badge\u0026color=navy\u0026label=Issues%20📘\u0026logo=github)](https://github.com/withprecedent/ursula/graphs/contributors) [![GitHub Forks](https://img.shields.io/github/forks/withprecedent/ursula?style=for-the-badge\u0026color=navy\u0026label=Forks%20🍴\u0026logo=github)](https://github.com/withprecedent/ursula/forks) |\n| | |\n\n## What is ursula?\n\n`ursula` is an easy-to-use `cookiecutter` template for academic markdown writing\nprojects that may include code. To see an example repository using this\ntemplate, check out\n[`ursula_demo`](https://github.com/withprecedent/ursula_demo). The primary goal of\n`ursula` is to store all of your materials for a project (writing, code,\npresentations, data, images, media, etc.) in one organized location. Any given\nproject need not use all of the features and aspects of `ursula`, but they are\nalways there in case a project expands or changes direction.\n\nOut of the box, `ursula` is designed for projects that:\n\n* Write scholarship and make slides using\n  [![Markdown](https://img.shields.io/badge/Markdown-deepskyblue?style=flat-square\u0026logo=markdown\u0026labelColor=gray)](https://www.markdownguide.org/)\n  (any flavor, including [![Quarto](https://img.shields.io/badge/Quarto-steelblue?style=flat-square\u0026logo=quarto\u0026labelColor=gray)](https://quarto.org/))\n* Plan to host your project on [![GitHub](https://img.shields.io/badge/GitHub-navy?style=flat-square\u0026logo=github\u0026labelColor=gray)](https://www.github.com/)\n* May include [![Python](https://img.shields.io/badge/Python-steelblue?style=flat-square\u0026logo=python\u0026labelColor=gray)](https://www.python.org/) code[^1]\n* Want replication and/or usage documentation automatically created using [![Documentation Tool](https://img.shields.io/badge/MkDocs-magenta?style=flat-square\u0026color=deepskyblue\u0026logo=markdown\u0026labelColor=gray)](https://www.mkdocs.org/)\n  with the [![Documentation Theme](https://img.shields.io/badge/Material-magenta?style=flat-square\u0026color=deepskyblue\u0026logo=material-design\u0026logoColor=white\u0026labelColor=gray)](https://squidfunk.github.io/mkdocs-material/) theme\n  on [![Documentation Host](https://img.shields.io/badge/GitHub_Pages-blue?style=flat-square\u0026color=navy\u0026logo=github\u0026labelColor=gray)](https://withprecedent.github.io/ursula)\n\n## Why use ursula?\n\n`ursula` is built on top of my general-use `Python` template:  [`snickerdoodle`](https://www.github.com/WithPrecedent/snickerdoodle). You\ncan read the `readme` for that template to understand its advantages versus\nother templates. What `ursula` adds is support for academic writing projects.\nThis may include articles or books. Presentation slides and notes are also\nstored and can use the same resources (images, tables, graphs, etc.) as the\npublication.\n\n### Tools\n\nIf you include `Python` code in your project, `ursula` includes these modern, stable tools for package construction and\nmanagement that do not require any external services or costs:\n\n* Dependency management: [![Dependency Manager](https://img.shields.io/badge/PDM-mediumpurple?style=flat-square\u0026logo=affinity\u0026labelColor=gray)](https://PDM.fming.dev) and [![Dependency Maintainer](https://img.shields.io/badge/dependabot-navy?style=flat-square\u0026logo=dependabot\u0026logoColor=white\u0026labelColor=gray)](https://github.com/dependabot)\n* Testing: [![Testing](https://img.shields.io/badge/pytest-steelblue?style=flat-square\u0026logo=pytest\u0026logoolor=white\u0026labelColor=gray)](https://github.com/TezRomacH/python-package-template/blob/master/.pre-commit-config.yaml)\n* CI/CD: [![CI](https://img.shields.io/badge/GitHub_Actions-navy?style=flat-square\u0026logo=githubactions\u0026labelColor=gray\u0026logoColor=white)](https://github.com/features/actions)\n* Code style:\n  [![Linter](https://img.shields.io/endpoint?style=flat-square\u0026url=https://raw.githubusercontent.com/charliermarsh/Ruff/main/assets/badge/v2.json)](https://github.com/astral-sh/Ruff),\n  [![Pre-commit](https://img.shields.io/badge/pre--commit-darkolivegreen?style=flat-square\u0026logo=pre-commit\u0026logoColor=white\u0026labelColor=gray)](https://github.com/TezRomacH/python-package-template/blob/master/.pre-commit-config.yaml),\n  and [![Editor Settings](https://img.shields.io/badge/Editor_Config-paleturquoise?style=flat-square\u0026logo=editorconfig\u0026labelColor=gray)](https://editorconfig.org/)\n\n\n### Options\n\nIn addition to the included tools above, `ursula` includes several\noptions in the `cookiecutter` questionnaire that can be automatically applied\nas part of the templating process:\n\n* Badge style: [![flat\n  style](https://img.shields.io/badge/flat-crimson?style=flat)](https://www.shields.io/),\n  [![flat-square\n  style](https://img.shields.io/badge/flat--square-orange?style=flat-square)](https://www.shields.io/),\n  [![for-the-badge\n  style](https://img.shields.io/badge/For--the--badge-blue?style=for-the-badge)](https://www.shields.io/),\n  [![plastic\n  style](https://img.shields.io/badge/plastic-purple?style=plastic)](https://www.shields.io/),\n or [![social\n  style](https://img.shields.io/badge/social-red?style=social)](https://www.shields.io/)\n* Push an [initial commit](https://github.com/WithPrecedent/ursula_demo) to GitHub\n* Build and deploy [basic documentation](https://withprecedent.github.io/ursula_demo/) to GitHub Pages\n* Create a `Python` virtual environment in the repository's \".venv\" Folder\n\n## Getting started\n\n### Setup\n\nIf you are new to `cookiecutter` or simply want to guarantee that the created repository works as intended, follow the instructions in the [`ursula` tutorial](https://withprecedent.github.io/ursula/tutorial/).\n\nIf you are familiar with `cookiecutter` templates, you can go about the\nnormal construction process. However, if you do not select the optional\nautomatic setup features in the questionnaire, you should follow the instructions\nfor manually setting up your [virtual\nenvironment](https://withprecedent.github.io/ursula/tutorial/#Create-Virtual-Environment)\nand [deploying your\ndocumentation](https://withprecedent.github.io/ursula/tutorial/#Deploy-Documentation)\nin the [`ursula`\ntutorial](https://withprecedent.github.io/ursula/tutorial/). It is\nespecially important to follow the document deployment process for your initial deployment - after that GitHub Actions will automatically update and redeploy the\ndocumentation (and you need not use the manual process again).\n\n### Usage\n\nAfter your repository is created, you can start coding right away. Every push to GitHub will run any tests in the \"tests\" folder,\ndeploy documentation to GitHub Pages, and apply `ruff` for linting and\nformatting. For more information about the following topics, just click on the\ncorresponding hyperlink.\n\n* [Formatting and Linting](https://withprecedent.github.io/ursula/advanced/#formatting-and-linting)\n* [GitHub Actions](https://withprecedent.github.io/ursula/advanced/#github-actions)\n* [Publishing](https://withprecedent.github.io/ursula/advanced/#publishing)\n* [Repository Layout](https://withprecedent.github.io/ursula/advanced/#repository-layout)\n* [Versioning](https://withprecedent.github.io/ursula/advanced/#versioning)\n\n## Contributing\n\nContributors are always welcome and should find `ursula` easy to work\nwith. The template is highly documented so that users and developers can adapt\nor extend`ursula` to work with their projects. So, forking and creating\ndifferent template spins is encouraged. If you want to contribute directly to\nthe project, feel free to grab an [issue](https://github.com/WithPrecedent/ursula/issues) to work on\nor make a suggested improvement. If you wish to contribute, please read the\n[Contribution Guide](./contributing.md) and [Code of\nConduct](./code_of_conduct.md).\n\n## Similar Projects\n\nThese are other `cookiecutter` templates using `pdm` as their dependency manager:\n\n* [cookiecutter-docker-python-pdm](https://github.com/mnako/cookiecutter-docker-python-pdm): uses Docker and `black`.\n* [cookie](https://github.com/chris-santiago/cookie): uses `mkdocs` and GitHub Actions, but also adds `conda`, `nox`, `black`, and `pyright`.\n\nIf you are interested in going beyond `cookiecutter` (or its forks),\n[`copier`](https://github.com/copier-org/copier) is a powerful, newer templating package\nand there is a great template that incorporates\nseveral of the tools used in `ursula`:\n\n* [copier-pdm](https://github.com/pdm-project/copier-pdm): includes, among other\n tools, `pdm`,\n  `mkdocs`, and `ruff`.\n\n## Acknowledgements\n\nI'd also like to extend a special thanks to [pawamoy](https://github.com/pawamoy) whose excellent `pdm` and `mkdocs` extensions and utlities are incorporated into `ursula`. Some of the scripts, documentation, configuration files, and other CI code were all adapted from pawamoy's repositories.\n\nI would also like to thank the University of Kansas School of Law for tolerating and supporting this law professor's coding efforts, an endeavor which is well outside the typical scholarly activities in the discipline.\n\n## License\n\n[![License](https://img.shields.io/badge/License-Apache_2.0-blue.svg?style=for-the-badge\u0026color=firebrick\u0026logo=apache)](https://opensource.org/licenses/Apache-2.0)\n\n[^1]: Contributions to add support for other programming languages are welcome.","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fwithprecedent%2Fursula","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fwithprecedent%2Fursula","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fwithprecedent%2Fursula/lists"}