CLI tool
gpakosz/.tmux avatar
gpakosz/.tmux

gpakosz/.tmux: A Self-Contained tmux Configuration, Reviewed

Oh my tmux! My self-contained, pretty & versatile tmux configuration made with 💛🩷💙🖤❤️🤍

25,474 stars3,592 forksShellMIT

At a glance

What is it?
Oh my tmux! ships a configured tmux rather than a plugin collection. Here is what install.sh does, how the .local override file works, and where the setup stops being a good fit.
Who is it for?
Adopt gpakosz/.tmux if you want a working tmux status line, mouse toggle and C-a prefix without assembling plugins, and you accept that your edits belong in .tmux.conf.local rather than in the main file. Skip it if you already maintain a hand-written tmux.conf you understand line by line, or if the machine cannot run awk, perl, grep and sed.
Can I use it commercially?
Yes. MIT is a permissive licence: you can use, modify and sell software built on it, as long as you keep its copyright and licence notices.
Is it still maintained?
Yes. The repository last received commits 24 days ago.
What is it written in?
Mainly Shell, according to GitHub's language statistics.

Answers come from the project's GitHub data, last synced on November 13, 2026, and from our analysis. They are not legal advice.

From daily snapshots

Star history

  • gpakosz/.tmux25,474 ★ · +79
Star history
Repository2026-09-212026-11-13
gpakosz/.tmux25.4k25.5k

79 Stars in the last 53 days, measured from the daily GitHub snapshot. Compare with other projects

Editorial analysis

What Oh my tmux! Is For

tmux on its own is a terminal multiplexer with a default prefix of C-b and a status line that shows almost nothing. Getting from that to a usable daily driver usually means collecting a theme, a set of key bindings, a battery indicator, a clipboard helper and a plugin manager, then keeping them in sync across machines. gpakosz/.tmux takes the opposite route: the repository states it is a self-contained configuration, and the top-level layout backs that up. There is a .tmux.conf, a .tmux.conf.local sample, install.sh, and two licence files. No plugin manifest is required to get the advertised features.

The audience is people who already use tmux or intend to, and who want the configuration decided for them. The README lists the payoffs directly: C-a as a secondary prefix while C-b still works, a Powerline-inspired theme, a key binding to maximize a pane into a new window, a mouse mode toggle on prefix plus m, laptop battery and uptime in the status line, optional highlighting of the focused pane, SSH and Mosh aware status line and pane splitting, and copy to the OS clipboard. If any of those sound like work you would rather not do, this project is aimed at you.

How the Configuration Loads and Why .local Exists

The mechanism is a two-file split, and it is the most important thing to understand before editing anything. The tracked .tmux.conf holds the maintained configuration. The .tmux.conf.local file is your copy, and the README is blunt about the boundary: you should never alter the main .tmux.conf or tmux.conf file, and every customization should happen in your .tmux.conf.local copy. The installation steps copy that sample into place for you.

That split has a real consequence. The README acknowledges that a plain set, bind or unbind in your local file can be overwritten by Oh my tmux!. The README documents the escape hatch: append #!important to the line. It gives two examples, one rebinding c to a new window opened at the current pane path, and one setting the default terminal to screen-256color. Anything you add without that marker may be silently replaced.

The project also reaches outside tmux for behaviour. Clipboard support needs xsel, xclip or wl-copy on Linux, and the README notes optional integrations with PathPicker, Urlscan (preferred) or Urlview when those are present on the system. Nothing breaks if they are absent; those features just do not appear.

Installing Oh my tmux! and Making a First Change

The requirements are stated plainly: tmux 2.6 or newer, running on Linux, macOS, FreeBSD, OpenBSD or Windows through WSL or Cygwin (the README marks Cygwin as not recommended). awk, perl, grep and sed must be available, and perl optionally needs Time::HiRes for sub-second timestamps. Outside tmux, TERM must be set to xterm-256color. The README also suggests backing up your existing configuration first.

The automatic path is a single piped command. The date substitution defeats caching of the script itself:

