title: Slow emacs startup
body: <p>My emacs takes a few seconds to start up every time, which is slower than I'd expect. During that time, it says "contacting host: " marmalade-repo and melpa. </p>
  
  <p>Is my current config a reasonable one? Is there a way I can speed it up, while still being able to install packages when I need them?</p>
  
  <pre><code>;; init.el --- Emacs configuration
  
  ;; INSTALL PACKAGES
  ;; --------------------------------------
  
  (require 'package)
  
  (add-to-list 'package-archives '("melpa" . "http://melpa.org/packages/") t)
  (add-to-list 'package-archives '("marmalade" . "https://marmalade-repo.org/packages/"))
  
  (package-initialize)
  (when (not package-archive-contents)
    (package-refresh-contents))
  
  (defvar myPackages
    '(better-defaults
      paredit
      idle-highlight-mode
      ido-ubiquitous
      find-file-in-project
      smex
      scpaste
      ein
      elpy
      flycheck
      material-theme
      py-autopep8))
  (package-refresh-contents)
  
  (mapc #'(lambda (package)
      (unless (package-installed-p package)
        (package-install package)))
        myPackages)
  
  ;; BASIC CUSTOMIZATION
  ;; --------------------------------------
  
  (setq inhibit-startup-message t) ;; hide the startup message
  (load-theme 'material t) ;; load material theme
  (global-linum-mode t) ;; enable line numbers globally
  
  ;; PYTHON CONFIGURATION
  ;; --------------------------------------
  
  (elpy-enable)
  (elpy-use-ipython)
  
  ;; use flycheck not flymake with elpy
  (when (require 'flycheck nil t)
    (setq elpy-modules (delq 'elpy-module-flymake elpy-modules))
    (add-hook 'elpy-mode-hook 'flycheck-mode))
  
  ;; enable autopep8 formatting on save
  (require 'py-autopep8)
  (add-hook 'elpy-mode-hook 'py-autopep8-enable-on-save)
  
  ;; enable electric pair minor mode
  (defun electric-pair ()
    "If at end of line, insert character pair without surrounding spaces.
      Otherwise, just insert the typed character."
    (interactive)
    (if (eolp) (let (parens-require-spaces) (insert-pair)) (self-insert-command 1)))
  (add-hook 'python-mode-hook
            (lambda ()
              (define-key python-mode-map "\"" 'electric-pair)
              (define-key python-mode-map "\'" 'electric-pair)
              (define-key python-mode-map "(" 'electric-pair)
              (define-key python-mode-map "[" 'electric-pair)
              (define-key python-mode-map "{" 'electric-pair)))
  
  
  ;; Send line from code buffer
  ;; http://stackoverflow.com/questions/27777133/change-the-emacs-send-code-to-interpreter-c-c-c-r-command-in-ipython-mode/30774439#30774439
  (defun my-python-line ()
  (interactive)
  (save-excursion
    (setq the_script_buffer (format (buffer-name)))
    (end-of-line)
    (kill-region (point) (progn (back-to-indentation) (point)))
    (if  (get-buffer  "*Python*")
    (message "")
    (run-python "ipython" nil nil))
    ;; (setq the_py_buffer (format "*Python[%s]*" (buffer-file-name)))
    (setq the_py_buffer "*Python*")
    (switch-to-buffer-other-window  the_py_buffer)
    (goto-char (buffer-end 1))
    (yank)
    (comint-send-input)
    (switch-to-buffer-other-window the_script_buffer)
    (yank))
    (end-of-line)
    (next-line)
    )
  (add-hook 'python-mode-hook
      (lambda ()
    (define-key python-mode-map "\C-cn" 'my-python-line)))
  </code></pre>