feat: support Xorg & better auth logic (#80)

Co-authored-by: grialion <48643945+grialion@users.noreply.github.com>
This commit is contained in:
2026-01-19 21:17:45 +01:00
committed by GitHub
parent d65bd7a8ee
commit 7e7a297e2e
28 changed files with 842 additions and 351 deletions

View File

@@ -2,21 +2,71 @@
#define SESSIONSH_
#include <sys/types.h>
#include <unistd.h>
#include "desktop_exec.h"
#include "macros.h"
#include "util.h"
enum session_type {
enum SessionType {
XORG,
WAYLAND,
SHELL,
};
enum ExecType {
EXEC_SHELL,
EXEC_DESKTOP,
};
struct desktop_exec {
char* NULLABLE* NNULLABLE args;
int arg_count;
};
struct session_exec {
enum ExecType typ;
union {
char* NNULLABLE shell;
struct desktop_exec desktop;
};
};
static inline struct session_exec session_exec_shell(char* NNULLABLE shell) {
return (struct session_exec){
.typ = EXEC_SHELL,
.shell = shell,
};
}
static inline struct session_exec session_exec_desktop(
int arg_count, char* NULLABLE* NNULLABLE args) {
return (struct session_exec){
.typ = EXEC_DESKTOP,
.desktop =
{
.args = args,
.arg_count = arg_count,
},
};
}
static inline int session_exec_exec(struct session_exec* NNULLABLE exec,
char* NULLABLE* NNULLABLE envlist) {
switch (exec->typ) {
case EXEC_SHELL:
return execle(exec->shell, exec->shell, NULL, envlist);
case EXEC_DESKTOP:
return execvpe_desktop(exec->desktop.args, envlist);
default:
__builtin_unreachable();
}
}
struct session {
char* NNULLABLE name;
char* NNULLABLE exec;
char* NULLABLE tryexec;
enum session_type type;
struct session_exec exec;
enum SessionType type;
};
struct Vector get_avaliable_sessions();