In this post, I will share an overview of the software and tools that I use in my personal development environment in 2025.

Hopefully, you will find some inspiration and discover new tools that might improve your own workflow.

Hardware

I bought a new laptop in the end of last year, a Tuxedo InfinityBook Pro Gen9 AMD.

I was always a man of Asus laptops (My previous laptop was an Asus Zenbook S13 from 2019) but couldn´t find any suitable alternative and decided to give Tuxedo a try, and I am very happy with the purchase. The fact they are made in Europe, support Linux as first class citizen and provided a lot of customization options was a big plus for me.

I choose the 64GB RAM and 2TB SSD options. Might be a bit overkill for the daily use, but I wanted something future proof for a few years and with AI workloads becoming more common, plus VMs and containers, having some space to spare is a good thing.

I also went with the AMD version instead of Intel. I always had Intel laptops, but the with the latest issues with Intel CPUs and the fact that AMD has been catching up in terms of performance, I decided to give it a try.

It´s been rock solid so for, minus a few minor issues with the power managment and hibernation, which don´t really affect my daily use.

Operating System

I am a long time Linux user, and Fedora in particular. Fedora has been very stable and reliable for me, which IMO is one the most important things for a daily driver.

The software packages are a lot more up to the latest versions than other distributions like Ubuntu. Vanilla GNOME is also getting more polished with each release.

Window Management

An important part of a good development environment is the window management. I don´t want to think too much about how to arrange my windows, so I like to use a tilling window manager that can take care of that automatically.

I also don´t want to spend too much time configuring it, so I don´t use a full fledged tiling window manager like i3 or Sway. Instead, I use GNOME with the Pop Shell extension, which provides provides the best of both worlds.

I might replace it with Tilling Shell, which is more recent and actively maintained extension but that only recently got Automatic Tilling support. I am still testing it, but for now I am happy with Pop Shell.

Web Browser

I use Firefox as my main web browser. I have been using Firefox since the early days, and I find it to be the most privacy-friendly and customizable browser available. Not being based on Chromium is also a plus as helping fighting the Chrome monopoly on the web.

I use a couple of extensions to enhance my browsing experience, highlighting:

Of course, as a software engineer, I need to test my applications on other browsers, so I also have Chromium and Edge installed for testing purposes. I also use Brave for some specific use cases.

Command Launcher

A launcher is something that after you start using it, you can´t live without it. It´s one of my most essential productivity tools. It allows to quickly run applications, open websites, run commands, and more, without having to context switch between applications and it´s always right there, just a key press away.

In Linux, there are a few options available, not as polished as for example Raycast on macOS, but still good enough. I used Ulauncher in the past and have contributed with a lot of extensions to it, but them I discovered ScriptKit and I have been using it ever since.

While ScriptKit is more optmized for macOS and Windows, and some features like Application launcher are not available on Linux, it is still a very powerful tool that covers most of my needs. It´s also incredible easy to create cusotm scripts with simple Javascript and a few lines of code.

Some of the things I use ScriptKit for:

Code Editor

For my main code editor, I use VSCode. It is compatible with most programming languages, has a rich ecosystem of extensions, and the recently added AI features and Copilot integration make it a very powerful tool for software development. Recently,

I have been playing with Zed as well. Zed is still in early stages, but it has a lot of potential to become my main code editor in the future, when they implement a full featured extension system and improve some core features like test running and debugging that are still lacking compared to VSCode.

When in terminal, when I just need to edit some configuration files and I don´t want to open a separate application, I use LazyVim. It is a Neovim configuration that comes with a lot of plugins and features out of the box, making it very easy to get started.

Terminal and Shell

As an Software Engineer, I spend a lot of time in the terminal, so it´s critical for me to have a good and productive terminal setup.

I use Ghostty as my terminal emulator. It´s a relatively new terminal emulator, but it´s pretty lightweight and fast.

For the shell, I use Zsh with Antidote plugin manager. I have been using Zsh for a long time, and I find it to be a lot more powerful and flexible than Bash, mostly because of the plugins and themes available.

I have a few plugins that I use on a daily basis, such as:

For prompt, I use Starship. It´s a cross-shell prompt written in Rust, and it´s very fast and customizable.

zoxide helps me navigate my filesystem faster by remembering my most frequently used directories.

Zelijj is a modern terminal multiplexer alternative to tmux and screen that is written in Rust and it has a lot of features that I find useful.

FZF, fd and ripgrep are my go-to tools for searching and filtering files and directories to and build custom scripts. They are all very fast and efficient, and they integrate well with each other.

Finally, I am using Yazi as my terminal file explorer.

Working with Git

Git is an essential part of any modern software development workflow.

I use GitHub as my primary Git hosting service, but I also mirror all my repositories to a self-hosted Forgejo instance for backup purposes.

I always preferred to use the command line for Git operations, and I use LazyGit as my terminal UI for Git.

GitHub CLI facilitates working with GitHub from the command line, allowing me to create pull requests, issues, and manage repositories without leaving the terminal.

