diff --git a/sway/commands/exec_always.c b/sway/commands/exec_always.c
index af4e4965..af4bd739 100644
--- a/sway/commands/exec_always.c
+++ b/sway/commands/exec_always.c
@@ -51,7 +51,41 @@ struct cmd_results *cmd_exec_always(int argc, char **argv) {
 	if ((pid = fork()) == 0) {
 		// Fork child process again
 		setsid();
+
 		if ((*child = fork()) == 0) {
+			// Acquire the current PATH
+			char *path = getenv("PATH");
+			const char *extra_path = ":/usr/lib/sway";
+			const size_t extra_size = sizeof("/usr/lib/sway") + 1;
+
+			if (!path) {
+				size_t n = confstr(_CS_PATH, NULL, 0);
+				path = malloc(n + extra_size);
+				if (!path) {
+					return cmd_results_new(CMD_FAILURE, "exec_always", "Unable to allocate PATH");
+				}
+				confstr(_CS_PATH, path, n);
+
+			} else {
+				size_t n = strlen(path) + 1;
+				char *tmp = malloc(n + extra_size);
+				if (!tmp) {
+					return cmd_results_new(CMD_FAILURE, "exec_always", "Unable to allocate PATH");
+				}
+
+				strncpy(tmp, path, n);
+				path = tmp;
+			}
+
+			// Append /usr/lib/sway to PATH
+			strcat(path, extra_path);
+			if (!setenv("PATH", path, 1)) {
+				free(path);
+				return cmd_results_new(CMD_FAILURE, "exec_always", "Unable to set PATH");
+			}
+			free(path);
+
+			// Execute the command
 			execl("/bin/sh", "/bin/sh", "-c", cmd, (void *)NULL);
 			// Not reached
 		}