From 4c5df05a99987cc7358bbe9157170ec2ebc1935c Mon Sep 17 00:00:00 2001 From: Daniel <89086143+BardofSprites@users.noreply.github.com> Date: Sat, 6 Apr 2024 13:02:34 -0400 Subject: major refractor (pt 1/2-4) --- bard-emacs-modules/bard-emacs-completion.el | 87 +++++++++++++ bard-emacs-modules/bard-emacs-dashboard.el | 54 ++++---- bard-emacs-modules/bard-emacs-dired.el | 14 ++ bard-emacs-modules/bard-emacs-email.el | 6 +- bard-emacs-modules/bard-emacs-eshell.el | 2 +- bard-emacs-modules/bard-emacs-essentials.el | 139 ++++++++++++++++++++ bard-emacs-modules/bard-emacs-org.el | 63 ++++----- bard-emacs-modules/bard-emacs-package.el | 194 +--------------------------- bard-emacs-modules/bard-emacs-prog.el | 73 +++++++---- bard-emacs-modules/bard-emacs-theme.el | 48 ++++--- bard-emacs-modules/bard-emacs-time.el | 47 ------- bard-emacs-modules/bard-emacs-ui.el | 64 +++++---- bard-emacs-modules/bard-emacs-web.el | 28 ++++ bard-emacs-modules/bard-emacs-window.el | 39 +++++- bard-emacs-modules/bard-emacs-writing.el | 113 ++++++++++++++++ 15 files changed, 588 insertions(+), 383 deletions(-) create mode 100644 bard-emacs-modules/bard-emacs-completion.el create mode 100644 bard-emacs-modules/bard-emacs-essentials.el delete mode 100644 bard-emacs-modules/bard-emacs-time.el create mode 100644 bard-emacs-modules/bard-emacs-writing.el (limited to 'bard-emacs-modules') diff --git a/bard-emacs-modules/bard-emacs-completion.el b/bard-emacs-modules/bard-emacs-completion.el new file mode 100644 index 0000000..62fc712 --- /dev/null +++ b/bard-emacs-modules/bard-emacs-completion.el @@ -0,0 +1,87 @@ +;;; bard-emacs-completion.el --- My configurations for emacs completion frameworks -*- lexical-binding: t -*- + +;; Author: bard +;; Maintainer: bard +;; Version: 0.1.0 +;; Package-Requires: ((emacs 29.2)) +;; Homepage: github +;; Keywords: completion + + +;; This file is not part of GNU Emacs + +;; 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: + +;; minibuffer completion +(use-package vertico + :init + (vertico-mode 1)) + +(use-package marginalia + :init + (marginalia-mode 1)) + +(use-package orderless + :config + (setq completion-styles '(orderless basic))) + +(use-package company + :init + (global-company-mode 1)) + +(use-package consult + :defer 2 + :bind + ("C-x b" . consult-buffer) + ("C-s" . consult-line) + ("C-S-s" . consult-line-multi) + ("C-z s" . consult-ripgrep)) + +;; (use-package embark +;; :ensure t +;; :config +;; (setq embark-confirm-act-all nil) +;; ;; The prot-embark.el has an advice to further simplify the +;; ;; minimal indicator. It shows cycling, which I never want to see +;; ;; or do. +;; (setq embark-mixed-indicator-both nil) +;; (setq embark-mixed-indicator-delay 1.0) +;; (setq embark-indicators '(embark-mixed-indicator embark-highlight-indicator)) +;; (setq embark-verbose-indicator-nested nil) ; I think I don't have them, but I do not want them either +;; (setq embark-verbose-indicator-buffer-sections '(bindings)) +;; (setq embark-verbose-indicator-excluded-actions +;; '(embark-cycle embark-act-all embark-collect embark-export embark-insert)) + +;; ) + +(use-package imenu-list + :bind + (("C-`" . imenu-list-smart-toggle))) + +;; Savehist +(setq savehist-file (locate-user-emacs-file "savehist")) +(setq history-length 100) +(setq history-delete-duplicates t) +(setq savehist-save-minibuffer-history t) +(setq savehist-additional-variables '(register-alist kill-ring)) +(savehist-mode 1) + +(provide 'bard-emacs-completion) +;;; bard-emacs-completion.el ends here diff --git a/bard-emacs-modules/bard-emacs-dashboard.el b/bard-emacs-modules/bard-emacs-dashboard.el index 87f9044..c2d846b 100644 --- a/bard-emacs-modules/bard-emacs-dashboard.el +++ b/bard-emacs-modules/bard-emacs-dashboard.el @@ -1,32 +1,32 @@ -(require 'bard-dashboard) +;; (require 'bard-dashboard) -(use-package dashboard - :ensure t - :config - (define-key global-map (kbd "") #'dashboard-open) - (define-key global-map (kbd "C-z d") #'dashboard-open) - (setq initial-buffer-choice 'dashboard-open) - (dashboard-setup-startup-hook) - (setq dashboard-startup-banner "~/.emacs.d/img/emacslogo.png") - (setq dashboard-banner-logo-width 50) - (setq dashboard-banner-logo-height 50) - (setq dashboard-center-content t) - ;; dashboar items - (setq dashboard-items '((recents . 5) - (agenda . 5))) +;; (use-package dashboard +;; :ensure t +;; :config +;; (define-key global-map (kbd "") #'dashboard-open) +;; (define-key global-map (kbd "C-z d") #'dashboard-open) +;; (setq initial-buffer-choice 'dashboard-open) +;; (dashboard-setup-startup-hook) +;; (setq dashboard-startup-banner "~/.emacs.d/img/emacslogo.png") +;; (setq dashboard-banner-logo-width 50) +;; (setq dashboard-banner-logo-height 50) +;; (setq dashboard-center-content t) +;; ;; dashboar items +;; (setq dashboard-items '((recents . 5) +;; (agenda . 5))) - ;; Insert custom item - (add-to-list 'dashboard-item-generators '(custom . dashboard-insert-custom)) - (add-to-list 'dashboard-items '(custom) t) +;; ;; Insert custom item +;; (add-to-list 'dashboard-item-generators '(custom . dashboard-insert-custom)) +;; (add-to-list 'dashboard-items '(custom) t) - (setq dashboard-banner-logo-title "Time for another recreational programming session.") - (setq dashboard-startupify-list '(dashboard-insert-banner - dashboard-insert-newline - dashboard-insert-banner-title - dashboard-insert-newline - dashboard-insert-items - dashboard-insert-newline)) +;; (setq dashboard-banner-logo-title "Time for another recreational programming session.") +;; (setq dashboard-startupify-list '(dashboard-insert-banner +;; dashboard-insert-newline +;; dashboard-insert-banner-title +;; dashboard-insert-newline +;; dashboard-insert-items +;; dashboard-insert-newline)) - (setq dashboard-set-init-info nil)) +;; (setq dashboard-set-init-info nil)) -(provide 'bard-emacs-dashboard) +;; (provide 'bard-emacs-dashboard) diff --git a/bard-emacs-modules/bard-emacs-dired.el b/bard-emacs-modules/bard-emacs-dired.el index 2d3433d..266d6e7 100644 --- a/bard-emacs-modules/bard-emacs-dired.el +++ b/bard-emacs-modules/bard-emacs-dired.el @@ -24,3 +24,17 @@ ;; hook for attaching emails mode (add-hook 'dired-mode-hook #'turn-on-gnus-dired-mode) + +(setq dired-dwim-target t) + +;; Image dired +(setq image-dired-thumbnail-storage 'standard) +(setq image-dired-external-viewer "nsxiv") +(setq image-dired-thumb-size 80) +(setq image-dired-thumb-margin 2) +(setq image-dired-thumb-relief 0) +(setq image-dired-thumbs-per-row 4) + + +;; (define-key image-dired-thumbnail-mode-map +;; (kbd "") #'image-dired-thumbnail-display-external) diff --git a/bard-emacs-modules/bard-emacs-email.el b/bard-emacs-modules/bard-emacs-email.el index 0a90e5f..ec8f925 100644 --- a/bard-emacs-modules/bard-emacs-email.el +++ b/bard-emacs-modules/bard-emacs-email.el @@ -5,9 +5,9 @@ :config (define-key global-map (kbd "C-c m") #'notmuch)) -(use-package notmuch-indicator - :ensure t - :config) +(use-package notmuch-indicator) + +(use-package mbsync) (setq notmuch-show-logo nil notmuch-column-control 1.0 diff --git a/bard-emacs-modules/bard-emacs-eshell.el b/bard-emacs-modules/bard-emacs-eshell.el index 61d23e8..412ef7b 100644 --- a/bard-emacs-modules/bard-emacs-eshell.el +++ b/bard-emacs-modules/bard-emacs-eshell.el @@ -10,4 +10,4 @@ (define-key eshell-mode-map (kbd "C-c d") #'prot-eshell-complete-recent-dir) (define-key eshell-mode-map (kbd "M-k") #'eshell-kill-input)) -(provide 'bard-emacs-eshell.el) +(provide 'bard-emacs-eshell) diff --git a/bard-emacs-modules/bard-emacs-essentials.el b/bard-emacs-modules/bard-emacs-essentials.el new file mode 100644 index 0000000..d9a6219 --- /dev/null +++ b/bard-emacs-modules/bard-emacs-essentials.el @@ -0,0 +1,139 @@ +(require 'bard-search) + +;; Nice scrolling +(pixel-scroll-precision-mode 1) + +;;; Editing niceties + +(electric-pair-mode t) +;; writeable grep buffers +(use-package wgrep + :bind + (:map wgrep-mode-map + ("C-x C-s" . wgrep-save-all-buffers))) + +;; preview replace +(use-package iedit) + +(use-package expand-region + :bind ("C-=" . er/expand-region)) + +;; Desktop mode/session saving +(setq desktop-path '("~/.emacs.d/desktop") + desktop-dirname "~/.emacs.d/desktop/" + desktop-base-file-name "emacs-desktop" + desktop-save t + desktop-restore-eager t + desktop-restore-=frams t + desktop-restory-in-current-display t + desktop-files-not-to-save "\(^$\\|\\*scratch\\*\\|\\*Messages\\*\\|\\*dashboard\\*\\|\\*Async-native-compile-log\\*|\\*Music\\*)") + +;;; General Keybinds + +;; Buffer switching +(global-set-key (kbd "C-x C-b") 'ibuffer) + +;; Desktop/session save +(global-set-key (kbd "C-' s") 'desktop-save-in-desktop-dir) +(global-set-key (kbd "C-' r") 'desktop-read) + +;;; Scratch buffers +;; Text Scratch buffers +(defun bard/new-org-buffer () + (interactive) + (let ((xbuf (generate-new-buffer "*org*"))) + (switch-to-buffer xbuf) + (funcall (quote org-mode)) + (text-scale-increase 1.5) + xbuf)) +(define-key global-map (kbd "M-=") #'bard/new-org-buffer) + +(defun bard/new-plain-buffer () + (interactive) + (let ((xbuf (generate-new-buffer "*plain*"))) + (switch-to-buffer xbuf) + (text-scale-increase 1.5) + xbuf)) + +(define-key global-map (kbd "M--") #'bard/new-plain-buffer) + +;; elisp scratch buffer + +(defun bard/new-elisp-buffer () + (interactive) + (let ((xbuf (generate-new-buffer "*elisp*"))) + (switch-to-buffer xbuf) + (funcall (quote emacs-lisp-mode)) + (text-scale-increase 1.5) + xbuf)) + +;;; Terminals +(defun bard/open-terminal-in-current-directory () + "Open a terminal in the current working directory." + (interactive) + (let ((default-directory default-directory)) + (term "/bin/bash"))) + +(define-key global-map (kbd "C-t") #'bard/open-terminal-in-current-directory) +(define-key global-map (kbd "C-z t") #'bard/open-terminal-in-current-directory) + +(defun bard/open-terminal-emulator () + "Open a terminal in the current working directory." + (interactive) + (let ((default-directory default-directory)) + (start-process "st terminal" nil "st"))) + +(define-key global-map (kbd "C-z C-t") 'bard/open-terminal-emulator) + + +(define-key global-map (kbd "C-z C-s") #'bard/new-elisp-buffer) + +;;; Time Management +;; Modeline +(setq display-time-format "%Y-%m-%d (%A) %H:%M") +(setq display-time-interval 60) +(setq display-time-default-load-average nil) +(setq display-time-mail-directory nil) +(setq display-time-mail-function nil) +(setq display-time-use-mail-icon nil) +(setq display-time-mail-string nil) +(setq display-time-mail-face nil) +(setq display-time-string-forms + '((propertize + (format-time-string display-time-format now) + 'face 'display-time-date-and-time + 'help-echo (format-time-string "%a %b %e, %Y" now)) + " ")) +(display-time-mode 1) + +;; world clock +(setq world-clock-list + '(("America/New_York" "New York") + ("Europe/Moscow" "Moscow") + ("Europe/London" "London") + ("Asia/Tokyo" "Tokyo"))) + +(setq world-clock-time-format "%Y-%m-%d %B (%A) %R %Z") + +(define-key global-map (kbd "C-c C-w") #'world-clock) + +;; timer package +(use-package tmr + :ensure t + :config + (setq tmr-sound-file "/home/bard/.local/bin/scripts/bell.mp3") + (setq tmr-notification-urgency 'normal) + (setq tmr-descriptions-list 'tmr-description-history) + (define-key global-map (kbd "C-c t l") 'tmr-tabulated-view) + (define-key global-map (kbd "C-c t t") #'tmr) + (define-key global-map (kbd "C-c t T") #'tmr-with-description) + (define-key global-map (kbd "C-c t l") #'tmr-tabulated-view) + (define-key global-map (kbd "C-c t c") #'tmr-clone) + (define-key global-map (kbd "C-c t k") #'tmr-cancel) + (define-key global-map (kbd "C-c t s") #'tmr-reschedule) + (define-key global-map (kbd "C-c t e") #'tmr-edit-description) + (define-key global-map (kbd "C-c t r") #'tmr-remove) + (define-key global-map (kbd "C-c t R") #'tmr-remove-finished)) + + +(provide 'bard-emacs-essentials) diff --git a/bard-emacs-modules/bard-emacs-org.el b/bard-emacs-modules/bard-emacs-org.el index 67a106c..97fb528 100644 --- a/bard-emacs-modules/bard-emacs-org.el +++ b/bard-emacs-modules/bard-emacs-org.el @@ -12,6 +12,18 @@ (setq org-agenda-files (list "~/Notes/denote/todo.org")) (setq org-archive-location "~/Notes/denote/20240328T215840--archive__self.org::* Archive") (setq org-log-done 'time) +(setq org-structure-template-alist + '(("c" . "center") + ("x" . "example") + ("q" . "quote") + ("v" . "verse") + ("s" . "src") + ("E" . "src emacs-lisp :results value code :lexical t") ; for code examples in notes + ("t" . "src emacs-lisp :tangle FILENAME") ; tangle without making dir, below makes dir + ("T" . "src emacs-lisp :tangle FILENAME :mkdirp yes"))) + +;; mainly for denote, org throws away a link that i might reuse later +(setq org-link-keep-stored-after-insertion nil) ;; Making org mode look nice (setq org-startup-indented t @@ -63,7 +75,16 @@ (custom-set-faces '(org-agenda-structure ((t (:inherit bold :height 1.5 :family "Iosevka Comfy Motion"))))) (setq org-ellipsis "↲") -;; Org Agenda +;;; Org Agenda + +;; clock tables +(setq org-clock-clocktable-default-properties '(:maxlevel 7 + :scope agenda)) +(defun bard/org-clock-report () + (interactive) + (bard/new-org-buffer) + (org-clock-report)) + (defun bard/choose-agenda () "For viewing my custom agenda" (interactive) @@ -133,7 +154,9 @@ holiday-christian-holidays nil holiday-islamic-holidays nil)) -;; Org capture templates +;;; Org capture +(setq org-capture-bookmark nil) + (define-key global-map (kbd "C-c c") #'org-capture) (require 'org-protocol) @@ -152,38 +175,4 @@ "* [[%:link][%:description]] \nCaptured On: %U \n%?") ("b" "Blog Article" entry (file+olp "~/Code/bardmandev/content/_index.org" "Latest updates")))) -(use-package denote - :config - (setq denote-directory "~/Notes/denote/") - (setq denote-journal-extras-directory "~/Notes/journal") - (setq denote-known-keywords - '("emacs" - "linux" - "programming" - "org" - "school" - "language" - "history" - "biology" - )) - (denote-rename-buffer-mode 1) - (add-hook 'dired-mode-hook #'denote-dired-mode) - - ;; journalling with timer - (add-hook 'denote-journal-extras-hook (lambda () - (tmr "10" "Journaling"))) - - :bind - (("C-c n n" . denote-open-or-create) - ("C-c n N" . denote) - ("C-c n d" . denote-date) - ("C-c n o" . denote-sort-dired) - ("C-c n j" . denote-journal-extras-new-entry) - ("C-c n r" . denote-rename-file) - ("C-c n i" . denote-link) - ("C-c n I" . denote-add-links) - ("C-c n b" . denote-backlinks) - ("C-c n f" . denote-find-link) - ("C-c n F" . denote-find-backlink))) - -(provide 'bard-emacs-org.el) +;; (provide 'bard-emacs-org) diff --git a/bard-emacs-modules/bard-emacs-package.el b/bard-emacs-modules/bard-emacs-package.el index 2c0e674..4090c6d 100644 --- a/bard-emacs-modules/bard-emacs-package.el +++ b/bard-emacs-modules/bard-emacs-package.el @@ -2,199 +2,7 @@ ;; | Packages | ;; |------------------------------------| -(add-to-list 'load-path "~/.emacs.d/elisp/") -(require 'package) - -(setq package-archives '(("org" . "https://orgmode.org/elpa/") - ("elpa" . "https://elpa.gnu.org/packages/") - ("nongnu" . "https://elpa.nongnu.org/nongnu/") - ("melpa" . "https://melpa.org/packages/"))) - -(package-initialize) -(unless package-archive-contents - (package-refresh-contents)) - -;; Initialize use-package on non-Linux platforms -(unless (package-installed-p 'use-package) - (package-install 'use-package)) - -(require 'use-package) -(setq use-package-always-ensure t) - -;; writeable grep buffers -(use-package wgrep) - -;; preview replace -(use-package iedit) ;; Magit -(use-package magit - :config - (define-key global-map (kbd "C-c g") #'magit)) - -(use-package magit-todos - :config - (magit-todos-mode 1)) - -;; Vertico completion -(use-package vertico - :init - (vertico-mode 1)) - -;; Marginalia - works with vertico -(use-package marginalia - :init - (marginalia-mode)) - -(use-package company - :init - (global-company-mode 1)) - -(use-package consult - :defer 2 - :config - (global-set-key (kbd "C-x b") nil) - (global-set-key (kbd "C-x b") #'consult-buffer) - (global-set-key (kbd "C-z s") #'consult-ripgrep)) - -(use-package yasnippet - :init - (yas-global-mode) -) - -(use-package yasnippet-snippets -) - -(use-package which-key - :init - (which-key-mode 1) -) - -(use-package orderless - :custom - (completion-styles '(orderless basic)) - (completion-category-overrides '((file (styles basic partial-completion))))) - -(use-package elfeed - :config - (global-set-key (kbd "C-c e") 'elfeed) - (setq elfeed-search-filter "+unread -academia")) - -(use-package elfeed-org - :init - (elfeed-org) - :config - (setq rmh-elfeed-org-files (list "~/.emacs.d/feeds.org" - "~/.emacs.d/youtube.org"))) - -(use-package elfeed-goodies - :init - (elfeed-goodies/setup) - :config - (setq elfeed-goodies/powerline-default-separator 'box)) - -(use-package hl-todo - :init - (global-hl-todo-mode t)) - -(use-package pdf-tools) - -(use-package expand-region - :bind ("C-=" . er/expand-region)) - -(use-package clojure-mode) - -(use-package cider) - -(use-package clojure-snippets) - -(use-package haskell-mode) - -(use-package flycheck - :init - (global-flycheck-mode t)) - -(use-package smartparens - :config - (smartparens-global-mode t) - (show-smartparens-global-mode t) - :bind - (("C-" . sp-down-sexp)) - ("C-" . sp-up-sexp) - ("M-" . sp-backward-up-sexp) - ("M-" . sp-backward-up-sexp) - ("C-M-a" . sp-beginning-of-sexp) - ("C-M-e" . sp-end-of-sexp)) - -(use-package ggtags - :config - (add-hook 'c-mode-common-hook - (lambda () - (when (derived-mode-p 'c-mode 'c++-mode 'java-mode) - (ggtags-mode 1))))) - -(use-package tramp) - -(use-package circe) - -(use-package spacious-padding - :init - (spacious-padding-mode 1) - :config - (setq spacious-padding-widths - '( :internal-border-width 10 - :header-line-width 4 - :mode-line-width 6 - :tab-width 4 - :right-divider-width 30 - :scroll-bar-width 8))) -;; olivetti -(use-package olivetti - :config - (setq olivetti-body-width 120 - olivetti-recall-visual-line-mode-entry-state t)) - -(use-package logos - :config - (defun logos-reveal-entry () - "Reveal Org or Outline entry." - (cond - ((and (eq major-mode 'org-mode) - (org-at-heading-p)) - (org-show-subtree)) - ((or (eq major-mode 'outline-mode) - (bound-and-true-p outline-minor-mode)) - (outline-show-subtree)))) - - (setq logos-outlines-are-pages t) - - (setq logos-outline-regexp-alist - `((emacs-lisp-mode . "^;;;+ ") - (org-mode . "^\\* +") - (t . ,(or outline-regexp logos--page-delimiter)))) - - (setq-default logos-hide-cursor nil - logos-hide-mode-line t - logos-hide-header-line t - logos-hide-buffer-boundaries t - logos-hide-fringe t - logos-variable-pitch t - logos-buffer-read-only nil - logos-scroll-lock nil - logos-olivetti t) - (let ((map global-map)) - (define-key map [remap narrow-to-region] #'logos-narrow-dwim) - (define-key map [remap forward-page] #'logos-forward-page-dwim) - (define-key map [remap backward-page] #'logos-backward-page-dwim) - (define-key map (kbd "M-]") #'logos-forward-page-dwim) - (define-key map (kbd "M-[") #'logos-backward-page-dwim) - (define-key map (kbd "") #'logos-focus-mode)) - - (defun bard/logos--recenter-top () - "Use `recenter' to reposition the view at the top." - (unless (derived-mode-p 'prog-mode) - (recenter 1))) ; Use 0 for the absolute top - - (add-hook 'logos-page-motion-hook #'bard/logos--recenter-top)) -(provide 'bard-emacs-package.el) +(provide 'bard-emacs-package) diff --git a/bard-emacs-modules/bard-emacs-prog.el b/bard-emacs-modules/bard-emacs-prog.el index 4fb5a45..bb7dd3e 100644 --- a/bard-emacs-modules/bard-emacs-prog.el +++ b/bard-emacs-modules/bard-emacs-prog.el @@ -1,4 +1,4 @@ -;;; bard-emacs-lang.el --- configuration for specific languages -*- lexical-binding: t -*- +;;; bard-emacs-prog.el --- configuration for progamming environment -*- lexical-binding: t -*- ;; Author: Bardman ;; Maintainer: Bardman @@ -40,19 +40,13 @@ (add-hook 'haskell-mode-hook 'haskell-indent-mode) ;; CPP Mode -;; (defun bard/c++-mode-keybindings () -;; (define-key 'c++-mode-map (kbd "C-c C-c") 'compile)) -;; (add-hook 'c++-mode-hook 'bard/c++-mode-keybindings) (add-hook 'c++-mode 'bard/common-modes-hook) (setq-default c-basic-offset 4) (with-eval-after-load "c++-mode" (define-key c++-mode-map (kbd "C-z s") #'consult-ripgrep)) -;; Haskell -;; (add-to-list 'company-backends 'company-dabbrev-code) -;; (add-to-list 'company-backends 'company-yasnippet) -;; (add-to-list 'company-backends 'company-files) +;;; Haskell ;; disable ghci popups (setq haskell-interactive-popup-errors nil) @@ -62,18 +56,51 @@ (add-to-list 'exec-path "/home/bard/.local/bin") (add-to-list 'exec-path "/home/bard/opt/") -;; GGTAGS -(with-eval-after-load 'ggtags - (define-key ggtags-mode-map (kbd "M->") nil) - (define-key ggtags-mode-map (kbd "M-<") nil)) - -(add-hook 'clojure-mode-hook - (lambda() - (define-key clojure-mode-map (kbd "C-") #'cider-switch-to-repl-buffer))) - -(add-hook 'cider-repl-mode-hook - (lambda() - (define-key cider-repl-mode-map (kbd "C-") #'cider-switch-to-last-clojure-buffer))) - -(provide 'bard-emacs-lang.el) -;;; bard-emacs-lang.el ends here +;; Packages +(use-package clojure-mode + :bind + (:map clojure-mode-map + ("C-" . cider-switch-to-repl-buffer))) + +(use-package cider + :bind + (:map cider-repl-mode-map + ("C-" . cider-switch-to-last-clojure-buffer))) + +(use-package haskell-mode) + +(use-package flycheck + :init + (global-flycheck-mode t)) + +(use-package smartparens + :config + (smartparens-global-mode t) + (show-smartparens-global-mode t) + :bind + (("C-" . sp-down-sexp)) + ("C-" . sp-up-sexp) + ("M-" . sp-backward-up-sexp) + ("M-" . sp-backward-up-sexp) + ("C-M-a" . sp-beginning-of-sexp) + ("C-M-e" . sp-end-of-sexp)) + +(use-package ggtags + :config + (add-hook 'c-mode-common-hook + (lambda () + (when (derived-mode-p 'c-mode 'c++-mode 'java-mode) + (ggtags-mode 1))))) + +;; Version control +(use-package magit + :config + (define-key global-map (kbd "C-c g") #'magit)) + +(use-package magit-todos + :config + (magit-todos-mode 1)) + + +(provide 'bard-emacs-prog) +;;; bard-emacs-prog.el ends here diff --git a/bard-emacs-modules/bard-emacs-theme.el b/bard-emacs-modules/bard-emacs-theme.el index c24bf2a..dc59582 100644 --- a/bard-emacs-modules/bard-emacs-theme.el +++ b/bard-emacs-modules/bard-emacs-theme.el @@ -30,17 +30,21 @@ ;;; Code: +;; declare all themes as safe (i trust developers) +(setq custom-safe-themes t) + ;; Ef-themes (use-package ef-themes :ensure t :config (setq ef-themes-headings - '((1 variable-pitch 1.5) - (2 regular 1.3) - (3 1.1) - (agenda-date 1.3) - (agenda-structure variable-pitch light 1.8) - (t variable-pitch))) + '((0 variable-pitch bold light 1.75) + (1 variable-pitch 1.5) + (2 regular 1.3) + (3 1.1) + (agenda-date 1.3) + (agenda-structure variable-pitch light 1.8) + (t variable-pitch))) (defun bard/ef-themes-hl-todo-faces () "Configure `hl-todo-keyword-faces' with Ef themes colors. The exact color values are taken from the active Ef theme." @@ -77,11 +81,12 @@ The exact color values are taken from the active Ef theme." :ensure t :config (setq modus-themes-headings - '((1 . (variable-pitch 1.5)) - (2 . (regular 1.3)) - (agenda-date . (1.3)) - (agenda-structure . (variable-pitch light 1.8)) - (t . (1.1)))) + '((0 variable-pitch bold light 1.75) + (1 . (variable-pitch 1.5)) + (2 . (regular 1.3)) + (agenda-date . (1.3)) + (agenda-structure . (variable-pitch light 1.8)) + (t . (1.1)))) (defun bard/modus-themes-hl-todo-faces () "Configure `hl-todo-keyword-faces' with Modus themes colors. The exact color values are taken from the active Ef theme." @@ -108,22 +113,23 @@ The exact color values are taken from the active Ef theme." ("DEPRECATED" . ,yellow))))) (setq modus-operandi-palette-overrides - '((bg-mode-line-active bg-blue-intense) - (fg-mode-line-active fg-main) - (border-mode-line-active blue-intense))) + '((bg-mode-line-active bg-blue-intense) + (fg-mode-line-active fg-main) + (border-mode-line-active blue-intense))) (setq modus-vivendi-palette-overrides - '((bg-mode-line-active bg-blue-subtle) - (fg-mode-line-active fg-main) - (border-mode-line-active blue))) + '((bg-mode-line-active bg-blue-subtle) + (fg-mode-line-active fg-main) + (border-mode-line-active blue))) ;; org customization (setq org-priority-faces - '((?A . (:inherit (bold org-priority))) - (?B . org-priority) - (?C . (:inherit (shadow org-priority))))) + '((?A . (:inherit (bold org-priority))) + (?B . org-priority) + (?C . (:inherit (shadow org-priority))))) (add-hook 'modus-themes-post-load-hook #'bard/modus-themes-hl-todo-faces) + (setq modus-themes-to-toggle '(modus-vivendi modus-operandi-tinted)) (setq modus-themes-mixed-fonts t) (define-key global-map (kbd "") #'modus-themes-select) @@ -145,6 +151,7 @@ The exact color values are taken from the active Ef theme." ) (large :inherit regular + :variable-pitch-family "Iosevka Comfy Wide Motion" :default-height 170 ) (small @@ -177,7 +184,6 @@ The exact color values are taken from the active Ef theme." (dolist (i custom-enabled-themes) (disable-theme i))) - (provide 'bard-emacs-theme) ;;; bard-emacs-theme.el ends here diff --git a/bard-emacs-modules/bard-emacs-time.el b/bard-emacs-modules/bard-emacs-time.el deleted file mode 100644 index b10640c..0000000 --- a/bard-emacs-modules/bard-emacs-time.el +++ /dev/null @@ -1,47 +0,0 @@ -;; Modeline -(setq display-time-format "%Y-%m-%d (%A) %H:%M") -(setq display-time-interval 60) -(setq display-time-default-load-average nil) -(setq display-time-mail-directory nil) -(setq display-time-mail-function nil) -(setq display-time-use-mail-icon nil) -(setq display-time-mail-string nil) -(setq display-time-mail-face nil) -(setq display-time-string-forms - '((propertize - (format-time-string display-time-format now) - 'face 'display-time-date-and-time - 'help-echo (format-time-string "%a %b %e, %Y" now)) - " ")) -(display-time-mode 1) - -;; world clock -(setq world-clock-list - '(("America/New_York" "New York") - ("Europe/Moscow" "Moscow") - ("Europe/London" "London") - ("Asia/Tokyo" "Tokyo"))) - -(setq world-clock-time-format "%Y-%m-%d %B (%A) %R %Z") - -(define-key global-map (kbd "C-c C-w") #'world-clock) - -;; timer package -(use-package tmr - :ensure t - :config - (setq tmr-sound-file "/home/bard/.local/bin/scripts/bell.mp3") - (setq tmr-notification-urgency 'normal) - (setq tmr-descriptions-list 'tmr-description-history) - (define-key global-map (kbd "C-c t l") 'tmr-tabulated-view) - (define-key global-map (kbd "C-c t t") #'tmr) - (define-key global-map (kbd "C-c t T") #'tmr-with-description) - (define-key global-map (kbd "C-c t l") #'tmr-tabulated-view) - (define-key global-map (kbd "C-c t c") #'tmr-clone) - (define-key global-map (kbd "C-c t k") #'tmr-cancel) - (define-key global-map (kbd "C-c t s") #'tmr-reschedule) - (define-key global-map (kbd "C-c t e") #'tmr-edit-description) - (define-key global-map (kbd "C-c t r") #'tmr-remove) - (define-key global-map (kbd "C-c t R") #'tmr-remove-finished)) - -(provide 'bard-emacs-time) diff --git a/bard-emacs-modules/bard-emacs-ui.el b/bard-emacs-modules/bard-emacs-ui.el index 1e992c8..3786b55 100644 --- a/bard-emacs-modules/bard-emacs-ui.el +++ b/bard-emacs-modules/bard-emacs-ui.el @@ -24,33 +24,6 @@ ;; Variables (setq display-line-numbers-type 'relative) -(setq inhibit-startup-message t) -(setq inhibit-startup-screen t) - -(setq frame-resize-pixelwise t - frame-inhibit-implied-resize t - frame-title-format '("%b") - use-dialog-box t ; only for mouse events, which I seldom use - use-file-dialog nil - use-short-answers t - inhibit-x-resources t - inhibit-startup-echo-area-message user-login-name - inhibit-startup-buffer-menu t) - -(setq mode-line-misc-info - (delete (assoc 'minor-mode-alist mode-line-misc-info) mode-line-misc-info)) - -;; Modes -(scroll-bar-mode -1) -(tool-bar-mode -1) -(tooltip-mode -1) -(set-fringe-mode 10) -(menu-bar-mode -1) -(tool-bar-mode 0) - -;; settings for windows -(setq focus-follows-mouse t) -(setq mouse-autoselect-window t) ;; Whitespace, used in bard-emacs-lang.el (defun bard/set-up-whitespace-handling () @@ -59,6 +32,43 @@ (setq whitespace-style '(face tabs spaces trailing space-before-tab newline indentation empty space-after-tab space-mark tab-mark)) +;; display line numbers custom mode +(define-minor-mode bard/display-line-numbers-mode + "Toggle `display-line-numbers-mode' and `hl-line-mode' in tandem" + :init-value nil + :global nil + (if (bard/display-line-numbers-mode + (progn + (display-line-numbers-mode 1) + (hl-line-mode 1)) + (display-line-numbers-mode -1) + (hl-line-mode -1)))) + +;; padding for everything +(use-package spacious-padding + :init + (spacious-padding-mode 1) + :config + (setq spacious-padding-widths + '( :internal-border-width 10 + :header-line-width 4 + :mode-line-width 6 + :tab-width 4 + :right-divider-width 1 + :left-fringe-width 10 + :right-fringe-width 10 + :scroll-bar-width 8))) + +;; Todo Keywords highlighting, colors defined in bard-emacs-theme.el +(use-package hl-todo + :init + (global-hl-todo-mode t)) + +;; Show avaiable key chords +(use-package which-key + :init + (which-key-mode 1)) + (provide 'bard-emacs-ui) ;;; bard-emacs-ui.el ends here diff --git a/bard-emacs-modules/bard-emacs-web.el b/bard-emacs-modules/bard-emacs-web.el index aa20f3a..28faea3 100644 --- a/bard-emacs-modules/bard-emacs-web.el +++ b/bard-emacs-modules/bard-emacs-web.el @@ -1,4 +1,6 @@ ;;; IRC +(use-package circe) + (setq auth-sources '("~/.authinfo.gpg")) (defun my-fetch-password (&rest params) @@ -20,6 +22,25 @@ :channels ("#emacs" "##anime" "#gentoo") :nickserv-password my-nickserv-password))) +;;; RSS Feeds +(use-package elfeed + :config + (global-set-key (kbd "C-c e") 'elfeed) + (setq elfeed-search-filter "+unread -academia")) + +(use-package elfeed-org + :init + (elfeed-org) + :config + (setq rmh-elfeed-org-files (list "~/.emacs.d/feeds.org" + "~/.emacs.d/youtube.org"))) + +(use-package elfeed-goodies + :init + (elfeed-goodies/setup) + :config + (setq elfeed-goodies/powerline-default-separator 'box)) + ;;; Web Browsing (EWW and Firefox/Librewolf) (setq browse-url-browser-function 'eww-browse-url) @@ -30,6 +51,7 @@ '(("wikipedia\\.org" . eww-browse-url) ;; ("github" . browse-url-chromium) ("github" . browse-url-default-browser) + ("youtube.com" . browse-url-default-browser) ("reddit.com" . browse-url-default-browser))) ;; shr optimizations @@ -75,3 +97,9 @@ instead of `browse-url-new-window-flag'." (concat "librewolf " url) nil "librewolf" (list url)))) + +;; remote connections with emacs +(use-package tramp) + +(provide 'bard-emacs-web) +;;; bard-emacs-web.el ends here diff --git a/bard-emacs-modules/bard-emacs-window.el b/bard-emacs-modules/bard-emacs-window.el index 88bbe05..87d1ed8 100644 --- a/bard-emacs-modules/bard-emacs-window.el +++ b/bard-emacs-modules/bard-emacs-window.el @@ -1,6 +1,7 @@ (require 'bard-window) -;; settings for prot- +(setq focus-follows-mouse t) +(setq mouse-autoselect-window t) (setq window-combination-resize t) (setq even-window-sizes 'height-only) (setq window-sides-vertical nil) @@ -23,13 +24,40 @@ :ensure t :config (setq beframe-functions-in-frames '(project-prompt-project-dir)) - + (setq beframe-create-frame-scratch-buffer nil) + (setq beframe-global-buffers '("*scratch*" "*Messages*" "*Backtrace*")) (beframe-mode 1) (define-key global-map (kbd "C-x f") #'other-frame-prefix) (define-key global-map (kbd "C-c b") beframe-prefix-map) (define-key global-map (kbd "C-x C-b") #'beframe-buffer-menu) - (define-key global-map (kbd "C-x B") #'select-frame-by-name)) + (define-key global-map (kbd "C-x B") #'select-frame-by-name) + + ;; Consult integration + (defvar consult-buffer-sources) + (declare-function consult--buffer-state "consult") + + (with-eval-after-load 'consult + (defface beframe-buffer + '((t :inherit font-lock-string-face)) + "Face for `consult' framed buffers.") + + (defun my-beframe-buffer-names-sorted (&optional frame) + "Return the list of buffers from `beframe-buffer-names' sorted by visibility. + With optional argument FRAME, return the list of buffers of FRAME." + (beframe-buffer-names frame :sort #'beframe-buffer-sort-visibility)) + + (defvar beframe-consult-source + `( :name "Frame-specific buffers (current frame)" + :narrow ?F + :category buffer + :face beframe-buffer + :history beframe-history + :items ,#'my-beframe-buffer-names-sorted + :action ,#'switch-to-buffer + :state ,#'consult--buffer-state)) + + (add-to-list 'consult-buffer-sources 'beframe-consult-source))) (setq display-buffer-alist `(("\\`\\*Async Shell Command\\*\\'" @@ -68,7 +96,7 @@ (derived-mode . Buffer-menu-mode) (derived-mode . log-view-mode) (derived-mode . help-mode) ; See the hooks for `visual-line-mode' - "\\*\\(|Buffer List\\|Occur\\|Man.*\\|vc-change-log\\|eldoc.*\\).*" + "\\*\\(|Buffer List\\|Occur\\|Man.*\\|Org Select\\|vc-change-log\\|eldoc.*\\).*" prot-window-shell-or-term-p ,world-clock-buffer-name)) (prot-window-display-buffer-below-or-pop) @@ -82,3 +110,6 @@ (define-key global-map (kbd "C-x C-p") #'previous-buffer) (define-key global-map (kbd "C-x ") #'next-buffer) (define-key global-map (kbd "C-x ") #'previous-buffer) + +(provide 'bard-emacs-window) +;;; bard-emacs-window.el ends here diff --git a/bard-emacs-modules/bard-emacs-writing.el b/bard-emacs-modules/bard-emacs-writing.el new file mode 100644 index 0000000..4dde5e4 --- /dev/null +++ b/bard-emacs-modules/bard-emacs-writing.el @@ -0,0 +1,113 @@ +;;; Keyboard things +(setq default-input-method "cyrillic-yawerty") +(setq default-transient-input-method "cyrillic-yawerty") + +(use-package denote + :config + (setq denote-directory "~/Notes/denote/") + (setq denote-journal-extras-directory "~/Notes/journal") + (setq denote-known-keywords + '("emacs" + "linux" + "programming" + "org" + "school" + "language" + "history" + "biology" + )) + (denote-rename-buffer-mode 1) + (add-hook 'dired-mode-hook #'denote-dired-mode) + + ;; journalling with timer + (add-hook 'denote-journal-extras-hook (lambda () + (tmr "10" "Journalling") + (bard/scroll-center-cursor-mode t))) + + :bind + (("C-c n n" . denote-open-or-create) + ("C-c n N" . denote) + ("C-c n d" . denote-date) + ("C-c n o" . denote-sort-dired) + ("C-c n j" . denote-journal-extras-new-entry) + ("C-c n r" . denote-rename-file) + ("C-c n r" . denote-rename-file-using-front-matter) + ("C-c n k" . denote-keywords-add) + ("C-c n K" . denote-keywords-remove) + ("C-c n i" . denote-link) + ("C-c n I" . denote-add-links) + ("C-c n b" . denote-backlinks) + ("C-c n f" . denote-find-link) + ("C-c n F" . denote-find-backlink))) + +;;; Focus mode for wrigin + +;; Center line scrolling for focused writing +(define-minor-mode bard/scroll-center-cursor-mode + "Toggle centered cursor scrolling behavior." + :init-value nil + :lighter " S=" + :global nil + (if bard/scroll-center-cursor-mode + (setq-local scroll-margin (* (frame-height) 2) + scroll-conservatively 0 + maximum-scroll-margin 0.5) + (dolist (local '(scroll-preserve-screen-position + scroll-conservatively + maximum-scroll-margin + scroll-margin)) + (kill-local-variable `,local)))) + +(define-key global-map (kbd "C-c L") #'bard/scroll-center-cursor-mode) + +(use-package olivetti + :config + (setq olivetti-minimum-body-width 100) + (setq olivetti-recall-visual-line-mode-entry-state t) + :hook + ((olivetti-mode-on-hook . (lambda () (olivetti-set-width 100))) + (olivetti-mode-hook . (lambda () (bard/scroll-center-cursor-mode t))))) + +;; narrowing and focus mode +(use-package logos + :config + (defun logos-reveal-entry () + "Reveal Org or Outline entry." + (cond + ((and (eq major-mode 'org-mode) + (org-at-heading-p)) + (org-show-subtree)) + ((or (eq major-mode 'outline-mode) + (bound-and-true-p outline-minor-mode)) + (outline-show-subtree)))) + + (setq logos-outlines-are-pages t) + + (setq logos-outline-regexp-alist + `((emacs-lisp-mode . "^;;;+ ") + (org-mode . "^\\* +") + (t . ,(or outline-regexp logos--page-delimiter)))) + + (setq-default logos-hide-cursor nil + ;; logos-hide-mode-line t + logos-hide-header-line t + logos-hide-buffer-boundaries t + logos-hide-fringe t + logos-variable-pitch t + logos-olivetti t) + (let ((map global-map)) + (define-key map [remap narrow-to-region] #'logos-narrow-dwim) + (define-key map [remap forward-page] #'logos-forward-page-dwim) + (define-key map [remap backward-page] #'logos-backward-page-dwim) + (define-key map (kbd "M-]") #'logos-forward-page-dwim) + (define-key map (kbd "M-[") #'logos-backward-page-dwim) + (define-key map (kbd "") #'logos-focus-mode)) + + (defun bard/logos--recenter-top () + "Use `recenter' to reposition the view at the top." + (unless (derived-mode-p 'prog-mode) + (recenter 1))) ; Use 0 for the absolute top + + (add-hook 'logos-page-motion-hook #'bard/logos--recenter-top)) + +(provide 'bard-emacs-writing) -- cgit v1.2.3