diff --git a/modules/services/window-managers/i3-sway/lib/functions.nix b/modules/services/window-managers/i3-sway/lib/functions.nix index 38966faf1..5f661ca89 100644 --- a/modules/services/window-managers/i3-sway/lib/functions.nix +++ b/modules/services/window-managers/i3-sway/lib/functions.nix @@ -150,7 +150,8 @@ rec { windowCommandsStr = { command, criteria, ... }: "for_window ${criteriaStr criteria} ${command}"; workspaceOutputStr = item: - ''workspace "${item.workspace}" output "${item.output}"''; + let outputs = concatMapStringsSep " " strings.escapeNixString item.output; + in ''workspace "${item.workspace}" output ${outputs}''; indent = list: { includesWrapper ? true, level ? 1 }: diff --git a/modules/services/window-managers/i3-sway/lib/options.nix b/modules/services/window-managers/i3-sway/lib/options.nix index 6c9f38da4..650b42c5b 100644 --- a/modules/services/window-managers/i3-sway/lib/options.nix +++ b/modules/services/window-managers/i3-sway/lib/options.nix @@ -912,11 +912,12 @@ in { }; output = mkOption { - type = str; + type = with types; either str (listOf str); default = ""; + apply = lists.toList; example = "eDP"; description = '' - Name of the output from + Name(s) of the output(s) from ${if isSway then "swaymsg" else "i3-msg"} -t get_outputs . ''; diff --git a/tests/modules/services/window-managers/i3/i3-workspace-output-expected.conf b/tests/modules/services/window-managers/i3/i3-workspace-output-expected.conf index c4d36b656..d765ac175 100644 --- a/tests/modules/services/window-managers/i3/i3-workspace-output-expected.conf +++ b/tests/modules/services/window-managers/i3/i3-workspace-output-expected.conf @@ -98,3 +98,4 @@ workspace "1" output "eDP" workspace "ABC" output "DP" workspace "3: Test" output "HDMI" workspace "!"§$%&/(){}[]=?\*#<>-_.:,;²³" output "DVI" +workspace "Multiple" output "DVI" "HDMI" "DP" diff --git a/tests/modules/services/window-managers/i3/i3-workspace-output.nix b/tests/modules/services/window-managers/i3/i3-workspace-output.nix index 8dcae4f81..4e31acdef 100644 --- a/tests/modules/services/window-managers/i3/i3-workspace-output.nix +++ b/tests/modules/services/window-managers/i3/i3-workspace-output.nix @@ -6,6 +6,7 @@ let ws2 = "ABC"; ws3 = "3: Test"; ws4 = ''!"§$%&/(){}[]=?\*#<>-_.:,;²³''; + ws5 = "Multiple"; }; in { @@ -31,6 +32,10 @@ in { workspace = "${i3.ws4}"; output = "DVI"; } + { + workspace = "${i3.ws5}"; + output = [ "DVI" "HDMI" "DP" ]; + } ]; }; diff --git a/tests/modules/services/window-managers/sway/sway-workspace-output-expected.conf b/tests/modules/services/window-managers/sway/sway-workspace-output-expected.conf index 2e02cec60..c19373d1e 100644 --- a/tests/modules/services/window-managers/sway/sway-workspace-output-expected.conf +++ b/tests/modules/services/window-managers/sway/sway-workspace-output-expected.conf @@ -107,4 +107,5 @@ workspace "1" output "eDP" workspace "ABC" output "DP" workspace "3: Test" output "HDMI" workspace "!"§$%&/(){}[]=?\*#<>-_.:,;²³" output "DVI" +workspace "Multiple" output "DVI" "HDMI" "DP" exec "/nix/store/00000000000000000000000000000000-dbus/bin/dbus-update-activation-environment --systemd DISPLAY WAYLAND_DISPLAY SWAYSOCK XDG_CURRENT_DESKTOP XDG_SESSION_TYPE NIXOS_OZONE_WL; systemctl --user start sway-session.target" diff --git a/tests/modules/services/window-managers/sway/sway-workspace-output.nix b/tests/modules/services/window-managers/sway/sway-workspace-output.nix index e096aa1f4..47fb7527e 100644 --- a/tests/modules/services/window-managers/sway/sway-workspace-output.nix +++ b/tests/modules/services/window-managers/sway/sway-workspace-output.nix @@ -6,6 +6,7 @@ let ws2 = "ABC"; ws3 = "3: Test"; ws4 = ''!"§$%&/(){}[]=?\*#<>-_.:,;²³''; + ws5 = "Multiple"; }; in { @@ -34,6 +35,10 @@ in { workspace = "${i3.ws4}"; output = "DVI"; } + { + workspace = "${i3.ws5}"; + output = [ "DVI" "HDMI" "DP" ]; + } ]; };