{"id":42665393,"url":"https://github.com/chenasraf/tx","last_synced_at":"2026-02-19T21:58:52.242Z","repository":{"id":335255954,"uuid":"1144910701","full_name":"chenasraf/tx","owner":"chenasraf","description":"Tmux session manager","archived":false,"fork":false,"pushed_at":"2026-02-08T21:36:38.000Z","size":98,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"master","last_synced_at":"2026-02-09T02:47:16.233Z","etag":null,"topics":["session","tmux","tmux-session"],"latest_commit_sha":null,"homepage":"","language":"Go","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/chenasraf.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":".github/FUNDING.yml","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},"funding":{"github":"chenasraf","patreon":null,"open_collective":null,"ko_fi":"casraf","tidelift":null,"community_bridge":null,"liberapay":null,"issuehunt":null,"otechie":null,"custom":["https://www.paypal.com/cgi-bin/webscr?cmd=_donations\u0026business=TSH3C3ABGQM22\u0026currency_code=ILS\u0026source=url"]}},"created_at":"2026-01-29T07:29:03.000Z","updated_at":"2026-02-08T21:35:30.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/chenasraf/tx","commit_stats":null,"previous_names":["chenasraf/tx"],"tags_count":8,"template":false,"template_full_name":null,"purl":"pkg:github/chenasraf/tx","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/chenasraf%2Ftx","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/chenasraf%2Ftx/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/chenasraf%2Ftx/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/chenasraf%2Ftx/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/chenasraf","download_url":"https://codeload.github.com/chenasraf/tx/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/chenasraf%2Ftx/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29634597,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-19T18:02:07.722Z","status":"ssl_error","status_checked_at":"2026-02-19T18:01:46.144Z","response_time":117,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: 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":["session","tmux","tmux-session"],"created_at":"2026-01-29T10:06:03.817Z","updated_at":"2026-02-19T21:58:52.235Z","avatar_url":"https://github.com/chenasraf.png","language":"Go","funding_links":["https://github.com/sponsors/chenasraf","https://ko-fi.com/casraf","https://www.paypal.com/cgi-bin/webscr?cmd=_donations\u0026business=TSH3C3ABGQM22\u0026currency_code=ILS\u0026source=url","https://ko-fi.com/casraf'"],"categories":[],"sub_categories":[],"readme":"# tx\n\nA tmux session manager that creates sessions from YAML configuration files.\n\n![Release](https://img.shields.io/github/v/release/chenasraf/tx)\n![Downloads](https://img.shields.io/github/downloads/chenasraf/tx/total)\n![License](https://img.shields.io/github/license/chenasraf/tx)\n\n---\n\n## 🚀 Features\n\n- Create tmux sessions with predefined window layouts\n- Complex pane splits (horizontal/vertical, nested)\n- Run commands in panes on session creation\n- Fuzzy finder for session selection\n- Global and local config file support (with merging)\n- Quick project session creation from configurable projects directory\n\n---\n\n## 🎯 Installation\n\n### Download Precompiled Binaries\n\nPrecompiled binaries for `tx` are available for **Linux**, **macOS** and **Windows**:\n\n- Visit the [Releases Page](https://github.com/chenasraf/tx/releases/latest) to download the latest\n  version for your platform.\n\n### Homebrew (macOS/Linux)\n\nInstall from a custom tap:\n\n```bash\nbrew install chenasraf/tap/tx\n```\n\n### Go Install\n\n```bash\ngo install github.com/chenasraf/tx@latest\n```\n\n### Build from Source\n\n```bash\ngit clone https://github.com/chenasraf/tx.git\ncd tx\nmake build # build only\nmake install # build \u0026 install to ~/.local/bin\n```\n\n---\n\n## 🔧 Usage\n\n```bash\n# Open a session (fuzzy finder if no name given)\ntx [session-name]\n\n# List all configurations and active sessions\ntx list\ntx ls -b              # bare output (just names)\ntx ls -s              # show only active sessions\n\n# Show configuration details\ntx show \u003cname\u003e\ntx show \u003cname\u003e -j     # JSON output\n\n# Edit configuration file\ntx edit\ntx edit -l            # edit local config\n\n# Create a temporary session\ntx create\ntx create -r ~/myproject -w src -w lib\ntx create -s          # save to config\ntx create -S          # save only (don't create)\n\n# Quick project session from projects directory\ntx prj [name]\ntx prj -s             # save to config\n\n# Attach to existing session\ntx attach [name]\n\n# Remove a configuration\ntx rm \u003cname\u003e\ntx rm \u003cname\u003e -l       # remove from local config\n\n# Kill a running session\ntx kill               # kill current session\ntx kill \u003cname\u003e        # kill specific session\n```\n\n### Global Flags\n\n| Flag            | Description                               |\n| --------------- | ----------------------------------------- |\n| `-v, --verbose` | Verbose logging                           |\n| `-d, --dry`     | Dry run (show commands without executing) |\n\n---\n\n## 📚 Configuration\n\ntx searches for configuration files in these locations (in order):\n\n1. Home directory (`~`)\n2. `$XDG_CONFIG_HOME` (if set)\n3. `~/.config`\n4. `%APPDATA%` (Windows, if set)\n\nFile patterns searched:\n\n- `tmux.yaml` / `tmux.yml`\n- `.tmux.yaml` / `.tmux.yml`\n\nLocal config files (`.tmux_local.yaml`) are merged with global config, with local values taking\nprecedence.\n\nLocal configs are useful for setups where a global config is shared among computers, and you want\nper-computer configs which might be gitignored. This allows you to not check-in your local configs\nwhile also being able to share a config that might be checked into git.\n\n### Configuration Format\n\n```yaml\n# Simple session\nmyproject:\n  root: ~/Dev/myproject\n  windows:\n    - ./src\n    - ./lib\n    - ./test\n\n# Session with named windows\nwebapp:\n  root: ~/Dev/webapp\n  windows:\n    - name: editor\n      cwd: ./src\n    - name: server\n      cwd: ./backend\n      layout:\n        cwd: .\n        cmd: npm run dev\n        split:\n          direction: v\n          child:\n            cwd: .\n            cmd: npm run watch\n\n# Session with complex layout\nfullstack:\n  root: ~/Dev/fullstack\n  blank_window: true # add a blank window at the start\n  windows:\n    - name: dev\n      cwd: ./frontend\n      layout:\n        cwd: .\n        cmd: npm start\n        split:\n          direction: h\n          child:\n            cwd: ../backend\n            cmd: go run .\n            split:\n              direction: v\n              child:\n                cwd: .\n                cmd: tail -f logs/app.log\n```\n\n### Window Configuration\n\nWindows can be specified as:\n\n**String** - just a directory path:\n\n```yaml\nwindows:\n  - ./src\n  - ./lib\n```\n\n**Object** - with name, cwd, and optional layout:\n\n```yaml\nwindows:\n  - name: mywindow\n    cwd: ./src\n    layout: ...\n```\n\n### Layout Configuration\n\nLayouts define pane splits and commands:\n\n**String** - just a directory:\n\n```yaml\nlayout: ./src\n```\n\n**Array** - horizontal splits:\n\n```yaml\nlayout:\n  - ./src\n  - ./lib\n  - ./test\n```\n\n**Object** - full pane configuration:\n\n```yaml\nlayout:\n  cwd: .\n  cmd: npm start # command to run\n  zoom: true # zoom this pane\n  clock: false # show tmux clock mode\n  split:\n    direction: h # h (horizontal) or v (vertical)\n    child:\n      cwd: ./other\n      cmd: npm test\n      split: # nested splits\n        direction: v\n        child:\n          cwd: .\n          clock: true # show clock in this pane\n```\n\n### Global Settings\n\nThe special `.config` key is reserved for global settings and won't be treated as a session:\n\n```yaml\n.config:\n  shell: /bin/zsh\n  projects_path: ~/Dev\n\nmyproject:\n  root: ~/Dev/myproject\n  # ...\n```\n\n#### Available Settings\n\n| Setting          | Description                                       |\n| ---------------- | ------------------------------------------------- |\n| `shell`          | Shell to use for command execution                |\n| `projects_path`  | Directory for `tx prj` command (required for prj) |\n| `default_layout` | Default pane layout for new windows (see below)   |\n| `named_layouts`  | Reusable named layouts (see below)                |\n\n#### Default Layout\n\nThe `default_layout` setting configures the default pane arrangement for windows. Each pane can\nhave:\n\n| Setting | Description                                                   |\n| ------- | ------------------------------------------------------------- |\n| `cwd`   | Working directory (defaults to window's directory)            |\n| `cmd`   | Command to run (defaults to none)                             |\n| `clock` | Show tmux clock mode (defaults to false)                      |\n| `split` | Create a split with direction (`h` or `v`) and a `child` pane |\n\nExample - single pane with clock:\n\n```yaml\n.config:\n  default_layout:\n    cwd: .\n    clock: true\n```\n\nExample - horizontal split with vertical sub-split (default):\n\n```yaml\n.config:\n  default_layout:\n    cwd: .\n    split:\n      direction: h\n      child:\n        cwd: .\n        split:\n          direction: v\n          child:\n            cwd: .\n            clock: true\n```\n\n#### Named Layouts\n\nDefine reusable layouts that can be referenced by name in session configurations:\n\n```yaml\n.config:\n  named_layouts:\n    dev:\n      cwd: .\n      cmd: npm run dev\n      split:\n        direction: h\n        child:\n          cwd: .\n          cmd: npm run test:watch\n    simple:\n      cwd: .\n      clock: true\n\nmyproject:\n  root: ~/Dev/myproject\n  windows:\n    - name: main\n      cwd: .\n      layout: dev      # references the \"dev\" named layout\n    - name: logs\n      cwd: ./logs\n      layout: simple   # references the \"simple\" named layout\n```\n\n#### Shell Resolution Order\n\nThe shell used for executing commands is determined in this order:\n\n1. **Config file** - `.config.shell` in your config file (highest priority)\n2. **Environment** - `$SHELL` environment variable\n3. **Auto-detect** - First available of `/bin/zsh`, `/bin/bash`, `/bin/sh`\n\n---\n\n## 📂 Examples\n\n### Basic Development Setup\n\n```yaml\n# ~/.tmux.yaml\ndotfiles:\n  root: ~/.dotfiles\n  windows:\n    - .\n    - ./utils\n\nwebapp:\n  root: ~/Dev/webapp\n  windows:\n    - name: code\n      cwd: ./src\n    - name: server\n      cwd: .\n      layout:\n        cwd: .\n        cmd: npm run dev\n        split:\n          direction: h\n          child:\n            cwd: .\n            cmd: npm run test:watch\n```\n\n### Quick Session\n\n```bash\n# Create a session for current directory\ntx create\n\n# Create with specific windows\ntx create -r ~/myproject -w src -w lib -w test\n\n# Create and save to config\ntx create -r ~/myproject -s\n```\n\n### Project Workflow\n\nFirst, configure your projects directory in `.config`:\n\n```yaml\n.config:\n  projects_path: ~/Dev\n```\n\nThen use `tx prj` to quickly open projects:\n\n```bash\n# Select from projects directory with fuzzy finder\ntx prj\n\n# Open specific project\ntx prj myproject\n\n# Open and save to config for future use\ntx prj myproject -s\n```\n\n---\n\n## 🛠️ Contributing\n\nI am developing this package on my free time, so any support, whether code, issues, or just stars is\nvery helpful to sustaining its life. If you are feeling incredibly generous and would like to donate\njust a small amount to help sustain this project, I would be very very thankful!\n\n\u003ca href='https://ko-fi.com/casraf' target='_blank'\u003e\n  \u003cimg height='36' style='border:0px;height:36px;'\n    src='https://cdn.ko-fi.com/cdn/kofi1.png?v=3'\n    alt='Buy Me a Coffee at ko-fi.com' /\u003e\n\u003c/a\u003e\n\nI welcome any issues or pull requests on GitHub. If you find a bug, or would like a new feature,\ndon't hesitate to open an appropriate issue and I will do my best to reply promptly.\n\n---\n\n## 📜 License\n\nMIT\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fchenasraf%2Ftx","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fchenasraf%2Ftx","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fchenasraf%2Ftx/lists"}