{"id":22803060,"url":"https://github.com/tatsh/baldwin","last_synced_at":"2026-03-05T02:32:07.819Z","repository":{"id":265342238,"uuid":"895820225","full_name":"Tatsh/baldwin","owner":"Tatsh","description":"Simple tracking of your home directory with easy-to-read diffs.","archived":false,"fork":false,"pushed_at":"2026-03-03T00:11:12.000Z","size":5271,"stargazers_count":3,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2026-03-03T03:29:09.595Z","etag":null,"topics":["command-line","file-management","git","version-control"],"latest_commit_sha":null,"homepage":"https://tatsh.github.io/baldwin/","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Tatsh.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":".github/FUNDING.yml","license":"LICENSE.txt","code_of_conduct":null,"threat_model":null,"audit":null,"citation":"CITATION.cff","codeowners":"CODEOWNERS","security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null},"funding":{"github":"Tatsh","ko_fi":"tatsh2","liberapay":"tatsh2","patreon":"tatsh2"}},"created_at":"2024-11-29T01:21:44.000Z","updated_at":"2026-03-03T00:11:14.000Z","dependencies_parsed_at":null,"dependency_job_id":"b8cc2895-ce22-43b5-bbac-79f91dfae55f","html_url":"https://github.com/Tatsh/baldwin","commit_stats":null,"previous_names":["tatsh/baldwin"],"tags_count":10,"template":false,"template_full_name":null,"purl":"pkg:github/Tatsh/baldwin","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Tatsh%2Fbaldwin","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Tatsh%2Fbaldwin/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Tatsh%2Fbaldwin/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Tatsh%2Fbaldwin/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Tatsh","download_url":"https://codeload.github.com/Tatsh/baldwin/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Tatsh%2Fbaldwin/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":30107209,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-03-05T01:39:18.192Z","status":"online","status_checked_at":"2026-03-05T02:00:06.710Z","response_time":93,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"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":["command-line","file-management","git","version-control"],"created_at":"2024-12-12T09:08:25.523Z","updated_at":"2026-03-05T02:32:07.805Z","avatar_url":"https://github.com/Tatsh.png","language":"Python","funding_links":["https://github.com/sponsors/Tatsh","https://ko-fi.com/tatsh2","https://liberapay.com/tatsh2","https://patreon.com/tatsh2","https://buymeacoffee.com/Tatsh","https://www.patreon.com/Tatsh2"],"categories":[],"sub_categories":[],"readme":"# Baldwin\n\n[![Python versions](https://img.shields.io/pypi/pyversions/baldwin.svg?color=blue\u0026logo=python\u0026logoColor=white)](https://www.python.org/)\n[![PyPI - Version](https://img.shields.io/pypi/v/baldwin)](https://pypi.org/project/baldwin/)\n[![GitHub tag (with filter)](https://img.shields.io/github/v/tag/Tatsh/baldwin)](https://github.com/Tatsh/baldwin/tags)\n[![License](https://img.shields.io/github/license/Tatsh/baldwin)](https://github.com/Tatsh/baldwin/blob/master/LICENSE.txt)\n[![GitHub commits since latest release (by SemVer including pre-releases)](https://img.shields.io/github/commits-since/Tatsh/baldwin/v0.0.10/master)](https://github.com/Tatsh/baldwin/compare/v0.0.10...master)\n[![CodeQL](https://github.com/Tatsh/baldwin/actions/workflows/codeql.yml/badge.svg)](https://github.com/Tatsh/baldwin/actions/workflows/codeql.yml)\n[![QA](https://github.com/Tatsh/baldwin/actions/workflows/qa.yml/badge.svg)](https://github.com/Tatsh/baldwin/actions/workflows/qa.yml)\n[![Tests](https://github.com/Tatsh/baldwin/actions/workflows/tests.yml/badge.svg)](https://github.com/Tatsh/baldwin/actions/workflows/tests.yml)\n[![Coverage Status](https://coveralls.io/repos/github/Tatsh/baldwin/badge.svg?branch=master)](https://coveralls.io/github/Tatsh/baldwin?branch=master)\n[![Dependabot](https://img.shields.io/badge/Dependabot-enabled-blue?logo=dependabot)](https://github.com/dependabot)\n[![Documentation Status](https://readthedocs.org/projects/baldwin/badge/?version=latest)](https://baldwin.readthedocs.org/?badge=latest)\n[![mypy](https://www.mypy-lang.org/static/mypy_badge.svg)](https://mypy-lang.org/)\n[![pre-commit](https://img.shields.io/badge/pre--commit-enabled-brightgreen?logo=pre-commit)](https://pre-commit.com/)\n[![Poetry](https://img.shields.io/badge/Poetry-242d3e?logo=poetry)](https://python-poetry.org)\n[![pydocstyle](https://img.shields.io/badge/pydocstyle-enabled-AD4CD3?logo=pydocstyle)](https://www.pydocstyle.org/)\n[![pytest](https://img.shields.io/badge/pytest-enabled-CFB97D?logo=pytest)](https://docs.pytest.org)\n[![Ruff](https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/astral-sh/ruff/main/assets/badge/v2.json)](https://github.com/astral-sh/ruff)\n[![Downloads](https://static.pepy.tech/badge/baldwin/month)](https://pepy.tech/project/baldwin)\n[![Stargazers](https://img.shields.io/github/stars/Tatsh/baldwin?logo=github\u0026style=flat)](https://github.com/Tatsh/baldwin/stargazers)\n[![Prettier](https://img.shields.io/badge/Prettier-enabled-black?logo=prettier)](https://prettier.io/)\n\n[![@Tatsh](https://img.shields.io/badge/dynamic/json?url=https%3A%2F%2Fpublic.api.bsky.app%2Fxrpc%2Fapp.bsky.actor.getProfile%2F%3Factor=did%3Aplc%3Auq42idtvuccnmtl57nsucz72\u0026query=%24.followersCount\u0026style=social\u0026logo=bluesky\u0026label=Follow+%40Tatsh)](https://bsky.app/profile/Tatsh.bsky.social)\n[![Buy Me A Coffee](https://img.shields.io/badge/Buy%20Me%20a%20Coffee-Tatsh-black?logo=buymeacoffee)](https://buymeacoffee.com/Tatsh)\n[![Libera.Chat](https://img.shields.io/badge/Libera.Chat-Tatsh-black?logo=liberadotchat)](irc://irc.libera.chat/Tatsh)\n[![Mastodon Follow](https://img.shields.io/mastodon/follow/109370961877277568?domain=hostux.social\u0026style=social)](https://hostux.social/@Tatsh)\n[![Patreon](https://img.shields.io/badge/Patreon-Tatsh2-F96854?logo=patreon)](https://www.patreon.com/Tatsh2)\n\nThis is a conversion of my simple scripts to version my home directory with very specific excludes\nand formatting every file upon commit so that readable diffs can be generated.\n\n## Installation\n\n### Pip\n\n```shell\npip install baldwin\n```\n\n## Usage\n\n```plain\n $ bw -h\nUsage: bw [OPTIONS] COMMAND [ARGS]...\n\n  Manage a home directory with Git.\n\nOptions:\n  -d, --debug  Enable debug logging.\n  -h, --help   Show this message and exit.\n\nCommands:\n  auto-commit\n  format\n  git\n  info\n  init\n  install-units\n```\n\nIn addition to the `bw` command, `hgit` is a shortcut for `bw git`.\n\n### Start a new repository\n\n```shell\nbw init\n```\n\nFind out where the Git directory is by running `bw info`. This can be done even if `init` has not\nbeen run.\n\n### Automation\n\n#### systemd\n\n```shell\nbw install-units\n```\n\nThis will install a timer that will automatically make a new commit every 6 hours. It does not push.\n\nKeep in mind that systemd units require a full path to the executable, so you must keep the unit\nup-to-date if you move where you install this package. Simply run `bw install-units` again.\n\nNote that user systemd units only run while logged in.\n\nTo disable and remove the units, use the following commands:\n\n```shell\nsystemctl disable --now home-vcs.timer\nrm ~/.config/systemd/user/home-vcs.*\n```\n\n### Pushing\n\nTo push, use either of the following:\n\n- `bw git push`\n- `hgit push`\n\nThe above also demonstrates that `bw git`/`hgit` are just frontends to `git` with the correct\nenvironment applied.\n\n## Formatting\n\nIf Prettier is installed, it will be used to format files. The configuration used comes with this\npackage. Having consistent formatting allows for nice diffs to be generated.\n\nIf you have initialised a repository without having `prettier` or `jq` in `PATH`, you need to run the\nfollowing commands to enable readable diffs:\n\n```shell\nhgit config diff.json.textconv 'jq -MS .'\nhgit config diff.json.cachetextconv true\nhgit config diff.yaml.textconv 'prettier --no-editorconfig --parser yaml'\nhgit config diff.yaml.cachetextconv true\n```\n\nIf you have the XML plugin installed:\n\n```shell\nhgit config diff.xml.textconv 'prettier --no-editorconfig --parser xml --xml-whitespace-sensitivity ignore'\nhgit config diff.xml.cachetextconv true\n```\n\n## Binary files\n\nAny file that is untracked and detected to be binary will not be added. Use `hgit add` to add a\nbinary file manually.\n\n## Other details\n\nDefault `.gitignore` and `.gitattributes` files are installed on initialisation. They are never\nmodified by this tool. Please customise as necessary.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftatsh%2Fbaldwin","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ftatsh%2Fbaldwin","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftatsh%2Fbaldwin/lists"}