Jump to content

Tmux: Difference between revisions

From Official NixOS Wiki
m Split blocks for more obvious reading
Add installation section and make sections follow MoS better.
 
Line 1: Line 1:
[https://github.com/tmux/tmux/wiki tmux] is a "terminal multiplexer: it enables a number of terminals (or windows), each running a separate program, to be created, accessed, and controlled from a single screen. ''tmux'' may be detached from a screen and continue running in the background, then later reattached."
[https://github.com/tmux/tmux/wiki tmux] is a "terminal multiplexer: it enables a number of terminals (or windows), each running a separate program, to be created, accessed, and controlled from a single screen. ''tmux'' may be detached from a screen and continue running in the background, then later reattached."


== Installation ==


== Global configuration ==
==== Shell ====
To temporarily use tmux in a shell environment without modifying your system configuration, you can run:
{{Code|$ nix-shell -p tmux|lang=bash}}
This makes the tmux available in your current shell. You can then launch tmux by typing <code>tmux</code>.
 
==== System setup ====
To install tmux system-wide, making it available to all users, add the following to your configuration:{{File|3=environment.systemPackages = [
  pkgs.tmux
];|name=/etc/nixos/configuration.nix|lang=nix}}
Alternatively, enable the NixOS module to manage tmux declaratively:
{{File|3=programs.tmux.enable = true;|name=/etc/nixos/configuration.nix|lang=nix}}After rebuilding your system with <code>nixos-rebuild switch</code>, tmux will be installed and accessible.
 
== Configuration ==


{{nixos:package|tmux}} can be configured globally from <code>/etc/nixos/configuration.nix</code>.
{{nixos:package|tmux}} can be configured globally from <code>/etc/nixos/configuration.nix</code>.


As an example:
As an example:
<syntaxhighlight lang="nix">
{{File|3=programs.tmux = {
programs.tmux = {
   enable = true;
   enable = true;
   clock24 = true;
   clock24 = true;
Line 14: Line 26:
     ...
     ...
   '';
   '';
};
};|name=/etc/nixos/configuration.nix|lang=nix}}
</syntaxhighlight>


Note that <code>extraConfig</code> writes directly to <code>/etc/tmux.conf</code>
Note that <code>extraConfig</code> writes directly to <code>/etc/tmux.conf</code>


 
==== Using Plugins ====
=== Using Plugins ===
 
Tmux plugins can be also configured using <code>programs.tmux.plugins</code>. They can be found as NixOS packages: [https://search.nixos.org/packages?type=packages&query=tmuxPlugins tmuxPlugins]. Each of the tmux plugin is run via <code>run-shell</code> automatically.
Tmux plugins can be also configured using <code>programs.tmux.plugins</code>. They can be found as NixOS packages: [https://search.nixos.org/packages?type=packages&query=tmuxPlugins tmuxPlugins]. Each of the tmux plugin is run via <code>run-shell</code> automatically.


Some plugins need to be run after having had some custom configuration done>, but extraConfig gets executed after. For example <code>tmuxPlugins.cpu</code> needs the status line be declared before the plugin is run. For that scenario, <code>run-shell</code> can be added within <code>extraConfig</code>:
Some plugins need to be run after having had some custom configuration done>, but extraConfig gets executed after. For example <code>tmuxPlugins.cpu</code> needs the status line be declared before the plugin is run. For that scenario, <code>run-shell</code> can be added within <code>extraConfig</code>:
<syntaxhighlight lang="nix">
{{File|3=programs.tmux = {
programs.tmux = {
   enable = true;
   enable = true;
   extraConfig = ''
   extraConfig = ''
Line 33: Line 41:
     run-shell ${pkgs.tmuxPlugins.cpu}/share/tmux-plugins/cpu/cpu.tmux
     run-shell ${pkgs.tmuxPlugins.cpu}/share/tmux-plugins/cpu/cpu.tmux
   '';
   '';
};
};|name=/etc/nixos/configuration.nix|lang=nix}}
</syntaxhighlight>
 
== Per-user configuration ==


==== Per-user configuration ====
However, if you want to configure per user, you could use [[Home Manager]]. This also grants you with more options available directly through nix, as opposed to through an extra config option. Though it should be noted that a few of the options have different names.
However, if you want to configure per user, you could use [[Home Manager]]. This also grants you with more options available directly through nix, as opposed to through an extra config option. Though it should be noted that a few of the options have different names.



Latest revision as of 21:27, 13 May 2026

tmux is a "terminal multiplexer: it enables a number of terminals (or windows), each running a separate program, to be created, accessed, and controlled from a single screen. tmux may be detached from a screen and continue running in the background, then later reattached."

Installation

Shell

To temporarily use tmux in a shell environment without modifying your system configuration, you can run:

$ nix-shell -p tmux

This makes the tmux available in your current shell. You can then launch tmux by typing tmux.

System setup

To install tmux system-wide, making it available to all users, add the following to your configuration:

❄︎ /etc/nixos/configuration.nix
environment.systemPackages = [
  pkgs.tmux
];

Alternatively, enable the NixOS module to manage tmux declaratively:

❄︎ /etc/nixos/configuration.nix
programs.tmux.enable = true;

After rebuilding your system with nixos-rebuild switch, tmux will be installed and accessible.

Configuration

tmux can be configured globally from /etc/nixos/configuration.nix.

As an example:

❄︎ /etc/nixos/configuration.nix
programs.tmux = {
  enable = true;
  clock24 = true;
  extraConfig = '' # used for less common options, intelligently combines if defined in multiple places.
    ...
  '';
};

Note that extraConfig writes directly to /etc/tmux.conf

Using Plugins

Tmux plugins can be also configured using programs.tmux.plugins. They can be found as NixOS packages: tmuxPlugins. Each of the tmux plugin is run via run-shell automatically.

Some plugins need to be run after having had some custom configuration done>, but extraConfig gets executed after. For example tmuxPlugins.cpu needs the status line be declared before the plugin is run. For that scenario, run-shell can be added within extraConfig:

❄︎ /etc/nixos/configuration.nix
programs.tmux = {
  enable = true;
  extraConfig = ''
    ...
    set -g status-right '#[fg=black,bg=color15] #{cpu_percentage}  %H:%M '
    run-shell ${pkgs.tmuxPlugins.cpu}/share/tmux-plugins/cpu/cpu.tmux
  '';
};

Per-user configuration

However, if you want to configure per user, you could use Home Manager. This also grants you with more options available directly through nix, as opposed to through an extra config option. Though it should be noted that a few of the options have different names.

See also