{ pkgs, lib, config, ... }:
let
mkStrOption = lib.mkOption { type = lib.types.str; };
mkStrNullOption = lib.mkOption { type = lib.types.nullOr lib.types.str; default = null; };
desktopItems = lib.mapAttrs (name: conf: (pkgs.makeDesktopItem {
inherit name;
inherit (conf) desktopName exec icon path;
}) + "/share/applications/${name}.desktop") config.desktopItems.items;
in {
options = {
desktopItems = {
enable = lib.mkEnableOption "desktop items";
items = lib.mkOption {
type = lib.types.attrsOf (lib.types.submodule ({ config, ... }: {
options = {
desktopName = mkStrOption;
exec = mkStrOption;
icon = mkStrNullOption;
path = mkStrNullOption;
};
}));
default = [];
};
};
};
config = lib.mkIf config.desktopItems.enable {
home.file = lib.mapAttrs'
(name: conf:
lib.nameValuePair
".local/share/applications/${name}.desktop"
{ source = conf; }
)
desktopItems;
};
}