diff --git a/nix/modules/clojure/default.nix b/nix/modules/clojure/default.nix new file mode 100644 index 0000000..8a2b990 --- /dev/null +++ b/nix/modules/clojure/default.nix @@ -0,0 +1,55 @@ +# Fg42 - Emacs Editor for advance users +# +# Copyright (c) 2010-2024 Sameer Rahmani +# +# 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, version 2. +# +# 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 . + +# This is the home manager module that exposes FG42. It differs +# from FG42 modules that are structurally the same but used in +# different context + +# A list of default FG42 modules to build FG42 with. +{ lib, config, pkgs, makeFG42Drv, ... }: +with lib; +let + cfg = config.fg42.clojure; + + deps = + (with pkgs.emacsPackages; [ + cider + clojure-ts-mode + company + flycheck-clj-kondo + ]); + + drv = makeFG42Drv { + pname = "clojure"; + version = config.fg42.version; + buildInputs = deps; + src = ./.; + }; +in +{ + options.fg42.clojure.enable = mkAndEnableOption "clojure"; + + config = mkIf cfg.enable { + fg42.elispPackages = [ drv ] ++ deps; + + fg42.paths = (with pkgs;[ + clojure-lsp + clojure + ]); + + fg42.requires = [ drv.pname ]; + }; +} diff --git a/nix/modules/clojure/lisp/fg42/clojure.el b/nix/modules/clojure/lisp/fg42/clojure.el new file mode 100644 index 0000000..53a3020 --- /dev/null +++ b/nix/modules/clojure/lisp/fg42/clojure.el @@ -0,0 +1,83 @@ +;;; 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-kondo'." + :ensure t) + +(use! paredit + "Minor mode for editing parenthesis." + :commands enable-paredit-mode) + +(use! cider + "Clojure(Script) Interactive Development Environment that Rocks!" + :ensure t) + +(use! lsp-mode + "lsp-mode" + :init + ;; set prefix for lsp-command-keymap (few alternatives - "C-l", "C-c l") + (setq lsp-keymap-prefix "C-c l") + ;; :hook ((clojure-ts-mode . lsp)) + :commands lsp) + +(use! lsp-ui + "lsp-ui" + :commands lsp-ui-mode) + +(use! lsp-ui-doc-frame + "lsp-ui-doc-frame" + :commands lsp-ui-doc-frame-mode) + +(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 + (require 'flycheck-clj-kondo) + (require 'cider) + :hook + (clojure-ts-mode . company-mode) + (clojure-ts-mode . enable-paredit-mode) + (clojure-ts-mode . lsp) + ;; (clojure-ts-mode . company-box) + ;; (clojure-ts-mode . flycheck-clj-kondo) + ;; (clojure-ts-mode . lsp) + ;; (clojure-ts-mode . lsp-ui-mode) + ;; (clojure-ts-mode . eglot-ensure) + ;; (clojure-ts-mode . fg42/clojure-ts-mode-setup)) + ) + +(provide 'fg42/clojure) +;;; clojure.el ends here diff --git a/nix/modules/default.nix b/nix/modules/default.nix index 462ac6c..ba332d3 100644 --- a/nix/modules/default.nix +++ b/nix/modules/default.nix @@ -33,6 +33,7 @@ let ./nix ./c-family ./python + ./clojure ./wm ./verilog ./workspace