;;; 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") ;; 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 Info-mode-map (kbd "F") 'consult-info) (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) (define-key global-map (kbd "C-c g") '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) ;; Consult custom lambda functions (defvar-keymap thanos/consult-search :doc "Search for files in common folders I regularly use with consult." "l" #'(lambda () (interactive) (consult-find "~/Library")) "m" #'(lambda () (interactive) (yeetube-mpv-play (completing-read "Select video: " (directory-files-recursively "/mnt/external/medical-videos/" ".*\.mp4"))))) (define-key global-map (kbd "C-c s") #'(lambda ()(message "hello"))) (define-key global-map (kbd "C-c s") thanos/consult-search) (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) ;; 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-tools) ;;; thanos-tools.el ends here