{ config, pkgs, ... }: let emacsWithPackages = (pkgs.emacsPackagesFor pkgs.emacs).emacsWithPackages; in { programs.emacs = { enable = true; extraConfig = '' (load-theme 'catppuccin :no-confirm) (global-display-line-numbers-mode 1) (telephone-line-mode 1) (require 'nix-mode) (add-to-list 'auto-mode-alist '("\\.nix\\'" . nix-mode)) (require 'evil) (evil-mode 1) (require 'smex) (smex-initialize) (global-set-key (kbd "M-x") 'smex) (global-set-key (kbd "M-X") 'smex-major-mode-commands) ;; This is your old M-x. (global-set-key (kbd "C-c C-c M-x") 'execute-extended-command) (add-hook 'dart-mode-hook 'lsp) (add-hook 'prog-mode-hook #'rainbow-delimiters-mode) (setq gc-cons-threshold (* 100 1024 1024) read-process-output-max (* 1024 1024)) ;;Exit insert mode by pressing j and then k quickly (setq key-chord-two-keys-delay 0.5) (key-chord-define evil-insert-state-map "jk" 'evil-normal-state) (key-chord-mode 1) ''; package = emacsWithPackages (epkgs: (with epkgs.melpaStablePackages; [ catppuccin-theme ]) ++ (with epkgs.melpaPackages; [ evil nix-mode dart-mode lsp-dart lsp-treemacs flycheck lsp-mode company rainbow-delimiters undo-fu key-chord telephone-line smex ranger ]) ++ (with epkgs.elpaPackages; [ undo-tree ]) ++ [ pkgs.notmuch ]); }; }