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
- Shell
- Terminal Multiplexer
- Editors
- Package Manager
- Window Manager
- Clipboard Manager
- Password Manager
- Notes Manager (Second Brain)
- Keyboard and Mouse
- Sharing keyboard and mouse across systems
- Browser plugins
- Mobile
- Conclusion
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
Comments