Enhanced Clojure experienceλ︎
Enhance the clojure layer by adding automatic linting and refator tools with Clojure LSP and recommended CIDER options. Complement the Clojure layer with general development tools including a git client (Magit), markdown and org-mode support.
Practicalli Spacemacs user config
practicalli/spacemacs-config provides a comprehensive configuration for Clojure development
Layer name | Description |
---|---|
auto-completion |
complete names of functions and symbol names, also list snippets. |
clojure |
CIDER, optionally with clj-refactor and clj-kondo linter |
git |
git version control with Magit in full screen, with fringe highlighting of changes in buffers |
github |
GitHub API for remote repositories and gists |
lsp |
language server protocol - static analysis driven editing features |
markdown |
writing project descriptions in README.md and other markdown files |
multiple-cursors |
multiple concurrent edits with more than one cursor g r |
org |
write documentation, organize tasks with org-mode |
spell-checking |
spell check as you type using your Operating System spell checker SPC S s |
syntax-checking |
syntax checking / linting as you type (flycheck with clj-kondo for Clojure) |
treemacs |
visual file system browser (file explorer) SPC p t |
version-control |
general version control features, eg. ediff, fringe highlights |
Install clj-kondo binary
Automatic linting requires the clj-kondo binary installed on the operating system path, or the Clojure LSP server which contains clj-kondo. Practicalli Clojure contains install instructions for these tools.
Add layersλ︎
SPC f e d
opens the .spacemacs
configuration file (M-m f e d
holy mode)
Use SPC s s
and start typing configuration-layers
to search for the dotspacemacs-configuration-layers
section. RTN
to jump to the highlighted line, C-j
to move down the matching lines, C-k
to move up.
Either copy the dotspacemacs-configuration-layers
from practicalli/spacemacs.d or copy the individual configurations in the rest of this page.
SPC f s
to save the file.
SPC q r
to restart Spacemacs which will load and configure all the new layers and their Emacs packages.
Reload Configuration or Restart Emacs
Space q r to restart Emacs with a new configuration is recommended when making a big change or adding layers.
Space f e ++R++ to reload the ~/.spacemacs
configuration for smaller changes.
Practicalli Spacemacs Example Configuration
Auto-completionλ︎
Enable auto-completion for programming languages. In Clojure this includes functions, namespaces and other symbols.
Yasnippet are included in the auto-completion popup and are sorted with the most frequently used snippets first.
(auto-completion :variables
auto-completion-enable-help-tooltip t
auto-completion-enable-snippets-in-popup t
auto-completion-enable-sort-by-usage t)
To have auto-completion as soon as typing starts, add auto-completion-idle-delay nil
to the auto-completion variables
Clojureλ︎
Enable Clojure support but differ the backend to Clojure LSP rather than CIDER. The clojure-lsp binary should be downloaded automatically.
Enable the kaocha-runner to use Kaocha test runner from within the REPL.
(clojure :variables
cider-repl-display-help-banner nil ;; disable help banner
cider-pprint-fn 'fipp ;; fast pretty printing
cider-overlays-use-font-lock t
cider-repl-buffer-size-limit 100 ;; limit lines shown in REPL buffer to prevent performance issues
clojure-indent-style 'align-arguments
clojure-align-forms-automatically t
clojure-toplevel-inside-comment-form t ;; evaluate expressions in comment as top level
clojure-enable-kaocha-runner t)
Add the variable cider-result-overlay-position 'at-point
to show results shown right after expression (useful for evaluated a nested expression). Otherwise results from evaluating expressions show at the end of the top-level expression.
Git and GitHubλ︎
Enable Magit Git client in Emacs and open Magit Status, SPC g s
full screen (q restores previous layout). Show word-granularity differences in current diff hunk.
Enable GitHub features to clone repositories, push commits and create pull requests (Magit Forge) all from within Emacs.
Enable fringe highlight of version control (Git) changes in buffers
(git :variables
git-magit-status-fullscreen t
magit-diff-refine-hunk t
git-enable-magit-todos-plugin t)
github
(version-control :variables
version-control-diff-tool 'diff-hl
version-control-global-margin t)
Language Server Protocol (LSP)λ︎
Clojure LSP provides common editor features across all Clojure aware editors. A configuration with minimal visual impact.
(lsp :variables
;; Formatting and indentation
lsp-enable-on-type-formatting t
lsp-enable-indentation t
lsp-enable-snippet t
lsp-enable-symbol-highlighting t
;; popup documentation
lsp-ui-doc-enable t ;; documentation popups
lsp-ui-doc-show-with-cursor nil ;; doc popup triggered by cursor
lsp-ui-doc-show-with-mouse nil ;; doc popup triggered by mouse
lsp-ui-doc-delay 1 ;; delay in seconds for popup to display
lsp-ui-doc-include-signature t ;; include function signature
;; lsp-ui-doc-position 'top ;; top bottom at-point
;; lsp-ui-doc-alignment 'window ;; frame window
;; code actions and diagnostics text as right-hand side of buffer
lsp-ui-sideline-enable nil
lsp-ui-sideline-show-code-actions nil
;; lsp-ui-sideline-delay 500
;; lsp-ui-sideline-show-diagnostics nil
;; function reference count and test coverage
lsp-lens-enable t
;; Efficient use of space in treemacs-lsp display
treemacs-space-between-root-nodes nil
;; Optimization for large files
lsp-file-watch-threshold 10000
lsp-log-io nil)
Multiple cursorsλ︎
Edit multiple lines of text concurrently by creating multiple cursors, especially useful for editing the form of lines which have different values.
Org-modeλ︎
Enable Spacemacs Org-mode with support for a range of additional features useful for development, including a custom TODO list workflow.
(org :variables
org-enable-github-support t
org-enable-bootstrap-support t
org-enable-reveal-js-support t
org-want-todo-bindings t
org-enable-org-journal-support t
org-journal-dir "~/projects/journal/"
org-journal-file-format "%Y-%m-%d"
org-journal-date-prefix "#+TITLE: "
org-journal-date-format "%A, %B %d %Y"
org-journal-time-prefix "* "
org-journal-time-format ""
org-journal-carryover-items "TODO=\"TODO\"|TODO=\"DOING\"|TODO=\"BLOCKED\"|TODO=\"REVIEW\""
;; org-enable-jira-support t
;; jiralib-url "https://org-domain.atlassian.net:443"
)
Layoutsλ︎
spacemacs-layouts layer added to set variables, SPC TAB
restricted to current layout buffers
Kill buffers when killing layer - SPC l x
(spacemacs-layouts :variables
spacemacs-layouts-restrict-spc-tab t
persp-autokill-buffer-on-remove 'kill-weak)
Configure Doom modelineλ︎
Configuration used by Practicalli for the Doom modeline, based on the configuration: seagle0128/doom-modeline
(spacemacs-modeline :variables
doom-modeline-height 12
doom-modeline-major-mode-color-icon t
doom-modeline-buffer-file-name-style 'relative-to-project
doom-modeline-display-default-persp-name t
doom-modeline-minor-modes nil
doom-modeline-modal-icon nil)
Spell checkingλ︎
Spell as you type with Flyspell package, which requires external command such as ispell, hunspell, aspell
SPC S s
to check the spelling of the current word
Programming Ligaturesλ︎
Support font ligatures (fancy symbols) in all programming language modes, when using Fira Codes and other fonts that support ligatures.
Including ligatures for text-mode may cause issues with org-mode and magit.