In this post, I will go through steps to set up a primary environment for development. When choosing a tool for development, make sure that it is available across multiple platforms (macOS, Windows, Linux). And also, make sure the tool you choose gives you the option to save your configuration in a file so that if your system crashes or if you are moving to a new system, the tool should load from your saved configuration to your desired state, which will save your time by avoiding setup from scratch. All tools discussed below support cross platforms and give the option to save your configuration.

Terminal Emulator

First, choose your terminal emulator; each platform has a default terminal emulator. My recommendation would be to go with Alacritty or kitty. Alacritty is a lightweight cross-platform OpenGL terminal emulator. Please refer to this post Terminal Emulator on configuring Alacritty.

Shell

Once the terminal emulator is started, a shell will be loaded by default. Next, choose your shell; all OS have bash installed by default. My recommendation would be to go with zsh. Please refer to this post Steps to customize Zsh on setting up zsh. With the above setup, you should have all the features like configuring command prompt to include git, Kubernetes, auto-suggestions, quick jumping between directories, quick access to your files, etc. Another option would be to go with fish which comes with batteries included, but it has limitations; it’s not POSIX complaint

Terminal Multiplexer

Primarily you won’t be working on one terminal window; you might start a server in one window and do something else in another, you need to have a terminal multiplexer to quickly move between sessions and windows. Next, choose your terminal multiplexer. There are majorly two options - screen and tmux. My recommendation would be to go with tmux. Please refer to this post Steps to customize tmux. With this now, you should be able to move between multiple sessions, windows quickly, and split panes, and you should be able to start the default set of applications in various windows using save and restore sessions.

Editors

Now it’s time to choose your editor; as a developer, you will be spending most of the time reading and writing code. There are many editors available. I have been using Vim for the past 15 years, so my first recommendation would be Vim. Please refer to this post Steps to customize Vim. I am also currently using neovim which supports Lua, please refer to this post Steps to customize neovim. Emacs is much more than an editor. You can configure your complete system using emacs. Please refer to this post Steps to customize emacs. Next would be Visual Studio Code, which comes with batteries included, but you might not be able to configure or customize much like Vim or Emacs. Please refer this post Steps to customize Visual Studio Code. You can choose all of the above and switch editors based on your editing file.

Package Manager

Most operating systems come with a default package manager, for Debian based GNU/Linux, it is apt, for RedHat based GNU/Linux is yum; for Arch GNU/Linux, it is pacman. In macOS, you can use brew. You can dump all the apps you currently installed using the brew in a file using the command brew bundle dump -f, which will create Brewfile, which you backup, and if you move to a new system, you can load using brew bundle (Brewfile should be there in the current directory). For Windows you can use either Scoop or Chocolatey.

Window Manager

Most operating systems will provide some basic window manager which supports workspaces. For Example, in MacOS mission control to create workspaces and move windows to workspaces, you can use keyboard shortcuts like Ctrl + right arrow. In Windows, you can use Ctrl + Windows + right arrow to move between workspaces and Windows + right arrow to move the window right half of the screen.

My recommendation would be to go with Magnet for macOS. If you want a more advanced window manager, please look at Amethyst and Yabai .For Linux, you have multiple options; my recommendation would be to go with i3. Please refer to this post - Setting up i3 window manager in Ubuntu.

Clipboard Manager

On macOS, you can use Alfred powerpack (this is paid version) to search clipboard history; this is a handy tool when copying text/images across applications and saves you much time. On Windows, by default, you will get a basic clipboard manager when you do Win + v, but you cannot search the clipboard here. In Linux CopyQ, this is available across Windows, macOS, and Linux platforms.

Password Manager

I recommend you to get familiar with Crytography Basics and start using Password Managers to store sensitive data. As a developer, you will mostly share sensitive information (database or service credentials) with your colleague. You can use these tools to store and share.

Notes Manager (Second Brain)

Due to limited brain storage, we need to rely on storing information in another brain - Notes. Many apps let you store notes, and I suggest picking a note-taking app that is secure and syncs between your devices. Consider looking at Logseq, Obsidian and Roam Research these provide bi-directional linking of notes and also gives graphs to your notes. Also check Notion and Evernote.

Keyboard and Mouse

Choose a good keyboard and mouse; there are many good options. I recommend using low profile keychron keyboards. Currently, I am using Keychron K1 Wireless Mechanical Keyboard (Version 4). The best mouse is Logitech MX Master 3. Above keyboard and mouse supports up to 3 systems, meaning you can switch between 3 systems using buttons on keyboard or mouse. Both do not need any additional batteries, and both come with an in-built rechargeable battery.

Sharing keyboard and mouse across systems

If you have multiple systems on your desk, then you can share the keyboard and mouse using software like Barrier or Synergy. You need to make one system as server and rest as clients and configure the server with the location of the client (left of server or right of server). In this way, you can use only one keyboard and mouse for multiple systems.

Browser plugins

Below are some browser plugins that are available in most browsers.

  • Dark reader - protect your eyes. Use dark mode on all websites.
  • HTTPS Everywhere - make sure you are using HTTPS version of the site to protect your data.
  • uBlock origin - block Ads and malicious popups.
  • Vimium - Bring Vim to the browser; this gives most of the vim bindings to be used in the browser. My favorite is T to search for opened tabs (I open a lot of tabs) and `O’ to search browser history and open in a new tab.
  • Firenvim - With this, you can use system neovim in any edit section in the browser.

Mobile

If you are on Android, you can install Termux. You can refer to this post on how to configure Termux. With Termux, you will have all the Unix tools available on your phone.

Conclusion

Now that you have configured most of the tools. You can store all the above configurations in Github. You can find my dotfiles here. Now it’s time to get back to work 😊. – RC