GNU bug report logs - #70363
Librespot package and service

Previous Next

Package: guix-patches;

Reported by: Noé Lopez <noe <at> xn--no-cja.eu>

Date: Sat, 13 Apr 2024 07:14:03 UTC

Severity: normal

To reply to this bug, email your comments to 70363 AT debbugs.gnu.org.

Toggle the display of automated, internal messages from the tracker.

View this report as an mbox folder, status mbox, maintainer mbox


Report forwarded to guix-patches <at> gnu.org:
bug#70363; Package guix-patches. (Sat, 13 Apr 2024 07:14:03 GMT) Full text and rfc822 format available.

Acknowledgement sent to Noé Lopez <noe <at> xn--no-cja.eu>:
New bug report received and forwarded. Copy sent to guix-patches <at> gnu.org. (Sat, 13 Apr 2024 07:14:04 GMT) Full text and rfc822 format available.

Message #5 received at submit <at> debbugs.gnu.org (full text, mbox):

From: Noé Lopez <noe <at> xn--no-cja.eu>
To: guix-patches <at> gnu.org
Subject: Librespot package and service
Date: Sat, 13 Apr 2024 01:01:09 +0200
[Message part 1 (text/plain, inline)]
Hi,

I've started writing a package for librespot, a spotify client similar
to spotifyd which is already packaged. I've gotten the package to build
and work, but I also wanted a home service to run it automatically with
shepherd.

This is my first time making a home service, can someone review my code
to make sure it follows good practices ? I would love to get feedback on
this and then submit it as a patch. Thanks in advance.

The usage for the home service is as follows:
   (service home-librespot-service-type
	    (for-home
	     (librespot-configuration
	      (username "...")
	      (password "..."))))

P.S. I'm moderately sure that the spotifyd package is using
pulseaudio as a dependency incorrectly, from my understanding spotifyd
uses exclusively ALSA, unless the pulseaudio backend is selected but
that's very optional.

Thanks in advance,
Noé Lopez

[librespot.scm (text/plain, inline)]
(define-module (gnu packages librespot)
  #:use-module (gnu services)
  #:use-module (gnu services shepherd)
  #:use-module ((guix licenses) #:prefix license:)
  #:use-module (guix packages)
  #:use-module (guix download)
  #:use-module (gnu packages crates-io)
  #:use-module (gnu packages crates-web)
  #:use-module (gnu packages crates-crypto)
  #:use-module (gnu packages pkg-config)
  #:use-module (gnu packages linux)
  #:use-module (guix records)
  #:use-module (guix build-system cargo)
  #:use-module (gnu home services)
  #:use-module (guix gexp)
  #:use-module (srfi srfi-9)
  #:export (librespot-configuration
            librespot-configuration?
	    librespot-service-type
	    home-librespot-service-type))

(define-public rust-librespot-0.4
  (package
    (name "rust-librespot")
    (version "0.4.2")
    (source
     (origin
       (method url-fetch)
       (uri (crate-uri "librespot" version))
       (file-name (string-append name "-" version ".tar.gz"))
       (sha256
        (base32 "0i2aisbw9ngp51d2sd13wvmjc94qfs2pza54hj0qz5j8xx99jk7a"))))
    (build-system cargo-build-system)
    (native-inputs (list pkg-config))
    (inputs (list alsa-lib))
    (arguments
     `(#:cargo-inputs (("rust-base64" ,rust-base64-0.13)
                       ("rust-env-logger" ,rust-env-logger-0.9)
                       ("rust-futures-util" ,rust-futures-util-0.3)
                       ("rust-getopts" ,rust-getopts-0.2)
                       ("rust-hex" ,rust-hex-0.4)
                       ("rust-hyper" ,rust-hyper-0.14)
                       ("rust-librespot-audio" ,rust-librespot-audio-0.4)
                       ("rust-librespot-connect" ,rust-librespot-connect-0.4)
                       ("rust-librespot-core" ,rust-librespot-core-0.4)
                       ("rust-librespot-discovery" ,rust-librespot-discovery-0.4)
                       ("rust-librespot-metadata" ,rust-librespot-metadata-0.4)
                       ("rust-librespot-playback" ,rust-librespot-playback-0.4)
                       ("rust-librespot-protocol" ,rust-librespot-protocol-0.4)
                       ("rust-log" ,rust-log-0.4)
                       ("rust-rpassword" ,rust-rpassword-6)
                       ("rust-sha-1" ,rust-sha-1-0.9)
                       ("rust-thiserror" ,rust-thiserror-1)
                       ("rust-tokio" ,rust-tokio-1)
                       ("rust-url" ,rust-url-2))))
    (home-page "https://github.com/librespot-org/librespot")
    (synopsis
     "Open source client library for Spotify, with support for Spotify Connect")
    (description
     "Librespot is a daemon that connects to the Spotify music and can
be controlled by clients that use the Spotify Connect protocel, which
includes the official Spotify mobile apps.")
    (license license:expat)))

(define-record-type* <librespot-configuration>
  librespot-configuration make-librespot-configuration
  librespot-configuration?
  (librespot librespot-configuration-librespot ;file-like
	     (default rust-librespot-0.4))
  (username librespot-configuration-username) ;string
  (password librespot-configuration-password) ;string
  (arguments librespot-configuration-arguments ;list of strings
	     (default '())))

(define librespot-shepherd-service
  (match-record-lambda <librespot-configuration>
      (librespot username password arguments)
    (list
     (shepherd-service
      (provision '(librespot))
      (documentation "Run librespot.")
      (requirement '())
      (start #~(make-forkexec-constructor
		(cons (string-append #$librespot "/bin/librespot") '#$arguments)
		#:environment-variables
		(append (list
			 (string-append "LIBRESPOT_USERNAME=" #$username)
			 (string-append "LIBRESPOT_PASSWORD=" #$password))
			 (environ))))
      (respawn? #f)
      (stop #~(make-kill-destructor))))))

(define librespot-service-type
  (service-type
   (name 'librespot)
   (extensions (list (service-extension shepherd-root-service-type
                                        librespot-shepherd-service)))
   (description "Run librespot. A spotify client.")))

(define home-librespot-service-type
  (service-type
   (inherit (system->home-service-type librespot-service-type))))

This bug report was last modified 21 days ago.

Previous Next


GNU bug tracking system
Copyright (C) 1999 Darren O. Benham, 1997,2003 nCipher Corporation Ltd, 1994-97 Ian Jackson.