     volatile-highlights
     w3m ;; web-browsing in emacs
     web-mode
+    ;; workgroups2 ;; testing
     wrap-region ;; wrap selection with punctuations, tags (org-mode, markdown-mode, ..)
     xkcd ;; comic
     yafolding ;; indentation detected code folding

    mwe-log-commands ;; for logging commands; useful when demoing emacs
    nlinum ;; reviews say it's better than linum
    number ;; number manipulation
    org ox-reveal htmlize ;; Get the latest org-mode package from MELPA; ox-reveal for HTML slides
    page-break-lines ;; Convert the ^L (form feed) chars to horizontal lines
    popwin ;; Open windows like *Help*, *Completions*, etc in minibuffer
    rainbow-delimiters
    rainbow-mode
    region-bindings-mode ;; complements really well with multiple-cursors
    smart-compile
    smart-mode-line popup
    smex ;; smart M-x
    stripe-buffer
    swoop

(load custom-file) ;; Load the emacs `M-x customize` generated file

(require 'benchmark-init)
(require 'req-package)

(req-package setup-region-bindings-mode)
(req-package setup-key-chord)
(req-package modi-mode)
(req-package defuns)

(require 'setup-secret nil t) ;; No error if not found

;; Set up the looks of emacs
(req-package setup-popwin) ;; require popwin first as packages might depend on it
(req-package setup-smart-mode-line)
(req-package setup-visual)

;; Set up extensions/packages
(req-package setup-ace-jump-mode)
(req-package setup-ace-window)
(req-package setup-ag)
(req-package setup-auto-complete)
(req-package setup-bookmark+)
(req-package setup-buffer-move)
(req-package setup-dired)
(req-package setup-drag-stuff)
(req-package setup-elisp-slime-nav)
(req-package setup-expand-region)
(req-package setup-fci)
(req-package setup-fiplr)
(req-package setup-guide-key)
(req-package setup-hardcore)
;; (req-package setup-header2)
(req-package setup-highlight)
(req-package setup-hl-line+)
(req-package setup-hungry-delete)
(req-package setup-ido)
(req-package setup-iregister)
;; (req-package setup-linum)
(req-package setup-magit)
(req-package setup-manage-minor-mode)
(req-package setup-multiple-cursors)
(req-package setup-number)
(req-package setup-org)
(req-package setup-page-break-lines)
(req-package setup-poporg)
(req-package setup-rainbow-delimiters)
(req-package setup-rainbow-mode)
(req-package setup-server)
(req-package setup-smart-compile)
(req-package setup-smex)
(req-package setup-stripe-buffer)
(req-package setup-undo-tree)
(req-package setup-visual-regexp)
(req-package setup-w3m)
;; (req-package setup-workgroups2)
(req-package setup-wrap-region)
(req-package setup-xkcd)
(req-package setup-yafolding)
(req-package setup-yasnippet)
;; (req-package setup-helm) ;; Not required; replaced with swoop
;; (req-package setup-projectile)

;; Languages
(req-package setup-verilog)
(req-package setup-perl)
(req-package setup-python)
(req-package setup-matlab)
(req-package setup-markdown)
(req-package setup-web-mode)
(req-package setup-yaml-mode)
(req-package setup-latex)
(req-package setup-spice)
;; (req-package setup-tcl)

(req-package setup-editing)
(req-package setup-windows-buffers)
(req-package setup-registers)
(req-package setup-navigation)
(req-package setup-search)
(req-package setup-print)
(req-package setup-gtags)
(req-package setup-spell)
(req-package setup-desktop)
;; (req-package setup-ctags) ;; Using gtags instead

(req-package setup-misc) ;; This package must be the last required package

(req-package-finish) ;; Start loading packages in right order
(global-modi-mode t)
(funcall default-theme)

(setq emacs-initialized t)

;; Write out a message indicating how long it took to process the init script
(message "init.el loaded in %ds"
         (destructuring-bind (hi lo ms ps) (current-time)
           (- (+ hi lo)
              (+ (first *emacs-load-start*)
                 (second *emacs-load-start*)))))
