 898559e730
			
		
	
	
		898559e730
		
	
	
	
	
		
			
			it's easier to use overrideAttrs than override IMO, and for the home-manager module I would like to be able to configure sway forks the same way as the original sway which is not possible currently see https://github.com/nix-community/home-manager/pull/4039
		
			
				
	
	
		
			64 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			Nix
		
	
	
	
	
	
			
		
		
	
	
			64 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			Nix
		
	
	
	
	
	
| { lib
 | |
| , sway-unwrapped
 | |
| , makeWrapper, symlinkJoin, writeShellScriptBin
 | |
| , withBaseWrapper ? true, extraSessionCommands ? "", dbus
 | |
| , withGtkWrapper ? false, wrapGAppsHook, gdk-pixbuf, glib, gtk3
 | |
| , extraOptions ? [] # E.g.: [ "--verbose" ]
 | |
| # Used by the NixOS module:
 | |
| , isNixOS ? false
 | |
| 
 | |
| , enableXWayland ? true
 | |
| , dbusSupport ? true
 | |
| }:
 | |
| 
 | |
| assert extraSessionCommands != "" -> withBaseWrapper;
 | |
| 
 | |
| with lib;
 | |
| 
 | |
| let
 | |
|   sway = sway-unwrapped.overrideAttrs (oa: { inherit isNixOS enableXWayland; });
 | |
|   baseWrapper = writeShellScriptBin "sway" ''
 | |
|      set -o errexit
 | |
|      if [ ! "$_SWAY_WRAPPER_ALREADY_EXECUTED" ]; then
 | |
|        export XDG_CURRENT_DESKTOP=sway
 | |
|        ${extraSessionCommands}
 | |
|        export _SWAY_WRAPPER_ALREADY_EXECUTED=1
 | |
|      fi
 | |
|      if [ "$DBUS_SESSION_BUS_ADDRESS" ]; then
 | |
|        export DBUS_SESSION_BUS_ADDRESS
 | |
|        exec ${sway}/bin/sway "$@"
 | |
|      else
 | |
|        exec ${if !dbusSupport then "" else "${dbus}/bin/dbus-run-session"} ${sway}/bin/sway "$@"
 | |
|      fi
 | |
|    '';
 | |
| in symlinkJoin {
 | |
|   name = "sway-${sway.version}";
 | |
| 
 | |
|   paths = (optional withBaseWrapper baseWrapper)
 | |
|     ++ [ sway ];
 | |
| 
 | |
|   strictDeps = false;
 | |
|   nativeBuildInputs = [ makeWrapper ]
 | |
|     ++ (optional withGtkWrapper wrapGAppsHook);
 | |
| 
 | |
|   buildInputs = optionals withGtkWrapper [ gdk-pixbuf glib gtk3 ];
 | |
| 
 | |
|   # We want to run wrapProgram manually
 | |
|   dontWrapGApps = true;
 | |
| 
 | |
|   postBuild = ''
 | |
|     ${optionalString withGtkWrapper "gappsWrapperArgsHook"}
 | |
| 
 | |
|     wrapProgram $out/bin/sway \
 | |
|       ${optionalString withGtkWrapper ''"''${gappsWrapperArgs[@]}"''} \
 | |
|       ${optionalString (extraOptions != []) "${concatMapStrings (x: " --add-flags " + x) extraOptions}"}
 | |
|   '';
 | |
| 
 | |
|   passthru = {
 | |
|     inherit (sway.passthru) tests;
 | |
|     providedSessions = [ "sway" ];
 | |
|   };
 | |
| 
 | |
|   inherit (sway) meta;
 | |
| }
 |