Home-manager: Add waybar mullvad vpn module
This commit is contained in:
parent
46362ce186
commit
9d2bc8aa10
3 changed files with 203 additions and 1 deletions
24
LICENSE
Normal file
24
LICENSE
Normal file
|
|
@ -0,0 +1,24 @@
|
||||||
|
This repository uses code from @dottmp on github,
|
||||||
|
for the Mullvad VPN waybar module.
|
||||||
|
|
||||||
|
MIT License
|
||||||
|
|
||||||
|
Copyright (c) 2026 dottmp
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
in the Software without restriction, including without limitation the rights
|
||||||
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
copies of the Software, and to permit persons to whom the Software is
|
||||||
|
furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in all
|
||||||
|
copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
|
SOFTWARE.
|
||||||
142
home-manager/modules/hypr/mullvad.sh
Executable file
142
home-manager/modules/hypr/mullvad.sh
Executable file
|
|
@ -0,0 +1,142 @@
|
||||||
|
#!/run/current-system/sw/bin/bash
|
||||||
|
|
||||||
|
# CREDIT TO @dottmp on Github (https://github.com/dottmp/mullvad-waybar-module/blob/main/mullvad.sh)
|
||||||
|
# LICENSED UNDER MIT:
|
||||||
|
|
||||||
|
# MIT License
|
||||||
|
|
||||||
|
# Copyright (c) 2026 dottmp
|
||||||
|
|
||||||
|
# Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
# of this software and associated documentation files (the "Software"), to deal
|
||||||
|
# in the Software without restriction, including without limitation the rights
|
||||||
|
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
# copies of the Software, and to permit persons to whom the Software is
|
||||||
|
# furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
# The above copyright notice and this permission notice shall be included in all
|
||||||
|
# copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
|
# SOFTWARE.
|
||||||
|
|
||||||
|
|
||||||
|
# @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @
|
||||||
|
# Mullvad CLI
|
||||||
|
#
|
||||||
|
# Manage the Mullvad VPN daemon via a convenient CLI
|
||||||
|
# Usage: mullvad <COMMAND>
|
||||||
|
#
|
||||||
|
# Commands:
|
||||||
|
# account Control and display information about your Mullvad account
|
||||||
|
# auto-connect Control the daemon auto-connect setting
|
||||||
|
# beta-program Receive notifications about beta updates
|
||||||
|
# lockdown-mode Control whether to block network access when disconnected from VPN
|
||||||
|
# dns Configure DNS servers to use when connected
|
||||||
|
# lan Control the allow local network sharing setting
|
||||||
|
# connect Connect to a VPN relay
|
||||||
|
# disconnect Disconnect from the VPN
|
||||||
|
# reconnect Reconnect to any matching VPN relay
|
||||||
|
# relay Manage relay and tunnel constraints
|
||||||
|
# api-access Manage Mullvad API access methods
|
||||||
|
# obfuscation Manage use of obfuscation protocols for WireGuard. Can make WireGuard traffic look like something else on the network. Helps circumvent censorship and to establish a tunnel when on restricted networks
|
||||||
|
# split-tunnel Manage split tunneling. To launch applications outside the tunnel, use the program 'mullvad-exclude' instead of this command
|
||||||
|
# status Return the state of the VPN tunnel
|
||||||
|
# tunnel Manage tunnel options
|
||||||
|
# version Show information about the current Mullvad version and available versions
|
||||||
|
# factory-reset Reset settings, caches, and logs
|
||||||
|
# reset-settings Reset settings only, but remain logged in and keep logs and caches
|
||||||
|
# custom-list Manage custom lists
|
||||||
|
# import-settings Apply a JSON patch generated by 'export-settings'
|
||||||
|
# export-settings Export a JSON patch based on the current settings
|
||||||
|
# help Print this message or the help of the given subcommand(s)
|
||||||
|
|
||||||
|
|
||||||
|
# @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @
|
||||||
|
# Mullvad Methods
|
||||||
|
vpn_get_status() {
|
||||||
|
mullvad status
|
||||||
|
}
|
||||||
|
|
||||||
|
vpn_reconnect() {
|
||||||
|
mullvad reconnect
|
||||||
|
}
|
||||||
|
|
||||||
|
vpn_disconnect() {
|
||||||
|
mullvad disconnect
|
||||||
|
}
|
||||||
|
|
||||||
|
vpn_connect() {
|
||||||
|
mullvad connect
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
# @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @
|
||||||
|
# Vars
|
||||||
|
VPN_STATUS="$(vpn_get_status)"
|
||||||
|
VPN_CONNECTION=$(echo "$VPN_STATUS" | head -n1 | xargs)
|
||||||
|
VPN_RELAY=$(echo "$VPN_STATUS" | awk -F'Relay: ' '/Relay:/ {print $2}' | xargs)
|
||||||
|
VPN_FEATURES=$(echo "$VPN_STATUS" | awk -F'Features: ' '/Features:/ {print $2}' | xargs)
|
||||||
|
VPN_VISIBLE_LOCATION=$(echo "$VPN_STATUS" | awk -F'Visible location: ' '/Visible location:/ {print $2}' | xargs)
|
||||||
|
|
||||||
|
|
||||||
|
# @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @
|
||||||
|
# Actions
|
||||||
|
#
|
||||||
|
# [toggle_connection] Connect/disconnect to a VPN relay based on current status and send notification
|
||||||
|
toggle_connection() {
|
||||||
|
if [ "$VPN_CONNECTION" = "Connected" ]; then
|
||||||
|
vpn_disconnect
|
||||||
|
else
|
||||||
|
vpn_connect
|
||||||
|
fi
|
||||||
|
|
||||||
|
notify-send
|
||||||
|
sleep 1
|
||||||
|
}
|
||||||
|
|
||||||
|
# [reconnect] Reconnect to any matching VPN relay and send notification
|
||||||
|
reconnect() {
|
||||||
|
vpn_reconnect
|
||||||
|
|
||||||
|
notify-send
|
||||||
|
sleep 1
|
||||||
|
}
|
||||||
|
|
||||||
|
# [get_module_data] Get data for custom/mullvad module in waybar. Returns waybar JSON
|
||||||
|
get_module_data() {
|
||||||
|
local class alt tooltip
|
||||||
|
|
||||||
|
tooltip="Mullvad VPN\n\nStatus: $VPN_CONNECTION\nRelay: $VPN_RELAY\nFeatures: $VPN_FEATURES\nVisible Location: $VPN_VISIBLE_LOCATION"
|
||||||
|
|
||||||
|
case "$VPN_CONNECTION" in
|
||||||
|
Connected)
|
||||||
|
class="connected"
|
||||||
|
alt="connected"
|
||||||
|
;;
|
||||||
|
Connecting)
|
||||||
|
class="connecting"
|
||||||
|
alt="connecting"
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
class="disconnected"
|
||||||
|
alt="disconnected"
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
echo "{\"text\": \"$VPN_CONNECTION\", \"tooltip\": \"$tooltip\", \"alt\": \"$alt\", \"class\": \"$class\"}"
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
# @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @
|
||||||
|
# Input
|
||||||
|
case "$1" in
|
||||||
|
toggle) toggle_connection ;;
|
||||||
|
reconnect) reconnect ;;
|
||||||
|
*) get_module_data ;;
|
||||||
|
esac
|
||||||
|
|
@ -11,7 +11,8 @@
|
||||||
modules-left = [
|
modules-left = [
|
||||||
"hyprland/workspaces"
|
"hyprland/workspaces"
|
||||||
"niri/workspaces"
|
"niri/workspaces"
|
||||||
"niri/window"
|
# "niri/window"
|
||||||
|
"custom/mullvad"
|
||||||
];
|
];
|
||||||
modules-center = [ "clock" ];
|
modules-center = [ "clock" ];
|
||||||
modules-right = [
|
modules-right = [
|
||||||
|
|
@ -21,6 +22,22 @@
|
||||||
"battery"
|
"battery"
|
||||||
];
|
];
|
||||||
|
|
||||||
|
"custom/mullvad" = {
|
||||||
|
"format" = "{icon}";
|
||||||
|
"exec" = "/home/zeph/nix/home-manager/modules/hypr/mullvad.sh";
|
||||||
|
"interval" = 10;
|
||||||
|
"return-type" = "json";
|
||||||
|
"on-click" = "/home/zeph/nix/home-manager/modules/hypr/mullvad.sh toggle";
|
||||||
|
"on-click-middle" = "mullvad-vpn";
|
||||||
|
"on-click-right" = "/home/zeph/nix/home-manager/modules/hypr/mullvad.sh reconnect";
|
||||||
|
"format-icons" = {
|
||||||
|
"connected" = "";
|
||||||
|
"connecting" = "";
|
||||||
|
"disconnected" = "";
|
||||||
|
};
|
||||||
|
"tooltip" = true;
|
||||||
|
};
|
||||||
|
|
||||||
"hyprland/workspaces" = {
|
"hyprland/workspaces" = {
|
||||||
disable-scroll = true;
|
disable-scroll = true;
|
||||||
all-outputs = true;
|
all-outputs = true;
|
||||||
|
|
@ -89,6 +106,25 @@
|
||||||
@define-color purple #b16286;
|
@define-color purple #b16286;
|
||||||
@define-color aqua #689d6a;
|
@define-color aqua #689d6a;
|
||||||
@define-color orange #d65d0e;
|
@define-color orange #d65d0e;
|
||||||
|
@define-color error #F96184;
|
||||||
|
@define-color foreground #D3D9FF;
|
||||||
|
@define-color success #01D38F;
|
||||||
|
|
||||||
|
#custom-mullvad {
|
||||||
|
background-color: @bg1;
|
||||||
|
min-width: 14px;
|
||||||
|
margin: 3px 2px;
|
||||||
|
padding: 2px 6px;
|
||||||
|
border: 2px solid @orange;
|
||||||
|
border-radius: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
#custom-mullvad.connecting {
|
||||||
|
color: @foreground;
|
||||||
|
}
|
||||||
|
#custom-mullvad.connected {
|
||||||
|
color: @success;
|
||||||
|
}
|
||||||
|
|
||||||
* {
|
* {
|
||||||
font-family: "JetBrainsMono Nerd Font", monospace;
|
font-family: "JetBrainsMono Nerd Font", monospace;
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue