From patchwork Mon Dec 13 19:20:14 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Demis Balbach X-Patchwork-Id: 35208 Return-Path: X-Original-To: patchwork@mira.cbaines.net Delivered-To: patchwork@mira.cbaines.net Received: by mira.cbaines.net (Postfix, from userid 113) id E5CAC27BBEA; Mon, 13 Dec 2021 19:21:41 +0000 (GMT) X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on mira.cbaines.net X-Spam-Level: X-Spam-Status: No, score=-1.7 required=5.0 tests=BAYES_00,DKIM_INVALID, DKIM_SIGNED,FROM_SUSPICIOUS_NTLD,MAILING_LIST_MULTI,PDS_OTHER_BAD_TLD, RCVD_IN_MSPIKE_H2,SPF_HELO_PASS,URIBL_BLOCKED autolearn=no autolearn_force=no version=3.4.6 Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mira.cbaines.net (Postfix) with ESMTPS id B31EA27BBE9 for ; Mon, 13 Dec 2021 19:21:40 +0000 (GMT) Received: from localhost ([::1]:54150 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1mwqtH-0007gR-Sa for patchwork@mira.cbaines.net; Mon, 13 Dec 2021 14:21:39 -0500 Received: from eggs.gnu.org ([209.51.188.92]:35198) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1mwqsh-0007g2-2k for guix-patches@gnu.org; Mon, 13 Dec 2021 14:21:03 -0500 Received: from debbugs.gnu.org ([209.51.188.43]:45317) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1mwqsg-0005wq-QE for guix-patches@gnu.org; Mon, 13 Dec 2021 14:21:02 -0500 Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.84_2) (envelope-from ) id 1mwqsg-0002YM-Ls for guix-patches@gnu.org; Mon, 13 Dec 2021 14:21:02 -0500 X-Loop: help-debbugs@gnu.org Subject: [bug#52470] [PATCH] services: bluetooth: Add missing config parameters Resent-From: Demis Balbach Original-Sender: "Debbugs-submit" Resent-CC: guix-patches@gnu.org Resent-Date: Mon, 13 Dec 2021 19:21:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: report 52470 X-GNU-PR-Package: guix-patches X-GNU-PR-Keywords: patch To: 52470@debbugs.gnu.org Cc: Demis Balbach X-Debbugs-Original-To: guix-patches@gnu.org Received: via spool by submit@debbugs.gnu.org id=B.16394232629790 (code B ref -1); Mon, 13 Dec 2021 19:21:02 +0000 Received: (at submit) by debbugs.gnu.org; 13 Dec 2021 19:21:02 +0000 Received: from localhost ([127.0.0.1]:56861 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1mwqsf-0002Xn-0I for submit@debbugs.gnu.org; Mon, 13 Dec 2021 14:21:01 -0500 Received: from lists.gnu.org ([209.51.188.17]:55802) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1mwqsc-0002Xb-3z for submit@debbugs.gnu.org; Mon, 13 Dec 2021 14:20:59 -0500 Received: from eggs.gnu.org ([209.51.188.92]:35196) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1mwqsb-0007fm-VY for guix-patches@gnu.org; Mon, 13 Dec 2021 14:20:57 -0500 Received: from mout-p-202.mailbox.org ([80.241.56.172]:32574) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_CHACHA20_POLY1305:256) (Exim 4.90_1) (envelope-from ) id 1mwqsY-0005vh-R8 for guix-patches@gnu.org; Mon, 13 Dec 2021 14:20:57 -0500 Received: from smtp102.mailbox.org (smtp102.mailbox.org [IPv6:2001:67c:2050:105:465:1:3:0]) (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-202.mailbox.org (Postfix) with ESMTPS id 4JCWZ251z0zQkhL; Mon, 13 Dec 2021 20:20:42 +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=1639423240; 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=Wj3L+kqMflTTCUqGnsN494XeV4BxXiGhPF5YhWZzh24=; b=K0kNsFVOPNSmpKqtnswAIuSUEy7IHGEi2mxTerk3gpIWNyh5Ywif61Xs+KBzSFWRMft98s /Hh3T6JAQAbQn+hA7UYMsiKFNSuUrdvAp6yKYNx0KKUOR+kUP34k1X3WLM5UON9X95Oqq4 LXfT7g2PqAHPVB8DazXheIXD+6SEtt6Kjm9O4kDfIaCsTAUpYnguAIOYpMon3bUH7Uip4w sF/R/NibowMLsHKAG/x5FDxksQlmNCeAiG1paFgfVtVuVkDUVEaijlFIXU2d3yxUkR6EUy 15wGP3gaF19rCNhR+ib5CnpBt1MtAyeoBJSXjQUZoGe7H2sg4gKOQkD83K3K+w== From: Demis Balbach Date: Mon, 13 Dec 2021 20:20:14 +0100 Message-Id: <20211213192014.8386-1-db@minikn.xyz> MIME-Version: 1.0 Received-SPF: none client-ip=80.241.56.172; envelope-from=db@minikn.xyz; helo=mout-p-202.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.498, FROM_SUSPICIOUS_NTLD_FP=0.294, PDS_OTHER_BAD_TLD=1.997, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H2=-0.001, SPF_HELO_NONE=0.001, SPF_NONE=0.001 autolearn=no autolearn_force=no X-Spam_action: no action X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list X-BeenThere: guix-patches@gnu.org List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: guix-patches-bounces+patchwork=mira.cbaines.net@gnu.org Sender: "Guix-patches" X-getmail-retrieved-from-mailbox: Patches --- gnu/services/desktop.scm | 332 ++++++++++++++++++++++++++++++++++++++- 1 file changed, 328 insertions(+), 4 deletions(-) diff --git a/gnu/services/desktop.scm b/gnu/services/desktop.scm index 64d0e85301..23b730d7d4 100644 --- a/gnu/services/desktop.scm +++ b/gnu/services/desktop.scm @@ -402,14 +402,338 @@ (define-record-type* 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 "")) + (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, + ;;; 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 -1)) + (page-scan-interval bluetooth-configuration-page-scan-interval (default -1)) + (page-scan-window bluetooth-configuration-page-scan-window (default 'nil)) + (inquiry-scan-type bluetooth-configuration-inquiry-scan-type (default 'nil)) + (inquiry-scan-interval bluetooth-configuration-inquiry-scan-interval (default -1)) + (inquiry-scan-window bluetooth-configuration-inquiry-scan-window (default 'nil)) + (link-supervision-timeout bluetooth-configuration-link-supervision-timeout (default -1)) + (page-timeout bluetooth-configuration-page-timeout (default -1)) + (min-sniff-interval bluetooth-configuration-min-sniff-interval (default -1)) + (max-sniff-interval bluetooth-configuration-max-sniff-interval (default -1)) + + ;;; [LE] + (min-advertisement-interval + bluetooth-configuration-min-advertisement-interval (default -1)) + (max-advertisement-interval + bluetooth-configuration-max-advertisement-interval (default -1)) + (multi-advertisement-rotation-interval + bluetooth-configuration-multi-advertisement-rotation-interval (default -1)) + (scan-interval-auto-connect + bluetooth-configuration-scan-interval-auto-connect (default 'nil)) + (scan-window-auto-connect + bluetooth-configuration-scan-window-auto-connect (default 'nil)) + (scan-interval-suspend + bluetooth-configuration-scan-interval-suspend (default 'nil)) + (scan-window-suspend + bluetooth-configuration-scan-window-suspend (default 'nil)) + (scan-interval-discovery + bluetooth-configuration-scan-interval-discovery (default 'nil)) + (scan-window-discovery + bluetooth-configuration-scan-window-discovery (default 'nil)) + (scan-interval-adv-monitor + bluetooth-configuration-scan-interval-adv-monitor (default 'nil)) + (scan-window-adv-monitor + bluetooth-configuration-scan-window-adv-monitor (default 'nil)) + (scan-interval-connect + bluetooth-configuration-scan-interval-connect (default 'nil)) + (scan-window-connect + bluetooth-configuration-scan-window-connect (default 'nil)) + (min-connection-interval + bluetooth-configuration-min-connection-interval (default -1)) + (max-connection-interval + bluetooth-configuration-max-connection-interval (default -1)) + (connection-latency + bluetooth-configuration-connection-latency (default -1)) + (connection-supervision-timeout + bluetooth-configuration-connection-supervision-timeout (default -1)) + (autoconnect-timeout + bluetooth-configuration-autoconnect-timeout (default -1)) + (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 (not (string-null? (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 (not (eq? -1 (bluetooth-configuration-page-scan-type config))) + (string-append + "\nPageScanType = " + (number->string (bluetooth-configuration-page-scan-type config))) "") + (if (not (eq? -1 (bluetooth-configuration-page-scan-interval config))) + (string-append + "\nPageScanInterval = " + (number->string (bluetooth-configuration-page-scan-interval config))) "") + (if (not (eq? -1 (bluetooth-configuration-page-scan-window config))) + (string-append + "\nPageScanWindow = " + (number->string (bluetooth-configuration-page-scan-window config))) "") + (if (not (eq? -1 (bluetooth-configuration-inquiry-scan-type config))) + (string-append + "\nInquiryScanType = " + (number->string (bluetooth-configuration-inquiry-scan-type config))) "") + (if (not (eq? -1 (bluetooth-configuration-inquiry-scan-interval config))) + (string-append + "\nInquiryScanInterval = " + (number->string (bluetooth-configuration-inquiry-scan-interval config))) "") + (if (not (eq? -1 (bluetooth-configuration-inquiry-scan-window config))) + (string-append + "\nInquiryScanWindow = " + (number->string (bluetooth-configuration-inquiry-scan-window config))) "") + (if (not (eq? -1 (bluetooth-configuration-link-supervision-timeout config))) + (string-append + "\nLinkSupervisionTimeout = " + (number->string (bluetooth-configuration-link-supervision-timeout config))) "") + (if (not (eq? -1 (bluetooth-configuration-page-timeout config))) + (string-append + "\nPageTimeout = " + (number->string (bluetooth-configuration-page-timeout config))) "") + (if (not (eq? -1 (bluetooth-configuration-min-sniff-interval config))) + (string-append + "\nMinSniffInterval = " + (number->string (bluetooth-configuration-min-sniff-interval config))) "") + (if (not (eq? -1 (bluetooth-configuration-max-sniff-interval config))) + (string-append + "\nMaxSniffInterval = " + (number->string (bluetooth-configuration-max-sniff-interval config))) "") + + "\n[LE]" + (if (not (eq? -1 (bluetooth-configuration-min-advertisement-interval config))) + (string-append + "\nMinAdvertisementInterval = " + (number->string (bluetooth-configuration-min-advertisement-interval config))) "") + (if (not (eq? -1 (bluetooth-configuration-max-advertisement-interval config))) + (string-append + "\nMaxAdvertisementInterval = " + (number->string (bluetooth-configuration-max-advertisement-interval config))) "") + (if (not (eq? -1 (bluetooth-configuration-multi-advertisement-rotation-interval config))) + (string-append + "\nMultiAdvertisementRotationInterval = " + (number->string + (bluetooth-configuration-multi-advertisement-rotation-interval config))) "") + (if (not (eq? -1 (bluetooth-configuration-scan-interval-auto-connect config))) + (string-append + "\nScanIntervalAutoConnect = " + (number->string (bluetooth-configuration-scan-interval-auto-connect config))) "") + (if (not (eq? -1 (bluetooth-configuration-scan-window-auto-connect config))) + (string-append + "\nScanWindowAutoConnect = " + (number->string (bluetooth-configuration-scan-window-auto-connect config))) "") + (if (not (eq? -1 (bluetooth-configuration-scan-interval-suspend config))) + (string-append + "\nScanIntervalSuspend = " + (number->string (bluetooth-configuration-scan-interval-suspend config))) "") + (if (not (eq? -1 (bluetooth-configuration-scan-window-suspend config))) + (string-append + "\nScanWindowSuspend = " + (number->string (bluetooth-configuration-scan-window-suspend config))) "") + (if (not (eq? -1 (bluetooth-configuration-scan-interval-discovery config))) + (string-append + "\nScanIntervalDiscovery = " + (number->string (bluetooth-configuration-scan-interval-discovery config))) "") + (if (not (eq? -1 (bluetooth-configuration-scan-window-discovery config))) + (string-append + "\nScanWindowDiscovery = " + (number->string (bluetooth-configuration-scan-window-discovery config))) "") + (if (not (eq? -1 (bluetooth-configuration-scan-interval-adv-monitor config))) + (string-append + "\nScanIntervalAdvMonitor = " + (number->string (bluetooth-configuration-scan-interval-adv-monitor config))) "") + (if (not (eq? -1 (bluetooth-configuration-scan-window-adv-monitor config))) + (string-append + "\nScanWindowAdvMonitor = " + (number->string (bluetooth-configuration-scan-window-adv-monitor config))) "") + (if (not (eq? -1 (bluetooth-configuration-scan-interval-connect config))) + (string-append + "\nScanIntervalConnect = " + (number->string (bluetooth-configuration-scan-interval-connect config))) "") + (if (not (eq? -1 (bluetooth-configuration-scan-window-connect config))) + (string-append + "\nScanWindowConnect = " + (number->string (bluetooth-configuration-scan-window-connect config))) "") + (if (not (eq? -1 (bluetooth-configuration-min-connection-interval config))) + (string-append + "\nMinConnectionInterval = " + (number->string (bluetooth-configuration-min-connection-interval config))) "") + (if (not (eq? -1 (bluetooth-configuration-max-connection-interval config))) + (string-append + "\nMaxConnectionInterval = " + (number->string (bluetooth-configuration-max-connection-interval config))) "") + (if (not (eq? -1 (bluetooth-configuration-connection-latency config))) + (string-append + "\nConnectionLatency = " + (number->string (bluetooth-configuration-connection-latency config))) "") + (if (not (eq? -1 (bluetooth-configuration-connection-supervision-timeout config))) + (string-append + "\nConnectionSupervisionTimeout = " + (number->string (bluetooth-configuration-connection-supervision-timeout config))) "") + (if (not (eq? -1 (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"