My new laptop Framework
(Framework Laptop 13 DIY Edition (AMD Ryzen 7040 Series)) arrived, all the hardware works out of the box on Debian Stable, and I'm very happy indeed.
This post has the notes of all the provisioning steps, so that I can replicate
them again if needed.
Installing Debian 12
Debian 12's installer just worked, with Secure Boot enabled no less, which was nice.
The only glitch is an argument with the guided partitioner, which was uncooperative: I have been hit before by a
/boot partition too small, and I wanted 1G of EFI and 1G of boot, while the partitioner decided that 512Mb were good enough. Frustratingly, there was no way of changing that, nor I found how to get more than 1G of swap, as I wanted enough swap to fit RAM for hybernation.
I let it install the way it pleased, then I booted into grml for a round of gparted.
The tricky part of that was resizing the root btrfs filesystem, which is in an
LV, which is in a VG, which is in a PV, which is in LUKS. Here's a cheatsheet.
Shrink partitions:
- mount the root filesystem in
/mnt
- btrfs filesystem resize 6G
/mnt
- umount the root filesystem
- lvresize -L 7G vgname/lvname
- pvresize --setphysicalvolumesize /dev/mapper/pvname 8G
- cryptsetup resize --device-size 9G name
note that I used an increasing size because I don't trust that each tool has a
way of representing sizes that aligns to the byte. I'd be happy to find out
that they do, but didn't want to find out the hard way that they didn't.
Resize with gparted:
Move and resize partitions at will. Shrinking first means it all takes a
reasonable time, and you won't have to wait almost an hour for a terabyte-sized
empty partition to be carefully moved around. Don't ask me why I know.
Regrow partitions:
- cryptsetup resize name
- pvresize /dev/mapper/pvname
- lvresize -L 100% vgname/lvname
- mount the root filesystem in
/mnt
- btrfs filesystem resize max
/mnt
- umount the root filesystem
Setup gnome
When I get a new laptop I have a tradition of trying to make it work with Gnome
and Wayland, which normally ended up in frustration and a swift move to X11 and
Xfce: I have a lot of long-time muscle memory involved in how I use a computer,
and it needs to fit like prosthetics. I can learn to do a thing or two in a
different way, but any papercut that makes me break flow and I cannot fix will
soon become a dealbreaker.
This applies to Gnome as present in Debian Stable.
General Gnome settings tips
I can
list all available settings
with:
gsettings list-recursively
which is handy for grepping things like hotkeys.
I can manually set a value with:
gsettings set <schema> <key> <value>
and I can reset it to its default with:
gsettings reset <schema> <key>
Some applications like Gnome Terminal use
"relocatable schemas", and in those cases you also need to specify a path, which can be discovered using
dconf-editor
:
gsettings set <schema>:<path> <key> <value>
Install appindicators
First thing first:
app install gnome-shell-extension-appindicator
, log out
and in again: the Gnome Extension manager won't see the extension as available
until you restart the whole session.
I have no idea why that is so, and I have no idea why a notification area is
not present in Gnome by default, but at least now I can get one.
Fix font sizes across monitors
My laptop screen and monitor have significantly different DPIs, so:
gsettings set org.gnome.mutter experimental-features "['scale-monitor-framebuffer']"
And in Settings/Displays, set a reasonable scaling factor for each display.
Disable Alt/Super as hotkey for the Overlay
Seeing all my screen reorganize and reshuffle every time I accidentally press
Alt leaves me disoriented and seasick:
gsettings set org.gnome.mutter overlay-key ''
Focus-follows-mouse and Raise-or-lower
My desktop is like my desktop: messy and cluttered. I have lots of overlapping
window and I switch between them by moving the focus with the mouse, and when
the visible part is not enough I have a handy hotkey mapped to raise-or-lower
to bring forward what I need and send back what I don't need anymore.
Thankfully Gnome can be configured that way, with some work:
- In gnome-shell settings, keyboard, shortcuts, windows, set "Raise window if
covered, otherwise lower it" to "Super+Escape"
- In gnome-tweak-tool, Windows, set "Focus on Hover"
This almost worked, but sometimes it didn't do what I wanted, like I expected
to find a window to the front but another window disappeared instead. I
eventually figured that
by default Gnome delays focus changes by a perceivable
amount,
which is evidently too slow for the way I move around windows.
The amount cannot be shortened, but it can be removed with:
gsettings set org.gnome.shell.overrides focus-change-on-pointer-rest false
Mouse and keyboard shortcuts
Gnome has lots of preconfigured sounds, shortcuts, animations and other
distractions that I do not need. They also either interfere with key
combinations I want to use in terminals, or cause accidental window moves or
resizes that make me break flow, or otherwise provide sensory overstimulation
that really does not work for me.
It was a lot of work, and these are the steps I used to get rid of most of
them.
Disable Super+N combinations that accidentally launch a questionable choice
of programs:
for i in seq 1 9 ; do gsettings set org.gnome.shell.keybindings switch-to-application-$i '[]'; done
Gnome-Shell settings:
- Multitasking:
- disable hot corner
- disable active edges
- set a fixed number of workspaces
- workspaces on all displays
- switching includes apps from current workspace only
- Sound:
- Keyboard
- Compose Key set to Caps Lock
- View and Customize Shortcuts:
- Launchers
- launch help browser: remove
- Navigation
- move to workspace on the left: Super+Left
- move to workspace on the right: Super+Right
- move window one monitor : remove
- move window one workspace to the left: Shift+Super+Left
- move window one workspace to the right: Shift+Super+Right
- move window to : remove
- switch system : remove
- switch to : remove
- switch windows : disabled
- Screenshots
- Record a screenshot interactively: Super+Print
- Take a screenshot interactively: Print
- Disable everything else
- System
- Focus the active notification: remove
- Open the applcation menu: remove
- Restore the keyboard shortctus: remove
- Show all applications: remove
- Show the notification list: remove
- Show the overvire: remove
- Show the run command prompt: remove (the default Gnome launcher is not for me)
Super+F2 (or remove to leave it to the terminal)
- Windows
- Close window: remove
- Hide window: remove
- Maximize window: remove
- Move window: remove
- Raise window if covered, otherwise lower it: Super+Escape
- Resize window: remove
- Restore window: remove
- Toggle maximization state: remove
- Custom shortcuts
- xfrun4, launching xfrun4, bound to Super+F2
- Accessibility:
- disable "Enable animations"
gnome-tweak-tool settings:
- Keyboard & Mouse
- Overview shortcut: Right Super. This cannot be disabled, but since my
keyboard doesn't have a Right Super button, that's good enough for me.
Oddly, I cannot find this in gsettings.
- Window titlebars
- Double-Click: Toggle-Maximize
- Middle-Click: Lower
- Secondary-Click: Menu
- Windows
- Resize with secondary click
Gnome Terminal settings:
Thankfully 10 years ago
I took notes on how to customize Gnome Terminal, and they're still mostly valid:
-
Shortcuts
- New tab: Super+T
- New window: Super+N
- Close tab: disabled
- Close window: disabled
- Copy: Super+C
- Paste: Super+V
- Search: all disabled
- Previous tab: Super+Page Up
- Next tab: Super+Page Down
- Move tab : Disabled
- Switch to tab N: Super+Fn (only available after disabling overview)
-
Switch to tab N with Alt+Fn cannot be configured in the UI:
Alt+Fn
is detected as simply Fn
. It can however be set with gsettings:
sh
for i in seq 1 12 ; do gsettings set org.gnome.Terminal.Legacy.Keybindings:/org/gnome/terminal/legacy/keybindings/ switch-to-tab-$i "<Alt>F$i"; done
-
Profile
- Text
- Sound: disable terminal bell
Other hotkeys that got in my way and had to disable the hard way:
for n in seq 1 12 ; do gsettings set org.gnome.mutter.wayland.keybindings switch-to-session-$n '[]'; done
gsettings set org.gnome.desktop.wm.keybindings move-to-workspace-down '[]'
gsettings set org.gnome.desktop.wm.keybindings move-to-workspace-up '[]'
gsettings set org.gnome.desktop.wm.keybindings panel-main-menu '[]'
gsettings set org.gnome.desktop.interface menubar-accel '[]'
Note that even after removing F10 from being bound to
menubar-accel
, and after having to gsetting binding to F10 as is:
$ gsettings list-recursively grep F10
org.gnome.Terminal.Legacy.Keybindings switch-to-tab-10 '<Alt>F10'
I still cannot quit Midnight Commander using F10 in a terminal, as that moves
the focus in the window title bar. This looks like a Gnome bug, and a very
frustrating one for me.
Appearance
Gnome-Shell settings:
gnome-tweak-tool settings:
- Fonts
- Top Bar
- Clock/Weekday: enable (why is this not a default?)
Gnome Terminal settings:
- General
- Theme variant: Dark (somehow it wasn't picked by up from the system settings)
- Profile
Other decluttering and tweaks
Gnome Shell Settings:
- Search
- disable application search
- Removable media
- set everything to "ask what to do"
- Default applications
- Web: Chromium
- Mail: mutt
- Calendar: khal is not sadly an option
- Video: mpv
- Photos: Geequie
Set a delay between screen blank and lock: when the screen goes blank, it is
important for me to be able to say "nope, don't blank yet!", and maybe switch
on caffeine mode during a presentation without needing to type my password in
front of cameras. No UI for this, but at least gsettings has it:
gsettings set org.gnome.desktop.screensaver lock-delay 30
Extensions
I enabled the Applications Menu extension, since it's impossible to find less
famous applications in the Overview without knowing in advance how they're
named in the desktop. This stole a precious hotkey, which I had to disable in
gsettings:
gsettings set org.gnome.shell.extensions.apps-menu apps-menu-toggle-menu '[]'
I also enabled:
- Removable Drive Menu: why is this not on by default?
- Workspace Indicator
- Ubuntu Appindicators (apt install gnome-shell-extension-appindicator and restart Gnome)
I didn't go and look for Gnome Shell extentions outside what is packaged in
Debian, as I'm very wary about running JavaScript code randomly downloaded from
the internet with full access over my data and desktop interaction.
I also took care of checking that the
Gnome Shell Extensions web
page complains about the lacking "GNOME Shell
integration" browser extension, because the web browser shouldn't be allowed to
download random JavaScript from the internet and run it with full local access.
Yuck.
Run program dialog
The default run program dialog is almost, but not quite, totally useless to me,
as it does not provide completion, not even just for executable names in path,
and so it ends up being faster to open a new terminal window and type in there.
It's possible, in Gnome Shell settings, to bind a custom command to a key. The resulting keybinding will now show up in gsettings, though it can be located in a more circuitous way by grepping first, and then looking up the resulting path in
dconf-editor
:
gsettings list-recursively grep custom-key
org.gnome.settings-daemon.plugins.media-keys custom-keybindings ['/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom0/']
I tried out several run dialogs present in Debian, with sad results, possibly
due to most of them not being tested on wayland:
- fuzzel does not start
- gmrun is gtk2, last updated in 2016, but works fine
- kupfer segfaults as I type
- rofi shows, but can't get keboard input
- shellex shows a white bar at top of the screen and lots of errors on stderr
- superkb wants to grab the screen for hotkeys
- synapse searched news on the internet as I typed, which is a big no for me
- trabucco crashes on startup
- wofi works but looks like very much an acquired taste, though it has some
completion that makes it more useful than Gnome's run dialog
- xfrun4 (package xfce4-appfinder) struggles on wayland, being unable to center
its window and with the pulldown appearing elsewhere in the screen, but it
otherwise works
Both gmrun and xfrun4 seem like workable options, with xfrun4 being
customizable with convenient shortcut prefixes, so xfrun4 it is.
TODO
- Figure out what is still binding F10 to menu, and what I can do about it
- Figure out how to reduce the size of window titlebars, which to my taste
should be unobtrusive and not take 2.7% of vertical screen size each. There's
a minwaita theme which isn't packaged in Debian. There's a User Theme
extension, and then the whole theming can of worms to open. For another day.
- Figure out if Gnome can be convinced to resize popup windows? Take the Gnome
Terminal shortcut preferences for example: it takes of the vertical screen
and can only display of all available shortcuts, and I cannot find a valid
reason why I shouldn't be allowed to enlarge it vertically.
- Figure out if I can place shortcut launcher icons in the top panel, and how
I'll try to update these notes as I investigate.
Conclusion so far
I now have something that seems to work for me. A few papercuts to figure out
still, but they seem manageable.
It all feels a lot harder than it should be: for something intended to be
minimal, Gnome defaults feel horribly cluttered and noisy to me, continuosly
getting in the way of getting things done until tamed into being out of the way
unless called for. It felt like a device that boots into flashy demo mode,
which needs to be switched off before actual use.
Thankfully it can be switched off, and now I have notes to do it again if
needed.
gsettings
oddly feels to me like a better UI than the interactive settings
managers: it's more comprehensive, more discoverable, more scriptable, and more
stable across releases. Most of the Q&A I found on the internet with guidance
given on the UI was obsolete, while when given with
gsettings
command lines
it kept being relevant. I also have the feeling that these notes would be
easier to understand and follow if given as gsettings invocations instead of
descriptions of UI navigation paths.
At some point I'll upgrade to Trixie and reevaluate things, and these notes
will be a useful checklist for that.
Fingers crossed that this time I'll manage to stay on Wayland. If not, I know
that Xfce is still there for me, and I can trust it to be both helpful and good
at not getting in the way of my work.