So! Many! Changes!!

This commit is contained in:
Case Duckworth 2022-01-17 13:45:32 -06:00
parent ee1720b8ad
commit 1394b10658
13 changed files with 257 additions and 153 deletions

View File

@ -57,8 +57,7 @@ See `no-littering' for examples.")
(progn (require 'system)
(setq system-default-font "DejaVu Sans Mono"
system-variable-pitch-font "DejaVu Sans")
(setq system-load-directory (sync/ "emacs/systems/" t))
(system-settings-load nil :nowarn))
(system-settings-load))
;;; Default frame settings
@ -75,7 +74,7 @@ See `no-littering' for examples.")
(bottom . right)))
;;; Fonts
(progn
(+with-ensure-after-init
;; Set default faces
(+with-message "Setting default faces"
(let ((font-name system-default-font)
@ -90,23 +89,21 @@ See `no-littering' for examples.")
:height variable-font-size)))
;; Emoji fonts
(+ensure-after-init
(lambda ()
(+with-message "Adding emoji fonts"
(let ((ffl (font-family-list)))
(dolist (font '("Noto Color Emoji"
"Noto Emoji"
"Segoe UI Emoji"
"Apple Color Emoji"
"FreeSans"
"FreeMono"
"FreeSerif"
"Unifont"
"Symbola"))
(when (member font ffl)
(message "Found font: %s" font)
(set-fontset-font t 'symbol
(font-spec :family font) nil :append))))))))
(+with-message "Adding emoji fonts"
(let ((ffl (font-family-list)))
(dolist (font '("Noto Color Emoji"
"Noto Emoji"
"Segoe UI Emoji"
"Apple Color Emoji"
"FreeSans"
"FreeMono"
"FreeSerif"
"Unifont"
"Symbola"))
(when (member font ffl)
(message "Found font: %s" font)
(set-fontset-font t 'symbol
(font-spec :family font) nil :append))))))
;;; Packages

4
eshell/aliases Normal file
View File

@ -0,0 +1,4 @@
alias edit find-file $1
alias e find-file $1
alias ff find-file $1
alias sudo eshell/sudo $*

14
eshell/history Normal file
View File

@ -0,0 +1,14 @@
cd .emacs.d/.etc/straight/build/org/
ls
cd ../
ls
cd ../repos/org/
ls
find-file .emacs.d/init.el
exit
apt search font
cd
vterm
cat ~/Sync/fonts-debian.txt | sudo xargs apt install
cat ~/Sync/fonts-debian.txt | sudo xargs apt install -y
alias e='find-file $*'

11
eshell/lastdir Normal file
View File

@ -0,0 +1,11 @@
~
/home/case/.emacs.d/.etc/straight/build/org
/home/case/.emacs.d/.etc/straight/build
/home/case/.emacs.d/.etc/straight/repos/org
/home/case
/home/case/.emacs.d
~/.emacs.d
/home/case/Sync/Click Here Digital
/home/case/Sync
/home/case
/home/case/.emacs.d

50
init.el
View File

@ -153,9 +153,11 @@
#'browse-url-default-browser)
browse-url-new-window-flag nil
browse-url-firefox-arguments '("--new-tab")
browse-url-firefox-new-window-is-tab t
;; TODO: Add variables for other transformations and what-not.
+invidious-host "invidious.snopyta.org")
browse-url-firefox-new-window-is-tab t)
(defvar +invidious-host
;; TODO: Add variables for other transformations and what-not.
"invidious.snopyta.org"
"Host for invidious instance.")
;; Set up external browsing URLs.
(add-to-list '+custom-variable-allowlist
'+browse-url-secondary-browser-regexps)
@ -182,7 +184,7 @@
(t #'eww-browse-url))
args)))
(cons (rx (or ;; videos
"youtube.com" "youtu.be" (eval +invidious-host) "invidious"
"youtube.com" "youtu.be" "invidious" "yewtu.be"
(seq "." (or "mp4" "gif" "mov" "MOV" "webm") eos)
;; music
"soundcloud.com" "bandcamp.com"
@ -281,12 +283,17 @@
(advice-add #'eval-region :around #'+eval-region@pulse))
(setup eshell
(:also-load +eshell
em-smart
(:also-load em-smart
em-tramp)
(:option eshell-aliases-file (.etc "eshell/aliases" t)
(:require +eshell)
(+define-dir eshell/ (locate-user-emacs-file "eshell")
"Where to place Eshell-specific files.")
(:option eshell-aliases-file (eshell/ "aliases")
;; What are these for???
eshell-rc-script (eshell/ "profile")
eshell-login-script (eshell/ "login")
eshell-destroy-buffer-when-process-dies t
eshell-directory-name (.etc "eshell/" t)
eshell-directory-name eshell/
eshell-error-if-no-glob t
eshell-hist-ignore-dups t
eshell-kill-on-exit nil
@ -298,9 +305,13 @@
eshell-smart-space-goes-to-end t
eshell-where-to-jump 'begin
eshell-banner-message "")
(setf (alist-get 'eshell-mode mwim-beginning-of-line-function)
#'eshell-bol)
(with-eval-after-load 'mwim
(setf (alist-get 'eshell-mode mwim-beginning-of-line-function)
#'eshell-bol))
(+eshell-eval-after-load
;; Local modes
(dolist (mode '((hungry-delete-mode . -1)))
(funcall (car mode) (cdr mode)))
;; Set local settings
(dolist (setting (list (cons 'outline-regexp eshell-prompt-regexp)
(cons 'page-delimiter eshell-prompt-regexp)
@ -523,10 +534,11 @@
org-agenda-file-regexp
org-agenda-templates))
(add-to-list '+custom-variable-allowlist var))
(defvar org-agenda-files nil)
(add-to-list 'org-agenda-files (sync/ "org/" t))
(with-eval-after-load 'org
(add-to-list 'org-agenda-files (sync/ "org/" t)))
(:+leader "a" #'org-agenda "C-a" #'org-agenda)
(:hook #'hl-line-mode))
(:hook #'hl-line-mode)
(add-hook 'org-agenda-after-show-hook 'org-narrow-to-subtree))
(setup org-capture
(:require +org-capture)
@ -609,7 +621,8 @@
(:hook #'turn-on-auto-fill))
(setup time
(:option display-time-format "%H:%M"
;; TODO: +display-time-mode with MOAR customizations
(:option display-time-format "%H:%M %a %e"
display-time-default-load-average nil
display-time-mail-file :disable)
(display-time-mode +1))
@ -1086,7 +1099,7 @@ See also `crux-reopen-as-root-mode'."
(eshell-vterm-mode +1))
(setup (:straight-when exec-path-from-shell
(eq system-system 'linux))
(eq system-type 'gnu/linux))
(require 'exec-path-from-shell)
(dolist (var '("SSH_AUTH_SOCK"
"SSH_AGENT_PID"
@ -1129,7 +1142,7 @@ See also `crux-reopen-as-root-mode'."
(setup (:straight-when (forge
:host github :repo "magit/forge")
(eq system-system 'linux))
(eq system-type 'gnu/linux))
(require 'forge)
(add-to-list 'forge-alist
'("tildegit.org" "tildegit.org/api/v1" "tildegit.org"
@ -1284,6 +1297,7 @@ See also `crux-reopen-as-root-mode'."
(minions-mode +1))
(setup (:straight (mode-line-bell
:host github :repo "purcell/mode-line-bell"
:fork (:host github :repo "duckwork/mode-line-bell")))
(:option mode-line-bell-flash-time 0.1)
(mode-line-bell-mode +1))
@ -1388,6 +1402,7 @@ See also `crux-reopen-as-root-mode'."
(setup (:straight sicp))
(setup (:straight (simple-modeline
:host github :repo "gexplorer/simple-modeline"
:fork (:host github :repo "duckwork/simple-modeline")))
(:require +modeline)
(:option +modeline-minions-icon ";"
@ -1637,9 +1652,10 @@ See also `crux-reopen-as-root-mode'."
(:global "M-z" #'+zzz-to-char))
(setup (:straight (ytdious
:host github :repo "spiderbit/ytdious"
:fork (:host github :repo "duckwork/ytdious")))
(:also-load +ytdious)
(:option ytdious-invidious-api-url (if +invidious-host
(concat "https://" invidious-host)
(concat "https://" +invidious-host)
"https://invidious.snopyta.org"))
(:bind "y" #'+ytdious-watch))

View File

@ -157,6 +157,8 @@ With a prefix argument N, (un)comment that many sexps."
(+lisp-comment-sexp--raw))))
;;; Sort `setq' constructs
;;https://emacs.stackexchange.com/questions/33039/
(defun +lisp-sort-setq ()
(interactive)
(save-excursion

View File

@ -420,8 +420,7 @@ the deletion might narrow the column."
"Open thing at point, or if there isn't something, list things."
(interactive "P")
(save-excursion
(let* ((browse-url-browser-function #'browse-url-default-browser)
(this-char-type (org-element-type (org-element-context)))
(let* ((this-char-type (org-element-type (org-element-context)))
(prev-char-type (ignore-errors
(save-excursion
(backward-char)

View File

@ -4,7 +4,7 @@
;;; Code:
(require +vterm)
(require 'vterm)
(defun +vterm-counsel-yank-pop-action (orig-fun &rest args)
(if (equal major-mode 'vterm-mode)

View File

@ -114,13 +114,19 @@ If Emacs is already started, run FUNCTION. Otherwise, add it to
(funcall function)
(add-hook 'after-init-hook function)))
(defmacro +with-ensure-after-init (&rest body)
"Ensure BODY forms run after init.
Convenience macro wrapper around `+ensure-after-init'."
(declare (indent 0) (debug (def-body)))
`(+ensure-after-init (lambda () ,@body)))
(defun +remember-prefix-arg (p-arg P-arg)
"Display prefix ARG, in \"p\" and \"P\" `interactive' types.
I keep forgetting how they differ."
(interactive "p\nP")
(message "p: %S P: %S" p-arg P-arg))
(defmacro +defvar (var value &optional _)
(defmacro +defvar (var value &rest _)
"Quick way to `setq' a variable from a `defvar' form."
(declare (doc-string 3))
`(setq ,var ,value))
@ -133,7 +139,7 @@ If body executes without errors, MESSAGE...Done will be displayed."
`(let ((,msg ,message))
(unwind-protect (progn (message "%s..." ,msg)
,@body)
(message "%s... Done." ,msg)))))
(message "%s...done" ,msg)))))
(defun +mapc-some-buffers (func &optional predicate)
"Perform FUNC on all buffers satisfied by PREDICATE.
@ -171,7 +177,8 @@ active, or else the entire buffer."
(replace-match "\n\n"))
;; Insert a newline at the end.
(goto-char (point-max))
(unless (= (line-beginning-position) (line-end-position))
(unless (or (buffer-narrowed-p)
(= (line-beginning-position) (line-end-position)))
(insert "\n")))))
(defun +open-paragraph ()

View File

@ -1,9 +1,9 @@
;;; system.el --- System-specific configuration -*- lexical-binding: t; -*-
;;; system.el --- Load system-dependendant settings -*- lexical-binding: t; -*-
;;; Commentary:
;; When using Emacs on separate computers, some variables need different
;; settings. This library contains functions and variables to work with
;; When using Emacs on multiple computers, some variables and functions need
;; different definitions. This library is built to assist in working with
;; different system configurations for Emacs.
;;; Code:
@ -15,145 +15,161 @@
:group 'emacs
:prefix "system-")
;;; Variables
;;; Settings
(defcustom system-load-alist '((system-microsoft-p . windows)
(system-linux-p . linux))
"Alist describing which system Emacs is on.
Each cell is of the form (PREDICATE . SYSTEM), where PREDICATE is
a function of no arguments and SYSTEM is a string or symbol that
will be passed to `system-settings-load'.
This list need not be exhaustive; see `system-settings-load' for
more details on what happens if this alist is exhausted."
:type '(alist :key-type function :value-type (choice string symbol)))
(defcustom system-load-directory (locate-user-emacs-file "systems")
"The directory from which to load system-specific configurations."
(defcustom system-load-directory (locate-user-emacs-file "systems"
"~/.emacs-systems")
"The directory where system-specific configurations live."
:type 'file)
;; `defcustoms' defined here are best-guess defaults.
;; These `defcustom's are best-guess defaults.
(defcustom system-default-font (pcase system-type
((or 'ms-dos 'windows-nt)
"Consolas")
(_ "monospace"))
"The font used for the `default' face."
(defcustom system-default-font (cond
((memq system-type '(ms-dos windows-nt))
"Consolas")
(t "monospace"))
"The font used for the `default' face.
Set this in your system files."
:type 'string)
(defcustom system-default-height 100
"The height used for the `default' face."
"The height used for the `default' face.
Set this in your system files."
:type 'number)
(defcustom system-variable-pitch-font (pcase system-type
((or 'ms-dos 'windows-nt)
"Arial")
(_ "sans-serif"))
"The font used for the `variable-pitch' face."
(defcustom system-variable-pitch-font (cond
((memq system-type '(ms-dos windows-nt))
"Arial")
(t "sans-serif"))
"The font used for the `variable-pitch' face.
Set this in your system files."
:type 'string)
(defcustom system-variable-pitch-height 1.0
"The height used for the `variable-pitch' face.
A floating-point number is recommended, since that makes it
relative to the `default' face height."
relative to the `default' face height.
Set this in your system files."
:type 'number)
(defcustom system-files-order '(:type :name :user)
"The order to load `system-files' in.
The elements of this list correspond to the keys in
`system-system'."
:type '(list (const :tag "System type" :type)
(const :tag "System name" :name)
(const :tag "Current user" :user)))
;;; Variables
(defvar system-system nil
"The current system's symbol.
Do not edit this by hand. Instead, call `system-get-system'.")
"Plist of systems that Emacs is in.
The keys are as follows:
(defvar system-file nil
"The current system's file for system-specific configuration.
Do not edit this by hand. Instead, call `system-get-system-file'.")
- :name - `system-name'
- :type - `system-type'
- :user - `user-login-name'
Each value is made safe to be a file name by passing through
`system--safe'.
Do not edit this by hand. Instead, call `system-get-systems'.")
(defvar system-files nil
"List of files to load for system-specific configuration.
Do not edit this by hand. Instead, call `system-get-system-files'.")
;;; Functions
;; Convenience functions for systems
(defun system-microsoft-p ()
"Return non-nil if running in a Microsoft system."
(memq system-type '(ms-dos windows-nt)))
(defun system-linux-p ()
"Return non-nil if running on a Linux system."
(memq system-type '(gnu/linux)))
(defun system-warn (message &rest args)
"Display a wraning message made from (format-message MESSAGE ARGS...).
This function is like `warn', except it uses the `system' type."
(defun system--warn (message &rest args)
"Display a system-file warning message.
This function is like `warn', except it uses a `system' type."
(display-warning 'system (apply #'format-message message args)))
(defun system-get-system ()
"Determine the current system."
(cl-loop for (p . s) in system-load-alist
if (with-demoted-errors (format "Problem running function `%s'" p)
(funcall p))
return (setq system-system s)))
(defun system--safe (str)
"Make STR safe for a file name."
(let ((bad-char-regexp ))
(downcase (string-trim
(replace-regexp-in-string "[#%&{}\$!'\":@<>*?/ \r\n\t+`|=]+"
"-" str)
"-" "-"))))
(defun system-get-system-file (&optional system refresh-cache set-system-file-p)
"Determine the current system's system-specific file.
The current system's file will be returned. The value of
`system-file' is set, /unless/ the parameter SYSTEM was passed to
this function and SET-SYSTEM-FILE-P is nil. If both SYSTEM and
SET-SYSTEM-FILE-P are non-nil, this function will still set
`system-file'.
(defun system-get-systems ()
"Determine the current system(s).
This system updates `system-system', which see."
;; Add system-name
(setf (plist-get system-system :name)
(intern (system--safe (system-name))))
;; Add system-type
(setf (plist-get system-system :type)
(intern (system--safe (symbol-name system-type))))
;; Add current user
(setf (plist-get system-system :user)
;; Use `user-real-login-name' in case Emacs gets called under su.
(intern (system--safe (user-real-login-name))))
system-system)
If SYSTEM is not passed, and `system-file' is set, simply return
its value /unless/ REFRESH-CACHE is non-nil, in which case
`system-load-alist' will be looped through to find the
appropriate system by testing the car of each cell there. When
one matches, use the cdr of that cell as SYSTEM. If none
matches, return nil.
(defun system-get-files ()
"Determine the current systems' load-files.
The system load-files should live in `system-load-directory', and
named using either the raw name given by the values of
`system-system', or that name prepended with the type, e.g.,
\"name-bob.el\", for a system named \"bob\".
This function will only look for system-specific files in
`system-load-directory'."
(let* ((system* (or system
(and system-file (not refresh-cache))
(system-get-system)))
(file (expand-file-name (format "%s" system*) system-load-directory)))
(when (or (not system)
(and system set-system-file-p))
(setq system-file file))
file))
The second form of file-name is to work around name collisions,
e.g. if a there's a user named \"bob\" and a system named
\"bob\".
This function updates `system-files'."
;; Get systems
(system-get-systems)
;; Re-set `system-files'
(setq system-files nil)
(let (ret)
(dolist (key (reverse system-files-order))
(let* ((val (plist-get system-system key))
(key-val (intern (system--safe (format "%s-%s" key val)))))
(push (list key-val val) ret)))
;; Update `system-files'.
(setq system-files ret)))
;;;###autoload
(defun system-settings-load (&optional system error nomessage)
"Load system settings.
Load settings from `system-file', or the `system-file' as
determined by SYSTEM, if passed. See `system-get-system-file' for
details on how the `system-file' is determined.
(defun system-settings-load (&optional error nomessage)
"Load system settings from `system-files'.
Each list in `system-files' will be considered item-by-item; the
first found file in each will be loaded.
ERROR determines how to deal with errors: if nil, warn the user
when `system-file' can't be found or when the system being used
can't be determined. If t, those are elevated to errors. If any
other value, the errors are completely ignored.
when no system-files can be found or when the system being used
cannot be determined. If t, these warnings are elevated to
errors. Any other value ignores the warnings completely.
NOMESSAGE is passed directly to `load'."
(let ((file (system-get-system-file system)))
(if file
(condition-case e
(load file nil nomessage)
(t (cond ((eq error t) (signal (car e) (cdr e)))
((null error) (system-warn "Couldn't find file `%s'."
file)))))
(funcall (cond ((eq error t) #'error)
((null error) #'system-warn)
(t #'ignore))
"Could not determine the system being used."))))
;;;###autoload
(defun system-find-system-file (&optional system)
"Find the current system's system-file."
(interactive (list (completing-read "System file: "
(mapcar (lambda (a) (format "%s" (cdr a)))
system-load-alist)
nil t nil nil
(format "%s" (system-get-system)))))
(find-file (cl-loop with file = (system-get-system-file system)
for cand in (list file
(concat file ".el"))
if (file-exists-p cand)
return cand
finally return cand)))
(system-get-files)
(if system-files
(let (files-loaded)
(dolist (ss system-files)
(catch :done
(dolist (s ss)
(let ((fn (expand-file-name (format "%s" s)
system-load-directory)))
(when (load fn t nomessage)
(push fn files-loaded)
(throw :done nil))))))
(unless files-loaded
(cond ((eq error t) (error "Error loading system-files.")
(null error) (system--warn "Couldn't load system-files."))))
files-loaded)
(funcall (cond ((eq error t) #'error)
((null error) #'system--warn)
(t #'ignore))
"Couldn't determine the system being used.")))
(provide 'system)
;;; system.el ends here

10
systems/bob.el Normal file
View File

@ -0,0 +1,10 @@
;;; bob.el --- Customizations for "bob" -*- lexical-binding: t; -*-
;;; Commentary:
;;; Code:
(setq system-default-font "DejaVu Sans Mono"
system-default-height 105)
;;; bob.el ends here

5
systems/gnu-linux.el Normal file
View File

@ -0,0 +1,5 @@
;;; linux.el -*- lexical-binding: t; -*-
(setq system-default-height 105)
;;; linux.el ends here

23
systems/windows-nt.el Normal file
View File

@ -0,0 +1,23 @@
;;; windows.el --- Windows settings! -*- lexical-binding: t; -*-
;; Annoying gnu-tls bug; I "always" trust the certificate anyway, so let's be
;; insecure.
(setq network-security-level 'low
debug-on-error t)
;; Fonts
(setq system-default-font "Cascadia Mono"
system-default-height 90
system-variable-pitch-font "Carlito"
system-variable-pitch-height 1.2)
;; Add C:\Program Files\* and C:\Program Files (x86)\* to exec-path
(dolist (path (append (file-expand-wildcards "C:/Program Files/*")
(file-expand-wildcards "c:/Program Files (x86)/*")
;; Others...
(save-match-data
(split-string (getenv "PATH") ";" t))))
(add-to-list 'exec-path path :append))
;;; windows.el ends here