┌────────────────────────┐
│                    sway│  Paneception
│ ┌───────────────┐      │  “Downward is the only way forward.”
│ │           tmux│      │
│ │ ┌──────┐      │      │
│ │ │   vim│      │      │
│ │ │      │      │      │
│ │ │      │      │      │
│ │ └──────┘      │      │
│ └───────────────┘      │
└────────────────────────┘

I reinstalled Tmux.

I had been using i3, then Sway, since 2017 to navigate through window panels and open a terminal quickly on demand for swift command execution. But after installing NixOS on my laptop, I wanted to encapsulate libraries, required services, and environment variables of my personal and work projects into Nix files that I could load with nix-shell. When opening a new Kitty terminal window with Sway, the new instance does not inherit the state of the previous shell. I could have a simple script in the Sway configuration that, on the new window event, moves the user to the working directory and triggers the nix-shell command again if a default.nix file is present. However, I don’t really like to rely on extra configuration of my window manager to manage my programming workflow.

In fact, I was really inspired by Mitchell Hashimoto’s experience with Nix¹². Simply put, a Nix-configured virtual machine delivers portability and reproducibility that guarantee a perfectly controlled experience on very good hardware; in his case, an Apple MacBook Pro. What if one day I wanted to develop with my full Neovim configuration, complete with all my shell aliases and scripts, on a virtual machine running on a lightweight iPad? By the time I decide to buy one, the performance will likely surpass that of my three-year-old laptop. What if I wanted to code from a distant VPS?

To maintain a simple environment, I don’t want window manager dependencies in it. I want to try to develop and manage projects from a single workspace pane, hence my return to the trusty tmux. A tmux session can open and close nested panes with the nix-shell-inherited sandboxing.

I could also revive my ossified Vim skills to manage everything from the editor in multiple buffers, but for now, the courage is lacking.

Some current commands:

vim tmux sway
New vertical pane :vsplit Ctrl+a % Mod+Enter
New horizontal pane :split Ctrl+a " Mod+v Mod+Enter
Close current pane :q Ctrl+x y Mod+Shift+q
Move cursor top Ctrl+w k Ctrl+a k Mod+k
Move cursor bottom Ctrl+w j Ctrl+a j Mod+j
Move cursor left Ctrl+w h Ctrl+a h Mod+h
Move cursor right Ctrl+w l Ctrl+a l Mod+l