Skip to main content

A Modern Shell and Window Manager

An All in One CLI

Software • 2024-11-02 • 448 words • 3 mins

The Idea #

For almost a half-dozen years, I have been toying with the idea of ditching Visual Studio Code and moving my development in to the terminal. When I started thinking about it, I set out some steps to follow:

  1. Swap from bash to zsh - I like the look and utility of the prompts available
  2. Find a way to manage and sync my CLI environment between hosts, with backup and restore
  3. Add a terminal window manager like screen or tmux
  4. Install and learn vim/neovim
  5. Configure the window manager to function like an IDE with different sessions, windows, panes, etc
  6. Configure neovim to work seamlessly with the window manager to complete the IDE

Current State #

In 2018 or so, I made the switch to zsh, with oh-my-zsh as the manager. Then a year or two later I created a repo on my self-hosted Gitlab which I cloned to each of my hosts under ~/.user.d - in that folder I put all my dot-files and sym-linked to them from their original location. Some time in 2021 I decided to revisit byobu as a window manager, opting for the screen based variant and installed neovim and configured it as my preferred editor. AAnd that is pretty much where my progress stalled.

I still use my old command line editor mcedit (part of midnight commander) more often than neovim, mostly due to muscle memory. And I haven’t managed to get byobu-screen to function like an IDE in any way, besides having a default window config that opens up around 17 different windows for the different things I use my primary server’s command line for.

Next Steps #

So here, in late 2024, I am rebooting my efforts with a slightly list of steps to take, based on what I have learned in the first attempt:

  1. Either continue with zsh or swap to fish
  2. Ditch my cobbled-together dot-files management solution and swap to chezmoi
  3. Use tmux rather than screen for window management, and start with a plain tmux config rather than use byobu or similar wrappers
  4. Create two aliases:
    • /usr/bin/vim as mcedit - to prevent my muscle memory interfering with me learning neovim
    • /usr/bin/mcedit as stopusingmcedit - so I can still use mcedit if I really need to, but will get a reminder to stop using it every time I do
  5. Configure tmux to function like an IDE
  6. Configure neovim to work seamlessly with tmux to complete the IDE experience

Finally, in a last ditch effort to keep myself accountable and pursuing my goal, I will be documenting the steps I take, more as a how I did than a how to guide, in case any one else is in the same situation.