id = "pdfpc"
name = "pdfpc"
homepage = "https://github.com/pdfpc/pdfpc"
description = "A presenter console with multi-monitor support for PDF files."
executables = ["pdfpc"]
[dotfiles]
paths = ["[configHome]/pdfpc/pdfpcrc", "~/.pdfpcrc"]
secret = []
side_effect = false
[commands]
format = 1
label = "Present a PDF"
description = "Open a PDF in the presenter console with timer, notes layout and screen options. REST server, custom transitions, external scripts and listing modes are left out."
quality = "ai-draft"
parser = { end_of_options = "--", interleave = "permute", long_equals = true, short_attached = true, short_bundles = true }
[[commands.source]]
id = "man"
kind = "manual"
url = "https://man.archlinux.org/man/pdfpc.1.en"
revision = "2026-10-27"
evidence = """
-d, --duration=N Duration in minutes of the presentation used for timer display.
-e, --end-time=T End time of the presentation. (Format: HH:MM (24h))
-t, --start-time=T Start time of the presentation to be used as a countdown. (Format: HH:MM (24h))
-n, --notes=P Position of second-screen beamer notes on the PDF page (left, right, top, bottom, or none. Default: none).
-P, --page Go to a specific page directly after startup.
-s, --switch-screens Switch the presentation and the presenter screen.
-S, --single-screen Force to use only one screen
-w, --windowed=MODE Run in the given windowed mode (presenter|presentation|both|none).
-C, --time-of-day Display the time of the day
-g, --disable-auto-grouping Disable auto detection of overlay groups. (Default: enabled)
-f, --note-format=FORMAT Enforce format of notes (plain or markdown. Default: markdown)
-W, --wayland-workaround Enable Wayland-specific workaround.
"""
[[commands.field]]
id = "pdf"
label = "PDF file"
type = "path"
path = { kind = "file", role = "input" }
position = 0
min = 1
sources = ["man"]
[[commands.field]]
id = "duration"
label = "Duration (minutes)"
type = "integer"
option = ["--duration", "-d"]
min = 0
sources = ["man"]
[[commands.field]]
id = "end_time"
label = "End time (HH:MM)"
type = "string"
option = ["--end-time", "-e"]
sources = ["man"]
[[commands.field]]
id = "start_time"
label = "Start time (HH:MM)"
type = "string"
option = ["--start-time", "-t"]
sources = ["man"]
[[commands.field]]
id = "notes"
label = "Notes position"
type = "enum"
option = ["--notes", "-n"]
choices = [{ value = "left", label = "Left" }, { value = "right", label = "Right" }, { value = "top", label = "Top" }, { value = "bottom", label = "Bottom" }, { value = "none", label = "None" }]
sources = ["man"]
[[commands.field]]
id = "note_format"
label = "Notes format"
type = "enum"
option = ["--note-format", "-f"]
choices = [{ value = "plain", label = "Plain" }, { value = "markdown", label = "Markdown" }]
sources = ["man"]
[[commands.field]]
id = "windowed"
label = "Windowed mode"
type = "enum"
option = ["--windowed", "-w"]
choices = [{ value = "presenter", label = "Presenter" }, { value = "presentation", label = "Presentation" }, { value = "both", label = "Both" }, { value = "none", label = "None" }]
sources = ["man"]
[[commands.field]]
id = "page"
label = "Start page"
type = "integer"
option = ["--page", "-P"]
min = 1
sources = ["man"]
[[commands.field]]
id = "switch_screens"
label = "Switch screens"
type = "boolean"
option = ["--switch-screens", "-s"]
sources = ["man"]
[[commands.field]]
id = "single_screen"
label = "Single screen only"
type = "boolean"
option = ["--single-screen", "-S"]
sources = ["man"]
[[commands.field]]
id = "time_of_day"
label = "Show time of day"
type = "boolean"
option = ["--time-of-day", "-C"]
sources = ["man"]
[[commands.field]]
id = "no_grouping"
label = "Disable overlay auto-grouping"
type = "boolean"
option = ["--disable-auto-grouping", "-g"]
sources = ["man"]
[[commands.field]]
id = "wayland"
label = "Wayland workaround"
type = "boolean"
option = ["--wayland-workaround", "-W"]
sources = ["man"]
[[commands.task]]
id = "present"
label = "Present with timer"
fields = ["pdf", "duration", "notes", "switch_screens"]
required = ["pdf"]
[[commands.task]]
id = "single"
label = "Single screen"
fields = ["pdf", "windowed", "page"]
required = ["pdf"]
set = { single_screen = [true] }
[[commands.group]]
id = "basic"
label = "Basic"
fields = ["pdf", "duration", "notes", "switch_screens", "single_screen", "page"]
[[commands.group]]
id = "advanced"
label = "Advanced"
fields = ["end_time", "start_time", "note_format", "windowed", "time_of_day", "no_grouping", "wayland"]