aboutsummaryrefslogblamecommitdiffstats
path: root/configuration.el
blob: d8953e15a02f9050a1ef596b4c4ac5d1ecebc846 (plain) (tree)

























                                                                   

                                        






                               

                     







                                                                        
         

                           

































                                                                                                                                                                                                                                                            
       

                                





                                          
                                              




                                                


                                       

                    

                                            










                                                                                          
                                                            












                                                                  
                                   
























                                                                        

                   

                    

















                                                      

                                  
 








                                                                             
 























                                                                                                                           















                                                     
                                                    










                                                   





                                     
                                       
















                                                 




                           



                 



                                 


                             
        

                                        



                                       
                                             


                


                                  
         



                                                                       





























                                                                                                                               

                                                                      
         




                                                                            



                                     

                      
                   













































                                                                                                      










                                                        


                              
(use-package ansi-color
  :ensure t
  :config
  (defun colorize-compilation-buffer ()
    (toggle-read-only)
    (ansi-color-apply-on-region compilation-filter-start (point))
    (toggle-read-only))
  (add-hook 'compilation-filter-hook 'colorize-compilation-buffer))

(use-package yasnippet
  :ensure t
  :config
  (use-package yasnippet-snippets
    :ensure t)
  (use-package yasnippet-classic-snippets
    :ensure t)
  (yas-reload-all))

(use-package elsa
  :ensure t
  :hook
  (emacs-lisp-mode . (lambda () (flycheck-elsa-setup)))
  :config
  (use-package flycheck-elsa
    :ensure t
    :hook
    ((emacs-lisp-mode . flycheck-mode)
     (emacs-lisp-mode . flymake-mode))))

(use-package flycheck
  :ensure t
  :config
  (use-package flymake-flycheck
    :ensure t))

(use-package lsp-mode
  :ensure t
  :hook ((lsp-mode . lsp-lens-mode)
	 (before-save . (lambda () (progn
				     ;; (interactive)
				     (when (eq major-mode 'fsharp-mode)
				       (lsp-format-buffer))))))
	 ;; (let ((format-option (read-string "Format buffer? (y/n) ")))
	 ;; (when (string= format-option "y")
	 ;; (lsp-format-buffer))))))))
  :config
  (use-package lsp-treemacs
    :ensure t))

