{"id":51448578,"url":"https://github.com/harshsandhu44/termeme-cli","last_synced_at":"2026-07-05T18:31:03.238Z","repository":{"id":343927346,"uuid":"1179714998","full_name":"harshsandhu44/termeme-cli","owner":"harshsandhu44","description":"Rust CLI for terminal sound notifications on long-running shell commands","archived":false,"fork":false,"pushed_at":"2026-03-12T11:24:23.000Z","size":668,"stargazers_count":0,"open_issues_count":4,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-03-12T17:17:04.702Z","etag":null,"topics":["audio","cli","macos","notifications","rust","shell","terminal"],"latest_commit_sha":null,"homepage":"https://github.com/harshsandhu44/termeme-cli/releases","language":"Rust","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/harshsandhu44.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"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,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-03-12T09:59:26.000Z","updated_at":"2026-03-12T11:23:46.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/harshsandhu44/termeme-cli","commit_stats":null,"previous_names":["harshsandhu44/termeme-cli"],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/harshsandhu44/termeme-cli","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/harshsandhu44%2Ftermeme-cli","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/harshsandhu44%2Ftermeme-cli/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/harshsandhu44%2Ftermeme-cli/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/harshsandhu44%2Ftermeme-cli/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/harshsandhu44","download_url":"https://codeload.github.com/harshsandhu44/termeme-cli/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/harshsandhu44%2Ftermeme-cli/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":35165553,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-07-05T02:00:06.290Z","response_time":100,"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":["audio","cli","macos","notifications","rust","shell","terminal"],"created_at":"2026-07-05T18:31:03.164Z","updated_at":"2026-07-05T18:31:03.232Z","avatar_url":"https://github.com/harshsandhu44.png","language":"Rust","funding_links":[],"categories":[],"sub_categories":[],"readme":"# termeme\n\n`termeme` is a small Rust CLI for terminal sound notifications.\n\nIt is designed for shell-hook usage around long-running commands so you can hear when work finishes, fails, or hits a deploy-like command path without constantly watching the terminal.\n\n## What it does\n\n- Plays bundled `success`, `error`, and `deploy` sounds\n- Embeds audio assets directly in the binary\n- Writes local config to `~/.termeme/config.toml`\n- Stays quiet in hook mode unless `TERMEME_DEBUG=1`\n- Ships a `doctor` command for local diagnostics\n\n## Platform support\n\nSound playback currently uses `afplay`, so actual playback is macOS-only.\n\n- macOS: fully supported\n- Linux and Windows: the CLI builds, but `play` returns an unsupported-platform error\n\n## Install\n\n### From a GitHub Release\n\nGitHub Releases include native macOS tarballs:\n\n- `termeme-\u003cversion\u003e-x86_64-apple-darwin.tar.gz`\n- `termeme-\u003cversion\u003e-aarch64-apple-darwin.tar.gz`\n\nExample install:\n\n```bash\ntar -xzf termeme-\u003cversion\u003e-aarch64-apple-darwin.tar.gz\nmv termeme /usr/local/bin/termeme\n```\n\n### From source\n\nBuild locally:\n\n```bash\ncargo build\n```\n\nInstall from the current checkout:\n\n```bash\ncargo install --path .\n```\n\nConfirm the installed version:\n\n```bash\ntermeme --version\n```\n\n## Quick start\n\nInitialize the local sound and config directory:\n\n```bash\ntermeme init\n```\n\nPlay sounds directly:\n\n```bash\ntermeme play success\ntermeme play error\ntermeme play deploy\n```\n\nRun diagnostics:\n\n```bash\ntermeme doctor\n```\n\nManually exercise hook behavior:\n\n```bash\ntermeme hook --exit-code 0 --duration-ms 2400 --command \"cargo test\"\n```\n\n## Commands\n\n`termeme play \u003cpreset\u003e`\n- Plays one preset immediately\n\n`termeme hook --exit-code \u003ccode\u003e --duration-ms \u003cms\u003e --command \"\u003ccmd\u003e\"`\n- Evaluates a finished command and chooses the right preset\n\n`termeme init`\n- Writes bundled WAV files and a default config into `~/.termeme`\n\n`termeme doctor`\n- Reports platform support, config location, and asset presence\n\n## Shell integration\n\n`termeme` is meant to be called from your shell’s post-command hook rather than used interactively all day.\n\nThe hook contract is:\n\n- `--exit-code`: exit status of the command that just finished\n- `--duration-ms`: runtime of that command in milliseconds\n- `--command`: original command string\n\nExample manual invocation:\n\n```bash\ntermeme hook --exit-code 1 --duration-ms 3200 --command \"pnpm deploy\"\n```\n\n## Configuration\n\n`termeme init` creates `~/.termeme/config.toml` if it does not already exist.\n\nDefault config:\n\n```toml\nmin_duration_ms = 1500\ndeploy_command_prefixes = [\n  \"git push\",\n  \"pnpm deploy\",\n  \"npm publish\",\n  \"vercel --prod\",\n]\n```\n\nConfig fields:\n\n- `min_duration_ms`: minimum runtime before any sound is played\n- `deploy_command_prefixes`: command prefixes that should map to the `deploy` preset\n\n## Hook selection rules\n\nHook mode uses this decision order:\n\n1. Ignore commands shorter than `min_duration_ms`\n2. Use `deploy` if the command starts with a configured deploy prefix\n3. Use `success` for exit code `0`\n4. Use `error` for non-zero exit codes\n\nIf config loading, path resolution, or playback fails during hook execution, `termeme` exits quietly by default. Set `TERMEME_DEBUG=1` to print debug errors to stderr.\n\n## Troubleshooting\n\n`termeme doctor` is the first command to run when setup looks wrong.\n\nCommon checks:\n\n- Verify the config exists at `~/.termeme/config.toml`\n- Verify bundled sounds were written into `~/.termeme`\n- Verify `afplay` is available on macOS\n- Use `TERMEME_DEBUG=1` to surface hook-time failures\n\n## Development\n\nRun local checks:\n\n```bash\ncargo check --locked\ncargo test --locked\ncargo clippy --all-targets --all-features -- -D warnings\ncargo build --release --locked\n```\n\nCurrent module layout:\n\n- `src/main.rs`: bootstrap only\n- `src/cli.rs`: clap CLI definitions\n- `src/app.rs`: top-level command execution\n- `src/config.rs`: TOML config loading and defaults\n- `src/hook.rs`: hook preset selection logic\n- `src/sound.rs`: embedded assets, init, doctor, and playback\n\n## Releases\n\nVersioning is managed by `release-plz` and conventional commits.\n\n- `fix:` bumps the patch version\n- `feat:` bumps the minor version\n- `feat!:` or `BREAKING CHANGE:` bumps the major version\n\nRelease flow:\n\n1. A push to `main` runs `release-plz`\n2. `release-plz` opens or updates a release PR\n3. Merging that PR creates the git tag and GitHub Release\n4. The release asset workflow builds macOS tarballs and checksum files and uploads them to the release\n\nRequired GitHub repository setting:\n\n- In `Settings \u003e Actions \u003e General`, enable `Allow GitHub Actions to create and approve pull requests`\n\nLocal preview:\n\n```bash\ncargo install release-plz\nrelease-plz release-pr --config release-plz.toml\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fharshsandhu44%2Ftermeme-cli","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fharshsandhu44%2Ftermeme-cli","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fharshsandhu44%2Ftermeme-cli/lists"}