Repository navigation
Cheat Sheet
The Cheat Sheet is a layer-shell reference window that slides up from the bottom of the screen with Super + /. It started as "the list of my keybinds" and grew into a small suite of reference tools in one place: a Timetable (calendar, tasks, sports, birthdays), the Keybinds library (the live Hyprland binds plus your own pages and keyboard maps), a Gmail client, saved Commands, a Periodic table, an Amino acids reference, Workspace Profiles, the Typing test and a set of offline Dev tools. Every tab is optional and can be switched off.
- Super + / opens it (toggle). Esc closes it, or first leaves whatever is open inside the tab (an editor, a sheet, the settings panel).
- Switch tabs with the tab bar, Ctrl + 1…9, Ctrl + Page Up / Page Down, or Tab / Shift + Tab. Holding Ctrl shows the number hints.
- Press / to jump to the current tab's search or filter field.
- The gear next to the close button opens the settings of the current tab only — key glyphs for Keybinds, display / reminders / sources for the Timetable, the classification scheme for Amino acids, the tag layout for Commands.
Which tabs exist is chosen in Settings → Cheat Sheet, which leads with the shortcut that opens the window and a tile or toggle for every page (Config.options.cheatsheet.enable*).
| Tab | Setting | Default |
|---|---|---|
| [[Timetable | Calendar-and-Timetable]] | enableTimetable |
| Keybinds | always on | — |
| Elements (periodic table) | enablePeriodicTable |
off |
| Amino acids | enableAminoAcids |
off |
| Commands | enableCommands |
on |
| Workspaces (profiles) | enableWorkspaceProfiles |
off |
| Gmail-Integration]] | enableGmail |
|
| [[Typing test | Typing-Test]] | enableTypingTest |
| Dev tools | enableDevTools |
off |
Keep last tab ready (cheatsheet.keepLastTabLoaded, off by default) keeps the window chrome and the last tab built in the background so reopening is instant, at the price of that tab's memory. Off, the window is built when it opens and released after it closes.
The Keybinds tab has a rail of pages on the left and the selected page on the right.
Generated live from your actual Hyprland configuration (HyprlandKeybinds parses the binds, their descriptions and the --##! section headers in the keybind files, so what you read is what is bound). Binds are laid out as cards in a masonry grid and can be filtered (Filter unbinds hides the ones you removed). It is read-only; change binds in Settings → Hyprland or in ~/.config/hypr/custom/keybinds.lua (see Hyprland Settings and Keybinds).
Key glyph options live behind the tab's gear (cheatsheet.*): a custom Super key symbol (a Nerd Font glyph, e.g. the Windows, Arch or Fedora logo), macOS-style symbols for the modifiers, symbols for the function keys and the mouse, Split buttons (a key per cap instead of one capsule) and the two font sizes.
A page is a named list of shortcuts for any program — Neovim, tmux, an IDE, a game. A page has a name, a Material Symbol icon, an optional program name and entries with keys and description (required) plus category, context ("Normal mode"), notes and icon. Pages show as masonry cards grouped by category, each shortcut as one capsule. Everything is stored in ~/.local/state/quickshell/user/keybinds.json, written atomically by KeybindsService, which refuses to touch a file it cannot parse.
- New page starts blank, from one of 15 starter templates — Visual Studio Code, Neovim, LazyGit, Tmux, Zellij, Yazi, Ranger, Kitty, Ghostty, Btop/Htop, Helix, Zed, IntelliJ IDEA, web browsers, Obsidian — or from a file.
-
Find scans the machine, only when you ask, for configs it can read without running anything: VS Code / VSCodium / Cursor (
keybindings.json, JSONC), JetBrains keymaps (XML), Neovim (static analysis ofvim.keymap.setand*map— reported as partial, because plugin mappings only exist at runtime), Zed, Helix, Kitty, tmux and Obsidian. Nothing is started and nothing is loaded;scripts/keybinds/import_keybinds.pyis stdlib-only and read-only. -
Import / export JSON: the native document, a single exported page, a
{name, icon, program, keybinds}object, or a plain array of shortcuts (keys may be calledkeys,keybind,shortcutorkey; the descriptiondescription,commentorlabel). Imported ids are regenerated and duplicate page names get a suffix. -
Conflicts — adding a shortcut that already exists in the page is detected (
detectConflicts). - Categorize with AI — sends the page's shortcuts to the model configured in AI Integration and groups them into categories in the language of the UI.
- Drag to reorder cards; use ↑ / ↓ to move between pages in the rail order (Hyprland → keyboards → personal), Ctrl + ↑ / ↓ to jump between groups, Ctrl + N to add a shortcut. The rail collapses to icons and remembers it.
A page can be a keyboard instead of a list: a drawn keyboard with up to several layers. This is a visual aid — the shell never writes a keymap or firmware.
-
Detect layout reads the active layout from Hyprland and XKB (
scripts/typing/system_keyboard.py— layout, variant, model and options, honouring multiple layouts), and builds four layers: Base, Shift, AltGr and Shift + AltGr.--preset abnt2builds a Brazilian ABNT2 map without Hyprland. -
Vial keyboards (QMK firmware) can be read on demand (
VialKeyboard) so each key shows the code the firmware sends; re-detecting finds the same keyboard by its UID and keeps your own labels where the key code did not change. This is the same machinery as the finger guide in the Typing Test. - Click a key to label it, give it an icon and a description; ← / → and 0–9 switch layer; export as JSON.
A week / day / 3-day / month calendar backed by khal, with tasks, sports, holidays, birthdays, moon phases and notifications. It has its own page: Calendar and Timetable, and the sync stack behind it is in Khal Integration.
A full Gmail client — several accounts, labels, threads, compose with attachments, swipe actions — on your own Google Cloud credentials. See Gmail Integration.
A notebook of terminal commands you keep forgetting. Each entry has the command, a description and tags; the tab has a search box and a tag sidebar (its layout — sidebar or chips — is in the tab's gear: Commands: sidebar tag layout). Each card has a copy button. They live in ~/.local/state/quickshell/user/commands.json and the same list is available in the launcher's commands panel (Super + Alt + C opens the launcher straight on it, see Launcher & Search).
- Elements — an interactive periodic table; the data is bundled, nothing is fetched.
-
Amino acids — the standard amino acids as cards with 2D skeletal structures drawn in QML, filterable by name or side-chain class, with pKa / pI and Kyte–Doolittle hydropathy; a Genetic code table popup shows the codons. The classification scheme (4, 5 or 7 side-chain classes,
cheatsheet.aminoAcidScheme) is set in the tab's gear.
Workspace Profiles — a snapshot of which apps live on which workspace — as cards in a masonry grid. Snapshot the current layout, restore it (running apps are moved back to the saved workspaces), rename or delete. In this tab Ctrl + 1…9 restores a profile and Ctrl + Alt + N deletes one. The model is documented in Overview & Workspaces.
The Monkeytype-style test hosted in the Cheat Sheet as a full-size tab; same surface as the one in the launcher. See Typing Test.
The launcher's Search Tools panel as a full page: 28 offline tools — generators (UUID, passwords, lorem ipsum, ids), encoders (Base64, URL, HTML entities, JWT decoder), converters (number bases, Unix timestamps, colours), formatters (JSON), text tools (case converter, escape/unescape, line and whitespace tools, regex tester, slugify, text diff, text inspector) and web & system helpers. The page has a category and tool rail, a hero that takes the colour of the tool type, input / output panes, and keyboard shortcuts (Ctrl + R run or regenerate, Ctrl + Enter copy output, Ctrl + U use the output as the next input, Ctrl + L clear, Ctrl + Shift + V paste, Ctrl + F filter tools). Everything is processed locally. Tools are defined once in DevToolsRegistry.qml and functions/devtools.js, so a tool added there shows up in both places.
| Key | Default | Meaning |
|---|---|---|
keepLastTabLoaded |
false |
Keep the last tab built for an instant reopen |
enableTimetable, enableGmail, enableCommands, enableTypingTest
|
on | Tabs |
enablePeriodicTable, enableAminoAcids, enableWorkspaceProfiles, enableDevTools
|
off | Tabs |
timetableTodayFirst |
false |
Week and 3-day views open on today |
superKey, useMacSymbol, splitButtons, useMouseSymbol, useFnSymbol, filterUnbinds
|
— | Keybind glyphs |
fontSize.key, fontSize.comment
|
smaller | Keybind typography |
aminoAcidScheme |
seven |
four, five or seven classes |
commandsTagsSidebar |
false |
Commands tag layout |
The same switch for the page that opens when you press the shortcut is stored in Persistent.states.cheatsheet.tabIndex; per-tab view state (timetable view and density, selected keybind page, rail collapsed) is in Persistent.states.cheatsheet.
The Cheat Sheet also appears as individual apps in the Tablet Family, where it needs no keyboard.
| Piece | Role |
|---|---|
modules/ii/cheatsheet/Cheatsheet.qml |
The window: tab list, key handling, cache, cheatsheetToggle / Open / Close global shortcuts |
CheatsheetKeybinds.qml + CheatsheetHyprlandKeybinds.qml, CheatsheetCustomKeybindsPage.qml, CheatsheetKeybindEditorSidebar.qml, CheatsheetKeybindsPageForm.qml, CheatsheetKeyboardPage.qml, KeybindShortcutSequence.qml
|
Keybinds tab |
services/KeybindsService.qml, scripts/keybinds/, defaults/keybinds/templates.json
|
Pages store (schema 3), import, templates, AI categorizer |
services/HyprlandKeybinds.qml |
Parser of the Hyprland binds |
CheatsheetTimetable.qml, timetable/
|
Timetable |
email/, services/EmailService.qml
|
Gmail |
commands/, services/CommandsService.qml
|
Commands |
settings/ |
Per-tab settings sheets |
Notes for contributors: the window is a SwipeView of lazily incubated tabs, so a tab never holds a delegate, timer or request while it is not the current one; the selected tab is only persisted by explicit user navigation (selectTab()), never by the transient index changes during incubation.
- Keybinds — the default binds the Cheat Sheet reads
- Calendar and Timetable
- Gmail Integration
- Typing Test
- Overview & Workspaces
- Configuration Reference