{ config, lib, pkgs, ... }: let # Custom function to create the Gerbera service mkGerberaService = name: cfg: { Unit = { Description = "Gerbera Media Server"; After = ["network.target"]; Wants = ["network.target"]; }; Install = { WantedBy = ["default.target"]; }; Service = { User = cfg.user; Group = cfg.group; ExecStart = "${pkgs.gerbera}/bin/gerbera -c ${cfg.configFile}"; Restart = "on-failure"; }; }; in { # Define the systemd service for Gerbera systemd.user.services.gerbera = mkGerberaService "gerbera" { user = "zack"; # Run the service as user Zack group = "users"; # Assuming 'users' is the desired group configFile = "/home/zack/.config/gerbera/config.xml"; # Path to Gerbera's configuration file }; xdg.configFile."gerbera/config.xml" = { text = '' Gerbera uuid:0a6ae022-d37b-4a24-934c-44a082ef777d /home/zack/ /nix/store/m6zb4pjvkkzm54qzfpa5zvfjgw39vw6q-gerbera-1.12.1/share/gerbera/web 180 gerbera.db upnp:class derivedfrom "object.item" and last_updated > "@last7" upnp:class derivedfrom "object.item" and last_modified > "@last7" * video /nix/store/m6zb4pjvkkzm54qzfpa5zvfjgw39vw6q-gerbera-1.12.1/share/gerbera/js/common.js /nix/store/m6zb4pjvkkzm54qzfpa5zvfjgw39vw6q-gerbera-1.12.1/share/gerbera/js/playlists.js /nix/store/m6zb4pjvkkzm54qzfpa5zvfjgw39vw6q-gerbera-1.12.1/share/gerbera/js/metadata.js /nix/store/m6zb4pjvkkzm54qzfpa5zvfjgw39vw6q-gerbera-1.12.1/share/gerbera/js/import.js audio/mpeg no yes no video/mpeg yes yes yes ''; }; # Enable the service to start automatically systemd.user.startServices = true; }