mirror of
https://github.com/ilyakooo0/nixpkgs.git
synced 2024-12-29 23:07:36 +03:00
nixos/desktop-manager/none: add option to run XDG autostart files
`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.
This commit is contained in:
parent
671960c878
commit
45ba086ea5
@ -1798,6 +1798,15 @@
|
||||
configuration.
|
||||
</para>
|
||||
</listitem>
|
||||
<listitem>
|
||||
<para>
|
||||
The option
|
||||
<link linkend="opt-services.xserver.desktopManager.runXdgAutostartIfNone">services.xserver.desktopManager.runXdgAutostartIfNone</link>
|
||||
was added in order to automatically run XDG autostart files
|
||||
for sessions without a desktop manager. This replaces helpers
|
||||
like the <literal>dex</literal> package.
|
||||
</para>
|
||||
</listitem>
|
||||
<listitem>
|
||||
<para>
|
||||
A new module was added for the Envoy reverse proxy, providing
|
||||
|
@ -656,6 +656,11 @@ In addition to numerous new and upgraded packages, this release has the followin
|
||||
|
||||
- The `services.stubby` module was converted to a [settings-style](https://github.com/NixOS/rfcs/blob/master/rfcs/0042-config-option.md) configuration.
|
||||
|
||||
- The option
|
||||
[services.xserver.desktopManager.runXdgAutostartIfNone](#opt-services.xserver.desktopManager.runXdgAutostartIfNone)
|
||||
was added in order to automatically run XDG autostart files for sessions without a desktop manager.
|
||||
This replaces helpers like the `dex` package.
|
||||
|
||||
- A new module was added for the Envoy reverse proxy, providing the options `services.envoy.enable` and `services.envoy.settings`.
|
||||
|
||||
- The option `services.duplicati.dataDir` has been added to allow changing the location of duplicati's files.
|
||||
|
@ -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" ];
|
||||
};
|
||||
})
|
||||
];
|
||||
}
|
||||
|
@ -591,6 +591,7 @@ in
|
||||
xautolock = handleTest ./xautolock.nix {};
|
||||
xfce = handleTest ./xfce.nix {};
|
||||
xmonad = handleTest ./xmonad.nix {};
|
||||
xmonad-xdg-autostart = handleTest ./xmonad-xdg-autostart.nix {};
|
||||
xrdp = handleTest ./xrdp.nix {};
|
||||
xss-lock = handleTest ./xss-lock.nix {};
|
||||
xterm = handleTest ./xterm.nix {};
|
||||
|
35
nixos/tests/xmonad-xdg-autostart.nix
Normal file
35
nixos/tests/xmonad-xdg-autostart.nix
Normal file
@ -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
Block a user