avatar

Andres Jaimes

Debian Trixie + Sway computer setup

By Andres Jaimes

- 10 minutes read - 2037 words

I’ve been circling this decision for a while, trying to figure out the best setup for my day-to-day tasks. I’ve worked with multiple operating systems, including Windows 3.1, 95, 98, NT, 2000, XP, 8, 10, 11, Mac OS9 and OSX from the cats to the parks, HPUX, Solaris, Linux RedHat, Slackware, CentOS, Fedora, Ubuntu, and my personal favorite: FreeBSD.

I like my operating systems lean. I don’t like all the extra stuff computer manufacturers add, and lately all the AI stuff, glassy/see-through effects, and dozens of useless notifications features which only eat my memory and cpu cycles. Actually, I’m writing this post on TTY1, using Helix. So, most of the time I’m not looking for “a desktop experience”. I’m looking for a machine that feels calm, predictable, and lightweight. Something that gets out of my way and lets me think.

Choosing an OS

I realized I care about a few things more than “features”:

  • I want the OS to feel simple and understandable.
  • I want no GUI by default. If I want graphics, I want to ask for them.
  • I want my system to stay stable and boring.
  • I don’t want to see ads when I want to run an application or check my email
  • I don’t want to fight packaging systems or “special” app delivery models. Just basic apt/rpm/pkg options.
  • I want Wayland + a minimal window manager (sway really clicked for me).
  • I don’t need a full desktop environment, loaded with appplications that I’m not going to use.

So my ideal system looks like bootTTY, loginsway, only when I feel like it.

FreeBSD, the one I love

I love FreeBSD, but it’s not the one I picked. Honestly, I still think it does some things more beautifully than Linux:

  • the rc system is elegant and readable
  • the root layout makes sense to my brain
  • the base system feels coherent in a way Linux distros often don’t

But I’m building a computer that I want to run with the Wayland compositor, which I really wanted to try. And for better or worse, Linux is usually the smoother road for desktop plumbing, especially when you factor in nvidia drivers and the general ecosystem gravity.

From different comments I found on the internet, it feels that users feel ok with X11 which, to me, it means slower progress in the Wayland field,despite there’s a full chapter in the FreeBSD documentation website.

Debian, the one I picked

Debian has a similar vibe, it’s well documented, has been around for a long time, it seems like hardware drivers usually come out first for it, and I’m familiar with apt.

With the netinst ISO I can install a clean base system, skip the desktop task, and end up with a machine that behaves like a classic Unix box. From there I can add exactly what I want.

I don’t want an exciting OS. I want a dependable one.

systemd was what almost stopped me from choosing it. I like the older rc-style approach. I’m used to scripts and straightforward service toggles. But then I realized that systemd is what most modern Linux systems use, and once I accepted that, it became less “weird” and more “okay, it’s a standard”. That’s the same reason that took me some years ago to take the CentOS path. So, these are the things to keep in mind now:

  • systemctl to control services
  • journalctl to read logs
  • units as my mental model

Fedora, the one I almost chose

Fedora is very tempting. It’s modern, clean, and it’s basically a Wayland-forward distro by nature. But I’m not really sold into the flatpak idea. I’m not saying it’s bad, I just feel the same about snap, and others.

Ubuntu, I don’t want the snap story

Ubuntu Server could absolutely do what I want: minimal install, start sway manually, and live mostly in the terminal. It’s very polished and there’s a lot of documentation for everything.

But the big turn-off for me is ideological, I don’t want to build my system around the “snap as default desktop delivery” approach. I’m not even saying snap is evil, it’s just not how I want my machine to work.

I want the packaging story to be simple with apt packages, conventional paths, predictable configs.

Debian feels closer to that “just the OS” philosophy.

That’s enough.

What I want at the end of this is a machine that feels like:

  • boot to text
  • start sway when I want graphics
  • run Firefox and alacritty all day
  • minimal background noise
  • minimal “ecosystem opinions” imposed on me
  • and all day internet radio via cmus

Debian + Sway hits that exact shape. It’s not the flashiest choice. But it feels like the choice I’ll still be happy in the long run. I grew up with DOS + Windows 3.1, then later, Slackware + Window Maker. This really feels good to me.

Installing the system

