;;; thanos-dev.el --- Developer Tools Configuration -*- lexical-binding: t; -*- ;; Copyright (C) 2023 Thanos Apollo ;; Author: Thanos Apollo ;; 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 . ;;; Commentary: ;; ╭━━━━┳╮╱╱╱╱╱╱╱╱╱╱╱╱╱╱╭━━━╮╱╱╱╱╱╭╮╭╮╱╱╱╱╱╱╱╱╭━━━╮ ;; ┃╭╮╭╮┃┃╱╱╱╱╱╱╱╱╱╱╱╱╱╱┃╭━╮┃╱╱╱╱╱┃┃┃┃╱╱╱╱╱╱╱╱┃╭━━╯ ;; ╰╯┃┃╰┫╰━┳━━┳━╮╭━━┳━━╮┃┃╱┃┣━━┳━━┫┃┃┃╭━━╮╱╱╱╱┃╰━━┳╮╭┳━━┳━━┳━━╮ ;; ╱╱┃┃╱┃╭╮┃╭╮┃╭╮┫╭╮┃━━┫┃╰━╯┃╭╮┃╭╮┃┃┃┃┃╭╮┃╭━━╮┃╭━━┫╰╯┃╭╮┃╭━┫━━┫ ;; ╱╱┃┃╱┃┃┃┃╭╮┃┃┃┃╰╯┣━━┃┃╭━╮┃╰╯┃╰╯┃╰┫╰┫╰╯┃╰━━╯┃╰━━┫┃┃┃╭╮┃╰━╋━━┃ ;; ╱╱╰╯╱╰╯╰┻╯╰┻╯╰┻━━┻━━╯╰╯╱╰┫╭━┻━━┻━┻━┻━━╯╱╱╱╱╰━━━┻┻┻┻╯╰┻━━┻━━╯ ;; ╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱┃┃ ;; ╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╰╯ ;;; Code: (require 'corfu) (require 'orderless) (require 'dabbrev) (setf dabbrev-ignored-buffer-regexps '("\\.\\(?:pdf\\|jpe?g\\|png\\)\\'")) (defun orderless-fast-dispatch (word index total) (and (= index 0) (= total 1) (length< word 4) `(orderless-regexp . ,(concat "^" (regexp-quote word))))) (orderless-define-completion-style orderless-fast (orderless-style-dispatchers '(orderless-fast-dispatch)) (orderless-matching-styles '(orderless-literal orderless-regexp))) ;; Corfu (global-corfu-mode) (corfu-popupinfo-mode) (setf corfu-mode t corfu-auto t corfu-auto-delay 0 corfu-auto-prefix 2 corfu-cycle t completion-styles '(orderless-fast basic) completion-cycle-threshold 3 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) (setq indent-tabs-mode nil) (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-dev) ;;; thanos-dev.el ends here