diff --git a/lisp/fg42/deps.el b/lisp/fg42/deps.el index 5a7d641..e3552cb 100644 --- a/lisp/fg42/deps.el +++ b/lisp/fg42/deps.el @@ -52,7 +52,6 @@ gdscript-mode meson-mode lsp-scheme - clojure-mode cider aggressive-indent graphviz-dot-mode @@ -90,6 +89,10 @@ org-ql ctrlf badwolf-theme + clojure-mode + clojure-ts-mode + cider + flycheck-clj-kondo ace-window avy paredit diff --git a/lisp/fg42/editor.el b/lisp/fg42/editor.el index 102fe1d..6d7eda1 100644 --- a/lisp/fg42/editor.el +++ b/lisp/fg42/editor.el @@ -32,6 +32,7 @@ (require 'fg42/langs/python) (require 'fg42/langs/elisp) (require 'fg42/langs/nix) + (require 'fg42/langs/clojure) (require 'fg42/git) (require 'fg42/wm) diff --git a/lisp/fg42/langs/clojure.el b/lisp/fg42/langs/clojure.el new file mode 100644 index 0000000..6233a89 --- /dev/null +++ b/lisp/fg42/langs/clojure.el @@ -0,0 +1,57 @@ +;;; FG42 --- The mighty editor for the emacsians -*- lexical-binding: t; -*- +;; +;; Copyright (c) 2010-2024 Sameer Rahmani & Contributors +;; +;; Author: Sameer Rahmani +;; URL: https://devheroes.codes/FG42/FG42 +;; Version: 4.0.0 +;; +;; This program is free software; you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published by +;; the Free Software Foundation, either version 3 of the License, or +;; (at your option) any later version. +;; +;; This program is distributed in the hope that it will be useful, +;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;; GNU General Public License for more details. +;; +;; You should have received a copy of the GNU General Public License +;; along with this program. If not, see . +;; +;;; Commentary: +;;; Code: +(eval-when-compile + (require 'fpkg)) + + +(use! flycheck-clj-kondo + "flycheck linter for clojure using `clj-konda'" + :defer t) + +;; (defun fg42/clojure-ts-mode-setup () +;; "A hook handler to setup cpp related configurations." +;; ;; We set eglot's autoload command to `eglot-ensure' +;; (eglot-ensure)) + +(use! clojure-ts-mode + "Clojure mode" + ;; :init + ;; (add-to-list 'major-mode-remap-alist '(clojure-mode . clojure-ts-mode)) + :mode (("\\.clj\\'" . clojure-ts-mode) + ("\\.cljs\\'" . clojure-ts-mode) + ("\\.cljc\\'" . clojure-ts-mode)) + :config + (with-eval-after-load 'eglot + ;; Force nil to use nixpkgs-fmt for formatting + (let ((clojure-lsp '(clojure-ts-mode . clojure-mode))) + (require 'flycheck-clj-kondo) + (add-to-list 'eglot-server-programs clojure-lsp))) + + :hook + (clojure-ts-mode . company-mode) + (clojure-ts-mode . cider) + (clojure-ts-mode . eglot-ensure)) + +(provide 'fg42/langs/clojure) +;;; clojure.el ends here diff --git a/nix/fg42.nix b/nix/fg42.nix index 97c126d..c583d2e 100644 --- a/nix/fg42.nix +++ b/nix/fg42.nix @@ -52,8 +52,10 @@ , slock , supportPython ? true , supportVerilog ? true +, supportClojure ? true , svls , verilator +, clojure-lsp , }: with builtins; @@ -99,12 +101,14 @@ let # SystemC is required by verilator that at the # moment is only available on Linux verilator - ]) ++ (lib.optional (supportWM && stdenv.isLinux) [ + ]) ++ (lib.optional (supportClojure) [ clojure-lsp ]) + ++ (lib.optional (supportWM && stdenv.isLinux) [ # Window manager supports works on Linux only xorg.xhost slock ]); + paths = map (x: "${x}/bin/") (lib.lists.flatten runtimeBins); pathsStr = lib.strings.concatStrings (lib.strings.intersperse ":" paths);