1
0

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. ø
  18. # Containers
  19. virtualisation.oci-containers.containers."navidrome-navidrome" = {
  20. image = "deluan/navidrome:latest";
  21. volumes = [
  22. "/opt/docker-containers/navidrome/data:/data:rw"
  23. "/opt/docker-containers/navidrome/music:/music:ro"
  24. ];
  25. ports = [
  26. "4533:4533/tcp"
  27. ];
  28. user = "1000:1000";
  29. log-driver = "journald";
  30. extraOptions = [
  31. "--network-alias=navidrome"
  32. "--network=navidrome_default"
  33. ];
  34. };
  35. systemd.services."podman-navidrome-navidrome" = {
  36. serviceConfig = {
  37. Restart = lib.mkOverride 90 "always";
  38. };
  39. after = [
  40. "podman-network-navidrome_default.service"
  41. ];
  42. requires = [
  43. "podman-network-navidrome_default.service"
  44. ];
  45. partOf = [
  46. "podman-compose-navidrome-root.target"
  47. ];
  48. wantedBy = [
  49. "podman-compose-navidrome-root.target"
  50. ];
  51. };
  52. # Networks
  53. systemd.services."podman-network-navidrome_default" = {
  54. path = [ pkgs.podman ];
  55. serviceConfig = {
  56. Type = "oneshot";
  57. RemainAfterExit = true;
  58. ExecStop = "podman network rm -f navidrome_default";
  59. };
  60. script = ''
  61. podman network inspect navidrome_default || podman network create navidrome_default
  62. '';
  63. partOf = [ "podman-compose-navidrome-root.target" ];
  64. wantedBy = [ "podman-compose-navidrome-root.target" ];
  65. };
  66. # Root service
  67. # When started, this will automatically create all resources and start
  68. # the containers. When stopped, this will teardown all resources.
  69. systemd.targets."podman-compose-navidrome-root" = {
  70. unitConfig = {
  71. Description = "Root target generated by compose2nix.";
  72. };
  73. wantedBy = [ "multi-user.target" ];
  74. };
  75. }