{ pkgs, lib, config, ... }:

with lib;
{
  services.emacs = {
    enable = true;
    package = with pkgs; ((emacsPackagesFor emacsPgtk).emacsWithPackages 
      (epkgs: with epkgs; [
        vterm
        melpaPackages.magit
        pdf-tools
        consult-eglot
        org
        melpaPackages.org-roam
        melpaPackages.org-ql
        melpaPackages.dired-sidebar
        denote
        denote-refs
        command-log-mode
        all-the-icons
        doom-modeline
        doom-themes
        rainbow-delimiters
        smartparens
        aggressive-indent
        adaptive-wrap
        which-key
        exec-path-from-shell
        no-littering
        languagetool
        rustic
        flycheck-clj-kondo
        clojure-mode
        cider
        melpaPackages.evil
        melpaPackages.evil-collection
        general
        evil-escape
        evil-surround
        evil-org
        org-super-agenda
        websocket
        org-roam-ui
        org-present
        org-modern
        org-re-reveal
        org-re-reveal-ref
        org-re-reveal-citeproc
        org-web-tools
        ox-reveal
        ox-hugo
        oer-reveal
        unicode-fonts
        emojify
        undo-tree
        visual-fill-column
        toc-org
        pulsar
        vertico
        melpaPackages.consult
        melpaPackages.marginalia
        all-the-icons-completion
        melpaPackages.embark
        melpaPackages.embark-consult
        corfu
        jinx
        eat
        kind-icon
        melpaPackages.orderless
        melpaPackages.cape
        devdocs
        nano-theme
        nano-modeline
        nano-agenda
        yasnippet
        wgrep
        melpaPackages.tempel
        melpaPackages.tempel-collection
        projectile
        simple-httpd
        avy
        evil-avy
        ace-link
        ace-window
        helpful
        format-all
        web-mode
        php-mode
        lua-mode
        nix-mode
        cmake-mode
        fennel-mode
        yaml-mode
        typescript-mode
        docker
        # docker-tramp
        fish-mode
        markdown-mode
        qml-mode
        csv-mode
        restclient
        ob-restclient
        dart-mode
        flutter
        hover
        direnv
        all-the-icons-dired
        dired-single
        dired-rainbow
        diredfl
        dired-rsync
        fd-dired
        ledger-mode
        org-msg
        calfw
        calfw-org
        calfw-ical
        org-caldav
        org-wild-notifier
        sly
        nov
        elfeed
        elfeed-org
        elfeed-protocol
        bongo
        emms
        transmission
        hass
        pass
        password-store
        password-store-otp
        plz
        elpaPackages.ement
        mastodon
        qrencode
        gcmh
        use-package
        esh-autosuggest
        melpaPackages.org-ai
        melpaPackages.gptel
        pkgs.mu
        pkgs.openjdk
        pkgs.languagetool
      ]));
    defaultEditor = true;
  };
}