diff --git a/nixos/modules/services/audio/mopidy.nix b/nixos/modules/services/audio/mopidy.nix index 3e0241c10b81..8ed701f9c9e4 100644 --- a/nixos/modules/services/audio/mopidy.nix +++ b/nixos/modules/services/audio/mopidy.nix @@ -1,24 +1,20 @@ { config, lib, pkgs, ... }: - -with pkgs; -with lib; - let uid = config.ids.uids.mopidy; gid = config.ids.gids.mopidy; cfg = config.services.mopidy; - mopidyConf = writeText "mopidy.conf" cfg.configuration; + mopidyConf = pkgs.writeText "mopidy.conf" cfg.configuration; - mopidyEnv = buildEnv { - name = "mopidy-with-extensions-${mopidy.version}"; + mopidyEnv = pkgs.buildEnv { + name = "mopidy-with-extensions-${pkgs.mopidy.version}"; ignoreCollisions = true; - paths = closePropagation cfg.extensionPackages; - pathsToLink = [ "/${mopidyPackages.python.sitePackages}" ]; - nativeBuildInputs = [ makeWrapper ]; + paths = lib.closePropagation cfg.extensionPackages; + pathsToLink = [ "/${pkgs.mopidyPackages.python.sitePackages}" ]; + nativeBuildInputs = [ pkgs.makeWrapper ]; postBuild = '' - makeWrapper ${mopidy}/bin/mopidy $out/bin/mopidy \ - --prefix PYTHONPATH : $out/${mopidyPackages.python.sitePackages} + makeWrapper ${lib.getExe pkgs.mopidy} $out/bin/mopidy \ + --prefix PYTHONPATH : $out/${pkgs.mopidyPackages.python.sitePackages} ''; }; in { @@ -27,49 +23,47 @@ in { services.mopidy = { - enable = mkEnableOption "Mopidy, a music player daemon"; + enable = lib.mkEnableOption "Mopidy, a music player daemon"; - dataDir = mkOption { + dataDir = lib.mkOption { default = "/var/lib/mopidy"; - type = types.str; + type = lib.types.str; description = '' The directory where Mopidy stores its state. ''; }; - extensionPackages = mkOption { + extensionPackages = lib.mkOption { default = []; - type = types.listOf types.package; - example = literalExpression "[ pkgs.mopidy-spotify ]"; + type = lib.types.listOf lib.types.package; + example = lib.literalExpression "[ pkgs.mopidy-spotify ]"; description = '' Mopidy extensions that should be loaded by the service. ''; }; - configuration = mkOption { + configuration = lib.mkOption { default = ""; - type = types.lines; + type = lib.types.lines; description = '' The configuration that Mopidy should use. ''; }; - extraConfigFiles = mkOption { + extraConfigFiles = lib.mkOption { default = []; - type = types.listOf types.str; + type = lib.types.listOf lib.types.str; description = '' Extra config file read by Mopidy when the service starts. Later files in the list overrides earlier configuration. ''; }; - }; - }; ###### implementation - config = mkIf cfg.enable { + config = lib.mkIf cfg.enable { systemd.tmpfiles.settings."10-mopidy".${cfg.dataDir}.d = { user = "mopidy"; @@ -82,7 +76,7 @@ in { wants = [ "network-online.target" ]; description = "mopidy music player daemon"; serviceConfig = { - ExecStart = "${mopidyEnv}/bin/mopidy --config ${concatStringsSep ":" ([mopidyConf] ++ cfg.extraConfigFiles)}"; + ExecStart = "${mopidyEnv}/bin/mopidy --config ${lib.concatStringsSep ":" ([mopidyConf] ++ cfg.extraConfigFiles)}"; User = "mopidy"; }; }; @@ -90,7 +84,7 @@ in { systemd.services.mopidy-scan = { description = "mopidy local files scanner"; serviceConfig = { - ExecStart = "${mopidyEnv}/bin/mopidy --config ${concatStringsSep ":" ([mopidyConf] ++ cfg.extraConfigFiles)} local scan"; + ExecStart = "${mopidyEnv}/bin/mopidy --config ${lib.concatStringsSep ":" ([mopidyConf] ++ cfg.extraConfigFiles)} local scan"; User = "mopidy"; Type = "oneshot"; }; @@ -105,7 +99,5 @@ in { }; users.groups.mopidy.gid = gid; - }; - } diff --git a/nixos/tests/all-tests.nix b/nixos/tests/all-tests.nix index 2677d1c431b4..6f941cc254ad 100644 --- a/nixos/tests/all-tests.nix +++ b/nixos/tests/all-tests.nix @@ -619,6 +619,7 @@ in { mongodb = handleTest ./mongodb.nix {}; moodle = handleTest ./moodle.nix {}; moonraker = handleTest ./moonraker.nix {}; + mopidy = handleTest ./mopidy.nix {}; morph-browser = handleTest ./morph-browser.nix { }; morty = handleTest ./morty.nix {}; mosquitto = handleTest ./mosquitto.nix {}; diff --git a/nixos/tests/mopidy.nix b/nixos/tests/mopidy.nix new file mode 100644 index 000000000000..e8447af8c75a --- /dev/null +++ b/nixos/tests/mopidy.nix @@ -0,0 +1,17 @@ +import ./make-test-python.nix ( + { pkgs, ... }: + { + name = "mopidy"; + + nodes.machine = + { ... }: + { + services.mopidy.enable = true; + }; + + testScript = '' + machine.wait_for_unit("mopidy") + machine.wait_for_open_port(6680) + ''; + } +) diff --git a/pkgs/applications/audio/mopidy/mopidy.nix b/pkgs/applications/audio/mopidy/mopidy.nix index 579cbbf98dc0..4771ade230c9 100644 --- a/pkgs/applications/audio/mopidy/mopidy.nix +++ b/pkgs/applications/audio/mopidy/mopidy.nix @@ -8,6 +8,7 @@ glib-networking, gobject-introspection, pipewire, + nixosTests, }: pythonPackages.buildPythonApplication rec { @@ -34,9 +35,7 @@ pythonPackages.buildPythonApplication rec { ]; propagatedBuildInputs = - [ - gobject-introspection - ] + [ gobject-introspection ] ++ ( with pythonPackages; [ @@ -50,13 +49,15 @@ pythonPackages.buildPythonApplication rec { ++ lib.optional (!stdenv.hostPlatform.isDarwin) dbus-python ); - propagatedNativeBuildInputs = [ - gobject-introspection - ]; + propagatedNativeBuildInputs = [ gobject-introspection ]; # There are no tests doCheck = false; + passthru.tests = { + inherit (nixosTests) mopidy; + }; + meta = with lib; { homepage = "https://www.mopidy.com/"; description = "Extensible music server that plays music from local disk, Spotify, SoundCloud, and more";