{"id":17720601,"url":"https://github.com/freed-wu/setuptools-generate","last_synced_at":"2025-07-14T16:06:24.244Z","repository":{"id":64728684,"uuid":"577794975","full_name":"Freed-Wu/setuptools-generate","owner":"Freed-Wu","description":"Generate shell completions and man page when building a python package.","archived":false,"fork":false,"pushed_at":"2025-07-07T18:32:35.000Z","size":92,"stargazers_count":0,"open_issues_count":3,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-07-07T22:05:38.541Z","etag":null,"topics":["build","generate","man","python","setuptools","shell-completion"],"latest_commit_sha":null,"homepage":"https://setuptools-generate.readthedocs.io/","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Freed-Wu.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":"CITATION.cff","codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null},"funding":{"custom":["https://user-images.githubusercontent.com/32936898/199681341-1c5cfa61-4411-4b67-b268-7cd87c5867bb.png","https://user-images.githubusercontent.com/32936898/199681363-1094a0be-85ca-49cf-a410-19b3d7965120.png","https://user-images.githubusercontent.com/32936898/199681368-c34c2be7-e0d8-43ea-8c2c-d3e865da6aeb.png"]}},"created_at":"2022-12-13T14:41:42.000Z","updated_at":"2023-03-04T17:57:41.000Z","dependencies_parsed_at":"2023-02-19T12:46:08.587Z","dependency_job_id":"1ddd74f1-2d61-433f-a691-95b7dcb7086f","html_url":"https://github.com/Freed-Wu/setuptools-generate","commit_stats":{"total_commits":14,"total_committers":1,"mean_commits":14.0,"dds":0.0,"last_synced_commit":"2b7f45d76212d50546c0cbf92304011e6aad9f6e"},"previous_names":[],"tags_count":6,"template":false,"template_full_name":null,"purl":"pkg:github/Freed-Wu/setuptools-generate","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Freed-Wu%2Fsetuptools-generate","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Freed-Wu%2Fsetuptools-generate/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Freed-Wu%2Fsetuptools-generate/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Freed-Wu%2Fsetuptools-generate/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Freed-Wu","download_url":"https://codeload.github.com/Freed-Wu/setuptools-generate/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Freed-Wu%2Fsetuptools-generate/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":265314438,"owners_count":23745270,"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":["build","generate","man","python","setuptools","shell-completion"],"created_at":"2024-10-25T15:28:26.104Z","updated_at":"2025-07-14T16:06:24.217Z","avatar_url":"https://github.com/Freed-Wu.png","language":"Python","funding_links":["https://user-images.githubusercontent.com/32936898/199681341-1c5cfa61-4411-4b67-b268-7cd87c5867bb.png","https://user-images.githubusercontent.com/32936898/199681363-1094a0be-85ca-49cf-a410-19b3d7965120.png","https://user-images.githubusercontent.com/32936898/199681368-c34c2be7-e0d8-43ea-8c2c-d3e865da6aeb.png"],"categories":[],"sub_categories":[],"readme":"# setuptools-generate\n\n[![pre-commit.ci status](https://results.pre-commit.ci/badge/github/Freed-Wu/setuptools-generate/main.svg)](https://results.pre-commit.ci/latest/github/Freed-Wu/setuptools-generate/main)\n[![github/workflow](https://github.com/Freed-Wu/setuptools-generate/actions/workflows/main.yml/badge.svg)](https://github.com/Freed-Wu/setuptools-generate/actions)\n[![codecov](https://codecov.io/gh/Freed-Wu/setuptools-generate/branch/main/graph/badge.svg)](https://codecov.io/gh/Freed-Wu/setuptools-generate)\n[![readthedocs](https://shields.io/readthedocs/setuptools-generate)](https://setuptools-generate.readthedocs.io)\n\n[![github/downloads](https://shields.io/github/downloads/Freed-Wu/setuptools-generate/total)](https://github.com/Freed-Wu/setuptools-generate/releases)\n[![github/downloads/latest](https://shields.io/github/downloads/Freed-Wu/setuptools-generate/latest/total)](https://github.com/Freed-Wu/setuptools-generate/releases/latest)\n[![github/issues](https://shields.io/github/issues/Freed-Wu/setuptools-generate)](https://github.com/Freed-Wu/setuptools-generate/issues)\n[![github/issues-closed](https://shields.io/github/issues-closed/Freed-Wu/setuptools-generate)](https://github.com/Freed-Wu/setuptools-generate/issues?q=is%3Aissue+is%3Aclosed)\n[![github/issues-pr](https://shields.io/github/issues-pr/Freed-Wu/setuptools-generate)](https://github.com/Freed-Wu/setuptools-generate/pulls)\n[![github/issues-pr-closed](https://shields.io/github/issues-pr-closed/Freed-Wu/setuptools-generate)](https://github.com/Freed-Wu/setuptools-generate/pulls?q=is%3Apr+is%3Aclosed)\n[![github/discussions](https://shields.io/github/discussions/Freed-Wu/setuptools-generate)](https://github.com/Freed-Wu/setuptools-generate/discussions)\n[![github/milestones](https://shields.io/github/milestones/all/Freed-Wu/setuptools-generate)](https://github.com/Freed-Wu/setuptools-generate/milestones)\n[![github/forks](https://shields.io/github/forks/Freed-Wu/setuptools-generate)](https://github.com/Freed-Wu/setuptools-generate/network/members)\n[![github/stars](https://shields.io/github/stars/Freed-Wu/setuptools-generate)](https://github.com/Freed-Wu/setuptools-generate/stargazers)\n[![github/watchers](https://shields.io/github/watchers/Freed-Wu/setuptools-generate)](https://github.com/Freed-Wu/setuptools-generate/watchers)\n[![github/contributors](https://shields.io/github/contributors/Freed-Wu/setuptools-generate)](https://github.com/Freed-Wu/setuptools-generate/graphs/contributors)\n[![github/commit-activity](https://shields.io/github/commit-activity/w/Freed-Wu/setuptools-generate)](https://github.com/Freed-Wu/setuptools-generate/graphs/commit-activity)\n[![github/last-commit](https://shields.io/github/last-commit/Freed-Wu/setuptools-generate)](https://github.com/Freed-Wu/setuptools-generate/commits)\n[![github/release-date](https://shields.io/github/release-date/Freed-Wu/setuptools-generate)](https://github.com/Freed-Wu/setuptools-generate/releases/latest)\n\n[![github/license](https://shields.io/github/license/Freed-Wu/setuptools-generate)](https://github.com/Freed-Wu/setuptools-generate/blob/main/LICENSE)\n[![github/languages](https://shields.io/github/languages/count/Freed-Wu/setuptools-generate)](https://github.com/Freed-Wu/setuptools-generate)\n[![github/languages/top](https://shields.io/github/languages/top/Freed-Wu/setuptools-generate)](https://github.com/Freed-Wu/setuptools-generate)\n[![github/directory-file-count](https://shields.io/github/directory-file-count/Freed-Wu/setuptools-generate)](https://github.com/Freed-Wu/setuptools-generate)\n[![github/code-size](https://shields.io/github/languages/code-size/Freed-Wu/setuptools-generate)](https://github.com/Freed-Wu/setuptools-generate)\n[![github/repo-size](https://shields.io/github/repo-size/Freed-Wu/setuptools-generate)](https://github.com/Freed-Wu/setuptools-generate)\n[![github/v](https://shields.io/github/v/release/Freed-Wu/setuptools-generate)](https://github.com/Freed-Wu/setuptools-generate)\n\n[![pypi/status](https://shields.io/pypi/status/setuptools-generate)](https://pypi.org/project/setuptools-generate/#description)\n[![pypi/v](https://shields.io/pypi/v/setuptools-generate)](https://pypi.org/project/setuptools-generate/#history)\n[![pypi/downloads](https://shields.io/pypi/dd/setuptools-generate)](https://pypi.org/project/setuptools-generate/#files)\n[![pypi/format](https://shields.io/pypi/format/setuptools-generate)](https://pypi.org/project/setuptools-generate/#files)\n[![pypi/implementation](https://shields.io/pypi/implementation/setuptools-generate)](https://pypi.org/project/setuptools-generate/#files)\n[![pypi/pyversions](https://shields.io/pypi/pyversions/setuptools-generate)](https://pypi.org/project/setuptools-generate/#files)\n\nGenerate shell completions and man page when building a python package.\n\n## Usage\n\nAdd this package to your build requires:\n\n```toml\n[build-system]\nrequires = [ \"setuptools-generate \u003e= 0.0.6\",]\nbuild-backend = \"setuptools.build_meta\"\n\n[project]\nname = \"demo\"\nversion = \"0.0.1\"\n\n[project.scripts]\ndemo = \"demo:main\"\n\n[tool.setuptools.data-files]\n\"share/application\" = [ \"assets/desktop/demo.desktop\",]\n\"share/icons/hicolor/256x256/apps\" = [ \"src/demo/assets/images/demo.png\",]\n\"share/man/man1\" = [ \"sdist/demo.1\",]\n\"share/bash-completion/completions\" = [ \"sdist/demo\",]\n\"share/zsh/site-functions\" = [ \"sdist/_demo\",]\n```\n\nBuild your package:\n\n```sh\npython -m build\n```\n\n```console\n$ tree sdist\n sdist\n├──  _demo  # zsh completion script\n├──  demo  # bash completion script\n├──  demo.1  # man page\n└──  demo.fish  # fish completion script\n$ tree dist\n dist\n├──  demo-0.0.1-py3-none-any.whl  # wheel file\n└──  demo-0.0.1.tar.gz  # source distribution file\n```\n\nYou got them.\n\nNow `pip install --prefix=/the/root/of/usr dist/*.whl`, you will see:\n\n```sh\n$ tree /the/root/of/usr\n /the/root/of/usr\n├──  bin\n│   └──  trans\n├──  lib\n│   └──  python3.10\n│       └──  site-packages\n│           ├──  foo\n│           │   └── ...\n│           └──  foo-0.0.1.dist-info\n│               └── ...\n└──  share\n~   ├──  application\n~   │   └──  foo.desktop\n~   ├──  bash-completion\n~   │   └──  completions\n~   │       └──  foo\n~   ├──  icons\n~   │   └──  hicolor\n~   │       └──  256x256\n~   │           └──  apps\n~   │               └──  foo.png\n~   ├──  man\n~   │   └──  man1\n~   │       └──  foo.1\n~   └──  zsh\n~       └──  site-functions\n~           └──  _foo\n```\n\nFor linux package (`deb`, `rpm`, `pkg.zst`, ...), it will be very easy.\n\nExample projects:\n\n- [demo for click](https://github.com/Freed-Wu/setuptools-generate/tree/main/tests/click/src)\n- [demo for shtab](https://github.com/Freed-Wu/setuptools-generate/tree/main/tests/shtab/src)\n- See more on [wiki](https://github.com/Freed-Wu/setuptools-generate/wiki).\n\nSee [document](https://setuptools-generate.readthedocs.io) to know more.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffreed-wu%2Fsetuptools-generate","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ffreed-wu%2Fsetuptools-generate","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffreed-wu%2Fsetuptools-generate/lists"}