uuid: - value: 4a206e60-833c-4abd-bcc4-b97d8617f3ee langcode: - value: en type: - target_id: daily_email target_type: node_type target_uuid: 8bde1f2f-eef9-4f2d-ae9c-96921f8193d7 revision_timestamp: - value: '2025-06-09T19:58:56+00:00' revision_uid: - target_type: user target_uuid: b8966985-d4b2-42a7-a319-2e94ccfbb849 revision_log: { } status: - value: true uid: - target_type: user target_uuid: b8966985-d4b2-42a7-a319-2e94ccfbb849 title: - value: 'tmux is my session manager' created: - value: '2025-06-09T19:42:40+00:00' changed: - value: '2025-06-09T19:58:56+00:00' promote: - value: false sticky: - value: false default_langcode: - value: true revision_translation_affected: - value: true path: - alias: /daily/2025/06/09/tmux-my-session-manager langcode: en body: - value: |- If you're subscribed to my mailing list, listened to a podcast episode or watched any of my presentations or live streams, you'll probably know that I use a command line-based approach to software development. I use NixOS as my operating system, Neovim and tmux for coding, and various other command-line tools as part of my daily workflow. tmux is a terminal multiplexer - a tool to run multiple sessions, windows and panes within the same terminal. I have one session per project or directory, each with its own windows and panes to run Neovim and other tools to work on that project. YouTube and Twitch streamer rwxrob said that tmux was his window manager, based on how he used it to organise his desktop. tmux is my session manager. As well as being able to easily switch between codebases, each has it's own startup script that bootstraps the project for me. This is the script for my website: ```bash PATH="${PATH}:./vendor/bin" tmux new-window -dn scratch tmux new-window -dn server tmux new-window -dn tailwindcss -c "themes/opdavies" tmux send-keys -t server "drush runserver" Enter tmux send-keys -t tailwindcss "tailwindcss --input css/tailwind.css --output build/tailwind.css --watch" Enter nvim . ``` It creates windows for scratch commands, starts a web server with Drush, starts Tailwind CSS to generate any new styles and opens Neovim. Some are simpler and some are more complex, but it reduces the friction between switching projects and makes it quick and simple. format: markdown processed: |

If you're subscribed to my mailing list, listened to a podcast episode or watched any of my presentations or live streams, you'll probably know that I use a command line-based approach to software development.

I use NixOS as my operating system, Neovim and tmux for coding, and various other command-line tools as part of my daily workflow.

tmux is a terminal multiplexer - a tool to run multiple sessions, windows and panes within the same terminal.

I have one session per project or directory, each with its own windows and panes to run Neovim and other tools to work on that project.

YouTube and Twitch streamer rwxrob said that tmux was his window manager, based on how he used it to organise his desktop.

tmux is my session manager.

As well as being able to easily switch between codebases, each has it's own startup script that bootstraps the project for me.

This is the script for my website:

PATH="${PATH}:./vendor/bin"

      tmux new-window -dn scratch
      tmux new-window -dn server
      tmux new-window -dn tailwindcss -c "themes/opdavies"

      tmux send-keys -t server "drush runserver" Enter
      tmux send-keys -t tailwindcss "tailwindcss --input css/tailwind.css --output build/tailwind.css --watch" Enter

      nvim .
      

It creates windows for scratch commands, starts a web server with Drush, starts Tailwind CSS to generate any new styles and opens Neovim.

Some are simpler and some are more complex, but it reduces the friction between switching projects and makes it quick and simple.

summary: '' field_daily_email_cta: { }