summaryrefslogtreecommitdiff
path: root/.emacs.d/init.el
diff options
context:
space:
mode:
Diffstat (limited to '.emacs.d/init.el')
-rw-r--r--.emacs.d/init.el883
1 files changed, 0 insertions, 883 deletions
diff --git a/.emacs.d/init.el b/.emacs.d/init.el
deleted file mode 100644
index 392a5ec..0000000
--- a/.emacs.d/init.el
+++ /dev/null
@@ -1,883 +0,0 @@
-;;; init.el --- Welcome to my Emacs 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:
-
-(setf user-full-name "Thanos Apollo"
- user-mail-address "[email protected]")
-
-(defvar is-zeus (equal (system-name) "zeus"))
-(defvar is-hermes (equal (system-name) "hermes"))
-(defvar is-phone (equal (system-name) "localhost"))
-
-(setf browse-url-browser-function 'browse-url-generic
- browse-url-generic-program "firefox"
- backup-directory-alist '((".*" . "~/.Trash"))
- sentence-end-double-space t
- default-input-method "bulgarian-phonetic"
- ;; fix emacs hangs
- gc-cons-threshold 5000000
- ispell-program-name (executable-find "hunspell"))
-
-(define-key global-map (kbd "M-<backspace>") 'backward-kill-sexp)
-(define-key global-map (kbd "C-c L") 'display-line-numbers-mode)
-(define-key global-map (kbd "C-z") 'nil)
-(define-key global-map (kbd "C-c r") 'rename-visited-file)
-
-(add-to-list 'load-path "~/.emacs.d/modules")
-
-(setf disabled-command-function nil ;; Enable all commands
- url-privacy-level 'high) ;; Privacy level
-
-;; Calendar dates
-(setf calendar-date-style 'european)
-
-(require 'dired)
-(define-key dired-mode-map (kbd "b") 'dired-up-directory)
-(define-key dired-mode-map (kbd "v") 'dired-watch-video)
-(define-key dired-mode-map (kbd "z") 'wdired-change-to-wdired-mode)
-(define-key dired-mode-map (kbd "C-c w") 'dired-set-wallpaper)
-(define-key dired-mode-map (kbd "C-c d") 'dired-delete-files-except)
-(define-key dired-mode-map (kbd "C-c r") 'dired-do-query-replace-regexp)
-
-;; font
-(custom-set-faces
- (if is-hermes '(default ((t (:inherit nil :height 120 :family "Jetbrains Mono"))))
- '(default ((t (:inherit nil :height 130 :family "Jetbrains Mono"))))))
-
-(if is-zeus
- (display-battery-mode 0)
- (display-battery-mode 1))
-
-(savehist-mode)
-(save-place-mode 1)
-(recentf-mode 1)
-(electric-pair-mode 1)
-
-;; Autoinsert
-(auto-insert-mode 1)
-
-(setq auto-insert-alist '((python-mode . "python.template"))
- auto-insert-directory (locate-user-emacs-file "insert"))
-
-(add-to-list 'completion-styles 'initials t)
-
-(setf tab-always-indent 'complete)
-
-;; tramp
-(setf tramp-default-method "ssh")
-
-;; xref
-(setf xref-show-xrefs-function #'consult-xref
- xref-show-definitions-function #'consult-xref)
-
-(add-hook 'emacs-lisp-mode-hook #'prettify-symbols-mode)
-(add-hook 'lisp-mode-hook #'prettify-symbols-mode)
-
-;; Set and load custom.el
-(setf custom-file (locate-user-emacs-file "custom.el"))
-(load custom-file 'noerror)
-
-;; Enable use-package support for imenu
-(setf use-package-enable-imenu-support t)
-
-;; Install straight.el
-(defvar bootstrap-version)
-
-(let ((bootstrap-file
- (expand-file-name
- "straight/repos/straight.el/bootstrap.el"
- (or (bound-and-true-p straight-base-dir)
- user-emacs-directory)))
- (bootstrap-version 7))
- (unless (file-exists-p bootstrap-file)
- (with-current-buffer
- (url-retrieve-synchronously
- "https://raw.githubusercontent.com/radian-software/straight.el/develop/install.el"
- 'silent 'inhibit-cookies)
- (goto-char (point-max))
- (eval-print-last-sexp)))
- (load bootstrap-file nil 'nomessage))
-
-(setq package-enable-at-startup nil)
-
-(require 'straight)
-
-(setf straight-use-package-by-default t)
-
-(setf straight-recipe-overrides
- '((transmission :type git :host nil :repo "[email protected]:/var/git/transmission.git")
- (yeetube :type git :host nil :repo "[email protected]:/var/git/yeetube.git")
- (gnosis :type git :host nil :repo "[email protected]:/var/git/gnosis.git")
- (pcmpl-emerge :type git :host nil :repo "[email protected]:/var/git/pcmpl-emerge.git")
- (pcmpl-rc :type git :host nil :repo "[email protected]:/var/git/pcmpl-rc.git")))
-
-(defun theme-invisible-dividers (_theme)
- "Make window dividers for THEME invisible."
- (let ((bg (face-background 'default)))
- (custom-set-faces
- `(fringe ((t :background ,bg :foreground ,bg)))
- `(window-divider ((t :background ,bg :foreground ,bg)))
- `(window-divider-first-pixel ((t :background ,bg :foreground ,bg)))
- `(window-divider-last-pixel ((t :background ,bg :foreground ,bg))))))
-
-(add-hook 'enable-theme-functions #'theme-invisible-dividers)
-
-;;;; Theming ;;;;
-(setf inhibit-startup-message t
- initial-scratch-message nil)
-
-(blink-cursor-mode -1)
-(global-visual-line-mode 0)
-
-(setf visible-bell nil
- display-line-numbers-type 'relative)
-
-(column-number-mode)
-(global-display-line-numbers-mode 1)
-
-;; Transparency
-(add-to-list 'default-frame-alist '(alpha-background . 85))
-
-;; theming
-(global-hl-line-mode)
-
-(defun thanos/terminal-theming ()
- "Customize theming when laucning Emacs as TUI."
- (unless (display-graphic-p (selected-frame))
- (set-face-background 'default "unspecified-bg" (selected-frame))
- (global-hl-line-mode 0)))
-
-(add-hook 'window-setup-hook 'thanos/terminal-theming)
-
-(when (equal is-phone nil)
- (scroll-bar-mode -1)
- (set-fringe-mode 10))
-
-(tool-bar-mode -1)
-(tooltip-mode -1)
-(menu-bar-mode -1)
-
-
-(use-package org
- :ensure t
- :config
- (setf org-directory "~/org/"
- org-agenda-files '("~/org/seminars.org" "~/org/lectures.org")
- org-default-notes-file (expand-file-name "notes.org" org-directory)
- org-ellipsis " ▼ "
- org-log-done 'time
- org-hide-emphasis-markers nil ;;change to t to hide emphasis markers
- org-table-convert-region-max-lines 20000
- org-log-done 'time
- org-todo-keywords '((sequence "TODO(t)" "SEMINAR(s)" "LECTURE(l)" "DONE(d)")))
-
- (setf org-structure-template-alist
- '(("e" . "src emacs-lisp")
- ("p" . "src python")
- ("l" . "src lisp")
- ("b" . "src bash")
- ("q" . "QUOTE")))
- :hook ((org-mode . org-auto-tangle-mode)
- (org-mode . (lambda () (display-line-numbers-mode -1) (flyspell-mode))))
- :bind (:map org-mode-map
- (("C-c l" . org-store-link)
- ("C-c M-t" . org-todo))))
-
-(defun org-insert-book ()
- "Insert org-link from ~/Library for book."
- (interactive)
- (let* ((book-path (read-file-name "Book: " "~/Library/")))
- (org-insert-link nil book-path (file-name-base book-path))))
-
-(use-package org-modern
- :ensure t
- :config
- (global-org-modern-mode)
- (setf org-modern-table nil
- org-modern-todo nil
- org-modern-tag nil))
-
-;; Create notes directory for org-roam
-(unless (file-exists-p "~/Notes")
- (make-directory "~/Notes"))
-
-(use-package org-roam
- :defer t
- :init
- (define-prefix-command 'thanos/notes-map)
- :config
- (setf org-roam-directory "~/Notes"
- org-roam-dailies-directory "daily/")
-
- (org-roam-db-autosync-enable)
-
- (setf org-roam-node-display-template
- (concat "${title:50} "(propertize "${tags:30}" 'face 'org-tag)))
-
- (setf org-roam-db-node-include-function
- (lambda ()
- (not (or (member "journal" (org-get-tags))
- (member "dailies" (org-get-tags))))))
- ;; Templates
- (setf org-roam-capture-templates
- '(("d" "default" plain
- "%?"
- :if-new (file+head "%<%Y%m%d%H%M%S>-${slug}.org" "#+title: ${title}\n#+startup: overview\n")
- :unnarrowed t)
- ("p" "MUS" plain "* Goals\n\n%?\n\n* Tasks\n\n** TODO Add initial tasks\n\n* Dates\n\n"
- :if-new (file+head "%<%Y%m%d%H%M%S>-${slug}.org" "#+title: ${title}\n#+filetags: MUS")
- :unnarrowed t))
- org-roam-dailies-capture-templates
- '(("d" "default" entry
- "* %?"
- :target (file+head "%<%Y-%m-%d>.org"
- "#+title: %<%Y-%m-%d>\n#+filetags: :journal:\n"))
- ("j" "journal" plain
- "\n* Daily Notes\n\n* Goals\n+ []\n\n* Extras %?"
- :target (file+head "%<%Y-%m-%d>.org"
- "#+title: %<%Y-%m-%d>\n#+filetags: :journal:\n"))))
- (defun org-roam-ref-add-book ()
- "Insert org-link from Library."
- (interactive)
- (let ((book (format "file:%s" (read-file-name "Book: " (if is-zeus "/hdd/Library/" "~/Library/")))))
- book))
-
- (defun org-roam-sync-notes ()
- "Sync org-oram notes"
- (interactive)
- (let ((git (executable-find "git"))
- (default-directory org-roam-directory))
- (message "Synching org-roam notes %s" org-roam-directory)
- (unless git
- (error "Git not found, please install `git'"))
- (unless (file-exists-p (expand-file-name ".git" gnosis-dir))
- (message "Creating git repository")
- (vc-create-repo 'Git))
- (shell-command "git pull")
- (shell-command (format "%s %s" git "add ."))
- (shell-command (format "%s %s %s" git "commit -m" (shell-quote-argument "Update org-roam notes")))
- (vc-git-push nil))
- (funcall 'org-roam-db-sync))
- :bind (("C-c n" . thanos/notes-map)
- :map thanos/notes-map
- ("t" . org-roam-buffer-toggle)
- ("f" . org-roam-node-find)
- ("i" . org-roam-node-insert)
- ("d" . org-roam-dailies-goto-today)
- ("D" . org-roam-dailies-goto-date)
- :map org-mode-map
- ("C-c C-." . org-roam-tag-add)
- ("C-c i" . org-id-get-create)))
-
-(use-package org-roam-ui
- :defer t)
-
-(use-package modus-themes
- :straight t
- :config
- (setf modus-themes-italic-constructs nil
- modus-themes-bold-constructs nil
- modus-themes-mixed-fonts nil
- modus-themes-variable-pitch-ui nil
- modus-themes-custom-auto-reload t
- modus-themes-disable-other-themes t
- modus-themes-prompts '(italic)
- modus-themes-completions '((matches . (extrabold))
- (selection . (semibold italic text-also underline)))
- modus-themes-org-blocks 'tinted-background)
- ;; Palette overrides
- (setf modus-themes-common-palette-overrides
- '(;; (fg-line-number-inactive "gray40")
- (fg-line-number-active cyan-intense)
- ;; (bg-main "#1d2021") ;;grubox-hard
- ;; (bg-main "#191919") ;; 1337
- ;; (bg-main "#1d1f21") ;; tomorrow night
- (bg-main "#151515") ;; jazz
- ;; (bg-main "#0C0C0C") ;; random black
- ;; (bg-main "#171717") ;; badger
- ;; (overline-heading-1 gold)
- (fg-heading-1 red-warmer)
- ;; (bg-heading-1 bg-blue-nuanced)
- (bg-line-number-inactive unspecified)
- (bg-line-number-active unspecified)
- (bg-paren-match bg-magenta-intense)
- (underline-paren-match fg-main)
- (underline-err red-intense)
- (underline-warning yellow-faint)
- (underline-note cyan-faint)
- (string "#86B187")
- (border-mode-line-active unspecified)
- (border-mode-line-inactive unspecified)
- (bg-mode-line-active "#433F4f") ;; subtle lavender
- (bg-mode-line-inactive "#1D1D1D")
- ;; set fg from badger theme
- (fg-mode-line-active "#F6F3E8")
- (bg-hl-line bg-dim)
- (cursor slate)
- (prose-todo green-intense)
- (prose-done bg-term-white)
- (fg-prompt yellow-faint)
- ,@modus-themes-preset-overrides-intense))
- ;; Headings
- (setf modus-themes-headings
- '((1 . (ultrabold 1.35))
- (2 . (semibold 1.2))
- (agenda-date . (1.3))
- (agenda-structure . (variable-pitch light 1.8))
- (t . (1.15))))
- ;; Load modus
- (load-theme 'modus-vivendi t))
-
-(use-package vertico
- :ensure t
- :config
- (vertico-mode))
-
-(use-package marginalia
- :ensure t
- :config
- (marginalia-mode))
-
-(use-package consult
- :ensure t
- :init (define-prefix-command 'thanos/search)
- :bind (("C-x r d" . 'bookmark-delete)
- ("C-x r C-r" . 'bookmark-rename)
- ("C-x r C-j" . 'consult-register)
- ("C-x r SPC" . 'consult-register-store)
- ("C-x r b" . 'consult-bookmark)
- ("C-c m" . 'consult-imenu)
- ("C-x b" . 'consult-buffer)
- ("M-y" . 'consult-yank-from-kill-ring)
- ("C-s" . 'thanos/search)
- :map thanos/search
- ("f" . 'isearch-forward)
- ("r" . 'isearch-backward)
- ("s" . 'consult-line)
- ("i" . 'change-inner)
- ("C-f" . 'consult-find)
- ("C-g" . 'consult-grep)
- ("C-i" . 'consult-info)
- ("C-l" . 'consult-locate)
- :map project-prefix-map
- ("b" . 'consult-project-buffer)))
-
-(use-package which-key
- :ensure t
- :config
- (which-key-mode 1))
-
-(defun elfeed-mpv (&optional use-generic-p)
- "Play video link with mpv."
- (interactive "P")
- (let ((entries (elfeed-search-selected)))
- (cl-loop for entry in entries
- do (elfeed-untag entry 'unread)
- when (elfeed-entry-link entry)
- do (start-process-shell-command "elfeed-video" nil (format "mpv \"%s\"" it)))
- (mapc #'elfeed-search-update-entry entries)
- (unless (use-region-p) (forward-line))))
-
-(use-package elfeed
- :defer t
- :config
- (setf elfeed-search-filter "@1-week-ago +unread -hackernoon"
- browse-url-browser-function #'browse-url-default-browser)
- ;; Feeds
- (setf elfeed-feeds
- '(("https://hackaday.com/blog/feed/"
- hackaday linux)
- ("https://thanosapollo.com/posts/index.xml"
- thanos)
- ("http://wikileaks.org/feed"
- wikileaks)
- ("https://hackernoon.com/feed"
- hackernoon)
- ("https://torrentfreak.com/feed"
- torrentfreak piracy)
- ("https://www.science.org/action/showFeed?type=etoc&feed=rss&jc=sciimmunol"
- science)
- ("https://rss-bridge.thanosapollo.org/?action=display&bridge=CssSelectorBridge&home_page=https%3A%2F%2Fwww.medscape.com%2Findex%2Flist_13470_0&url_selector=a.title&url_pattern=viewarticle%2F.*&content_selector=div.article__main-content&content_cleanup=&title_cleanup=+-+Index&limit=&format=Atom" medscape med)
- ("http://rss-bridge.thanosapollo.org/?action=display&bridge=CssSelectorBridge&home_page=https%3A%2F%2Fmedfac.mu-sofia.com%2Fen%2Fnews%2F&url_selector=div.news-card&url_pattern=%2F*&content_selector=article.richtext-area&content_cleanup=&title_cleanup=&limit=&format=Atom" musofia med)
- ("http://rss-bridge.thanosapollo.org/?action=display&bridge=CssSelectorBridge&home_page=https%3A%2F%2Fedition.cnn.com%2Fworld%2Feurope&url_selector=a.container__link--type-article&url_pattern=&content_selector=div.article__content&content_cleanup=&&title_cleanup=-+breaking+news%2C+video%2C+headlines+and+opinion&limit=&format=Atom" news cnn europe)
- ("http://rss-bridge.thanosapollo.org/?action=display&bridge=CssSelectorBridge&home_page=https%3A%2F%2Fedition.cnn.com%2Fworld%2Famericas&url_selector=a.container__link--type-article&url_pattern=&content_selector=div.article__content&content_cleanup=div.data-uri&title_cleanup=-+breaking+news%2C+video%2C+headlines+and+opinion&limit=&format=Atom" news cnn americas)
- ("https://annas-blog.org/rss.xml"
- anna piracy)
- ("https://rss-bridge.thanosapollo.org/?action=display&bridge=CssSelectorBridge&home_page=https%3A%2F%2Fwww.theguardian.com%2Feurope&url_selector=a.dcr-lv2v9o&url_pattern=&content_selector=div.article-body-commercial-selector&content_cleanup=figure.dcr-173mewl%2C+div.dcr-ut4tvs&title_cleanup=News%2C+sport+and+opinion+from+the+Guardian%27s+Europe+edition+%7C&limit=&format=Atom" news guardian europe)
- ("https://planet.emacslife.com/atom.xml" emacs emacslife)
- ("https://localmonero.co/static/rss/the-monero-standard/feed.xml" monero)
- ("https://devonzuegel.com/feed" devon)
- ("https://www.addtoany.com/add_to/feed?linkurl=http%3A%2F%2Fwww.thelancet.com%2Frssfeed%2Flancet_online.xml&type=feed&linkname=The%20Lancet%20Online%20First&linknote=" lancet med)
- ("http://tools.cdc.gov/podcasts/feed.asp?feedid=183" cdc med)
- ("http://planet.lisp.org/rss20.xml" lisp planetlisp)))
- :bind (("C-x f" . elfeed)
- :map elfeed-search-mode-map
- ("v" . 'elfeed-mpv)
- ("U" . 'elfeed-update))
- :hook ((elfeed-search-mode . (lambda () (display-line-numbers-mode 0)))))
-
-;; Python
-(use-package python-mode
- :defer t
- :config
- (add-to-list 'auto-mode-alist '("\\.py\\'" . python-mode)))
-
-(use-package pyenv
- :defer t)
-
-(use-package elpy
- :ensure t
- :init
- (elpy-enable))
-
-;; Clojure
-(use-package cider
- :defer t)
-
-(use-package clojure-mode
- :defer t)
-
-(use-package rainbow-delimiters
- :defer t
- :hook ((emacs-lisp-mode . rainbow-delimiters-mode)
- (lisp-mode . rainbow-delimiters-mode)
- (clojure-mode . rainbow-delimiters-mode)
- (scheme-mode . rainbow-delimiters-mode)))
-
-;; (use-package paredit
-;; :ensure t
-;; :hook ((emacs-lisp-mode . paredit-mode)
-;; (lisp-mode . paredit-mode)
-;; (clojure-mode . paredit-mode)
-;; (scheme-mode . paredit-mode)))
-
-(use-package sly
- :init (setf inferior-lisp-program "sbcl")
- :defer t)
-
-(use-package helpful
- :defer t
- :bind (("C-h f" . 'helpful-callable)
- ("C-h v" . 'helpful-variable)
- ("C-h k" . 'helpful-key)
- ("C-h x" . 'helpful-command)
- ("C-h ." . 'helpful-at-point)
- ("C-h F" . 'helpful-function)
- ("C-h C-k" . 'helpful-kill-buffers)
- ("C-h a" . 'apropos)
- ("C-h C-m" . 'info-apropos)))
-
-(use-package password-store
- :defer t)
-
-(use-package ox-hugo
- :ensure t
- :config
- (setf org-hugo-section "post"))
-
-(use-package json-mode
- :defer t
- :config
- (add-to-list 'auto-mode-alist '("\\.json'" . json-mode)))
-
-(defun project-magit ()
- "Run magit-status in the current project's root."
- (interactive)
- (magit-status-setup-buffer (project-root (project-current t))))
-
-(use-package magit
- :defer t
- :config
- (setf magit-display-buffer-function #'magit-display-buffer-same-window-except-diff-v1)
- :bind (:map project-prefix-map ("g" . 'project-magit)))
-
-(use-package corfu
- :ensure t
- :config
- (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))
-
-(defun insert-brackets (&optional arg)
- "Insert ARG brackets."
- (interactive "P")
- (insert-pair arg ?\[ ?\]))
-
-(global-set-key (kbd "C-x M-[") 'insert-brackets)
-
-
-(use-package orderless
- :init (add-to-list 'completion-styles 'initials t)
- :ensure t
- :config
- (setf completion-category-overrides '((file (style basic partial-completion)))
- completion-styles '(orderless)
- completion-cycle-threshold 2))
-
-(use-package pdf-tools
- :ensure t
- :config
- (pdf-tools-install)
- (add-to-list 'auto-mode-alist '("\\.pdf\\'" . 'pdf-view-mode))
- :hook
- ((pdf-view-mode . (lambda () (display-line-numbers-mode 0)))))
-
-(use-package markdown-mode
- :defer t
- :config
- (setq markdown-header-scaling t
- markdown-command "multimarkdown")
- (add-to-list 'auto-mode-alist '("\\.md\\'" . gfm-mode))
- :hook ((markdown-mode . flyspell-mode)))
-
-(use-package org-auto-tangle
- :defer t)
-
-(use-package org-present
- :defer t)
-
-(use-package expand-region
- :defer t)
-
-(use-package change-inner
- :after expand-region
- :bind ((:map thanos/search ("i" . 'change-inner))))
-
-(use-package nov
- :defer t
- :config
- (add-to-list 'auto-mode-alist '("\\.epub\\'" . nov-mode)))
-
-(use-package eshell-syntax-highlighting
- :defer t)
-
-(use-package emojify
- :ensure t
- :hook (erc-mode . emojify-mode)
- :commands emojify-mode)
-
-(use-package flycheck-package
- :ensure t
- :after flycheck)
-
-(use-package flycheck
- :ensure t
- :config
- (setf flycheck-emacs-lisp-load-path 'inherit)
- (global-flycheck-mode)
- :hook ((emacs-lisp-mode . (lambda () (flycheck-mode) (flycheck-package-setup)))))
-
-;; Shells
-;; (use-package vterm
-;; :defer t
-;; :bind (("C-c v" . vterm)
-;; :map vterm-mode-map
-;; ("M-&" . 'async-shell-command)
-;; ("C-c C-y" . 'vterm-copy-mode))
-;; :hook ((vterm-mode . (lambda () (display-line-numbers-mode -1)))))
-
-(use-package shell
- :defer t
- :bind (("C-c v" . shell))
- :hook ((shell-mode . (lambda () (display-line-numbers-mode -1)))))
-
-(defvar thanos/aliases
- '((g . magit)
- (gl . magit-log)
- (gc . magit-clone)
- (d . dired)
- (o . find-file)
- (oo . find-file-other-window)
- (ll . (lambda () (eshell/ls '-lha)))
- (eshell/clear . eshell/clear-scrollback)))
-
-(defun thanos/set-eshell-aliases (aliases)
- "Set ALIASES as eshell aliases."
- (mapc (lambda (alias)
- (defalias (car alias) (cdr alias)))
- aliases))
-
-(use-package eshell
- :config
- (setf eshell-highlight-prompt t)
- (eshell-syntax-highlighting-global-mode 1)
- :bind (("C-c e" . eshell))
- :hook ((eshell-mode . (lambda ()
- (thanos/set-eshell-aliases thanos/aliases)
- (display-line-numbers-mode -1)))))
-
-(use-package eat
- :after 'eshell
- :config
- (add-hook 'eshell-load-hook #'eat-eshell-mode)
- (setf eat-term-name "xterm-256color"))
-
-(use-package eshell-git-prompt
- :straight '(eshell-git-prompt :type git
- :host nil
- :repo "https://git.thanosapollo.org/eshell-git-prompt")
- :config
- (eshell-git-prompt-use-theme 'multiline))
-
-;; Chat
-(use-package telega
- :defer t
- :hook ((telega-root-mode . (lambda ()
- (emojify-mode)
- (display-line-numbers-mode -1)))
- (telega-chat-mode . (lambda ()
- (emojify-mode)
- (display-line-numbers-mode -1))))
- :config
- (setf telega-completing-read-function #'completing-read)
- :bind (("C-x T" . 'telega)))
-
-(use-package erc
- :defer t
- :config
- (unless (expand-file-name "erc" user-emacs-directory)
- (make-directory (expand-file-name "erc" user-emacs-directory)))
- (setf erc-modules
- '(sasl netsplit fill button match track completion readonly
- networks ring autojoin noncommands irccontrols move-to-prompt stamp
- menu list log notifications)
- erc-log-channels-directory (expand-file-name "erc" user-emacs-directory))
- :bind (("C-c E" . 'erc-libera)
- :map erc-mode-map
- ("C-c RET" . 'erc-cmd-QUERY)))
-
-(use-package erc-image
- :ensure t
- :after erc
- :config
- (setq erc-image-inline-rescale 300)
- (add-to-list 'erc-modules 'image))
-
-(use-package transmission
- :defer t)
-
-(use-package sudo-edit
- :defer t
- :config
- (setf sudo-edit-local-method "doas"))
-
-(use-package dabbrev
- :defer t
- :config
- (setf dabbrev-ignored-buffer-regexps '("\\.\\(?:pdf\\|jpe?g\\|png\\)\\'")))
-
-(use-package xref
- :defer t
- :config
- (setf xref-show-xrefs-function #'consult-xref
- xref-show-definitions-function #'consult-xref))
-
-(use-package moc-player
- :defer t
- :straight '(moc-player :local-repo "~/Dev/emacs-lisp/moc-player")
- :init (define-prefix-command 'thanos/mocp)
- :bind (("C-z" . thanos/mocp)
- :map thanos/mocp
- ("SPC" . 'mocp-toggle-pause)
- ("n" . 'mocp-next)
- ("p" . 'mocp-previous)))
-
-;; My packages
-(when (or is-zeus is-hermes)
- (use-package yeetube
- :init (define-prefix-command 'thanos/yeetube-map)
- :straight (yeetube :local-repo "~/Dev/emacs-lisp/yeetube")
- :ensure t
- :config
- (setf yeetube-results-limit 20
- yeetube-mpv-disable-video t
- yeetube-display-thumbnails t
- yeetube-play-function #'yeetube-mpv-play)
- :bind (("C-c y" . 'thanos/yeetube-map)
- :map thanos/yeetube-map
- ("s" . 'yeetube-search)
- ("b" . 'yeetube-play-saved-video)
- ("d" . 'yeetube-download-videos)
- ("C-d" . 'yeetube-download-vimeo-videos)
- ("p" . 'yeetube-mpv-toggle-pause)
- ("v" . 'yeetube-mpv-toggle-video)
- ("V" . 'yeetube-mpv-toggle-no-video-flag)
- ("C-p" . 'yeetube-mpv-toggle-video)
- ("k" . 'yeetube-remove-saved-video)))
-
- (use-package gnosis
- :straight (gnosis :local-repo "~/Dev/emacs-lisp/gnosis")
- :ensure t
- :init (define-prefix-command 'thanos/gnosis-map)
- :config
- (setf gnosis-vc-auto-push (when (or is-hermes
- is-zeus)
- t)
- gnosis-mcq-display-choices nil
- gnosis-image-width (if is-zeus 300 150)
- gnosis-image-height (if is-zeus 300 150))
- (gnosis-modeline-mode)
- :bind (("C-r" . thanos/gnosis-map)
- :map thanos/gnosis-map
- ("r" . 'gnosis-review)
- ("a" . 'gnosis-add-note)
- ("C-d" . 'gnosis-dashboard)
- ("d" . 'gnosis-add-deck)
- ("t" . 'gnosis-test-start)))
-
- ;; Run vc-pull on startup
- (gnosis-vc-pull)
-
- (use-package pcmpl-emerge
- :defer t
- :straight (pcmpl-emerge :local-repo "~/Dev/emacs-lisp/pcmpl-emerge"))
-
- (use-package pcmpl-rc
- :straight (pcmpl-rc :local-repo "~/Dev/emacs-lisp/pcmpl-rc")
- :defer t)
-
- (use-package pcmpl-tailscale
- :straight (pcmpl-tailscale :local-repo "~/Dev/emacs-lisp/pcmpl-taiscale")
- :defer t))
-
-;; Emacs dev
-
-(use-package package-lint
- :defer t)
-
-;; AI tools
-(use-package gptel
- :defer t
- :config
- (setf gptel-api-key (password-store-get-field "openai/[email protected]" "api")
- gptel-default-mode 'org-mode)
- (setq-default gptel-model "zephyr:latest"
- gptel-backend (gptel-make-ollama "Ollama"
- :host "zeus:11434"
- :stream t
- :models '("llama2:latest" "zephyr:latest" "codellama:latest"
- "mistral:latest" "mixtral:latest" "neural-chat:latest"
- "dolphin-mixtral:latest"))
- gptel-directives '((default . "You are a large language model living in Emacs and a helpful assistant. Respond concisely.")
- (programming . "You are a large language model and a careful programmer. Provide code and only code as output without any additional text, prompt or note.")
- (epictetus . "You are Epictetus, the stoic philosopher from Nicopolis. Respond concisely as Epictetus.")
- (med . "You are a medical professor within the Emacs. Respond concisely.")
- (code-review . "You are an expert programmer within Emacs reviewing code. Respond concisely")
- (writer . "You are an expert writer and FOSS enthusiast. Improve only the article sections provided as a hacker, do not add extra paragraphs.")))
- :bind (("C-c g" . 'gptel-send)
- :map gptel-mode-map
- ("C-c h" . 'gptel-menu)))
-
-(use-package copilot
- :straight (copilot :host github :repo "zerolfx/copilot.el" :files ("dist" "*.el"))
- :bind (:map copilot-mode-map
- ("M-TAB" . 'copilot-accept-completion-by-line)
- ("C-M-<tab>" . 'copilot-accept-completion-by-word)
- ("C-M-n" . 'copilot-next-completion)
- ("C-M-p" . 'copilot-previous-completion)))
-
-
-;; Password-store
-(require 'password-store)
-(defun thanos/pass-launcher ()
- "Launch Emacs as a front-end for pass."
- (interactive)
- (unwind-protect
- (with-selected-frame
- (make-frame '((name . "thanos/pass-launcher")
- (fullscreen . 0)
- (undecorated . t)
- (minibuffer . only)
- (width . 70)
- (height . 15)))
- (let* ((choice (completing-read "Choose an action: "
- '("AUTO" "COPY PASS" "COPY USERNAME" "EDIT" "GENERATE")))
- (action (pcase choice
- ("AUTO" #'(lambda (entry) (let ((user (password-store-get-field entry "user"))
- (pass (password-store-get entry)))
- (start-process-shell-command
- "xdotool" nil
- (format "sleep 0.3 && xdotool getactivewindow type %s && xdotool key Tab && xdotool getactivewindow type %s"
- (shell-quote-argument (if user user "thanosapollo"))
- (shell-quote-argument pass))))))
- ("COPY PASS" #'password-store-copy)
- ("COPY USERNAME" #'(lambda (entry) (password-store-copy-field entry "user")))
- ("EDIT" #'password-store-edit)
- ("GENERATE" #'password-store-generate))))
- (funcall action (completing-read "Search: " (password-store-list)))
- (delete-frame)))))
-
-(defun smtp-get-pass ()
- "Get password for smtp."
- (interactive)
- (password-store-copy-field "fastmail.com/[email protected]" "smtp"))
-
-
-(use-package password-store
- :init (define-prefix-command 'thanos/pass)
- :defer t
- :config
- (setf password-store-password-length (+ 20 (random 20)))
- :bind (("C-c p" . 'thanos/pass)
- :map thanos/pass
- ("i" . 'password-store-insert)
- ("e" . 'password-store-edit)
- ("g" . 'password-store-generate)
- ("c" . 'password-store-copy)
- ("s" . 'smtp-get-pass)))
-
-(use-package package-lint
- :defer t)
-
-(use-package consult-mu
- :straight (consult-mu :type git :host github :repo "armindarvish/consult-mu" :files (:defaults "extras/*.el"))
- :after (mu4e consult)
- :bind (:map mu4e-main-mode-map
- ("M-s" . 'consult-mu)
- :map mu4e-view-mode-map
- ("M-s" . 'consult-mu)
- :map mu4e-headers-mode-map
- ("M-s" . 'consult-mu)))
-
-(require 'thanos-commands) ;; Misc commands
-(when (or is-zeus is-hermes)
- (require 'thanos-mu4e))
-
-;;; init.el ends here