(address . guix-patches@gnu.org)(name . Demis Balbach)(address . db@minikn.xyz)
---
gnu/services/desktop.scm | 332 ++++++++++++++++++++++++++++++++++++++-
1 file changed, 328 insertions(+), 4 deletions(-)
Toggle diff (349 lines)
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>
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, <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 -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"
--
2.34.0