;; (use-package dap-mode
;;   :commands (dap-debug dap-breakpoints-add)
;;   :init
;;   ;; (load-file "~/.emacs.d/sources/dap-netcore.el")
;;   (dap-mode 1)
;;   (dap-ui-mode 1)
;;   (dap-auto-configure-mode)
;;   (require 'dap-netcore)
;;   :custom
;;   (dap-netcore-install-dir "~/.emacs.d/.cache/"))

(use-package lsp-ui
  :ensure t
  :init
  (setq lsp-ui-doc-enable t)
  (setq lsp-ui-sideline-diagnostic-max-lines 7)
  (setq lsp-ui-sideline-diagnostic-max-line-length 30)
  (defun magueta/lsp-ui-doc-toggle ()
    "For some reason it is required to do at least once a call to lsp-ui-doc-show in order for this to work. Probably the problem resides on the frame created requiring some preparation before actually being used, so `frame-live-p` doesn't return nil."
    (interactive)
    (let ((frame (lsp-ui-doc--get-frame)))
      (if (frame-live-p frame)
	  (cond ((frame-visible-p frame) (lsp-ui-doc-hide))
		(t (lsp-ui-doc-show)))
	(message "Hover with the mouse or call `lsp-ui-doc-show` over some obect first. For why, read doc string."))))
  :bind
  (("s-?" . 'magueta/lsp-ui-doc-toggle)))

(use-package lsp-metals
  :ensure t)

(use-package scala-mode
  :ensure t
  :hook
  (scala-mode . lsp-deferred)
  (scala-mode . yas-minor-mode))

(use-package rainbow-delimiters
  :ensure t
  :hook
  (clojure-mode . rainbow-delimiters-mode)
  (lisp-mode . rainbow-delimiters-mode)
  (emacs-lisp-mode . rainbow-delimiters-mode))

;; (add-hook 'c-or-c++-mode #'(lambda () (lsp)))

(use-package clojure-mode
  :ensure t
  :hook ((clojure-mode . lsp-deferred))
  :custom
  (org-babel-clojure-backend 'cider)
  :init
  (use-package cider
    :ensure t
    :hook ((cider-repl-mode . corfu-mode))))

(use-package sbt-mode
  :commands sbt-start sbt-command
  :config
   ;; WORKAROUND: https://github.com/ensime/emacs-sbt-mode/issues/31
   ;; allows using SPACE when in the minibuffer
  (substitute-key-definition
   'minibuffer-complete-word
   'self-insert-command
   minibuffer-local-completion-map)
  ;; sbt-supershell kills sbt-mode:  https://github.com/hvesalai/emacs-sbt-mode/issues/152
  :custom (sbt:program-options '("-Dsbt.supershell=false")))

(use-package nix-mode
  :ensure t
  :init
  (defun nix-repl-with-variable ()
    (interactive)
    (let ((variables (read-string "Nix repl variable to load: ")))
      (defcustom nix-repl-executable-args `("repl" ,variables)
	"Arguments to provide to nix-repl."
	:type '(repeat string))
      (nix-repl)))
  :hook
  (nix-mode . lsp-deferred)
  ;; (nix-repl-mode . company-mode)
  :config
  (add-to-list 'lsp-language-id-configuration '(nix-mode . "nix"))
  (lsp-register-client
   (make-lsp-client :new-connection (lsp-stdio-connection '("rnix-lsp"))
                    :major-modes '(nix-mode)
                    :server-id 'nix)))

(use-package haskell-mode
  :ensure t
  :config
  (use-package lsp-haskell
    :ensure t)
  (use-package haskell-snippets
    :ensure t)
  :hook
  (haskell-mode . lsp-deferred)
  (haskell-mode . yas-minor-mode))

(use-package tuareg
  :ensure t
  :hook (tuareg-mode . lsp-deferred)
  :config
  (setq tuareg-match-patterns-aligned t)
  (setq tuareg-indent-align-with-first-arg nil))

(use-package swiper
  :ensure t
  :bind
  ("\C-s" . swiper))
   
;; (use-package slime
;;   :ensure t
;;   :hook
;;   (lisp-mode . (lambda () (auto-complete-mode)))
;;   (slime-mode . (lambda () (set-up-slime-ac)))
;;   (slime-repl-mode . (lambda () (set-up-slime-ac)))
;;   (lisp-mode . (lambda () (company-mode)))
;;   :config
;;   (setq inferior-lisp-program "sbcl")
;;   (use-package ac-slime
;;     :ensure t
;;     :after slime)
;;   (use-package auto-complete
;;     :ensure t
;;     :after slime))

(use-package sly
  :ensure t
  :hook ((sly-mode . corfu-mode)))

;; (use-package linum-relative
;;   :ensure t
;;   :hook ((prog-mode . linum-relative-mode)))

(use-package display-line-numbers
  :ensure t
  :hook ((prog-mode . (lambda () (progn
				   (display-line-numbers-mode)
				   (setq display-line-numbers 'relative))))))

;; (use-package company-quickhelp
;;    :ensure t
;;    :config
;;    (defun load-company-face ()
;;      (require 'color)
;;      (setq company-tooltip-limit 10
;; 	   company-tooltip-flip-when-above t
;; 	   company-tooltip-maximum-width 70
;; 	   company-tooltip-minimum-width 15
;; 	   company-quickhelp-color-foreground (color-lighten-name (face-attribute 'default :foreground) 10)
;; 	   company-quickhelp-color-background (color-lighten-name (face-attribute 'default :background) 10)
;; 	   pos-tip-foreground-color (face-attribute 'default :foreground) ; set pos-tip font color to the same as the theme
;; 	   company-tooltip-align-annotations t ; align annotations to the right tooltip border
;; 	   company-quickhelp-delay '0.25
;; 	   company-quickhelp-use-propertized-text t)
;;      (let ((bg (face-attribute 'default :background)))
;;        (custom-set-faces
;; 	`(company-tooltip ((t (:inherit default :background ,(color-darken-name bg 10)))))
;; 	`(company-scrollbar-bg ((t (:background ,(color-lighten-name bg 10)))))
;; 	`(company-scrollbar-fg ((t (:background ,(color-lighten-name bg 10)))))
;; 	`(company-tooltip-selection ((t (:inherit highlight;font-lock-function-name-face
;; 						  ))))
;; 	`(company-tooltip-common ((t (:inherit font-lock-constant-face)))))))
;;    (add-hook 'company-mode-hook 'load-company-face))
   ;; :init (company-quickhelp-mode t)
   ;; :hook
   ;; ((emacs-lisp-mode . (lambda () (company-mode)))
    ;; (company-mode . load-company-face)))

(use-package corfu
  :ensure t
  :custom ((corfu-auto t)
	   (corfu-auto-delay 0.25)
	   (corfu-min-width 15)
	   (corfu-max-width 70)
	   (corfu-popupinfo-delay corfu-auto-delay))
  :hook ((prog-mode . corfu-mode)
	 (corfu-mode . corfu-popupinfo-mode)
	 (eshell-mode . corfu-mode)
	 (lsp-mode . (lambda () (progn
				  (company-mode nil)
				  (corfu-mode))))))

;; (use-package marginalia
;;   :ensure t
;;   :bind
;;   (("M-A" . marginalia-cycle)
;;    :map minibuffer-local-map
;;    ("M-A" . marginalia-cycle)))

(use-package fstar-mode
  :ensure t)

(use-package fsharp-mode
   :ensure t
   :mode (("\\.fs$"  .  fsharp-mode)
	  ("\\.fsx$" .  fsharp-mode)
	  ("\\.fsi$" .  fsharp-mode))
   :hook ((fsharp-mode . lsp-deferred))
   :bind
   (("C-c C-,"     . 'fsharp-shift-region-left)
    ("C-c C-."     . 'fsharp-shift-region-right)
    ("C-o"         . 'fsharp-newline-and-indent)
    ("C-c C-i"     . 'run-fsharp)
    ("C-c C-a"     . 'fsharp-find-alternate-file)
    ("M-h"         . 'fsharp-mark-phrase))
   :config
   (setq compile-command "dotnet watch run")
   (setq inferior-fsharp-program "dotnet fsi"))
   
(use-package csharp-mode
   :ensure t
   :hook ((csharp-mode . lsp-deferred)))

(use-package magit
   :ensure t
   :bind
   ("C-x g" . magit-status)
   :config
   (use-package diff-hl
     :ensure t))

(use-package helm
   :ensure t
   :init
   (helm-mode t)
   :bind
   ("M-x" . helm-M-x)
   ("C-x b" . helm-buffers-list))
   
(use-package multiple-cursors
   :ensure t
   :bind
   ("C-d" . mc/mark-next-like-this-word)
   ("C-c m c" . mc/edit-lines))

(use-package eshell-syntax-highlighting
  :ensure t
  :config
  (eshell-syntax-highlighting-global-mode t))

(use-package org
  :ensure t
  :custom
  (org-log-done 'time)
  (org-confirm-babel-evaluate nil)
  :config
  (define-key global-map "\C-cl" 'org-store-link)
  (define-key global-map "\C-ca" 'org-agenda)
  ;; make some org commands available from anywhere (not only org mode)
  (global-set-key (kbd "C-c c") 'org-capture))

(use-package org-super-agenda
  :ensure t
  :init
  (org-super-agenda-mode)
  :config
  (setq org-agenda-span 21
	org-agenda-window-setup "only-window"
	org-agenda-files '("~/.emacs.d/PersonalAgenda.org")
	org-agenda-custom-commands '(("c" . "My Custom Agendas")
				     ("cu" "Unscheduled TODO"
				      ((todo "" ((org-agenda-overriding-header "\nUnscheduled TODO")
                                                 (org-agenda-skip-function '(org-agenda-skip-entry-if 'timestamp))))) nil nil))
	org-agenda-prefix-format '((agenda . " %i %?-12t% s")
				   (todo . " %i %-12:c")
				   (tags . " %i %-12:c")
				   (search . " %i %-12:c")))
  (setq org-super-agenda-groups '((:name "Important" :priority "A")
				  (:name "Late" :scheduled past :order 1)
				  (:name "Planned for today" :scheduled today :order 1))))


(use-package org-bullets
  :ensure t
  :hook
  ((org-mode . org-bullets-mode)))

(use-package plantuml-mode
  :ensure t
  :after org
  :custom
  (org-plantuml-jar-path (expand-file-name "~/.emacs.d/plantuml.jar"))
  :config
  (add-to-list 'org-src-lang-modes '("plantuml" . plantuml))
  (org-babel-do-load-languages 'org-babel-load-languages '((plantuml . t))))

(use-package projectile
  :ensure t
  :init
  (projectile-mode t)
  :bind-keymap
  ("C-c p" . projectile-command-map))

(use-package dashboard
  :after projectile
  :ensure t
  :after all-the-icons
  ;; :diminish dashboard-mode
  :config
  (dashboard-setup-startup-hook)
  (setq dashboard-center-content t)
  ;; (setq dashboard-set-file-icons t)
  ;; (setq dashboard-startup-banner "/Users/mmagueta/.emacs.d/sources/emacs.svg")
  (setq dashboard-banner-logo-title "Welcome to MageMacs, a magic GNU Emacs customization")
  (setq dashboard-items '((recents  . 5)
			  (bookmarks . 5)
		          (projects . 5)))
  (setq dashboard-center-content t)
  (setq dashboard-footer-messages '("Quod oculus non vidit, nec auris audivit - I Corinthios II,IX")))

(use-package transpose-frame
  :ensure t)

(use-package sml-mode
  :ensure t
  :config
  (use-package sml-basis
    :ensure t)
  (use-package sml-modeline
    :ensure t)
  (use-package ob-sml
    :ensure t))

(use-package org-roam
  :ensure t
  :init
  (setq org-roam-v2-ack t)
  :custom
  (org-roam-directory "~/RoamNotes")
  (org-roam-completion-everywhere t)
  :bind (("C-c n l" . org-roam-buffer-toggle)
         ("C-c n f" . org-roam-node-find)
         ("C-c n i" . org-roam-node-insert)
         :map org-mode-map
         ("C-M-i"    . completion-at-point))
  :config
  (org-roam-setup))

(use-package perspective
  :ensure t
  :bind (("C-x k" . persp-kill-buffer*))
  :init
  (persp-mode)
  (setq persp-suppress-no-prefix-key-warning t))

(use-package org-sql
  :ensure t
  :config
  (use-package ob-sql-mode
    :ensure t)
  (org-babel-do-load-languages 'org-babel-load-languages
			       '((sql . t))))

(provide 'configuration)
;;; configuration.el ends here