diff --git a/content/desktop.md b/content/desktop.md
new file mode 100644
index 0000000..c792f69
--- /dev/null
+++ b/content/desktop.md
@@ -0,0 +1,139 @@
+---
+title: "Desktop"
+description: "A short guide to the Federated CoreDesktop desktop: launching apps, moving windows with Tiling Shell, editing layouts, workspaces, notifications, screenshots and screen recordings."
+sections:
+ - type: hero
+ compact: true
+ eyebrow: "GNOME · Tiling Shell"
+ title: "Find your way around the desktop."
+ subhead: "CoreDesktop is GNOME with the Tiling Shell extension. A few keys get you most of the way: Super to find things, Super and the arrows to move windows, Print Screen to capture the screen."
+ tiles: ["Launch", "Tile", "Capture"]
+
+ - type: text
+ id: launching
+ kicker: "Launching apps"
+ headline: "Press Super and type."
+ body: |
+ Super is the Windows key, or ⌘ on a Mac keyboard. Press it to open the overview, start typing an app's name, and press Enter. The same search finds files, settings and calculations.
+
+ - Super+A opens the app grid, with every app installed.
+ - The dock at the bottom of the overview holds your favorite apps. Right-click an app there or in the app grid and choose **Pin to Dash** to add it.
+ - Alt+Tab or Super+Tab switches between open apps.
+ - Alt+F2 runs a command without opening a terminal.
+
+ To see everything CoreDesktop installs, browse the [software catalog](/software/).
+
+ - type: text
+ id: windows
+ kicker: "Moving windows"
+ headline: "Windows go into tiles."
+ body: |
+ Tiling Shell divides each screen into tiles. CoreDesktop starts you with three columns. A new window goes into an empty tile by itself, so you rarely need to drag or resize anything.
+
+ From the keyboard, select a window and hold Super:
+
+ - ← and → move it to the next tile. At the edge of the screen, they move it to the next monitor, if there is one.
+ - ↑ maximizes it, from a tile in the top row. If the layout has a tile above, it moves the window there instead.
+ - ↓ puts a maximized window back in a tile.
+
+ With the mouse, drag a window by its title bar:
+
+ - Hold Ctrl while you drag, and the tiles appear. Drop the window on one.
+ - Hold Ctrl and Alt to stretch it across more than one tile.
+ - Or drag the window to the top of the screen. A strip of layouts opens, and you drop the window into a tile of any of them.
+
+ Drag the window away from its tile to free it. It goes back to the size it had before.
+
+ - type: text
+ id: layouts
+ kicker: "Layouts"
+ headline: "Change the tiles to suit the screen."
+ body: |
+ Click the Tiling Shell icon in the top right of the top bar to choose a layout for the current workspace. CoreDesktop comes with three columns, two columns and a single full-screen tile. Each workspace keeps its own layout, so one can have three columns for code and another a single tile for a video call.
+
+ To change a layout or make your own:
+
+ 1. Click the Tiling Shell icon, then **Edit Layouts** (or **New Layout**).
+ 2. Choose the layout to change, then **Start editing**.
+ 3. Click inside a tile to split it in two side by side, where the line shows. Ctrl+click to split it top and bottom. Right-click a tile to delete it. Drag the line between two tiles to resize them.
+ 4. Click the Tiling Shell icon again and choose **Save**, or **Cancel** to leave the layout as it was.
+
+ Ultrawide monitors are where this shines: try four narrow columns, or a wide middle tile with a narrow one on each side.
+
+ - type: text
+ id: workspaces
+ kicker: "Workspaces"
+ headline: "More room than one screen."
+ body: |
+ Workspaces are screens side by side, each with its own windows and layout. There's always an empty one at the end; put a window on it and another empty one appears.
+
+ From the keyboard:
+
+ - Super+Page Up or Page Down switches to the workspace to the left or right. Ctrl+Alt+← or → does the same.
+ - Add Shift to take the selected window with you: Super+Shift+Page Up or Page Down.
+
+ With the mouse:
+
+ - Click the dots in the top left of the top bar, or press Super, to open the overview. It shows your workspaces side by side; click one to go there, or scroll to move between them.
+ - In the overview, drag a window onto another workspace to move it there.
+ - On a touchpad, swipe left or right with three fingers to switch, and up to open the overview.
+
+ - type: text
+ id: notifications
+ kicker: "Notifications"
+ headline: "Everything that wanted your attention."
+ body: |
+ Notifications appear at the top of the screen for a moment. Click one to open what it's about.
+
+ To see the ones you missed, click the clock in the middle of the top bar, or press Super+V. That opens the calendar and the list of notifications. **Clear** removes them, and the **Do Not Disturb** switch holds new ones back until you turn it off. They still go into the list.
+
+ CoreDesktop uses notifications too. If a daily [backup](/utilities/#backups) fails, you'll hear about it here.
+
+ The menu in the top right, which you can also open with Super+S, has Wi-Fi, Bluetooth, sound, power and dark mode.
+
+ - type: text
+ id: screenshots
+ kicker: "Screenshots and recordings"
+ headline: "Capture the screen, or a video of it."
+ body: |
+ Press Print (PrtSc on many keyboards) to open GNOME's screenshot tool. Choose an area, a window or the whole screen, then press Enter or click the round button. To record a video instead, switch the tool from the camera to the video icon first, and stop the recording with the red button in the top bar.
+
+ - Print opens the screenshot tool.
+ - Shift+Print takes a screenshot of the whole screen.
+ - Alt+Print takes a screenshot of the selected window.
+ - Ctrl+Shift+Alt+R opens the tool ready to record.
+
+ Screenshots go to `~/Pictures/Screenshots` and are copied to the clipboard, so you can paste one straight into a chat. Recordings go to `~/Videos/Screencasts`.
+
+ To point at something with arrows, boxes or text, or to blur a password before you share, use [Flameshot](/software/flameshot/): open it from the app grid, or run `flameshot gui`. For recordings with your camera, several sources or live streaming, there's [OBS Studio](/software/obs-studio/).
+
+ - type: table
+ id: shortcuts
+ kicker: "Cheat sheet"
+ headline: "The shortcuts worth learning."
+ lede: "For the rest, open **Settings › Keyboard › View and Customize Shortcuts**, where you can change them too."
+ headers: ["Keys", "What it does"]
+ rows:
+ - ["Super", "Opens the overview, to search for an app or file"]
+ - ["Super+A", "Opens the app grid"]
+ - ["Alt+Tab", "Switches between apps"]
+ - ["Super+← →", "Moves the window to the next tile, or the next monitor"]
+ - ["Super+↑ ↓", "Maximizes the window, or puts it back in a tile"]
+ - ["Ctrl while dragging", "Shows the tiles to drop a window into"]
+ - ["Super+Page Up Page Down", "Switches workspace"]
+ - ["Super+Shift+Page Up Page Down", "Moves the window to the next workspace"]
+ - ["Super+V", "Shows notifications and the calendar"]
+ - ["Super+S", "Opens the system menu: network, sound, power"]
+ - ["Print", "Takes a screenshot or a recording"]
+ - ["Alt+F4", "Closes the window"]
+ - ["Super+L", "Locks the screen"]
+
+ - type: final-cta
+ headline: "Now make it yours."
+ body: "See what CoreDesktop sets up under the hood, or browse the software it installs."
+ ctas:
+ - label: "What's set up"
+ url: "/system/"
+ - label: "Browse the software"
+ url: "/software/"
+---
diff --git a/content/software/gnome.md b/content/software/gnome.md
index 1aa50e3..6a4711d 100644
--- a/content/software/gnome.md
+++ b/content/software/gnome.md
@@ -28,3 +28,5 @@ The `gnome` package group is the desktop and its core apps. `gnome-extra` adds m
You install Arch with GNOME before CoreDesktop. The installer then makes sure the `gnome` and `gnome-extra` groups are there from pacman, enables the GDM login screen, and installs the Tiling Shell and Tailscale extensions with gext. It loads CoreDesktop's [tiling](/system/#tiling) settings for Tiling Shell from `gnome/gnome-settings.dconf`.
`update` updates GNOME with the rest of Arch, then updates your extensions and reinstalls any that no longer support the current GNOME Shell. It reapplies CoreDesktop's extension settings only when CoreDesktop changes them, so your own tweaks stay. Log out and back in to load updated extensions.
+
+New to GNOME? [Using the desktop](/desktop/) covers launching apps, moving windows, workspaces, notifications and screenshots.
diff --git a/content/system.md b/content/system.md
index 7cc80e6..7a53f7d 100644
--- a/content/system.md
+++ b/content/system.md
@@ -15,7 +15,7 @@ sections:
body: |
You end up with a [GNOME](https://www.gnome.org) system with a flexible tiling setup that works on any screen and really shines on widescreens. Hold Super (the Windows key or equivalent) and use the arrow keys to move windows around the screen.
- To change the tiling, use the icon in the top right of your screen. You can set it up however you want.
+ To change the tiling, use the icon in the top right of your screen. You can set it up however you want. [Using the desktop](/desktop/#windows) shows how, along with workspaces, notifications and screenshots.
- type: text
kicker: "Shell"
diff --git a/content/utilities.md b/content/utilities.md
index fa020c0..63463f0 100644
--- a/content/utilities.md
+++ b/content/utilities.md
@@ -161,9 +161,46 @@ sections:
kicker: "Backups"
headline: "How the backups work."
body: |
+ Once a day, shortly after midnight, restic backs up your home folder to `.backup-{machine name}` in your Nextcloud files. If the computer was off or you weren't logged in, it runs at your next login instead, once Nextcloud can be reached. It runs at the lowest priority, so it stays out of the way of whatever you're doing, and it only uploads what changed since the last backup.
+
restic reaches Nextcloud directly through rclone, with its own Nextcloud app password, so the backup doesn't depend on the `/mnt` mount. The Nextcloud app passwords configure creates can be revoked in Nextcloud under **Settings › Security**.
- To leave out more, list paths in `~/.config/coredesktop/backup-exclude`, one per line.
+ If a backup fails, a notification tells you. If only a few files couldn't be read, the rest are still backed up, and the log names the ones it skipped.
+
+ ### How many backups are kept
+
+ restic calls each backup a snapshot. After each backup, it removes older snapshots and keeps:
+
+ - the latest from each of the last **7 days**
+ - the latest from each of the last **4 weeks**
+ - the latest from each of the last **6 months**
+
+ One snapshot can count for more than one of these, so there are usually about 15 snapshots, going back about six months. Days, weeks and months with no backup, such as when the computer was off, don't count, so the oldest snapshot can be older than that. A file that's in several snapshots is stored only once, so keeping them all takes little more space than one full copy plus what's changed.
+
+ ### What's left out
+
+ The backup is for what you can't get back any other way. It leaves out things that can be downloaded, reinstalled or rebuilt, which keeps it smaller and quicker and saves space in your Nextcloud:
+
+ - **Caches and the trash.** `~/.cache`, `~/.local/share/Trash`, the cache for the `/mnt` mount, Flatpak apps' caches, the caches Electron and Chromium apps (Element, browsers, editors) keep in `~/.config`, and any folder marked as a cache with a `CACHEDIR.TAG` file.
+ - **Apps and tools that can be installed again.** Flatpak apps, Podman containers and images, CoreDesktop's own files and sibling projects, package caches (npm, bun, Cargo, Go), and what mise, uv, pipx, Claude Code and Neovim's plugins install.
+ - **The AI agents' programs and downloads.** Their settings, memories and sessions are backed up.
+ - **LM Studio's models and engines.** They're large and can be downloaded again.
+ - **Element's search index** for encrypted messages, which Element rebuilds.
+ - **WinBoat's Windows VM** (`~/winboat`). Its disk is large and changes whenever Windows runs, so most of it would be uploaded every day.
+ - **Other drives and btrfs subvolumes** mounted inside your home folder.
+
+ To leave out more, list paths or patterns in `~/.config/coredesktop/backup-exclude`, one per line, e.g. `$HOME/Videos` or `*.iso`.
+
+ ### Turning backups off
+
+ Run `configure backup` and choose **Turn backups off**. This stops the daily backup, and any backup that's running.
+
+ The backups made so far stay in your Nextcloud files, and configure asks whether to delete them:
+
+ - **Keep them** (the default). You can still restore from them as shown below, as your passphrase and app password stay in your keyring. To turn backups back on, run `configure backup`; they carry on in the same folder.
+ - **Delete them.** Type the folder name to confirm. configure deletes the folder, revokes the backup's Nextcloud app password, and removes the passphrase and app password from your keyring. Nextcloud keeps the folder in its trash bin, where it still uses your storage, until you empty it. After that, the backups are gone for good.
+
+ ### Checking on it
```
systemctl --user list-timers coredesktop-backup.timer
diff --git a/hugo.toml b/hugo.toml
index 4bc2fc2..1960bc9 100644
--- a/hugo.toml
+++ b/hugo.toml
@@ -23,6 +23,11 @@ disableKinds = ["taxonomy", "term", "RSS", "sitemap", "robotsTXT"]
url = "/install/"
weight = 10
+[[menu.main]]
+ name = "Desktop"
+ url = "/desktop/"
+ weight = 15
+
[[menu.main]]
name = "Software"
url = "/software/"
@@ -74,6 +79,10 @@ disableKinds = ["taxonomy", "term", "RSS", "sitemap", "robotsTXT"]
url = "/utilities/#reset"
weight = 50
+[[menu.footer_desktop]]
+ name = "Using the desktop"
+ url = "/desktop/"
+ weight = 5
[[menu.footer_desktop]]
name = "Software"
url = "/software/"
diff --git a/static/css/style.css b/static/css/style.css
index c0a1eaa..0666938 100644
--- a/static/css/style.css
+++ b/static/css/style.css
@@ -740,7 +740,7 @@ html.js .hero [data-reveal] { opacity: 1; translate: 0; transition: none; }
.tile i:nth-of-type(3) { width: 74%; }
.tile.is-focus i:nth-of-type(1) { background: var(--magenta); }
.tiles-keys { display: flex; align-items: center; gap: 6px; padding: 0 4px; font-size: 12px; color: var(--on-dark-56); }
-.tiles-keys kbd, .prose kbd {
+.tiles-keys kbd, .prose kbd, .compare-table kbd {
display: inline-block; padding: 2px 7px; border-radius: 5px;
font-family: var(--font-mono); font-size: 11px; line-height: 1.5;
}
@@ -809,7 +809,7 @@ pre.has-copy code { display: block; padding-right: 64px; }
padding: 0; background: none; color: #ffffffe0;
font-size: 14px; line-height: 1.65; white-space: pre-wrap; overflow-wrap: anywhere;
}
-.prose kbd { font-size: .78em; background: #fff; box-shadow: inset 0 -1px 0 var(--rule), inset 0 0 0 1px var(--rule); color: var(--ink); }
+.prose kbd, .compare-table kbd { font-size: .78em; background: #fff; box-shadow: inset 0 -1px 0 var(--rule), inset 0 0 0 1px var(--rule); color: var(--ink); }
.prose ol { display: flex; flex-direction: column; gap: 12px; counter-reset: li; }
.prose ol > li { position: relative; padding-left: 40px; counter-increment: li; }
.prose ol > li::before {