From 99b75f99dfaaefc45ae2c9df5b5818149f26baa3 Mon Sep 17 00:00:00 2001 From: Nicolas Berbiche Date: Sun, 15 Nov 2020 17:58:54 -0500 Subject: [PATCH] sway: validate configuration at build time PR #1579 --- .../services/window-managers/i3-sway/sway.nix | 17 ++++++++++++++++- .../window-managers/sway/sway-default.conf | 2 +- .../window-managers/sway/sway-default.nix | 3 ++- .../sway/sway-followmouse-legacy.nix | 6 +----- .../window-managers/sway/sway-followmouse.nix | 3 +-- .../window-managers/sway/sway-post-2003.nix | 3 ++- 6 files changed, 23 insertions(+), 11 deletions(-) diff --git a/modules/services/window-managers/i3-sway/sway.nix b/modules/services/window-managers/i3-sway/sway.nix index 14d82d267..2e85c0f73 100644 --- a/modules/services/window-managers/i3-sway/sway.nix +++ b/modules/services/window-managers/i3-sway/sway.nix @@ -290,6 +290,21 @@ let '' else "") + cfg.extraConfig); + # Validates the Sway configuration + checkSwayConfig = + pkgs.runCommandLocal "sway-config" { buildInputs = [ cfg.package ]; } '' + # We have to make sure the wrapper does not start a dbus session + export DBUS_SESSION_BUS_ADDRESS=1 + + # A zero exit code means Sway succesfully validated the configuration + sway --config ${configFile} --validate --debug || { + echo "Sway configuration validation failed" + echo "For a verbose log of the failure, run 'sway --config ${configFile} --validate --debug'" + exit 1 + }; + cp ${configFile} $out + ''; + defaultSwayPackage = pkgs.sway.override { extraSessionCommands = cfg.extraSessionCommands; extraOptions = cfg.extraOptions; @@ -394,7 +409,7 @@ in { home.packages = optional (cfg.package != null) cfg.package ++ optional cfg.xwayland pkgs.xwayland; xdg.configFile."sway/config" = { - source = configFile; + source = checkSwayConfig; onChange = '' swaySocket=''${XDG_RUNTIME_DIR:-/run/user/$UID}/sway-ipc.$UID.$(${pkgs.procps}/bin/pgrep -x sway || ${pkgs.coreutils}/bin/true).sock if [ -S $swaySocket ]; then diff --git a/tests/modules/services/window-managers/sway/sway-default.conf b/tests/modules/services/window-managers/sway/sway-default.conf index da5b1f47e..5d3c5c609 100644 --- a/tests/modules/services/window-managers/sway/sway-default.conf +++ b/tests/modules/services/window-managers/sway/sway-default.conf @@ -92,7 +92,7 @@ bar { hidden_state hide position bottom status_command @i3status@/bin/i3status - swaybar_command @sway/bin/swaybar + swaybar_command @sway@/bin/swaybar workspace_buttons yes strip_workspace_numbers no tray_output primary diff --git a/tests/modules/services/window-managers/sway/sway-default.nix b/tests/modules/services/window-managers/sway/sway-default.nix index 0ccedbfda..7c7aabc48 100644 --- a/tests/modules/services/window-managers/sway/sway-default.nix +++ b/tests/modules/services/window-managers/sway/sway-default.nix @@ -10,7 +10,8 @@ in { config = { wayland.windowManager.sway = { enable = true; - package = dummy-package // { outPath = "@sway"; }; + package = pkgs.writeScriptBin "sway" "" // { outPath = "@sway@"; }; + # overriding findutils causes issues config.menu = "${pkgs.dmenu}/bin/dmenu_run"; }; diff --git a/tests/modules/services/window-managers/sway/sway-followmouse-legacy.nix b/tests/modules/services/window-managers/sway/sway-followmouse-legacy.nix index 9ed0ceaf0..306202bad 100644 --- a/tests/modules/services/window-managers/sway/sway-followmouse-legacy.nix +++ b/tests/modules/services/window-managers/sway/sway-followmouse-legacy.nix @@ -10,7 +10,7 @@ in { config = { wayland.windowManager.sway = { enable = true; - package = dummy-package // { outPath = "@sway"; }; + package = pkgs.writeScriptBin "sway" ""; config = { focus.followMouse = false; @@ -26,10 +26,6 @@ in { outPath = "@rxvt-unicode-unwrapped@"; }; sway = dummy-package // { outPath = "@sway@"; }; - sway-unwrapped = dummy-package // { - outPath = "@sway-unwrapped@"; - version = "1"; - }; swaybg = dummy-package // { outPath = "@swaybg@"; }; xwayland = dummy-package // { outPath = "@xwayland@"; }; }) diff --git a/tests/modules/services/window-managers/sway/sway-followmouse.nix b/tests/modules/services/window-managers/sway/sway-followmouse.nix index 8d54eccf7..41c27510e 100644 --- a/tests/modules/services/window-managers/sway/sway-followmouse.nix +++ b/tests/modules/services/window-managers/sway/sway-followmouse.nix @@ -10,7 +10,7 @@ in { config = { wayland.windowManager.sway = { enable = true; - package = dummy-package // { outPath = "@sway"; }; + package = pkgs.writeScriptBin "sway" "" // { outPath = "@sway@"; }; config = { focus.followMouse = "always"; @@ -26,7 +26,6 @@ in { outPath = "@rxvt-unicode-unwrapped@"; }; sway = dummy-package // { outPath = "@sway@"; }; - sway-unwrapped = dummy-package // { version = "1"; }; swaybg = dummy-package // { outPath = "@swaybg@"; }; xwayland = dummy-package // { outPath = "@xwayland@"; }; }) diff --git a/tests/modules/services/window-managers/sway/sway-post-2003.nix b/tests/modules/services/window-managers/sway/sway-post-2003.nix index 740e7e526..4006b6a8a 100644 --- a/tests/modules/services/window-managers/sway/sway-post-2003.nix +++ b/tests/modules/services/window-managers/sway/sway-post-2003.nix @@ -12,7 +12,8 @@ in { wayland.windowManager.sway = { enable = true; - package = dummy-package // { outPath = "@sway"; }; + package = pkgs.writeScriptBin "sway" "" // { outPath = "@sway@"; }; + # overriding findutils causes issues config.menu = "${pkgs.dmenu}/bin/dmenu_run"; };