diff --git a/modules/misc/xdg-autostart.nix b/modules/misc/xdg-autostart.nix new file mode 100644 index 000000000..f6b8b7e24 --- /dev/null +++ b/modules/misc/xdg-autostart.nix @@ -0,0 +1,40 @@ +{ config, lib, ... }: +let + inherit (builtins) baseNameOf listToAttrs map unsafeDiscardStringContext; + inherit (lib) literalExpression mkEnableOption mkIf mkOption types; + + cfg = config.xdg.autostart; + + /* "/nix/store/x-foo/application.desktop" -> { + name = "autostart/application.desktop"; + value = { source = "/nix/store/x-foo/application.desktop"; }; + } + */ + mapDesktopEntry = entry: { + name = "autostart/${unsafeDiscardStringContext (baseNameOf entry)}"; + value.source = entry; + }; +in { + meta.maintainers = with lib.maintainers; [ Scrumplex ]; + + options.xdg.autostart = { + enable = mkEnableOption "creation of XDG autostart entries"; + + entries = mkOption { + type = with types; listOf path; + description = '' + Paths to desktop files that should be linked to `XDG_CONFIG_HOME/autostart` + ''; + default = [ ]; + example = literalExpression '' + [ + "''${pkgs.evolution}/share/applications/org.gnome.Evolution.desktop" + ] + ''; + }; + }; + + config = mkIf (cfg.enable && cfg.entries != [ ]) { + xdg.configFile = listToAttrs (map mapDesktopEntry cfg.entries); + }; +} diff --git a/modules/modules.nix b/modules/modules.nix index ff48b21a5..a6a8e8d1b 100644 --- a/modules/modules.nix +++ b/modules/modules.nix @@ -40,6 +40,7 @@ let ./misc/uninstall.nix ./misc/version.nix ./misc/vte.nix + ./misc/xdg-autostart.nix ./misc/xdg-desktop-entries.nix ./misc/xdg-mime-apps.nix ./misc/xdg-mime.nix diff --git a/tests/modules/misc/xdg/autostart.nix b/tests/modules/misc/xdg/autostart.nix new file mode 100644 index 000000000..b93580414 --- /dev/null +++ b/tests/modules/misc/xdg/autostart.nix @@ -0,0 +1,20 @@ +{ pkgs, ... }: { + config = { + xdg.autostart = { + enable = true; + entries = [ + "${pkgs.evolution}/share/applications/org.gnome.Evolution.desktop" + "${pkgs.tdesktop}/share/applications/org.telegram.desktop.desktop" + ]; + }; + + nmt.script = '' + assertFileExists home-files/.config/autostart/org.gnome.Evolution.desktop + assertFileContent home-files/.config/autostart/org.gnome.Evolution.desktop \ + ${pkgs.evolution}/share/applications/org.gnome.Evolution.desktop + assertFileExists home-files/.config/autostart/org.telegram.desktop.desktop + assertFileContent home-files/.config/autostart/org.telegram.desktop.desktop \ + ${pkgs.tdesktop}/share/applications/org.telegram.desktop.desktop + ''; + }; +} diff --git a/tests/modules/misc/xdg/default.nix b/tests/modules/misc/xdg/default.nix index bc2f9a9df..7a7223354 100644 --- a/tests/modules/misc/xdg/default.nix +++ b/tests/modules/misc/xdg/default.nix @@ -6,4 +6,5 @@ xdg-default-locations = ./default-locations.nix; xdg-user-dirs-null = ./user-dirs-null.nix; xdg-portal = ./portal.nix; + xdg-autostart = ./autostart.nix; }