{
  pkgs ? import <nixpkgs> {},
  emacs ? pkgs.emacs,
  stdenv,
}:

let
  myEmacs = emacs;
  emacsWithPackages = (pkgs.emacsPackagesNgGen myEmacs).emacsWithPackages;

  elpaBuild = import <nixpkgs/pkgs/build-support/emacs/elpa.nix> {
    inherit (pkgs) fetchurl lib stdenv texinfo;
    emacs = myEmacs;
  };

  hook-helpers = pkgs.callPackage ({ elpaBuild, fetchurl, lib }: elpaBuild {
    pname = "hook-helpers";
    version = "1.1";
    src = fetchurl {
      url = "http://elpa.gnu.org/packages/hook-helpers-1.1.tar";
      sha256 = "0xvabl0lfc0ijr98clsyh0bqk2fdi1ncl0knn58j2p30gn9958i5";
    };
    packageRequires = [];
    meta = {
      homepage = https://savannah.nongnu.org/projects/hook-helpers-el/;
      license = lib.licenses.free;
    };
  }) {
    inherit elpaBuild;
    inherit (pkgs) fetchurl lib;
  };

  dired-du = pkgs.callPackage ({ elpaBuild, fetchurl, lib }: elpaBuild {
    pname = "dired-du";
    version = "0.5";
    src = fetchurl {
      url = "http://elpa.gnu.org/packages/dired-du-0.5.tar";
      sha256 = "09yj37p2fa5f81fqrzwghjkyy2ydsf4rbkfwpn2yyvzd5nd97bpl";
    };
    packageRequires = [];
    meta = {
      homepage = https://github.com/calancha/dired-du;
      license = lib.licenses.free;
    };
  }) {
    inherit elpaBuild;
    inherit (pkgs) fetchurl lib;
  };
in
  emacsWithPackages (epkgs: (with epkgs.melpaStablePackages; [
    diminish
    bind-key
    use-package
  ]) ++ (with epkgs.melpaPackages; [
    ace-link
    ace-window
    add-node-modules-path
    ag
    async
    auto-compile
    avy
    bbdb
    beginend
    cider
    clj-refactor
    clojure-mode
    cmd-to-echo
    coffee-mode
    command-log-mode
    company
    company-go
    company-restclient
    company-tern
    company-web
    counsel
    counsel-projectile
    crux
    cyphejor
    dired-narrow
    dired-subtree
    discover-my-major
    dockerfile-mode
    dtrt-indent
    dumb-jump
    easy-hugo
    editorconfig
    elisp-slime-nav
    emmet-mode
    ensime
    exec-path-from-shell
    expand-region
    eyebrowse
    flow-minor-mode
    flycheck
    flycheck-flow
    flycheck-pos-tip
    flycheck-vale
    geiser
    ggtags
    ghq
    git-gutter-fringe
    git-messenger
    git-timemachine
    go-eldoc
    go-mode
    go-projectile
    goto-chg
    haskell-mode
    highlight-stages
    imenu-anywhere
    indium
    jinja2-mode
    js2-mode
    js2-refactor
    json-mode
    ledger-mode
    lua-mode
    magit
    markdown-mode
    move-text
    multiple-cursors
    nginx-mode
    nix-mode
    nix-sandbox
    org-journal
    page-break-lines
    paredit
    password-store
    projectile
    projectile-ripgrep
    quickrun
    redshank
    relative-buffers
    restclient
    ripgrep
    rjsx-mode
    scala-mode
    scss-mode
    shrink-whitespace
    slime
    smart-tabs-mode
    smartparens
    smex
    suggest
    swiper
    tern
    toml-mode
    undo-tree
    visual-regexp
    volatile-highlights
    web-mode
    white-theme
    wgrep-ag
    which-key
    yaml-mode
  ]) ++ (with epkgs.elpaPackages; [
    beacon
    rainbow-mode
  ]) ++ [
    # defined above
    hook-helpers
    dired-du
    # From main packages set
  ])