From 8e38f70832ed55a7c638f0248643367eaab3a8cb Mon Sep 17 00:00:00 2001 From: David Heinemeier Hansson Date: Sat, 21 Feb 2026 08:52:02 +0100 Subject: [PATCH] Cleanup duplication --- bin/omarchy-setup-dns | 74 ++++++++++++++++--------------------------- 1 file changed, 28 insertions(+), 46 deletions(-) diff --git a/bin/omarchy-setup-dns b/bin/omarchy-setup-dns index 472b5550..ccd9f9f6 100755 --- a/bin/omarchy-setup-dns +++ b/bin/omarchy-setup-dns @@ -1,5 +1,28 @@ #!/bin/bash +lock_dns_to_resolved() { + for file in /etc/systemd/network/*.network; do + [[ -f "$file" ]] || continue + if ! grep -q "^\[DHCPv4\]" "$file"; then continue; fi + + if ! sed -n '/^\[DHCPv4\]/,/^\[/p' "$file" | grep -q "^UseDNS="; then + sudo sed -i '/^\[DHCPv4\]/a UseDNS=no' "$file" + fi + + if grep -q "^\[IPv6AcceptRA\]" "$file" && ! sed -n '/^\[IPv6AcceptRA\]/,/^\[/p' "$file" | grep -q "^UseDNS="; then + sudo sed -i '/^\[IPv6AcceptRA\]/a UseDNS=no' "$file" + fi + done +} + +unlock_dns_to_dhcp() { + for file in /etc/systemd/network/*.network; do + [[ -f "$file" ]] || continue + sudo sed -i '/^\[DHCPv4\]/{n;/^UseDNS=no$/d}' "$file" + sudo sed -i '/^\[IPv6AcceptRA\]/{n;/^UseDNS=no$/d}' "$file" + done +} + if [[ -z $1 ]]; then dns=$(gum choose --height 5 --header "Select DNS provider" Cloudflare DHCP Custom) else @@ -14,24 +37,7 @@ DNS=1.1.1.1#cloudflare-dns.com 1.0.0.1#cloudflare-dns.com FallbackDNS=9.9.9.9 149.112.112.112 DNSOverTLS=opportunistic EOF - - # Ensure network interfaces don't override our DNS settings - for file in /etc/systemd/network/*.network; do - [[ -f "$file" ]] || continue - if ! grep -q "^\[DHCPv4\]" "$file"; then continue; fi - - # Add UseDNS=no to DHCPv4 section if not present - if ! sed -n '/^\[DHCPv4\]/,/^\[/p' "$file" | grep -q "^UseDNS="; then - sudo sed -i '/^\[DHCPv4\]/a UseDNS=no' "$file" - fi - - # Add UseDNS=no to IPv6AcceptRA section if present - if grep -q "^\[IPv6AcceptRA\]" "$file" && ! sed -n '/^\[IPv6AcceptRA\]/,/^\[/p' "$file" | grep -q "^UseDNS="; then - sudo sed -i '/^\[IPv6AcceptRA\]/a UseDNS=no' "$file" - fi - done - - sudo systemctl restart systemd-networkd systemd-resolved + lock_dns_to_resolved ;; DHCP) @@ -39,21 +45,14 @@ DHCP) [Resolve] DNSOverTLS=no EOF - - # Allow network interfaces to use DHCP DNS - for file in /etc/systemd/network/*.network; do - [[ -f "$file" ]] || continue - sudo sed -i '/^UseDNS=no/d' "$file" - done - - sudo systemctl restart systemd-networkd systemd-resolved + unlock_dns_to_dhcp ;; Custom) echo "Enter your DNS servers (space-separated, e.g. '192.168.1.1 1.1.1.1'):" read -r dns_servers - if [[ -z "$dns_servers" ]]; then + if [[ -z $dns_servers ]]; then echo "Error: No DNS servers provided." exit 1 fi @@ -63,25 +62,8 @@ Custom) DNS=$dns_servers FallbackDNS=9.9.9.9 149.112.112.112 EOF - - # Ensure network interfaces don't override our DNS settings - for file in /etc/systemd/network/*.network; do - [[ -f "$file" ]] || continue - if ! grep -q "^\[DHCPv4\]" "$file"; then continue; fi - - # Add UseDNS=no to DHCPv4 section if not present - if ! sed -n '/^\[DHCPv4\]/,/^\[/p' "$file" | grep -q "^UseDNS="; then - sudo sed -i '/^\[DHCPv4\]/a UseDNS=no' "$file" - fi - - # Add UseDNS=no to IPv6AcceptRA section if present - if grep -q "^\[IPv6AcceptRA\]" "$file" && ! sed -n '/^\[IPv6AcceptRA\]/,/^\[/p' "$file" | grep -q "^UseDNS="; then - sudo sed -i '/^\[IPv6AcceptRA\]/a UseDNS=no' "$file" - fi - done - - sudo systemctl restart systemd-networkd systemd-resolved - + lock_dns_to_resolved ;; esac +sudo systemctl restart systemd-networkd systemd-resolved