diff --git a/modules/nixos/default.nix b/modules/nixos/default.nix index 758144eb..2f78ffc9 100644 --- a/modules/nixos/default.nix +++ b/modules/nixos/default.nix @@ -16,6 +16,7 @@ ./services/vouch-proxy.nix ./services/yt-dlp.nix ./xdg/autostart-entries.nix + ./xdg/desktop-entries.nix ./xdg/mime-desktop-specific.nix ./virtualisation/oci-containers ]; diff --git a/modules/nixos/xdg/desktop-entries.nix b/modules/nixos/xdg/desktop-entries.nix new file mode 100644 index 00000000..f536c288 --- /dev/null +++ b/modules/nixos/xdg/desktop-entries.nix @@ -0,0 +1,42 @@ +{ config, lib, pkgs, ... }: + +let + cfg = config.xdg.desktopEntries; + + xdgDesktopEntrySubmodule = { name, ... }: { + freeformType = with lib.types; attrsOf anything; + }; +in +{ + options.xdg.desktopEntries = lib.mkOption { + type = with lib.types; attrsOf (submodule xdgDesktopEntrySubmodule); + default = { }; + description = '' + A set of XDG desktop entries to be exported as part of the applications + list (i.e., {file}`$out/share/applications`) to the environment. + ''; + example = lib.literalExpression '' + { + kando = { + name = "kando"; + desktopName = "Kando"; + exec = lib.getExe pkgs.kando; + icon = "kando"; + genericName = "Pie Menu"; + }; + } + ''; + }; + + config = lib.mkIf (cfg != { }) { + environment.systemPackages = + let + mkXDGDesktopEntry = _: v: + pkgs.makeDesktopItem (v // { + destination = "/share/applications"; + }); + in + lib.mapAttrsToList mkXDGDesktopEntry cfg; + }; +} +