aboutsummaryrefslogtreecommitdiff
path: root/bard-emacs-modules
diff options
context:
space:
mode:
Diffstat (limited to 'bard-emacs-modules')
-rw-r--r--bard-emacs-modules/bard-emacs-completion.el87
-rw-r--r--bard-emacs-modules/bard-emacs-dashboard.el54
-rw-r--r--bard-emacs-modules/bard-emacs-dired.el14
-rw-r--r--bard-emacs-modules/bard-emacs-email.el6
-rw-r--r--bard-emacs-modules/bard-emacs-eshell.el2
-rw-r--r--bard-emacs-modules/bard-emacs-essentials.el139
-rw-r--r--bard-emacs-modules/bard-emacs-org.el63
-rw-r--r--bard-emacs-modules/bard-emacs-package.el194
-rw-r--r--bard-emacs-modules/bard-emacs-prog.el73
-rw-r--r--bard-emacs-modules/bard-emacs-theme.el48
-rw-r--r--bard-emacs-modules/bard-emacs-time.el47
-rw-r--r--bard-emacs-modules/bard-emacs-ui.el64
-rw-r--r--bard-emacs-modules/bard-emacs-web.el28
-rw-r--r--bard-emacs-modules/bard-emacs-window.el39
-rw-r--r--bard-emacs-modules/bard-emacs-writing.el113
15 files changed, 588 insertions, 383 deletions
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 <https://www.gnu.org/licenses/>.
+
+
+;;; 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 "<home>") #'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 "<home>") #'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 "<return>") #'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-<down>" . sp-down-sexp))
- ("C-<up>" . sp-up-sexp)
- ("M-<down>" . sp-backward-up-sexp)
- ("M-<up>" . 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 "<f9>") #'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-<tab>") #'cider-switch-to-repl-buffer)))
-
-(add-hook 'cider-repl-mode-hook
- (lambda()
- (define-key cider-repl-mode-map (kbd "C-<tab>") #'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-<tab>" . cider-switch-to-repl-buffer)))
+
+(use-package cider
+ :bind
+ (:map cider-repl-mode-map
+ ("C-<tab>" . 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-<down>" . sp-down-sexp))
+ ("C-<up>" . sp-up-sexp)
+ ("M-<down>" . sp-backward-up-sexp)
+ ("M-<up>" . 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 "<f5>") #'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 <up>") #'next-buffer)
(define-key global-map (kbd "C-x <down>") #'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 "<f9>") #'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)