{"id":45874342,"url":"https://github.com/socket-link/git-chord","last_synced_at":"2026-02-27T11:24:17.277Z","repository":{"id":333141182,"uuid":"1127388441","full_name":"socket-link/git-chord","owner":"socket-link","description":"Vim-style composable git commands for zsh","archived":false,"fork":false,"pushed_at":"2026-01-17T15:25:41.000Z","size":22,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-01-18T00:40:49.656Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Shell","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/socket-link.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","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-01-03T19:28:40.000Z","updated_at":"2026-01-17T15:25:45.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/socket-link/git-chord","commit_stats":null,"previous_names":["socket-link/git-chord"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/socket-link/git-chord","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/socket-link%2Fgit-chord","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/socket-link%2Fgit-chord/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/socket-link%2Fgit-chord/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/socket-link%2Fgit-chord/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/socket-link","download_url":"https://codeload.github.com/socket-link/git-chord/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/socket-link%2Fgit-chord/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29892077,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-27T09:48:51.284Z","status":"ssl_error","status_checked_at":"2026-02-27T09:48:43.992Z","response_time":57,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"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":[],"created_at":"2026-02-27T11:24:16.632Z","updated_at":"2026-02-27T11:24:17.265Z","avatar_url":"https://github.com/socket-link.png","language":"Shell","funding_links":[],"categories":[],"sub_categories":[],"readme":"# git-chord\n\nVim-style composable git commands for zsh. Chain multiple git operations in a single keystroke sequence.\n\n```bash\ng acp \"Fix bug\"              # add → commit → push\ng x\"feature\"ac\"WIP\"p         # checkout feature → add → commit \"WIP\" → push  \ng ac\"Done\"R                  # commit → sync-rebase from main (auto-returns to branch)\n```\n\n## Why?\n\nMost git alias systems will give you shortcuts like `ga` for `git add`. \n\nThat's fine, but you still need to type:\n\n```bash\nga \u0026\u0026 gc \"message\" \u0026\u0026 gp\n```\n\nBut with `git-chord`, you just type:\n\n```bash\ng acp \"message\"\n```\n\nThe chord `acp` is parsed character-by-character: **a**dd, **c**ommit, **p**ush. \n\nArguments are bound automatically to the commands that need them.\n\n### Features\n\n- **Single-char commands** compose into chords\n- **Inline quoted args** for explicit binding: `g x\"main\"ac\"msg\"p`\n- **Positional args** consumed left-to-right: `g xacp main \"msg\"`\n- **Macros** that capture your current branch and return to it\n- **Sensible defaults** (`x` → `x main`, `r` → `r main`)\n\n## Install\n\n```bash\n# Clone\ngit clone https://github.com/socket-link/git-chord.git ~/.git-chord\n\n# Add to ~/.zshrc\necho 'source ~/.git-chord/git-chord.zsh' \u003e\u003e ~/.zshrc\nsource ~/.zshrc\n```\n\nOr just copy `git-chord.zsh` anywhere and source it.\n\n## Quick Reference\n\n| Key | Command | Key | Command |\n|-----|---------|-----|---------|\n| `a` | `git add .` | `s` | `git stash` |\n| `c` | `git commit -m \"\u003cmsg\u003e\"` | `p` | `git push` |\n| `P` | `git push --force` | `f` | `git fetch` |\n| `F` | `git pull` | `l` | `git log --oneline` |\n| `u` | `git reset HEAD^ --soft` | `L` | `git log` |\n| `x` | `git checkout [main]` | `n` | `git checkout -b \u003cbranch\u003e` |\n| `d` | `git branch -D \u003cbranch\u003e` | `b` | `git branch` |\n| `m` | `git merge \u003cbranch\u003e` | `r` | `git rebase [main]` |\n| `e` | `git commit --amend` | `E` | `git commit --amend --no-edit` |\n| `S` | `git stash pop` | | |\n\n### Multi-char Commands\n\n| Chord | Command |\n|-------|---------|\n| `pf` | `git push --force` |\n| `pu` | `git push -u origin HEAD` |\n| `ra` | `git rebase --abort` |\n| `rc` | `git rebase --continue` |\n| `rs` | `git rebase --skip` |\n| `sa` | `git stash apply` |\n| `sl` | `git stash list` |\n| `sp` | `git stash pop` |\n| `sd` | `git stash drop` |\n\n### Macros\n\nMacros capture your current branch at chord start and can return to it.\n\n| Macro | Expands To | Use Case |\n|-------|------------|----------|\n| `R` | `x` → `F` → `x {branch}` → `r` | Sync-rebase from main |\n| `M` | `x` → `F` → `x {branch}` → `m main` | Sync-merge from main |\n| `W` | `p` → `x` | Push \u0026 return to main |\n\n**Example:** On branch `feature-123`:\n```bash\ng ac\"WIP\"R\n```\nExpands to:\n```\n→ git add .\n→ git commit -m \"WIP\"\n⚡ Macro R → expanding for branch 'feature-123'\n→ git checkout main\n→ git pull\n→ git checkout feature-123\n→ git rebase main\n```\n\n## Argument Binding\n\nCommands that need arguments get them in two ways:\n\n### Positional (left-to-right)\n\n```bash\ng xacp feature \"Add feature\"\n#      │       │\n#      │       └─ \"Add feature\" → c (commit)\n#      └──── \"feature\" → x (checkout)\n```\n\n### Inline Quoted\n\n```bash\ng x\"feature\"ac\"Add feature\"p\n#  │        │ │            │\n#  │        │ │            └─ p (push, no arg)\n#  │        │ └─ \"Add feature\" → c (commit)\n#  │        └─ a (add, no arg)\n#  └─ \"feature\" → x (checkout)\n```\n\nQuoted args bind explicitly to the command immediately before them. This is useful when the argument order would otherwise be ambiguous.\n\n## Workflows\n\n```bash\n# Morning sync\ng xF                             # checkout main, pull\n\n# Quick commit\ng acp \"Fix typo\"                 # add, commit, push\n\n# Start feature\ng n\"feature-123\"                 # new branch\ng acp \"Implement feature\"        # work...\ng R                              # sync-rebase from main\ng P                              # force push (after rebase)\n\n# Stash \u0026 switch\ng s                              # stash\ng xF                             # main, pull\ng x\"feature\"S                    # back, unstash\n\n# Oops, bad commit\ng u                              # uncommit\ng ac \"Better message\"            # recommit\n\n# Squash into previous\ng aE                             # add + amend no-edit\n\n# Done with branch\ng W                              # push, back to main\n```\n\n## Mnemonics\n\n| Key | Mnemonic                     |\n|-----|------------------------------|\n| `x` | \"check\" (as in checkout)     |\n| `n` | \"new\" branch                 |\n| `u` | \"uncommit\"                   |\n| `s` | \"stash\"                      |\n| `S` | \"stash pop\"                  |\n| `e` | \"edit\" commit                |\n| `E` | \"Edit silently\"              |\n| `R` | \"sync Rebase\"                |\n| `M` | \"sync Merge\"                 |\n| `W` | \"Wrap up\"                    |\n\n## Convenience Mappings\n\nFor improved muscle-memory usage, aliases for common commands are included at the bottom.\n\nThese alias allow you to omit space after typing `g`, speeding up the chord typing (`ga`, `gc`, `gx`, etc.).\n\n## Extending\n\nEdit the associative arrays in `git-chord.zsh`:\n\n```zsh\n# Add a single-char command\nGIT_CHORD_CMDS[w]=\"1:git worktree add {}\"\n\n# Add a multi-char command\nGIT_CHORD_MULTI[df]=\"git diff --name-only\"\n\n# Add a macro\nGIT_CHORD_MACROS[Q]=\"s:x:F:x {branch}:S\"  # stash, sync, unstash\n```\n\n## Help\n\n```bash\nghelp\n```\n\n## License\n\n```\nCopyright 2026 Miley Chandonnet, Stedfast Softworks LLC\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsocket-link%2Fgit-chord","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsocket-link%2Fgit-chord","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsocket-link%2Fgit-chord/lists"}