{"id":51095658,"url":"https://github.com/gufranco/tmux-launcher-revamped","last_synced_at":"2026-06-24T06:02:36.584Z","repository":{"id":366695558,"uuid":"1276142493","full_name":"gufranco/tmux-launcher-revamped","owner":"gufranco","description":"Launch any TUI app (lazygit, yazi, lf, k9s, htop) in a tmux popup or window from the current pane path. Configurable per app, popup gated to 3.2 with window fallback, 95%+ tested","archived":false,"fork":false,"pushed_at":"2026-06-22T23:07:35.000Z","size":18,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-06-23T01:06:41.935Z","etag":null,"topics":["bash","display-popup","dotfiles","launcher","lazygit","popup","shell","terminal","tmux","tmux-plugin","tpm","tui","yazi"],"latest_commit_sha":null,"homepage":null,"language":"Shell","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/gufranco.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","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-06-21T15:38:29.000Z","updated_at":"2026-06-22T23:07:40.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/gufranco/tmux-launcher-revamped","commit_stats":null,"previous_names":["gufranco/tmux-launcher-revamped"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/gufranco/tmux-launcher-revamped","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gufranco%2Ftmux-launcher-revamped","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gufranco%2Ftmux-launcher-revamped/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gufranco%2Ftmux-launcher-revamped/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gufranco%2Ftmux-launcher-revamped/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/gufranco","download_url":"https://codeload.github.com/gufranco/tmux-launcher-revamped/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gufranco%2Ftmux-launcher-revamped/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34719307,"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-06-24T02:00:07.484Z","response_time":106,"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":["bash","display-popup","dotfiles","launcher","lazygit","popup","shell","terminal","tmux","tmux-plugin","tpm","tui","yazi"],"created_at":"2026-06-24T06:02:35.407Z","updated_at":"2026-06-24T06:02:36.536Z","avatar_url":"https://github.com/gufranco.png","language":"Shell","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cdiv align=\"center\"\u003e\n\n\u003ch1\u003etmux-launcher-revamped\u003c/h1\u003e\n\n**Launch any TUI app in a popup or a window, scoped to the current pane's directory, with one configurable binding per app.**\n\n[![Tests](https://github.com/gufranco/tmux-launcher-revamped/actions/workflows/tests.yml/badge.svg)](https://github.com/gufranco/tmux-launcher-revamped/actions/workflows/tests.yml) [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](LICENSE)\n\n\u003c/div\u003e\n\n**any** app · **popup or window** · **tmux 1.9 to 3.5** · **41** tests · **95%+** coverage\n\nBind a key to open `lazygit`, `yazi`, `lf`, `htop`, `k9s`, or any other terminal app, in a floating popup or a fresh window, always starting in the current pane's directory. You list the apps and set a key, command, mode, and size for each. Popups need tmux 3.2, so on older tmux a popup launcher falls back to a window automatically.\n\nBuilt from [tmux-plugin-template](https://github.com/gufranco/tmux-plugin-template).\n\n\u003ctable\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003cstrong\u003eAny app\u003c/strong\u003e\u003cbr\u003eDefine `name`, key, command, and mode for each launcher; nothing is hardcoded.\u003c/td\u003e\n\u003ctd\u003e\u003cstrong\u003ePopup or window\u003c/strong\u003e\u003cbr\u003ePick a floating popup or a real window per app. Apps that need image passthrough work in a window.\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003cstrong\u003eCurrent directory\u003c/strong\u003e\u003cbr\u003eEvery launcher starts in `#{pane_current_path}`, so the app opens where you are.\u003c/td\u003e\n\u003ctd\u003e\u003cstrong\u003eVersion-aware\u003c/strong\u003e\u003cbr\u003e`display-popup` is used on tmux 3.2 and up; below that, a popup launcher opens a window instead.\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/table\u003e\n\n## How it works\n\nList your apps in `@launcher_apps`. For each app `\u003cid\u003e`, set its options. `lazygit` (popup, `C-g`) and `yazi` (window, `C-y`) ship as working defaults.\n\n```tmux\nset -g @plugin 'gufranco/tmux-launcher-revamped'\n\n# add your own apps to the list\nset -g @launcher_apps 'lazygit yazi lazydocker htop k9s'\n\nset -g @launcher_lazydocker_key 'C-d'\nset -g @launcher_htop_key 'C-t'\nset -g @launcher_k9s_key 'C-s'\n```\n\n## Configuration\n\n`@launcher_apps` is a space separated list of app ids. Each id reads the options below.\n\n| Option | Default | Meaning |\n|--------|---------|---------|\n| `@launcher_apps` | `lazygit yazi` | the apps to bind |\n| `@launcher_\u003cid\u003e_key` | built-in for `lazygit`/`yazi`, else required | the prefix key |\n| `@launcher_\u003cid\u003e_command` | the id itself | the shell command to run |\n| `@launcher_\u003cid\u003e_mode` | `popup` (`yazi` is `window`) | `popup` or `window` |\n| `@launcher_\u003cid\u003e_name` | the id itself | window name, in `window` mode |\n| `@launcher_\u003cid\u003e_width` | `80%` | popup width |\n| `@launcher_\u003cid\u003e_height` | `80%` | popup height |\n\nAn app listed without a key and without a built-in default is skipped, so a typo never produces a broken binding.\n\n## Examples\n\nPopular apps people bind, with the mode that works best. File and media tools with image previews want `window` mode, since tmux popups have no passthrough ([tmux#4329](https://github.com/tmux/tmux/issues/4329)).\n\n| App | Command | Suggested mode | Why |\n|-----|---------|----------------|-----|\n| lazygit | `lazygit` | popup | quick git, no previews |\n| lazydocker | `lazydocker` | popup | container TUI |\n| gitui | `gitui` | popup | git TUI |\n| k9s | `k9s` | popup | kubernetes TUI |\n| htop / btop | `htop` / `btop` | popup | process monitor |\n| gh dash | `gh dash` | popup | GitHub dashboard |\n| taskwarrior-tui | `taskwarrior-tui` | popup | tasks |\n| yazi | `yazi` | window | image previews need passthrough |\n| lf | `lf` | window | file manager, previews |\n| ranger | `ranger` | window | file manager, previews |\n| nnn | `nnn` | window | file manager |\n| broot | `broot` | window | directory tree, opens files |\n\nA full block adding several of these:\n\n```tmux\nset -g @launcher_apps 'lazygit lazydocker k9s htop yazi lf'\n\nset -g @launcher_lazydocker_key 'C-d'\nset -g @launcher_k9s_key       'C-s'\nset -g @launcher_htop_key      'C-t'\nset -g @launcher_lf_key        'C-f'\nset -g @launcher_lf_mode       'window'\n\n# a roomier lazygit popup\nset -g @launcher_lazygit_width  '90%'\nset -g @launcher_lazygit_height '85%'\n```\n\n## Install\n\nWith [TPM](https://github.com/tmux-plugins/tpm), add to `~/.tmux.conf`:\n\n```tmux\nset -g @plugin 'gufranco/tmux-launcher-revamped'\n```\n\nThen press `prefix + I` to install. Out of the box, `prefix + C-g` opens lazygit and `prefix + C-y` opens yazi.\n\nManual install:\n\n```bash\ngit clone https://github.com/gufranco/tmux-launcher-revamped ~/.tmux/plugins/tmux-launcher-revamped\nrun-shell ~/.tmux/plugins/tmux-launcher-revamped/launcher-revamped.tmux\n```\n\n## Compatibility\n\nWorks on every tmux version TPM supports, 1.9 and up, on Linux (x86_64 and arm64) and macOS (Intel and Apple Silicon). The `popup` mode uses `display-popup`, which is tmux 3.2 and up; on older tmux a popup launcher opens a window instead, so every binding still works. Each launcher runs whatever command you give it, so the app itself must be installed.\n\n## Development\n\n```bash\nmake test    # bats suite\nmake lint    # shellcheck\nmake coverage  # kcov line coverage on Linux\n```\n\nThe decision logic lives in [`src/lib/launcher/launcher.sh`](src/lib/launcher/launcher.sh) as pure, seam-backed helpers, and the applier in [`src/launcher.sh`](src/launcher.sh) runs under a dry-run mode so the full binding matrix is validated without a live tmux.\n\n## License\n\n[MIT](LICENSE), copyright Gustavo Franco.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgufranco%2Ftmux-launcher-revamped","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fgufranco%2Ftmux-launcher-revamped","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgufranco%2Ftmux-launcher-revamped/lists"}