Adding Calendar, eshell, and some formatting

This commit is contained in:
Chris Cochrun 2021-02-19 05:44:25 -06:00
parent b4c9e64328
commit ab3b1e014c
3 changed files with 393 additions and 144 deletions

View file

@ -16,7 +16,9 @@
- [[#format][Format]]
- [[#file-management][File Management]]
- [[#org-mode][Org Mode]]
- [[#calendar][Calendar]]
- [[#magit][Magit]]
- [[#eshell][Eshell]]
- [[#pdf-tools][PDF-Tools]]
- [[#garbage-collection][Garbage Collection]]
- [[#early-init][Early Init]]
@ -47,16 +49,14 @@ Let's also set the =gc-cons-threshold= variable to a high setting for the remain
#+end_src
** Keep Folders Clean
Let's setup a backup and auto-save location to keep our main directory clean. The autosave directory needs to be created first.
Let's use =no-littering= in order to stop emacs from filling all our folders with junk.
#+begin_src emacs-lisp :tangle no
(use-package no-littering)
(setq backup-directory-alist '(("." . "/home/chris/.dotemacs/tmp/backups/")))
(make-directory (expand-file-name "tmp/autosaves/" user-emacs-directory) t)
(setq auto-save-list-file-prefix (expand-file-name "tmp/autosaves/sessions/" user-emacs-directory)
auto-save-file-name-transforms '((".*" (expand-file-name "tmp/autosaves/" user-emacs-directory) t)))
;; no-littering doesn't set this by default so we must place
;; auto save files in the same path as it uses for sessions
(setq auto-save-file-name-transforms
`((".*" ,(no-littering-expand-var-file-name "auto-save/") t)))
#+end_src
** Set basic UI config
@ -80,9 +80,12 @@ In order to have this config work on both my desktop with regular joe-schmoe mon
(defvar chris/default-font-size 240)
(defvar chris/default-font-size 120))
(set-face-attribute 'default nil :font "VictorMono Nerd Font" :height chris/default-font-size)
(set-face-attribute 'fixed-pitch nil :font "VictorMono Nerd Font" :height chris/default-font-size)
(set-face-attribute 'variable-pitch nil :font "Cantarell" :height chris/default-font-size :weight 'regular)
(set-face-attribute 'default nil :font "VictorMono Nerd Font"
:height chris/default-font-size)
(set-face-attribute 'fixed-pitch nil :font "VictorMono Nerd Font"
:height chris/default-font-size)
(set-face-attribute 'variable-pitch nil :font "Cantarell"
:height chris/default-font-size :weight 'regular)
#+end_src
Then let's make sure line-numbers are relative and on. And let's turn on visual-line-mode globally.
@ -153,6 +156,13 @@ Also, real quick let's make sure that ~<escape>~ works as the same as ~<C-g>~
:hook (prog-mode . rainbow-delimiters-mode))
#+end_src
#+begin_src emacs-lisp
(use-package smartparens
:defer 1
:config
(smartparens-global-mode +1))
#+end_src
#+begin_src emacs-lisp
(use-package adaptive-wrap
:defer t)
@ -239,6 +249,7 @@ This evil-collection package includes a lot of other evil based things.
"n" '(:ignore t :which-key "notes")
"bs" '(consult-buffer :which-key "buffer search")
"bd" '(kill-this-buffer :which-key "kill buffer")
"bi" '(ibuffer :which-key "ibuffer")
"tt" '(consult-theme :which-key "choose theme")
"ff" '(find-file :which-key "find file")
"fr" '(consult-recent-file :which-key "recent file")
@ -247,7 +258,6 @@ This evil-collection package includes a lot of other evil based things.
"hv" '(helpful-variable :which-key "describe-variable")
"hk" '(helpful-key :which-key "describe-key")
"hi" '(info :which-key "info manual")
"od" '(dired-jump :which-key "dired jump")
"ss" '(consult-line :which-key "consult search")
"ww" '(other-window :which-key "other window")
"wd" '(delete-window :which-key "other window")
@ -309,7 +319,6 @@ I prefer selectrum over Ivy or Helm for completions. It is using the basic compl
"C-S-k" 'selectrum-goto-beginning
"TAB" 'selectrum-insert-current-candidate)
:commands completing-read)
#+END_SRC
We need prescient so we can have smarter sorting and filtering by default. Ontop of that, setting persistance in prescient makes it get better over time.
@ -384,9 +393,6 @@ This is similar but using mini-frame. Mini-frame works well, but not if using ex
(apply f args)))
#+END_SRC
#+RESULTS:
: fit-frame-to-buffer@dont-skip-ws-for-mini-frame
*** CONSULT
Consult has a lot of nice functions like Ivy's Counsel functions (enhanced searching functions), lets set some of them in the keymap so they are easily used.
#+begin_src emacs-lisp
@ -426,12 +432,12 @@ Marginalia makes for some great decoration to our minibuffer completion items. W
:after selectrum)
#+end_src
#+RESULTS:
** Help
#+begin_src emacs-lisp
(use-package helpful
:commands (helpful-callable helpful-variable helpful-command helpful-key))
#+end_src
** Format
#+begin_src emacs-lisp
(use-package format-all
@ -440,18 +446,24 @@ Marginalia makes for some great decoration to our minibuffer completion items. W
(setq format-all-formatters '("Emacs Lisp" emacs-lisp))
:defer 1)
#+end_src
** File Management
*** Dired
#+begin_src emacs-lisp
(use-package dired
:ensure nil
:straight nil
:general
(chris/leader-keys
"od" '(dired-jump :which-key "open dired here"))
(general-def 'normal dired-mode-map
"h" 'dired-up-directory
"l" 'dired-find-file
"q" 'kill-this-buffer)
"q" 'kill-this-buffer))
#+end_src
** Org Mode
** Org Mode
Let's start by creating a self contained function of what I'd like started on every org buffer.
#+begin_src emacs-lisp
(defun chris/org-mode-setup ()
@ -625,6 +637,43 @@ In order to use it, I need to go to http://localhost:8080
(add-hook 'org-roam-mode-hook org-roam-server-mode t)
#+END_SRC
** Calendar
#+begin_src emacs-lisp
(use-package calfw
:commands chris/calfw-calendar-open
:config
(defun chris/calfw-calendar-open ()
(interactive)
(cfw:open-calendar-buffer
:contents-sources
(list
(cfw:org-create-source "Cyan") ; org-agenda source
(cfw:ical-create-source "NV" "https://www.nvhuskies.org/vnews/display.v?ical" "Green") ; School Calendar
(cfw:ical-create-source "Outlook" "https://outlook.office365.com/owa/calendar/62a0d491bec4430e825822afd2fd1c01@tfcconnection.org/9acc5bc27ca24ce7a900c57284959f9d8242340735661296952/S-1-8-2197686000-2519837503-3687200543-3873966527/reachcalendar.ics" "Yellow") ; Outlook Calendar
)))
:general
(chris/leader-keys
"ac" 'chris/calfw-calendar-open)
(general-def cfw:calendar-mode-map
"q" 'kill-this-buffer
"RET" 'cfw:show-details-command)
(general-def cfw:details-mode-map
"q" 'cfw:details-kill-buffer-command))
#+end_src
*** Calfw-Org
Here we can use org as a way to create calfw sources in the calendar view.
#+begin_src emacs-lisp
(use-package calfw-org
:after calfw)
#+end_src
*** Calfw-ical
Here we setup an easy way to use ical as a source for calendar views.
#+begin_src emacs-lisp
(use-package calfw-ical
:after calfw)
#+end_src
** Magit
Use magit, because why wouldn't you? duh!
#+begin_src emacs-lisp
@ -636,6 +685,84 @@ Use magit, because why wouldn't you? duh!
(magit-display-buffer-function #'magit-display-buffer-same-window-except-diff-v1))
#+end_src
** Eshell
Let's add our own eshell prompt.
#+begin_src emacs-lisp
(use-package eshell
:ensure nil
:straight nil
:config
(require 'em-tramp)
(with-eval-after-load 'esh-module ;; REVIEW: It used to work, but now the early `provide' seems to backfire.
(unless (boundp 'eshell-modules-list)
(load "esh-module")) ;; Don't print the banner.
(push 'eshell-tramp eshell-modules-list))
(setq password-cache t
password-cache-expiry 3600)
(setq eshell-history-size 1024)
;;; Extra execution information
(defvar chris/eshell-status-p t
"If non-nil, display status before prompt.")
(defvar chris/eshell-status--last-command-time nil)
(make-variable-buffer-local 'chris/eshell-status--last-command-time)
(defvar chris/eshell-status-min-duration-before-display 0
"If a command takes more time than this, display its duration.")
(defun chris/eshell-status-display ()
(if chris/eshell-status--last-command-time
(let ((duration (time-subtract (current-time) chris/eshell-status--last-command-time)))
(setq chris/eshell-status--last-command-time nil)
(when (> (time-to-seconds duration) chris/eshell-status-min-duration-before-display)
(format "  %.3fs %s"
(time-to-seconds duration)
(format-time-string "| %F %T" (current-time)))))
(format "  0.000s")))
(defun chris/eshell-status-record ()
(setq chris/eshell-status--last-command-time (current-time)))
(add-hook 'eshell-pre-command-hook 'chris/eshell-status-record)
(setq eshell-prompt-function
(lambda nil
(let ((path (abbreviate-file-name (eshell/pwd))))
(concat
(if (or (string= system-name "archdesktop") (string= system-name "chris-linuxlaptop"))
nil
(format
(propertize "\n(%s@%s)" 'face '(:foreground "#606580"))
(propertize (user-login-name) 'face '(:inherit compilation-warning))
(propertize (system-name) 'face '(:inherit compilation-warning))))
(if (and (require 'magit nil t) (or (magit-get-current-branch) (magit-get-current-tag)))
(let* ((root (abbreviate-file-name (magit-rev-parse "--show-toplevel")))
(after-root (substring-no-properties path (min (length path) (1+ (length root))))))
(format
(propertize "\n[ %s | %s@%s ]" 'face font-lock-comment-face)
(propertize root 'face `(:inherit org-warning))
(propertize after-root 'face `(:inherit org-level-1))
(propertize (or (magit-get-current-branch) (magit-get-current-tag)) 'face `(:inherit org-macro))))
(format
(propertize "\n[%s]" 'face font-lock-comment-face)
(propertize path 'face `(:inherit org-level-1))))
(when chris/eshell-status-p
(propertize (or (chris/eshell-status-display) "") 'face font-lock-comment-face))
(propertize "\n" 'face '(:inherit org-todo :weight ultra-bold))
" "))))
;;; If the prompt spans over multiple lines, the regexp should match
;;; last line only.
(setq-default eshell-prompt-regexp "^ ")
:general
(chris/leader-keys
"oe" 'eshell)
(general-def '(normal insert) eshell-mode-map
"C-d" 'kill-this-buffer))
#+end_src
** PDF-Tools
Let's use pdf-tools for a lot better interaction with pdfs.
#+begin_src emacs-lisp

View file

@ -1,3 +1,12 @@
make autoloads
make
exit
ls
exit
ls
message hello
32
(32)
32
12
2

123
init.el
View file

@ -22,9 +22,12 @@
(defvar chris/default-font-size 240)
(defvar chris/default-font-size 120))
(set-face-attribute 'default nil :font "VictorMono Nerd Font" :height chris/default-font-size)
(set-face-attribute 'fixed-pitch nil :font "VictorMono Nerd Font" :height chris/default-font-size)
(set-face-attribute 'variable-pitch nil :font "Cantarell" :height chris/default-font-size :weight 'regular)
(set-face-attribute 'default nil :font "VictorMono Nerd Font"
:height chris/default-font-size)
(set-face-attribute 'fixed-pitch nil :font "VictorMono Nerd Font"
:height chris/default-font-size)
(set-face-attribute 'variable-pitch nil :font "Cantarell"
:height chris/default-font-size :weight 'regular)
(setq display-line-numbers-type 'relative)
(display-line-numbers-mode +1)
@ -72,6 +75,11 @@
(use-package rainbow-delimiters
:hook (prog-mode . rainbow-delimiters-mode))
(use-package smartparens
:defer 1
:config
(smartparens-global-mode +1))
(use-package adaptive-wrap
:defer t)
@ -142,6 +150,7 @@
"n" '(:ignore t :which-key "notes")
"bs" '(consult-buffer :which-key "buffer search")
"bd" '(kill-this-buffer :which-key "kill buffer")
"bi" '(ibuffer :which-key "ibuffer")
"tt" '(consult-theme :which-key "choose theme")
"ff" '(find-file :which-key "find file")
"fr" '(consult-recent-file :which-key "recent file")
@ -150,7 +159,6 @@
"hv" '(helpful-variable :which-key "describe-variable")
"hk" '(helpful-key :which-key "describe-key")
"hi" '(info :which-key "info manual")
"od" '(dired-jump :which-key "dired jump")
"ss" '(consult-line :which-key "consult search")
"ww" '(other-window :which-key "other window")
"wd" '(delete-window :which-key "other window")
@ -238,12 +246,16 @@
(setq format-all-formatters '("Emacs Lisp" emacs-lisp))
:defer 1)
(use-package dired
:ensure nil
:straight nil
:general
(chris/leader-keys
"od" '(dired-jump :which-key "open dired here"))
(general-def 'normal dired-mode-map
"h" 'dired-up-directory
"l" 'dired-find-file
"q" 'kill-this-buffer)
"q" 'kill-this-buffer))
(defun chris/org-mode-setup ()
(org-indent-mode +1)
@ -393,6 +405,33 @@
(add-hook 'org-roam-mode-hook org-roam-server-mode t)
(use-package calfw
:commands chris/calfw-calendar-open
:config
(defun chris/calfw-calendar-open ()
(interactive)
(cfw:open-calendar-buffer
:contents-sources
(list
(cfw:org-create-source "Cyan") ; org-agenda source
(cfw:ical-create-source "NV" "https://www.nvhuskies.org/vnews/display.v?ical" "Green") ; School Calendar
(cfw:ical-create-source "Outlook" "https://outlook.office365.com/owa/calendar/62a0d491bec4430e825822afd2fd1c01@tfcconnection.org/9acc5bc27ca24ce7a900c57284959f9d8242340735661296952/S-1-8-2197686000-2519837503-3687200543-3873966527/reachcalendar.ics" "Yellow") ; Outlook Calendar
)))
:general
(chris/leader-keys
"ac" 'chris/calfw-calendar-open)
(general-def cfw:calendar-mode-map
"q" 'kill-this-buffer
"RET" 'cfw:show-details-command)
(general-def cfw:details-mode-map
"q" 'cfw:details-kill-buffer-command))
(use-package calfw-org
:after calfw)
(use-package calfw-ical
:after calfw)
(use-package magit
:commands (magit-status magit-get-current-branch)
:general
@ -400,6 +439,80 @@
:custom
(magit-display-buffer-function #'magit-display-buffer-same-window-except-diff-v1))
(use-package eshell
:ensure nil
:straight nil
:config
(require 'em-tramp)
(with-eval-after-load 'esh-module ;; REVIEW: It used to work, but now the early `provide' seems to backfire.
(unless (boundp 'eshell-modules-list)
(load "esh-module")) ;; Don't print the banner.
(push 'eshell-tramp eshell-modules-list))
(setq password-cache t
password-cache-expiry 3600)
(setq eshell-history-size 1024)
;;; Extra execution information
(defvar chris/eshell-status-p t
"If non-nil, display status before prompt.")
(defvar chris/eshell-status--last-command-time nil)
(make-variable-buffer-local 'chris/eshell-status--last-command-time)
(defvar chris/eshell-status-min-duration-before-display 0
"If a command takes more time than this, display its duration.")
(defun chris/eshell-status-display ()
(if chris/eshell-status--last-command-time
(let ((duration (time-subtract (current-time) chris/eshell-status--last-command-time)))
(setq chris/eshell-status--last-command-time nil)
(when (> (time-to-seconds duration) chris/eshell-status-min-duration-before-display)
(format "  %.3fs %s"
(time-to-seconds duration)
(format-time-string "| %F %T" (current-time)))))
(format "  0.000s")))
(defun chris/eshell-status-record ()
(setq chris/eshell-status--last-command-time (current-time)))
(add-hook 'eshell-pre-command-hook 'chris/eshell-status-record)
(setq eshell-prompt-function
(lambda nil
(let ((path (abbreviate-file-name (eshell/pwd))))
(concat
(if (or (string= system-name "archdesktop") (string= system-name "chris-linuxlaptop"))
nil
(format
(propertize "\n(%s@%s)" 'face '(:foreground "#606580"))
(propertize (user-login-name) 'face '(:inherit compilation-warning))
(propertize (system-name) 'face '(:inherit compilation-warning))))
(if (and (require 'magit nil t) (or (magit-get-current-branch) (magit-get-current-tag)))
(let* ((root (abbreviate-file-name (magit-rev-parse "--show-toplevel")))
(after-root (substring-no-properties path (min (length path) (1+ (length root))))))
(format
(propertize "\n[ %s | %s@%s ]" 'face font-lock-comment-face)
(propertize root 'face `(:inherit org-warning))
(propertize after-root 'face `(:inherit org-level-1))
(propertize (or (magit-get-current-branch) (magit-get-current-tag)) 'face `(:inherit org-macro))))
(format
(propertize "\n[%s]" 'face font-lock-comment-face)
(propertize path 'face `(:inherit org-level-1))))
(when chris/eshell-status-p
(propertize (or (chris/eshell-status-display) "") 'face font-lock-comment-face))
(propertize "\n" 'face '(:inherit org-todo :weight ultra-bold))
" "))))
;;; If the prompt spans over multiple lines, the regexp should match
;;; last line only.
(setq-default eshell-prompt-regexp "^ ")
:general
(chris/leader-keys
"oe" 'eshell)
(general-def '(normal insert) eshell-mode-map
"C-d" 'kill-this-buffer))
(use-package pdf-tools
:straight (:host github
:repo "flatwhatson/pdf-tools"