How to: BSPWM on Debian Sid
Plus extras to replicate my work environment
I have been running Debian Sid for about a year now. Overall, I think it is an excellent rolling release GNU/Linux distribution. Debian is my distro of choice because of (i) its importance to the free software world, (ii) its diverse community, (iii) its politics and stance on free software,1 and (iv) the fact that it is an “enterprise-grade” operating system without being backed by any one company (e.g. Ubuntu).
Debian is not an ideal choice for beginners. It does not try to make the experience the most user friendly or to provide everything “out of the box”. Users coming from distros such as the Ubuntu flavours or Linux Mint, thinking that they will just “cut out the middleman” and go directly to the source, are in for a hard time.
A Debian user is expected to mould their system into their own needs, to make configurations and adaptations for their particular case. For example, you cannot use
sudo with your regular user, unless you configure it to do so. The
lightdm login screen will not show the user list by default. You will probably have to configure
fontconfig in order to have consistent fonts across applications, such as in
chromium. All desktop environments offer a basic experience, unlike the care and polish that goes into something like the Linux Mint editions or Ubuntu MATE. And so on. As such, I would argue that Debian is targeted at experienced GNU/Linux users.
In this article, I document all the steps I take to get my working environment on Debian Sid. The core of my setup is the Binary Space Partitioning Window Manager (BSPWM). It is a tilling window manager, similar to the arguably more popular i3 (i3WM).
First some demos, then a few words about Debian release channels, a short note of why I prefer BSPWM over i3, and then the instructions.
Any large gaps between windows are for demo purposes only, as I prefer to work with values between 0-5.
1.2 Quick view of BSPWM motions
1.3 Change environment theme
Demo of a script that changes all themes on demand, from terminals to command line utilities, the system bar, etc. It is invoked by my
dmenu script that provides the available options. The Tempus themes are compliant at minimum with the WCAG AA accessibility standard for colour contrast.
2 A few words about Debian Sid and Debian release channels
Debian is divided in four release channels: Stable, Testing, Unstable, and Experimental. Packages migrate from the last to the first in sequence, after being subjected to careful scrutiny where release critical bugs and security holes are identified and addressed.
The Stable release is the one recommended to regular users and readily available through the project’s homepage. It currently sits at version 9.4 and is codenamed “Stretch”. Stable gets a major release about once every two years, though there is no rigid release schedule. It is published when it is ready. Package versions remain on the same major version throughout the distribution’s life cycle, with minor fixes and security updates being the ones pushed down to users. Choose Stable if you intend to set up a system that requires very little maintenance, such as a home server or a generic desktop computer system.
Testing is the next Stable release, currently codenamed “Buster”. It occupies the space between Stable and Unstable. In technical terms, Testing as such is a rolling release model, though the various code names are better described as semi-rolling.2 I think Testing covers a specific niche. It should not be used by Debian users who need access to newer packages and are prepared to assume the responsibility inherent in running bleeding edge software (more on that in the following subsection).
The Unstable branch gets newer packages, which are subject to regular updates. Unstable is always codenamed ‘Sid’. It never has an actual version number, because it follows a rolling release model. Packages are updated as they come. Sid is only defined by approximation, based on what the current Testing branch is called. As such, the current state of Sid is internally referred to as Buster/Sid. Use Sid if you want to have a bleeding edge system and are prepared to resolve any problems as they arise.
As for Experimental, its name denotes its function. It is meant for Debian developers.
2.1 Why Sid instead of Testing
The three-fold reason I favour Sid over Testing is as follows:
- Responsibility is yours. You want to run a rolling release distribution. You should not expect it to be as hassle-free as Stable. If you value stability above everything else, you should not be thinking about switching to Testing/Sid. Use Debian Stable, an Ubuntu LTS release, or Linux Mint.
- Testing offers the illusion of stability. If you read various comparisons online, there is this belief that you should use Testing over Sid because it has the best of both worlds. It is more like running Stable with newer packages. I find this kind of misleading. Testing is still a rolling release distribution, so responsibility is yours.
- Testing can remain broken for longer. If you go into Testing thinking that it is perfectly stable, then you will run into trouble. And when you do come across problems, they will persist for longer compared to Sid. The reason is that upstream fixes go to Sid first and only after a certain period of time do they migrate to Testing.
In other words, I think Sid makes it crystal clear that you are responsible for your system. Whereas Testing can give the impression that you can sort of cheat your way into having both bleeding edge software and stability. That is the wrong mentality to have if you are to use a rolling release distro. If, however, you know exactly what you are doing, there is almost no difference between Testing and Sid: it is just a matter of how close to the bleeding edge you want to be.
At any rate, I consider the package
apt-listbugs essential to running either of these options (more on that in the installation instructions below).
3 Why BSPWM over i3WM
BSWPM represents windows as the leaves of a binary tree, dividing the working area between a focused node and a stack of inactive windows (technically a window spiral).
GNU/Linux users may already be familiar with i3, a popular tiling window manager. I have used
i3wm for quite a while. Both the upstream and the popular
i3-gaps fork (which is not in the Debian repos). Overall, it is an excellent choice, but I think BSPWM is slightly better. For me, the main advantages are:
- Follows the UNIX philosophy. Does not come bundled with its own status bar or any extras. BSPWM is quite literally a window manager and nothing else.
- The configuration file is a shell executable, which allows scripting (e.g. if program exists, then run it, else do nothing) or sourcing other files.
- The hotkey daemon, which handles interaction with BSPWM, has a clean syntax that allows the declaration of multiple key bindings at once. Also recognises events like activating the command on key release or on repeat. Finally, it provides the option of defining key chord chains (multiple key presses to run a command).
- Unlike upstream i3, BSPWM offers the option for gaps between windows. Yeah, huge gaps are a gimmick. But small ones can be a productivity boost. This is not really an advantage if we compile
i3-gapsfrom source, but mostly a convenience to get gaps from the official
4 Installation instructions
These instructions may be updated at a future date. I do, in particular, plan to add a table of contents and expand on some further customisations the user may want to consider.
The following instructions were implemented on 2018-06-30 on a clean Debian 9.4 install, using the latest available net install option. The hardware is Lenovo ThinkPad X220.
Do not try these instructions on mission critical infrastructure. Use a Virtual Machine or a spare computer. These work on my Lenovo ThinkPad X220 laptop and the Lenovo H30-05 desktop. Your mileage may vary. I do not claim to know how different hardware configurations will behave. The responsibility is yours. Proceed at your own risk.
4.1 Setting up a clean Debian install
I prefer to use the net install of the current Stable release. If you have a machine that does not have Ethernet access, or requires non-free drivers for Wi-Fi, then you will be better served by one of those.
The reason I first install Debian Stable and then switch to Sid, is to have a solid starting point. There are ways to install Sid directly, but your timing might coincide with the presence of a major bug in a core piece of software. The package
apt-listbugs (more on that below) will protect you from such unpleasant surprises.
During the installation process, you will be asked to choose your major system components. A Desktop Environment, an SSH server, a print server, etc. I always keep the first option checked, then [using the space key to toggle on/off] I add MATE, SSH server, remove the print server, and keep the standard system utilities.
Here is a representation:
[x] Debian desktop environment [ ] ... GNOME [ ] ... Xfce [ ] ... KDE [ ] ... Cinnamon [x] ... MATE [ ] ... LXDE [ ] web server [ ] print server [x] SSH server [x] standard system utilities
You will get Debian Stable running the MATE desktop environment. I always choose a DE because it makes certain things easier, like network access and a functional Xorg display server. It also provides a decent fallback option, as well as something that could be used by other users in the house or a guest.
Now to prepare for the transition to Debian Sid. Open a terminal and type the following commands (lines starting with
# are comments and should not be added to the command line).
# Switch to the root user (password was defined at install time) su # update the package archives apt update # install some core packages, especially `apt-listbugs` # `apt-listbugs` is essential if you want to run Sid or even Testing apt install sudo vim apt-listbugs build-essential # add your username to the sudo group adduser USERNAME sudo
Reboot your system.
4.2 Preparing the update to Sid
/etc/apt/sources.list to enable Sid (you must be the root user or run with
sudo). You will need to replace all references to
sid. This is the right time to also include support for non-free packages if you need them.
This is all I have in my APT sources file, using the mirrors from Greece:
deb http://ftp.gr.debian.org/debian/ sid main contrib non-free deb-src http://ftp.gr.debian.org/debian/ sid main contrib non-free
Save your changes. Now type the following commands in a terminal (use
sudo as regular user, omit it if you login with
# refresh the package lists with references from Debian Sid sudo apt update # perform a full system upgrade sudo apt full-upgrade
These will start the process of converting Stable to Sid. The process might mess up with the fonts in your terminal, but is otherwise quite straightforward. Let it run and do not do anything in the meantime.
Note though, that at the time of writing, there are some critical bugs that require your attention.
apt-listbugs will print a list with short descriptions, and you have the option to open an HTML file with links to the full bug reports. To complete the upgrade, you might have to pin some packages (keep them at their current version). This can be done at the prompt of
apt-listbugs with this command:
My actual pinning was this:
p synaptic libgpg-error0 efibootmgr libdrm-radeon1
You will then have to select “NO” and type
sudo apt full-upgrade to repeat the process while excluding the pinned packages.
Those pinned packages are stored in
/etc/apt/preferences.d/apt-listbugs. Remember to periodically check if the problems have been fixed. Lots of pinned packages might cause unpredictable behaviour.
The upgrade will take a while, depending on your connection speed. Mine was about an hour.
Reboot once done. You are now running Debian Sid with the latest MATE desktop. Congratulations!
4.3 Setting up my BSPWM environment
Log back in to MATE for the last time. Or use a TTY if you wish. We are almost done.
4.3.1 Getting the core packages
Now to install my custom environment. You might want to build the system yourself, in which case it is better to just install the essentials. Seeing though as you are reading this guide, I would recommend you install the essentials plus the extras. The following commands will also pull in all the relevant dependencies.
# essentials sudo apt install git stow curl scrot feh materia-gtk-theme rxvt-unicode bspwm suckless-tools sxhkd xbacklight compton dunst libnotify-bin rsync i3lock lxappearance # essentials + extras sudo apt install git stow curl qtpass fonts-roboto fonts-hack-ttf neomutt abook ranger newsboat scrot feh materia-gtk-theme rxvt-unicode mpd mpc ncmpcpp bspwm suckless-tools sxhkd xbacklight compton dunst mpv youtube-dl imagemagick libnotify-bin taskwarrior w3m zathura firefox thunderbird redshift dtrx rsync i3lock lxappearance fonts-font-awesome
4.3.2 Install the Mint-Y icons
These are all the packages we need from the official repositories. Now on to get the icon theme I employ in my notification system (defined in the
~/.config/dunst/dunstrc file). I choose the Mint-Y icon theme because it is quite complete and consistent. Open a terminal and run:
# Get the source files git clone https://github.com/linuxmint/mint-y-icons.git --depth 1 # Enter the mint-y-icons directory cd mint-y-icons # Sync the source files to the system (makes the icons available to all users) sudo rsync -avzr usr/share/icons/* /usr/share/icons/
Note that the last command uses
rsync instead of
cp. The former is good for incremental updates. So you can periodically
cd into the icons’ source code (as above), run
git pull to get the latest updates, and then execute the
rsync command as shown above to pass only those updates to the system files (
rsync is an awesome tool).
4.3.3 Install Polybar
Unlike your standard Desktop Environment, BSPWM does not come bundled with anything. BSPWM is just the window manager program. Does one thing and does it well. To get a decent system panel, we can use
lemonbar from the official repositories, but I think that is not the best option. Instead I opt to compile
polybar from source. Prepare a terminal for the following commands.
These will get you the dependencies:
# prepare polybar from source # instructions https://github.com/jaagr/polybar/wiki/Compiling ## install dependencies sudo apt install cmake cmake-data pkg-config libcairo2-dev libxcb1-dev libxcb-util0-dev libxcb-randr0-dev python-xcbgen xcb-proto libxcb-image0-dev libxcb-ewmh-dev libxcb-icccm4-dev libxcb-xkb-dev libxcb-xrm-dev libxcb-cursor-dev libasound2-dev libpulse-dev libmpdclient-dev libiw-dev libnl-3-dev
Now to retrieve the source code and compile it:
## get source and compile git clone --recursive https://github.com/jaagr/polybar mkdir polybar/build cd polybar/build cmake .. sudo make install
4.3.4 Get my dotfiles (customisations)
Before proceeding, make sure you check this short blog post of mine about how I use GNU Stow with my dotfiles.
All packages are in place. Now we need the dotfiles to complete the process. As I tend to tweak things here and there, I link you to the current version of my dotfiles, which is v2.1.0. You must download that version, decompress it in your
$HOME directory, rename it “dotfiles-prot” (or something that works for you), and then prepare to run the following (here is the canonical link to my dotfiles, if you wish to clone the repo).
# switch your current directory to my dotfiles cd ~/dotfiles-prot # use stow to create symlinks # all parts of the working environment go to their right place # here are my essentials stow bin bspwm cli-tools colours extra fonts gtk shell polybar vim xorg music
After running the
stow command, check the files in the
xorg-extra directory. There are instructions on how to fix xbacklight if it is not working.
Just to be sure, reboot you system. Done! You can now choose to log in to BSPWM from the login screen (which should be
lightdm if you selected the MATE desktop).
Do not delete my dotfiles after running
stow. It will break all the symlinks it created. Similarly, do not reorganise things. If you want to customise things, first familiarise yourself with
stow. Then make a copy of my dotfiles, add your adaptations, and use those to create the symlinks. I strongly encourage you to use
stow. It saves you from a lot of manual work and makes your dotfiles portable and easy to deploy.
5 Using the new system
5.1 Custom key chords
To see all available key bindings, read this file
~/.config/sxhkd/sxhkdrc. Below are the basics (I have tried to define key bindings that do not conflict with any of the programs I have used):
Key bindings for my BSPWM setup followed by their description =============================== Basic motions ------------- Vi like motions: super + h Focus window to the left super + l Focus window to the right super + j Focus window to the bottom super + k Focus window to the top super + shift + h Move focused window to the left super + shift + l Move focused window to the right super + shift + j Move focused window to the bottom super + shift + k Move focused window to the top Window operations: super + q Close window super + shift + q Kill window super + m Toggle monocle view (the equivalent of maximise) super + f Toggle full screen view super + space Toggle floating/tiling Workspace operations: super + 1 Switch to workspace 1 super + 2 Switch to workspace 2 ... same up to 9 super + shift + 1 Move focused window to workspace 1 super + shift + 2 Move focused window to workspace 2 ... same up to 9 super + ctrl + shift + 1 Move and follow focused window to workspace 1 super + ctrl + shift + 2 Move and follow focused window to workspace 2 ... same up to 9 Main tools: super + d Open dmenu (for launching programs) super + return Open a urxvt instance Key chord chains ---------------- These are multiple key presses to perform an action. I include some comments in the sxhkdrc file about why I choose those letters (mnemonic). Commands that affect the environment: super + e ; s Reload the sxhkdrc (when making changes) super + e ; p Reload polybar Commands that invoke executables (see sxhkdrc for all the commands): super + x ; 1 Run Firefox super + x ; 2 Run a terminal with ranger (file manager) super + x ; 3 Run a terminal with newsboat (feed reader)
5.2 The file manager
Now that you know the basic shortcuts, you may want to personalise your setup. Start with adding your wallpaper. Open
ranger by typing
super + x ; 2 (super and x, followed by 2). Once inside
ranger, you can navigate using Vi motions or type
gpc to go to your pictures folder (all shortcuts are defined in
~/.config/ranger/rc.conf). Set the selection over the image you want and type
Cbg to set your new background. Similarly, you can define a lock screen image, by typing
5.3 Auto starting programs
To see what programs are auto started, see
~/.config/bspwm/bspwmrc, as well as
5.4 The Tempus themes
All the colours you see are part of my Tempus themes project. The one you get is Tempus Dusk, which is a dark theme with slightly desaturated colours. To switch to something else, type
super + e ; t. A drop-down menu will appear. Either type your choice and press enter or use the arrow keys and press enter. Some themes are light, others are dark.
Open terminals should be updated live (though not CLI programs, like
ranger), but GUI applications must typically be closed and opened again for changes to take effect.
To customise what GTK themes and icons are used in this switch, you must edit this script
~/bin/own_script_update_environment_theme (search for the definition of the
modify_gtk3 function—current GTK themes are Materia, while icons are Mint-Y). This script also changes the wallpaper if you go from a dark to a light theme and vice versa. To define the image for dark and light themes respectively, add the images of your choice at
~/Pictures/theme/light.jpg (edit the script if you wish to either disable this or use a different location—the function is
5.5 Password manager (optional)
Consider setting up
qtpass) as your password manager. If you do, you can conveniently copy your stored passwords to the clipboard (with a timed auto clear) by bringing up the
super + p (for me, this is one of the best things ever). The interface is the same as with all my
dmenu implementations (such as the theme switch from the previous paragraph). Type your search or use the arrows and hit the return key.
There are many more things you will learn as you use the system. I recommend you develop a good understanding of my dotfiles. Many of the files therein include inline comments and define all of the custom actions I rely on.
5.6 Add your music (optional)
We need to set up the Music Player Daemon using a per-user install.
# disable the systemd service # we autostart mpd from the bspwm environment sudo systemctl disable mpd # switch to the mpd local config directory cd ~/.config/mpd # create the directory where playlist data is stored mkdir playlists # create the files mpd needs to run touch database log pid state sticker.sql
To update the
mpd database (assuming the presence of files at
~/Music) either run
mpc update in a terminal or type
ncmpcpp and then press
u. If your music is in a different directory, edit the path in this file
You may need to reboot for the
systemd service to stop interfering with your setup.
To play music, learn how to use
ncmpcpp (I typically switch to screen 4, by hitting
A and hit enter for an empty prompt which adds all available music to the playlist, then I toggle on repeat mode with
r and random order with
If you do not like
ncmpcpp, I highly recommend
cantata, a graphical MPD frontend using the Qt toolkit.
5.7 Use newsboat for RSS feeds (optional)
To actually use
newsboat (shortcut is
super + x ; 3), you first need to provide a file with links to RSS/Atom feeds. This should be placed at
~/.config/newsboat/urls. Here is a sample:
# Just a feed URL per line https://protesilaos.com/feed.xml https://protesilaos.com/codelog.xml # The words inside quotes are tags, separated by a space. # Tags can be used to filter content (see filters below). https://protesilaos.com/feed.xml "Blogs Politics" https://protesilaos.com/codelog.xml "Blogs FOSS" https://gitlab.com/protesilaos/dotfiles.atom "Packages" https://github.com/ubuntu-mate/mate-tweak/releases.atom "Packages" # Filters # ======= # What goes after `query:` is the text that newsboat displays "query:Blogs:tags # \"Blogs\"" "query:Git Packages:tags # \"Packages\"" "query:Unread Articles:unread = \"yes\""
Configure this program to your liking by editing
~/.config/newsboat/config. For all available options, check
5.8 Configure the notification daemon (optional)
The daemon that handles notifications is
dunst. Its options file is located at
For example, in case you want to change the icons that
dunst uses, edit the paths in this:
# Paths to default icons. icon_folders = /usr/share/icons/Mint-Y/actions/32/:/usr/share/icons/Mint-Y/animations:/usr/share/icons/Mint-Y/apps/32/:/usr/share/icons/Mint-Y/categories:/usr/share/icons/Mint-Y/devices/32/:/usr/share/icons/Mint-Y/mimetypes/32/:/usr/share/icons/Mint-Y/panel/32/:/usr/share/icons/Mint-Y/places:/usr/share/icons/Mint-Y/status
To read about all the available settings, see
Note that the colours are changed every time you run the commands that change the Tempus themes (see above).
5.8.1 Custom notifications (optional)
If you want to create your own notifications, check
man notify-send. Here are some examples:
# Generic test notify-send "Test title" "Test body of text" # Generic test with a generic icon # uses the icon paths defined in `~/.config/dunst/dunstrc` notify-send -i firefox "Test title" "Test body of text" # Generic test with absolute path to icon notify-send -i /usr/share/icons/Mint-Y/apps/32/firefox.png "Test title" "Test body of text" # Display the output of another command # Show the status of the Music Player Daemon in a custom format notify-send -i rhythmbox "Now Playing" "$(mpc --format '%artist% ~ %title% \[%album%\]' current)"
6 Further steps
6.1 General maintenance of Debian Sid
I always like to maintain a “Debian maintenance” file where I document all customisations I make which are not part of the official release (such as installing Polybar). I recommend you do the same and always keep track of custom files you add here and there, otherwise you will clutter your system. That might cause problems down the way.
Also remember to run
sudo apt update before installing packages that pull in new dependencies. The last thing you want is package conflicts arising from a combination of older and newer packages. As for upgrading packages, I always run
sudo apt full-upgrade because it removes packages that become obsolete. Remove orphan packages with
sudo apt autoremove.
You already read about
apt-listbugs that it stores its data at
/etc/apt/preferences.d/apt-listbugs. In case you forgot about it, or I have not stressed enough the importance of this package, here is an excerpt from
apt-listbugs is a tool which retrieves bug reports from the Debian Bug Tracking System and lists them. In particular, it is intended to be invoked before each installation or upgrade by APT, or other compatible package managers, in order to check whether the installation/upgrade is safe.
In the typical use case, the user is installing or upgrading a number of packages with APT or some other compatible package manager. Before the package installation or upgrade is actually performed, apt-listbugs is automatically invoked: it queries the Debian Bug Tracking System for bugs (of certain configured severities) that would be introduced into the system by the installation or upgrade; if any such bug is found, apt-listbugs warns the user and asks how to proceed. Among other things, the user has the opportunity to continue, to abort the installation or upgrade, or to pin some packages (so that the unsafe installation or upgrade is deferred). However, pinning is not effective immediately, and requires restarting the APT session (by aborting and then re-running the same APT command).
Always inspect the output of this program and act on it. Debian Sid expects you to take full responsibility over the maintenance of your system. Furthermore, make sure you periodically check the packages that you pinned in case a fix has been provided.
6.2 Nodejs environment (optional)
Debian provides packages for
nodejs but I find them problematic. Instead I follow the official instructions. I did:
curl -sL https://deb.nodesource.com/setup_10.x | sudo -E bash - sudo apt-get install -y nodejs sudo apt-get install -y build-essential
6.3 Ruby environment (optional)
This website is powered by Jekyll, a static site generator that is built with Ruby. I need the following to get my local testing environment:
sudo apt install ruby ruby-dev ruby-bundler zlib1g-dev
6.4 Clean up GTK themes, icons, fonts (optional)
Unless you enjoy having a large collection of available fonts and themes (or are using one of the following), you will probably want to remove much of what is available:
sudo apt remove albatross-gtk-theme blackbird-gtk-theme bluebird-gtk-theme greybird-gtk-theme murrine-themes mate-icon-theme-faenza gnome-icon-theme fonts-droid-fallback fonts-sil-gentium fonts-sil-gentium-basic fonts-linuxlibertine fonts-vlgothic fonts-crosextra-carlito fonts-crosextra-caladea fonts-lato
If you want to add some excellent alternatives, I recommend these:
sudo apt install arc-theme papirus-icon-theme fonts-noto-hinted fonts-noto-mono
7.1 Polybar is missing
polybar will not appear on screen if it does not recognise the active monitor. You need to edit
~/.config/polybar/config. Search for “monitor” and change the value based on the output of
I find my connected monitor by typing this in a terminal
xrandr | grep -w connected. You get something like this:
xrandr | grep -w connected VGA-0 connected 1920x1080+0+0 (normal left inverted right x axis y axis) 480mm x 270mm
What you are looking for is the very first part,
VGA-0 in this case.
7.2 URxvt does not show bold fonts
The configuration file for
urxvt (package name is
rxvt-unicode) is placed in a custom location:
~/.my_urxvt/config. I used to have these font definitions:
URxvt.font: xft:Hack:pixelsize=14,xft:DejaVu Sans Mono:pixelsize=14 URxvt.boldFont: xft:Hack:pixelsize=14:bold,xft:DejaVu Sans Mono:pixelsize=14:bold URxvt.italicFont: xft:Hack:pixelsize=14:italic,xft:DejaVu Sans Mono:pixelsize=14:italic URxvt.bolditalicFont: xft:Hack:pixelsize=14:bold:italic,xft:DejaVu Sans Mono:pixelsize=14:bold:italic
But they do not seem to work any longer. So I changed to these:
URxvt.font: xft:Hack:style=Regular:pixelsize=14,xft:DejaVu Sans Mono:style=Book:pixelsize=14 URxvt.italicFont: xft:Hack:style=Italic:pixelsize=14,xft:DejaVu Sans Mono:style=Italic:pixelsize=14 URxvt.boldFont: xft:Hack:style=Bold:pixelsize=14,xft:DejaVu Sans Mono:style=Bold:pixelsize=14 URxvt.boldItalicFont: xft:Hack:style=Bold Italic:pixelsize=14,xft:DejaVu Sans Mono:style=Bold Italic:pixelsize=14
Enjoy your new system
I hope you make good use of these instructions and that you appreciate Debian Sid and BSPWM (and all the rest) as much as I do. While I have written this guide in a user-friendly way, I strongly encourage you to research everything before proceeding. This is not a guide for inexperienced users who do not fully understand the effects of the commands they type in the terminal.
For any questions or recommendations, feel free to contact me.
The Free Software Foundation does not include Debian in its list of fully free GNU/Linux distributions, probably because Debian offers a convenient way to include non-free packages (mainly drivers and firmware). The FSF’s stance is understandable, but I think Debian’s realism is beneficial overall. Getting hardware that does not require any propriety code is quite tricky and typically comes at a premium. Not everyone can afford that. ^
What I mean is that if you define
testingin your apt sources you will always remain on that branch, whereas setting it to
busterwill currently put you on Testing but eventually leave you on it once it becomes the new