DEV Community

Chris Dawkins
Chris Dawkins

Posted on

Declare and version control you tmux sessions

Anyone who spends a significant amount of time in the command line understands how tedious and cumbersome managing multiple tmux sessions can be. Many programmers find themselves switching between a variety of projects of different languages and sizes on a daily basis. With tmuxp you can declare what a tmux session for a project should look like using json/yaml.

A simple declaration that fetches from a remote repo and opens neovim in one window with bottom running in a second.

# ~/example/.tmuxp.yaml
session_name: Swoll Sesh
start_directory: ~/example
windows:
    - window_name: nvim
      panes:
        - shell_command:
          - git fetch
          - nvim .
    - window_name: monitor
      panes:
        - shell_command:
          - btm
Enter fullscreen mode Exit fullscreen mode

To start this session just run:

tmuxp load ~/example
Enter fullscreen mode Exit fullscreen mode

This file can then be version controlled, keeping your developer environment organized, consistent and reusable. You can find more examples in the documentation

Combining this with one of the session management plugins for neovim/vim means that your editor will automatically open where you want it.

This can be even further expanded with nix, flakes, direnv, and nix-direnv to give you a fully automated and reproducible developer environment complete with the environment variables and dependencies needed to start hacking on a project.

Top comments (0)