[PATCH] home: services: Add home-beets-service-type.

  • Done
  • quality assurance status badge
Details
2 participants
  • Ludovic Courtès
  • Fabio Natali
Owner
unassigned
Submitted by
Fabio Natali
Severity
normal

Debbugs page

Fabio Natali wrote 7 months ago
(address . guix-patches@gnu.org)(name . Fabio Natali)(address . me@fabionatali.com)
e1d587225dc40d58956885b4903bd8e34c2a0baf.1723154455.git.me@fabionatali.com
* gnu/home/services/music.scm: New file.
* gnu/local.mk: Add this.
* doc/guix.texi: Document this.

Change-Id: Idc23a68276cb3fb07733bb38bc38b1c5a63c1d6a
---
Dear All,

Anyone thinking it might be worth to have a Guix Home service for Beets?

Beets⁰ is a command-line music file and metadata manager. Beets requires a YAML
configuration file to define various aspects of its
behaviour. 'home-beets-service-type' is a Guix Home service that can be used to
create Beets' configuration file.

Any feedback welcome!

Thanks, cheers, Fabio.




doc/guix.texi | 33 +++++++++++++++++++
gnu/home/services/music.scm | 63 +++++++++++++++++++++++++++++++++++++
gnu/local.mk | 2 ++
3 files changed, 98 insertions(+)
create mode 100644 gnu/home/services/music.scm

