Windows Setup for a Linux Enthusiast
a FOSS-first, developer-centric approach
15 min read
In my previous post, I focused on my personal journey and experience with Linux, which has become my default OS on my personal laptop. However, I have been using Microsoft Windows for a long time, and I still use it everyday, particularly at work (which has nothing to do with writing code!). In fact, my custom-built PC runs Windows 10. So, in this post, I'll give an overview of my typical Windows setup from a developer and Linux enthusiast's perspective.
General Approach and Underlying Principles 📋
The challenge of working on different machines at different times means that one has to adjust his/her workflow depending on the constraints and limitations imposed by a machine. For example, I am so accustomed to the "hot corners" in the GNOME shell, to the extent that I sometimes move my mouse to the left corner of the screen when I am on a Windows Computer, and expect to see the Activities overview!
Therefore, it becomes imperative for me to ensure that there is a certain level of uniformity / similarity across the different computers that I use, despite differences in OSes and hardware. My approach towards achieving this involves
- using similar software (which means choosing cross-platform applications that run on Win/Linux/Mac OS X, for example, VS Code, LibreOffice, VLC media player, etc.).
- setting up similar (dev) environments, including tools and toolchains, etc. For example,
- I use
virtualenvwrapperfor managing my Python virtual environments. However,
virtualenvwrapperisn't supported on Windows. Fortunately, someone ported it to Windows, and the windows port provides the same functionality. This is the same for
pyenv, which also has a windows port.
- I often write custom BASH scripts, and use the CLI a lot. I therefore ensure that my BASH scripts will also run on Windows, and that I am able to use the same set of CLI tools that I'm accustomed to (e.g.
- I use
If I was doing something on my Linux notebook and needed to continue on a Windows workstation (and vice-versa), I should be able to hit the ground running without having to jump through hoops just to get things working as expected.
With most of the software that runs on Linux being Free and Open Source (FOSS), I have naturally become inclined towards FOSS, and this has also influenced my typical Windows setup. For example, I use inkscape for vector graphics – It is cross-platform and is licensed under the GNU General Public License, v2.
Okay, enough talking, let's get to it. 🚀
*nix Environment and Console Emulator 🖥️
It has often been said that many developers prefer and recommend UNIX-like systems. I am one of those developers, and I think Microsoft has realized this, otherwise they wouldn't have introduced WSL.
While WSL is gaining a lot of traction and appears to be popular, I haven't really explored it, and I am not quite ready for it at the moment. I have used vagrant before, but I abandoned it because I more-or-less transitioned to focusing my development efforts on an actual Linux machine.
Cygwin is currently my number one choice when it comes to setting up a *nix environment on Windows. It has been around for a long time, way before WSL came onto the scene. The project has really grown over the years, and it continues to be actively developed. Setting it up is a breeze, and I think it integrates pretty well with Windows. You can see my cygwin terminal below, with ohmyzsh and the powerlevel10k theme!
I use my cygwin terminal for so many things, including running BASH scripts and connecting via SSH into remove Linux servers (which means that I don't need Putty) and so on. The custom functions and ENV variables defined in my Cygwin
.zshrc file are more-or-less the same as the ones on my traditional Linux setup.
If you've used the awesome terminal emulators that are available on *nix systems, you will realize that the default windows command prompt leaves much to be desired. This is where cmder comes in, it is truly a gem. One of the things I like about cmder is that it also includes Git for Windows, so there's no need to install the latter. I even configure VS Code to use this terminal instead of Windows' built-in CMD.
Text Editors / IDEs ⌨️
When I just got started into the world of programming, I heavily used NetBeans for my Java work. However, nowadays I prefer working with text editors – they are much more lightweight and still get the job done.
- I always install Sublime Text on my machines – I use it as my secondary text editor.
- I always replace Notepad with notepad2-mod, because I just can't stand Notepad!
- vim is a fantastic text editor. I use it whenever I'm editing files on the terminal. I therefore only have it installed via cygwin (I use the Janus distribution, which comes with lots of batteries included). Previously, I'd have a standalone, native Windows installation, but I noticed that I didn't use it much.
For Android development, it seems Android Studio is unavoidable, so one has to have it installed on their machine. I have started learning Kotlin, and IntelliJ IDEA seems to be highly recommended. I already installed it on my Fedora-powered laptop, so I'll probably also install it on my Windows workstation.
Tech Stack / Other Developer Tools 👩💻👨💻
- Python – I use the official windows python installer from python.org.
- Node.js – I use the official windows installer from nodejs.org, and I normally go for the latest LTS version. I use yarn 1.x for most of my projects, so it goes without saying that it must be installed.
- Java Development Kit – I prefer using OpenJDK (v8, which is LTS and supported until May 2026), and I use the binaries from github.com/ojdkbuild/ojdkbuild.
- If you don't want to experience headaches while installing some python and node JS libraries, you have to install Build Tools for Visual Studio.
- Postgres / PosGIS: On Windows, I prefer the EnterpriseDb Windows PostgreSQL distribution. After installing the main package, I then use the StackBuilder to install PostGIS.
- MongoDB – previously, I'd install the official MongoDB Community Server. However, sometimes you don't need to go through the trouble of installing and configuring the server, so cloud services like MongoDB Atlas come in handy.
- Docker – it's a given, every developer needs to have Docker installed on their machine, right?
- DB Browser for SQLite – a visual, open source tool to create, design, and edit database files compatible with SQLite.
- Zeal – an offline documentation browser for software developers. Mac Users have Dash.
Office Suite / Document Management / PDF Tools 📝
- Most people rely on office suites for spreadsheets, word processors and presentation tools. Because the default office suite on Linux systems is LibreOffice, I have grown to like it and I always ensure that it's installed on my Windows machine.
- On Windows, I use Adobe Acrobat Reader for viewing PDFs. I also tend to install Sumatra PDF, which is an Open Source alternative. Both tools are currently not available on Linux (Adobe Acrobat Reader used to be supported on Linux but support was discontinued in 2013).
- pdftk is the swiss-army knife for PDF operations like merging, splitting, rotating, etc. I use it quite often for such operations.
- I use LaTeX for writing certain documents such as my CV, technical reports and academic assignments. I have also used it in conjunction with inkscape to design things like brochures, flyers, invitation cards and so on. In 2018, I used LaTeX to typeset a book for a friend. TeX Live is my TeX distribution of choice on all platforms.
- Pandoc is another must-have swiss-army knife for converting files from one markup format into another. For example,
docx, etc. It's such a powerful tool.
- Sometime you want to download a webpage as PDF. There are a lot of online tools to do this, as well as browser extensions. However, as a developer and Unix geek, it's always good to have a CLI tool you could easily incorporate in your scripts and automate some boring tasks.
wkhtmltopdfis the right tool for this job.
- I have become so used to writing in markdown, that I often do so when taking quick notes, writing down ideas or planning something. When I need to print my markdown documents, or send the output to someone, I convert the markdown to pdf using mdpdf – a Node.js package which provides an awesome CLI tool and has support for page headers, footers, and custom stylesheets.
- On a computer with Microsoft Office, I like to have OfficeToPDF – a command line utility that converts Microsoft Office 2003, 2007, 2010, 2013 and 2016 documents from their native format into PDF using Microsoft Office's in-built PDF export features. Very useful for batch processing. At my previous job, I used it extensively to convert several
.docxdocuments into PDF.
- I am yet to explore calibre, a cross-platform e-book manager. I have heard so much about it but have never really looked at it.
- I remember having used datacrow several years ago to catalogue my (physical) books. I haven't used it in a very long time, and I probably even lost the old database! I have so many books (you can see some of them below) and sometimes people borrow them and you forget who borrowed which book. I need to get back to using an electronic system to catalogue my books and manage them. If you are reading this and you happen to be the one who borrowed my copy of Informal, please bring it back!
Graphic Design / Image Editing 🖌️
- I have already mentioned inkscape. It's a must have for me on any computer that I use. I'm not a graphic designer, but I do create simple graphics from time to time, and being a web developer, I work with SVG quite often, so inkscape is indispensable.
- Simply put, GIMP is to Photoshop as Linux is to Windows! I always have GIMP installed for image editing tasks.
- Scribus is an open source, cross platform page layout program, similar to Adobe InDesign. Even though I tend to install it, I hardly use it because I rarely do layout and page design work. However, when I do have to do such work, I often end up hacking a solution using LaTeX and inkscape, because I haven't taken the time to learn Scribus and practice using it.
Media Players / Streaming 📺🔊
- I use VLC for watching videos. Previously, I used SMPlayer, which runs on Linux and Windows. It was when I had a MacBook (somewhere between 2017 and 2019) that I made the switch to VLC, because SMPLayer wasn't and still isn't available on Mac OS X. Before SMPlayer, I used KMPlayer. I think I stopped using it because it wasn't available on Linux. You see, cross-platform support is really an important factor for me!
- Back in the day, winamp was my number one audio player (whatever happened to it?). It's a Windows-only software, and when I started using Linux, my choice of audio player was driven by its resemblance to Winamp in terms of features and audio quality. I have been using clementine on all platforms, even though it looks like it's been stuck at v1.3.1 since April 19, 2016. I'm glad to see that the project is still being actively developed and there's ongoing work towards v1.4.0, which, at the time of this writing, is at RC stage. There's a clementine fork called Strawberry Music Player, but I'll stick with clementine for now. There's also this Windows-only audio player called Dopamine, which I think is pretty cool. I discovered it around 2019 and used it for a while, but later decided to just stick to using clementine, so that I have the same experience on Linux, Windows or Mac OS.
- Since March 2021, I have been using Spotify for streaming music. It's installed on my Windows PC, Linux laptop, Android phone and on a Roku device.
- I previously used gPodder to download podcasts. However, I now use Google Podcasts to stream podcasts, so I don't see the need to install gPodder anymore.
AV Tools / Media Conversion 🎛️
- Handbrake is a cross-platform tool for converting video from nearly any format to a selection of modern, widely supported codecs.
- I can't do without ffmpeg. On Windows, I normally download the
release fullbuild from gyan.dev and add it to the System PATH so that I can use the
ffmpegcommand from anywhere.
- I find fre:ac very useful for converting audio files between various formats. It's open source and cross-platform.
- Mp3Tag is a household name when it comes to editing metadata for audio files. It's a very powerful tool with very nice features. It's only available for Windows (free) and Mac (US$19.99). On Linux, I use MusicBrainz Picard, which is open source and cross-platform.
- Audacity is an excellent piece of audio software, useful for multi-track audio editing and recording.
- Before the COVID-19 pandemic, I never paid attention to media streaming! Now, I have learnt how to use OBS Studio for live streaming and video recording!
Communication / Meetings 🤝👋
I tend to prefer Google Meet for simple meetings. No installation required, just open your browser
- On my personal computer, I use Mailspring as my email client. It has a nice, clean UI and comes with cool features such as Undo send, Read receipts and link tracking. I previously used Thunderbird, until I had challenges with setting up an Exchange Web Services (EWS) based email (This problem is actually solved by using ExQuilla – a Thunderbird addon).
Bible / Church Tools ✝️⛪
- Xiphos is an open-source Bible study tool offering a rich and featureful environment for reading, study, and research using modules (including commentaries, dictionaries, etc.) from The SWORD Project and elsewhere. Nonetheless, I use esv.org more often, because I have an account, and my notes, bookmarks, highlights, etc. are synced online.
- OpenLP is a feature rich open-source church presentation platform, very useful for displaying songs, Bible verses, presentations, images and more. It's written in python, which makes it a natural fit for a pythonista like me! I need to learn PyQt so I can contribute to its development!
- I need to explore the Ezra Bible App, including the source code.
Utilities / General Purpose 🛠️
- 7-Zip – a file archiver with a high compression ratio
- CCleaner – a utility used to clean potentially unwanted files and invalid Windows Registry entries from a computer. It is one of the longest-established system cleaners, first launched in 2004. It was originally developed for Microsoft Windows only, but in 2012, a Mac version was released. On Linux, I use Stacer and BleachBit.
- FreeFileSync – a folder comparison and synchronization software that creates and manages backup copies of all your important files.
- I use Syncthing to sync files and folders between my Linux laptop and Windows PC.
- Antivirus – I don't consider it necessary to install a third party antivirus software on my Windows PC. I consider Microsoft’s built-in Windows Defender to be good enough. As a developer, I sometimes find some Antivirus software to be a nuisance, and they tend to add unnecessary overhead to the OS. Well, that's me, please do your own research and ensure that you take the necessary precautions to secure your computer!
- HWMonitor – a hardware monitoring program that reads PC systems main health sensors; voltages, temperatures, fans. I recently came across Open Hardware Monitor, which performs the same function, and is also available for Linux.
- UltraDefrag – a disk defragmenter for Windows, which supports defragmentation of locked system files by running during the boot process.
- ShareX – a screenshot and screencast program for Microsoft Windows
- WordWeb – a full dictionary and thesaurus
- IrfanView is an image viewer, editor, organiser and converter program for Microsoft Windows. While I don't mind using the in-built Windows Photos app, I like IrfanView because of the added features. One of my favourite features is the one which allows one to open a geo-tagged photo in Google Earth or Google Maps.
- Sometimes, one needs to download videos from YouTube. youtube-dl is the right tool for the job. There's a Desktop GUI and a web app for those not comfortable with the CLI.
- InfraRecorder – an open source CD/DVD burning solution for Microsoft Windows
- UNetbootin allows you to create bootable Live USB drives for Linux distributions without burning a CD.
- Rufus does the same things as UNetbootin above, but also supports the creation of a Windows bootable USB.
- Transmission – an open source, cross-platform BitTorrent client, which comes installed by default on most Linux distributions.
- Package Management – In the Linux world, we use package managers to install software packages and automatically manage dependencies. Traditionally, Windows hasn't had one of these, which is why Rob Reynolds created chocolatey in 2011. I have just learnt about Windows Package Manager, which is currently in public preview. I'll try and explore this area further.
- Google Earth – the Earth on your desktop!
- GPSBabel converts waypoints, tracks, and routes between popular GPS receivers such as Garmin or Magellan and mapping programs like Google Earth or Basecamp
- QGIS – an Open Source, cross-platform GIS application. I use the OSGeo4W Network Installer, which includes GRASS GIS, geospatial libraries (PROJ, GDAL/OGR, GEOS, SpatiaLite, SAGA GIS), Python as well as many other geospatial related packages.
Project Management Software 📈
The following are open source alternatives to Microsoft Project. The first two are compatible with Microsoft Project. I usually install all three, and they are listed below in order of preference.
- GanttProject can also import from and export to Microsoft Excel
Web Browsers 🌐
That's all folks! 😉
Well, there you have it – a typical Windows desktop setup for a Linux geek! What's your setup like? What other cool and useful tools are out there that you think I should consider? What are your experiences working with multiple computers and multiple OSes? Please share your thoughts and comments below, or hit me up on Twitter 🐦.
Cover photo by Christian Wiediger on Unsplash 👍