My Computer Setup

(Note: this page is under construction.)

This page describes the setup I have on blueberry and raspberry. The configuration files and scripts (i.e. the text in pre environments), as well as the bnoise.png image below, are placed under the Creative Commons CC0 1.0 Universal license.

Software referenced on this page (click to expand):
Name, link to homepageDebian package(s)
DebianN/A
debootstrapdebootstrap
Fcitxfcitx5
fishfish
i3i3-wm
LimineN/A
Neovimneovim
xinitxinit
XTermxterm

Operating System

I use the unstable distribution of Debian. On both blueberry and raspberry, Debian was installed with the debootstrap script.

Partitioning

On both, I have an EFI system partition, which is not ordinarily mounted (during system upgrades I mount it at /root/real-boot); btrfs partitions mounted at / and /home/benji; and a tmpfs pseudo-filesystem mounted at /tmp. On raspberry, I have a btrfs partition mounted at /home/benji/.local/share/Steam.

Bootloader

I use the Limine bootloader. I have /boot symlinked to /root/real-boot/kernels/debian (see the Partitioning section) and I manually update my Limine configuration whenever there is a kernel upgrade to point to the new kernel.

limine.cfg on raspberry at the time of writing:

  TERM_FONT_SCALE=2x2
  TERM_BACKGROUND=3f000000
  TERM_WALLPAPER=boot:///bg/bnoise.png
  TERM_WALLPAPER_STYLE=tiled
 
  TIMEOUT=2
 
:Debian
  PROTOCOL=linux
  KERNEL_PATH=boot:///kernels/debian/vmlinuz-6.7.9-amd64
  MODULE_PATH=boot:///kernels/debian/initrd.img-6.7.9-amd64
  CMDLINE=root=/dev/nvme0n1p6 ro quiet

/dev/nvme0n1p6 in there is the root partition, and bnoise.png is the following image (click on it to see it tiled at full size).

That image was created by me early into experimenting with adapting the void-and-cluster algorithm for blue noise generation to contexts other than square grids (in this case, the Voronoi diagram of some points independently placed uniformly randomly onto a flat torus).

On blueberry, I have Limine configured to load straight into Linux with no delay. On raspberry, I used to have multiple operating systems installed, sharing the same /home/benji partition but different root partitions, but now I only use the Debian install. There isn't really any reason to keep the bootloader screen on raspberry, aside from the fact that I like looking at the bnoise.png texture.

Login and Window Manager

I log in on a tty. For tty1, the i3 window manager is started when I log in.

I use the fish shell, and ~/.config/fish/config.fish contains the following:

if test "$(tty)" = /dev/tty1
  exec startx
end

set -gx EDITOR nvim

The first three lines (and xinit) are responsible for starting i3 when I log into tty1, and the last line makes my default text editor Neovim.

~/.xinitrc contains the following:

export XMODIFIERS=@im=fcitx
export GTK_IM_MODULE=fcitx
export QT_IM_MODULE=fcitx

exec dbus-launch --exit-with-session i3
~/.config/i3/config contains the following (click to expand):
set $mod Mod4
set $term xterm
set $scripts ~/scripts
font pango: Source Code Pro 14px

exec gnome-keyring-daemon -r
exec $scripts/set-res

exec xrdb -merge ~/.Xresources
exec xset s off
exec xset -dpms
#exec setxkbmap -layout 'us,us(intl)' -option grp:shifts_toggle
exec fcitx5

floating_modifier $mod
workspace_layout tabbed

default_border pixel 3
hide_edge_borders smart

#class                   border  backg   text    indic   child
client.focused          #bfbfbf #bfbfbf #000000 #bfbfbf #bfbfbf
client.focused_inactive #000000 #000000 #7f7f7f #000000 #000000
client.unfocused        #000000 #000000 #7f7f7f #000000 #000000

bindsym --release $mod+a exec $scripts/sshot
bindsym --release $mod+q exec $scripts/sshot-full

bindsym $mod+l exec $scripts/lock
bindsym $mod+b exec $scripts/battery
bindsym $mod+w exec $scripts/workspace

bindsym $mod+t exec $term
bindsym $mod+s exec $term -e pulsemixer

mode "run" {
  bindsym a exec anki; mode "default"
  bindsym d exec discord --no-sandbox; mode "default"
  bindsym s exec steam; mode "default"
  bindsym Escape mode "default"
} bindsym $mod+o mode "run"

mode "games" {
  bindsym m exec mc; mode "default"
  bindsym Escape mode "default"
} bindsym $mod+g mode "games"

mode "firefox" {
  bindsym space exec firefox -new-window; mode "default"
  bindsym u exec firefox -new-window uncc.instructure.com; mode "default"
  bindsym Escape mode "default"
} bindsym $mod+f mode "firefox"

bindsym $mod+Shift+Tab kill

bindsym $mod+Left focus left
bindsym $mod+Down focus down
bindsym $mod+Up focus up
bindsym $mod+Right focus right
bindsym $mod+Tab focus next
bindsym $mod+comma focus parent
bindsym $mod+period focus child

bindsym $mod+Shift+Left move left
bindsym $mod+Shift+Down move down
bindsym $mod+Shift+Up move up
bindsym $mod+Shift+Right move right

bindsym $mod+Return fullscreen toggle

bindsym $mod+z split h
bindsym $mod+c split v
bindsym $mod+x layout toggle split
bindsym $mod+v layout tabbed

bindsym $mod+grave workspace next

