2024-05-18 02:27:49 +00:00
|
|
|
import re
|
2024-05-18 02:32:56 +00:00
|
|
|
from typing import Dict, Tuple, Optional
|
2024-05-18 02:27:49 +00:00
|
|
|
|
2024-05-17 01:23:37 +00:00
|
|
|
FLAKE_CONFIG_PATH = "/etc/nixos/sp-modules/flake.nix"
|
|
|
|
|
|
|
|
|
|
|
|
class FlakeServiceManager:
|
2024-05-18 02:32:56 +00:00
|
|
|
def __enter__(self) -> "FlakeServiceManager":
|
2024-05-17 01:23:37 +00:00
|
|
|
self.services = {}
|
2024-05-18 02:27:49 +00:00
|
|
|
|
|
|
|
with open(FLAKE_CONFIG_PATH, "r") as file:
|
|
|
|
for line in file:
|
|
|
|
service_name, url = self._extract_services(input_string=line)
|
|
|
|
if service_name and url:
|
|
|
|
self.services[service_name] = url
|
|
|
|
|
2024-05-17 01:23:37 +00:00
|
|
|
return self
|
|
|
|
|
2024-05-18 02:32:56 +00:00
|
|
|
def _extract_services(
|
|
|
|
self, input_string: str
|
|
|
|
) -> Tuple[Optional[str], Optional[str]]:
|
2024-05-18 02:27:49 +00:00
|
|
|
pattern = r"inputs\.(\w+)\.url\s*=\s*(\S+);"
|
|
|
|
match = re.search(pattern, input_string)
|
|
|
|
|
|
|
|
if match:
|
|
|
|
variable_name = match.group(1)
|
|
|
|
url = match.group(2)
|
|
|
|
return variable_name, url
|
|
|
|
else:
|
|
|
|
return None, None
|
|
|
|
|
2024-05-18 02:32:56 +00:00
|
|
|
def __exit__(self, exc_type, exc_value, traceback) -> None:
|
2024-05-17 01:23:37 +00:00
|
|
|
with open(FLAKE_CONFIG_PATH, "w") as file:
|
|
|
|
file.write(
|
|
|
|
"""
|
|
|
|
{
|
|
|
|
description = "SelfPrivacy NixOS PoC modules/extensions/bundles/packages/etc";\n
|
|
|
|
"""
|
|
|
|
)
|
|
|
|
|
|
|
|
for key, value in self.services.items():
|
|
|
|
file.write(
|
|
|
|
f"""
|
|
|
|
inputs.{key}.url = {value};
|
|
|
|
"""
|
|
|
|
)
|
|
|
|
|
|
|
|
file.write(
|
|
|
|
"""
|
|
|
|
outputs = _: { };
|
|
|
|
}
|
|
|
|
"""
|
|
|
|
)
|
2024-05-18 02:27:49 +00:00
|
|
|
|
|
|
|
|
|
|
|
if __name__ == "__main__":
|
|
|
|
with FlakeServiceManager() as manager:
|
|
|
|
# manager.services = {
|
|
|
|
# "bitwarden": "git+https://git.selfprivacy.org/SelfPrivacy/selfprivacy-nixos-config.git?ref=flakes&dir=sp-modules/bitwarden",
|
|
|
|
# "gitea": "git+https://git.selfprivacy.org/SelfPrivacy/selfprivacy-nixos-config.git?ref=flakes&dir=sp-modules/gitea",
|
|
|
|
# "jitsi-meet": "git+https://git.selfprivacy.org/SelfPrivacy/selfprivacy-nixos-config.git?ref=flakes&dir=sp-modules/jitsi-meet",
|
|
|
|
# "nextcloud": "git+https://git.selfprivacy.org/SelfPrivacy/selfprivacy-nixos-config.git?ref=flakes&dir=sp-modules/nextcloud",
|
|
|
|
# "ocserv": "git+https://git.selfprivacy.org/SelfPrivacy/selfprivacy-nixos-config.git?ref=flakes&dir=sp-modules/ocserv",
|
|
|
|
# "pleroma": "git+https://git.selfprivacy.org/SelfPrivacy/selfprivacy-nixos-config.git?ref=flakes&dir=sp-modules/pleroma",
|
|
|
|
# "simple-nixos-mailserver": "git+https://git.selfprivacy.org/SelfPrivacy/selfprivacy-nixos-config.git?ref=flakes&dir=sp-modules/simple-nixos-mailserver",
|
|
|
|
# }
|
|
|
|
print(manager.services)
|