Debian Notes
============
I recently installed Debian 12.5 (bookworm) using the "standard" (no default desktop environment) live ISO onto my sixth generation ThinkPad X1 Carbon. These are my notes from the experience.
------------
Packages I needed to install to get the machine into a familiar state:
* feh: I like making my desktop wallpaper a background image. I think xsetroot requires that images be bitmaps, which, you know, was cool back in 1997, but I don't find to be acceptable here in 2024. There might be some other preinstalled utility that does this for me. If so, I don't otherwise have any loyalty to feh, though it seems like it could be scripted to do some neat things.
* firefox-esr: I'm sort of assuming the ESR thing will annoy me at some point in the future but, to be honest, nothing can possibly compare to how much frustration the Snap package for Firefox gave me back in Ubuntu. It might actually work out as a decent way of not iterating too quickly on new CSS/JS features for my websites.
* fonts-liberation2: The default sans font isn't even close to Arial or Helvetica; Liberation Sans is. It's not really clear to me what the difference between this and fonts-liberation is but I don't think I care
* git: I like keeping track of the changes I make to my source code.
* redshift: I like reducing the blue light on my screen in darker conditions. I recall previously spending a lot of time trying to understand what "geoclue2" even was and why it wasn't working until I just gave up and looked up my latitude/longitude and hard-coded those into `~/.config/redshift.conf`. That's definitely what I should have done from the get-go.
* spectrwm: My favorite window manager. I wish this were 3.5.1, which is available in trixie, and not 3.4.1. More to come on this.
* tmux: Because mlterm is the terminal emulator installed by default (and it seems good enough to me that I don't care to install anything else), it seems like I need to launch tmux with `tmux -2` so that it assumes I can see 256 colors on my screen. I think I could go the rest of my life and not totally understand all that stuff but if just adding a `tmux=tmux -2` alias to my `~/.bashrc` makes it so I never have to care, that sounds pretty good.
* vim: I guess this isn't strictly necessary but the version that comes preinstalled is like 1990 vintage.
* vim-gtk3: The plain `vim` package doesn't come with `+clipboard` compiled in, which is really annoying when I'm trying to get text out of vim. I'm not sure if I can install this without installing the normal vim package.
* xbacklight: I can't really get it to work, though. See below.
* xorg: I like being able to see pictures on my screen but not so much that I wanted to use one of the Debian ISOs that included a desktop environment. If I were to pick one, it'd probably be the GNOME one but I live in spectrwm and don't feel like I use any of the GNOME apps at all, so it's a waste to install them. Honestly, I was prepared for this to all be way more annoying and just end up using the GNOME ISO but I'm glad that it doesn't seem like I'll need to do that.
------------
Things that just worked, perhaps a little bit to my surprise:
* Bluetooth controller: Obviously, I needed to specifically pair up my devices but the laptop's Bluetooth hardware was immediately detected and worked with `bluetoothctl` perfectly without me having to do anything.
* Sound: amixer came installed out of the box and doesn't require root or anything to change it. A wonderful surprise!
* Touchpad scolling: I needed to configure it to reverse the axes but it worked great without having to touch anything.
* Wireless card: Obviously, I needed to specifically provide my access point's SSID and passkey information but the hardware itself was detected without any extra steps needed on my part.
------------
Things I needed to configure:
* Bluetooth devices: It takes a little know-how with `bluetoothctl` but everything worked without much hassle and I was able to pair my Kinesis Freestyle2 Blue keyboard and my Logitech M720 Triathlon mouse without much issue. The basic flow looks like this:
$ bluetoothctl
[bluetooth]# scan on
// put your device into pairing mode
// wait for it to show up here; sometimes that happens very quickly, other times it doesn't
[bluetooth]# pair <your device's MAC address (you can use tab-completion, which is very nice)>
[bluetooth]# connect <MAC address>
// if you'd like that device to connect automatically next time, you have to "trust" it
[bluetooth]# trust <MAC address>
* Display DPI: I love the display on the X1 Carbon but I do sort of wish it weren't so high-resolution. For me to be able to use Firefox reasonably, I created `~/.Xresources` with `Xft.dpi: 144` and added `xrdb ~/.Xresources` to my `~/.xinitrc` file. This seems to be a very decent system-wide solution to the DPI issue and also worked well for me on my previous Ubuntu install.
* Keybord settings: I use the Dvorak layout and I've been using it so long that it's truly debilitating for me to try and use QWERTY anymore. The Debian installer pretty quickly takes care of things for the console but if you're just trying things out in the live boot, you need to know how to do it from scratch. `dpkg-reconfigure keyboard-configuration` and then a `setupcon` afterwards worked great for me.
* mlterm: I've never used mlterm before but it seems pretty good so far. I used urxvt for a long time before switching to xterm. I forget why I did that, to be honest, but mlterm seems fine as well.
* Touchpad: I like natural scrolling and tap-to-click so I copied `/usr/share/X11/xorg.conf.d/40-libinput.conf` to '/etc/X11/xorg.conf.d/40-libinput.conf` and added `Option "NaturalScrolling" "true"` and `Option "Tapping" "on"` to the touchpad block.
* Wireless networking: It takes a little know-how with `/etc/network/interfaces` and then a well-timed `ifup` command but it worked totally fine. Note that I'm only referring to connecting to one wireless network here. I'm still figuring out the best approach to maintaining a list of networks that the machine can roam between.
------------
Things I'm still trying to figure out:
* Alternate package management: There are some things that I might like to grab from trixie (or even sid) instead of stable, most notably spectrwm. On my old Ubuntu system, I just did the lazy thing and grabbed the latest spectrwm source from GitHub, compiled it myself, and copied the newly-compiled `spectrwm` binary over the APT-installed one. This worked fine but, obviously, isn't ideal. I want to figure out the right way to do this (if there is one). I'm also interested in figuring out a way that I can maintain my own forks of the things in suckless-tools (which happens to be a spectrwm dependency) because I've got at least one patch that will likely never be in the Debian package. I think this can all work, I just need to learn more about it.
* Display backlight: I'm not sure how to change the brightness of my display without root access. My previous Ubuntu system was able to do this (with xbacklight) but I didn't take a hard enough look at why it was able to accomplish that before I nuked it. It's been easy enough so just do `echo <number> | sudo tee /sys/class/backlight/intel_backlight/brightness` (I even made a little shell script called `brightness` to do that) but I guess I'm still curious.
* Grub boot menu: I'm just single-booting on my laptop so I was a little surprised that a Grub boot menu still pops up. I guess it's useful just in case I ever need to get into rescue mode. Maybe I'll disable it but also maybe I'll have some fun and customize it a little.
* Login manager: I don't know how much I care to have one but it's something on my mind. Typing `startx` isn't much of a burden and it's kinda fun to remember what it's like to be at the raw console.
* Roaming wireless connections: I don't quite understand how wpa_supplicant, which comes preinstalled, fits into this whole picture. I've tried a couple of different things and they haven't seemed to work. I see that iwd is something other people use but I guess I'd like to prefer things that are already installed and configured, if possible.