I’ve been using Linux personally for around 6 years now and professionally as a PHP developer for around two years.
I’m the most junior dev at our software shop and it has been very interesting learning how some of the more senior devs use Linux. On one hand, there’s never time to discuss using Linux because everyone’s busy, but on the other all you have to do is ask and they will probably drop whatever they’re doing to nerd out over some part of their workflow that they recently overhauled.
The main constant is that everyone has their own set of shell toys (everyone loves fzf), but everything else (DE, wacky keyboards, window manager, text editors, git wrapper, tmux or no tmux, how to install programming languages, etc…) is usually quite individual.
So let’s have that discussion in this thread. Go ahead, nerd out about whatever parts of your workflow feel the best to you! I’ll start:
OS: Fedora Silverblue, with my own downstream image built weekly
GNOME extensions: Caffeine, Brightness control using ddcutil, Legacy GTK3 theme auto switcher, Run or raise, Auto power profile, Hide cursor
Keyboard & Mouse: Happy Hacking Keyboard Pro Hybrid Type-S (so smooth!
) + Logitech MX Master 3
Terminal emulator: Ptyxis (shame that it’s unmaintained at the moment but so far I haven’t needed to replace it)
Text editor: Emacs (long story, very worth it, especially now with widespread LSP and TUI AI agents)
Shell: Mostly distrobox, if it needs to be part of the host for some reason I usually just add it to my downstream image
Web browser: Firefox
Entertainment: Books (zathura or Foliate), interesting articles (hacker news, wikipedia), youtube (restorations, engines, that kind of thing. I don’t spend a lot of time here because the algorithm constantly pushes AI slop brainrot stuff)
How do all these pieces fit together? My day usually starts by plugging in a laptop to an external display and connecting the peripherals. I keep the laptop in clamshell mode when plugged in, maybe I would change that if I got one of those laptop stands. Next, I open up a web browser, any comms tools I need, and start hacking on some code base (writing code, running shell commands, talking to customer support about bugs, feature design with org mode, that kind of thing). I basically do that until it’s time to go home.
In general I follow the “GNOME way” with fullscreen windows or two side-by-side, augmented with the Run or raise extension for windows I switch between frequently instead of trying to guess what alt-tab will give me next. I adopted this back when I started working with Linux professionally; before that I ran Void Linux with AwesomeWM. The problem with that setup is that there were so many paper cuts and I can’t afford to mess around with debugging my workflow instead of doing my job, so I needed a solution that would Just Work
. Enter Fedora Silverblue. The learning curve where everything is in a container was fairly steep but I’ll tell you right now it paid off immensely.
Here’s an example of how I use distrobox for work:
$ cat ~/dotfiles/distrobox-assemble/web-dev-toolbox.ini
[web-dev]
image=fedora:43
replace=true
additional_packages="composer inotify-tools make php php-cli php-common php-xml php-gd php-bcmath php-pdo php-mysqlnd php-mbstring php-pecl-xdebug pnpm nodejs"
exported_bins="/usr/bin/inotifywait /usr/sbin/node /usr/sbin/npm /usr/sbin/php /usr/sbin/pnpm /usr/sbin/pnpx /usr/sbin/composer"
volume="~/.config/php/conf.d/99-memory-limit.ini:/etc/php.d/99-memory-limit.ini"
$ distrobox assemble create --file ~/dotfiles/distrobox-assemble/web-dev-toolbox.ini
... output elided ...
... this step included for demonstration only, these containers are persistent ...
$ which php
~/.local/bin/php
$ cat $(which php)
#!/bin/sh
# distrobox_binary
# name: web-dev
if [ -z "${CONTAINER_ID}" ]; then
exec "/usr/bin/distrobox-enter" -n web-dev -- '/usr/sbin/php' "$@"
elif [ -n "${CONTAINER_ID}" ] && [ "${CONTAINER_ID}" != "web-dev" ]; then
exec distrobox-host-exec '/var/home/silver/.local/bin/php' "$@"
else
exec '/usr/sbin/php' "$@"
fi
$ php -a
Interactive shell
php > echo 'Hello world!';
Hello world!
That’s about it. Happy to answer any questions about this and interested to hear how you use Linux! ![]()