LazyVPN is a powerful, script-based utility for managing WireGuardยฎ VPN connections, meticulously crafted for the Omarchy Linux environment. It replaces manual wg-quick and systemd-networkd configuration with a fast, keyboard-driven TUI, providing a comprehensive suite of tools for power users.
- Core Philosophy
- Screenshots
- Feature Matrix
- Requirements
- Installation
- First-Time Setup
- Standardized Server Naming
- Usage
- Menu Structure
- Uninstallation
- Roadmap
- License
- Speed & Efficiency: Every action is a few keystrokes away. No mouse required.
- Control: Granular control over your connection, security, and automation.
- Intelligence: The system is smart. It detects providers, parses server names, and automatically handles complex tasks.
- Resilience: With features like the auto-recover daemon and atomic configuration saves, LazyVPN is built to be reliable.
- Transparency: Understand your connection with detailed status info, performance tests, and leak protection.
The main menu when disconnected, showing all available options
Interactive server picker with country flags, feature emojis, and real-time filtering
Choose how to connect: lowest latency, random, specific server, or last used
Real-time connection status with IP verification and DNS leak protection
Parallel latency testing across all servers with sorted results
Click to see more screenshots
Firewall killswitch with local network access and disconnect behavior options
Configure automatic connection on boot with multiple mode options
Server management, auto-recover daemon, IPv6 protection, and more
Smart server import with automatic validation, provider detection, and duplicate prevention
Comprehensive testing suite including latency, speed, DNS leak tests, and performance history
- Multiple Connection Modes:
- โก Lowest Latency: Automatically performs parallel latency tests against all servers and connects to the one with the lowest ping.
- ๐ฒ Random Server: Connect to a randomly selected server for effortless privacy.
- ๐ Choose Server: Select a server from a filterable,
fzf-powered list with a detailed preview panel. - ๐ Last Used Server: Instantly reconnect to your most recent server.
- Smart Server Display:
- Automatic Server Renaming: When adding servers, LazyVPN automatically renames them to a standardized format using provider detection, filename parsing, and IP geolocation as fallback.
- Pretty Names: Displays servers with full location names and country flags (e.g.,
๐บ๐ธ United States - New York (123) โข ProtonVPN). - Feature Emojis: Visual indicators show server capabilities at a glance: ๐ P2P/Torrenting, ๐ Secure Core, ๐ง Tor, ๐คก Free Tier, ๐ VPN Accelerator, ๐ก๏ธ NetShield Level 1, โ๏ธ NetShield Level 2, ๐ฎ Moderate NAT.
- Provider Detection: Intelligently detects VPN providers (ProtonVPN, Mullvad, IVPN, PIA, NordVPN, Surfshark, etc.) from endpoint, DNS, or config file contents.
- Connection Status: The menu bar always shows your real-time status (
๐ข CONNECTEDor๐ด DISCONNECTED) and the currently connected server. - Seamless Server Switching: Switches between servers gracefully, automatically updating firewall rules and routes.
- Advanced Firewall Killswitch:
- An
iptables-based killswitch that blocks all internet traffic if the VPN disconnects, preventing any data leaks. - Dynamic Updates: The killswitch is smart. It automatically allows traffic to the new VPN endpoint before connecting, ensuring seamless server switching without ever disabling the killswitch.
- Configurable Local Network Access: Toggle whether to allow access to local network devices (printers, NAS, etc.) while the killswitch is active.
- Configurable Disconnect Behavior: Choose what happens when you manually disconnect:
๐ข AUTO: Automatically disable the killswitch.๐ก PROMPT: Ask whether to disable the killswitch.๐ด NEVER: Keep the killswitch active, ensuring the internet remains blocked until you reconnect.
- An
- ๐ Auto-Recover Daemon:
- A background daemon constantly monitors the health of your VPN connection.
- If it detects a drop or stall, it will automatically attempt to reconnect to the same server.
- Toggle from
โ๏ธ Optionsโ๐ Auto-Recover.
- ๐ IPv6 Leak Protection:
- Actively checks for and prevents IPv6 leaks by default.
- Can be toggled from the menu if you need to use IPv6.
- ๐งช DNS Leak Test:
- A built-in test to verify that your DNS queries are being correctly routed through the VPN's DNS servers, not your ISP's.
- ๐ Configuration Storage:
- Server configurations are currently stored in plaintext in
~/.config/lazyvpn/wireguard/ - Note: Encrypted storage is a planned optional feature (see Roadmap)
- Server configurations are currently stored in plaintext in
- ๐ Autoconnect on Boot:
- Set LazyVPN to automatically connect when you log in.
- Multiple Autoconnect Modes:
- Connect to the
last usedserver. - Connect to the
lowest latencyserver. - Connect to a
randomserver. - Connect to a
specificserver of your choice.
- Connect to the
- โ Easy Server Management:
- Add Servers: A guided
fzfinterface to import.conffiles from~/Downloadswith automatic validation, provider detection, location detection (via IP geolocation if needed), standardized renaming, and duplicate prevention. - Remove Servers: Safely remove servers with automatic cleanup of performance history and configuration references.
- Both accessible from
โ๏ธ Optionssubmenu.
- Add Servers: A guided
- โ๏ธ Interface Renaming: Easily rename the network interface (e.g., from
wg0tolazyvpn) directly from the menu. - Robust Configuration:
- Uses atomic file writes to prevent configuration corruption.
- Interactive Recovery: If the config file is ever deleted or corrupted, LazyVPN will guide you through an interactive prompt to recreate it.
- Automatic Migration: Handles upgrades and configuration changes from older versions seamlessly.
- โฑ๏ธ Latency Testing:
- Test the latency of the currently connected server.
- Test All Servers: Run parallel latency tests on all servers to find the quickest.
- ๐จ Speed Testing:
- Run a download speed test on the currently connected server.
- Test All Servers: A comprehensive test that connects to each server one-by-one, runs a speed test, and presents a sorted list of the fastest servers.
- Both "Test All" features include an option to test your direct, non-VPN connection for comparison.
- Non-VPN results are recorded in performance history as
๐ Direct (Non-VPN).
- ๐ Performance History:
- Automatically records the results of every latency and speed test.
- View a summary of average speeds and latencies for all servers.
- View a detailed log of the last 20 tests for any specific server.
- Omarchy Menu: Adds a "LazyVPN" entry to the main Omarchy menu (
SUPER+ALT+SPACE). - Dedicated Keybinding: Launch the menu instantly with
SUPER+L(automatically registered in the Omarchy keybind help menu atSUPER+K). - Passwordless Operation: A secure
sudoersconfiguration covers all VPN operations (connections, disconnections, killswitch updates). Password only required during installation and uninstallation. - Desktop Notifications: Provides clear notifications for connects, disconnects, and other key events.
- Smart Change Detection: Automatically detects when you add or remove
.conffiles and notifies you.
- Omarchy Linux (Arch-based distribution)
- systemd-networkd (enabled and running)
- systemd-resolved (enabled and running)
- wireguard-tools or WireGuard kernel module
- curl (for speed tests and public IP detection)
- bc (for latency/speed calculations)
- iptables (for killswitch functionality)
- bind-tools (provides
digfor DNS leak testing) - fzf (provided by Omarchy)
- omarchy-launch-walker (Omarchy menu system)
- omarchy-launch-floating-terminal-with-presentation (Omarchy terminal launcher)
- omarchy-notification-dismiss (Omarchy notification system)
Note: The installer automatically installs missing dependencies (except Omarchy itself).
-
Clone the Repository:
git clone https://github.com/blank-query/lazyVPN-for-Omarchy.git cd lazyVPN-for-Omarchy -
Run the Installer:
./install_lazyVPN.sh
The installer handles everything: dependencies, script installation,
sudorights, and desktop integration.
- Get WireGuard Files: Download
.conffiles from your VPN provider. - Add Servers: Run LazyVPN (
SUPER+L) and chooseโ Add New Serverto import them from your~/Downloadsfolder.- LazyVPN automatically validates, detects providers, determines locations (using IP geolocation if needed), and renames files to a standardized format.
- Duplicate detection prevents adding servers to the same location twice.
- You'll see both the original filename and the new standardized name during import.
VPN providers often give configuration files inconsistent or generic names like wg-US-FREE-27.conf, SE-31-TOR.conf, or server-uk-123.conf. LazyVPN automatically renames these to a standardized, machine-readable format when you import them. This provides several key benefits:
- Consistent Organization: All servers follow the same naming pattern regardless of provider
- Fast Display: Location codes (like
US-WA) are expanded locally to full names (United States - Washington) without network calls - Smart Filtering: Easy to search and filter by country, state, city, or provider in the server picker
- Duplicate Detection: Prevents adding multiple servers to the same location
- Feature Encoding: Server capabilities are preserved in the filename for quick identification
- Automatic Location Detection: Uses IP geolocation as fallback when filenames don't contain location info
[Provider-]Country[-State][-City][-Features]#Number
Proton-US-NY#123โ ๐บ๐ธ United States - New York (123) โข ProtonVPNMullvad-SE-Stockholm#5โ ๐ธ๐ช Sweden - Stockholm (5) โข MullvadIVPN-NL-Amsterdam-P2P#3โ ๐ณ๐ฑ Netherlands - Amsterdam (3) ๐ โข IVPNPIA-US-CA-LosAngeles#7โ ๐บ๐ธ United States - California, Los Angeles (7) โข PIAProton-CH-Tor#2โ ๐จ๐ญ Switzerland (2) ๐ง โข ProtonVPNNord-GB-London-Stream#12โ ๐ฌ๐ง United Kingdom - London (12) ๐บ โข NordVPN
- Provider Detection: Identifies your VPN provider from DNS, endpoint, or config contents
- Location Parsing: Attempts to extract location from the original filename
- IP Geolocation Fallback: If filename parsing fails, looks up the endpoint IP to determine country, state/region, and city
- Feature Detection: Identifies server capabilities (P2P, Tor, Secure Core, Streaming) from filename and config
- Auto-Numbering: Assigns the next available number for servers in the same location
- Standardized Naming: Saves the file with the new name and displays it with full location names and emoji indicators
You never need to manually rename files โ LazyVPN handles it all automatically!
LazyVPN automatically detects and displays server features using visual emoji indicators. These emojis appear next to server names throughout the interface, allowing you to quickly identify server capabilities at a glance.
All features are automatically detected from WireGuard configuration files when servers are added. No manual configuration required!
| Emoji | Feature | What It Means | Detection Source |
|---|---|---|---|
| ๐ | P2P / Torrenting | Port forwarding enabled for peer-to-peer file sharing and torrenting | # NAT-PMP (Port Forwarding) = on in config |
| ๐ | Secure Core | Multi-hop VPN routing through privacy-friendly countries (CH/IS/SE) for enhanced security | Peer comment pattern: CH/IS/SE-[EXIT_COUNTRY]#N |
| ๐ง | Tor Routing | Routes traffic through Tor network for maximum anonymity | Peer comment contains -TOR |
| ๐คก | Free Tier | Free plan server (limited features) | Peer comment contains FREE |
| ๐ | VPN Accelerator | ProtonVPN's speed enhancement technology (up to 400% faster) | # VPN Accelerator = on in config |
| ๐ก๏ธ | NetShield Level 1 | Malware blocking only | # NetShield = 1 in config |
| โ๏ธ | NetShield Level 2 | Malware + ad/tracker blocking (full protection) | # NetShield = 2 in config |
| ๐ฎ | Moderate NAT | Optimized for gaming and P2P with reduced IP randomization | # Moderate NAT = on in config |
๐ธ๐ช Sweden - Alberta, Roslagen (1) ๐๐๐ โข ProtonVPN
โโ Has: P2P support, Secure Core multi-hop, VPN Accelerator
๐บ๐ธ United States - Washington, Seattle (27) ๐๐คก๐ก๏ธ โข ProtonVPN
โโ Has: P2P support, Free tier, NetShield Level 1
๐ธ๐ช Sweden - Alberta, Stockholm (31) ๐๐ง
๐ก๏ธ โข ProtonVPN
โโ Has: P2P support, Tor routing, NetShield Level 1
๐ฆ๐ฑ Albania - Tirana (52) โ๏ธ๐ฎ โข ProtonVPN
โโ Has: NetShield Level 2 (full ad blocking), Moderate NAT (gaming)
Currently, all feature detection is optimized for ProtonVPN configuration formats. Support for other providers' feature detection may be added in future updates.
Secure Core Multi-Hop: Entry countries are always privacy-friendly jurisdictions (Switzerland ๐จ๐ญ, Iceland ๐ฎ๐ธ, or Sweden ๐ธ๐ช) that route to your chosen exit country.
- Open the Menu: Press
SUPER+L. - Navigate: Use arrow keys and
Enter.Escto go back or exit. - In fzf pickers: Use
Ctrl+Ato select/deselect all when adding or removing servers. - Server filtering: In the "Choose Server" picker, type to filter by country, city, or provider.
- All features are accessible through the menu.
LazyVPN's menu is organized hierarchically with dynamic options that change based on your connection state.
- ๐ Connect โ Connection submenu (choose how to connect)
- ๐ก๏ธ Killswitch โ Killswitch configuration submenu
- โ๏ธ Autostart โ Autostart configuration submenu
- ๐งช Tests โ Testing submenu
- โ๏ธ Options โ Options submenu (server management, advanced settings)
- ๐ข Status Bar: Shows connected server and public IP
- ๐ Disconnect โ Disconnects from current VPN
- ๐ Switch Server โ Connection submenu (switch to different server)
- ๐ก๏ธ Killswitch โ Killswitch configuration submenu
- โ๏ธ Autostart โ Autostart configuration submenu
- ๐งช Tests โ Testing submenu
- โ๏ธ Options โ Options submenu
- โก Lowest Latency โ Automatically tests all servers and connects to fastest
- ๐ฒ Random Server โ Connects to random server
- ๐ Choose Server โ
fzfpicker with server preview and filtering - ๐ Last Used Server โ Reconnects to most recently used server
Shows current killswitch state (๐ข ENABLED or ๐ด DISABLED)
- Toggle Killswitch โ Enable/disable killswitch
- ๐ถ Local Network Access โ Toggle LAN device access when killswitch active
- Status indicator:
๐ข Allowedor๐ด Blocked
- Status indicator:
- โ๏ธ Disconnect Behavior โ Configure what happens when manually disconnecting
๐ข AUTO- Automatically disable killswitch๐ก PROMPT- Ask whether to disable๐ด NEVER- Keep killswitch active (internet blocked until reconnect)
Shows current autostart state (๐ข ENABLED or ๐ด DISABLED)
- Toggle Autostart โ Enable/disable autoconnect on boot
- Autoconnect Mode โ Choose which server to connect to at boot
โก Lowest Latency- Test all servers and connect to fastest๐ Last Used- Connect to most recently used server๐ฒ Random- Connect to random server๐ฏ Specific Server- Connect to a specific chosen server (opensfzfpicker)
- โฑ๏ธ Latency Test (All Servers) โ Parallel ping test of all servers with optional non-VPN comparison
- ๐ Performance History โ View historical test results and averages
- โฑ๏ธ Latency Test โ Test ping to current server
- โฑ๏ธ Latency Test (All Servers) โ Parallel ping test of all servers with optional non-VPN comparison
- ๐จ Speed Test โ Download speed test on current server
- ๐จ Speed Test (All Servers) โ Sequential speed test of all servers with optional non-VPN comparison
- ๐งช DNS Leak Test โ Verify DNS queries route through VPN, not ISP
- ๐ Performance History โ View historical test results and averages
- โ Add New Server โ Import
.conffiles from~/Downloadswith validation and duplicate detection - โ Remove Server โ Remove installed servers (with safety checks and cleanup)
- ๐ Auto-Recover โ Toggle auto-reconnect daemon
- Status indicator:
๐ข Activeor๐ด Inactive
- Status indicator:
- ๐ IPv6 Protection โ Toggle IPv6 leak protection
- Status indicator:
๐ข Enabledor๐ด Disabled
- Status indicator:
- โ๏ธ Rename Interface โ Change network interface name (default:
wg0)- Shows current name: e.g.,
(wg0)
- Shows current name: e.g.,
- ๐๏ธ Uninstall LazyVPN โ Complete uninstallation with confirmation
When viewing performance history:
- Summary View (no arguments): Shows all servers with average speeds, latencies, and test counts
- Detailed View (with server name): Shows last 20 test results with timestamps
- Non-VPN Data: Direct connection tests appear as
๐ Direct (Non-VPN)
LazyVPN includes a comprehensive uninstaller that ensures clean removal:
- Access Methods:
- Run
lazyvpn-uninstallfrom a terminal - Select
โ๏ธ Optionsโ๐๏ธ Uninstall LazyVPNfrom the menu
- Run
- Automatic Cleanup: The installer detects installation failures and automatically runs the uninstaller to clean up partial installations.
- Config Preservation: During uninstallation, you'll be asked whether to keep your configuration files (VPN configs and performance history) or remove everything.
- What Gets Removed:
- All LazyVPN scripts from
~/.local/share/omarchy/bin/ - Firewall killswitch rules
- Sudoers configuration
- Desktop integrations (menu entries, autostart files, keybindings)
- Omarchy menu modifications
- All LazyVPN scripts from
- Safe Uninstall: If connected to a VPN, the uninstaller offers to disconnect for you - no need to leave the screen.
Note: The uninstaller is installed first during installation to ensure cleanup capability even if installation fails.
Future features and enhancements under consideration:
- Toggle-able Security: Optional encryption for stored
.conffiles (disabled by default) - Automatic Encryption: When enabled, encrypt
.conffiles before storing them in~/.config/lazyvpn/wireguard/ - Secure Cleanup: Offer to securely delete plaintext
.conffiles from~/Downloadsafter import - Transparent Decryption: Decrypt configs on-the-fly when connecting, completely transparent to the user
- Password Protection: Password/passphrase protection for the encrypted config vault
- Currently, the auto-recover daemon reconnects to the same server if a connection drops
- Planned: If reconnection fails repeatedly, automatically failover to the next-quickest server to minimize downtime
Have ideas for LazyVPN? Open an issue on the GitHub repository with your feature requests.
LazyVPN is released under the MIT License.
Copyright (c) 2025 blank-query
WireGuard is a registered trademark of Jason A. Donenfeld.