Toggle diff (144 lines)
diff --git a/doc/guix.texi b/doc/guix.texi
index b7eb8fd346..68d38005a2 100644
--- a/doc/guix.texi
+++ b/doc/guix.texi
@@ -129,6 +129,7 @@
Copyright @copyright{} 2024 Richard Sent@*
Copyright @copyright{} 2024 Dariqq@*
Copyright @copyright{} 2024 Denis 'GNUtoo' Carikli@*
+Copyright @copyright{} 2024 Fabio Natali@*
Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.3 or
@@ -47092,6 +47093,38 @@ Miscellaneous Home Services
This section lists Home services that lack a better place.
+@subsubheading Beets Service
+
+@cindex Beets service, for Home
+The @code{(gnu home services music)} module provides the following
+service:
+
+@defvar home-beets-service-type
+@uref{https://beets.io, Beets} is a music file and metadata manager
+that can be used via its command-line interface, @command{beet}. Beets
+requires a YAML configuration file and this Guix Home service is to
+create such file.
+@end defvar
+
+The service can be used as follows:
+
+@lisp
+(service home-beets-service-type
+ (home-beets-configuration (directory "/home/alice/music")))
+@end lisp
+
+Additional options can be specified via the service wild-card field
+@code{extra-options}:
+
+@lisp
+(service home-beets-service-type
+ (home-beets-configuration
+ (directory "/home/alice/music")
+ (extra-options '("
+import:
+ move: yes"))))
+@end lisp
+
@subsubheading Dictionary Service
@cindex dictionary service, for Home
diff --git a/gnu/home/services/music.scm b/gnu/home/services/music.scm
new file mode 100644
index 0000000000..3813ea230e
--- /dev/null
+++ b/gnu/home/services/music.scm
@@ -0,0 +1,63 @@
+;;; GNU Guix --- Functional package management for GNU
+;;; Copyright © 2024 Fabio Natali <me@fabionatali.com>
+;;;
+;;; This file is part of GNU Guix.
+;;;
+;;; GNU Guix is free software; you can redistribute it and/or modify it
+;;; under the terms of the GNU General Public License as published by
+;;; the Free Software Foundation; either version 3 of the License, or (at
+;;; your option) any later version.
+;;;
+;;; GNU Guix is distributed in the hope that it will be useful, but
+;;; WITHOUT ANY WARRANTY; without even the implied warranty of
+;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+;;; GNU General Public License for more details.
+;;;
+;;; You should have received a copy of the GNU General Public License
+;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>.
+
+(define-module (gnu home services music)
+ #:use-module (guix gexp)
+ #:use-module (guix records)
+ #:use-module (gnu home services)
+ #:use-module (gnu packages music)
+ #:use-module (gnu packages video)
+ #:export (home-beets-configuration
+ home-beets-service-type))
+
+;;; Commentary:
+;;;
+;;; A Guix Home service to configure Beets, a music file and metadata manager.
+;;;
+;;; Code:
+
+(define-record-type* <home-beets-configuration>
+ home-beets-configuration make-home-beets-configuration
+ home-beets-configuration?
+ (package home-beets-package (default beets))
+ (directory home-beets-directory (default #f))
+ (extra-options home-beets-extra-options (default '()))
+ (extra-packages home-beets-extra-packages (default (list ffmpeg))))
+
+(define (home-beets-configuration->file config)
+ "Return the Beets configuration file corresponding to CONFIG."
+ (match-record config <home-beets-configuration>
+ (directory extra-options)
+ (plain-file "beets.yaml"
+ (string-append "directory: " directory "\n"
+ (string-join extra-options "\n" 'suffix)))))
+
+(define home-beets-service-type
+ (service-type
+ (name 'home-beets)
+ (extensions
+ (list
+ (service-extension home-profile-service-type
+ (lambda (config)
+ (cons* (home-beets-package config)
+ (home-beets-extra-packages config))))
+ (service-extension home-xdg-configuration-files-service-type
+ (lambda (config)
+ (list `("beets/config.yaml"
+ ,(home-beets-configuration->file config)))))))
+ (description "Configure Beets, a music file and metadata manager.")))
diff --git a/gnu/local.mk b/gnu/local.mk
index 4d7b17e4b4..efdf7267fd 100644
--- a/gnu/local.mk
+++ b/gnu/local.mk
@@ -66,6 +66,7 @@
# Copyright © 2023 Troy Figiel <troy@troyfigiel.com>
# Copyright © 2024 David Elsing <david.elsing@posteo.net>
# Copyright © 2024 Ashish SHUKLA <ashish.is@lostca.se>
+# Copyright © 2024 Fabio Natali <me@fabionatali.com>
#
# This file is part of GNU Guix.
#
@@ -107,6 +108,7 @@ GNU_SYSTEM_MODULES = \
%D%/home/services/mail.scm \
%D%/home/services/media.scm \
%D%/home/services/messaging.scm \
+ %D%/home/services/music.scm \
%D%/home/services/pm.scm \
%D%/home/services/shells.scm \
%D%/home/services/shepherd.scm \

base-commit: 9c6353c5568a56620af43c2213a9f1cbdc2b4adf
--
2.45.2
Ludovic Courtès wrote 6 months ago
(name . Fabio Natali)(address . me@fabionatali.com)
87cylslo7k.fsf@gnu.org
Hi Fabio,

Fabio Natali <me@fabionatali.com> skribis:

Toggle quote (15 lines)
> * gnu/home/services/music.scm: New file.
> * gnu/local.mk: Add this.
> * doc/guix.texi: Document this.
>
> Change-Id: Idc23a68276cb3fb07733bb38bc38b1c5a63c1d6a
> ---
> Dear All,
>
> Anyone thinking it might be worth to have a Guix Home service for Beets?
>
> Beets⁰ is a command-line music file and metadata manager. Beets requires a YAML
> configuration file to define various aspects of its
> behaviour. 'home-beets-service-type' is a Guix Home service that can be used to
> create Beets' configuration file.

I don’t use Beets so far but it seems like a good idea to me.

Applied, thanks! :-)

Ludo’.
Closed
?
Your comment

This issue is archived.

To comment on this conversation send an email to 72533@debbugs.gnu.org

To respond to this issue using the mumi CLI, first switch to it
mumi current 72533
Then, you may apply the latest patchset in this issue (with sign off)
mumi am -- -s
Or, compose a reply to this issue
mumi compose
Or, send patches to this issue
mumi send-email *.patch
You may also tag this issue. See list of standard tags. For example, to set the confirmed and easy tags
mumi command -t +confirmed -t +easy
Or, remove the moreinfo tag and set the help tag
mumi command -t -moreinfo -t +help