From c169983db61c946d5e005c1fc4bd304a78e9a274 Mon Sep 17 00:00:00 2001 From: Maciej Szlosarczyk Date: Sat, 8 Aug 2020 23:34:56 +0300 Subject: [PATCH] Add haskell mode, update ocaml mode --- 01base.el | 2 +- 05ctags.el | 2 +- init.el | 7 ++++++- languages/clang.el | 2 +- languages/erlang.el | 2 +- languages/haskell.el | 39 +++++++++++++++++++++++++++++++++++++++ languages/ocaml.el | 33 ++++++++++++++++++++++----------- languages/ruby.el | 2 +- themes/themes.el | 3 ++- 9 files changed, 74 insertions(+), 18 deletions(-) create mode 100644 languages/haskell.el diff --git a/01base.el b/01base.el index 9766bee..75dc6f5 100644 --- a/01base.el +++ b/01base.el @@ -140,7 +140,7 @@ (use-package exec-path-from-shell :if (memq window-system '(mac ns)) :ensure t - :config (add-to-list 'exec-path "/opt/local/bin") + :config (add-to-list 'exec-path "/usr/local/bin") (exec-path-from-shell-initialize)) ;; Draw underline lower diff --git a/05ctags.el b/05ctags.el index d59be20..fe1662c 100644 --- a/05ctags.el +++ b/05ctags.el @@ -10,7 +10,7 @@ (setq tags-add-tables nil) (defvar ctags/refresh-command - (format "uctags -e -R -f %sTAGS %s." + (format "ctags -e -R -f %sTAGS %s." default-directory default-directory)) ;; Sentinel function for capturing ctags diff --git a/init.el b/init.el index 381d640..9d63783 100644 --- a/init.el +++ b/init.el @@ -45,6 +45,7 @@ (require 'languages/erlang "$HOME/.emacs.d/languages/erlang.el") (require 'languages/sh "$HOME/.emacs.d/languages/sh.el") (require 'languages/rust "$HOME/.emacs.d/languages/rust.el") +(require 'languages/haskell "$HOME/.emacs.d/languages/haskell.el") (require 'languages/clang "$HOME/.emacs.d/languages/clang.el") (require 'languages/clojure "$HOME/.emacs.d/languages/clojure.el") (require 'languages/ocaml "$HOME/.emacs.d/languages/ocaml.el") @@ -58,7 +59,11 @@ ;; If there is more than one, they won't work right. '(package-selected-packages (quote - (which-key erlang gitignore-mode yaml-mode nginx-mode ansible terraform-mode dockerfile-mode reason-mode merlin tuareg clj-refactor cider clojure-mode elixir-mode js2-mode web-mode enh-ruby-mode ruby-end rspec-mode planet-theme flatui-theme base16-theme smart-mode-line lsp-ui lsp-mode deft counsel-projectile flycheck company yasnippet-snippets yasnippet visual-regexp column-enforce-mode dash-at-point rainbow-mode rainbow-delimiters magit hydra counsel keyfreq exec-path-from-shell buffer-move use-package)))) + (dante haskell-mode dune which-key erlang gitignore-mode yaml-mode nginx-mode ansible terraform-mode dockerfile-mode reason-mode merlin tuareg clj-refactor cider clojure-mode elixir-mode js2-mode web-mode enh-ruby-mode ruby-end rspec-mode planet-theme flatui-theme base16-theme smart-mode-line lsp-ui lsp-mode deft counsel-projectile flycheck company yasnippet-snippets yasnippet visual-regexp column-enforce-mode dash-at-point rainbow-mode rainbow-delimiters magit hydra counsel keyfreq exec-path-from-shell buffer-move use-package))) + '(safe-local-variable-values + (quote + ((haskell-process-use-ghci . t) + (haskell-indent-spaces . 4))))) ;; Improve font settings in Markdown code (custom-set-faces diff --git a/languages/clang.el b/languages/clang.el index a8d94bb..f890d0f 100644 --- a/languages/clang.el +++ b/languages/clang.el @@ -27,7 +27,7 @@ (setq-local ctags/refresh-command (format - "uctags -e -R --languages=C -f %sTAGS %s/*" + "ctags -e -R --languages=C -f %sTAGS %s/*" (projectile-project-root) (projectile-project-root)))) (add-hook 'c-mode-hook 'activate-clang-mode) diff --git a/languages/erlang.el b/languages/erlang.el index d9208d0..8a76d8e 100644 --- a/languages/erlang.el +++ b/languages/erlang.el @@ -80,7 +80,7 @@ (setq-local ctags/refresh-command (format - "uctags -e -R --languages=erlang -f %sTAGS %ssrc %sdeps %sapps %s_build %stest %slib/stdlib-* %slib/kernel-*" + "ctags -e -R --languages=erlang -f %sTAGS %ssrc %sdeps %sapps %s_build %stest %slib/stdlib-* %slib/kernel-*" (projectile-project-root) (projectile-project-root) (projectile-project-root) (projectile-project-root) (projectile-project-root) (projectile-project-root) diff --git a/languages/haskell.el b/languages/haskell.el new file mode 100644 index 0000000..44a238b --- /dev/null +++ b/languages/haskell.el @@ -0,0 +1,39 @@ +;;; haskell.el --- summary + +;; Author: Maciej Szlosarczyk +;; Maintainer: Maciej Szlosarczyk +;; Version: 0.1-snapshot + +;;; Commentary: + +;; haskell does a thing. + +;;; Code: + +(require '05prog-mode "$HOME/.emacs.d/05prog-mode.el") +(require '05flycheck "$HOME/.emacs.d/05flycheck.el") +(require '05hydra "$HOME/.emacs.d/05hydra.el") + +(use-package haskell-mode + :ensure t + :defer t) + +(use-package dante + :ensure t + :defer t + :requires (haskell-mode)) + +(defun activate-haskell-mode () + "Run this in haskell-mode." + (set-indent 2) + (column-enforce-n 80) + + ;; Company list override + (add-to-list (make-local-variable 'company-backends) + '(dante-company company-yasnippet))) + +(add-hook 'haskell-mode-hook 'dante-mode) +(add-hook 'haskell-mode-hook 'activate-haskell-mode) + +(provide 'languages/haskell) +;;; haskell.el ends here diff --git a/languages/ocaml.el b/languages/ocaml.el index a5dea83..9acd897 100644 --- a/languages/ocaml.el +++ b/languages/ocaml.el @@ -3,10 +3,10 @@ ;;; Code: (use-package tuareg - :defer t - :ensure t - :config - (add-hook 'tuareg-mode-hook 'merlin-mode)) + :defer t + :ensure t + :config + (add-hook 'tuareg-mode-hook 'merlin-mode)) (use-package merlin :defer t @@ -17,16 +17,27 @@ :ensure t :config (setq refmt-command 'opam)) -(let ((opam-share (ignore-errors (car (process-lines "opam" "config" "var" "share"))))) - (when (and opam-share (file-directory-p opam-share)) - ;; Register Merlin - (add-to-list 'load-path (expand-file-name "emacs/site-lisp" opam-share)) - (autoload 'merlin-mode "merlin" nil t nil) - ;; Use opam switch to lookup ocamlmerlin binary - (setq merlin-command 'opam))) +(use-package dune + :defer t + :ensure t) + +(defun load-ocaml-site-packages () + "Generate ocaml config." + (let ((opam-share (ignore-errors (car (process-lines "opam" "config" "var" "share"))))) + (when (and opam-share (file-directory-p opam-share)) + ;; Register Merlin + (add-to-list 'load-path (expand-file-name "emacs/site-lisp" opam-share)) + (autoload 'merlin-mode "merlin" nil t nil) + (autoload 'ocamlformat "ocamlformat" nil t nil) + (autoload 'utop "utop" nil t nil) + (autoload 'dune "dune" nil t nil) + + ;; Use opam switch to lookup ocamlmerlin binary + (setq merlin-command 'opam)))) ;; OCaml setup (add-hook 'tuareg-mode-hook 'merlin-mode) +(add-hook 'tuareg-mode-hook 'load-ocaml-site-packages) ;; Reason setup (add-hook 'reason-mode-hook diff --git a/languages/ruby.el b/languages/ruby.el index 7158eb2..310c9f5 100644 --- a/languages/ruby.el +++ b/languages/ruby.el @@ -35,7 +35,7 @@ ;; Set specific ctags command (setq-local ctags/refresh-command - (format "uctags -e -R --languages=ruby -f %sTAGS %s. $(bundle list --paths)" + (format "ctags -e -R --languages=ruby -f %sTAGS %s. $(bundle list --paths)" (projectile-project-root) (projectile-project-root)))) (add-hook 'ruby-mode-hook 'enh-ruby-mode) diff --git a/themes/themes.el b/themes/themes.el index 920ac6f..026b3c8 100644 --- a/themes/themes.el +++ b/themes/themes.el @@ -28,6 +28,7 @@ (load-theme 'base16-harmonic-light t t) (load-theme 'base16-material-palenight t t) (load-theme 'base16-mocha t t) +(load-theme 'base16-papercolor-light t t) (load-theme 'planet t t) (defun base16-mexico-light-custom () @@ -39,7 +40,7 @@ (sml/apply-theme 'respectful) (enable-theme (nth (random 2) - '(base16-atelier-forest-light base16-harmonic-light)))) + '(base16-mexico-light base16-harmonic-light)))) (progn (defvar base16-theme-256-color-source "base16-shell") (enable-theme 'base16-atelier-forest-light)))