
* Add omarchy-setup-cloudflare-dns script Addresses issue #745 by providing user choice for DNS configuration. Features: - Makes Cloudflare DNS opt-in instead of forced default - Preserves local development environments with DHCP option - Includes custom DNS configuration support - Provides backup/restore functionality - Follows Omarchy naming conventions Fixes #745 * Address DHH feedback on DNS configuration script Changes based on maintainer review: - Rename script to omarchy-setup-dns (more generic name) - Remove /usr/local/bin installation (use PATH instead) - Add migration to reset automatic Cloudflare DNS to DHCP - Force DNS on physical interfaces only using systemd-networkd - Exclude docker/virtual interfaces from forced DNS Fixes local development environment issues while making Cloudflare DNS opt-in. * Use timestamped backups and remove restore function Follow Omarchy backup standards by using timestamped backup files instead of fixed names. Remove restore function since backups now have unpredictable names - users can manually restore if needed. This matches the pattern used in omarchy-refresh-config. * Add DNS over TLS support for enhanced security Enable opportunistic DNS over TLS when using Cloudflare DNS. This encrypts DNS queries when possible while falling back to regular DNS if TLS isn't available, providing security without breaking compatibility. Thanks to the suggestion in #696 for highlighting this improvement. * Add certificate validation for DNS over TLS The DNS servers now include their proper hostnames for certificate validation (cloudflare-dns.com and dns.google). This ensures we're actually talking to the real DNS servers when using encrypted DNS, not some imposter. Completes the implementation suggested in #696. * Prevent backup file accumulation Clean up old backup files before creating new ones to prevent the accumulation of .bak.* files over time. Keeps only the most recent backup while maintaining the timestamped naming pattern. This ensures the system doesn't get cluttered with countless backup files from repeated script runs. * Simplify DNS setup script per review feedback Reduced script complexity from 227 to 58 lines while maintaining core functionality. Removed unnecessary backup system and systemd-networkd configuration. Kept essential features: Cloudflare DNS with TLS, DHCP mode, and custom DNS option. Script now follows established Omarchy conventions for simplicity and size. * Allow setup from omarchy-menu * Integrate into Omarchy Menu * Align parameter --------- Co-authored-by: David Heinemeier Hansson <david@hey.com>
385 lines
13 KiB
Bash
Executable File
385 lines
13 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
export PATH="$HOME/.local/share/omarchy/bin:$PATH"
|
|
|
|
menu() {
|
|
local prompt="$1"
|
|
local options="$2"
|
|
local extra="$3"
|
|
local preselect="$4"
|
|
|
|
read -r -a args <<<"$extra"
|
|
|
|
if [[ -n "$preselect" ]]; then
|
|
local index
|
|
index=$(echo -e "$options" | grep -nxF "$preselect" | cut -d: -f1)
|
|
if [[ -n "$index" ]]; then
|
|
args+=("-a" "$index")
|
|
fi
|
|
fi
|
|
|
|
echo -e "$options" | walker --dmenu --theme dmenu_250 -p "$prompt…" "${args[@]}"
|
|
}
|
|
|
|
terminal() {
|
|
alacritty --class Omarchy -e "$@"
|
|
}
|
|
|
|
present_terminal() {
|
|
alacritty --class Omarchy -e bash -c "omarchy-show-logo; eval \"$1\"; omarchy-show-done;"
|
|
}
|
|
|
|
edit_in_nvim() {
|
|
notify-send "Editing config file" "$1"
|
|
alacritty -e nvim "$1"
|
|
}
|
|
|
|
install() {
|
|
present_terminal "echo 'Installing $1...'; yay -Sy --noconfirm $2"
|
|
}
|
|
|
|
install_and_launch() {
|
|
present_terminal "echo 'Installing $1...'; yay -Sy --noconfirm $2 && setsid gtk-launch $3"
|
|
}
|
|
|
|
install_font() {
|
|
present_terminal "echo 'Installing $1...'; yay -Sy --noconfirm --needed $2 && sleep 2 && omarchy-font-set '$3'"
|
|
}
|
|
|
|
show_learn_menu() {
|
|
case $(menu "Learn" " Keybindings\n Omarchy\n Hyprland\n Arch\n Neovim\n Bash") in
|
|
*Keybindings*) omarchy-menu-keybindings ;;
|
|
*Omarchy*) omarchy-launch-webapp "https://learn.omacom.io/2/the-omarchy-manual" ;;
|
|
*Hyprland*) omarchy-launch-webapp "https://wiki.hypr.land/" ;;
|
|
*Arch*) omarchy-launch-webapp "https://wiki.archlinux.org/title/Main_page" ;;
|
|
*Bash*) omarchy-launch-webapp "https://devhints.io/bash" ;;
|
|
*Neovim*) omarchy-launch-webapp "https://www.lazyvim.org/keymaps" ;;
|
|
*) show_main_menu ;;
|
|
esac
|
|
}
|
|
|
|
show_style_menu() {
|
|
case $(menu "Style" " Theme\n Font\n Background\n Screensaver\n About") in
|
|
*Theme*) show_theme_menu ;;
|
|
*Font*) show_font_menu ;;
|
|
*Background*) omarchy-theme-bg-next ;;
|
|
*Screensaver*) edit_in_nvim ~/.config/omarchy/branding/screensaver.txt ;;
|
|
*About*) edit_in_nvim ~/.config/omarchy/branding/about.txt ;;
|
|
*) show_main_menu ;;
|
|
esac
|
|
}
|
|
|
|
show_theme_menu() {
|
|
theme=$(menu "Theme" "$(omarchy-theme-list)" "" "$(omarchy-theme-current)")
|
|
if [[ "$theme" == "CNCLD" || -z "$theme" ]]; then
|
|
show_main_menu
|
|
else
|
|
omarchy-theme-set "$theme"
|
|
fi
|
|
}
|
|
|
|
show_font_menu() {
|
|
theme=$(menu "Font" "$(omarchy-font-list)" "-w 350" "$(omarchy-font-current)")
|
|
if [[ "$theme" == "CNCLD" || -z "$theme" ]]; then
|
|
show_main_menu
|
|
else
|
|
omarchy-font-set "$theme"
|
|
fi
|
|
}
|
|
|
|
show_capture_menu() {
|
|
case $(menu "Capture" " Screenshot\n Screenrecord\n Color") in
|
|
*Screenshot*) show_screenshot_menu ;;
|
|
*Screenrecord*) show_screenrecord_menu ;;
|
|
*Color*) pkill hyprpicker || hyprpicker -a ;;
|
|
*) show_main_menu ;;
|
|
esac
|
|
}
|
|
|
|
show_screenshot_menu() {
|
|
case $(menu "Screenshot" " Region\n Window\n Display") in
|
|
*Region*) omarchy-cmd-screenshot ;;
|
|
*Window*) omarchy-cmd-screenshot window ;;
|
|
*Display*) omarchy-cmd-screenshot output ;;
|
|
*) show_capture_menu ;;
|
|
esac
|
|
}
|
|
|
|
show_screenrecord_menu() {
|
|
case $(menu "Screenrecord" " Region\n Display") in
|
|
*Region*) omarchy-cmd-screenrecord ;;
|
|
*Display*) omarchy-cmd-screenrecord output ;;
|
|
*) show_capture_menu ;;
|
|
esac
|
|
}
|
|
|
|
show_toggle_menu() {
|
|
case $(menu "Toggle" " Screensaver\n Nightlight\n Idle Lock\n Top Bar") in
|
|
*Screensaver*) omarchy-toggle-screensaver ;;
|
|
*Nightlight*) omarchy-toggle-nightlight ;;
|
|
*Idle*) omarchy-toggle-idle ;;
|
|
*Bar*) omarchy-toggle-waybar ;;
|
|
*) show_main_menu ;;
|
|
esac
|
|
}
|
|
|
|
show_setup_menu() {
|
|
local options=" Audio\n Wifi\n Bluetooth\n Power Profile\n Monitors"
|
|
[ -f ~/.config/hypr/bindings.conf ] && options="$options\n Keybindings"
|
|
[ -f ~/.config/hypr/input.conf ] && options="$options\n Input"
|
|
options="$options\n DNS\n Config\n Fingerprint\n Fido2"
|
|
|
|
case $(menu "Setup" "$options") in
|
|
*Audio*) alacritty --class=Wiremix -e wiremix ;;
|
|
*Wifi*)
|
|
rfkill unblock wifi
|
|
alacritty --class=Impala -e impala
|
|
;;
|
|
*Bluetooth*)
|
|
rfkill unblock bluetooth
|
|
blueberry
|
|
;;
|
|
*Power*) show_setup_power_menu ;;
|
|
*Monitors*) edit_in_nvim ~/.config/hypr/monitors.conf ;;
|
|
*Keybindings*) edit_in_nvim ~/.config/hypr/bindings.conf ;;
|
|
*Input*) edit_in_nvim ~/.config/hypr/input.conf ;;
|
|
*DNS*) present_terminal omarchy-setup-dns ;;
|
|
*Config*) show_setup_config_menu ;;
|
|
*Fingerprint*) present_terminal omarchy-setup-fingerprint ;;
|
|
*Fido2*) present_terminal omarchy-setup-fido2 ;;
|
|
*) show_main_menu ;;
|
|
esac
|
|
}
|
|
|
|
show_setup_power_menu() {
|
|
profile=$(menu "Power Profile" "$(omarchy-powerprofiles-list)" "" "$(powerprofilesctl get)")
|
|
|
|
if [[ "$profile" == "CNCLD" || -z "$profile" ]]; then
|
|
show_main_menu
|
|
else
|
|
powerprofilesctl set "$profile"
|
|
fi
|
|
}
|
|
|
|
show_setup_config_menu() {
|
|
case $(menu "Setup" " Hyprland\n Hypridle\n Hyprlock\n Hyprsunset\n Swayosd\n Walker\n Waybar\n XCompose") in
|
|
*Hyprland*) edit_in_nvim ~/.config/hypr/hyprland.conf ;;
|
|
*Hypridle*) edit_in_nvim ~/.config/hypr/hypridle.conf && omarchy-restart-hypridle ;;
|
|
*Hyprlock*) edit_in_nvim ~/.config/hypr/hyprlock.conf ;;
|
|
*Hyprsunset*) edit_in_nvim ~/.config/hypr/hyprsunset.conf && omarchy-restart-hyprsunset ;;
|
|
*Swayosd*) edit_in_nvim ~/.config/swayosd/config.toml && omarchy-restart-swayosd ;;
|
|
*Walker*) edit_in_nvim ~/.config/walker/config.toml && omarchy-restart-walker ;;
|
|
*Waybar*) edit_in_nvim ~/.config/waybar/config.jsonc && omarchy-restart-waybar ;;
|
|
*XCompose*) edit_in_nvim ~/.XCompose && omarchy-restart-xcompose ;;
|
|
*) show_main_menu ;;
|
|
esac
|
|
}
|
|
|
|
show_install_menu() {
|
|
case $(menu "Install" " Package\n Web App\n TUI\n Service\n Style\n Development\n Editor\n AI\n Gaming") in
|
|
*Package*) terminal omarchy-pkg-install ;;
|
|
*Web*) present_terminal omarchy-webapp-install ;;
|
|
*TUI*) present_terminal omarchy-tui-install ;;
|
|
*Service*) show_install_service_menu ;;
|
|
*Style*) show_install_style_menu ;;
|
|
*Development*) show_install_development_menu ;;
|
|
*Editor*) show_install_editor_menu ;;
|
|
*AI*) show_install_ai_menu ;;
|
|
*Gaming*) show_install_gaming_menu ;;
|
|
*) show_main_menu ;;
|
|
esac
|
|
}
|
|
|
|
show_install_service_menu() {
|
|
case $(menu "Install" " Firewall\n Dropbox\n Tailscale") in
|
|
*Firewall*) present_terminal omarchy-install-firewall ;;
|
|
*Dropbox*) present_terminal omarchy-install-dropbox ;;
|
|
*Tailscale*) present_terminal omarchy-install-tailscale ;;
|
|
*) show_install_menu ;;
|
|
esac
|
|
}
|
|
|
|
show_install_editor_menu() {
|
|
case $(menu "Install" " VSCode\n Cursor\n Zed\n Sublime Text\n Helix") in
|
|
*VSCode*) install_and_launch "VSCode" "visual-studio-code-bin" "code" ;;
|
|
*Cursor*) install_and_launch "Cursor" "cursor-bin" "cursor" ;;
|
|
*Zed*) install_and_launch "Zed" "zed" "dev.zed.Zed" ;;
|
|
*Sublime*) install_and_launch "Sublime Text" "sublime-text-4" "sublime_text" ;;
|
|
*Helix*) install "Helix" "helix" ;;
|
|
*) show_install_menu ;;
|
|
esac
|
|
}
|
|
|
|
show_install_ai_menu() {
|
|
case $(menu "Install" " Claude Code\n Gemini\n LM Studio\n Ollama\n Crush\n opencode") in
|
|
*Claude*) install "Claude Code" "claude-code" ;;
|
|
*Gemini*) install "Gemini" "gemini-cli-bin" ;;
|
|
*Studio*) install "LM Studio" "lmstudio" ;;
|
|
*Ollama*) install "Ollama" "ollama" ;;
|
|
*Crush*) install "Crush" "crush-bin" ;;
|
|
*opencode*) install "opencode" "opencode-bin" ;;
|
|
*) show_install_menu ;;
|
|
esac
|
|
}
|
|
|
|
show_install_gaming_menu() {
|
|
case $(menu "Install" " Steam\n RetroArch\n Minecraft") in
|
|
*Steam*) present_terminal omarchy-install-steam ;;
|
|
*RetroArch*) install_and_launch "RetroArch" "retroarch retroarch-assets libretro libretro-fbneo" "com.libretro.RetroArch.desktop" ;;
|
|
*Minecraft*) install_and_launch "Minecraft" "minecraft-launcher" "minecraft-launcher" ;;
|
|
*) show_install_menu ;;
|
|
esac
|
|
}
|
|
|
|
show_install_style_menu() {
|
|
case $(menu "Install" " Theme\n Background\n Font") in
|
|
*Theme*) present_terminal omarchy-theme-install ;;
|
|
*Background*) nautilus ~/.config/omarchy/current/theme/backgrounds ;;
|
|
*Font*) show_install_font_menu ;;
|
|
*) show_install_menu ;;
|
|
esac
|
|
}
|
|
|
|
show_install_font_menu() {
|
|
case $(menu "Install" " Meslo LG Mono\n Fira Code\n Victor Code\n Bistream Vera Mono" "-w 350") in
|
|
*Meslo*) install_font "Meslo LG Mono" "ttf-meslo-nerd" "MesloLGL Nerd Font" ;;
|
|
*Fira*) install_font "Fira Code" "ttf-firacode-nerd" "FiraCode Nerd Font" ;;
|
|
*Victor*) install_font "Victor Code" "ttf-victor-mono-nerd" "VictorMono Nerd Font" ;;
|
|
*Bistream*) install_font "Bistream Vera Code" "ttf-bitstream-vera-mono-nerd" "BitstromWera Nerd Font" ;;
|
|
*) show_install_menu ;;
|
|
esac
|
|
}
|
|
|
|
show_install_development_menu() {
|
|
case $(menu "Install" " Ruby on Rails\n Docker DB\n JavaScript\n Go\n PHP\n Python\n Elixir\n Zig\n Rust\n Java\n .NET\n OCaml") in
|
|
*Rails*) present_terminal "omarchy-install-dev-env ruby" ;;
|
|
*Docker*) present_terminal omarchy-install-docker-dbs ;;
|
|
*JavaScript*) show_install_javascript_menu ;;
|
|
*Go*) present_terminal "omarchy-install-dev-env go" ;;
|
|
*PHP*) show_install_php_menu ;;
|
|
*Python*) present_terminal "omarchy-install-dev-env python" ;;
|
|
*Elixir*) show_install_elixir_menu ;;
|
|
*Zig*) present_terminal "omarchy-install-dev-env zig" ;;
|
|
*Rust*) present_terminal "omarchy-install-dev-env rust" ;;
|
|
*Java*) present_terminal "omarchy-install-dev-env java" ;;
|
|
*NET*) present_terminal "omarchy-install-dev-env dotnet" ;;
|
|
*OCaml*) present_terminal "omarchy-install-dev-env ocaml" ;;
|
|
*) show_install_menu ;;
|
|
esac
|
|
}
|
|
|
|
show_install_javascript_menu() {
|
|
case $(menu "Install" " Node.js\n Bun\n Deno") in
|
|
*Node*) present_terminal "omarchy-install-dev-env node" ;;
|
|
*Bun*) present_terminal "omarchy-install-dev-env bun" ;;
|
|
*Deno*) present_terminal "omarchy-install-dev-env deno" ;;
|
|
*) show_install_development_menu ;;
|
|
esac
|
|
}
|
|
|
|
show_install_php_menu() {
|
|
case $(menu "Install" " PHP\n Laravel\n Symfony") in
|
|
*PHP*) present_terminal "omarchy-install-dev-env php" ;;
|
|
*Laravel*) present_terminal "omarchy-install-dev-env laravel" ;;
|
|
*Symfony*) present_terminal "omarchy-install-dev-env symfony" ;;
|
|
*) show_install_development_menu ;;
|
|
esac
|
|
}
|
|
|
|
show_install_elixir_menu() {
|
|
case $(menu "Install" " Elixir\n Phoenix") in
|
|
*Elixir*) present_terminal "omarchy-install-dev-env elixir" ;;
|
|
*Phoenix*) present_terminal "omarchy-install-dev-env phoenix" ;;
|
|
*) show_install_development_menu ;;
|
|
esac
|
|
}
|
|
|
|
show_remove_menu() {
|
|
case $(menu "Remove" " Package\n Web App\n TUI\n Theme\n Fingerprint\n Fido2") in
|
|
*Package*) terminal omarchy-pkg-remove ;;
|
|
*Web*) present_terminal omarchy-webapp-remove ;;
|
|
*TUI*) present_terminal omarchy-tui-remove ;;
|
|
*Theme*) present_terminal omarchy-theme-remove ;;
|
|
*Fingerprint*) present_terminal "omarchy-setup-fingerprint --remove" ;;
|
|
*Fido2*) present_terminal "omarchy-setup-fido2 --remove" ;;
|
|
*) show_main_menu ;;
|
|
esac
|
|
}
|
|
|
|
show_update_menu() {
|
|
case $(menu "Update" " Omarchy\n Config\n Themes\n Process\n Timezone") in
|
|
*Omarchy*) present_terminal omarchy-update ;;
|
|
*Config*) show_update_config_menu ;;
|
|
*Themes*) present_terminal omarchy-theme-update ;;
|
|
*Process*) show_update_process_menu ;;
|
|
*Timezone*) omarchy-cmd-tzupdate ;;
|
|
*) show_main_menu ;;
|
|
esac
|
|
}
|
|
|
|
show_update_process_menu() {
|
|
case $(menu "Restart" " Hypridle\n Hyprsunset\n Swayosd\n Walker\n Waybar") in
|
|
*Hypridle*) omarchy-restart-hypridle ;;
|
|
*Hyprsunset*) omarchy-restart-hyprsunset ;;
|
|
*Swayosd*) omarchy-restart-swayosd ;;
|
|
*Walker*) omarchy-restart-walker ;;
|
|
*Waybar*) omarchy-restart-waybar ;;
|
|
*) show_main_menu ;;
|
|
esac
|
|
}
|
|
|
|
show_update_config_menu() {
|
|
case $(menu "Use default config" " Hyprland\n Hypridle\n Hyprlock\n Hyprsunset\n Plymouth\n Swayosd\n Walker\n Waybar") in
|
|
*Hyprland*) present_terminal omarchy-refresh-hyprland ;;
|
|
*Hypridle*) present_terminal omarchy-refresh-hypridle ;;
|
|
*Hyprlock*) present_terminal omarchy-refresh-hyprlock ;;
|
|
*Hyprsunset*) present_terminal omarchy-refresh-hyprsunset ;;
|
|
*Plymouth*) present_terminal omarchy-refresh-plymouth ;;
|
|
*Swayosd*) present_terminal omarchy-refresh-swayosd ;;
|
|
*Walker*) present_terminal omarchy-refresh-walker ;;
|
|
*Waybar*) present_terminal omarchy-refresh-waybar ;;
|
|
*) show_main_menu ;;
|
|
esac
|
|
}
|
|
|
|
show_system_menu() {
|
|
case $(menu "System" " Lock\n Screensaver\n Suspend\n Relaunch\n Restart\n Shutdown") in
|
|
*Lock*) omarchy-lock-screen ;;
|
|
*Screensaver*) omarchy-launch-screensaver force ;;
|
|
*Suspend*) systemctl suspend ;;
|
|
*Relaunch*) uwsm stop ;;
|
|
*Restart*) systemctl reboot ;;
|
|
*Shutdown*) systemctl poweroff ;;
|
|
*) show_main_menu ;;
|
|
esac
|
|
}
|
|
|
|
show_main_menu() {
|
|
go_to_menu "$(menu "Go" " Apps\n Learn\n Capture\n Toggle\n Style\n Setup\n Install\n Remove\n Update\n About\n System")"
|
|
}
|
|
|
|
go_to_menu() {
|
|
case "${1,,}" in
|
|
*apps*) walker -p "Launch…" ;;
|
|
*learn*) show_learn_menu ;;
|
|
*style*) show_style_menu ;;
|
|
*theme*) show_theme_menu ;;
|
|
*capture*) show_capture_menu ;;
|
|
*screenshot*) show_screenshot_menu ;;
|
|
*screenrecord*) show_screenrecord_menu ;;
|
|
*toggle*) show_toggle_menu ;;
|
|
*setup*) show_setup_menu ;;
|
|
*install*) show_install_menu ;;
|
|
*remove*) show_remove_menu ;;
|
|
*update*) show_update_menu ;;
|
|
*system*) show_system_menu ;;
|
|
*about*) terminal bash -c 'fastfetch; read -n 1 -s' ;;
|
|
esac
|
|
}
|
|
|
|
if [[ -n "$1" ]]; then
|
|
go_to_menu "$1"
|
|
else
|
|
show_main_menu
|
|
fi
|