{ pkgs, config, lib, ... }:
with import ../support.nix { inherit lib config; }; {
  options.defaultApplications = lib.mkOption {
    type = lib.types.attrs;
    description = "Preferred applications";
  };
  config = rec {
    defaultApplications = {
      term = {
        cmd = "${pkgs.konsole}/bin/konsole";
        desktop = "konsole";
      };
      editor = {
        cmd = toString (pkgs.writeTextFile {
          name = "emacsclient";
          text = ''
            #!${pkgs.bash}/bin/bash
             ${pkgs.emacs}/bin/emacsclient -s /tmp/emacs1000/server -c $@'';
          executable = true;
        });
        desktop = "emacsclient";
      };
      browser = {
        cmd = "${pkgs.firefox-wayland}/bin/firefox";
        desktop = "firefox";
      };
      fm = {
        cmd = "${pkgs.dolphin}/bin/dolphin";
        desktop = "dolphin";
      };
      monitor = {
        cmd = "${pkgs.ksysguard}/bin/ksysguard";
        desktop = "ksysguard";
      };
      torrent = {
        cmd = "${pkgs.ktorrent}/bin/ktorrent";
        desktop = "ktorrent";
      };
      archive = {
        cmd = "${pkgs.ark}/bin/ark";
        desktop = "org.kde.ark";
      };
      mail = {
        cmd = "${pkgs.trojita}/bin/trojita";
        desktop = "trojita";
      };
      text_processor = {
        cmd = "${pkgs.abiword}/bin/abiword";
        desktop = "abiword";
      };
      spreadsheet = {
        cmd = "${pkgs.gnumeric}/bin/gnumeric";
        desktop = "gnumeric";
      };
    };
    home-manager.users.balsoft.xdg.configFile."mimeapps.list.home".text =

      with config.defaultApplications;
      let
        apps = builtins.mapAttrs (name: value: "${value.desktop}.desktop;") {
          "text/html" = browser;
          "image/*" = { desktop = "org.kde.gwenview"; };
          "application/x-bittorrent" = torrent;
          "application/zip" = archive;
          "application/rar" = archive;
          "application/7z" = archive;
          "application/*tar" = archive;
          "application/x-kdenlive" = archive;
          "x-scheme-handler/http" = browser;
          "x-scheme-handler/https" = browser;
          "x-scheme-handler/about" = browser;
          "x-scheme-handler/unknown" = browser;
          "x-scheme-handler/mailto" = mail;
          "application/pdf" = { desktop = "org.kde.okular"; };
          "application/vnd.openxmlformats-officedocument.wordprocessingml.document" =
            text_processor;
          "application/msword" = text_processor;
          "application/vnd.oasis.opendocument.text" = text_processor;
          "text/csv" = spreadsheet;
          "application/vnd.oasis.opendocument.spreadsheet" = spreadsheet;
          "text/plain" =
            editor; # This actually makes Emacs an editor for everything... XDG is wierd
        };
      in genIni {
        "Default Applications" = apps;
        "Added Associations" = apps;
      };
    home-manager.users.balsoft.xdg.configFile."filetypesrc".text = genIni {
      EmbedSettings = {
        "embed-application/*" = false;
        "embed-text/*" = false;
        "embed-text/plain" = false;
      };
    };
    home-manager.users.balsoft.home.activation.mimeapps = {
      before = [ ];
      after = [ "linkGeneration" ];
      data =
        "$DRY_RUN_CMD cp ~/.config/mimeapps.list.home ~/.config/mimeapps.list";
    };
  };
}
