;;; thanos-tools.el --- 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) ;; Tramp (setf tramp-default-method "ssh") ;; sudo-edit (require 'sudo-edit) (setf sudo-edit-local-method "doas") ;; sudo is bloat ;; 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.3 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-x r b") 'consult-bookmark) (defvar-keymap thanos/search :doc "Keymap for search commands." "f" #'isearch-forward "b" #'isearch-backward "s" #'consult-line "C-f" #'consult-find "C-g" #'consult-grep "C-i" #'consult-info) (define-key global-map (kbd "C-s") thanos/search) (define-key project-prefix-map (kbd "b") 'consult-project-buffer) (define-key global-map (kbd "M-y") 'consult-yank-from-kill-ring) (define-key global-map (kbd "C-c l") 'consult-locate) (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 "g") 'project-magit) (setf magit-display-buffer-function #'magit-display-buffer-same-window-except-diff-v1) ;; 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)) ;; json (require 'json-mode) (add-to-list 'auto-mode-alist '("\\.json'" . json-mode)) ;; ChatGPT (require 'gptel) (setf gptel-api-key (password-store-get "chatgpt/api") gptel-model 'gpt-4-32k) (add-hook 'markdown-mode-hook #'(lambda () (flyspell-mode))) (provide 'thanos-tools) ;;; thanos-tools.el ends here