| 
									
										
										
										
											2017-10-17 15:09:42 +01:00
										 |  |  | { config, pkgs, lib, ... }: | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | with lib; | 
					
						
							| 
									
										
										
										
											2017-10-25 19:35:00 +03:00
										 |  |  | 
 | 
					
						
							|  |  |  | let | 
					
						
							| 
									
										
										
										
											2019-03-11 17:32:38 +01:00
										 |  |  |   cfg = config.programs.sway; | 
					
						
							| 
									
										
										
										
											2017-10-25 19:35:00 +03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-12-08 13:56:56 +01:00
										 |  |  |   wrapperOptions = types.submodule { | 
					
						
							|  |  |  |     options = | 
					
						
							|  |  |  |       let | 
					
						
							|  |  |  |         mkWrapperFeature  = default: description: mkOption { | 
					
						
							|  |  |  |           type = types.bool; | 
					
						
							|  |  |  |           inherit default; | 
					
						
							|  |  |  |           example = !default; | 
					
						
							|  |  |  |           description = "Whether to make use of the ${description}"; | 
					
						
							|  |  |  |         }; | 
					
						
							|  |  |  |       in { | 
					
						
							|  |  |  |         base = mkWrapperFeature true ''
 | 
					
						
							|  |  |  |           base wrapper to execute extra session commands and prepend a | 
					
						
							|  |  |  |           dbus-run-session to the sway command. | 
					
						
							|  |  |  |         '';
 | 
					
						
							|  |  |  |         gtk = mkWrapperFeature false ''
 | 
					
						
							|  |  |  |           wrapGAppsHook wrapper to execute sway with required environment | 
					
						
							|  |  |  |           variables for GTK applications. | 
					
						
							|  |  |  |         '';
 | 
					
						
							|  |  |  |     }; | 
					
						
							|  |  |  |   }; | 
					
						
							| 
									
										
										
										
											2019-01-01 10:45:26 +03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-12-08 13:56:56 +01:00
										 |  |  |   swayPackage = pkgs.sway.override { | 
					
						
							|  |  |  |     extraSessionCommands = cfg.extraSessionCommands; | 
					
						
							| 
									
										
										
										
											2019-12-29 09:22:50 +03:00
										 |  |  |     extraOptions = cfg.extraOptions; | 
					
						
							| 
									
										
										
										
											2019-12-08 13:56:56 +01:00
										 |  |  |     withBaseWrapper = cfg.wrapperFeatures.base; | 
					
						
							|  |  |  |     withGtkWrapper = cfg.wrapperFeatures.gtk; | 
					
						
							| 
									
										
										
										
											2017-10-25 19:35:00 +03:00
										 |  |  |   }; | 
					
						
							| 
									
										
										
										
											2017-12-23 21:03:06 +01:00
										 |  |  | in { | 
					
						
							| 
									
										
										
										
											2019-03-11 17:32:38 +01:00
										 |  |  |   options.programs.sway = { | 
					
						
							| 
									
										
										
										
											2017-12-23 21:03:06 +01:00
										 |  |  |     enable = mkEnableOption ''
 | 
					
						
							| 
									
										
										
										
											2019-03-11 17:32:38 +01:00
										 |  |  |       Sway, the i3-compatible tiling Wayland compositor. You can manually launch | 
					
						
							|  |  |  |       Sway by executing "exec sway" on a TTY. Copy /etc/sway/config to | 
					
						
							|  |  |  |       ~/.config/sway/config to modify the default configuration. See | 
					
						
							|  |  |  |       https://github.com/swaywm/sway/wiki and "man 5 sway" for more information. | 
					
						
							|  |  |  |       Please have a look at the "extraSessionCommands" example for running | 
					
						
							|  |  |  |       programs natively under Wayland''; | 
					
						
							| 
									
										
										
										
											2017-10-25 19:35:00 +03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-12-08 13:56:56 +01:00
										 |  |  |     wrapperFeatures = mkOption { | 
					
						
							|  |  |  |       type = wrapperOptions; | 
					
						
							|  |  |  |       default = { }; | 
					
						
							|  |  |  |       example = { gtk = true; }; | 
					
						
							|  |  |  |       description = ''
 | 
					
						
							|  |  |  |         Attribute set of features to enable in the wrapper. | 
					
						
							|  |  |  |       '';
 | 
					
						
							|  |  |  |     }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-10-25 19:35:00 +03:00
										 |  |  |     extraSessionCommands = mkOption { | 
					
						
							| 
									
										
										
										
											2017-12-23 21:03:06 +01:00
										 |  |  |       type = types.lines; | 
					
						
							|  |  |  |       default = ""; | 
					
						
							| 
									
										
										
										
											2017-10-25 19:35:00 +03:00
										 |  |  |       example = ''
 | 
					
						
							| 
									
										
										
										
											2019-03-11 17:18:19 +01:00
										 |  |  |         export SDL_VIDEODRIVER=wayland | 
					
						
							|  |  |  |         # needs qt5.qtwayland in systemPackages | 
					
						
							|  |  |  |         export QT_QPA_PLATFORM=wayland | 
					
						
							|  |  |  |         export QT_WAYLAND_DISABLE_WINDOWDECORATION="1" | 
					
						
							|  |  |  |         # Fix for some Java AWT applications (e.g. Android Studio), | 
					
						
							|  |  |  |         # use this if they aren't displayed properly: | 
					
						
							|  |  |  |         export _JAVA_AWT_WM_NONREPARENTING=1 | 
					
						
							| 
									
										
										
										
											2017-10-25 19:35:00 +03:00
										 |  |  |       '';
 | 
					
						
							|  |  |  |       description = ''
 | 
					
						
							| 
									
										
										
										
											2017-12-23 21:03:06 +01:00
										 |  |  |         Shell commands executed just before Sway is started. | 
					
						
							| 
									
										
										
										
											2017-10-25 19:35:00 +03:00
										 |  |  |       '';
 | 
					
						
							|  |  |  |     }; | 
					
						
							| 
									
										
										
										
											2017-10-17 15:09:42 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-12-29 09:22:50 +03:00
										 |  |  |     extraOptions = mkOption { | 
					
						
							|  |  |  |       type = types.listOf types.str; | 
					
						
							|  |  |  |       default = []; | 
					
						
							|  |  |  |       example = [ | 
					
						
							|  |  |  |         "--verbose" | 
					
						
							|  |  |  |         "--debug" | 
					
						
							|  |  |  |         "--unsupported-gpu" | 
					
						
							|  |  |  |         "--my-next-gpu-wont-be-nvidia" | 
					
						
							|  |  |  |       ]; | 
					
						
							|  |  |  |       description = ''
 | 
					
						
							|  |  |  |         Command line arguments passed to launch Sway. Please DO NOT report | 
					
						
							|  |  |  |         issues if you use an unsupported GPU (proprietary drivers). | 
					
						
							|  |  |  |       '';
 | 
					
						
							|  |  |  |     }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-10-25 19:35:00 +03:00
										 |  |  |     extraPackages = mkOption { | 
					
						
							|  |  |  |       type = with types; listOf package; | 
					
						
							| 
									
										
										
										
											2017-10-25 22:29:27 +03:00
										 |  |  |       default = with pkgs; [ | 
					
						
							| 
									
										
										
										
											2019-12-08 13:56:56 +01:00
										 |  |  |         swaylock swayidle | 
					
						
							| 
									
										
										
										
											2020-01-10 12:26:17 +01:00
										 |  |  |         xwayland alacritty dmenu | 
					
						
							| 
									
										
										
										
											2020-02-13 09:36:35 +01:00
										 |  |  |         rxvt-unicode # For backward compatibility (old default terminal) | 
					
						
							| 
									
										
										
										
											2017-10-25 22:29:27 +03:00
										 |  |  |       ]; | 
					
						
							| 
									
										
										
										
											2017-12-23 21:03:06 +01:00
										 |  |  |       defaultText = literalExample ''
 | 
					
						
							| 
									
										
										
										
											2020-02-13 09:36:35 +01:00
										 |  |  |         with pkgs; [ swaylock swayidle xwayland rxvt-unicode dmenu ]; | 
					
						
							| 
									
										
										
										
											2017-12-23 21:03:06 +01:00
										 |  |  |       '';
 | 
					
						
							| 
									
										
										
										
											2017-10-25 19:35:00 +03:00
										 |  |  |       example = literalExample ''
 | 
					
						
							|  |  |  |         with pkgs; [ | 
					
						
							| 
									
										
										
										
											2019-03-11 17:18:19 +01:00
										 |  |  |           xwayland | 
					
						
							|  |  |  |           i3status i3status-rust | 
					
						
							|  |  |  |           termite rofi light | 
					
						
							| 
									
										
										
										
											2017-10-25 19:35:00 +03:00
										 |  |  |         ] | 
					
						
							|  |  |  |       '';
 | 
					
						
							|  |  |  |       description = ''
 | 
					
						
							|  |  |  |         Extra packages to be installed system wide. | 
					
						
							|  |  |  |       '';
 | 
					
						
							|  |  |  |     }; | 
					
						
							|  |  |  |   }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   config = mkIf cfg.enable { | 
					
						
							| 
									
										
										
										
											2019-12-08 13:56:56 +01:00
										 |  |  |     assertions = [ | 
					
						
							|  |  |  |       { | 
					
						
							|  |  |  |         assertion = cfg.extraSessionCommands != "" -> cfg.wrapperFeatures.base; | 
					
						
							|  |  |  |         message = ''
 | 
					
						
							|  |  |  |           The extraSessionCommands for Sway will not be run if | 
					
						
							|  |  |  |           wrapperFeatures.base is disabled. | 
					
						
							|  |  |  |         '';
 | 
					
						
							|  |  |  |       } | 
					
						
							|  |  |  |     ]; | 
					
						
							| 
									
										
										
										
											2019-03-11 17:32:38 +01:00
										 |  |  |     environment = { | 
					
						
							| 
									
										
										
										
											2019-12-08 13:56:56 +01:00
										 |  |  |       systemPackages = [ swayPackage ] ++ cfg.extraPackages; | 
					
						
							| 
									
										
										
										
											2019-03-11 17:32:38 +01:00
										 |  |  |       etc = { | 
					
						
							| 
									
										
										
										
											2019-04-27 22:38:18 +02:00
										 |  |  |         "sway/config".source = mkOptionDefault "${swayPackage}/etc/sway/config"; | 
					
						
							|  |  |  |         #"sway/security.d".source = mkOptionDefault "${swayPackage}/etc/sway/security.d/"; | 
					
						
							|  |  |  |         #"sway/config.d".source = mkOptionDefault "${swayPackage}/etc/sway/config.d/"; | 
					
						
							| 
									
										
										
										
											2019-03-11 17:32:38 +01:00
										 |  |  |       }; | 
					
						
							|  |  |  |     }; | 
					
						
							| 
									
										
										
										
											2017-12-21 20:16:19 +04:00
										 |  |  |     security.pam.services.swaylock = {}; | 
					
						
							| 
									
										
										
										
											2017-10-25 19:35:00 +03:00
										 |  |  |     hardware.opengl.enable = mkDefault true; | 
					
						
							|  |  |  |     fonts.enableDefaultFonts = mkDefault true; | 
					
						
							| 
									
										
										
										
											2017-12-21 20:16:19 +04:00
										 |  |  |     programs.dconf.enable = mkDefault true; | 
					
						
							| 
									
										
										
										
											2019-12-09 14:11:24 +01:00
										 |  |  |     # To make a Sway session available if a display manager like SDDM is enabled: | 
					
						
							| 
									
										
										
										
											2019-12-08 13:56:56 +01:00
										 |  |  |     services.xserver.displayManager.sessionPackages = [ swayPackage ]; | 
					
						
							| 
									
										
										
										
											2017-10-17 15:09:42 +01:00
										 |  |  |   }; | 
					
						
							| 
									
										
										
										
											2017-12-23 21:03:06 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-03-11 17:18:19 +01:00
										 |  |  |   meta.maintainers = with lib.maintainers; [ gnidorah primeos colemickens ]; | 
					
						
							| 
									
										
										
										
											2017-10-17 15:09:42 +01:00
										 |  |  | } |