| 
									
										
										
										
											2014-04-14 16:26:48 +02:00
										 |  |  | { config, lib, pkgs, ... }: | 
					
						
							| 
									
										
										
										
											2009-08-10 18:25:09 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-04-14 16:26:48 +02:00
										 |  |  | with lib; | 
					
						
							| 
									
										
										
										
											2017-02-17 19:44:04 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-01-29 22:08:42 +00:00
										 |  |  | let | 
					
						
							| 
									
										
										
										
											2017-02-17 19:44:04 +01:00
										 |  |  |   cfg = config.hardware.bluetooth; | 
					
						
							| 
									
										
										
										
											2018-03-07 15:12:22 +11:00
										 |  |  |   bluez-bluetooth = cfg.package; | 
					
						
							| 
									
										
										
										
											2017-02-17 19:44:04 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-04-13 10:48:58 +08:00
										 |  |  | in { | 
					
						
							| 
									
										
										
										
											2009-08-10 18:25:09 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |   ###### interface | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   options = { | 
					
						
							| 
									
										
										
										
											2010-08-27 15:32:49 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-03-20 14:28:02 +01:00
										 |  |  |     hardware.bluetooth = { | 
					
						
							| 
									
										
										
										
											2019-04-19 21:41:48 -04:00
										 |  |  |       enable = mkEnableOption "support for Bluetooth"; | 
					
						
							| 
									
										
										
										
											2017-02-17 19:44:04 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-03-20 14:28:02 +01:00
										 |  |  |       powerOnBoot = mkOption { | 
					
						
							|  |  |  |         type    = types.bool; | 
					
						
							|  |  |  |         default = true; | 
					
						
							|  |  |  |         description = "Whether to power up the default Bluetooth controller on boot."; | 
					
						
							|  |  |  |       }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-03-07 15:12:22 +11:00
										 |  |  |       package = mkOption { | 
					
						
							|  |  |  |         type = types.package; | 
					
						
							|  |  |  |         default = pkgs.bluez; | 
					
						
							|  |  |  |         defaultText = "pkgs.bluez"; | 
					
						
							| 
									
										
										
										
											2018-12-15 14:49:41 +09:00
										 |  |  |         example = "pkgs.bluezFull"; | 
					
						
							| 
									
										
										
										
											2018-03-07 15:12:22 +11:00
										 |  |  |         description = ''
 | 
					
						
							|  |  |  |           Which BlueZ package to use. | 
					
						
							| 
									
										
										
										
											2018-12-15 14:49:41 +09:00
										 |  |  | 
 | 
					
						
							|  |  |  |           <note><para> | 
					
						
							|  |  |  |             Use the <literal>pkgs.bluezFull</literal> package to enable all | 
					
						
							|  |  |  |             bluez plugins. | 
					
						
							|  |  |  |           </para></note> | 
					
						
							| 
									
										
										
										
											2018-03-07 15:12:22 +11:00
										 |  |  |         '';
 | 
					
						
							|  |  |  |       }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-03-20 14:28:02 +01:00
										 |  |  |       extraConfig = mkOption { | 
					
						
							|  |  |  |         type = types.lines; | 
					
						
							|  |  |  |         default = ""; | 
					
						
							|  |  |  |         example = ''
 | 
					
						
							|  |  |  |           [General] | 
					
						
							|  |  |  |           ControllerMode = bredr | 
					
						
							|  |  |  |         '';
 | 
					
						
							|  |  |  |         description = ''
 | 
					
						
							|  |  |  |           Set additional configuration for system-wide bluetooth (/etc/bluetooth/main.conf). | 
					
						
							| 
									
										
										
										
											2017-04-13 10:48:58 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  |           NOTE: We already include [Policy], so any configuration under the Policy group should come first. | 
					
						
							| 
									
										
										
										
											2017-03-20 14:28:02 +01:00
										 |  |  |         '';
 | 
					
						
							|  |  |  |       }; | 
					
						
							| 
									
										
										
										
											2010-08-27 15:32:49 +00:00
										 |  |  |     }; | 
					
						
							| 
									
										
										
										
											2011-09-14 18:20:50 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-08-10 18:25:09 +00:00
										 |  |  |   }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   ###### implementation | 
					
						
							| 
									
										
										
										
											2017-02-09 21:25:03 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-02-17 19:44:04 +01:00
										 |  |  |   config = mkIf cfg.enable { | 
					
						
							| 
									
										
										
										
											2010-08-27 15:32:49 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-01-29 22:08:42 +00:00
										 |  |  |     environment.systemPackages = [ bluez-bluetooth pkgs.openobex pkgs.obexftp ]; | 
					
						
							| 
									
										
										
										
											2017-02-02 00:52:12 +03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-03-20 14:28:02 +01:00
										 |  |  |     environment.etc = singleton { | 
					
						
							| 
									
										
										
										
											2017-04-13 10:48:58 +08:00
										 |  |  |       source = pkgs.writeText "main.conf" ''
 | 
					
						
							|  |  |  |         [Policy] | 
					
						
							|  |  |  |         AutoEnable=${lib.boolToString cfg.powerOnBoot} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         ${cfg.extraConfig} | 
					
						
							|  |  |  |       '';
 | 
					
						
							| 
									
										
										
										
											2017-03-20 14:28:02 +01:00
										 |  |  |       target = "bluetooth/main.conf"; | 
					
						
							|  |  |  |     }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-01-29 22:08:42 +00:00
										 |  |  |     services.udev.packages = [ bluez-bluetooth ]; | 
					
						
							|  |  |  |     services.dbus.packages = [ bluez-bluetooth ]; | 
					
						
							| 
									
										
										
										
											2017-02-17 19:44:04 +01:00
										 |  |  |     systemd.packages       = [ bluez-bluetooth ]; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     systemd.services = { | 
					
						
							|  |  |  |       bluetooth = { | 
					
						
							|  |  |  |         wantedBy = [ "bluetooth.target" ]; | 
					
						
							|  |  |  |         aliases  = [ "dbus-org.bluez.service" ]; | 
					
						
							|  |  |  |       }; | 
					
						
							| 
									
										
										
										
											2017-02-02 00:52:12 +03:00
										 |  |  |     }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-02-17 19:44:04 +01:00
										 |  |  |     systemd.user.services = { | 
					
						
							|  |  |  |       obex.aliases = [ "dbus-org.bluez.obex.service" ]; | 
					
						
							| 
									
										
										
										
											2017-02-02 00:52:12 +03:00
										 |  |  |     }; | 
					
						
							| 
									
										
										
										
											2013-02-10 20:30:02 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-09-14 18:20:50 +00:00
										 |  |  |   }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-08-10 18:25:09 +00:00
										 |  |  | } |