 ;;;; Load user-specific configuration file (1 of 2)
 
 (radian-load-user-config "init.before.local.el")
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;;;; Process user-specific configuration
+
+;; Normalize configuration variables.
+
+(unless (member radian-customize-completion-mechanism
+                '(helm-ido ivy))
+  (lwarn
+   '(radian) :error
+   "%s is not a valid setting for radian-customize-completion-mechanism, setting to helm-ido"
+   radian-customize-completion-mechanism)
+  (setq radian-customize-completion-mechanism 'helm-ido))
+
+;; If the user has selected `helm-ido' as their completion framework,
+;; then we should disable Ivy and friends. If the user has selected
+;; `ivy', then we should disable Helm and friends. Note that this is
+;; just for convenience, and the user can override it by using
+;; `radian-reenable-package' in their init.before.local.el (because
+;; `radian-disable-package' and `radian-reenable-package' are
+;; commutative).
+
+(when (equal radian-customize-completion-mechanism 'helm-ido)
+  (radian-disable-package 'flx 'ivy 'counsel 'counsel-projectile 'swiper))
+
+(when (equal radian-customize-completion-mechanism 'ivy)
+  (radian-disable-package 'helm 'helm-projectile 'helm-smex))
 
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 ;;;; Startup


  ;; Sometimes in the CIDER REPL, when Emacs is running slowly, you
  ;; can manage to press TAB before the Company completions menu pops
  ;; up. This makes a Helm completions buffer appear, which is
  ;; disorienting. So we reset TAB to its default functionality (i.e.
  ;; indent only) in the CIDER REPL.
  (setq cider-repl-tab-command 'indent-for-tab-command)

  ;; Don't focus the cursor in the CIDER REPL once it starts. Since

                     (interactive)
                     (find-file ,(concat "~/" (cadr item))))))

(when (equal radian-customize-completion-mechanism 'helm-ido)
  ;; Use IDO ("interactive do") for C-x C-f and other file-finding
  ;; operations. There is a known issue (#41) that sometimes causes C-x
  ;; b (which is not a file-finding operation, and should be using
  ;; Helm) to switch back to IDO. Unfortunately, a consistently
  ;; reproducible test case has not been forthcoming.
  (ido-mode 'files)

  ;; Use fuzzy matching for IDO.
  (setq ido-enable-flex-matching 1)

  ;; By default, if you type in a filename that does not exist in the
  ;; current directory, IDO will wait 0.7 seconds and then whisk you off
  ;; to some totally unrelated directory that happens to already have a
  ;; file by that filename. Here we turn off that "feature".
  ;;
  ;; If you want to quickly get to a file somewhere else on the
  ;; filesystem, helm-projectile offers a much better user experience.
  ;; IDO is better for navigating in the traditional directory-based
  ;; system.
  (setq ido-auto-merge-work-directories-length -1))

;; Follow symlinks without prompting. If this isn't done, then you
;; will get a prompt every time you edit init.el with M-RET e i. (That