bash
curl -fsSL "https://github.com/gpakosz/.tmux/raw/refs/heads/master/install.sh#$(date +%s)" | bash

If you prefer to see what lands on disk, the manual route for a home-directory install clones the repository, symlinks the main configuration, and copies the local sample:

bash
cd
git clone --single-branch https://github.com/gpakosz/.tmux.git
ln -s -f .tmux/.tmux.conf
cp .tmux/.tmux.conf.local .

The README also documents installs under $XDG_CONFIG_HOME/tmux and ~/.config/tmux. In both of those locations the file names lose the leading dot, so you get tmux.conf and tmux.conf.local instead. Pick one location and stay there; mixing them means one of the two files is not the one tmux reads.

After installing, start tmux and open your local file. The first useful edit is a prefix binding you will actually type. For example, the README's own override pattern for a new window looks like this:

bash
bind c new-window -c '#{pane_current_path}' #!important

Reload the configuration inside tmux and press your prefix followed by c. If a new window opens in the current directory rather than your home directory, the override path works and you can trust it for further changes.

The Status Line Breakage You Will Probably Hit

The troubleshooting section is unusually honest about a failure mode that has nothing to do with the configuration itself. On Linux, a broken or duplicated status line can appear when the distribution ships glib 2.50.1 or newer, which received Unicode 9.0 width updates, alongside glibc older than 2.26, which did not. VTE-based terminal emulators call glib's g_unichar_iswide() while tmux calls glibc's wcwidth(), and when those two disagree the display is wrong. The README suggests configuring LC_CTYPE to a UTF-8 locale as one response.

The same symptom appears on macOS with iTerm2 when "Use Unicode version 9 character widths" is enabled under Preferences, Profiles, Text. The project's mitigation was to stop using, in the sample local file, the Unicode characters whose width changed between Unicode 8.0 and 9.0, and to drop emojis. That is a deliberate trade: the default theme is less decorative than it could be so that it renders correctly on a wider range of systems. If you re-enable those characters yourself, you are reintroducing the condition the project stepped away from.

The second failure mode is the override problem described above, and the third is diagnostic rather than a defect. When something looks wrong, the README asks you to confirm no tmux client or server process is running, then start a clean pair with tmux -f /dev/null -L test. That loads no configuration at all. If the problem persists there, the README says to take it to the tmux project instead, because the configuration is not the cause.

Where Oh my tmux! Is the Wrong Choice

This project is a configuration, not a plugin runtime, and that shapes when to avoid it. If your tmux setup is already a file you wrote and understand, replacing it with a maintained configuration you did not write trades comprehension for features. You will be reading someone else's key bindings every time something behaves unexpectedly.

The .local boundary is the sharper constraint. The README warns that changes to the main .tmux.conf put you on your own, which means the supported upgrade path is to leave that file alone and re-apply your intent in the local file. Anyone who wants to fork the core configuration and track upstream changes will find that path explicitly unsupported.

The environment requirements are also worth weighing. The README lists awk, perl, grep and sed as requirements, and Cygwin support is marked not recommended. On a minimal container image or a locked-down host without perl, the configuration is not the right fit. Finally, the optional integrations are genuinely optional: no PathPicker, Urlscan or Urlview means no URL or path picking, and no xsel, xclip or wl-copy on Linux means no OS clipboard copy. If those are the features that drew you in, verify the helper binaries exist before installing.

Compared With a Hand-Written tmux.conf

The realistic alternative is not another configuration project; it is a tmux.conf you write yourself, possibly with a plugin manager such as tpm pulling in individual pieces. The difference in approach is where the decisions live. A hand-written file starts empty and accumulates exactly the bindings you chose, so every line has a reason you can recall. gpakosz/.tmux starts complete and asks you to subtract or override, which is why the README's troubleshooting covers #!important.

The practical trade is time against control. The maintained configuration gives you a status line with battery and uptime, SSH and Mosh aware splitting, pane maximization and a mouse toggle on day one, and it keeps those consistent across machines because the main file is versioned. A hand-written file gives you nothing on day one and everything on day thirty, provided you keep at it. Neither is better in the abstract. The deciding question is whether you want to spend the next month tuning tmux or the next hour installing it.

