nixos-config/modules/home-manager/xdg-autostart.nix

96 lines
2.6 KiB
Nix
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

{
config,
pkgs,
lib,
...
}:
let
cfg = config.xdg.autoStart;
inherit (lib) hm types;
in
{
options.xdg.autoStart = {
packages = lib.mkOption {
description = ''
List of packages which should be autostarted.
This module tries to select the packages default desktop file,
which is either described by its .desktopItem attribute
or by its first entry of its .desktopItems attribute.
Users who want to specifically select a certain desktop file
or who want to write their own
can make use of the {option}`xdg.autoStart.desktopItems` option.
'';
type = types.listOf types.package;
default = [ ];
example = lib.literalExpression ''
with pkgs; [
pkgs.trilium-desktop
]
'';
};
desktopItems = lib.mkOption {
description = ''
List of desktop files which should be autostarted.
Users should prefer to use {option}`xdg.autoStart.packages`
and only use this option in case
they want to specifically
select a packages desktop item
or want to create their own desktop item.
Be warned, this may shadow entries of {option}`xdg.autoStart.packages`.
'';
type = types.attrsOf (types.unspecified); # TODO replace unspecified
default = { };
# TODO improve example, take one where it would make sense to use this option
example = lib.literalExpression ''
{
discord = pkgs.discord.desktopItem
firefox-custom = makeDesktopItem {
exec = "firefox -P custom";
};
}
'';
};
};
config =
let
# helpers
retrieveDesktopItem = (
pkg:
if pkg ? desktopItem then
pkg.desktopItem
else if pkg ? desktopItems && pkg.desktopItems != [ ] then
builtins.head pkg.desktopItems
else
abort "package '${pkg.pname}' is missing a desktop file"
);
emulateDesktopItem = (pkg: lib.nameValuePair pkg.pname (retrieveDesktopItem pkg));
embedDesktopItem = (
name: deskItem:
lib.nameValuePair "autostart/${name}.desktop" {
source = "${deskItem}/share/applications/${deskItem.name}";
}
);
# parse opts
desktopItemsPackages = builtins.listToAttrs (map emulateDesktopItem cfg.packages);
desktopItems = desktopItemsPackages // cfg.desktopItems;
in
{
assertions = [
(hm.assertions.assertPlatform "xdg.autoStart" pkgs lib.platforms.linux)
];
xdg.configFile = lib.attrsets.mapAttrs' embedDesktopItem desktopItems;
};
}