From 4f780f3f61e6d7881a3dcd33b6b0f1d1e1435916 Mon Sep 17 00:00:00 2001 From: Ryan Yin Date: Tue, 30 Apr 2024 18:40:41 +0800 Subject: [PATCH] refactor: scripts --- scripts/darwin_set_proxy.py | 67 +++++++++++++++++++++++-------------- 1 file changed, 42 insertions(+), 25 deletions(-) diff --git a/scripts/darwin_set_proxy.py b/scripts/darwin_set_proxy.py index d06bc181..c8521bdd 100644 --- a/scripts/darwin_set_proxy.py +++ b/scripts/darwin_set_proxy.py @@ -4,39 +4,56 @@ https://github.com/NixOS/nix/issues/1472#issuecomment-1532955973 """ + import os import plistlib import shlex import subprocess from pathlib import Path - - + + NIX_DAEMON_PLIST = Path("/Library/LaunchDaemons/org.nixos.nix-daemon.plist") NIX_DAEMON_NAME = "org.nixos.nix-daemon" # http proxy provided by my homelab's bypass router -HTTP_PROXY = "http://192.168.5.103:7890" - -pl = plistlib.loads(NIX_DAEMON_PLIST.read_bytes()) - -# set http/https proxy -# NOTE: curl only accept the lowercase of `http_proxy`! -# NOTE: https://curl.se/libcurl/c/libcurl-env.html -# pl["EnvironmentVariables"]["http_proxy"] = HTTP_PROXY -# pl["EnvironmentVariables"]["https_proxy"] = HTTP_PROXY - -# remove http proxy -pl["EnvironmentVariables"].pop("http_proxy", None) -pl["EnvironmentVariables"].pop("https_proxy", None) - -os.chmod(NIX_DAEMON_PLIST, 0o644) -NIX_DAEMON_PLIST.write_bytes(plistlib.dumps(pl)) -os.chmod(NIX_DAEMON_PLIST, 0o444) - -# reload the plist -for cmd in ( +HTTP_PROXY = "http://192.168.5.179:7890" + +PLIST = plistlib.loads(NIX_DAEMON_PLIST.read_bytes()) + + +def update_plist(): + os.chmod(NIX_DAEMON_PLIST, 0o644) + NIX_DAEMON_PLIST.write_bytes(plistlib.dumps(PLIST)) + os.chmod(NIX_DAEMON_PLIST, 0o444) + + +def reload_daemon(): + # reload the plist + for cmd in ( f"launchctl unload {NIX_DAEMON_PLIST}", f"launchctl load {NIX_DAEMON_PLIST}", -): - print(cmd) - subprocess.run(shlex.split(cmd), capture_output=False) + ): + print(cmd) + subprocess.run(shlex.split(cmd), capture_output=False) + +def set_proxy(): + # set http/https proxy + # NOTE: curl only accept the lowercase of `http_proxy`! + # NOTE: https://curl.se/libcurl/c/libcurl-env.html + PLIST["EnvironmentVariables"]["http_proxy"] = HTTP_PROXY + PLIST["EnvironmentVariables"]["https_proxy"] = HTTP_PROXY + update_plist() + reload_daemon() + + +def unset_proxy(): + # remove http proxy + PLIST["EnvironmentVariables"].pop("http_proxy", None) + PLIST["EnvironmentVariables"].pop("https_proxy", None) + update_plist() + reload_daemon() + + +if __name__ == "__main__": + set_proxy() + # unset_proxy()