all messages for Guix-related lists mirrored at yhetil.org
 help / color / mirror / code / Atom feed
From: "Noé Lopez via Guix-patches via" <guix-patches@gnu.org>
To: 70363@debbugs.gnu.org
Subject: [bug#70363] Librespot package and service
Date: Sat, 13 Apr 2024 01:01:09 +0200	[thread overview]
Message-ID: <87pluu9oei.fsf@xn--no-cja.eu> (raw)

[-- Attachment #1: Type: text/plain, Size: 898 bytes --]


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


[-- Attachment #2: librespot.scm --]
[-- Type: text/plain, Size: 4192 bytes --]

(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))))

                 reply	other threads:[~2024-04-13 12:47 UTC|newest]

Thread overview: [no followups] expand[flat|nested]  mbox.gz  Atom feed

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=87pluu9oei.fsf@xn--no-cja.eu \
    --to=guix-patches@gnu.org \
    --cc=70363@debbugs.gnu.org \
    --cc=noe@xn--no-cja.eu \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this external index

	https://git.savannah.gnu.org/cgit/guix.git

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.