diff options
author | Elyhaka <57923898+Elyhaka@users.noreply.github.com> | 2019-12-08 13:56:56 +0100 |
---|---|---|
committer | Michael Weiss <dev.primeos@gmail.com> | 2019-12-21 21:17:21 +0100 |
commit | d467c59825b94185eef55765ee78d9350cec3472 (patch) | |
tree | 12ff1a244c0c9079374df7dd9e0befef974e1280 /nixos | |
parent | 83bfedb38bbc270854d957fa2f6d3cfd95f4b9d0 (diff) | |
download | nixpkgs-d467c59825b94185eef55765ee78d9350cec3472.tar nixpkgs-d467c59825b94185eef55765ee78d9350cec3472.tar.gz nixpkgs-d467c59825b94185eef55765ee78d9350cec3472.tar.bz2 nixpkgs-d467c59825b94185eef55765ee78d9350cec3472.tar.lz nixpkgs-d467c59825b94185eef55765ee78d9350cec3472.tar.xz nixpkgs-d467c59825b94185eef55765ee78d9350cec3472.tar.zst nixpkgs-d467c59825b94185eef55765ee78d9350cec3472.zip |
sway: refactor with a wrapper
Diffstat (limited to 'nixos')
-rw-r--r-- | nixos/modules/programs/sway.nix | 67 |
1 files changed, 45 insertions, 22 deletions
diff --git a/nixos/modules/programs/sway.nix b/nixos/modules/programs/sway.nix index d685a525932..e2a4018e902 100644 --- a/nixos/modules/programs/sway.nix +++ b/nixos/modules/programs/sway.nix @@ -4,27 +4,32 @@ with lib; let cfg = config.programs.sway; - swayPackage = pkgs.sway; - swayWrapped = pkgs.writeShellScriptBin "sway" '' - set -o errexit - - if [ ! "$_SWAY_WRAPPER_ALREADY_EXECUTED" ]; then - export _SWAY_WRAPPER_ALREADY_EXECUTED=1 - ${cfg.extraSessionCommands} - fi + 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. + ''; + }; + }; - if [ "$DBUS_SESSION_BUS_ADDRESS" ]; then - export DBUS_SESSION_BUS_ADDRESS - exec ${swayPackage}/bin/sway "$@" - else - exec ${pkgs.dbus}/bin/dbus-run-session ${swayPackage}/bin/sway "$@" - fi - ''; - swayJoined = pkgs.symlinkJoin { - name = "sway-joined"; - paths = [ swayWrapped swayPackage ]; - passthru.providedSessions = [ "sway" ]; + swayPackage = pkgs.sway.override { + extraSessionCommands = cfg.extraSessionCommands; + withBaseWrapper = cfg.wrapperFeatures.base; + withGtkWrapper = cfg.wrapperFeatures.gtk; }; in { options.programs.sway = { @@ -36,6 +41,15 @@ in { Please have a look at the "extraSessionCommands" example for running programs natively under Wayland''; + wrapperFeatures = mkOption { + type = wrapperOptions; + default = { }; + example = { gtk = true; }; + description = '' + Attribute set of features to enable in the wrapper. + ''; + }; + extraSessionCommands = mkOption { type = types.lines; default = ""; @@ -56,7 +70,7 @@ in { extraPackages = mkOption { type = with types; listOf package; default = with pkgs; [ - swaylock swayidle swaybg + swaylock swayidle xwayland rxvt_unicode dmenu ]; defaultText = literalExample '' @@ -76,8 +90,17 @@ in { }; config = mkIf cfg.enable { + assertions = [ + { + assertion = cfg.extraSessionCommands != "" -> cfg.wrapperFeatures.base; + message = '' + The extraSessionCommands for Sway will not be run if + wrapperFeatures.base is disabled. + ''; + } + ]; environment = { - systemPackages = [ swayJoined ] ++ cfg.extraPackages; + systemPackages = [ swayPackage ] ++ cfg.extraPackages; etc = { "sway/config".source = mkOptionDefault "${swayPackage}/etc/sway/config"; #"sway/security.d".source = mkOptionDefault "${swayPackage}/etc/sway/security.d/"; @@ -89,7 +112,7 @@ in { fonts.enableDefaultFonts = mkDefault true; programs.dconf.enable = mkDefault true; # To make a Sway session available if a display manager like SDDM is enabled: - services.xserver.displayManager.sessionPackages = [ swayJoined ]; + services.xserver.displayManager.sessionPackages = [ swayPackage ]; }; meta.maintainers = with lib.maintainers; [ gnidorah primeos colemickens ]; |