{ config, pkgs, self, ... }: let passwordmanager_compose_dir = pkgs.stdenv.mkDerivation { name = "passwordmanager_compose_dir"; src = self + "/assets/compose/passwordmanager"; dontUnpack = true; installPhase = '' mkdir -p $out cp -r $src/* $out/ ''; }; in { systemd.services.passwordmanager_stack = { description = "Bitwarden via Docker Compose"; after = [ "network-online.target" "docker.service" ]; wants = [ "network-online.target" "docker.service" ]; serviceConfig = { WorkingDirectory = "${passwordmanager_compose_dir}"; # Stop left over container by the same name ExecStartPre = "${pkgs.bash}/bin/bash -c '${pkgs.docker-compose}/bin/docker-compose down || true'"; # Start the services using Docker Compose ExecStart = "${pkgs.docker-compose}/bin/docker-compose up -d"; # Stop and remove containers on shutdown ExecStop = "${pkgs.docker-compose}/bin/docker-compose down"; RemainAfterExit = true; TimeoutStartSec = 0; }; wantedBy = [ "multi-user.target" ]; }; }