diff options
Diffstat (limited to '.emacs.d/modules/thanos-devtools.el')
-rw-r--r-- | .emacs.d/modules/thanos-devtools.el | 131 |
1 files changed, 131 insertions, 0 deletions
diff --git a/.emacs.d/modules/thanos-devtools.el b/.emacs.d/modules/thanos-devtools.el new file mode 100644 index 0000000..111e8c7 --- /dev/null +++ b/.emacs.d/modules/thanos-devtools.el @@ -0,0 +1,131 @@ +;;; thanos-dev.el --- Developer Tools Configuration -*- lexical-binding: t; -*- + +;; Copyright (C) 2023 Thanos Apollo + +;; Author: Thanos Apollo <[email protected]> +;; Keywords: extensions + +;; 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 <https://www.gnu.org/licenses/>. + +;;; Commentary: +;; ╭━━━━┳╮╱╱╱╱╱╱╱╱╱╱╱╱╱╱╭━━━╮╱╱╱╱╱╭╮╭╮╱╱╱╱╱╱╱╱╭━━━╮ +;; ┃╭╮╭╮┃┃╱╱╱╱╱╱╱╱╱╱╱╱╱╱┃╭━╮┃╱╱╱╱╱┃┃┃┃╱╱╱╱╱╱╱╱┃╭━━╯ +;; ╰╯┃┃╰┫╰━┳━━┳━╮╭━━┳━━╮┃┃╱┃┣━━┳━━┫┃┃┃╭━━╮╱╱╱╱┃╰━━┳╮╭┳━━┳━━┳━━╮ +;; ╱╱┃┃╱┃╭╮┃╭╮┃╭╮┫╭╮┃━━┫┃╰━╯┃╭╮┃╭╮┃┃┃┃┃╭╮┃╭━━╮┃╭━━┫╰╯┃╭╮┃╭━┫━━┫ +;; ╱╱┃┃╱┃┃┃┃╭╮┃┃┃┃╰╯┣━━┃┃╭━╮┃╰╯┃╰╯┃╰┫╰┫╰╯┃╰━━╯┃╰━━┫┃┃┃╭╮┃╰━╋━━┃ +;; ╱╱╰╯╱╰╯╰┻╯╰┻╯╰┻━━┻━━╯╰╯╱╰┫╭━┻━━┻━┻━┻━━╯╱╱╱╱╰━━━┻┻┻┻╯╰┻━━┻━━╯ +;; ╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱┃┃ +;; ╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╰╯ +;;; Code: +(require 'corfu) +(require 'orderless) +(require 'dabbrev) + +;; Completions +(setf dabbrev-ignored-buffer-regexps '("\\.\\(?:pdf\\|jpe?g\\|png\\)\\'")) + +(setf completion-category-overrides '((file (style basic partial-completion))) + completion-styles '(orderless) + completion-cycle-threshold 2) + +;; Corfu +(global-corfu-mode) +(corfu-popupinfo-mode) + +(setf corfu-auto t + corfu-auto-delay 0.1 + corfu-auto-prefix 2 + corfu-cycle t + corfu-popupinfo-delay 0 + corfu-quit-at-boundary 'separator + corfu-quit-no-match t + corfu-preselect 'first + corfu-preview-current t + corfu-echo-mode t) + +(setf indent-tabs-mode nil) + +;; Register +(define-key global-map (kbd "C-x r d") 'bookmark-delete) +(define-key global-map (kbd "C-x r C-r") 'bookmark-rename) +(define-key global-map (kbd "C-x r .") 'consult-register) +(define-key corfu-map (kbd "RET") nil) ;; Leave my enter alone + +(defun insert-brackets (&optional arg) + "Insert brackets." + (interactive "P") + (insert-pair arg ?\[ ?\])) + +(global-set-key (kbd "C-x M-[") 'insert-brackets) + +;; Magit +(require 'magit) + +(defun project-magit () + "Run magit-status in the current project's root." + (interactive) + (magit-status (project-root (project-current t)))) + +(define-key project-prefix-map (kbd "s") 'project-magit) + +(setf magit-display-buffer-function #'magit-display-buffer-same-window-except-diff-v1) +(define-prefix-command 'thanos/magit) +(global-set-key (kbd "C-c g") 'thanos/magit) +(define-key thanos/magit (kbd "c") 'magit-clone) + +;; shell scripting +(define-auto-insert + '("\\.sh\\'" . "Bash skeleton") + '("Description:" + "#!/bin/bash\n\n")) + +(add-hook 'shell-script-mode #'auto-insert) + +;; Emacs lisp +(setf tab-always-indent 'complete) +(add-to-list 'completion-styles 'initials t) + +(add-hook 'emacs-lisp-mode-hook #'rainbow-delimiters-mode) +(add-hook 'emacs-lisp-mode-hook #'display-line-numbers-mode) + +;; Disable checkdoc flycheck for org-src buffers +(add-hook 'org-src-mode-hook #'(lambda () + (flycheck-disable-checker 'emacs-lisp-checkdoc))) + +;; Common lisp +(setf inferior-lisp-program "sbcl") +(add-hook 'lisp-mode-hook #'rainbow-delimiters-mode) + +;; Scheme +(add-hook 'scheme-mode-hook #'rainbow-delimiters-mode) + +;; Python +(require 'python-mode) +(add-to-list 'auto-mode-alist '("\\.py\\'" . python-mode)) +(add-hook 'python-mode #'eglot) + +;; json +(require 'json-mode) +(add-to-list 'auto-mode-alist '("\\.json'" . json-mode)) + +;; ChatGPT +(require 'gptel) + +(define-key 'thanos/applications-map (kbd "c") 'gptel-send) + +(setf gptel-api-key (password-store-get "chatgpt/api") + gptel-model 'gpt-4-32k) + +(provide 'thanos-devtools) +;;; thanos-devtools.el ends here |