From fa192a3977f01b2656f3b092319a4196531df8bb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kier=C3=A1n=20Meinhardt?= Date: Sun, 30 May 2021 12:57:37 +0200 Subject: [PATCH] feat(hedgedoc): add backup script --- configs/hedgedoc.nix | 51 ++++++++++++++++++++++++++++++- systems/makanek/configuration.nix | 8 ++++- 2 files changed, 57 insertions(+), 2 deletions(-) diff --git a/configs/hedgedoc.nix b/configs/hedgedoc.nix index 9ecbb84..03fc903 100644 --- a/configs/hedgedoc.nix +++ b/configs/hedgedoc.nix @@ -1,4 +1,11 @@ +{ pkgs, ... }: +let + backupLocation = "/var/lib/codimd-backup"; + stateLocation = "/var/lib/codimd/state.sqlite"; +in { + imports = [ ]; + services.nginx.virtualHosts."pad.xn--kiern-0qa.de" = { enableACME = true; addSSL = true; @@ -17,9 +24,51 @@ allowFreeURL = true; db = { dialect = "sqlite"; - storage = "/var/lib/codimd/state.sqlite"; + storage = stateLocation; }; port = 3091; }; }; + + krebs.permown.${backupLocation} = { owner = "codimd"; group = "codimd"; umask = "0002"; }; + + systemd.services.hedgedoc-backup = { + description = "Hedgedoc backup service"; + script = '' + ${pkgs.sqlite}/bin/sqlite3 -csv ${stateLocation} "select id, alias, ownerId, content from Notes" \ + | ${pkgs.writers.writePython3 "hedgedoc-csv-to-fs.py" {} '' + import csv + import pathlib + import sys + + reader = csv.reader( + (line.decode("utf-8") for line in sys.stdin.buffer.readlines()), + dialect="unix" + ) + for row in reader: + try: + id, alias, ownerId, content = row + + user_directory = pathlib.Path(ownerId) + user_directory.mkdir(exist_ok=True) + + file_path = user_directory / ((alias if alias else id) + ".md") + file_path.write_text(content) + + sys.stderr.write(f"✔ {file_path}\n") + except ValueError: + sys.stderr.write( + f"row {reader.line_num} does not have the correct number of fields" + ) + continue + ''} + ''; + startAt = "hourly"; + serviceConfig = { + Type = "oneshot"; + User = "codimd"; + Group = "codimd"; + WorkingDirectory = backupLocation; + }; + }; } diff --git a/systems/makanek/configuration.nix b/systems/makanek/configuration.nix index c691ca3..2a5b143 100644 --- a/systems/makanek/configuration.nix +++ b/systems/makanek/configuration.nix @@ -65,7 +65,13 @@ in boot.loader.grub.enable = true; boot.loader.grub.version = 2; - nixpkgs.config.allowUnfree = true; + nixpkgs.config = { + allowUnfree = true; + packageOverrides = pkgs: { + writeDashBin = pkgs.writers.writeDashBin; + writeDash = pkgs.writers.writeDash; + }; + }; networking.useDHCP = false; networking.interfaces.ens3.useDHCP = true;