summaryrefslogtreecommitdiff
path: root/.emacs.d/modules/thanos-devtools.el
diff options
context:
space:
mode:
Diffstat (limited to '.emacs.d/modules/thanos-devtools.el')
-rw-r--r--.emacs.d/modules/thanos-devtools.el131
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