summaryrefslogtreecommitdiff
path: root/.emacs.d/modules/thanos-tools.el
diff options
context:
space:
mode:
authorThanos Apollo <[email protected]>2023-10-08 14:15:05 +0300
committerThanos Apollo <[email protected]>2023-10-08 14:15:05 +0300
commit68dea4b8df8f99a4749c24165a224ef2a5e04f82 (patch)
tree55c9afc3e62f102731dd509905cc403f435126fe /.emacs.d/modules/thanos-tools.el
parent59253186a5054552653f8d83a04753fff862753f (diff)
rename devtools -> tools
Diffstat (limited to '.emacs.d/modules/thanos-tools.el')
-rw-r--r--.emacs.d/modules/thanos-tools.el144
1 files changed, 144 insertions, 0 deletions
diff --git a/.emacs.d/modules/thanos-tools.el b/.emacs.d/modules/thanos-tools.el
new file mode 100644
index 0000000..da9655f
--- /dev/null
+++ b/.emacs.d/modules/thanos-tools.el
@@ -0,0 +1,144 @@
+;;; 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)
+
+;; Tramp
+(setf tramp-default-method "ssh")
+
+;; 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 & Consult
+(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 global-map (kbd "C-x r s") 'consult-register-store)
+(define-key global-map (kbd "C-c f") 'consult-grep)
+(define-key global-map (kbd "C-c F") 'consult-find)
+(define-key project-prefix-map (kbd "b") 'consult-project-buffer)
+(define-key global-map (kbd "M-y") 'consult-yank-from-kill-ring)
+
+(setf xref-show-xrefs-function #'consult-xref
+ xref-show-definitions-function #'consult-xref)
+
+(setf register-preview-delay 0.5
+ register-preview-function #'consult-register-format)
+
+(defun insert-brackets (&optional arg)
+ "Insert ARG 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