GNU bug report logs - #52489
[PATCH v2] services: bluetooth: Add missing config parameters

Please note: This is a static page, with minimal formatting, updated once a day.
Click here to see this page with the latest information and nicer formatting.

Package: guix-patches; Reported by: Demis Balbach <db@HIDDEN>; Keywords: patch; merged with #52470, #52575; dated Tue, 14 Dec 2021 20:48:02 UTC; Maintainer for guix-patches is guix-patches@HIDDEN.
Merged 52470 52489 52575. Request was from Liliana Marie Prikler <liliana.prikler@HIDDEN> to control <at> debbugs.gnu.org. Full text available.

Message received at 52489 <at> debbugs.gnu.org:


Received: (at 52489) by debbugs.gnu.org; 17 Dec 2021 13:03:47 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Fri Dec 17 08:03:47 2021
Received: from localhost ([127.0.0.1]:38230 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1myCtl-000311-Fv
	for submit <at> debbugs.gnu.org; Fri, 17 Dec 2021 08:03:47 -0500
Received: from jpoiret.xyz ([206.189.101.64]:55564)
 by debbugs.gnu.org with esmtp (Exim 4.84_2)
 (envelope-from <dev@HIDDEN>) id 1myCti-00030q-1p
 for 52489 <at> debbugs.gnu.org; Fri, 17 Dec 2021 08:03:44 -0500
Received: from authenticated-user (jpoiret.xyz [206.189.101.64])
 by jpoiret.xyz (Postfix) with ESMTPA id 9FF47184F5C;
 Fri, 17 Dec 2021 13:03:39 +0000 (UTC)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=jpoiret.xyz; s=dkim;
 t=1639746220;
 h=from:from:reply-to:subject:subject:date:date:message-id:message-id:
 to:to:cc:cc:cc:mime-version:mime-version:content-type:content-type:
 in-reply-to:in-reply-to:references:references;
 bh=BHNR9NSb6DHj60feGZvODdQkWaRu633bi+fmq+h8Lpo=;
 b=GJ1GHTrgINVRdr3xX283TS0eHxATzemSxNkNHXUJNoNwPpbcFK2+oBC6LRqdsklpcHB7J9
 TObjeAJV0t6i8n9PuurTopWBI9kBpDsAxSFYq1T0v7TEJoQ9OQwE7UwBaKkhoR9BuhAWQy
 fmw3ZVt2nMSuLPXHuT8sP5cBP8Rqkul+Sgfd4YEBxxwGXuJtJQOPdt3ikw7Ku5vJnS901/
 3lWYzD8rOn+IJzf60qjXZCw6pr3AlOgA+4EaNDFVCjlwzbzU5g7LPAzoluq/zwQonDZbTn
 UjA+D3KQUA3wrB9+dcEM0mKroCAG01BpozBQ4VZPDv/iq7f9zDv42DXtM48XNg==
From: Josselin Poiret <dev@HIDDEN>
To: Demis Balbach <db@HIDDEN>, 52489 <at> debbugs.gnu.org
Subject: Re: [bug#52489] [PATCH v2] services: bluetooth: Add missing config
 parameters
In-Reply-To: <20211214204703.10152-1-db@HIDDEN>
References: <20211214204703.10152-1-db@HIDDEN>
Date: Fri, 17 Dec 2021 14:03:39 +0100
Message-ID: <87mtkzxu1g.fsf@HIDDEN>
MIME-Version: 1.0
Content-Type: text/plain
X-Spamd-Bar: /
Authentication-Results: jpoiret.xyz;
 auth=pass smtp.auth=jpoiret@HIDDEN smtp.mailfrom=dev@HIDDEN
X-Spam-Score: 2.5 (++)
X-Spam-Report: Spam detection software, running on the system "debbugs.gnu.org",
 has NOT identified this incoming email as spam.  The original
 message has been attached to this so you can view it or label
 similar future email.  If you have any questions, see
 the administrator of that system for details.
 Content preview:  Hello Demis,
 Thanks again for the (tedious) work! Before getting
 into the nitty gritty, your editor seems to have modified the indentation
 of lines unrelated to bluetooth, inside the UPower code,
 and inside the bluetoothd service definition as well. [...] 
 Content analysis details:   (2.5 points, 10.0 required)
 pts rule name              description
 ---- ---------------------- --------------------------------------------------
 -0.0 SPF_PASS               SPF: sender matches SPF record
 2.0 PDS_OTHER_BAD_TLD      Untrustworthy TLDs
 [URI: jpoiret.xyz (xyz)]
 -0.0 SPF_HELO_PASS          SPF: HELO matches SPF record
 0.5 FROM_SUSPICIOUS_NTLD   From abused NTLD
X-Debbugs-Envelope-To: 52489
Cc: Demis Balbach <db@HIDDEN>, dev@HIDDEN
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: 2.5 (++)
X-Spam-Report: Spam detection software, running on the system "debbugs.gnu.org",
 has NOT identified this incoming email as spam.  The original
 message has been attached to this so you can view it or label
 similar future email.  If you have any questions, see
 the administrator of that system for details.
 
 Content preview:  Hello Demis, Thanks again for the (tedious) work! Before getting
    into the nitty gritty, your editor seems to have modified the indentation
    of lines unrelated to bluetooth, inside the UPower code, and inside the bluetoothd
    service definition as well. [...] 
 
 Content analysis details:   (2.5 points, 10.0 required)
 
  pts rule name              description
 ---- ---------------------- --------------------------------------------------
 -0.0 SPF_PASS               SPF: sender matches SPF record
  2.0 PDS_OTHER_BAD_TLD      Untrustworthy TLDs
                             [URI: minikn.xyz (xyz)]
 -0.0 SPF_HELO_PASS          SPF: HELO matches SPF record
  0.5 FROM_SUSPICIOUS_NTLD   From abused NTLD
  1.0 BULK_RE_SUSP_NTLD      Precedence bulk and RE: from a suspicious TLD
 -1.0 MAILING_LIST_MULTI     Multiple indicators imply a widely-seen list
                             manager

Hello Demis,

Thanks again for the (tedious) work!

Before getting into the nitty gritty, your editor seems to have modified
the indentation of lines unrelated to bluetooth, inside the UPower code,
and inside the bluetoothd service definition as well.  I suggest briefly
skimming through diffs when committing to see if that is the case.

Demis Balbach <db@HIDDEN> writes:

> ---
>  doc/guix.texi            | 437 ++++++++++++++++++++++++++++++++++++++-
>  gnu/services/desktop.scm | 389 ++++++++++++++++++++++++++++++++--
>  2 files changed, 807 insertions(+), 19 deletions(-)
>
> diff --git a/doc/guix.texi b/doc/guix.texi
> index 757e44398c..14a2f9e590 100644
> --- a/doc/guix.texi
> +++ b/doc/guix.texi
> @@ -20528,6 +20528,442 @@ bluetooth keyboard or mouse.
>  Users need to be in the @code{lp} group to access the D-Bus service.
>  @end deffn
>  
> +@deffn {Scheme Variable} bluetooth-service-type
> +This is the type for the @uref{https://bluez.org/, Linux Bluetooth Protocol
> +Stack} (BlueZ) system, which generates the @file{/etc/bluetooth/main.conf}
> +configuration file.  The value for this type is a @command{bluetooth-configuration}
> +record as in this example:
> +
> +@lisp
> +(service bluetooth-service-type)
> +@end lisp
> +
> +See below for details about @code{bluetooth-configuration}.
> +@end deffn
> +
> +@deftp {Data Type} bluetooth-configuration
> +Data type representing the configuration for @code{bluetooth-service}.
> +
> +@table @asis
> +@item @code{bluez} (default: @code{bluez})
> +@code{bluez} package to use.
> +
> +@item @code{name} (default: @code{"BlueZ"})
> +Default adapter name.
> +
> +@item @code{class} (default: @code{"0x000000"})
> +Default device class. Only the major and minor device class bits are considered.
> +
> +@item @code{discoverable-timeout} (default: @code{180})
> +How long to stay in discoverable mode before going back to non-discoverable the
> +value is in seconds.

A period is missing: "to non-discoverable.  The value is in seconds."

> +@item @code{always-pairable?} (default: @code{#f})
> +Always allow pairing even if there are no agent registered.

s/agent/agents/

> +@item @code{pairable-timeout} (default: @code{0})
> +How long to stay in pairable mode before going back to non-discoverable. The
> +value is in seconds.
> +
> +@item @code{device-id} (default: @code{#f})
> +Use vendor id source (assigner), vendor, product and version information for
> +DID profile support. The values are separated by ":" and @var{assigner}, @var{VID},
> +@var{PID} and @var{version}.
> +
> +Possible values are:
> +
> +@itemize @bullet
> +@item
> +@code{#f} to disable it,
> +
> +@item
> +@code{"assigner:1234:5678:abcd"}, where @var{assigner} is either @code{usb} (default)
> +or @code{bluetooth}.
> +
> +@end itemize
> +
> +@item @code{reverse-service-discovery?} (default: @code{#t})
> +Do reverse service discovery for previously unknown devices that connect to
> +us. For BR/EDR this option is really only needed for qualification since the
> +BITE tester doesn't like us doing reverse SDP for some test cases, for LE
> +this disables the GATT client functionally so it can be used in system which
> +can only operate as peripheral.
> +
> +@item @code{name-resolving?} (default: @code{#t})
> +Enable name resolving after inquiry. Set it to @code{#f} if you don't need
> +remote devices name and want shorter discovery cycle.
> +
> +@item @code{debug-keys?} (default: @code{#f})
> +Enable runtime persistency of debug link keys. Default is false which makes
> +debug link keys valid only for the duration of the connection that they were
> +created for.
> +
> +@item @code{controller-mode} (default: @code{'dual})
> +Restricts all controllers to the specified transport. @code{'dual} means both
> +BR/EDR and LE are enabled (if supported by the hardware).
> +
> +Possible values are: 
> +
> +@itemize @bullet
> +@item
> +@code{'dual}
> +
> +@item
> +@code{'bredr}
> +
> +@item
> +@code{'le}
> +
> +@end itemize
> +
> +@item @code{multi-profile} (default: @code{'off})
> +nables Multi Profile Specification support. This allows to specify if system
> +supports only Multiple Profiles Single Device (MPSD) configuration or both
> +Multiple Profiles Single Device (MPSD) and Multiple Profiles Multiple Devices
> +(MPMD) configurations.

Missing capital E at the beginning of the sentence.

> +Possible values are:
> +
> +@itemize @bullet
> +@item
> +@code{'off}
> +
> +@item
> +@code{'single}
> +
> +@item
> +@code{'multiple}
> +
> +@end itemize
> +
> +@item @code{fast-connectable?} (default: @code{#f})
> +Permanently enables the Fast Connectable setting for adapters that support
> +it. When enabled other devices can connect faster to us, however the
> +tradeoff is increased power consumptions. This feature will fully work only
> +on kernel version 4.1 and newer.
> +
> +@item @code{privacy} (default: @code{'off})
> +Default privacy settings.
> +
> +@itemize @bullet
> +@item
> +@code{'off}: Disable local privacy
> +
> +@item
> +@code{'network/on}: A device will only accept advertising packets from peer
> +devices that contain private addresses. It may not be compatible with some
> +legacy devices since it requires the use of RPA(s) all the time
> +
> +@item
> +@code{'device}: A device in device privacy mode is only concerned about the
> +privacy of the device and will accept advertising packets from peer devices
> +that contain their Identity Address as well as ones that contain a private
> +address, even if the peer device has distributed its IRK in the past
> +
> +@end itemize
> +
> +and additionally, if @var{controller-mode} is set to @code{'dual}:
> +
> +@itemize @bullet
> +@item
> +@code{'limited-network}: Apply Limited Discoverable Mode to advertising, which
> +follows the same policy as to BR/EDR that publishes the identity address when
> +discoverable, and Network Privacy Mode for scanning
> +
> +@item
> +@code{'limited-device}: Apply Limited Discoverable Mode to advertising, which
> +follows the same policy as to BR/EDR that publishes the identity address when
> +discoverable, and Device Privacy Mode for scanning.
> +
> +@end itemize
> +
> +@item @code{just-works-repairing} (default: @code{'never})
> +Specify the policy to the JUST-WORKS repairing initiated by peer.
> +
> +Possible values:
> +@itemize @bullet
> +@item
> +@code{'never}
> +
> +@item
> +@code{'confirm}
> +
> +@item
> +@code{'always}
> +
> +@end itemize
> +
> +@item @code{temporary-timeout} (default: @code{30})
> +How long to keep temporary devices around. The value is in seconds. @code{0}
> +disables the timer completely.
> +
> +@item @code{refresh-discovery?} (default: @code{#t})
> +Enables the device to issue an SDP request to update known services when
> +profile is connected.
> +
> +@item @code{experimental} (default: @code{'false})
> +Enables experimental features and interfaces, alternatively a list of UUIDs
> +can be given.
> +
> +Possible values:
> +
> +@itemize @bullet
> +@item
> +@code{'true}
> +
> +@item
> +@code{'false}
> +
> +@item
> +@code{'d4992530-b9ec-469f-ab01-6c481c47da1c}: BlueZ Experimental Debug,
> +
> +@item
> +@code{'671b10b5-42c0-4696-9227-eb28d1b049d6}: BlueZ Experimental Simultaneous Central and Peripheral,
> +
> +@item
> +@code{'15c0a148-c273-11ea-b3de-0242ac130004}: BlueZ Experimental LL privacy,
> +
> +@item
> +@code{'330859bc-7506-492d-9370-9a6f0614037f}: BlueZ Experimental Bluetooth Quality Report,
> +
> +@item
> +@code{'a6695ace-ee7f-4fb9-881a-5fac66c629af}: BlueZ Experimental Offload Codecs.
> +@end itemize
> +
> +@item @code{remote-name-request-retry-delay} (default: @code{300})
> +The duration to avoid retrying to resolve a peer's name, if the previous
> +try failed.
> +
> +@item @code{page-scan-type} (default: @code{#f})
> +BR/EDR Page scan activity type.
> +
> +@item @code{page-scan-interval} (default: @code{#f})
> +BR/EDR Page scan activity interval.
> +
> +@item @code{page-scan-window} (default: @code{#f})
> +BR/EDR Page scan activity window.
> +
> +@item @code{inquiry-scan-type} (default: @code{#f})
> +BR/EDR Inquiry scan activity type.
> +
> +@item @code{inquiry-scan-interval} (default: @code{#f})
> +BR/EDR Inquiry scan activity interval.
> +
> +@item @code{inquiry-scan-window} (default: @code{#f})
> +BR/EDR Inquiry scan activity window.
> +
> +@item @code{link-supervision-timeout} (default: @code{#f})
> +BR/EDR Link supervision timeout.
> +
> +@item @code{page-timeout} (default: @code{#f})
> +BR/EDR Page timeout.
> +
> +@item @code{min-sniff-interval} (default: @code{#f})
> +BR/EDR minimum sniff interval.
> +
> +@item @code{max-sniff-interval} (default: @code{#f})
> +BR/EDR maximum sniff interval.
> +
> +@item @code{min-advertisement-interval} (default: @code{#f})
> +LE minimum advertisement interval (used for legacy advertisement only).
> +
> +@item @code{max-advertisement-interval} (default: @code{#f})
> +LE maximum advertisement interval (used for legacy advertisement only).
> +
> +@item @code{multi-advertisement-rotation-interval} (default: @code{#f})
> +LE multiple advertisement rotation interval.
> +
> +@item @code{scan-interval-auto-connect} (default: @code{#f})
> +LE scanning interval used for passive scanning supporting auto connect.
> +
> +@item @code{scan-window-auto-connect} (default: @code{#f})
> +LE scanning window used for passive scanning supporting auto connect.
> +
> +@item @code{scan-interval-suspend} (default: @code{#f})
> +LE scanning interval used for active scanning supporting wake from suspend.
> +
> +@item @code{scan-window-suspend} (default: @code{#f})
> +LE scanning window used for active scanning supporting wake from suspend.
> +
> +@item @code{scan-interval-discovery} (default: @code{#f})
> +LE scanning interval used for active scanning supporting discovery.
> +
> +@item @code{scan-window-discovery} (default: @code{#f})
> +LE scanning window used for active scanning supporting discovery.
> +
> +@item @code{scan-interval-adv-monitor} (default: @code{#f})
> +LE scanning interval used for passive scanning supporting the advertisement monitor APIs.
> +
> +@item @code{scan-window-adv-monitor} (default: @code{#f})
> +LE scanning window used for passive scanning supporting the advertisement monitor APIs.
> +
> +@item @code{scan-interval-connect} (default: @code{#f})
> +LE scanning interval used for connection establishment.
> +
> +@item @code{scan-window-connect} (default: @code{#f})
> +LE scanning window used for connection establishment.
> +
> +@item @code{min-connection-interval} (default: @code{#f})
> +LE default minimum connection interval. This value is superceeded by any specific
> +value provided via the Load Connection Parameters interface.
> +
> +@item @code{max-connection-interval} (default: @code{#f})
> +LE default maximum connection interval. This value is superceeded by any specific
> +value provided via the Load Connection Parameters interface.
> +
> +@item @code{connection-latency} (default: @code{#f})
> +LE default connection latency. This value is superceeded by any specific
> +value provided via the Load Connection Parameters interface.
> +
> +@item @code{connection-supervision-timeout} (default: @code{#f})
> +LE default connection supervision timeout. This value is superceeded by any specific
> +value provided via the Load Connection Parameters interface.
> +
> +@item @code{autoconnect-timeout} (default: @code{#f})
> +LE default autoconnect timeout. This value is superceeded by any specific
> +value provided via the Load Connection Parameters interface.
> +
> +@item @code{adv-mon-allowlist-scan-duration} (default: @code{300})
> +Allowlist scan duration during interleaving scan. Only used when scanning for ADV
> +monitors. The units are msec.
> +
> +@item @code{adv-mon-no-filter-scan-duration} (default: @code{500})
> +No filter scan duration during interleaving scan. Only used when scanning for ADV
> +monitors. The units are msec.
> +
> +@item @code{enable-adv-mon-interleave-scan} (default: @code{1})
> +Enable/Disable Advertisement Monitor interleave scan for power saving.
> +
> +Possible values are:
> +
> +@itemize @bullet
> +@item
> +@code{0}: disable
> +
> +@item
> +@code{1}: enabled.
> +@end itemize
> +
> +@item @code{cache} (default: @code{'always})
> +GATT attribute cache.
> +
> +Possible values are:
> +@itemize @bullet
> +@item
> +@code{'always}: Always cache attributes even for devices not paired, this is
> +recommended as it is best for interoperability, with more consistent
> +reconnection times and enables proper tracking of notifications for all
> +devices
> +
> +@item
> +@code{'yes}: Only cache attributes of paired devices
> +
> +@item
> +@code{'no}: Never cache attributes.
> +@end itemize
> +
> +@item @code{key-size} (default: @code{0})
> +Minimum required Encryption Key Size for accessing secured characteristics.
> +
> +Possible values are:
> +@itemize @bullet
> +@item
> +@code{0}: Don't care
> +
> +@item
> +@code{7-16}
> +@end itemize
> +
> +@item @code{exchange-mtu} (default: @code{517})
> +Exchange MTU size. Possible values are:
> +
> +@itemize @bullet
> +@item
> +@code{23-517}
> +@end itemize
> +
> +@item @code{att-channels} (default: @code{3})
> +Number of ATT channels. Possible values are:
> +
> +@itemize @bullet
> +@item
> +@code{1}: Disables EATT
> +
> +@item
> +@code{2-5}
> +@end itemize
> +
> +@item @code{session-mode} (default: @code{'basic})
> +AVDTP L2CAP signalling channel mode.
> +
> +Possible values are:
> +
> +@itemize @bullet
> +@item
> +@code{'basic}: Use L2CAP basic mode
> +
> +@item
> +@code{'ertm}: Use L2CAP enhanced retransmission mode.
> +@end itemize
> +
> +@item @code{stream-mode} (default: @code{'basic})
> +AVDTP L2CAP transport channel mode.
> +
> +Possible values are:
> +
> +@itemize @bullet
> +@item
> +@code{'basic}: Use L2CAP basic mode
> +
> +@item
> +@code{'streaming}: Use L2CAP streaming mode.
> +@end itemize
> +
> +@item @code{reconnect-uuids} (default: @code{'()})
> +The ReconnectUUIDs defines the set of remote services that should try
> +to be reconnected to in case of a link loss (link supervision
> +timeout). The policy plugin should contain a sane set of values by
> +default, but this list can be overridden here. By setting the list to
> +empty the reconnection feature gets disabled.
> +
> +@item @code{reconnect-attempts} (default: @code{7})
> +Defines the number of attempts to reconnect after a link lost. Setting
> +the value to 0 disables reconnecting feature.
> +
> +@item @code{reconnect-intervals} (default: @code{'(1 2 4 8 16 32 64)})
> +Defines a list of intervals in seconds to use in between attempts. If
> +the number of attempts defined in @var{reconnect-attempts} is bigger than
> +the list of intervals the last interval is repeated until the last attempt.
> +
> +@item @code{auto-enable?} (default: @code{#f})
> +Defines option to enable all controllers when they are found. This includes
> +adapters present on start as well as adapters that are plugged in later on.
> +
> +@item @code{resume-delay} (default: @code{2})
> +Audio devices that were disconnected due to suspend will be reconnected on
> +resume. @var{resume-delay} determines the delay between when the controller
> +resumes from suspend and a connection attempt is made. A longer delay is
> +better for better co-existence with Wi-Fi. The value is in seconds.
> +
> +@item @code{rssi-sampling-period} (default: @code{"0xFF"})
> +Default RSSI Sampling Period. This is used when a client registers an
> +advertisement monitor and leaves the RSSISamplingPeriod unset.
> +
> +Possible values are:
> +@itemize @bullet
> +@item
> +@code{"0x00"}: Report all advertisements
> +
> +@item
> +@code{"N = 0xXX"}: Report advertisements every N x 100 msec (range: 0x01 to 0xFE)
> +
> +@item
> +@code{"0xFF"}: Report only one advertisement per device during monitoring period.
> +@end itemize
> +
> +@end table
> +@end deftp
> +
>  @defvr {Scheme Variable} gnome-keyring-service-type
>  This is the type of the service that adds the
>  @uref{https://wiki.gnome.org/Projects/GnomeKeyring, GNOME Keyring}.  Its
> @@ -20562,7 +20998,6 @@ and ``passwd'' is with the value @code{passwd}.
>  @end table
>  @end deftp
>  
> -
>  @node Sound Services
>  @subsection Sound Services
>  
> diff --git a/gnu/services/desktop.scm b/gnu/services/desktop.scm
> index 64d0e85301..07ff4138e9 100644
> --- a/gnu/services/desktop.scm
> +++ b/gnu/services/desktop.scm
> @@ -213,9 +213,9 @@ (define* upower-configuration-file
>    ;; Return an upower-daemon configuration file.
>    (match-lambda
>      (($ <upower-configuration> upower
> -        watts-up-pro? poll-batteries? ignore-lid? use-percentage-for-policy?
> -        percentage-low percentage-critical percentage-action time-low
> -        time-critical time-action critical-power-action)
> +                               watts-up-pro? poll-batteries? ignore-lid? use-percentage-for-policy?
> +                               percentage-low percentage-critical percentage-action time-low
> +                               time-critical time-action critical-power-action)
>       (plain-file "UPower.conf"
>                   (string-append
>                    "[UPower]\n"
> @@ -330,16 +330,16 @@ (define* (geoclue-configuration-file config)
>                 "whitelist="
>                 (string-join (geoclue-configuration-whitelist config)
>                              ";") "\n"
> -               "[wifi]\n"
> -               "url=" (geoclue-configuration-wifi-geolocation-url config) "\n"
> -               "submit-data=" (bool (geoclue-configuration-submit-data? config))
> -               "submission-url="
> -               (geoclue-configuration-wifi-submission-url config) "\n"
> -               "submission-nick="
> -               (geoclue-configuration-submission-nick config)
> -               "\n"
> -               (string-join (geoclue-configuration-applications config)
> -                            "\n"))))
> +                            "[wifi]\n"
> +                            "url=" (geoclue-configuration-wifi-geolocation-url config) "\n"
> +                            "submit-data=" (bool (geoclue-configuration-submit-data? config))
> +                            "submission-url="
> +                            (geoclue-configuration-wifi-submission-url config) "\n"
> +                            "submission-nick="
> +                            (geoclue-configuration-submission-nick config)
> +                            "\n"
> +                            (string-join (geoclue-configuration-applications config)
> +                                         "\n"))))

Your editor happened to change the identation of these lines.

>  (define (geoclue-dbus-service config)
>    (list (wrapped-dbus-service (geoclue-configuration-geoclue config)
> @@ -402,14 +402,367 @@ (define-record-type* <bluetooth-configuration>
>    bluetooth-configuration make-bluetooth-configuration
>    bluetooth-configuration?
>    (bluez bluetooth-configuration-bluez (default bluez))
> -  (auto-enable? bluetooth-configuration-auto-enable? (default #f)))
> +
> +  ;;; [General]
> +  (name bluetooth-configuration-name (default "BlueZ"))
> +  (class bluetooth-configuration-class (default "0x000000"))
> +  (discoverable-timeout
> +   bluetooth-configuration-discoverable-timeout (default 180))
> +  (always-pairable? bluetooth-configuration-always-pairable? (default #f))
> +  (pairable-timeout bluetooth-configuration-pairable-timeout (default 0))
> +  (device-id bluetooth-configuration-device-id (default #f))
> +  (reverse-service-discovery?
> +   bluetooth-configuration-reverse-service-discovery (default #t))
> +  (name-resolving? bluetooth-configuration-name-resolving? (default #t))
> +  (debug-keys? bluetooth-configuration-debug-keys? (default #f))
> +
> +  ;;; Possible values:
> +  ;;; 'dual, 'bredr, 'le
> +  (controller-mode bluetooth-configuration-controller-mode (default 'dual))
> +
> +  ;;; Possible values:
> +  ;;; 'off, 'single, 'multiple
> +  (multi-profile bluetooth-configuration-multi-profile (default 'off))
> +  (fast-connectable? bluetooth-configuration-fast-connectable? (default #f))
> +
> +  ;;; Possible values:
> +  ;;; for LE mode: 'off, 'network/on, 'device
> +  ;;; for Dual mode: 'off, 'network/on', 'device, 'limited-network, 'limited-device
> +  ;;; Source: https://git.kernel.org/pub/scm/bluetooth/bluez.git/tree/src/main.conf#n68
> +  (privacy bluetooth-configuration-privacy (default 'off))
> +
> +  ;;; Possible values:
> +  ;;; 'never, 'confirm, 'always
> +  (just-works-repairing
> +   bluetooth-configuration-just-works-repairing (default 'never))
> +  (temporary-timeout bluetooth-configuration-temporary-timeout (default 30))
> +  (refresh-discovery? bluetooth-configuration-refresh-discovery (default #t))
> +
> +  ;;; Possible values: 'true, 'false, <UUID>
> +  ;;; Possible UUIDs:
> +  ;;; d4992530-b9ec-469f-ab01-6c481c47da1c (BlueZ Experimental Debug)
> +  ;;; 671b10b5-42c0-4696-9227-eb28d1b049d6 (BlueZ Experimental Simultaneous Central and Peripheral)
> +  ;;; 15c0a148-c273-11ea-b3de-0242ac130004 (BlueZ Experimental LL privacy)
> +  ;;; 330859bc-7506-492d-9370-9a6f0614037f (BlueZ Experimental Bluetooth Quality Report)
> +  ;;; a6695ace-ee7f-4fb9-881a-5fac66c629af (BlueZ Experimental Offload Codecs)
> +  ;;; Source: https://git.kernel.org/pub/scm/bluetooth/bluez.git/tree/src/main.conf#n110
> +  (experimental bluetooth-configuration-experimental (default 'false))
> +  (remote-name-request-retry-delay
> +   bluetooth-configuration-remote-name-request-retry-delay (default 300))
> +
> +  ;;; [BR]
> +  (page-scan-type bluetooth-configuration-page-scan-type (default #f))
> +  (page-scan-interval bluetooth-configuration-page-scan-interval (default #f))
> +  (page-scan-window bluetooth-configuration-page-scan-window (default #f))
> +  (inquiry-scan-type bluetooth-configuration-inquiry-scan-type (default #f))
> +  (inquiry-scan-interval bluetooth-configuration-inquiry-scan-interval (default #f))
> +  (inquiry-scan-window bluetooth-configuration-inquiry-scan-window (default #f))
> +  (link-supervision-timeout bluetooth-configuration-link-supervision-timeout (default #f))
> +  (page-timeout bluetooth-configuration-page-timeout (default #f))
> +  (min-sniff-interval bluetooth-configuration-min-sniff-interval (default #f))
> +  (max-sniff-interval bluetooth-configuration-max-sniff-interval (default #f))
> +
> +  ;;; [LE]
> +  (min-advertisement-interval
> +   bluetooth-configuration-min-advertisement-interval (default #f))
> +  (max-advertisement-interval
> +   bluetooth-configuration-max-advertisement-interval (default #f))
> +  (multi-advertisement-rotation-interval
> +   bluetooth-configuration-multi-advertisement-rotation-interval (default #f))
> +  (scan-interval-auto-connect
> +   bluetooth-configuration-scan-interval-auto-connect (default #f))
> +  (scan-window-auto-connect
> +   bluetooth-configuration-scan-window-auto-connect (default #f))
> +  (scan-interval-suspend
> +   bluetooth-configuration-scan-interval-suspend (default #f))
> +  (scan-window-suspend
> +   bluetooth-configuration-scan-window-suspend (default #f))
> +  (scan-interval-discovery
> +   bluetooth-configuration-scan-interval-discovery (default #f))
> +  (scan-window-discovery
> +   bluetooth-configuration-scan-window-discovery (default #f))
> +  (scan-interval-adv-monitor
> +   bluetooth-configuration-scan-interval-adv-monitor (default #f))
> +  (scan-window-adv-monitor
> +   bluetooth-configuration-scan-window-adv-monitor (default #f))
> +  (scan-interval-connect
> +   bluetooth-configuration-scan-interval-connect (default #f))
> +  (scan-window-connect
> +   bluetooth-configuration-scan-window-connect (default #f))
> +  (min-connection-interval
> +   bluetooth-configuration-min-connection-interval (default #f))
> +  (max-connection-interval
> +   bluetooth-configuration-max-connection-interval (default #f))
> +  (connection-latency
> +   bluetooth-configuration-connection-latency (default #f))
> +  (connection-supervision-timeout
> +   bluetooth-configuration-connection-supervision-timeout (default #f))
> +  (autoconnect-timeout
> +   bluetooth-configuration-autoconnect-timeout (default #f))
> +  (adv-mon-allowlist-scan-duration
> +   bluetooth-configuration-adv-mon-allowlist-scan-duration (default 300))
> +  (adv-mon-no-filter-scan-duration
> +   bluetooth-configuration-adv-mon-no-filter-scan-duration (default 500))
> +  (enable-adv-mon-interleave-scan
> +   bluetooth-configuration-enable-adv-mon-interleave-scan (default 1))
> +
> +  ;;; [GATT]
> +  ;;; Possible values: 'yes, 'no, 'always
> +  (cache bluetooth-configuration-cache (default 'always))
> +
> +  ;;; Possible values: 7 ... 16, 0 (don't care)
> +  (key-size bluetooth-configuration-key-size (default 0))
> +
> +  ;;; Possible values: 23 ... 517
> +  (exchange-mtu bluetooth-configuration-exchange-mtu (default 517))
> +
> +  ;;; Possible values: 1 ... 5
> +  (att-channels bluetooth-configuration-att-channels (default 3))
> +
> +  ;;; [AVDTP]
> +  ;;; Possible values: 'basic, 'ertm
> +  (session-mode bluetooth-configuration-session-mode (default 'basic))
> +
> +  ;;; Possible values: 'basic, 'streaming
> +  (stream-mode bluetooth-configuration-stream-mode (default 'basic))
> +
> +  ;;; [Policy]
> +  (reconnect-uuids bluetooth-configuration-reconnect-uuids (default '()))
> +  (reconnect-attempts bluetooth-configuration-reconnect-attempts (default 7))
> +  (reconnect-intervals bluetooth-configuration-reconnect-intervals
> +                       (default (list 1 2 4 8 16 32 64)))
> +  (auto-enable? bluetooth-configuration-auto-enable? (default #f))
> +  (resume-delay bluetooth-configuration-resume-delay (default 2))
> +
> +  ;;; [AdvMon]
> +  ;;; Possible values:
> +  ;;; "0x00", "0xFF",
> +  ;;; "N = 0x00" ... "N = 0xFF"
> +  ;;; Source: https://git.kernel.org/pub/scm/bluetooth/bluez.git/tree/src/main.conf#n286
> +  (rssi-sampling-period bluetooth-configuration-rssi-sampling-period
> +                        (default "0xFF")))
>  
>  (define (bluetooth-configuration-file config)
>    "Return a configuration file for the systemd bluetooth service, as a string."
>    (string-append
> -   "[Policy]\n"
> -   "AutoEnable=" (bool (bluetooth-configuration-auto-enable?
> -                        config))))
> +   "[General]"
> +   "\nName = " (bluetooth-configuration-name config)
> +   "\nClass = " (bluetooth-configuration-class config)
> +   "\nDiscoverableTimeout = " (number->string
> +                               (bluetooth-configuration-discoverable-timeout
> +                                config))
> +   "\nAlwaysPairable = " (bool (bluetooth-configuration-always-pairable?
> +                                config))
> +   "\nPairableTimeout = " (number->string
> +                           (bluetooth-configuration-pairable-timeout
> +                            config))
> +   (if (bluetooth-configuration-device-id config)
> +       (string-append "\nDeviceID = " (bluetooth-configuration-device-id config))
> +       "")
> +   "\nReverseServiceDiscovery = " (bool
> +                                   (bluetooth-configuration-reverse-service-discovery
> +                                    config))
> +   "\nNameResolving = " (bool (bluetooth-configuration-name-resolving? config))
> +   "\nDebugKeys = " (bool (bluetooth-configuration-debug-keys? config))
> +   "\nControllerMode = " (symbol->string
> +                          (bluetooth-configuration-controller-mode config))
> +   "\nMultiProfile = " (symbol->string (bluetooth-configuration-multi-profile
> +                                        config))
> +   "\nFastConnectable = " (bool (bluetooth-configuration-fast-connectable? config))
> +   "\nPrivacy = " (symbol->string (bluetooth-configuration-privacy config))
> +   "\nJustWorksRepairing = " (symbol->string
> +                              (bluetooth-configuration-just-works-repairing config))
> +   "\nTemporaryTimeout = " (number->string
> +                            (bluetooth-configuration-temporary-timeout config))
> +   "\nRefreshDiscovery = " (bool (bluetooth-configuration-refresh-discovery config))
> +   "\nExperimental = " (symbol->string (bluetooth-configuration-experimental config))
> +   "\nRemoteNameRequestRetryDelay = " (number->string
> +                                       (bluetooth-configuration-remote-name-request-retry-delay
> +                                        config))
> +   "\n[BR]"
> +   (if (bluetooth-configuration-page-scan-type config)
> +       (string-append
> +        "\nPageScanType = "
> +        (number->string (bluetooth-configuration-page-scan-type config)))
> +       "")
> +   (if (bluetooth-configuration-page-scan-interval config)
> +       (string-append
> +        "\nPageScanInterval = "
> +        (number->string (bluetooth-configuration-page-scan-interval config)))
> +       "")
> +   (if (bluetooth-configuration-page-scan-window config)
> +       (string-append
> +        "\nPageScanWindow = "
> +        (number->string (bluetooth-configuration-page-scan-window config)))
> +       "")
> +   (if (bluetooth-configuration-inquiry-scan-type config)
> +       (string-append
> +        "\nInquiryScanType = "
> +        (number->string (bluetooth-configuration-inquiry-scan-type config)))
> +       "")
> +   (if (bluetooth-configuration-inquiry-scan-interval config)
> +       (string-append
> +        "\nInquiryScanInterval = "
> +        (number->string (bluetooth-configuration-inquiry-scan-interval config)))
> +       "")
> +   (if (bluetooth-configuration-inquiry-scan-window config)
> +       (string-append
> +        "\nInquiryScanWindow = "
> +        (number->string (bluetooth-configuration-inquiry-scan-window config)))
> +       "")
> +   (if (bluetooth-configuration-link-supervision-timeout config)
> +       (string-append
> +        "\nLinkSupervisionTimeout = "
> +        (number->string (bluetooth-configuration-link-supervision-timeout config)))
> +       "")
> +   (if (bluetooth-configuration-page-timeout config)
> +       (string-append
> +        "\nPageTimeout = "
> +        (number->string (bluetooth-configuration-page-timeout config)))
> +       "")
> +   (if (bluetooth-configuration-min-sniff-interval config)
> +       (string-append
> +        "\nMinSniffInterval = "
> +        (number->string (bluetooth-configuration-min-sniff-interval config)))
> +       "")
> +   (if (bluetooth-configuration-max-sniff-interval config)
> +       (string-append
> +        "\nMaxSniffInterval = "
> +        (number->string (bluetooth-configuration-max-sniff-interval config)))
> +       "")
> +
> +   "\n[LE]"
> +   (if (bluetooth-configuration-min-advertisement-interval config)
> +       (string-append
> +        "\nMinAdvertisementInterval = "
> +        (number->string (bluetooth-configuration-min-advertisement-interval config)))
> +       "")
> +   (if (bluetooth-configuration-max-advertisement-interval config)
> +       (string-append
> +        "\nMaxAdvertisementInterval = "
> +        (number->string (bluetooth-configuration-max-advertisement-interval config)))
> +       "")
> +   (if (bluetooth-configuration-multi-advertisement-rotation-interval config)
> +       (string-append
> +        "\nMultiAdvertisementRotationInterval = "
> +        (number->string
> +         (bluetooth-configuration-multi-advertisement-rotation-interval config)))
> +       "")
> +   (if (bluetooth-configuration-scan-interval-auto-connect config)
> +       (string-append
> +        "\nScanIntervalAutoConnect = "
> +        (number->string (bluetooth-configuration-scan-interval-auto-connect config)))
> +       "")
> +   (if (bluetooth-configuration-scan-window-auto-connect config)
> +       (string-append
> +        "\nScanWindowAutoConnect = "
> +        (number->string (bluetooth-configuration-scan-window-auto-connect config)))
> +       "")
> +   (if (bluetooth-configuration-scan-interval-suspend config)
> +       (string-append
> +        "\nScanIntervalSuspend = "
> +        (number->string (bluetooth-configuration-scan-interval-suspend config)))
> +       "")
> +   (if (bluetooth-configuration-scan-window-suspend config)
> +       (string-append
> +        "\nScanWindowSuspend = "
> +        (number->string (bluetooth-configuration-scan-window-suspend config)))
> +       "")
> +   (if (bluetooth-configuration-scan-interval-discovery config)
> +       (string-append
> +        "\nScanIntervalDiscovery = "
> +        (number->string (bluetooth-configuration-scan-interval-discovery config)))
> +       "")
> +   (if (bluetooth-configuration-scan-window-discovery config)
> +       (string-append
> +        "\nScanWindowDiscovery = "
> +        (number->string (bluetooth-configuration-scan-window-discovery config)))
> +       "")
> +   (if (bluetooth-configuration-scan-interval-adv-monitor config)
> +       (string-append
> +        "\nScanIntervalAdvMonitor = "
> +        (number->string (bluetooth-configuration-scan-interval-adv-monitor config)))
> +       "")
> +   (if (bluetooth-configuration-scan-window-adv-monitor config)
> +       (string-append
> +        "\nScanWindowAdvMonitor = "
> +        (number->string (bluetooth-configuration-scan-window-adv-monitor config)))
> +       "")
> +   (if (bluetooth-configuration-scan-interval-connect config)
> +       (string-append
> +        "\nScanIntervalConnect = "
> +        (number->string (bluetooth-configuration-scan-interval-connect config)))
> +       "")
> +   (if (bluetooth-configuration-scan-window-connect config)
> +       (string-append
> +        "\nScanWindowConnect = "
> +        (number->string (bluetooth-configuration-scan-window-connect config)))
> +       "")
> +   (if (bluetooth-configuration-min-connection-interval config)
> +       (string-append
> +        "\nMinConnectionInterval = "
> +        (number->string (bluetooth-configuration-min-connection-interval config)))
> +       "")
> +   (if (bluetooth-configuration-max-connection-interval config)
> +       (string-append
> +        "\nMaxConnectionInterval = "
> +        (number->string (bluetooth-configuration-max-connection-interval config)))
> +       "")
> +   (if (bluetooth-configuration-connection-latency config)
> +       (string-append
> +        "\nConnectionLatency = "
> +        (number->string (bluetooth-configuration-connection-latency config)))
> +       "")
> +   (if (bluetooth-configuration-connection-supervision-timeout config)
> +       (string-append
> +        "\nConnectionSupervisionTimeout = "
> +        (number->string (bluetooth-configuration-connection-supervision-timeout config)))
> +       "")
> +   (if (bluetooth-configuration-autoconnect-timeout config)
> +       (string-append
> +        "\nAutoconnecttimeout = "
> +        (number->string (bluetooth-configuration-autoconnect-timeout config)))
> +       "")
> +   "\nAdvMonAllowlistScanDuration = " (number->string
> +                                       (bluetooth-configuration-adv-mon-allowlist-scan-duration
> +                                        config))
> +   "\nAdvMonNoFilterScanDuration = " (number->string
> +                                      (bluetooth-configuration-adv-mon-no-filter-scan-duration
> +                                       config))
> +   "\nEnableAdvMonInterleaveScan = " (number->string
> +                                      (bluetooth-configuration-enable-adv-mon-interleave-scan
> +                                       config))
> +   
> +   "\n[GATT]"
> +   "\nCache = " (symbol->string (bluetooth-configuration-cache config))
> +   "\nKeySize = " (number->string (bluetooth-configuration-key-size config))
> +   "\nExchangeMTU = " (number->string (bluetooth-configuration-exchange-mtu config))
> +   "\nChannels = " (number->string (bluetooth-configuration-att-channels config))
> +
> +   "\n[AVDTP]"
> +   "\nSessionMode = " (symbol->string (bluetooth-configuration-session-mode config))
> +   "\nStreamMode = " (symbol->string (bluetooth-configuration-stream-mode config))
> +
> +   "\n[Policy]"
> +   (if (not (eq? '() (bluetooth-configuration-reconnect-uuids config)))
> +       (string-append
> +        "\nReconnectUUIDs = "
> +        (string-join (bluetooth-configuration-reconnect-uuids config)
> +                     ","))
> +       "")
> +   "\nReconnectAttempts = " (number->string
> +                             (bluetooth-configuration-reconnect-attempts config))
> +   "\nReconnectIntervals = " (string-join
> +                              (map number->string
> +                                   (bluetooth-configuration-reconnect-intervals
> +                                    config))
> +                              ",")
> +   "\nAutoEnable = " (bool (bluetooth-configuration-auto-enable?
> +                            config))
> +   "\nResumeDelay = " (number->string (bluetooth-configuration-resume-delay config))
> +
> +   "\n[AdvMon]"
> +   "\nRSSISamplingPeriod = " (bluetooth-configuration-rssi-sampling-period config)))
>  
>  (define (bluetooth-directory config)
>    (computed-file "etc-bluetooth"
> @@ -1211,7 +1564,7 @@ (define %desktop-services
>                                  (setuid-program
>                                   (program program)))
>                                (list (file-append nfs-utils "/sbin/mount.nfs")
> -                               (file-append ntfs-3g "/sbin/mount.ntfs-3g"))))
> +                                    (file-append ntfs-3g "/sbin/mount.ntfs-3g"))))

Re.

>           ;; The global fontconfig cache directory can sometimes contain
>           ;; stale entries, possibly referencing fonts that have been GC'd,
> -- 
> 2.34.0

Other than these few nitpicks, it looks good to me.


Best,
Josselin Poiret




Information forwarded to guix-patches@HIDDEN:
bug#52489; Package guix-patches. Full text available.

Message received at submit <at> debbugs.gnu.org:


Received: (at submit) by debbugs.gnu.org; 14 Dec 2021 20:47:38 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Tue Dec 14 15:47:38 2021
Received: from localhost ([127.0.0.1]:59713 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1mxEi0-0007J4-5K
	for submit <at> debbugs.gnu.org; Tue, 14 Dec 2021 15:47:38 -0500
Received: from lists.gnu.org ([209.51.188.17]:58216)
 by debbugs.gnu.org with esmtp (Exim 4.84_2)
 (envelope-from <db@HIDDEN>) id 1mxEhw-0007Ig-WA
 for submit <at> debbugs.gnu.org; Tue, 14 Dec 2021 15:47:34 -0500
Received: from eggs.gnu.org ([209.51.188.92]:46832)
 by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.90_1) (envelope-from <db@HIDDEN>) id 1mxEhw-0003vy-QC
 for guix-patches@HIDDEN; Tue, 14 Dec 2021 15:47:32 -0500
Received: from mout-p-201.mailbox.org ([80.241.56.171]:40052)
 by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_CHACHA20_POLY1305:256)
 (Exim 4.90_1) (envelope-from <db@HIDDEN>) id 1mxEht-00071T-1W
 for guix-patches@HIDDEN; Tue, 14 Dec 2021 15:47:32 -0500
Received: from smtp1.mailbox.org (smtp1.mailbox.org [80.241.60.240])
 (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)
 key-exchange ECDHE (P-384) server-signature RSA-PSS (4096 bits) server-digest
 SHA256) (No client certificate requested)
 by mout-p-201.mailbox.org (Postfix) with ESMTPS id 4JD9RZ5fgTzQkF4;
 Tue, 14 Dec 2021 21:47:22 +0100 (CET)
X-Virus-Scanned: amavisd-new at heinlein-support.de
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=minikn.xyz; s=MBO0001; 
 t=1639514840;
 h=from:from:reply-to:subject:subject:date:date:message-id:message-id:
 to:to:cc:cc:mime-version:mime-version:
 content-transfer-encoding:content-transfer-encoding;
 bh=6kUokls7PmOTwOZqxCT10+C/3cYpBbEZ//SlSJEBAf4=;
 b=MhTSrepdnJI4w5+xzPYz69U9bQlJ2tk0ZKCwbfK0PB6gE2XkrGflaiB4GnVDzGEoCIXEE4
 j13DwsCK5huEqHbQ42JDnQDix3sZRvWp6zel2vSm7nuqIgYb0bH8jcFuR9bzl8Lb6MJB2o
 ulMNY+meJnQdu+X06kgjABzQmowlD51HSAJ5yjFBUtDhJNe1b4ybD/83o8IHXUnI8szEKb
 lesN3EMxpPFJjGLL2tfO9R0G2ZuGpEZjn3Ajufra2ZXEpUtdxvazKAQVIEiMJ/AVNpnsB8
 B3qVii9wDklsvkepeiSPxTwJkGh/QZRdMO11m9HmbWjx4r8R7Psp45MXLrxSbA==
From: Demis Balbach <db@HIDDEN>
To: guix-patches@HIDDEN
Subject: [PATCH v2] services: bluetooth: Add missing config parameters
Date: Tue, 14 Dec 2021 21:47:03 +0100
Message-Id: <20211214204703.10152-1-db@HIDDEN>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
Received-SPF: none client-ip=80.241.56.171; envelope-from=db@HIDDEN;
 helo=mout-p-201.mailbox.org
X-Spam_score_int: 0
X-Spam_score: -0.0
X-Spam_bar: /
X-Spam_report: (-0.0 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1,
 DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1,
 FROM_SUSPICIOUS_NTLD=0.499, FROM_SUSPICIOUS_NTLD_FP=0.292,
 PDS_OTHER_BAD_TLD=1.997, RCVD_IN_DNSWL_LOW=-0.7, SPF_HELO_NONE=0.001,
 SPF_NONE=0.001 autolearn=no autolearn_force=no
X-Spam_action: no action
X-Spam-Score: 0.7 (/)
X-Debbugs-Envelope-To: submit
Cc: Demis Balbach <db@HIDDEN>
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -0.8 (/)

---
 doc/guix.texi            | 437 ++++++++++++++++++++++++++++++++++++++-
 gnu/services/desktop.scm | 389 ++++++++++++++++++++++++++++++++--
 2 files changed, 807 insertions(+), 19 deletions(-)

diff --git a/doc/guix.texi b/doc/guix.texi
index 757e44398c..14a2f9e590 100644
--- a/doc/guix.texi
+++ b/doc/guix.texi
@@ -20528,6 +20528,442 @@ bluetooth keyboard or mouse.
 Users need to be in the @code{lp} group to access the D-Bus service.
 @end deffn
 
+@deffn {Scheme Variable} bluetooth-service-type
+This is the type for the @uref{https://bluez.org/, Linux Bluetooth Protocol
+Stack} (BlueZ) system, which generates the @file{/etc/bluetooth/main.conf}
+configuration file.  The value for this type is a @command{bluetooth-configuration}
+record as in this example:
+
+@lisp
+(service bluetooth-service-type)
+@end lisp
+
+See below for details about @code{bluetooth-configuration}.
+@end deffn
+
+@deftp {Data Type} bluetooth-configuration
+Data type representing the configuration for @code{bluetooth-service}.
+
+@table @asis
+@item @code{bluez} (default: @code{bluez})
+@code{bluez} package to use.
+
+@item @code{name} (default: @code{"BlueZ"})
+Default adapter name.
+
+@item @code{class} (default: @code{"0x000000"})
+Default device class. Only the major and minor device class bits are considered.
+
+@item @code{discoverable-timeout} (default: @code{180})
+How long to stay in discoverable mode before going back to non-discoverable the
+value is in seconds.
+
+@item @code{always-pairable?} (default: @code{#f})
+Always allow pairing even if there are no agent registered.
+
+@item @code{pairable-timeout} (default: @code{0})
+How long to stay in pairable mode before going back to non-discoverable. The
+value is in seconds.
+
+@item @code{device-id} (default: @code{#f})
+Use vendor id source (assigner), vendor, product and version information for
+DID profile support. The values are separated by ":" and @var{assigner}, @var{VID},
+@var{PID} and @var{version}.
+
+Possible values are:
+
+@itemize @bullet
+@item
+@code{#f} to disable it,
+
+@item
+@code{"assigner:1234:5678:abcd"}, where @var{assigner} is either @code{usb} (default)
+or @code{bluetooth}.
+
+@end itemize
+
+@item @code{reverse-service-discovery?} (default: @code{#t})
+Do reverse service discovery for previously unknown devices that connect to
+us. For BR/EDR this option is really only needed for qualification since the
+BITE tester doesn't like us doing reverse SDP for some test cases, for LE
+this disables the GATT client functionally so it can be used in system which
+can only operate as peripheral.
+
+@item @code{name-resolving?} (default: @code{#t})
+Enable name resolving after inquiry. Set it to @code{#f} if you don't need
+remote devices name and want shorter discovery cycle.
+
+@item @code{debug-keys?} (default: @code{#f})
+Enable runtime persistency of debug link keys. Default is false which makes
+debug link keys valid only for the duration of the connection that they were
+created for.
+
+@item @code{controller-mode} (default: @code{'dual})
+Restricts all controllers to the specified transport. @code{'dual} means both
+BR/EDR and LE are enabled (if supported by the hardware).
+
+Possible values are: 
+
+@itemize @bullet
+@item
+@code{'dual}
+
+@item
+@code{'bredr}
+
+@item
+@code{'le}
+
+@end itemize
+
+@item @code{multi-profile} (default: @code{'off})
+nables Multi Profile Specification support. This allows to specify if system
+supports only Multiple Profiles Single Device (MPSD) configuration or both
+Multiple Profiles Single Device (MPSD) and Multiple Profiles Multiple Devices
+(MPMD) configurations.
+
+Possible values are:
+
+@itemize @bullet
+@item
+@code{'off}
+
+@item
+@code{'single}
+
+@item
+@code{'multiple}
+
+@end itemize
+
+@item @code{fast-connectable?} (default: @code{#f})
+Permanently enables the Fast Connectable setting for adapters that support
+it. When enabled other devices can connect faster to us, however the
+tradeoff is increased power consumptions. This feature will fully work only
+on kernel version 4.1 and newer.
+
+@item @code{privacy} (default: @code{'off})
+Default privacy settings.
+
+@itemize @bullet
+@item
+@code{'off}: Disable local privacy
+
+@item
+@code{'network/on}: A device will only accept advertising packets from peer
+devices that contain private addresses. It may not be compatible with some
+legacy devices since it requires the use of RPA(s) all the time
+
+@item
+@code{'device}: A device in device privacy mode is only concerned about the
+privacy of the device and will accept advertising packets from peer devices
+that contain their Identity Address as well as ones that contain a private
+address, even if the peer device has distributed its IRK in the past
+
+@end itemize
+
+and additionally, if @var{controller-mode} is set to @code{'dual}:
+
+@itemize @bullet
+@item
+@code{'limited-network}: Apply Limited Discoverable Mode to advertising, which
+follows the same policy as to BR/EDR that publishes the identity address when
+discoverable, and Network Privacy Mode for scanning
+
+@item
+@code{'limited-device}: Apply Limited Discoverable Mode to advertising, which
+follows the same policy as to BR/EDR that publishes the identity address when
+discoverable, and Device Privacy Mode for scanning.
+
+@end itemize
+
+@item @code{just-works-repairing} (default: @code{'never})
+Specify the policy to the JUST-WORKS repairing initiated by peer.
+
+Possible values:
+@itemize @bullet
+@item
+@code{'never}
+
+@item
+@code{'confirm}
+
+@item
+@code{'always}
+
+@end itemize
+
+@item @code{temporary-timeout} (default: @code{30})
+How long to keep temporary devices around. The value is in seconds. @code{0}
+disables the timer completely.
+
+@item @code{refresh-discovery?} (default: @code{#t})
+Enables the device to issue an SDP request to update known services when
+profile is connected.
+
+@item @code{experimental} (default: @code{'false})
+Enables experimental features and interfaces, alternatively a list of UUIDs
+can be given.
+
+Possible values:
+
+@itemize @bullet
+@item
+@code{'true}
+
+@item
+@code{'false}
+
+@item
+@code{'d4992530-b9ec-469f-ab01-6c481c47da1c}: BlueZ Experimental Debug,
+
+@item
+@code{'671b10b5-42c0-4696-9227-eb28d1b049d6}: BlueZ Experimental Simultaneous Central and Peripheral,
+
+@item
+@code{'15c0a148-c273-11ea-b3de-0242ac130004}: BlueZ Experimental LL privacy,
+
+@item
+@code{'330859bc-7506-492d-9370-9a6f0614037f}: BlueZ Experimental Bluetooth Quality Report,
+
+@item
+@code{'a6695ace-ee7f-4fb9-881a-5fac66c629af}: BlueZ Experimental Offload Codecs.
+@end itemize
+
+@item @code{remote-name-request-retry-delay} (default: @code{300})
+The duration to avoid retrying to resolve a peer's name, if the previous
+try failed.
+
+@item @code{page-scan-type} (default: @code{#f})
+BR/EDR Page scan activity type.
+
+@item @code{page-scan-interval} (default: @code{#f})
+BR/EDR Page scan activity interval.
+
+@item @code{page-scan-window} (default: @code{#f})
+BR/EDR Page scan activity window.
+
+@item @code{inquiry-scan-type} (default: @code{#f})
+BR/EDR Inquiry scan activity type.
+
+@item @code{inquiry-scan-interval} (default: @code{#f})
+BR/EDR Inquiry scan activity interval.
+
+@item @code{inquiry-scan-window} (default: @code{#f})
+BR/EDR Inquiry scan activity window.
+
+@item @code{link-supervision-timeout} (default: @code{#f})
+BR/EDR Link supervision timeout.
+
+@item @code{page-timeout} (default: @code{#f})
+BR/EDR Page timeout.
+
+@item @code{min-sniff-interval} (default: @code{#f})
+BR/EDR minimum sniff interval.
+
+@item @code{max-sniff-interval} (default: @code{#f})
+BR/EDR maximum sniff interval.
+
+@item @code{min-advertisement-interval} (default: @code{#f})
+LE minimum advertisement interval (used for legacy advertisement only).
+
+@item @code{max-advertisement-interval} (default: @code{#f})
+LE maximum advertisement interval (used for legacy advertisement only).
+
+@item @code{multi-advertisement-rotation-interval} (default: @code{#f})
+LE multiple advertisement rotation interval.
+
+@item @code{scan-interval-auto-connect} (default: @code{#f})
+LE scanning interval used for passive scanning supporting auto connect.
+
+@item @code{scan-window-auto-connect} (default: @code{#f})
+LE scanning window used for passive scanning supporting auto connect.
+
+@item @code{scan-interval-suspend} (default: @code{#f})
+LE scanning interval used for active scanning supporting wake from suspend.
+
+@item @code{scan-window-suspend} (default: @code{#f})
+LE scanning window used for active scanning supporting wake from suspend.
+
+@item @code{scan-interval-discovery} (default: @code{#f})
+LE scanning interval used for active scanning supporting discovery.
+
+@item @code{scan-window-discovery} (default: @code{#f})
+LE scanning window used for active scanning supporting discovery.
+
+@item @code{scan-interval-adv-monitor} (default: @code{#f})
+LE scanning interval used for passive scanning supporting the advertisement monitor APIs.
+
+@item @code{scan-window-adv-monitor} (default: @code{#f})
+LE scanning window used for passive scanning supporting the advertisement monitor APIs.
+
+@item @code{scan-interval-connect} (default: @code{#f})
+LE scanning interval used for connection establishment.
+
+@item @code{scan-window-connect} (default: @code{#f})
+LE scanning window used for connection establishment.
+
+@item @code{min-connection-interval} (default: @code{#f})
+LE default minimum connection interval. This value is superceeded by any specific
+value provided via the Load Connection Parameters interface.
+
+@item @code{max-connection-interval} (default: @code{#f})
+LE default maximum connection interval. This value is superceeded by any specific
+value provided via the Load Connection Parameters interface.
+
+@item @code{connection-latency} (default: @code{#f})
+LE default connection latency. This value is superceeded by any specific
+value provided via the Load Connection Parameters interface.
+
+@item @code{connection-supervision-timeout} (default: @code{#f})
+LE default connection supervision timeout. This value is superceeded by any specific
+value provided via the Load Connection Parameters interface.
+
+@item @code{autoconnect-timeout} (default: @code{#f})
+LE default autoconnect timeout. This value is superceeded by any specific
+value provided via the Load Connection Parameters interface.
+
+@item @code{adv-mon-allowlist-scan-duration} (default: @code{300})
+Allowlist scan duration during interleaving scan. Only used when scanning for ADV
+monitors. The units are msec.
+
+@item @code{adv-mon-no-filter-scan-duration} (default: @code{500})
+No filter scan duration during interleaving scan. Only used when scanning for ADV
+monitors. The units are msec.
+
+@item @code{enable-adv-mon-interleave-scan} (default: @code{1})
+Enable/Disable Advertisement Monitor interleave scan for power saving.
+
+Possible values are:
+
+@itemize @bullet
+@item
+@code{0}: disable
+
+@item
+@code{1}: enabled.
+@end itemize
+
+@item @code{cache} (default: @code{'always})
+GATT attribute cache.
+
+Possible values are:
+@itemize @bullet
+@item
+@code{'always}: Always cache attributes even for devices not paired, this is
+recommended as it is best for interoperability, with more consistent
+reconnection times and enables proper tracking of notifications for all
+devices
+
+@item
+@code{'yes}: Only cache attributes of paired devices
+
+@item
+@code{'no}: Never cache attributes.
+@end itemize
+
+@item @code{key-size} (default: @code{0})
+Minimum required Encryption Key Size for accessing secured characteristics.
+
+Possible values are:
+@itemize @bullet
+@item
+@code{0}: Don't care
+
+@item
+@code{7-16}
+@end itemize
+
+@item @code{exchange-mtu} (default: @code{517})
+Exchange MTU size. Possible values are:
+
+@itemize @bullet
+@item
+@code{23-517}
+@end itemize
+
+@item @code{att-channels} (default: @code{3})
+Number of ATT channels. Possible values are:
+
+@itemize @bullet
+@item
+@code{1}: Disables EATT
+
+@item
+@code{2-5}
+@end itemize
+
+@item @code{session-mode} (default: @code{'basic})
+AVDTP L2CAP signalling channel mode.
+
+Possible values are:
+
+@itemize @bullet
+@item
+@code{'basic}: Use L2CAP basic mode
+
+@item
+@code{'ertm}: Use L2CAP enhanced retransmission mode.
+@end itemize
+
+@item @code{stream-mode} (default: @code{'basic})
+AVDTP L2CAP transport channel mode.
+
+Possible values are:
+
+@itemize @bullet
+@item
+@code{'basic}: Use L2CAP basic mode
+
+@item
+@code{'streaming}: Use L2CAP streaming mode.
+@end itemize
+
+@item @code{reconnect-uuids} (default: @code{'()})
+The ReconnectUUIDs defines the set of remote services that should try
+to be reconnected to in case of a link loss (link supervision
+timeout). The policy plugin should contain a sane set of values by
+default, but this list can be overridden here. By setting the list to
+empty the reconnection feature gets disabled.
+
+@item @code{reconnect-attempts} (default: @code{7})
+Defines the number of attempts to reconnect after a link lost. Setting
+the value to 0 disables reconnecting feature.
+
+@item @code{reconnect-intervals} (default: @code{'(1 2 4 8 16 32 64)})
+Defines a list of intervals in seconds to use in between attempts. If
+the number of attempts defined in @var{reconnect-attempts} is bigger than
+the list of intervals the last interval is repeated until the last attempt.
+
+@item @code{auto-enable?} (default: @code{#f})
+Defines option to enable all controllers when they are found. This includes
+adapters present on start as well as adapters that are plugged in later on.
+
+@item @code{resume-delay} (default: @code{2})
+Audio devices that were disconnected due to suspend will be reconnected on
+resume. @var{resume-delay} determines the delay between when the controller
+resumes from suspend and a connection attempt is made. A longer delay is
+better for better co-existence with Wi-Fi. The value is in seconds.
+
+@item @code{rssi-sampling-period} (default: @code{"0xFF"})
+Default RSSI Sampling Period. This is used when a client registers an
+advertisement monitor and leaves the RSSISamplingPeriod unset.
+
+Possible values are:
+@itemize @bullet
+@item
+@code{"0x00"}: Report all advertisements
+
+@item
+@code{"N = 0xXX"}: Report advertisements every N x 100 msec (range: 0x01 to 0xFE)
+
+@item
+@code{"0xFF"}: Report only one advertisement per device during monitoring period.
+@end itemize
+
+@end table
+@end deftp
+
 @defvr {Scheme Variable} gnome-keyring-service-type
 This is the type of the service that adds the
 @uref{https://wiki.gnome.org/Projects/GnomeKeyring, GNOME Keyring}.  Its
@@ -20562,7 +20998,6 @@ and ``passwd'' is with the value @code{passwd}.
 @end table
 @end deftp
 
-
 @node Sound Services
 @subsection Sound Services
 
diff --git a/gnu/services/desktop.scm b/gnu/services/desktop.scm
index 64d0e85301..07ff4138e9 100644
--- a/gnu/services/desktop.scm
+++ b/gnu/services/desktop.scm
@@ -213,9 +213,9 @@ (define* upower-configuration-file
   ;; Return an upower-daemon configuration file.
   (match-lambda
     (($ <upower-configuration> upower
-        watts-up-pro? poll-batteries? ignore-lid? use-percentage-for-policy?
-        percentage-low percentage-critical percentage-action time-low
-        time-critical time-action critical-power-action)
+                               watts-up-pro? poll-batteries? ignore-lid? use-percentage-for-policy?
+                               percentage-low percentage-critical percentage-action time-low
+                               time-critical time-action critical-power-action)
      (plain-file "UPower.conf"
                  (string-append
                   "[UPower]\n"
@@ -330,16 +330,16 @@ (define* (geoclue-configuration-file config)
                "whitelist="
                (string-join (geoclue-configuration-whitelist config)
                             ";") "\n"
-               "[wifi]\n"
-               "url=" (geoclue-configuration-wifi-geolocation-url config) "\n"
-               "submit-data=" (bool (geoclue-configuration-submit-data? config))
-               "submission-url="
-               (geoclue-configuration-wifi-submission-url config) "\n"
-               "submission-nick="
-               (geoclue-configuration-submission-nick config)
-               "\n"
-               (string-join (geoclue-configuration-applications config)
-                            "\n"))))
+                            "[wifi]\n"
+                            "url=" (geoclue-configuration-wifi-geolocation-url config) "\n"
+                            "submit-data=" (bool (geoclue-configuration-submit-data? config))
+                            "submission-url="
+                            (geoclue-configuration-wifi-submission-url config) "\n"
+                            "submission-nick="
+                            (geoclue-configuration-submission-nick config)
+                            "\n"
+                            (string-join (geoclue-configuration-applications config)
+                                         "\n"))))
 
 (define (geoclue-dbus-service config)
   (list (wrapped-dbus-service (geoclue-configuration-geoclue config)
@@ -402,14 +402,367 @@ (define-record-type* <bluetooth-configuration>
   bluetooth-configuration make-bluetooth-configuration
   bluetooth-configuration?
   (bluez bluetooth-configuration-bluez (default bluez))
-  (auto-enable? bluetooth-configuration-auto-enable? (default #f)))
+
+  ;;; [General]
+  (name bluetooth-configuration-name (default "BlueZ"))
+  (class bluetooth-configuration-class (default "0x000000"))
+  (discoverable-timeout
+   bluetooth-configuration-discoverable-timeout (default 180))
+  (always-pairable? bluetooth-configuration-always-pairable? (default #f))
+  (pairable-timeout bluetooth-configuration-pairable-timeout (default 0))
+  (device-id bluetooth-configuration-device-id (default #f))
+  (reverse-service-discovery?
+   bluetooth-configuration-reverse-service-discovery (default #t))
+  (name-resolving? bluetooth-configuration-name-resolving? (default #t))
+  (debug-keys? bluetooth-configuration-debug-keys? (default #f))
+
+  ;;; Possible values:
+  ;;; 'dual, 'bredr, 'le
+  (controller-mode bluetooth-configuration-controller-mode (default 'dual))
+
+  ;;; Possible values:
+  ;;; 'off, 'single, 'multiple
+  (multi-profile bluetooth-configuration-multi-profile (default 'off))
+  (fast-connectable? bluetooth-configuration-fast-connectable? (default #f))
+
+  ;;; Possible values:
+  ;;; for LE mode: 'off, 'network/on, 'device
+  ;;; for Dual mode: 'off, 'network/on', 'device, 'limited-network, 'limited-device
+  ;;; Source: https://git.kernel.org/pub/scm/bluetooth/bluez.git/tree/src/main.conf#n68
+  (privacy bluetooth-configuration-privacy (default 'off))
+
+  ;;; Possible values:
+  ;;; 'never, 'confirm, 'always
+  (just-works-repairing
+   bluetooth-configuration-just-works-repairing (default 'never))
+  (temporary-timeout bluetooth-configuration-temporary-timeout (default 30))
+  (refresh-discovery? bluetooth-configuration-refresh-discovery (default #t))
+
+  ;;; Possible values: 'true, 'false, <UUID>
+  ;;; Possible UUIDs:
+  ;;; d4992530-b9ec-469f-ab01-6c481c47da1c (BlueZ Experimental Debug)
+  ;;; 671b10b5-42c0-4696-9227-eb28d1b049d6 (BlueZ Experimental Simultaneous Central and Peripheral)
+  ;;; 15c0a148-c273-11ea-b3de-0242ac130004 (BlueZ Experimental LL privacy)
+  ;;; 330859bc-7506-492d-9370-9a6f0614037f (BlueZ Experimental Bluetooth Quality Report)
+  ;;; a6695ace-ee7f-4fb9-881a-5fac66c629af (BlueZ Experimental Offload Codecs)
+  ;;; Source: https://git.kernel.org/pub/scm/bluetooth/bluez.git/tree/src/main.conf#n110
+  (experimental bluetooth-configuration-experimental (default 'false))
+  (remote-name-request-retry-delay
+   bluetooth-configuration-remote-name-request-retry-delay (default 300))
+
+  ;;; [BR]
+  (page-scan-type bluetooth-configuration-page-scan-type (default #f))
+  (page-scan-interval bluetooth-configuration-page-scan-interval (default #f))
+  (page-scan-window bluetooth-configuration-page-scan-window (default #f))
+  (inquiry-scan-type bluetooth-configuration-inquiry-scan-type (default #f))
+  (inquiry-scan-interval bluetooth-configuration-inquiry-scan-interval (default #f))
+  (inquiry-scan-window bluetooth-configuration-inquiry-scan-window (default #f))
+  (link-supervision-timeout bluetooth-configuration-link-supervision-timeout (default #f))
+  (page-timeout bluetooth-configuration-page-timeout (default #f))
+  (min-sniff-interval bluetooth-configuration-min-sniff-interval (default #f))
+  (max-sniff-interval bluetooth-configuration-max-sniff-interval (default #f))
+
+  ;;; [LE]
+  (min-advertisement-interval
+   bluetooth-configuration-min-advertisement-interval (default #f))
+  (max-advertisement-interval
+   bluetooth-configuration-max-advertisement-interval (default #f))
+  (multi-advertisement-rotation-interval
+   bluetooth-configuration-multi-advertisement-rotation-interval (default #f))
+  (scan-interval-auto-connect
+   bluetooth-configuration-scan-interval-auto-connect (default #f))
+  (scan-window-auto-connect
+   bluetooth-configuration-scan-window-auto-connect (default #f))
+  (scan-interval-suspend
+   bluetooth-configuration-scan-interval-suspend (default #f))
+  (scan-window-suspend
+   bluetooth-configuration-scan-window-suspend (default #f))
+  (scan-interval-discovery
+   bluetooth-configuration-scan-interval-discovery (default #f))
+  (scan-window-discovery
+   bluetooth-configuration-scan-window-discovery (default #f))
+  (scan-interval-adv-monitor
+   bluetooth-configuration-scan-interval-adv-monitor (default #f))
+  (scan-window-adv-monitor
+   bluetooth-configuration-scan-window-adv-monitor (default #f))
+  (scan-interval-connect
+   bluetooth-configuration-scan-interval-connect (default #f))
+  (scan-window-connect
+   bluetooth-configuration-scan-window-connect (default #f))
+  (min-connection-interval
+   bluetooth-configuration-min-connection-interval (default #f))
+  (max-connection-interval
+   bluetooth-configuration-max-connection-interval (default #f))
+  (connection-latency
+   bluetooth-configuration-connection-latency (default #f))
+  (connection-supervision-timeout
+   bluetooth-configuration-connection-supervision-timeout (default #f))
+  (autoconnect-timeout
+   bluetooth-configuration-autoconnect-timeout (default #f))
+  (adv-mon-allowlist-scan-duration
+   bluetooth-configuration-adv-mon-allowlist-scan-duration (default 300))
+  (adv-mon-no-filter-scan-duration
+   bluetooth-configuration-adv-mon-no-filter-scan-duration (default 500))
+  (enable-adv-mon-interleave-scan
+   bluetooth-configuration-enable-adv-mon-interleave-scan (default 1))
+
+  ;;; [GATT]
+  ;;; Possible values: 'yes, 'no, 'always
+  (cache bluetooth-configuration-cache (default 'always))
+
+  ;;; Possible values: 7 ... 16, 0 (don't care)
+  (key-size bluetooth-configuration-key-size (default 0))
+
+  ;;; Possible values: 23 ... 517
+  (exchange-mtu bluetooth-configuration-exchange-mtu (default 517))
+
+  ;;; Possible values: 1 ... 5
+  (att-channels bluetooth-configuration-att-channels (default 3))
+
+  ;;; [AVDTP]
+  ;;; Possible values: 'basic, 'ertm
+  (session-mode bluetooth-configuration-session-mode (default 'basic))
+
+  ;;; Possible values: 'basic, 'streaming
+  (stream-mode bluetooth-configuration-stream-mode (default 'basic))
+
+  ;;; [Policy]
+  (reconnect-uuids bluetooth-configuration-reconnect-uuids (default '()))
+  (reconnect-attempts bluetooth-configuration-reconnect-attempts (default 7))
+  (reconnect-intervals bluetooth-configuration-reconnect-intervals
+                       (default (list 1 2 4 8 16 32 64)))
+  (auto-enable? bluetooth-configuration-auto-enable? (default #f))
+  (resume-delay bluetooth-configuration-resume-delay (default 2))
+
+  ;;; [AdvMon]
+  ;;; Possible values:
+  ;;; "0x00", "0xFF",
+  ;;; "N = 0x00" ... "N = 0xFF"
+  ;;; Source: https://git.kernel.org/pub/scm/bluetooth/bluez.git/tree/src/main.conf#n286
+  (rssi-sampling-period bluetooth-configuration-rssi-sampling-period
+                        (default "0xFF")))
 
 (define (bluetooth-configuration-file config)
   "Return a configuration file for the systemd bluetooth service, as a string."
   (string-append
-   "[Policy]\n"
-   "AutoEnable=" (bool (bluetooth-configuration-auto-enable?
-                        config))))
+   "[General]"
+   "\nName = " (bluetooth-configuration-name config)
+   "\nClass = " (bluetooth-configuration-class config)
+   "\nDiscoverableTimeout = " (number->string
+                               (bluetooth-configuration-discoverable-timeout
+                                config))
+   "\nAlwaysPairable = " (bool (bluetooth-configuration-always-pairable?
+                                config))
+   "\nPairableTimeout = " (number->string
+                           (bluetooth-configuration-pairable-timeout
+                            config))
+   (if (bluetooth-configuration-device-id config)
+       (string-append "\nDeviceID = " (bluetooth-configuration-device-id config))
+       "")
+   "\nReverseServiceDiscovery = " (bool
+                                   (bluetooth-configuration-reverse-service-discovery
+                                    config))
+   "\nNameResolving = " (bool (bluetooth-configuration-name-resolving? config))
+   "\nDebugKeys = " (bool (bluetooth-configuration-debug-keys? config))
+   "\nControllerMode = " (symbol->string
+                          (bluetooth-configuration-controller-mode config))
+   "\nMultiProfile = " (symbol->string (bluetooth-configuration-multi-profile
+                                        config))
+   "\nFastConnectable = " (bool (bluetooth-configuration-fast-connectable? config))
+   "\nPrivacy = " (symbol->string (bluetooth-configuration-privacy config))
+   "\nJustWorksRepairing = " (symbol->string
+                              (bluetooth-configuration-just-works-repairing config))
+   "\nTemporaryTimeout = " (number->string
+                            (bluetooth-configuration-temporary-timeout config))
+   "\nRefreshDiscovery = " (bool (bluetooth-configuration-refresh-discovery config))
+   "\nExperimental = " (symbol->string (bluetooth-configuration-experimental config))
+   "\nRemoteNameRequestRetryDelay = " (number->string
+                                       (bluetooth-configuration-remote-name-request-retry-delay
+                                        config))
+   "\n[BR]"
+   (if (bluetooth-configuration-page-scan-type config)
+       (string-append
+        "\nPageScanType = "
+        (number->string (bluetooth-configuration-page-scan-type config)))
+       "")
+   (if (bluetooth-configuration-page-scan-interval config)
+       (string-append
+        "\nPageScanInterval = "
+        (number->string (bluetooth-configuration-page-scan-interval config)))
+       "")
+   (if (bluetooth-configuration-page-scan-window config)
+       (string-append
+        "\nPageScanWindow = "
+        (number->string (bluetooth-configuration-page-scan-window config)))
+       "")
+   (if (bluetooth-configuration-inquiry-scan-type config)
+       (string-append
+        "\nInquiryScanType = "
+        (number->string (bluetooth-configuration-inquiry-scan-type config)))
+       "")
+   (if (bluetooth-configuration-inquiry-scan-interval config)
+       (string-append
+        "\nInquiryScanInterval = "
+        (number->string (bluetooth-configuration-inquiry-scan-interval config)))
+       "")
+   (if (bluetooth-configuration-inquiry-scan-window config)
+       (string-append
+        "\nInquiryScanWindow = "
+        (number->string (bluetooth-configuration-inquiry-scan-window config)))
+       "")
+   (if (bluetooth-configuration-link-supervision-timeout config)
+       (string-append
+        "\nLinkSupervisionTimeout = "
+        (number->string (bluetooth-configuration-link-supervision-timeout config)))
+       "")
+   (if (bluetooth-configuration-page-timeout config)
+       (string-append
+        "\nPageTimeout = "
+        (number->string (bluetooth-configuration-page-timeout config)))
+       "")
+   (if (bluetooth-configuration-min-sniff-interval config)
+       (string-append
+        "\nMinSniffInterval = "
+        (number->string (bluetooth-configuration-min-sniff-interval config)))
+       "")
+   (if (bluetooth-configuration-max-sniff-interval config)
+       (string-append
+        "\nMaxSniffInterval = "
+        (number->string (bluetooth-configuration-max-sniff-interval config)))
+       "")
+
+   "\n[LE]"
+   (if (bluetooth-configuration-min-advertisement-interval config)
+       (string-append
+        "\nMinAdvertisementInterval = "
+        (number->string (bluetooth-configuration-min-advertisement-interval config)))
+       "")
+   (if (bluetooth-configuration-max-advertisement-interval config)
+       (string-append
+        "\nMaxAdvertisementInterval = "
+        (number->string (bluetooth-configuration-max-advertisement-interval config)))
+       "")
+   (if (bluetooth-configuration-multi-advertisement-rotation-interval config)
+       (string-append
+        "\nMultiAdvertisementRotationInterval = "
+        (number->string
+         (bluetooth-configuration-multi-advertisement-rotation-interval config)))
+       "")
+   (if (bluetooth-configuration-scan-interval-auto-connect config)
+       (string-append
+        "\nScanIntervalAutoConnect = "
+        (number->string (bluetooth-configuration-scan-interval-auto-connect config)))
+       "")
+   (if (bluetooth-configuration-scan-window-auto-connect config)
+       (string-append
+        "\nScanWindowAutoConnect = "
+        (number->string (bluetooth-configuration-scan-window-auto-connect config)))
+       "")
+   (if (bluetooth-configuration-scan-interval-suspend config)
+       (string-append
+        "\nScanIntervalSuspend = "
+        (number->string (bluetooth-configuration-scan-interval-suspend config)))
+       "")
+   (if (bluetooth-configuration-scan-window-suspend config)
+       (string-append
+        "\nScanWindowSuspend = "
+        (number->string (bluetooth-configuration-scan-window-suspend config)))
+       "")
+   (if (bluetooth-configuration-scan-interval-discovery config)
+       (string-append
+        "\nScanIntervalDiscovery = "
+        (number->string (bluetooth-configuration-scan-interval-discovery config)))
+       "")
+   (if (bluetooth-configuration-scan-window-discovery config)
+       (string-append
+        "\nScanWindowDiscovery = "
+        (number->string (bluetooth-configuration-scan-window-discovery config)))
+       "")
+   (if (bluetooth-configuration-scan-interval-adv-monitor config)
+       (string-append
+        "\nScanIntervalAdvMonitor = "
+        (number->string (bluetooth-configuration-scan-interval-adv-monitor config)))
+       "")
+   (if (bluetooth-configuration-scan-window-adv-monitor config)
+       (string-append
+        "\nScanWindowAdvMonitor = "
+        (number->string (bluetooth-configuration-scan-window-adv-monitor config)))
+       "")
+   (if (bluetooth-configuration-scan-interval-connect config)
+       (string-append
+        "\nScanIntervalConnect = "
+        (number->string (bluetooth-configuration-scan-interval-connect config)))
+       "")
+   (if (bluetooth-configuration-scan-window-connect config)
+       (string-append
+        "\nScanWindowConnect = "
+        (number->string (bluetooth-configuration-scan-window-connect config)))
+       "")
+   (if (bluetooth-configuration-min-connection-interval config)
+       (string-append
+        "\nMinConnectionInterval = "
+        (number->string (bluetooth-configuration-min-connection-interval config)))
+       "")
+   (if (bluetooth-configuration-max-connection-interval config)
+       (string-append
+        "\nMaxConnectionInterval = "
+        (number->string (bluetooth-configuration-max-connection-interval config)))
+       "")
+   (if (bluetooth-configuration-connection-latency config)
+       (string-append
+        "\nConnectionLatency = "
+        (number->string (bluetooth-configuration-connection-latency config)))
+       "")
+   (if (bluetooth-configuration-connection-supervision-timeout config)
+       (string-append
+        "\nConnectionSupervisionTimeout = "
+        (number->string (bluetooth-configuration-connection-supervision-timeout config)))
+       "")
+   (if (bluetooth-configuration-autoconnect-timeout config)
+       (string-append
+        "\nAutoconnecttimeout = "
+        (number->string (bluetooth-configuration-autoconnect-timeout config)))
+       "")
+   "\nAdvMonAllowlistScanDuration = " (number->string
+                                       (bluetooth-configuration-adv-mon-allowlist-scan-duration
+                                        config))
+   "\nAdvMonNoFilterScanDuration = " (number->string
+                                      (bluetooth-configuration-adv-mon-no-filter-scan-duration
+                                       config))
+   "\nEnableAdvMonInterleaveScan = " (number->string
+                                      (bluetooth-configuration-enable-adv-mon-interleave-scan
+                                       config))
+   
+   "\n[GATT]"
+   "\nCache = " (symbol->string (bluetooth-configuration-cache config))
+   "\nKeySize = " (number->string (bluetooth-configuration-key-size config))
+   "\nExchangeMTU = " (number->string (bluetooth-configuration-exchange-mtu config))
+   "\nChannels = " (number->string (bluetooth-configuration-att-channels config))
+
+   "\n[AVDTP]"
+   "\nSessionMode = " (symbol->string (bluetooth-configuration-session-mode config))
+   "\nStreamMode = " (symbol->string (bluetooth-configuration-stream-mode config))
+
+   "\n[Policy]"
+   (if (not (eq? '() (bluetooth-configuration-reconnect-uuids config)))
+       (string-append
+        "\nReconnectUUIDs = "
+        (string-join (bluetooth-configuration-reconnect-uuids config)
+                     ","))
+       "")
+   "\nReconnectAttempts = " (number->string
+                             (bluetooth-configuration-reconnect-attempts config))
+   "\nReconnectIntervals = " (string-join
+                              (map number->string
+                                   (bluetooth-configuration-reconnect-intervals
+                                    config))
+                              ",")
+   "\nAutoEnable = " (bool (bluetooth-configuration-auto-enable?
+                            config))
+   "\nResumeDelay = " (number->string (bluetooth-configuration-resume-delay config))
+
+   "\n[AdvMon]"
+   "\nRSSISamplingPeriod = " (bluetooth-configuration-rssi-sampling-period config)))
 
 (define (bluetooth-directory config)
   (computed-file "etc-bluetooth"
@@ -1211,7 +1564,7 @@ (define %desktop-services
                                 (setuid-program
                                  (program program)))
                               (list (file-append nfs-utils "/sbin/mount.nfs")
-                               (file-append ntfs-3g "/sbin/mount.ntfs-3g"))))
+                                    (file-append ntfs-3g "/sbin/mount.ntfs-3g"))))
 
          ;; The global fontconfig cache directory can sometimes contain
          ;; stale entries, possibly referencing fonts that have been GC'd,
-- 
2.34.0





Acknowledgement sent to Demis Balbach <db@HIDDEN>:
New bug report received and forwarded. Copy sent to guix-patches@HIDDEN. Full text available.
Report forwarded to guix-patches@HIDDEN:
bug#52489; Package guix-patches. Full text available.
Please note: This is a static page, with minimal formatting, updated once a day.
Click here to see this page with the latest information and nicer formatting.
Last modified: Sat, 18 Dec 2021 11:15:02 UTC

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