Finally, git-extras provides some additional Git commands to help with common tasks, such as undoing changes, generating changelogs, and more.

Containerization and Virtualization

I use Docker and Compose for containerization and managing my development environments. Docker allows me to create isolated environments for my applications, making it easier to manage dependencies and configurations.

To help managing my containers I use Lazydocker, on the terminal, and Portainer for a web-based UI.

ctop allows to monitor my containers and their resource usage at a glance and dive helps ensuring my Docker images are optimized and free of unnecessary files.

When I need a full fledged VM, I use libvirt with virt-manager. A VM is useful when I need to test a full OS installation or when or an application and I don´t want to mess with my host system. They can also be useful to play with test DevOps related tools like Kubernetes or distributed systems.

I use Kubernetes for container orchestration in some envrionments like my Home lab, and might use more in the future for deploying personal projects. K9s is my go-to terminal UI for managing Kubernetes clusters, providing a convenient way to interact with and monitor my clusters, directly from the terminal.

I also use Sterm for tailing logs from multiple pods at the same time, which can be useful for debugging Kubernetes applications.

For testing Kubernetes applications locally, I use KinD (Kubernetes in Docker). It allows me to create a local Kubernetes cluster using Docker containers and Flux for GitOps deployments. Flux helps me manage my Kubernetes resources and deployments using Git as the source of truth, making it easier to maintain and deploy applications in a consistent manner.

Managing Development Environments

One of the most challenging aspects of a development envrionment is managing the different tools, and dependencies required for each project, mostly when different projects might require different versions of the same tool or library.

While Docker and containerization help a lot with this, there are cases where it might be simpler to just run your project directly on your host system, without the overhead of a container. Thinks like CLI tools, libraries, scripts, and simple web applications.

For that, I use Nix and Devenv. Nix is a powerful package manager that allows me to create reproducible environments in a declarative way and Devenv sits on top, providing a more user-friendly interface to work with Nix, specifically tailored for development environments.

Another tool that integrated very well with those is Direnv. Direnv allows me to automatically load and unload environment variables based on the current directory, making it easy to switch between different project environments without having to manually set or unset environment variables. I use direnv to automatically load the Nix environment for each project when I navigate to its directory.

I didn´t stop using containers. I use both together. One of the main advantages of using something like Docker Compose is that you can have a multi container setup, with all the services, acessible from the docker internal network, without having to worry about port conflicts or other issues that might arise when running multiple services on the same host.

So I am using Nix for managing local development dependencies and then docker for running the actual services.

This setup is still something I am experimenting with. I might use Nix only setup for single service projects, and then docker for more complex setups, but I am still figuring out the best approach for my workflow.

Documentation

When I need to create documentation for my code related projects, I usually use MkDocs with the Material theme. It is a static site generator that is easy to set up and provides a clean and modern look for documentation websites.

I might also use VitePress. I like them both, it really depends on the project.

I use OpenAPI specifications to document my APIs, and I recently discovered this and this, which allows to integrate OpenAPI documentation into MkDocs and VitePress, respectively. This makes it easy to keep my API documentation up-to-date and accessible alongside my project documentation.

For diagrams and visualizations, Mermaid and Excalidraw are my go-to tools.

Snippets Management

Managing code snippets is a very important part of being a software engineer. I don´t use a dediced snippets manager, but I use Obsidian with a “Code Snippets” folder and a specific template, to storing my code snippets. This makes it easy to search my snippets and link them with other notes I might have. I have developed a script for ScriptKit, which allows me to quickly search and insert code snippets into my code editor, making it easy to reuse code across projects.

For saving terminal commands I use most, the-way is my currently used tool. Together with tldr-pages it´s a great way to keep track of useful terminal commands and how to use them.

Note taking and Personal Knowledge Management

I use Obsidian as my primary note-taking and personal knowledge management tool. Obsidian big advantage is that it stores my notes in plain markdown files, which makes it easy to back up and sync across devices. I use GitHub for that.

It also has a powerful plugin system that allows to extend it´s core functionality.

For qucik and temporary notes, I use Iotas. This is more of a scratchpad for quick notes and ideas.

Task Management

For task management, I use TickTick and GitHub Projects, for code related tasks.

Database Management

I use DBeaver as my primary database management tool. It supports a wide range of databases and provides a powerful SQL editor, data visualization, and management features.

API Development and Testing

I have switched a lot between API development tools. I used Postman, Insomnia, but all of them ended up suffering from enshitification, so right now I am on UseBruno. I like that the API requests are stored as plain text files, which allows to be stored in version control systems like Git. I am having an eye on Yaak which is a new tool from the creators of Insomnia.

Networking tools

Secrets Management

Other Tools

Conclusion

I am very happy with my current setup, but I am always looking for ways to improve my productivity and workflow, so who knows how that will look like in 2026. Stay tuned for a 2026 update!

I hope this overview was useful and that you discovered some new tools you might want to try. Remember that the best tools are the ones that work for you and your workflow. It´s good to take inspiration from others, but always adapt to your needs and preferences.

Thanks you reading.