Initial steps

  1. Boot your computer with the Debian ISO USB plugged in, and select Install, not Graphical install.
  2. At the Partition disks screen, select Guided - use entire disk.
  3. Then, still during Partition disks, but some steps after the previous screen, select All files in one partition (recommended for new users).
  4. Approve the changes and continue the process.
  5. At the Software selection screen, leave only the following options checked:
[ ] Debian desktop environment
[ ]    GNOME
[ ]    Xfce
[ ]    GNOME Flashback
[ ]    KDE Plasma
[ ]    Cinnamon
[ ]    MATE
[ ]    LXDE
[ ]    LXQt
[ ] web server
[x] SSH server
[x] Standard system utilities
[ ] Choose a Debian blend for installation
  1. Complete the process and let the computer reboot.

Installing the initial applications

Login as root, or use su - to switch to a root session, then:

1apt update
2apt install intel-microcode # because I have an intel computer
3apt install build-essential
4apt install hx btop tmux
5apt install sway waybar alacritty firefox-esr
6sway

The installation process will automatically install the Nouveau driver, so no nvidia drivers are required. Run the following command to check if the Nouveau driver is working:

 1$ lsmod | grep nouveau
 2nouveau              3055616  17
 3mxm_wmi                12288  1 nouveau
 4drm_gpuvm              45056  1 nouveau
 5drm_exec               12288  2 drm_gpuvm,nouveau
 6gpu_sched              65536  1 nouveau
 7drm_display_helper    274432  1 nouveau
 8drm_ttm_helper         16384  2 nouveau
 9ttm                   106496  2 drm_ttm_helper,nouveau
10drm_kms_helper        253952  3 drm_display_helper,drm_ttm_helper,nouveau
11i2c_algo_bit           16384  1 nouveau
12video                  81920  1 nouveau
13button                 24576  1 nouveau
14drm                   774144  17 gpu_sched,drm_kms_helper,drm_exec,drm_gpuvm,drm_display_helper,drm_ttm_helper,ttm,nouveau
15wmi                    28672  6 video,intel_wmi_thunderbolt,wmi_bmof,think_lmi,mxm_wmi,nouveau

Note: I tried installing the nvidia drivers following Debian’s Nvidia page, but the process breaks sway. It’ll be worth checking again in the future.

Configuring sway

I have a HiDPI monitor, and found the default resolution very small in sway. But there’s an easy fix to it. Start by finding the output name:

 1$ swaymsg -t get_outputs
 2Output DP-2 'Samsung Electric Company U32J59x HCHNB01726' (focused)
 3  Current mode: 3840x2160 @ 59.997 Hz
 4  Power: on
 5  Position: 0,0
 6  Scale factor: 1.000000
 7  Scale filter: nearest
 8  Subpixel hinting: unknown
 9  Transform: normal
10  Workspace: 1
11  Max render time: off
12  Adaptive sync: disabled
13  Allow tearing: no
14  Available modes:
15    3840x2160 @ 59.997 Hz
16    3840x2160 @ 30.000 Hz
17    3840x2160 @ 29.970 Hz
18    2560x1440 @ 59.951 Hz
19    1920x1080 @ 60.000 Hz
20    1920x1080 @ 59.940 Hz
21    1680x1050 @ 59.954 Hz
22    1600x900 @ 60.000 Hz
23    1280x1024 @ 75.025 Hz
24    1280x1024 @ 60.020 Hz
25    1440x900 @ 59.887 Hz
26    1280x800 @ 59.810 Hz
27    1152x864 @ 75.000 Hz
28    1280x720 @ 60.000 Hz
29    1280x720 @ 59.940 Hz
30    1024x768 @ 75.029 Hz
31    1024x768 @ 70.069 Hz
32    1024x768 @ 60.004 Hz
33    832x624 @ 74.551 Hz
34    800x600 @ 75.000 Hz
35    800x600 @ 72.188 Hz
36    800x600 @ 60.317 Hz
37    800x600 @ 56.250 Hz
38    640x480 @ 75.000 Hz
39    640x480 @ 72.809 Hz
40    640x480 @ 66.667 Hz
41    640x480 @ 60.000 Hz
42    640x480 @ 59.940 Hz
43    720x400 @ 70.082 Hz

DP-2 in my case, and try setting a different scale factor:

1$ swaymsg output DP-2 scale 2
2$ swaymsg output DP-2 scale 2.5

sway docs say integer scale is recommended, but fractional values are supported with caveats, especially for Xwayland apps which can look blurry.

