`fcitx5` and `service.earlyoom` rely on use XDG autostart files to start. But for X session with only window manager and no desktop manager (`none` is used), no one can start them. This options is added to run these autostart files for sessions without desktop manager to make other services just work.main
parent
671960c878
commit
45ba086ea5
@ -1,7 +1,46 @@ |
||||
{ config, lib, pkgs, ... }: |
||||
with lib; |
||||
let |
||||
runXdgAutostart = config.services.xserver.desktopManager.runXdgAutostartIfNone; |
||||
in |
||||
{ |
||||
services.xserver.desktopManager.session = |
||||
[ { name = "none"; |
||||
start = ""; |
||||
} |
||||
]; |
||||
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 <option>i18n.inputMethod</option> and |
||||
<option>service.earlyoom</option> use XDG autostart files to start. |
||||
If this option is not set to <literal>true</literal> and you are using |
||||
a window manager without a desktop manager, you need to manually start |
||||
them or running <package>dex</package> 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" ]; |
||||
}; |
||||
}) |
||||
]; |
||||
} |
||||
|
@ -0,0 +1,35 @@ |
||||
import ./make-test-python.nix ({ lib, ... }: { |
||||
name = "xmonad-xdg-autostart"; |
||||
meta.maintainers = with lib.maintainers; [ oxalica ]; |
||||
|
||||
nodes.machine = { pkgs, config, ... }: { |
||||
imports = [ ./common/x11.nix ./common/user-account.nix ]; |
||||
test-support.displayManager.auto.user = "alice"; |
||||
services.xserver.displayManager.defaultSession = "none+xmonad"; |
||||
services.xserver.windowManager.xmonad.enable = true; |
||||
services.xserver.desktopManager.runXdgAutostartIfNone = true; |
||||
|
||||
environment.systemPackages = [ |
||||
(pkgs.writeTextFile { |
||||
name = "test-xdg-autostart"; |
||||
destination = "/etc/xdg/autostart/test-xdg-autostart.desktop"; |
||||
text = '' |
||||
[Desktop Entry] |
||||
Name=test-xdg-autoatart |
||||
Type=Application |
||||
Terminal=false |
||||
Exec=${pkgs.coreutils}/bin/touch ${config.users.users.alice.home}/xdg-autostart-executed |
||||
''; |
||||
}) |
||||
]; |
||||
}; |
||||
|
||||
testScript = { nodes, ... }: |
||||
let |
||||
user = nodes.machine.config.users.users.alice; |
||||
in |
||||
'' |
||||
machine.wait_for_x() |
||||
machine.wait_for_file("${user.home}/xdg-autostart-executed") |
||||
''; |
||||
}) |
Loading…
Reference in new issue