bindsym $mod+Shift+a workspace a; mode "default"
bindsym $mod+Shift+b workspace b; mode "default"
bindsym $mod+Shift+c workspace c; mode "default"
bindsym $mod+Shift+d workspace d; mode "default"
bindsym $mod+Shift+e workspace e; mode "default"
bindsym $mod+Shift+f workspace f; mode "default"
bindsym $mod+Shift+g workspace g; mode "default"
bindsym $mod+Shift+h workspace h; mode "default"
bindsym $mod+Shift+i workspace i; mode "default"
bindsym $mod+Shift+j workspace j; mode "default"
bindsym $mod+Shift+k workspace k; mode "default"
bindsym $mod+Shift+l workspace l; mode "default"
bindsym $mod+Shift+m workspace m; mode "default"
bindsym $mod+Shift+n workspace n; mode "default"
bindsym $mod+Shift+o workspace o; mode "default"
bindsym $mod+Shift+p workspace p; mode "default"
bindsym $mod+Shift+q workspace q; mode "default"
bindsym $mod+Shift+r workspace r; mode "default"
bindsym $mod+Shift+s workspace s; mode "default"
bindsym $mod+Shift+t workspace t; mode "default"
bindsym $mod+Shift+u workspace u; mode "default"
bindsym $mod+Shift+v workspace v; mode "default"
bindsym $mod+Shift+w workspace w; mode "default"
bindsym $mod+Shift+x workspace x; mode "default"
bindsym $mod+Shift+y workspace y; mode "default"
bindsym $mod+Shift+z workspace z; mode "default"

mode "move" {
  bindsym Left  move workspace to output left;  mode "default"
  bindsym Right move workspace to output right; mode "default"

  bindsym a move container to workspace a; workspace a; mode "default"
  bindsym b move container to workspace b; workspace b; mode "default"
  bindsym c move container to workspace c; workspace c; mode "default"
  bindsym d move container to workspace d; workspace d; mode "default"
  bindsym e move container to workspace e; workspace e; mode "default"
  bindsym f move container to workspace f; workspace f; mode "default"
  bindsym g move container to workspace g; workspace g; mode "default"
  bindsym h move container to workspace h; workspace h; mode "default"
  bindsym i move container to workspace i; workspace i; mode "default"
  bindsym j move container to workspace j; workspace j; mode "default"
  bindsym k move container to workspace k; workspace k; mode "default"
  bindsym l move container to workspace l; workspace l; mode "default"
  bindsym m move container to workspace m; workspace m; mode "default"
  bindsym n move container to workspace n; workspace n; mode "default"
  bindsym o move container to workspace o; workspace o; mode "default"
  bindsym p move container to workspace p; workspace p; mode "default"
  bindsym q move container to workspace q; workspace q; mode "default"
  bindsym r move container to workspace r; workspace r; mode "default"
  bindsym s move container to workspace s; workspace s; mode "default"
  bindsym t move container to workspace t; workspace t; mode "default"
  bindsym u move container to workspace u; workspace u; mode "default"
  bindsym v move container to workspace v; workspace v; mode "default"
  bindsym w move container to workspace w; workspace w; mode "default"
  bindsym x move container to workspace x; workspace x; mode "default"
  bindsym y move container to workspace y; workspace y; mode "default"
  bindsym z move container to workspace z; workspace z; mode "default"

  bindsym Escape mode "default"
} bindsym $mod+m mode "move"

mode "resize" {
  bindsym Left resize shrink width 50
  bindsym Right resize grow width 50
  bindsym Up resize grow height 50
  bindsym Down resize shrink height 50

  bindsym Shift+Left resize shrink width 10
  bindsym Shift+Right resize grow width 10
  bindsym Shift+Up resize grow height 10
  bindsym Shift+Down resize shrink height 10

  bindsym Return mode "default"
} bindsym $mod+r mode "resize"

Some of the programs and scripts in there will be described later.

Terminal Emulator

I use XTerm with the following in ~/.Xresources (loaded by i3):

xterm*borderWidth: 0

*VT100*foreground: #e6e6e6
*VT100*background: #000000

*VT100*color0:  #000000
*VT100*color1:  #8c0000
*VT100*color2:  #008c00
*VT100*color3:  #8c8c00
*VT100*color4:  #00558c
*VT100*color5:  #8c558c
*VT100*color6:  #008c8c
*VT100*color7:  #8c8c8c

*VT100*color8:  #333333
*VT100*color9:  #e63333
*VT100*color10: #33e633
*VT100*color11: #e6e633
*VT100*color12: #338ce6
*VT100*color13: #e68ce6
*VT100*color14: #33e6e6
*VT100*color15: #e6e6e6

*VT100*faceName: Source Code Pro:pixelsize=14

xterm*decTerminalID: vt340
xterm*termName: xterm-256color

Those colors look like this:

as text on #000000 background
#000000 #8c0000 #8c8c00 #008c00 #008c8c #00558c #8c558c #8c8c8c
#333333 #e63333 #e6e633 #33e633 #33e6e6 #338ce6 #e68ce6 #e6e6e6
as text on #e6e6e6 background
#000000 #8c0000 #8c8c00 #008c00 #008c8c #00558c #8c558c #8c8c8c
#333333 #e63333 #e6e633 #33e633 #33e6e6 #338ce6 #e68ce6 #e6e6e6
as background for #000000 text
#000000 #8c0000 #8c8c00 #008c00 #008c8c #00558c #8c558c #8c8c8c
#333333 #e63333 #e6e633 #33e633 #33e6e6 #338ce6 #e68ce6 #e6e6e6
as background for #e6e6e6 text
#000000 #8c0000 #8c8c00 #008c00 #008c8c #00558c #8c558c #8c8c8c
#333333 #e63333 #e6e633 #33e633 #33e6e6 #338ce6 #e68ce6 #e6e6e6