You can certainly use CIDER without configuring it any further, but here are some ways other folks are adjusting their CIDER experience.

Basic configuration

(setq cider-auto-mode nil)

By default CIDER will enable cider-mode in all clojure-mode buffers when the first CIDER connection is established. It will also add a clojure-mode hook to enable it on newly created clojure-mode buffers. The configuration snippet above allows you to override this (somewhat non-standard) behavior.

(setq cider-prompt-for-symbol nil)
(setq nrepl-log-messages t)

Basically, this will result in the creation of buffers like *nrepl-messages conn-name*. The communication log is invaluable for debugging CIDER issues, so you're generally advised to enable logging when you need to debug something nREPL related.

(setq nrepl-hide-special-buffers t)

When using switch-to-buffer, pressing SPC after the command will make the hidden buffers visible. They'll always be visible in list-buffers (C-x C-b).

(setq cider-prefer-local-resources t)
;; Don't prompt and don't save
(setq cider-save-file-on-load nil)
;; Just save without prompting
(setq cider-save-file-on-load t)
(setq cider-eval-result-prefix ";; => ")

To remove the prefix altogether just set it to an empty string("").

(setq cider-font-lock-dynamically '(macro core function var))
:dev {:resource-paths ["/usr/share/doc/java/api/"]}

or the following line in $HOME/.lein/profiles.clj:

:user {:resource-paths ["/usr/share/doc/java/api/"]}

More details can be found here.

Its default value is '("^cider.nrepl" "^refactor-nrepl" "^clojure.tools.nrepl"), the most commonly used middleware collections/packages.

An important thing to note is that this list of regexps is passed on to the middleware without any pre-processing. So, the regexps have to be in Clojure format (with twice the number of backslashes) and not Emacs Lisp. For example, to achieve the above effect, you could also set cider-filter-regexps to '(".*nrepl").

To customize cider-filter-regexps, you could use the Emacs customize UI, with M-x customize-variable RET cider-filter-regexps.

Or by including a similar snippet along with the other CIDER configuration.

(setq cider-filter-regexps '(".*nrepl"))

This variable should be set before loading CIDER (which means before require-ing it or autoloading it).

(setq cider-special-mode-truncate-lines nil)

Configuring eldoc

(add-hook 'cider-mode-hook #'eldoc-mode)

Eldoc

(setq cider-eldoc-display-for-symbol-at-point nil)
eldoc-echo-area-use-multiline-p Behaviour
t Never attempt to truncate messages. Complete symbol name and function arglist or variable documentation will be displayed even if echo area must be resized to fit.
nil Messages are always truncated to fit in a single line of display in the echo area.
truncate-sym-name-if-fit or anything non-nil Symbol name may be truncated if it will enable the function arglist or documentation string to fit on a single line. Otherwise, behavior is just like t case.
(setq cider-eldoc-display-context-dependent-info t)

Overlays

When you evaluate code in Clojure files, the result is displayed in the buffer itself, in an overlay right after the evaluated code. If you want this overlay to be font-locked (syntax-highlighted) like Clojure code, set the following variable.

(setq cider-overlays-use-font-lock t)

You can disable overlays entirely (and display results in the echo-area at the bottom) with the cider-use-overlays variable.

(setq cider-use-overlays nil)

Specifying indentation

It is common for macros to require special indentation mechanisms. This is most common in macros that start with do, def, or with-. CIDER has some heuristics to detect these macros, but it also lets you explicitly specify how a macro should be indented.

Here's a simple example of how someone would specify the indent spec for a macro they've written (using an example in core):

(defmacro with-in-str
  "[DOCSTRING]"
  {:style/indent 1}
  [s & body]
  ...cut for brevity...)

And here's a more complex one:

(defmacro letfn
  "[DOCSTRING]"
  {:style/indent [1 [[:defn]] :form]}
  [fnspecs & body]
  ...cut for brevity...)

Don't worry if this looks intimidating. For most macros the indent spec should be either just a number, or one of the keywords :defn or :form. A full description of the spec is provided in the indent spec section of the manual.

If you don't want to use this feature, you can disable it by setting cider-dynamic-indentation to nil in your Emacs init file.

(setq cider-dynamic-indentation nil)

Minibuffer completion

Out-of-the box CIDER uses the standard completing-read Emacs mechanism. While it's not fancy it certainly gets the job done (just press TAB). There are, however, ways to improve upon the standard completion if you wish to.

icomplete

icomplete is bundled with Emacs and enhances the default minibuffer completion:

(require 'icomplete)

ido

ido is also bundled with Emacs and offers more features than icomplete. If you are using ido, be sure to use both ido-everywhere and ido-ubiquitous. You might also want to install ido-flex.

Pretty-printing

You can configure the function used by CIDER for pretty-printing evaluation results and other data using the cider-pprint-fn option.

This can be one of three values (defaults to pprint):

Alternatively, cider-pprint-fn can be set to the namespace-qualified name of a Clojure function that takes a single argument and will pretty-print the value of said argument to *out*.

(setq cider-pprint-fn "user/my-pprint")

This function must be resolvable by CIDER at the time it is called (i.e. its containing namespace must have already been required).

CIDER will bind *print-length*, *print-level*, *print-meta*, and clojure.pprint/*print-right-margin* when calling the pretty-printing function - the function you provide is expected to respect these options.