{ config, lib, pkgs, ... }:
with lib;
let
runXdgAutostart = config.services.xserver.desktopManager.runXdgAutostartIfNone;
in
{
options = {
services.xserver.desktopManager.runXdgAutostartIfNone = mkOption {
type = types.bool;
default = false;
description = ''
Whether to run XDG autostart files for sessions without a desktop manager
(with only a window manager), these sessions usually don't handle XDG
autostart files by default.
Some services like and
use XDG autostart files to start.
If this option is not set to true and you are using
a window manager without a desktop manager, you need to manually start
them or running dex somewhere.
'';
};
};
config = mkMerge [
{
services.xserver.desktopManager.session = [
{
name = "none";
start = optionalString runXdgAutostart ''
/run/current-system/systemd/bin/systemctl --user start xdg-autostart-if-no-desktop-manager.target
'';
}
];
}
(mkIf runXdgAutostart {
systemd.user.targets.xdg-autostart-if-no-desktop-manager = {
description = "Run XDG autostart files";
# From `plasma-workspace`, `share/systemd/user/plasma-workspace@.target`.
requires = [ "xdg-desktop-autostart.target" "graphical-session.target" ];
before = [ "xdg-desktop-autostart.target" "graphical-session.target" ];
bindsTo = [ "graphical-session.target" ];
};
})
];
}