navidrome.nix 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. # Auto-generated by compose2nix.
  2. { pkgs, lib, config, ... }:
  3. {
  4. # Runtime
  5. virtualisation.podman = {
  6. enable = true;
  7. autoPrune.enable = true;
  8. dockerCompat = true;
  9. };
  10. # Enable container name DNS for all Podman networks.
  11. networking.firewall.interfaces = let
  12. matchAll = if !config.networking.nftables.enable then "podman+" else "podman*";
  13. in {
  14. "${matchAll}".allowedUDPPorts = [ 53 ];
  15. };
  16. virtualisation.oci-containers.backend = "podman";
  17. # Containers
  18. virtualisation.oci-containers.containers."navidrome-navidrome" = {
  19. image = "deluan/navidrome:latest";
  20. volumes = [
  21. "/opt/docker-containers/navidrome/data:/data:rw"
  22. "/opt/docker-containers/navidrome/music:/music:ro"
  23. ];
  24. ports = [
  25. "4533:4533/tcp"
  26. ];
  27. user = "1000:1000";
  28. log-driver = "journald";
  29. extraOptions = [
  30. "--network-alias=navidrome"
  31. "--network=navidrome_default"
  32. ];
  33. };
  34. systemd.services."podman-navidrome-navidrome" = {
  35. serviceConfig = {
  36. Restart = lib.mkOverride 90 "always";
  37. };
  38. after = [
  39. "podman-network-navidrome_default.service"
  40. ];
  41. requires = [
  42. "podman-network-navidrome_default.service"
  43. ];
  44. partOf = [
  45. "podman-compose-navidrome-root.target"
  46. ];
  47. wantedBy = [
  48. "podman-compose-navidrome-root.target"
  49. ];
  50. };
  51. # Networks
  52. systemd.services."podman-network-navidrome_default" = {
  53. path = [ pkgs.podman ];
  54. serviceConfig = {
  55. Type = "oneshot";
  56. RemainAfterExit = true;
  57. ExecStop = "podman network rm -f navidrome_default";
  58. };
  59. script = ''
  60. podman network inspect navidrome_default || podman network create navidrome_default
  61. '';
  62. partOf = [ "podman-compose-navidrome-root.target" ];
  63. wantedBy = [ "podman-compose-navidrome-root.target" ];
  64. };
  65. # Root service
  66. # When started, this will automatically create all resources and start
  67. # the containers. When stopped, this will teardown all resources.
  68. systemd.targets."podman-compose-navidrome-root" = {
  69. unitConfig = {
  70. Description = "Root target generated by compose2nix.";
  71. };
  72. wantedBy = [ "multi-user.target" ];
  73. };
  74. }