Now, edit ~/.config/sway/config to make it permanent:

1# create the sway configuration directory
2mkdir -p ~/.config/sway
3# copy a base configuration if you don't have one
4# cp /etc/sway/config ~/.config/sway
5# edit the configuration file
6hx ~/.config/sway/config

Add the following line:

1output DP-2 scale 2

While editing the config file, set alacritty as the default terminal

1set $term alacritty

Installing Nerd Fonts

Additional terminal font for alacritty to display nice and useful glyphs:

1$ apt install unzip
2$ mkdir -p ~/.local/share/fonts
3$ unzip JetBrainsMono.zip 
4$ rm JetBrainsMono.zip 
5$ mv * ~/.local/share/fonts
6$ fc-cache -f -v
7$ fc-list | grep -i 'jetbrains'

Additional applications

Some additional software that I frequently use:

1apt install cmake git tree gnupg
2apt install oathtool
3systemctl reboot # important for oathtool

Also, I love cmus. But I’m using my own branch at the moment, while the main one publishes some updates related to https streaming. I’m building with:

1$ ./configure --prefix="/home/andres/.local"
2$ make
3$ make install

Keep reading, audio is configured below.

Changing the default font size for TTY

TTY font sizes can get really small on HiDPI monitors. Debian comes with multiple font options.

1# as root
2$ dpkg-reconfigure console-setup
3# restart so debian takes the changes
4$ systemctl reboot

I found the best font to work on my HiDPI monitor to be DejaVU 24x43, despite multiple recommendations of using Terminus. I found Terminus to be very thin and illegible.

Rebooting and turning off computer

I’m used to the shutdown command, but systemd’s way to do it:

1systemctl poweroff
2systemctl reboot

Installing audio

In Debian 13 Trixie, PipeWire is the recommended option, and the recommended metapackage to install is pipewire-audio. See Debian’s PipeWire page for additional info.

Verify that the system is finding the audio card

1$ cat /proc/asound/cards
2 0 [PCH            ]: HDA-Intel - HDA Intel PCH
3                      HDAudio-Lenovo-DualCodecs
4 1 [NVidia         ]: HDA-Intel - HDA NVidia
5                      HDA NVidia at 0xe0080000 irq 57

Install pipewire-audio:

1$ apt install pipewire-audio
2$ systemctl reboot # important

Note: Before adding pipewire-audio I tried to verify if they were already installed, and it seemed like they were, but nothing worked until I ran both previous commands (install and reboot).

Use wpctl to adjust the volume level. The tool is provided by wireplumber and installed as part pipewire-audio.

 1# Increase volume by 5%
 2$ wpctl set-volume @DEFAULT_SINK@ 5%+
 3# Decrease volume by 5%
 4$ wpctl set-volume @DEFAULT_SINK@ 5%-
 5# Set volume to a specific volume, 0.75, 0.90, 1.0, etc.
 6$ wpctl set-volume @DEFAULT_SINK@ 0.75
 7# Get current volume
 8$ wpctl get-volume @DEFAULT_SINK@
 9# Toggle mute state
10$ wpctl set-mute @DEFAULT_SINK@ toggle

I haven’t tried it, but alsamixer is an alternative to control volume (apt install alsa-utils).

Printing

CUPS is the default printing system for Debian, but Berkeley’s LPR is also available. Debian Printing.

Visit Debian’s SystemPrinting for additional information on printing.

1# install cups
2$ apt install cups
3# Verify the service is running, as a regular user
4$ lpstat -r
5scheduler is running

Visit http://localhost:631 on the browser to add a new printer.

Note: At any point, if you’re asked for a user and password, use your root credentials.

First, try clicking on Printers. There’s a chance it will be automatically detected and added. If not, click on Administration and follow the prompts. I added an ipp printer, which doesn’t need an additional driver, and selected HP LaserJet Pro M404-M405 (driverless). Then selected ipp://192.168.1.162/ipp/print for the URL field. Continue until you’re done with the process.

When you’re finished, make it the default one: Go back to Printers on the website and select yours. Click on the Administration dropdown and select Set as Server Default.

Go back to TTY1 and try:

1echo "Hola Mundo" | lp

Use the following to list the available printers and check the default one:

1lpstat -p -d

Conclusion

I’ll keep updating this document as new needs rise up.

Be happy. Live simple. Don’t let others take your peace away from you.