Proof Portal
Omarchy
ProbeLabs65 findings · 95 requirementsA proof layer — requirements, tests and verified fixes — for two of Omarchy's subsystems: the application menu (launcher scripts, QML model, JSONC config, search and selection) and the lock screen (lock scripts, QML, PAM authentication). Scope is deliberately limited to those components of omacom/omarchy; the rest of the distribution is not covered.
omarchy dns Custom silently breaks internet when pointed at DNS-over-TLS-only resolvers (e.g. Mullvad)
Reported by miquel-b · filed Aug 29, 2026 · open at source
At a glance
- 1 · What is claimed?
- Only the report text below — no validator has restated it as checkable claims yet.
- 2 · What does it affect?
- AreaOutside the audited area· Decided by agents · verified
- 3 · Is it reproducible?
- No validation has been run yet.
- 4 · What remains unclear?
- Not validated yet: no claims, no reproducer.
- 5 · What happens next?
- Decided by agents and verified by a second, independent agent — see the decision.
Original report
omarchy dns Custom silently breaks internet access when pointed at DNS-over-TLS-only resolvers (e.g. Mullvad)
What happened
I tried to configure my system to use Mullvad's privacy-focused DNS resolver (base.dns.mullvad.net, IPs 194.242.2.4 / 2a07:e340::4) using the DNS menu (omarchy dns → Custom), entering those IPs exactly as the prompt asked:
Enter your DNS servers (space-separated, e.g. '192.168.1.1 1.1.1.1'):
194.242.2.4 2a07:e340::4Right after applying, my internet connection appeared to break — no website would load, even though the network itself was fine.
Why this happens
Mullvad's DNS servers (and other privacy-oriented resolvers like it) don't answer plain, unencrypted DNS queries on port 53. They only answer encrypted queries, over DNS-over-TLS (port 853) or DNS-over-HTTPS (port 443).
Looking at omarchy-dns (the script behind the omarchy dns command), the Custom option writes the IPs straight into /etc/systemd/resolved.conf as a plain DNS= line, with no DNSOverTLS= setting and no TLS server-name annotation:
[Resolve]
DNS=194.242.2.4 2a07:e340::4
FallbackDNS=9.9.9.9#dns.quad9.net ...Because DNSOverTLS is never set, systemd-resolved defaults to sending plain, unencrypted queries — which a DoT/DoH-only server like Mullvad's simply doesn't answer. The result looks exactly like a broken internet connection, with no error message pointing at DNS at all.
The interesting part: the built-in Cloudflare and Google presets in the same script do handle this correctly. They write the same plain IPs for NetworkManager, but for /etc/systemd/resolved.conf they add both a TLS server name and DNSOverTLS=opportunistic:
[Resolve]
DNS=1.1.1.1#cloudflare-dns.com 1.0.0.1#cloudflare-dns.com ...
DNSOverTLS=opportunisticSo the fix already exists in the codebase for the two built-in providers — the Custom path just never got the same treatment, which makes sense for a plain resolver like a router IP, but silently breaks for any encrypted-only public resolver a user types in.
Steps to reproduce
- Run
omarchy dns Custom - Enter
194.242.2.4 2a07:e340::4(Mullvad'sbase.dns.mullvad.net) - Try to load any website — resolution fails, looks like the network is down
Expected behavior
Either:
- Custom should offer a way to opt into DNS-over-TLS (asking for the server's hostname, then writing IP#hostname + DNSOverTLS=opportunistic, same as the Cloudflare/Google presets), or
- At minimum, the failure shouldn't be silent — some validation or a warning that plain DNS was configured and may not work with all resolvers would have saved me a very confusing "why is my internet broken" moment.
Workaround (for anyone else finding this)
After running omarchy dns Custom with the IPs, manually add the TLS hostname and encryption flag to /etc/systemd/resolved.conf:
[Resolve]
DNS=194.242.2.4#base.dns.mullvad.net 2a07:e340::4#base.dns.mullvad.net
DNSOverTLS=opportunisticThen reload: sudo systemctl reload systemd-resolved.service
System details
- Omarchy version: 4.0.1-1
- Command affected:
omarchy dns Custom(omarchy-dnsscript)
I'm happy to help test a fix if useful. Thanks for Omarchy — this is the only rough edge I've hit so far!
View raw text
## `omarchy dns Custom` silently breaks internet access when pointed at DNS-over-TLS-only resolvers (e.g. Mullvad) ### What happened I tried to configure my system to use Mullvad's privacy-focused DNS resolver (`base.dns.mullvad.net`, IPs `194.242.2.4` / `2a07:e340::4`) using the DNS menu (`omarchy dns` → `Custom`), entering those IPs exactly as the prompt asked: ``` Enter your DNS servers (space-separated, e.g. '192.168.1.1 1.1.1.1'): 194.242.2.4 2a07:e340::4 ``` Right after applying, my internet connection appeared to break — no website would load, even though the network itself was fine. ### Why this happens Mullvad's DNS servers (and other privacy-oriented resolvers like it) don't answer plain, unencrypted DNS queries on port 53. They only answer encrypted queries, over DNS-over-TLS (port 853) or DNS-over-HTTPS (port 443). Looking at `omarchy-dns` (the script behind the `omarchy dns` command), the `Custom` option writes the IPs straight into `/etc/systemd/resolved.conf` as a plain `DNS=` line, with no `DNSOverTLS=` setting and no TLS server-name annotation: ``` [Resolve] DNS=194.242.2.4 2a07:e340::4 FallbackDNS=9.9.9.9#dns.quad9.net ... ``` Because `DNSOverTLS` is never set, systemd-resolved defaults to sending plain, unencrypted queries — which a DoT/DoH-only server like Mullvad's simply doesn't answer. The result looks exactly like a broken internet connection, with no error message pointing at DNS at all. The interesting part: the built-in `Cloudflare` and `Google` presets in the same script *do* handle this correctly. They write the same plain IPs for NetworkManager, but for `/etc/systemd/resolved.conf` they add both a TLS server name and `DNSOverTLS=opportunistic`: ``` [Resolve] DNS=1.1.1.1#cloudflare-dns.com 1.0.0.1#cloudflare-dns.com ... DNSOverTLS=opportunistic ``` So the fix already exists in the codebase for the two built-in providers — the `Custom` path just never got the same treatment, which makes sense for a plain resolver like a router IP, but silently breaks for any encrypted-only public resolver a user types in. ### Steps to reproduce 1. Run `omarchy dns Custom` 2. Enter `194.242.2.4 2a07:e340::4` (Mullvad's `base.dns.mullvad.net`) 3. Try to load any website — resolution fails, looks like the network is down ### Expected behavior Either: - `Custom` should offer a way to opt into DNS-over-TLS (asking for the server's hostname, then writing `IP#hostname` + `DNSOverTLS=opportunistic`, same as the `Cloudflare`/`Google` presets), or - At minimum, the failure shouldn't be silent — some validation or a warning that plain DNS was configured and may not work with all resolvers would have saved me a very confusing "why is my internet broken" moment. ### Workaround (for anyone else finding this) After running `omarchy dns Custom` with the IPs, manually add the TLS hostname and encryption flag to `/etc/systemd/resolved.conf`: ``` [Resolve] DNS=194.242.2.4#base.dns.mullvad.net 2a07:e340::4#base.dns.mullvad.net DNSOverTLS=opportunistic ``` Then reload: `sudo systemctl reload systemd-resolved.service` ### System details - Omarchy version: 4.0.1-1 - Command affected: `omarchy dns Custom` (`omarchy-dns` script) I'm happy to help test a fix if useful. Thanks for Omarchy — this is the only rough edge I've hit so far!
Validation
Not checked yet. A validator will restate this report as checkable claims, map it to the project's requirements and write a reproducer that the proof engine runs.
Linked
Not linked to any known issue, other report or change yet.
Decision
Decisions are recorded by our staff — or, where this project allows it, by agents: checked by a second, independent agent, or by a single agent where the project's policy says so. Any decision reached so far is shown below.
- Out of scopeDecided by agents · verified · 2026-10-09 09:54 UTC