diff --git a/nix/packages/by-name/mullvad-status/mullvad-status.sh b/nix/packages/by-name/mullvad-status/mullvad-status.sh new file mode 100644 index 00000000..af75f92f --- /dev/null +++ b/nix/packages/by-name/mullvad-status/mullvad-status.sh @@ -0,0 +1,33 @@ +if ! type mullvad >/dev/null; then + echo -n "Mullvad unavailable" + exit 1 +fi + +MULLVAD_STATUS="$(mullvad status -j)" + +function xmobarColor { + fg="$1" + x="$2" + echo -n "$x" +} + +case "$(echo "$MULLVAD_STATUS" | jq -r ".state")" in +connected) + function has-feature { + echo "$MULLVAD_STATUS" | jq --exit-status ".details.feature_indicators|contains([\"$1\"])" >/dev/null + } + if has-feature "LockdownMode"; then + xmobarColor "green" "Mullvad On " + else + xmobarColor "orange" "Mullvad On" + fi + + COUNTRY="$(echo "$MULLVAD_STATUS" | jq -r '.details.location.country')" + CITY="$(echo "$MULLVAD_STATUS" | jq -r '.details.location.city')" + + echo -n " ($COUNTRY,$CITY)" + ;; +disconnected) + xmobarColor "red" "Mullvad Off" + ;; +esac diff --git a/nix/packages/by-name/mullvad-status/package.nix b/nix/packages/by-name/mullvad-status/package.nix new file mode 100644 index 00000000..4841f3aa --- /dev/null +++ b/nix/packages/by-name/mullvad-status/package.nix @@ -0,0 +1,14 @@ +{ + writeShellApplication, + jq, + mullvad, +}: + +writeShellApplication { + name = "mullvad-status"; + runtimeInputs = [ + mullvad + jq + ]; + text = builtins.readFile ./mullvad-status.sh; +}