diff --git a/hosts/AZ-CLD-1/services/snipe-it.nix b/hosts/AZ-CLD-1/services/snipe-it.nix index 516ffab..d39c921 100644 --- a/hosts/AZ-CLD-1/services/snipe-it.nix +++ b/hosts/AZ-CLD-1/services/snipe-it.nix @@ -1,12 +1,24 @@ { config, lib, + pkgs, ... }: let serviceName = "snipe-it"; servicePort = config.m3ta.ports.get serviceName; mysqlPort = config.m3ta.ports.get "mysql"; hostName = "am.az-gruppe.com"; + + restoreDefaults = pkgs.writeShellScript "snipe-it-restore-defaults" '' + set -euo pipefail + src="${pkgs.snipe-it}/share/snipe-it/uploads" + dst="/var/lib/snipe-it/public/uploads" + + if [ -d "$src" ] && [ -d "$dst" ]; then + # -n = kein Überschreiben existierender Dateien (User-Uploads bleiben erhalten) + cp -rn "$src/." "$dst/" + fi + ''; in { services.${serviceName} = { enable = true; @@ -52,6 +64,9 @@ in { after = ["mysql.service"]; requires = ["mysql.service"]; unitConfig.ConditionPathExists = "${config.services.mysql.dataDir}/snipeit"; + serviceConfig = { + ExecStartPre = ["+${restoreDefaults}"]; + }; }; # Traefik configuration diff --git a/overlays/mods/snipe-it.nix b/overlays/mods/snipe-it.nix new file mode 100644 index 0000000..546755b --- /dev/null +++ b/overlays/mods/snipe-it.nix @@ -0,0 +1,14 @@ +{prev}: { + snipe-it = prev.snipe-it.overrideAttrs (oldAttrs: { + postInstall = + '' + snipe_it_out="$out/share/php/snipe-it" + mkdir -p $out/share/snipe-it + + # Alle Default-Uploads sichern (z.B. default.png) bevor das + # ursprüngliche postInstall das Verzeichnis mit rm -R löscht + cp -r $snipe_it_out/public/uploads $out/share/snipe-it/uploads + '' + + oldAttrs.postInstall; + }); +}