One detail separates the two paths more than it first appears. With a hand-written file, a surprise binding is your own bug. With gpakosz/.tmux, a surprise binding is usually the main configuration winning over your local file, and the fix is the #!important marker rather than a rewrite. That is a smaller edit but a less obvious one, and it is the thing to internalize before you start customizing.

Maintenance, Upgrades and Licensing

The repository is not archived, and the last push was on 2026-10-21. The repository publishes no releases, so the project's distribution model is the master branch itself: the automatic install fetches install.sh from refs/heads/master, and the manual instructions use git clone --single-branch. There is no tagged version to pin to, which means an upgrade is a pull of the main configuration. Because your edits live in.tmux.conf.local, that pull does not touch them, and any upstream change that conflicts with a local override is where the #!important marker earns its keep.

The cost of ownership is therefore low but not zero. You maintain one file, and you re-check it after pulling. Backing up before installing, as the README suggests, is the recovery step it names up front, and your git history covers the rest.

On licensing, the repository root contains LICENSE.MIT and LICENSE.WTFPLv2, and the project metadata lists MIT as the licence. Two licence files in one repository is a detail worth reading before you redistribute the configuration inside your own product; read both files, and this is not legal advice.

Editorial conclusion

Adopt gpakosz/.tmux if you want a working tmux status line, mouse toggle and C-a prefix without assembling plugins, and you accept that your edits belong in .tmux.conf.local rather than in the main file. Skip it if you already maintain a hand-written tmux.conf you understand line by line, or if the machine cannot run awk, perl, grep and sed. Before installing, confirm tmux is at least 2.6, back up the existing configuration, and check that TERM is set to xterm-256color outside tmux, because the README names that as a requirement. After installing, open .tmux.conf.local and make one change there to confirm the override path works before you rely on it.

Frequently asked questions

How do I install Oh my tmux!?

The README gives an automatic one-line install that pipes install.sh into bash, and manual steps that clone the repository, symlink .tmux.conf, and copy .tmux.conf.local into place. It supports installing in ~, $XDG_CONFIG_HOME/tmux or ~/.config/tmux, and notes that the file names lose the leading dot in the two config-directory locations.

What are the requirements for gpakosz/.tmux?

The README requires tmux 2.6 or newer on Linux, macOS, FreeBSD, OpenBSD or Windows via WSL or Cygwin, with awk, perl, grep and sed available. Outside tmux, TERM must be set to xterm-256color.

Can I use Oh my tmux! on Windows?

The README lists Windows support through WSL or Cygwin, and marks Cygwin as not recommended. No native Windows path is described.

How do I use Oh my tmux! on macOS?

The README lists macOS among the supported systems and gives the same install steps as elsewhere: run install.sh, or clone the repository, symlink .tmux.conf and copy .tmux.conf.local. It notes that tmux 2.6 or newer is required and that TERM must be xterm-256color outside tmux.

How do I use Oh my tmux! on Linux?

The README lists Linux among the supported systems. On Linux, clipboard copy additionally needs xsel, xclip or wl-copy, and a broken or duplicated status line can appear when glib 2.50.1 or newer is paired with glibc older than 2.26.

How do I use Oh my tmux! over SSH?

The README lists SSH and Mosh aware username and hostname status line information, and SSH and Mosh aware pane splitting with automatic reconnection to the remote server, among the configuration's features.

Official sources

  1. gpakosz/.tmux on GitHub
  2. Issues
  3. License: MIT
  4. README
Add this badge to your README

If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.

Add this badge to your README

markdown
[![Hysen Labs](https://hysenlabs.com/badge/gpakosz-tmux.svg)](https://hysenlabs.com/projects/gpakosz-tmux)

Star history chart for your README

markdown
[![Star history](https://hysenlabs.com/chart/gpakosz-tmux.svg)](https://hysenlabs.com/projects/gpakosz-tmux)

Was this useful?