{"id":20830642,"url":"https://github.com/endlesstrax/kachi","last_synced_at":"2026-02-21T23:19:57.317Z","repository":{"id":245179559,"uuid":"810891679","full_name":"EndlessTrax/kachi","owner":"EndlessTrax","description":"Kachi is a simple tool for backing up valuable files.","archived":false,"fork":false,"pushed_at":"2025-09-02T21:06:23.000Z","size":132,"stargazers_count":0,"open_issues_count":8,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-09-30T16:45:46.474Z","etag":null,"topics":["backup-tool","backup-utility","dotfiles","executable"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/EndlessTrax.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":".github/FUNDING.yml","license":null,"code_of_conduct":null,"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,"zenodo":null},"funding":{"github":["endlesstrax"],"ko_fi":"endlesstrax"}},"created_at":"2024-06-05T14:44:33.000Z","updated_at":"2025-09-02T20:51:15.000Z","dependencies_parsed_at":"2025-07-28T05:45:09.154Z","dependency_job_id":null,"html_url":"https://github.com/EndlessTrax/kachi","commit_stats":null,"previous_names":["endlesstrax/kachi"],"tags_count":14,"template":false,"template_full_name":null,"purl":"pkg:github/EndlessTrax/kachi","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/EndlessTrax%2Fkachi","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/EndlessTrax%2Fkachi/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/EndlessTrax%2Fkachi/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/EndlessTrax%2Fkachi/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/EndlessTrax","download_url":"https://codeload.github.com/EndlessTrax/kachi/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/EndlessTrax%2Fkachi/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":278555446,"owners_count":26006079,"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","status":"online","status_checked_at":"2025-10-06T02:00:05.630Z","response_time":65,"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":["backup-tool","backup-utility","dotfiles","executable"],"created_at":"2024-11-17T23:25:18.700Z","updated_at":"2026-02-21T23:19:57.309Z","avatar_url":"https://github.com/EndlessTrax.png","language":"Python","funding_links":["https://github.com/sponsors/endlesstrax","https://ko-fi.com/endlesstrax"],"categories":[],"sub_categories":[],"readme":"![GitHub Release](https://img.shields.io/github/v/release/endlesstrax/kachi)\n![GitHub branch check runs](https://img.shields.io/github/check-runs/endlesstrax/kachi/main)\n\n# Kachi\n\nKachi is a simple tool for backing up valuable files, such as dotfiles, config files, and any directory you wish to backup.\n\nBy creating a short yaml file, you can declaratively decide what to back up, and where.\n\nKachi uses \"profiles\", which allow you to backup different files and directories to different locations, and potentially on different schedules (if you automate it further).\n\n```text\n➜ kachi --help\n\n Usage: kachi [OPTIONS] COMMAND [ARGS]...\n\n Kachi is a simple tool for backing up valuable files.\n\n╭─ Options ────────────────────────────────────────────────────────────────────────────╮\n│ --version                Show current version                                   \n│ --install-completion     Install completion for the current shell.              \n│ --show-completion        Show completion for the current shell, to copy it or   \n│                          customize the installation.                            \n│ --help                   Show this message and exit.                            \n╰──────────────────────────────────────────────────────────────────────────────────────╯\n╭─ Commands ───────────────────────────────────────────────────────────────────────────╮\n│ backup   Backup files and directories.                                          \n╰──────────────────────────────────────────────────────────────────────────────────────╯\n```\n\n## Installing\n\n### Quick Install (Linux)\n\nFor Linux x64 systems, you can use the installation script to automatically download and install the latest version:\n\n**Option 1: One-liner (requires trust)**\n\n```bash\ncurl -fsSL https://raw.githubusercontent.com/EndlessTrax/kachi/main/install.sh | bash\n```\n\n**Option 2: Inspect before running (recommended)**\n\n```bash\ncurl -fsSL https://raw.githubusercontent.com/EndlessTrax/kachi/main/install.sh -o install.sh\n# Inspect the script\ncat install.sh\n# Run it if you're satisfied\nbash install.sh\n```\n\nThis will download the latest release for your system and install it to `~/.local/bin/kachi`. Make sure `~/.local/bin` is in your `PATH`.\n\n### Quick Install (Windows)\n\nFor Windows x64 systems, you can use the PowerShell installation script to automatically download and install the latest version:\n\n**Option 1: One-liner (requires trust)**\n\n```powershell\nirm https://raw.githubusercontent.com/EndlessTrax/kachi/main/install.ps1 | iex\n```\n\n**Option 2: Inspect before running (recommended)**\n\n```powershell\nirm https://raw.githubusercontent.com/EndlessTrax/kachi/main/install.ps1 -OutFile install.ps1\n# Inspect the script\nGet-Content install.ps1\n# Run it if you're satisfied\n.\\install.ps1\n```\n\nThis will download the latest release for your system and install it to `$HOME\\.local\\bin\\kachi.exe`. Make sure `$HOME\\.local\\bin` is in your `PATH`.\n\n### Manual Installation\n\nKachi is deployed as a single executable file that you can [download from the releases page](https://github.com/EndlessTrax/kachi/releases). Once downloaded, move it to a location that makes sense for your system and OS, and add it to your PATH. \n\n\u003e NOTE: If a compatible executable for your OS and architecture isn't available, please create an issue or upvote a current one so it can be moved up in priority and added to future releases.\n\n### Verifying Downloads\n\nEach release includes a `checksums.txt` file containing SHA256 checksums for all release artifacts. To verify the integrity of your download:\n\n**On Linux/macOS:**\n\n```bash\nsha256sum -c checksums.txt\n```\n\n**On Windows (PowerShell):**\n\n```powershell\n$hash = (Get-FileHash -Algorithm SHA256 kachi-v*-windows-x64.exe).Hash.ToLower()\n$expected = (Get-Content checksums.txt | Select-String \"windows-x64.exe\").Line.Split()[0]\nif ($hash -eq $expected) { Write-Host \"Checksum verified!\" } else { Write-Host \"Checksum mismatch!\" }\n```\n\nAlternatively, you can manually compare the SHA256 hash of your downloaded file with the corresponding entry in `checksums.txt`.\n\n## Configuration\n\nBy default, Kachi looks for a configuration file at `.config/kachi/config.yaml` relative to the user's home directory on all systems. You can specify a different configuration location using the `--config` flag (see usage example below.)\n\nAs mentioned above, you can declare different profiles under the top-level `profiles` key. Profiles can be named almost anything you want. The only exception is the `default` profile. While not required, the `default` profile is a handy way of reducing repetition in your configuration file. Any source added to the default profile will be added to all other profiles automatically when backed up.\n\nExample:\n\n```yaml\nprofiles:\n  default:\n    sources:\n      - \".gitconfig\"\n    backup_destination: \"path/to/backup/location/\"\n    \n  profile_1:\n    sources:\n      - \".bashrc\"\n```\n\n\u003e NOTE: A fuller [example of the config.yaml](examples/example.yaml) file can be found in the examples folder.\n\nIn the above example, if you backup `profile_1`, both the `.gitconfig` and `.bashrc` files will be backed up to the default `backup_destination`. If a `backup_destination` was declared in `profile_1`, then that would take precedence.\n\n\u003e NOTE: Additional config formats (such as JSON — see [#14](https://github.com/EndlessTrax/kachi/issues/14)) are planned. Please upvote any issues you wish to see prioritized.\n\n## Usage\n\nTo back up the declared sources from your configuration, use the `backup` command with optional flags:\n\n```text\n➜ kachi backup --help\n\n Usage: kachi backup [OPTIONS]\n\n Backup files and directories.\n If no profile is specified, all profiles in the configuration file will be backed up.\n If no configuration file is specified, the default configuration file path will be\n used.\n\n╭─ Options ────────────────────────────────────────────────────────────────────────────╮\n│ --config         TEXT  Path to a configuration file                                  \n│ --profile        TEXT  Name of the profile to backup                                 \n│ --help                 Show this message and exit.                                   \n╰──────────────────────────────────────────────────────────────────────────────────────╯\n```\n\nWithout any flags, all profiles will be backed up using a config file in the expected default location. Alternatively, specify a single profile to backup with `--profile`:\n\n```bash\nkachi backup --profile profile_1\n```\n\nOr specify a configuration to use using `--config`:\n\n```bash\nkachi backup --config some/other/path/config.yaml\n```\n\n## Development\n\nKachi uses [uv](https://docs.astral.sh/uv/) for package and environment management.\n\n```bash\nuv sync --all-extras --dev   # install dependencies\nuv run pytest                # run tests with coverage\nuv run ruff check .          # lint\nuv run ruff format .         # format\n```\n\n## Contributing\n\nIf you find a bug, please file an [issue](https://github.com/EndlessTrax/kachi/issues).\n\nIf you have feature requests, please [file an issue](https://github.com/EndlessTrax/kachi/issues) and use the appropriate label.\n\nPlease **raise an issue before making a PR**, so that the issue and implementation can be discussed before you write any code. This will save you time, and increase the chances of your PR being merged without significant changes.\n\nPlease **include tests** for any PRs that include code (unless current tests already cover your contribution).\n\nPlease **lint and format your code** with [ruff](https://github.com/astral-sh/ruff) before submitting.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fendlesstrax%2Fkachi","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fendlesstrax%2Fkachi","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fendlesstrax%2Fkachi/lists"}