diff options
author | Grant Shangreaux <grant@unabridgedsoftware.com> | 2022-08-04 12:47:46 -0500 |
---|---|---|
committer | Grant Shangreaux <grant@unabridgedsoftware.com> | 2022-08-04 12:47:46 -0500 |
commit | 410f1ce56c0b6a3c2aebc925386fa969de8cbf74 (patch) | |
tree | 70b8f1ba4a7d9808757f4cd1ed8d3c42efdee927 /shoshin-config.org | |
parent | 4274a83ef161e525476d135be3f649beabbae8a8 (diff) |
Clean: old files and rename config
Diffstat (limited to 'shoshin-config.org')
-rw-r--r-- | shoshin-config.org | 823 |
1 files changed, 0 insertions, 823 deletions
diff --git a/shoshin-config.org b/shoshin-config.org deleted file mode 100644 index b597e19..0000000 --- a/shoshin-config.org +++ /dev/null @@ -1,823 +0,0 @@ -#+AUTHOR: Grant Shoshin Shangreaux -#+EMAIL: shoshin@cicadas.surf -#+DESCRIPTION: Html version of an Emacs literate org configuration -#+STARTUP: overview -#+PROPERTY: header-args:emacs-lisp :lexical t -#+OPTIONS: broken-links:mark - -* A New Start - -To welcome in Emacs 28 I intend to re-aquaint myself with the application -and its ecosystem. I've been perusing the packages available through the -default ELPA and non-gnu ELPA repos and trying to put together the various -things that I've grown accustomed to. - -However, with a beginner's mind, I've been trying to avoid going down the -same old idiosyncratic paths. Courting a bit of discomfort in order to learn -what newcomers might experience coming to Emacs in this current version. - -** Overview - -This document is a journal, manual, and a program at once. I'm no expert at -writing a document like this. If you happen to be reading it, the journal -nature may be confusing. Over time, the journal will be incorporated into the -bits that are a manual, solidified knowledge gained through the experience. - -The program bits will be tangled into [[file:shoshin-config.el]]. As a program, it -requires a certain structure from top to bottom. Here, the snippets may be -scattered around. I'll attempt to have a system to keep them organized, but -this is all an experiment. - -The following code block is the "table of contents" that determines what -is tangled into the resulting elisp file: - -#+begin_src emacs-lisp :tangle yes :noweb no-export - ;;; shoshimacs.el --- Beginner's Mind Config -*- lexical-binding:t -*- - - <<preamble>> - - <<defvars>> - - ;;; Package Management - <<package-management>> - - ;;; Major Keybinding - <<keybinding>> - - ;;; Completion - <<completion>> - - ;;; Editing - <<editing>> - - ;;; Programming - <<programming>> - - ;;; Projects - <<projects>> - - ;;; External Services - <<external-services>> - - ;;; User Interface - <<user-interface>> -#+end_src - -** Preamble -:PROPERTIES: -:header-args:emacs-lisp+: :noweb-ref preamble :noweb-sep "\n\n" :results silent -:END: - -This section covers initialization that works best before anything else is -configured. For example, it is much easier to manage the "custom variables" -if they are not automatically tacked onto your initialization file. You can -set and load a separate file to keep it clean: - -#+begin_src emacs-lisp - (let ((my-custom-file (expand-file-name - "shoshimacs-custom.el" user-emacs-directory))) - (unless (file-exists-p my-custom-file) - (make-empty-file my-custom-file)) - (setq custom-file my-custom-file) - (load custom-file)) -#+end_src - -* Package Management -:PROPERTIES: -:header-args:emacs-lisp+: :noweb-ref package-management :noweb-sep "\n\n" :results silent -:END: - -I've been using [[https://github.com/radian-software/straight.el#start-of-content][straight.el]] -as my package manager since 2019 when I moved away from Spacemacs as my -main configuration for day-to-day work. While I definitely recommend it -as a flexible yet minimal package manager, it is certainly more useful -to experienced Emacs users. - -This configuration will stick to packages available through the built-in -~package.el~ system. As of Emacs 28, this is everything in the ELPA and -non-gnu ELPA package repositories. - -** ELPA and Non-GNU ELPA - -ELPA packages have their copyright assigned to the FSF, which is a requirement -for any code to be included into Emacs itself. ELPA packages are thus the -most likely to be merged into Emacs as a new feature. Some, like EMMS, are -likely to continue as "add-on" optional features only some users may choose. - -Non-gnu ELPA is relatively new, and does not require copyright assignment -to the FSF. Packages are added to both repositories through the emacs-devel -mailing list and the maintainers there. It intends to extend the packages -available to the base Emacs installation while providing a bridge to inclusion -in ELPA or Emacs proper at some time in the future. - -*** Add non-gnu ELPA to Emacs < 28 - -Emacs 28 is the first version to include non-gnu ELPA by default. Some -distributions may not yet have it as an available package. - -#+name: add-nongnu-elpa -#+begin_src emacs-lisp - (when (< emacs-major-version 28) - (add-to-list 'package-archives '("nongnu" . "https://elpa.nongnu.org/nongnu/"))) -#+end_src - -** Installing Packages - -~package.el~ provides the [[help:package-install][package-install]] command which can be used interactively -or from Lisp code like this configuration. If a package is already installed, -it won't try to install it again. When you install a package this way, Emacs will -add its name to [[help:package-selected-packages][package-selected-packages]]. - -You can also use ~list-packages~ to browse, install and upgrade packages as -well. - -I'll initialize the package functionality and refresh the contents to look for -updates, and ensure any additional archives are fetched. this may have a startup -impact, but i'm not concerned about that. - -#+begin_src emacs-lisp - (package-initialize) - (package-refresh-contents) -#+end_src - -** Packages not in the default repos - -Any elisp package that is in Emacs's [[help:load-path][load-path]] can be ~require~'d and used. -~(add-to-list 'load-path (expand-file-name "some-package/" user-emacs-directory))~ -is an example of putting the directory ~some-package/~ into the load path. - -*** COMMENT xah-fly-keys - -muscle memory has bound me to xah-fly-keys, and so i've decided to just -manually install it by cloning the repo and adding it to the - -#+begin_src shell :var dir=(expand-file-name "xah-fly-keys" user-emacs-directory) :tangle no - git clone https://github.com/xahlee/xah-fly-keys $dir -#+end_src - -#+begin_src emacs-lisp - (add-to-list 'load-path (expand-file-name "xah-fly-keys/" user-emacs-directory)) - (require 'xah-fly-keys) - (xah-fly-keys-set-layout "qwerty") - (xah-fly-keys t) -#+end_src - -however, it is now in non-gnu elpa! so i don't need this anymore. - -** Emacs 28 native compilation - -[[info:elisp#Native Compilation][elisp#Native Compilation]] - -This is a new feature in Emacs 28 that will compile all of the Elisp as native -machine code, rather than byte-code, which can result in major performance boosts. -Compilation will happen in the background and is logged to the -=*Async-native-compile-log*= buffer if you are curious. Mostly you shouldn't -have to worry about it, though you may see some compilation warnings at times. - -#+begin_src emacs-lisp - (when (and (functionp #'native-comp-available-p) (native-comp-available-p)) - (setq native-comp-always-compile t - package-native-compile t)) -#+end_src - -* Keybinding -:PROPERTIES: -:header-args:emacs-lisp+: :noweb-ref keybinding :noweb-sep "\n\n" :results silent -:END: - -Keybindings are the key to playing Emacs like an instrument. no matter -what you choose, keep in mind that you can always bind keys to your -most commonly used commands to make things convienient. - -I highly recommend creating a personal key map bound to a "leader key". -You initiate it with the leader, and then bind following key sequences -to commands you use. creating your own will make it easier to remember -and keep organized. - -** xah-fly-keys - -This is what I adopted to combat RSI. my muscle memory is tied into it -tightly right now. you may have other opinions about keybindings - -#+begin_src emacs-lisp - ;; these need to be set before requiring the package - (setq xah-fly-use-control-key nil - xah-fly-use-meta-key nil) - (package-install 'xah-fly-keys) - (require 'xah-fly-keys) - (xah-fly-keys-set-layout "qwerty") - (xah-fly-keys t) -#+end_src - -i'm setting it up early in the config so that its keymaps are available -to modify / integrate with other packages. - -*** adding some custom commands to xah maps -**** SPC 1 delete-other-windows - -i want this often, feels as if i'm constantly wanting that other window -to go away. - -#+begin_src emacs-lisp - (define-key 'xah-fly-leader-key-map (kbd "1") #'delete-other-windows) -#+end_src - -** with-map-defkey - -#+begin_src emacs-lisp - (defmacro with-map-defkey (keymap leader &rest pairs) - "Define a new KEYMAP with prefix key LEADER, and list of bindings in it." - (declare (indent 2)) - `(progn - (defvar ,keymap (make-sparse-keymap)) - (define-prefix-command (quote ,keymap)) - (global-set-key (kbd ,leader) ,keymap) - (mapc (lambda (pair) - (define-key ,keymap - (kbd (if (numberp (car pair)) (number-to-string (car pair)) - (symbol-name (car pair)))) - (cadr pair))) - (quote ,(seq-partition pairs 2))))) - - (defvar *my-config* "~/projects/shoshimacs/shoshin-config.org" - "Path to my main configuration file.") - - (defun my-configuration () - (interactive) - (find-file *my-config*)) - - (defun my-reload-config () - "Tangles and reloads a literate config with `org-babel-load-file'" - (interactive) - (org-babel-load-file *my-config*)) - - (with-map-defkey my-key-map "M-m" - 1 delete-other-windows - a apropos - b consult-buffer - c my-configuration - d embark-act - e eshell - f find-file - g magit - h info - i consult-imenu - j describe-function - k describe-variable - n tab-next - s consult-ripgrep - t consult-theme - w which-key-mode - <f1> my-reload-config) -#+end_src - -** COMMENT bind-map - -there is a package available in nongnu elpa that offers a macro that -sort of generalizes the leader key idea. it also hooks into the evil package -a bit to allow definition of bindings over different "states" that your -editor might be in, like command or insert mode in xah-fly-keys. its fairly -geared toward evil in that way, so i'm not sure how it will interact, but let us -find out. the other option would be to make a simple macro of our own to hook -into leader key maps. - -#+begin_src emacs-lisp - (package-install 'bind-map) - - (bind-map my-keymap - :keys ("M-m")) - - (bind-map my-org-map - :keys ("M-m m") - :major-modes (org-mode) - :bindings ("," #'org-insert-structure-template)) - - (bind-map my-elisp-map - :keys ("M-m m") - :major-modes (emacs-lisp-mode - lisp-interaction-mode) - :bindings ("e" #'edebug-instrument-function)) - - (bind-map my-ruby-map - :keys ("M-m m") - :major-modes (ruby-mode) - :bindings ("d" #'ruby-beginning-of-defun)) - - (bind-map-set-keys my-keymap - "b" #'consult-buffer - "c" #'my-config - "g" #'magit - "j" #'consult-grep - "k" #'consult-imenu - "n" #'tab-next - "t" #'consult-theme) -#+end_src - -* Completion -:PROPERTIES: -:header-args:emacs-lisp: :noweb-ref completion :noweb-sep "\n\n" :results silent -:END: - -Completion is a huge part of my experience using Emacs. I have been on -an evolving journey of from the basic type of terminal tab completion -to spaceship level UI implemented as almost a sub-application in Emacs. - -This configuration is aiming at using a new crop of completion enhancements -that tie into Emacs's native completion API. This is a more modular approach -that allows a sort of composition of extensions to completion behavior and -its appearance in the user interface. - -** Two kinds of completion - -I want to point out that there are two distinct but similar features -both grouped under the concept of "completion". The first is *Minibuffer* -completion. Any time you use the minibuffer to enter commands or arguments, -there is a completion system available to help you enter text there. -The second is *Buffer* completion, offering candidates for text you are -typing in any buffer. Code completion provided by a language server -is one example. In vanilla Emacs, you get [[info:emacs#Symbol Completion][Symbol Completion]] -for free, since Emacs itself is a running Lisp process with knowledge of -all the defined symbols in the system. - -I've been confused by this in the past, because the features are so similar. -However, completing text in an arbitrary buffer really depends on context, -and it is much more complex than completing commands and arguments that are -appropriate to a specific situation. - -** Emacs completion styles - -Emacs has a quite sophisticated way of selecting candidates for completion. -You can read about them here: [[info:emacs#Completion Styles][emacs#Completion Styles]] - -I've grown used to the =flex= style of completion where typing -=pr/s/sho.o= at the find file prompt expands to -=projects/shoshimacs/shoshin-config.org=. There are other alternatives -and you can even write your own. The ~completion-styles~ is a list of -all the styles you'd like to use. It starts at the front, and if no matches -are found, moves to the next style of completion. In this config, I just -added =flex= to the front of the default completion styles. - -#+begin_src emacs-lisp - (setq completion-styles '(flex basic partial-completion emacs22) - completion-cycle-threshold 3 - tab-always-indent 'complete) -#+end_src - -~completion-cycle-threshold~ defines when you want to just cycle through -alternatives on each <TAB> (or whatever key you use) rather than presenting -options. Setting it to 3 means if my options are "FOO, FOP, FOR" or less, -hitting complete will change FOO->FOP, FOP->FOR, FOR->FOO. - -~tab-always-indent~ changes the behavior of the TAB key: - -#+begin_quote - If ‘complete’, TAB first tries to indent the current line, and if the line - was already indented, then try to complete the thing at point. -#+end_quote - -** [[info:consult#Top][consult]] - Consulting [[info:elisp#Minibuffer Completion][completing-read]] - -consult offers enhanced completion similar to ivy and helm, but with the -built in completing read functionality of the minibuffer. - -#+begin_src emacs-lisp - (package-install 'consult) -#+end_src - -main entry point would be ~consult-buffer~. however, there are many consult -commands that can enhance any completing read function. - -*** "Virtual Buffers" - -it introduces this concept of "Virtual Buffers", but i'm not certain what -it means. consult "supports ... narrowing to the virtual buffer types". - -perhaps a Virtual Buffer is a "grouping" of actual Emacs buffers or "things" -that can be materialized in a buffer. For example, I can ~consult-buffer~ -and press ~m SPC~ to narrow the "buffer list" to any bookmarks. - -*** consult keybindings - -#+begin_src emacs-lisp - (global-set-key (kbd "C-x b") #'consult-buffer) - (define-key xah-fly-leader-key-map (kbd "f") #'consult-buffer) - (define-key xah-fly-command-map (kbd "n") #'consult-line) -#+end_src - -*** consult-themes - -i had a bit of a mess with it at first, because i'd implemented my own -solution to a quirk of theme loading. enabling themes is additive, -and can cause unexpected results. so i added [[info:elisp#Advising Functions][advice]] -to ~load-theme~ to automatically disable the old one before enabling -the new. - -it seems like ~consult-theme~ does this as well. additionally, as -it will preview the theme as you are narrowing the selection. i did not -expect this behavior and it got all kinds of wonky. the manual has a -nice example of delaying the theme-switch-preview since it is slow. -this way you can scroll / narrow your list of themes without the colors -changing with every keypress. - -#+begin_src emacs-lisp - (with-eval-after-load 'consult - (consult-customize consult-theme :preview-key '(:debounce 0.5 any)) - (setq consult-themes my-chosen-themes)) -#+end_src - -*** TODO consult-project-buffer - -how do project buffers get filtered? i'm seeing buffers assigned to a project -that in my mind, shouldn't be. - -looks like it interfaces with ~project-switch-to-buffer~ which has its own -logic about which project a buffer belongs to. some of the mistakes i was seeing -earlier were simply due to starting a repl in a particular directory. - -it appears that "special" buffers may get assigned to a particular project as -well. for example the EWW buffer is part of a project, but it is unclear as -to why. appears likely to have to do with the behavior of the ~default-directory~ -variable which is buffer-local. - -i may want to figure out ways to mark "special" buffers as having a non-project -default-directory set so they don't show up, or just filter them out if it -becomes annoying. i'm accustomed to ~perspectives~ provided by a MELPA package -that hooked into ~projectile~'s project definitions. it would keep a list of -perspective-local buffers where the perspective was tied to a project. - -** embark - -#+begin_src emacs-lisp - (package-install 'embark) - (package-install 'embark-consult) - (global-set-key (kbd "C-;") #'embark-act) - (setq prefix-help-command #'embark-prefix-help-command) -#+end_src - -** marginalia - -#+begin_src emacs-lisp - (package-install 'marginalia) - (marginalia-mode) -#+end_src - -** vertico - -#+begin_src emacs-lisp - (package-install 'vertico) - (setq minibuffer-prompt-properties - '(read-only t cursor-intangible t face minibuffer-prompt)) - (add-hook 'minibuffer-setup-hook #'cursor-intangible-mode) - (setq read-extended-command-predicate - #'command-completion-default-include-p) - (setq enable-recursive-minibuffers t) - (vertico-mode) -#+end_src - -*** vertico-directory - -i'd like to emulate the behavior in ~find-file~ that i'm used to from Ivy. -basically, when i press DEL it should act normally until i hit a directory -boundary, then it should jump up a dir with the following press. - -this is implemented with the ~vertico-directory~ extension. - -#+begin_src emacs-lisp - (require 'vertico-directory) - (define-key vertico-map (kbd "RET") #'vertico-directory-enter) - (define-key vertico-map (kbd "DEL") #'vertico-directory-delete-char) - (define-key vertico-map (kbd "M-DEL") #'vertico-directory-delete-word) - (define-key vertico-map (kbd "M-j") #'vertico-quick-insert) -#+end_src - -** corfu - -#+begin_src emacs-lisp - (package-install 'corfu) - (setq corfu-auto t - corfu-cycle t - corfu-quit-no-match t) - (global-corfu-mode t) -#+end_src - -*** corfu-terminal enables in terminal interface - -#+begin_src emacs-lisp - (package-install 'corfu-terminal) - (unless (display-graphic-p) - (corfu-terminal-mode +1)) -#+end_src -** which-key - -which-key is an excellent package that helps provide guide posts for command -discoverability. many key commands in Emacs are in sequences. for example, -~org-babel-tangle~ is ~C-c C-v t~. as a user, the commands you use often -become muscle memory, or you map them to something more convienient. but -sometimes you know there is some command to do what you want but you don't -quite remember what the sequence is. or perhaps you're in a new major-mode -and you know there must be several handy commands under ~C-c~. ~which-key~ -pops up a buffer with a listing of all the possible continuations from where -you are in a key sequence. for that reason, it can be useful at times even -for experienced users. - -this config installs which-key, but does not activate it automatically. -some advice from Daniel Mendler (consult author) suggested that limiting the -amount Emacs pops things up automatically is a better user experience. -which-key is just a toggle away when needed, and there is also [[*embark][embark]] -which has a command to show prefix key continuations. - -#+begin_src emacs-lisp - (package-install 'which-key) - (which-key-mode) -#+end_src - -* Editing -:PROPERTIES: -:header-args:emacs-lisp: :noweb-ref editing :noweb-sep "\n\n" :results silent -:END: -** [[info:emacs#Matching][electric pair mode]] -I've been using smartparens -> (bookmark-jump "smartparens package") in my -main config. electric pair mode does some of what smartparens does out of -the box. what i'm missing is the generalized ~sp-hybrid-slurp~ or -whatever it was called. but using the built in is good for now. further -config might get what i want with vanilla built ins. - -#+begin_src emacs-lisp - (electric-pair-mode) -#+end_src - -** markdown mode -#+begin_src emacs-lisp - (package-install 'markdown-mode) -#+end_src - -** org mode -*** jump to top level parent heading - -a friend was wanting this functionality, so i dug around in the org functions -to find one i could build a command out of: - -#+begin_src emacs-lisp - (defun my-org-top-level-heading () - (interactive) - (let ((moo 1)) - (while moo (setq moo (org-up-heading-safe))))) -#+end_src - -~org-up-heading-safe~ is designed not to throw an error and returns the level -of the headline found (as it goes up) or nil if no higher level is found. -this just uses a dumb while loop to call it until it returns nil, which should -get us where we are looking to go 😃 - -*** exporting -#+begin_src - (require 'ox-md) -#+end_src -**** htmilze - -this seems to be required to fontify source blocks - -#+begin_src emacs-lisp - (package-install 'htmlize) -#+end_src - -** recentf-mode - -this tracks recently operated on files (by default) and enables quick selection -from them in various Emacs menus. [[*\[\[info:consult#Top\]\[consult\]\] - Consulting \[\[info:elisp#Minibuffer Completion\]\[completing-read\]\]][consult]] hooks into it as well. - -#+begin_src emacs-lisp - (recentf-mode) -#+end_src - -** tabs and spaces - -#+begin_src emacs-lisp - (setq indent-tabs-mode nil) -#+end_src - -* Programming -:PROPERTIES: -:header-args:emacs-lisp: :noweb-ref programming :noweb-sep "\n\n" :results silent -:END: -** Languages -*** Common Lisp -#+begin_src emacs-lisp - (package-install 'sly) -#+end_src - -*** Javascript - -#+begin_src emacs-lisp - (package-install 'json-mode) -#+end_src - -*** Ruby -**** inf-ruby - -inf-ruby provides an interface to the various REPLs available in the Ruby-verse -its currently provided by non-gnu ELPA: - -#+begin_src emacs-lisp - (package-install 'inf-ruby) -#+end_src - -** Dev Docs -#+begin_src emacs-lisp - (package-install 'devdocs) -#+end_src -* Projects -:PROPERTIES: -:header-args:emacs-lisp: :noweb-ref projects :noweb-sep "\n\n" :results silent -:END: - -** project.el - -~project.el~ is the built in project management tool. previously, I've used -~projectile~, which is great, but some of the more recent tools (like eglot) -use the built in ~project.el~ api for their features. - -I've got the ~project-prefix-map~ on the key =p= in [[*with-map-defkey][my-key-map]]. - -** version control -*** magit - -its the best! 🪄 - -#+begin_src emacs-lisp - (package-install 'magit) -#+end_src -* External Services -:PROPERTIES: -:header-args:emacs-lisp: :noweb-ref external-services :noweb-sep "\n\n" :results silent -:END: - -Packages that enable communication via HTTP or connect with external APIs or other -resources outside of Emacs and/or the local machine. - -** plz - http library - -this is an http library that intends to solve some of the "pain points" of url.el. -i ran into some of them trying to download and install the Victor Mono font used -by my configuration. the downside of ~plz~ is that it is dependent on ~curl~, rather -than being pure elisp. however, this is a non-issue for me, especially since my -use case had devolved into using ~make-process~ to call ~wget~ and then implement -a "callback" with a process sentinel. kinda neat, but maybe too much. - -#+begin_src emacs-lisp - (package-install 'plz) -#+end_src - -the sourcehut package in this config also depends on ~plz~ - -** sourcehut -there's a new package in GNU ELPA for some basic interaction with the sr.ht http api. -i'm interested to try it out since i still pay for the account, plus the forge is -free software and could be self-hosted if it comes to it. - -it also depends on ~plz~ which is another new package providing a nicer API for -HTTP requests. - -#+begin_src emacs-lisp - (package-install 'srht) - (setq srht-username "shoshin") -#+end_src - -an API token is stored in my ~.authinfo~ file. - -* UI -:PROPERTIES: -:header-args:emacs-lisp: :noweb-ref user-interface :noweb-sep "\n\n" :results silent -:END: -** basic Emacs UI tweaks - -#+begin_src emacs-lisp - (when (display-graphic-p) - (scroll-bar-mode -1) - (fringe-mode '(8 . 0))) - - (tab-bar-mode t) - (display-battery-mode t) -#+end_src - -** darkroom - distraction free writing - -the notes suggest using ~darkroom-tentative-mode~ which auto switches -depending on the window layout currently in use. - -#+begin_src emacs-lisp - (package-install 'darkroom) -#+end_src - -** Fonts -For code, I've grown fond of Victor Mono. - -#+begin_src emacs-lisp - (set-frame-font "Victor Mono") -#+end_src - -*** COMMENT Attempt to install the font via Emacs, url.el and ~make-process~ - -in the end, this "works" but isn't very useful. the font cache needs to be updated -before Emacs runs for the font to register anyway. This will instead be implemented -as a shell script that can be run as a pre-req before initializing emacs. - -however, i did learn a bit about [[info:elisp#Sentinels][Sentinels]] they are kinda neat. - -#+begin_src emacs-lisp - ;; this actually doesn't work right, because the process unzipping starts - ;; before the file is completely written i think. - (url-retrieve "https://rubjo.github.io/victor-mono/VictorMonoAll.zip" - #'victor-mono-download-callback) - - (make-process :name "getting victor mono" - :buffer "*Download Victor Mono*" - :command '("wget" "--output-document=/home/shoshin/.fonts/VictorMonoAll.zip" - "https://rubjo.github.io/victor-mono/VictorMonoAll.zip") - :sentinel #'victor-mono-download-callback) - - (defun victor-mono-download-callback (process event) - (if (string-equal "finished\n" event) - (let ((default-directory "~/.fonts/VictorMono")) - (unless (file-directory-p default-directory) - (make-directory default-directory)) - (make-process :name "unzipping victor mono" - :buffer "*Unzip Victor Mono*" - :command `("unzip" ,(expand-file-name "~/.fonts/VictorMonoAll.zip")) - :sentinel #'victor-mono-sentinel)))) - - (defun victor-mono-sentinel (process event) - (print event) - (if (string-equal "finished\n" event) - (progn (message "works!") - (make-process :name "run fc-cache" :command '("fc-cache"))))) -#+end_src -** Highlights -*** [[help:global-hl-line-mode][global-hl-mode]] -i enjoy having the current line highighted as a visual cue. - -#+begin_src emacs-lisp - (global-hl-line-mode t) -#+end_src - -can be toggled with <leader> l 2 - -*** COMMENT lin-global-mode -Make `hl-line-mode' more suitable for selection UIs - -add other hooks to ~lin-mode-hooks~ - -#+begin_src emacs-lisp - (setq my-lin-mode-hooks - '()) -#+end_src - -#+begin_src emacs-lisp - (package-install 'lin) - (require 'lin) - (setq lin-face 'lin-blue) - (mapc (lambda (e) (cl-pushnew e lin-mode-hooks)) my-lin-mode-hooks) - (lin-global-mode) -#+end_src -** Themes -*** theme packages / installation - -to keep it concise, i'll define a special variable to hold the theme packages -i'd like to install anytime this config is loaded on a system where they are -not there. then i can ~mapc~ #'package-install over the list of themes. - -#+begin_src emacs-lisp :noweb-ref defvars - (defvar my-themes-to-install - '(cyberpunk-theme dracula-theme nano-theme) - "List of themes to install when loading shoshimacs config.") -#+end_src - -#+begin_src emacs-lisp - (load-theme (seq-random-elt my-chosen-themes)) -#+end_src - -*** chosen theme list and random loading on init - -i generally haven't used built-in themes much, but there's a few i like, -and the ones i specifically install i'd like to keep in a list of "chosen" -ones. i can load one at random if i please, and perhaps provide it as -candidates to ~consult-themes~. - -#+begin_src emacs-lisp :noweb-ref defvars - (defvar my-chosen-themes - '(cyberpunk dichromacy dracula leuven modus-operandi modus-vivendi - nano-dark nano-light tango tango-dark) - "List of themes I prefer for narrowing and random selection.") -#+end_src - -#+begin_src emacs-lisp - (mapc #'package-install my-themes-to-install) -#+end_src - -** windresize - -#+begin_src emacs-lisp - (package-install 'windresize) -#+end_src - - |