Adding Calendar, eshell, and some formatting
This commit is contained in:
parent
b4c9e64328
commit
ab3b1e014c
165
README.org
165
README.org
|
@ -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
|
||||
|
|
|
@ -1,3 +1,12 @@
|
|||
make autoloads
|
||||
make
|
||||
exit
|
||||
ls
|
||||
exit
|
||||
ls
|
||||
message hello
|
||||
32
|
||||
(32)
|
||||
32
|
||||
12
|
||||
2
|
||||
|
|
123
init.el
123
init.el
|
@ -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"
|
||||
|
|
Loading…
Reference in a new issue