Hardware
The rock on which all stands, is an ThinkPad X1 Carbon Gen 12. I've been running X1s the last 10 years, and this one is the fastest I've had yet with an i7 155U CPU and 32 GBs of RAM. It's light, it's fast, it has a great keyboard. I love it to bits.
I use only one external screen, a Dell UltraSharp 25" (U2515H) with 2560x1440 resolution. I used to have two screens, then changed to a super wide screen. These days, I actually find having one, regular external screen not only sufficient, but also preferable. There's a certain calmnes of having only one screen and it gives me more focus.
The keyboard I'm using at work is Ducky One 2 Skyline TKL. It's fast and easy to type on. At home, I have my favourite keyboard (and noisier!), Happy Hacking Professional 2.
Music is a necessity to concentrate. For about five years now, I've been enjoying the Sony WH-1000XM series. The sound is good, the noise cancelling adequate and they're comfortable to wear.
Operating system
I love Arch Linux and use it both for work and my home desktop computers. Debian is still my preferred server operating system, but on the desktop, Arch rules supreme.
Arch gives me the latest versions of desktop application and environments, without seemingly ever to break my system. I upgrade all the packages every day, but cannot remmeber anything breaking. It's big feat.
Another thing I dig about Arch, is that I don't need Flatpak, Snaps or AppImages. Everything's either in the official repositories or in AUR. I never need to install a package a different way, I just use one command: paru. paru deals with both official and AUR pacakges.
Desktop environment
For seven years now, I've been using i3. I like it more and more, how it stays out of the way and lets me get on with my work. It's highly configurable, and I've had a stable setup for years.
As is normal with i3, I have Alt +
<number> shortcuts to jump to any of the 10 virtual
workspaces. I've configured the window manager to always open certain
apps on dedicated workspaces. For instance, my coding editor is always
on workspace 1
, my web browser windows always on workspace 2
and
so on. Thus, I can blindly hit Alt + 2 and be
sure I'll instantly see my browser tabs.
My workspaces are as follows:
- Primary coding enviroment (Emacs ♥️)
- Web browser
- Terminals
- Secondary coding environment
- Whatever goes
- Whatever goes
- Personal browser
- Snapshot manager and VPN
- Music and sound control
- Personal chat (Signal)
I prioritise screen real estate, so I have no window decorations, no toolbar, no notificaiton area, no nothing. The mouse has no use apart from clicking around on websites 😃
Apart from my i3 configuration itself, the important additions that make i3 great for me are Greenclip and rofi.
Greenclip clipboard manager. It supports both text and images and allows me to have a long history of copied content that I can choose from when I want to paste it somewhere else. For instance, I often want to copy 2 things from a Jira issue when pasting it into Slack: The title and the Jira issue link. So I first copy both these things from Jira, I then switch to the other app and invoke Greenclip to select the text I need.
The second taste of secret sauce for my i3 setup, is rofi. It gives me fuzzy search for switching windows as well as launching applications. It being text based means it's lightning fast too.
With rofi, I get easy asccess to all my open windows, on all desktops.
In this screenshot, I want to navigate to the web browser window where
I'm reading a Wikipedia page. Just typing wi
quickly narrows it
down, adding k
makes it unique and I can just hit Enter
to go to the correct Firefox window.
Here showing the rofi dialogue for running an arbitrary
command. There's a also a rofi view for applications, but I like the
run dialogue better as it lets me run any command, like i3-msg move
workspace to output right
to move the desktop on my screen to the
left, onto the right hand monitor. The rofi run dialogue remembers
previously type commands, making it super fast to use.
Lastly, I like make the desktop look good too, so I use picom to add translucency to a selected few of my windows: My editor, my terminals and the simple X applications, like xclock and xload. You can find my picom conf here.
Speed is a big feature of my setup in general. I want it to be fast. And i3 with rofi and greenclip is indeed fast. It also makes richer desktop environments not an option for me.
Screenshotting tool
I've tried many screenshotting tools, but have found none that works as well as ksnip. It both allows me to easily select app windows, regions or screens, and it has an excellent selection of annotation tools to add numbers, arrows and boxes to the screenshots so that I can clearly convey why I want to show you the screenshot 🤣
Coding environment
Emacs is by my preferred code editing environment and by far the app I used the most. In the screenshot above, you can see my Emacs 30.1, with native compilation, and skinned using the sweet theme and theSource Code Pro font from Adobe.
I've tweaked my .emacs since the year 2000 and have got it about right now, lol.
Web browser
My primary browser is Firefox. It's fast, has excellent plugin support and is the browser being the closest the four freedoms, which I think is important.
I find it useful to pin the websites I use the most as this will both load the websites I always need when starting the browser, and I have a fixed screen realestate to go for these. The sites I have pinned are: Slack for chat, Outlook for mail, Teams for video chat and calendar, Bitbucket for PR code reviews and ChatGPT for research.
Furthermore, I've changed my way of using the bookmark bar. These days, I prefer it to be visible at all times, and I've added a button for creating a screenshot since some websites grab the right click, which is the normal way to creates screenshotts.
To make it look nice, I use the beautiful Sweet-Dark theme by Eliver Lara.
The plugin LanguateTool helps improving my writing of English, German and Norwegian alike.
Websites become a lot easier to read, thanks to uBlock Origin blocking flashy ads.
Start of the day script
I run one of two scripts every morning:
@home
and
@work. As
you've probably have guessed, I run @home
when I work from home and
@work
when I'm in the office. They set up network access, DNS, VPN,
external screens and other things that are dependent on my physical
location. Both of them then call
@daily,
which ensures my environment is both ready to use and up to date:
- Starts an SSH agent
- Syncs my documents and notes
- Updates the entire operating system
- Creates a backup of my most important files that are not version controlled.
- Creates a start page for my browser. The start page has things like my recent Git and Jira history the last couple of days, so that I have all I need for the standup meeting later in the day.
The command that creates the start page is called skybert-dash
and
you can use it
too. The
start page looks like this 👆
Keeping up with the news
I get my tech news from two sources: RSS feeds and Mastadon. Reading RSS feeds with a good reader, here using elfeed is super fast and lets me focus on the most important things without being distractted by animated kittens and other nonsense.
These are the feeds I'm currently subscribed to.
Music
Although I love Spotify, often times, I prefer playing my local OGG and MP3 collection using a command line client. I shuffle my entire collection, ensuring I get a good mix of everything from classical and opera to hard rock and blues.
$ mpv --shuffle --audio-display=no --input-ipc-server=/tmp/mpvsocket ~/music/
I ask mpv to set up a socket to which I can control it using desktop shortcuts. E.g. to pause, I hit Ctrl Shift 4. To jump to the previous track, I hit Ctrl Shift 6 and to jump to next track, I hit Ctrl Shift 7. That's it really. An eternal play list and three shortcuts. That's all I need.
That's it
Hope you enjoyed this tour of my desktop. Happy hacking!