- Configure `clj-kondo` via `.clj-kondo/config.edn` — run `clj-kondo --lint src/` in CI and fail the build on any warnings.
- Use `cljfmt` with a `cljfmt.edn` config file to enforce consistent indentation and whitespace — run `cljfmt check` in CI.
- Integrate both tools with `clojure-lsp` as LSP diagnostics so violations appear in the editor on every save without a separate terminal step.
- Use `clj-kondo`'s `:hooks` configuration to add lint rules for project-specific macros and custom DSLs.
- Enable `clj-kondo` hooks for popular libraries (`ring`, `compojure`, `next.jdbc`) by importing their hook configs from the library's `.clj-kondo` exports.
- Configure `cljfmt`'s `:indents` map to ensure correct indentation for macros that behave like `defn` or `let` forms.
- Use `clj-kondo`'s `:lint-as` configuration to teach the linter about custom `def*` and `with-*` macros.