Fullscreen
All windows occupy the full screen area, stacked on top of each other. Only the focused window is visible. Perfect for distraction-free work.
Layout
Any window count
┌───────────────────────────────────────────────────────────┐│ ││ ││ ││ ││ ││ ││ ││ [focused window] ││ ││ ││ ││ ││ ││ ││ ││ ││ │└───────────────────────────────────────────────────────────┘Other windows are hidden behind the focused window.
Every window gets the same position and size. The focused window sits on top.
Capabilities
- Adjustable ratio: No
- Adjustable nmaster: No
- Stateful: No
Navigation
Since windows overlap completely, directional focus does not work. Use next and prev to cycle through windows:
spoon.Shoji:bindHotkeys({ focus_next = { { "ctrl", "alt" }, "n" }, focus_prev = { { "ctrl", "alt" }, "p" },})When to use
Fullscreen layout is ideal for:
- Focus mode when distractions need to disappear
- Writing, reading, or single-task work
- Presentations and demos
- Temporary maximum screen real estate
Fullscreen vs macOS native full screen
| Aspect | Shoji Fullscreen | macOS Full Screen |
|---|---|---|
| Menu bar | Visible | Hidden |
| Dock | Visible | Hidden |
| macOS Space | Normal | Dedicated |
| Window switching | Focus hotkeys | Mission Control |
| Animation | None | Slide animation |
Shoji fullscreen is instant and keeps the familiar macOS Space. macOS native full screen creates a separate macOS Space with hidden UI.
Picture-in-picture
Toggle individual windows to floating for overlays:
spoon.Shoji:bindHotkeys({ toggle_float = { { "ctrl", "alt", "shift" }, "t" },})A floating window appears on top of the fullscreen layout. Useful for video calls, documentation, or reference material.
Edge-to-edge fullscreen
By default, gaps apply to fullscreen windows too. For true edge-to-edge, use the Gaps modifier:
local Modifiers = require("layouts.modifiers")local Gaps = require("layouts.modifiers.gaps")local Fullscreen = require("layouts.fullscreen")
local trueFullscreen = Modifiers.wrap(Fullscreen, Gaps.add({ inner = 0, outer = 0,}), { name = "true-fullscreen", displayName = "True Fullscreen",})
spoon.Shoji:configure({ layouts = { trueFullscreen },})