dotfiles/modules/nixos/services/calibre.nix

64 lines
1.7 KiB
Nix
Raw Normal View History

2022-10-15 15:29:21 +00:00
{ config, pkgs, lib, ... }: {
2022-10-01 21:39:36 +00:00
2022-10-02 14:48:51 +00:00
options = {
bookServer = lib.mkOption {
2023-01-21 14:29:03 +00:00
type = lib.types.nullOr lib.types.str;
2022-10-02 14:48:51 +00:00
description = "Hostname for Calibre library";
2022-12-21 21:18:03 +00:00
default = null;
2022-10-02 14:48:51 +00:00
};
};
2022-10-01 21:39:36 +00:00
2022-12-21 21:38:34 +00:00
config = lib.mkIf (config.bookServer != null) {
2022-10-01 21:39:36 +00:00
services.calibre-web = {
enable = true;
openFirewall = true;
options = {
reverseProxyAuth.enable = false;
enableBookConversion = true;
enableBookUploading = true;
2022-10-01 21:39:36 +00:00
};
};
2022-12-21 21:18:03 +00:00
caddy.routes = [{
match = [{ host = [ config.bookServer ]; }];
handle = [{
handler = "reverse_proxy";
upstreams = [{ dial = "localhost:8083"; }];
headers.request.add."X-Script-Name" = [ "/calibre-web" ];
2022-10-02 15:24:25 +00:00
}];
}];
2022-10-02 14:48:51 +00:00
2022-10-16 03:47:21 +00:00
# Run a backup on a schedule
systemd.timers.calibre-backup = {
timerConfig = {
OnCalendar = "*-*-* 00:00:00"; # Once per day
Unit = "calibre-backup.service";
};
wantedBy = [ "timers.target" ];
};
# Backup Calibre data to object storage
systemd.services.calibre-backup =
let libraryPath = "/var/lib/calibre-web"; # Default location
in {
description = "Backup Calibre data";
2022-12-22 00:31:25 +00:00
environment.AWS_ACCESS_KEY_ID = config.backup.s3.accessKeyId;
2022-10-16 03:47:21 +00:00
serviceConfig = {
Type = "oneshot";
User = "calibre-web";
Group = "backup";
EnvironmentFile = config.secrets.backup.dest;
};
script = ''
${pkgs.awscli2}/bin/aws s3 sync \
${libraryPath}/ \
2022-12-22 00:31:25 +00:00
s3://${config.backup.s3.bucket}/calibre/ \
--endpoint-url=https://${config.backup.s3.endpoint}
2022-10-16 03:47:21 +00:00
'';
};
2022-10-01 21:39:36 +00:00
};
}