From 10a873acb9fa0c22c2967ed43e57cb0c02f93851 Mon Sep 17 00:00:00 2001 From: Jackson Delahunt Date: Sun, 29 Mar 2026 08:32:27 +0200 Subject: [PATCH] config: allow waylandsessions and xsessions to be set to null (#954) `waylandsessions` and `xsessions` are currently non-optional string fields, so there is no clean way to disable session type discovery for users who do not use Wayland or X11. Setting them to a nonexistent path works but produces log errors on every startup. This change makes both fields optional (`?[]const u8`), consistent with other nullable config fields such as `xinitrc`. Setting either to `null` in `config.ini` cleanly skips crawling for that session type with no side effects. Co-authored-by: Jackson Delahunt Reviewed-on: https://codeberg.org/fairyglade/ly/pulls/954 Reviewed-by: AnErrupTion Co-authored-by: Jackson Delahunt Co-committed-by: Jackson Delahunt --- res/config.ini | 2 ++ src/config/Config.zig | 4 ++-- src/main.zig | 38 +++++++++++++++++++++----------------- 3 files changed, 25 insertions(+), 19 deletions(-) diff --git a/res/config.ini b/res/config.ini index e3d4f93..52ed290 100644 --- a/res/config.ini +++ b/res/config.ini @@ -363,6 +363,7 @@ vi_mode = false # Wayland desktop environments # You can specify multiple directories, # e.g. $PREFIX_DIRECTORY/share/wayland-sessions:$PREFIX_DIRECTORY/local/share/wayland-sessions +# If null, Wayland sessions will not be shown waylandsessions = $PREFIX_DIRECTORY/share/wayland-sessions # Xorg server command @@ -384,6 +385,7 @@ xinitrc = ~/.xinitrc # Xorg desktop environments # You can specify multiple directories, # e.g. $PREFIX_DIRECTORY/share/xsessions:$PREFIX_DIRECTORY/local/share/xsessions +# If null, X11 sessions will not be shown xsessions = $PREFIX_DIRECTORY/share/xsessions # Custom Commands and Labels: diff --git a/src/config/Config.zig b/src/config/Config.zig index ec6d60a..1bff3c0 100644 --- a/src/config/Config.zig +++ b/src/config/Config.zig @@ -92,9 +92,9 @@ start_cmd: ?[]const u8 = null, text_in_center: bool = false, vi_default_mode: ViMode = .normal, vi_mode: bool = false, -waylandsessions: []const u8 = build_options.prefix_directory ++ "/share/wayland-sessions", +waylandsessions: ?[]const u8 = build_options.prefix_directory ++ "/share/wayland-sessions", x_cmd: []const u8 = build_options.prefix_directory ++ "/bin/X", x_vt: ?u8 = null, xauth_cmd: []const u8 = build_options.prefix_directory ++ "/bin/xauth", xinitrc: ?[]const u8 = "~/.xinitrc", -xsessions: []const u8 = build_options.prefix_directory ++ "/share/xsessions", +xsessions: ?[]const u8 = build_options.prefix_directory ++ "/share/xsessions", diff --git a/src/main.zig b/src/main.zig index 076bb33..38da21f 100644 --- a/src/main.zig +++ b/src/main.zig @@ -769,32 +769,36 @@ pub fn main() !void { var has_crawl_error = false; // Crawl session directories (Wayland, X11 and custom respectively) - var wayland_session_dirs = std.mem.splitScalar(u8, state.config.waylandsessions, ':'); - while (wayland_session_dirs.next()) |dir| { - crawl(&state.session, state.lang, dir, .wayland) catch |err| { - has_crawl_error = true; - try state.log_file.err( - "sys", - "failed to crawl wayland session directory '{s}': {s}", - .{ dir, @errorName(err) }, - ); - }; - } - - if (build_options.enable_x11_support) { - var x_session_dirs = std.mem.splitScalar(u8, state.config.xsessions, ':'); - while (x_session_dirs.next()) |dir| { - crawl(&state.session, state.lang, dir, .x11) catch |err| { + if (state.config.waylandsessions) |waylandsessions| { + var wayland_session_dirs = std.mem.splitScalar(u8, waylandsessions, ':'); + while (wayland_session_dirs.next()) |dir| { + crawl(&state.session, state.lang, dir, .wayland) catch |err| { has_crawl_error = true; try state.log_file.err( "sys", - "failed to crawl x11 session directory '{s}': {s}", + "failed to crawl wayland session directory '{s}': {s}", .{ dir, @errorName(err) }, ); }; } } + if (build_options.enable_x11_support) { + if (state.config.xsessions) |xsessions| { + var x_session_dirs = std.mem.splitScalar(u8, xsessions, ':'); + while (x_session_dirs.next()) |dir| { + crawl(&state.session, state.lang, dir, .x11) catch |err| { + has_crawl_error = true; + try state.log_file.err( + "sys", + "failed to crawl x11 session directory '{s}': {s}", + .{ dir, @errorName(err) }, + ); + }; + } + } + } + var custom_session_dirs = std.mem.splitScalar(u8, state.config.custom_sessions, ':'); while (custom_session_dirs.next()) |dir| { crawl(&state.session, state.lang, dir, .custom) catch |err| {