At my home office, I use a desktop PC with Fedora Linux installed. I use the i3 window manager and 2 monitors.
Ever since my Model M keyboard broke I have used a standard Dell keyboard. It's fine, works great; only annoyance is it's not mechanical, sometimes I am not sure I have pressed a button.
There is something I like about it that I can't really explain though.
OS / Desktop
I use Linux. All the tools I need to do my job run on Linux, I don't think I could do my job running on windows, I probably could on a mac but then I would have to use a mac. I am also pretty tied to my i3 setup, I can basically conjure up any program or change my window layouts with a few button presses, I don't even have to think of the key code anymore I have been using i3 for that long. However my i3 setup is not that customised, if I was to show a screenshot it would just look like the standard default i3 installation.
When I am out and about working I use a ThinkPad x220 laptop, I brought it second hand about 5 years ago for £100. I have added an SSD to it in that time but everything else about it is from the original 2012 model. Despite being over 10 years old at this point it still works and runs everything I need to just fine. I am sure using a lightweight window manager like i3 helps with that. The only (minor) complaint I have with this laptop is the screen, it's a TN panel and the resolution is pretty small, I could upgrade this to an LCD display. Oh, perhaps a bigger issue; I used this laptop as a sort of media station a while back, I had it plugged into a tv. There was some interference in the cables when charging so I had to use it unplugged, this completely shot the battery and it now holds literally 0% charge, the battery still charges, it's just dead. So I need a new one of those. In hindsight I should have used it with the battery unplugged...
Some tlp output for battery nerds:
/sys/class/power_supply/BAT0/charge_start_threshold = 96 [%] /sys/class/power_supply/BAT0/charge_stop_threshold = 100 [%] tpacpi-bat.BAT0.forceDischarge = 0 Capacity = 0.0 [%]
The Thinkpad keyboard and build quality is the best reason to use this laptop. No laptop today has a keyboard like it.
Enough about hardware, let's talk software.
I use gnome-terminal for my terminal, no real reason why it just comes with fedora. I have it configured to be stripped down so I see no menu bars or scrollbars or any other cruft. It looks a bit like xterm, although interestingly enough if you use the 2 of them side to side there is the tiniest bit of input lag on gnome-terminal that you would not notice otherwise (I am writing this in vim inside of gnome-terminal and even I don't notice it whilst thinking about it) but it's there. Gnome-terminal has a nice find function that I use a fair amount. It also plays nicely with urls.
I use Vim as my text editor, not to much going on here as well but I write all my notes, code and basically anything else that requires writing something in vim. I made a video about my setup here. I can't live without it now although I fully admit I don't use it to even close to it's full potential.
To keep track of things I have a note taking system that I use, it's all just plain text files stored in a directory. I have a sort of journal that I put all my to do items in and just tick them off (with the ✅ emoji (vim alias)) when I am done. It works well and is very powerful combined with grep and friends.
Terminal Multiplexer (Sounds more complicated then it is)
If I am connected to a remote server I tend to be inside a screen session. This is a tool that basically allows you to run multiple virtual terminals that live on the server. This means that if your ssh session drops you can resume exactly where you where as if you never connected. You can also open up multiple different sessions inside of one terminal. I use this tool everyday.
You can also split these sessions like you would in vim. I actually have screen configured to use vim keys so it's all very nice. It has some other quality of life features like allowing copy/paste between the screen, searching, scrollback.
To connect to servers I use ssh. I love it, it's an amazing tool for more then just connecting to servers. I also use it to port forward and all sorts. It's amazing just how far you can get by punching holes in ssh servers and chaining all those connections together to get into (or out off) somewhere you should not be.
On this note a VPN like tool I use is sshuttle. I made a video on it but it's basically a vpn over ssh. It works great and there is no noticeable overhead compared to a normal VPN due to some Network Magic (no TCP over TCP).
I also use OpenVPN but that's a bit rubbish and I should really get around to replacing it with wireguard.
My favourite programming language is Python. I use it mainly to write websites and apis with the Django framework and also to automate a lot of things. I have yet to find a case where python is the incorrect language for a project that I chose it for, although maybe that's because I don't know enough about the other options? Who knows, python works for me.
Saying that I write most of my systems administration scripts in bash because it just makes sense. Whenever I try and write the same scripts in python they tend to just look like a bash script written in python. Although I do sometimes miss the data structures that python provides.
For virtual machines my preferred method is using the KVM. It's already there on Linux servers (basically) and really easy to configure and start using. There is also a terraform provider so it ties in with devops tools very well. Proxmox is a good choice for enterprise use here, or just a fancy homelab. It gives a really powerful GUI to the KVM and many advanced features, it also just handles storage and also lets you spin up LXC containers which is very cool.
I use ansible for config management and deployment. I don't have to many reasons for or against this software, It's the one I chose, it does the job well and works for me. That said it can be a pain sometimes and I find myself wishing I was just using python instead, but that almost certainly means that I am writing my ansible playbooks wrong or that it's not the right tool for the job - A failure on my part, not ansibles.
I mentioned terraform above, this is a really powerful IaC tool. It's pretty much platform agnostic and will work with any hypervisor. In fact it can work with anything you can write your own providers for terraform. You can even manage spotify playlists with them (not that I recommend that).
I use packer to create golden images of virtual machines.
However in my homelab I tend to just clone a "golden VM" with preinstalled
software. I use
virt-sysprephere which basically removes any custom config
(ip addresses, hostnames, etc) from the machine to be cloned so that there
won't be any collisions. It works great for small scale operations. It might
even work just fine for large scale ones as well, I just have not used it this
I use a few other devops tools like Jenkins, Nomad, Vault, Consul but I don't have much to say about them. Jenkins will probably be replaced by gitlab pipelines soon.
As far as desktop software goes, I use the brave browser, this could be replaced my chromiumn but I like the crypto stuff and easy addblocking that brave provides. I used firefox for years but I have never got on with the latest versions. I use thunderbird as an email client. I tried more minimalist ones (Mutt) but never got on with them.
mupdf to view pdfs and
pandoc to convert markdown documents into pdfs.
Occasionaly, when the utility
column won't suffice I will open up a csv in
I use gimp for photo editing (mainly youtube thumbnails) I dislike the software
a lot. It makes no sense and is not very intuitive. I really like
have used it for animations but it is not really a photo editing program.
kdenlive for video editing, I really rate this software. A lot of people
complain that it crashes a lot but it's never happened to me. It does
everything I want it to.
For screen recording and occasional streaming I will use OBS, I went through
a phase of trying to use pure
ffmpeg but it was to much effort for literally
0 gain. I will occasionally use audacity to just record audio.
I use Nextcloud to sync files between laptops, I also use it as a sort of phone backup as all my photos automatically get synced there. It's great software and just works™.
My preferred file manager is Nemo, it comes with the cinammon desktop of the Linux Mint project. I don't like the modern gnome file mangers as when you search for files they try and recursively search directorys and it takes awhile and never works correctly. Just let me search the directory I am in please! I also take full advantage of duel pane file management of Nemo and use it's server mounting options often.
I use clementine as a music player, it's fine, it plays music. I have my music stored on an ampache server, this server has a subsonic api that clementine can talk to so I can play my music in a spotify streaming like way. The advantage of using ampache is I can also play it on a mobile using the D-Sub application, again a spotify like experience.
I used to have a custom setup using MPD and NCMPCPP, it was very cool and I would love to go back to it if there is a way to get MPD to talk to a subsonic server (I have tried mopidy but have never gotten it to work). I highly highly rate MPD it's pretty damn cool what it can do. Unfortunately my music colleciton outgrew my local storage.
To manage passwords I use
pass. It's the GOAT of password managers. I have
a few extensions with it to use it with Dmenu and also have it support OTP
passwords. It's so simple to use whilst also being pretty much fully featured,
I even have it on my phone (exporting/importing the GPG keys is kind of a pain but it's
Other software that I can think off whilst writing this:
redshiftas a flux/nightlight replacement, it does the job
- Lutris for games that require wine, it massivly simplifies the process
rsnapshotfor backups, would like to replace this with Borg
- Hexchat for my irc client, I use this along with blabouncer to get persistent messsages.