Skip to content

Add interactive screensaver & idle settings TUI (Setup → Config → Screensaver)#6086

Open
acidkill wants to merge 2 commits into
basecamp:devfrom
acidkill:feature/screensaver-config
Open

Add interactive screensaver & idle settings TUI (Setup → Config → Screensaver)#6086
acidkill wants to merge 2 commits into
basecamp:devfrom
acidkill:feature/screensaver-config

Conversation

@acidkill

@acidkill acidkill commented Jun 13, 2026

Copy link
Copy Markdown

Add interactive screensaver & idle settings TUI (Setup → Config → Screensaver)

What

Adds omarchy config screensaver — a small interactive TUI to configure idle behavior without hand-editing hypridle.conf:

  • Idle action: show screensaver / turn off displays (DPMS) / do nothing
  • Idle timeout: presets (1 / 2.5 / 5 / 10 / 30 min) or custom seconds
  • Idle lock: on/off, with adjustable delay after the screen action

It is wired into the menu under Setup → Config → Screensaver, launched with present_terminal — the same pattern already used for Direct Boot (omarchy-config-direct-boot).

Why

Idle/screensaver/lock tuning currently means hand-editing hypridle.conf (Setup → Config → Hypridle opens it in $EDITOR). This adds a friendly, discoverable editor for the common knobs, including two things that aren't obvious from raw config:

  • blanking the displays (DPMS) instead of the animated screensaver, and
  • disabling the idle lock entirely (e.g. a desktop in a private, locked room where re-entering a password after every break is pure friction).

How

  • New bin/omarchy-config-screensaver (group config, gum-based; mirrors the style of omarchy-config-direct-boot).
  • Reads and rewrites ~/.config/hypr/hypridle.conf, taking a timestamped .bak before each write, then applies with omarchy-restart-hypridle.
  • Restore Omarchy defaults uses omarchy-refresh-config hypr/hypridle.conf.
  • One entry added to show_setup_config_menu in bin/omarchy-menu.

Notes

  • No migration needed: purely additive (new command + one menu line); the shipped config/hypr/hypridle.conf is unchanged.
  • The config group already exists in GROUP_DESCRIPTIONS, so no group metadata change.
  • Related but separate: omarchy-toggle-screensaver (the screensaver-off flag) stays as a quick toggle.

Testing

  • test/omarchy-cli-test.sh passes — metadata is valid and the command routes as omarchy config screensaver.
  • Verified the generated hypridle.conf for every combination (screensaver / dpms / none × lock on/off) and confirmed round-trip parsing of the current settings, including the shipped default (screensaver, 150 s, lock on).

Screenshots

Screensaver & idle settings TUI
screensaver-tui

Copilot AI review requested due to automatic review settings June 13, 2026 10:59

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copilot wasn't able to review any files in this pull request.


💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: e4a1ec2379

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread bin/omarchy-config-screensaver Outdated
When the screen action is 'Do nothing' but idle lock stays on, the idle
timeout is the only value still driving the lock listener. The previous
guard blocked editing it and hid it from the summary, leaving a fixed
lock timeout (idle + stale lockdelay) with no way to change it.

- choose_timeout: only block when no screen action AND lock is off
- show the idle timeout whenever an action or the lock is active
- add lock_timeout(): without a screen action the lock fires at idle
  itself (lockdelay only applies when an action precedes the lock),
  so the displayed/written lock time matches the editable timeout
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants