Compare commits

..

3 commits

Author SHA1 Message Date
Howard Abrams
ed73ac2bf2 Ensure everything is installed 2025-09-11 09:55:02 -07:00
Howard Abrams
c40a8f3420 All of the built-in packages are ensure nil'd
Removed all straight references.
2025-09-11 09:47:38 -07:00
Howard Abrams
a633b22275 Remove the use of the :general
But to use the (ha-leader), we need to add an :after general
2025-09-10 10:52:35 -07:00
24 changed files with 220 additions and 199 deletions

View file

@ -131,12 +131,7 @@ And if that doesnt work, then we need to delete all packages installed by bre
* Afterwards
After Emacs is /kinda/ working, make sure you install *all* the fonts, that is:
#+begin_example
M-x nerd-icons-install-fonts
#+end_example
Everything golden?
#+begin_example
M-x straight-freeze-versions
M-x nerd-icons-install-fonts
#+end_example
Before we can build a Telegram server for [[file:ha-aux-apps.org::*Telega][Telega]], we need to install the /latest/ version:

View file

@ -8,7 +8,7 @@ Ive crafted my Emacs configuration, I cheekily call /hamacs/, in a literate p
The advantage to rolling yer own is I tend to /use/ what I add, leading to less bloat. In reality, this is more fun.
Using [[https://howardism.org/Technical/Emacs/literate-devops.html][literate programming]] for my Emacs configuration gives me an easy way to /share/ my code. Feel free to steal whatever you find interesting, as sharing makes our community great. Notice that functions and features I have written begin with =ha-=, but everything else is either /stock Emacs/ or a /package/ I download using [[https://github.com/raxod502/straight.el][straight]] (see [[file:bootstrap.org][bootstrap]] for the details) and configure with [[https://github.com/jwiegley/use-package][use-package]] (see either [[https://ianyepan.github.io/posts/setting-up-use-package/][this introduction]] or [[https://www.emacswiki.org/emacs/UsePackage][this wiki page]] for those details)… meaning most blocks of code should work on its own.
Using [[https://howardism.org/Technical/Emacs/literate-devops.html][literate programming]] for my Emacs configuration gives me an easy way to /share/ my code. Feel free to steal whatever you find interesting, as sharing makes our community great. Notice that functions and features I have written begin with =ha-=, but everything else is either /stock Emacs/ or a /package/ I download using [[https://github.com/progfolio/elpaca][Elpaca]] (see [[file:bootstrap.org][bootstrap]] for the details) and configure with [[https://github.com/jwiegley/use-package][use-package]] (see either [[https://ianyepan.github.io/posts/setting-up-use-package/][this introduction]] or [[https://www.emacswiki.org/emacs/UsePackage][this wiki page]] for those details)… meaning most blocks of code should work on its own.
Ive separated my configuration into /chapters/ around particular subjects, applications and programming languages. This feature allows you, dear reader, to jump our to items of interest, but allows me to /selectively load/ individual chapters. For instance, if Im not doing much with Ruby at work, I can remove that chapter from the list in my [[file:bootstrap.org::*Load the Rest][bootstrap]]. I also dont load my [[file:ha-display.org][UI configuration]] when I am using the Terminal (doesnt happen much, actually).
@ -26,7 +26,7 @@ To create [[file:~/.emacs.d/init.el][~/.emacs.d/init.el]] which starts the proce
[[file:screenshots/dashboard-small.png]]
** Core Configuration
- [[file:bootstrap.org][Bootstrap]] :: configures =straight= and loads basic libraries the rest of the code depends on. It then loads the following files in order.
- [[file:bootstrap.org][Bootstrap]] :: configures =elpaca= and loads basic libraries the rest of the code depends on. It then loads the following files in order.
- [[file:ha-config.org][Configuration]] :: contains /most/ of my configuration, setting up my sequence key menus, evil, etc.
- [[file:ha-evil.org][Evilness]] :: configuration for using VI, er, ~vim~ keybindings in Emacs.
- [[file:ha-general.org][Leader]] :: using the ~SPC~ to kick off a hierarchical order of functions.

View file

@ -27,9 +27,7 @@ A literate programming file for bootstraping my Emacs Configuration.
* Introduction
This file contains all the variable definitions and library loading for the other files in my project.
I'm installing everything using the [[https://github.com/raxod502/straight.el#getting-started][straight.el]] for package installation and management. This is initialization code configured in [[file:initialize][initialize]], and calls to =use-package= now accepts a =:straight= parameter that allows me to retrieve special versions of some packages.
See the details in [[https://dev.to/jkreeftmeijer/emacs-package-management-with-straight-el-and-use-package-3oc8][this essay]].
I'm installing everything using the [[https://github.com/progfolio/elpaca/blob/master/doc/manual.md][elpaca project]] for package installation and management. I configure its initialization code in [[file:initialize][initialize]] script, and calls to =use-package= now /work through it/.
* Initial Settings
** Garbage Collection Settings

View file

@ -29,10 +29,10 @@ Can we call the following /applications/? I guess.
* Git and Magit
Can not live without [[https://magit.vc/][Magit]], a Git porcelain for Emacs. I stole the bulk of this work from Doom Emacs.
#+begin_src emacs-lisp
(use-package transient
:ensure t)
(use-package transient :ensure t)
(use-package magit
:after general
;; See https://github.com/magit/magit/wiki/Emacsclient for why we need to set:
:custom (with-editor-emacsclient-executable "emacsclient")
@ -105,6 +105,7 @@ Turning on the mode, as well as binding some new /leader/ keys:
#+BEGIN_SRC emacs-lisp
(use-package diff-hl
:after general
:config
(global-diff-hl-mode)
@ -132,7 +133,6 @@ This project (and others) can use repeat mode, but
The [[https://scripter.co/using-git-delta-with-magit][magit-delta]] project uses [[https://github.com/dandavison/delta][git-delta]] for colorized diffs.
#+begin_src emacs-lisp
(use-package magit-delta
:ensure t
:hook (magit-mode . magit-delta-mode))
#+end_src
@ -216,10 +216,10 @@ The crucial parts of this helper function are that we "wash" the result using =a
The functions below depend on [[help:magit-thing-at-point][magit-thing-at-point]], and this depends on the [[https://sr.ht/~pkal/compat/][compat]] library, so lets grab that stuff:
#+begin_src emacs-lisp :tangle no
(use-package compat
;; :straight (:host github :repo "emacs-straight/compat"))
(use-package compat)
(use-package magit-section
:after compat
:commands magit-thing-at-point)
#+end_src
Next, let's define our first command basically doing a =git show= for some revision which defaults to the commit or branch at point or queries the user if there's none.
@ -313,7 +313,8 @@ Using the [[https://github.com/emacsmirror/gist][gist package]] to write code sn
The gist project depends on the [[https://github.com/sigma/gh.el][gh library]]. There seems to be a problem with it.
#+begin_src emacs-lisp :tangle no
(use-package gh
;; :straight (:host github :repo "sigma/gh.el"))
;; :ensure (:host github :repo "sigma/gh.el")
)
#+end_src
** Forge
@ -411,6 +412,7 @@ Web pages look pretty good with EWW, but I'm having difficulty getting it to ren
#+begin_src emacs-lisp
(use-package eww
:ensure nil
:init
(setq browse-url-browser-function 'eww-browse-url
browse-url-secondary-browser-function 'browse-url-default-browser
@ -482,6 +484,7 @@ Web pages look pretty good with EWW, but I'm having difficulty getting it to ren
This function allows Imenu to offer HTML headings in EWW buffers, helpful for navigating long, technical documents.
#+begin_src emacs-lisp :tangle no
(use-package eww
:ensure nil
:config
(defun unpackaged/imenu-eww-headings ()
"Return alist of HTML headings in current EWW buffer for Imenu.
@ -509,7 +512,7 @@ Make my EWW browsers /look/ like an Org file with the [[https://github.com/cheny
#+begin_src emacs-lisp
(use-package shrface
;; :straight (:host github :repo "chenyanming/shrface")
;; :ensure (:host github :repo "chenyanming/shrface")
:config
(shrface-basic)
;; (shrface-trial)
@ -527,6 +530,7 @@ The following connection to EWW throws errors now. Hrm.
#+begin_src emacs-lisp :tangle no
(use-package eww
:ensure nil
:after shrface
:hook (eww-after-render #'shrface-mode))
#+end_src
@ -644,18 +648,17 @@ Instead I use Emacs' built-in directory lister (which accepts the standard, =dir
#+begin_src emacs-lisp
(use-package ls-lisp
;; :straight (:type built-in)
:ensure nil
:config
(setq ls-lisp-use-insert-directory-program nil
dired-listing-switches
"-l --almost-all --human-readable --group-directories-first --no-group"))
#+end_src
And [[https://www.masteringemacs.org/article/dired-shell-commands-find-xargs-replacement][this article by Mickey Petersen]] convinced me to turn on the built-in =dired-x= (just have to tell [[file:bootstrap.org::*Introduction][straight]] that knowledge):
And [[https://www.masteringemacs.org/article/dired-shell-commands-find-xargs-replacement][this article by Mickey Petersen]] convinced me to turn on the built-in =dired-x=:
#+begin_src emacs-lisp
(use-package dired-x
;; :straight (:type built-in))
(use-package dired-x :ensure nil)
#+end_src
The advantage of =dired-x= is the ability to have [[https://www.emacswiki.org/emacs/DiredExtra#Dired_X][shell command guessing]] when selecting one or more files, and running a shell command on them with ~!~ or ~&~.
@ -669,7 +672,7 @@ The [[https://github.com/alexluigit/dirvish][dirvish]] project aims to make a pr
Im beginning with dirvish to use the [[https://github.com/alexluigit/dirvish/blob/main/docs/CUSTOMIZING.org][sample configuration]] and change it:
#+begin_src emacs-lisp :tangle no
(use-package dirvish
;; :straight (:host github :repo "alexluigit/dirvish")
;; :ensure (:host github :repo "alexluigit/dirvish")
:init (dirvish-override-dired-mode)
:custom

View file

@ -31,7 +31,7 @@ The following applications are not needed. I alternate between trying to /stay i
Glad to see the 2FA feature is working on the [[https://codeberg.org/martianh/mastodon.el][mastodon.el]] project, and even more glad to see the great birdland diaspora arrive in the land of the toots.
#+begin_src emacs-lisp
(use-package mastodon
;; :straight (:host codeberg :repo "martianh/mastodon.el")
;; :ensure (:host codeberg :repo "martianh/mastodon.el")
:init
(setq mastodon-instance-url "https://pdx.social"
mastodon-active-user "howard"))
@ -95,7 +95,7 @@ Lets turn on non-fixed-width fonts to make everything easier to read:
Yet another encrypted chat/VoIP client-server, but unlike Signal and Telegram, [[matrix.org][Matrix]] is act ually open source. In other words, a project for nerds. Well be using Alphapapas latest [[https://github.com/alphapapa/ement.el][ement]] project.
#+begin_src emacs-lisp
(use-package ement
;; :straight (:host github :repo "alphapapa/ement.el")
;; :ensure (:host github :repo "alphapapa/ement.el")
:config
(major-mode-hydra-define ement-room-mode (:quit-key "q")
("Send"
@ -189,7 +189,7 @@ Been working on my [[https://gitlab.com/howardabrams/emacs-rpgdm][RPG DM project
#+begin_src emacs-lisp
(when (f-directory? "~/src/emacs-rpgdm")
(use-package rpgdm
;; :straight (:local-repo "~/src/emacs-rpgdm")
:load-path "~/src/emacs-rpgdm"
:commands (rpgdm-mode rpgdm-tables-load)
:init (setq rpgdm-base (expand-file-name "~/src/emacs-rpgdm"))
:config (ha-leader "t D" '("rpg dm" . rpgdm-mode))))
@ -199,7 +199,7 @@ Working on my new replacement of my DM code:
#+begin_src emacs-lisp
(when (f-directory? "~/src/emacs-rpgtk")
(use-package rpgtk
;; :straight (:local-repo "~/src/emacs-rpgtk")
:load-path "~/src/emacs-rpgtk"
:after hydra
;; :commands (rpgtk-mode rpgtk-tables-load rpgtk-dice rpgtk-message)
:custom
@ -217,7 +217,7 @@ And my [[https://gitlab.com/howardabrams/emacs-ironsworn][new Ironsworn project]
(when (f-directory? "~/src/emacs-ironsworn")
(use-package rpgdm-ironsworn
:after rpgdm
;; :straight (:local-repo "~/src/emacs-ironsworn")
:load-path "~/src/emacs-ironsworn"
:init
(setq rpgdm-ironsworn-project (expand-file-name "~/src/emacs-ironsworn")
;; Ignore org links that call my RPG functions:
@ -234,7 +234,7 @@ Why not? Lets see if the [[https://github.com/isamert/empv.el][empv]] project
What else?
#+begin_src emacs-lisp
(use-package empv
;; :straight (:host github :repo "isamert/empv.el")
;; :ensure (:host github :repo "isamert/empv.el")
:general (ha-leader
"a p" '(empv-map :wk "play music")))
#+end_src

View file

@ -233,7 +233,7 @@ And for even quicker work, we can have special scripts tied to special keybindin
The [[https://gitlab.com/aimebertrand/org-mac-link][org-mac-link]] project makes it easy to tell Emacs to retrieve information from other apps, e.g. the URL of the opened tab in Firefox.
#+begin_src emacs-lisp
(use-package org-mac-link
;; :straight (:host gitlab :repo "aimebertrand/org-mac-link")
;; :ensure (:host gitlab :repo "aimebertrand/org-mac-link")
:config
(ha-leader "i" '("insert app info" . org-mac-link-get-link)))
#+end_src

View file

@ -146,8 +146,7 @@ After reading [[https://irreal.org/blog/?p=12139][Jon Sanders essay]] as well
#+begin_src emacs-lisp
(use-package emacs-everywhere
;; :straight (:host github :repo "tecosaur/emacs-everywhere")
:ensure t)
:ensure t) ; (:host github :repo "tecosaur/emacs-everywhere")
#+end_src
This package /called outside of Emacs/, so I bound a keybinding to iCanHazShortcut:
@ -226,7 +225,7 @@ When I push changes to my files to Gerrit and other code review, I dont want
The [[https://www.emacswiki.org/emacs/RecentFiles][recentf]] feature has been in Emacs for a long time, but it has a problem with Tramp, as we need to turn off the cleanup feature that attempts to =stat= all the files and remove them from the =recent= accessed list if they are readable. The requires recentf to open up a remote files which blocks Emacs at the most inopportune times… like when trying to reboot the machine.
#+begin_src emacs-lisp
(use-package recentf
;; :straight (:type built-in)
:ensure nil
:config
(setq recentf-auto-cleanup 'never) ;; disable before we start recentf!
(recentf-mode 1))
@ -335,13 +334,13 @@ This means (and I use this fairly often), that the /key/ is shows as a choice, t
The [[https://github.com/minad/vertico][vertico]] package puts the completing read in a vertical format, and like [[https://github.com/raxod502/selectrum#vertico][Selectrum]], it extends Emacs built-in functionality, instead of adding a new process. This means all these projects work together.
#+begin_src emacs-lisp
(use-package vertico
:ensure t
:config (vertico-mode))
#+end_src
My issue with Vertico is when calling =find-file=, the Return key opens =dired=, instead of inserting the directory at point. This package addresses this:
#+begin_src emacs-lisp
(use-package vertico-directory
;; :straight (el-patch :files ("~/.emacs.d/straight/repos/vertico/extensions/vertico-directory.el"))
:ensure nil
:load-path "~/.emacs.d/elpaca/builds/vertico/extensions"
;; More convenient directory navigation commands
:bind (:map vertico-map
("RET" . vertico-directory-enter)
@ -355,14 +354,13 @@ My issue with Vertico is when calling =find-file=, the Return key opens =dired=,
This fuzzy completion style is like the built-in =flex= style, but has a better scoring algorithm, non-greedy and ranks completions that match at word; path component; or camelCase boundaries higher.
#+begin_src emacs-lisp
(use-package hotfuzz :ensure t)
(use-package hotfuzz)
#+end_src
While flexible at matching, you have to get the /order/ correct. For instance, ~alireg~ matches with [[help:align-regexp][align-regexp]], but ~regali~ does not, so we will use =hotfuzz= for scoring, and not use this as a completion-project (see the =fussy= project below).
*** Orderless
While the space can be use to separate words (acting a bit like a =.*= regular expression), the [[https://github.com/oantolin/orderless][orderless]] project allows those words to be in any order.
#+begin_src emacs-lisp
(use-package orderless
:ensure t
:commands (orderless-filter)
:custom
(completion-ignore-case t)
@ -383,8 +381,7 @@ How does it compare? Once upon a time, I enjoyed typing ~plp~ for =package-list-
#+begin_src emacs-lisp
(use-package fussy
:ensure t
;; ;; :straight (:host github :repo "jojojames/fussy")
:ensure t ; :ensure (:host github :repo "jojojames/fussy")
:config
(push 'fussy completion-styles)
(setq completion-category-defaults nil
@ -395,9 +392,7 @@ How does it compare? Once upon a time, I enjoyed typing ~plp~ for =package-list-
*** Savehist
Persist history over Emacs restarts using the built-in [[https://www.emacswiki.org/emacs/SaveHist][savehist]] project. Since both Vertico and Selectrum sorts by history position, this should make the choice /smarter/ with time.
#+begin_src emacs-lisp
(use-package savehist
:init
(savehist-mode))
(savehist-mode)
#+end_src
*** Marginalia
The [[https://github.com/minad/marginalia][marginalia]] package gives a preview of =M-x= functions with a one line description, extra information when selecting files, etc. Nice enhancement without learning any new keybindings.
@ -405,7 +400,6 @@ The [[https://github.com/minad/marginalia][marginalia]] package gives a preview
#+begin_src emacs-lisp
;; Enable richer annotations using the Marginalia package
(use-package marginalia
:ensure t
:init
(setq marginalia-annotators-heavy t)
:config
@ -430,7 +424,6 @@ The [[https://gitlab.com/ideasman42/emacs-undo-fu][undo-fu]] isnt much to the
#+begin_src emacs-lisp
(use-package undo-fu
:ensure t
:config
(global-set-key [remap undo] 'undo-fu-only-undo)
(global-set-key [remap undo-redo] 'undo-fu-only-redo)
@ -578,7 +571,7 @@ The [[https://github.com/minad/cape][Cape project]] deliver particular [[help:co
#+BEGIN_SRC emacs-lisp :tangle no
(use-package cape
;; :straight (:host github :repo "minad/cape")
:ensure t ; (:host github :repo "minad/cape")
:init
(setq completion-at-point-functions (list #'cape-emoji)))
#+END_SRC
@ -599,7 +592,6 @@ After using [[http://company-mode.github.io/][company]] for my completion back-
#+begin_src emacs-lisp
(use-package corfu
:ensure t
:custom
(corfu-cycle t)
(corfu-separator ?\s)
@ -611,7 +603,6 @@ Using [[https://github.com/joaotavora/yasnippet][yasnippet]] to expand templates
#+begin_src emacs-lisp
(use-package yasnippet
:ensure t
:config
(add-to-list 'yas-snippet-dirs
(expand-file-name "snippets" user-emacs-directory))
@ -630,6 +621,7 @@ The [[https://www.emacswiki.org/emacs/AutoInsertMode][auto-insert]] feature is a
#+begin_src emacs-lisp
(use-package autoinsert
:ensure nil
:init
(setq auto-insert-directory (expand-file-name "templates" user-emacs-directory))
;; Don't prompt before insertion:
@ -682,7 +674,7 @@ As I've mentioned [[http://www.howardism.org/Technical/Emacs/beep-for-emacs.html
'libnotify)))
(use-package beep
;; :straight (:local-repo "~/src/hamacs/elisp")
:load-path "~/src/hamacs/elisp"
:hook (after-init . ha-random-startup-message)
:commands (beep-when-finished beep-when-run-too-long)
:config
@ -931,6 +923,8 @@ Since I wasnt using all the features that [[https://github.com/bbatsov/projec
#+begin_src emacs-lisp
(use-package emacs
:ensure nil
:after general
:config
(ha-leader
"p" '(:ignore t :which-key "projects")
@ -1172,7 +1166,7 @@ Also, as [[https://www.bytedude.com/gpg-in-emacs/][bytedude]] mentions, I need t
#+begin_src emacs-lisp
(use-package epa-file
;; :straight (:type built-in)
:ensure nil
:custom
(epg-debug t)
(auth-source-debug t)
@ -1188,6 +1182,7 @@ Also, as [[https://www.bytedude.com/gpg-in-emacs/][bytedude]] mentions, I need t
Need to make sure that Emacs will handle the prompts, and turn it on:
#+begin_src emacs-lisp
(use-package epa-file
:ensure nil
:config
(setenv "GPG_AGENT_INFO" nil)
(epa-file-enable))

View file

@ -43,12 +43,12 @@ A literate programming file for creating and running demonstrations
Once I made demonstrations /within/ Emacs with my [[https://github.com/howardabrams/demo-it][demo-it]] project. While on MELPA, I wanted to use my own cloned version to make sure I can keep debugging it.
#+begin_src emacs-lisp :tangle no
(use-package demo-it
;; :straight (:local-repo "~/src/demo-it")
;; ;; :straight (:host github :repo "howardabrams/demo-it")
:commands (demo-it-create demo-it-start demo-it-hide-mode-line
demo-it--presentation-display-set)
:custom (demo-it--insert-test-speed :faster))
(use-package demo-it
:load-path "~/src/demo-it"
;; :ensure (:host github :repo "howardabrams/demo-it")
:commands (demo-it-create demo-it-start demo-it-hide-mode-line
demo-it--presentation-display-set)
:custom (demo-it--insert-test-speed :faster))
#+end_src
But I feel I should replace it, and this project encapsulates the following goals:
@ -194,7 +194,7 @@ With some a startup bug that I havent been able to resolve, Im not using i
#+begin_src emacs-lisp :tangle no
(use-package dslide
;; :straight (dslide :host github :repo "positron-solutions/dslide")
;; :ensure (:host github :repo "positron-solutions/dslide")
:commands (dslide-deck-start dslide-deck-stop)
:custom
(dslide-start-from 'point)
@ -227,7 +227,7 @@ With some a startup bug that I havent been able to resolve, Im not using i
(dslide-stop . ha-slide-teardown)))
#+end_src
Lets try it out by loading this example.[[file:~/.emacs.d/straight/repos/dslide/test/demo.org][ demo.org]]
Lets try it out by loading this example.[[file:~/.emacs.d/elpaca/repos/dslide/test/demo.org][demo.org]]
What features do I like and want to take advantage of?
- Inline Children show: =:DSLIDE_SLIDE_ACTION: dslide-slide-action-inline=
@ -244,7 +244,7 @@ Call the =ha-slide-notes-update= function automatically after updating a slide.
#+BEGIN_SRC emacs-lisp :tangle no
(use-package dslide
;; :straight (dslide :host github :repo "positron-solutions/dslide")
;; :ensure (:host github :repo "positron-solutions/dslide")
:commands (dslide-narrow-hook)
:hook (dslide-narrow . 'ha-slide-notes-update))
#+END_SRC
@ -256,8 +256,8 @@ The [[https://github.com/positron-solutions/moc][Master of Ceremonies]] package
(use-package default-text-scale)
(use-package moc
;; :straight (:type git :host github
:repo "positron-solutions/moc"))
;; :ensure (:host github :repo "positron-solutions/moc")
)
#+END_SRC
Select text, and call =moc-focus= (call =moc-focus-quit= to stop). Highlight more text, and call =moc-focus-highlight= to brighten it, or =moc-focus-obscure= to hide it.
@ -272,7 +272,8 @@ The [[https://github.com/trevorpogue/topspace][topspace]] project can pad the to
#+BEGIN_SRC emacs-lisp
(use-package topspace
;; :straight (:type git :host github :repo "trevorpogue/topspace"))
;; :ensure (:host github :repo "trevorpogue/topspace")
)
#+END_SRC
*** Showing Something associated with a Headline
@ -307,7 +308,7 @@ To do this, add =:DSLIDE_ACTIONS: dslide-action-highlight-paragraphs= to the pro
#+begin_src elisp emacs-lisp :tangle no
(use-package dslide
;; :straight (:host github :repo "positron-solutions/dslide")
;; :ensure (:host github :repo "positron-solutions/dslide")
:config
(defclass dslide-action-highlight-paragraphs (dslide-action)
((overlays :initform nil))

View file

@ -47,7 +47,6 @@ Let's turn off the menu and other settings:
Let's install and load some of packages from the [[https://github.com/hlissner/doom-emacs][Doom Emacs]] project, like [[https://github.com/seagle0128/doom-modeline][doom-modeline]] and maybe the themes:
#+begin_src emacs-lisp
(use-package doom-modeline
:ensure t
:init
(setq doom-modeline-minor-modes nil
doom-modeline-buffer-encoding nil
@ -87,8 +86,7 @@ either be "there or not" which resulted large jumps and large distractions.
#+BEGIN_SRC emacs-lisp
(use-package ultra-scroll
:ensure t
;; :straight (:type git :host github :repo "jdtsmith/ultra-scroll")
:ensure t ; (:host github :repo "jdtsmith/ultra-scroll")
:config
(setq scroll-conservatively 101 ; important!
scroll-margin 0)
@ -99,7 +97,7 @@ Large screen, lots of windows, so where is the cursor? While I used to use =hl-l
#+begin_src emacs-lisp
(use-package pulsar
;; :straight (:host github :repo "protesilaos/pulsar")
;; :ensure (:host github :repo "protesilaos/pulsar")
:ensure t
:custom
(pulsar-face 'pulsar-generic)
@ -162,8 +160,7 @@ Am I ever really ever satisfied with any font? I regularly change my font based
#+begin_src emacs-lisp
(use-package mixed-pitch
;; :straight (:host github :repo "jabranham/mixed-pitch")
:ensure t
:ensure t ; (:host github :repo "jabranham/mixed-pitch")
:config
(add-to-list 'mixed-pitch-fixed-pitch-faces 'org-property-value)
(add-to-list 'mixed-pitch-fixed-pitch-faces 'org-special-keyword)
@ -393,8 +390,7 @@ This project replaces [[https://github.com/domtronn/all-the-icons.el][all-the-ic
#+BEGIN_SRC emacs-lisp
(use-package nerd-icons
:ensure t
;; :straight (nerd-icons :type git :host github :repo "rainstormstudio/nerd-icons.el")
:ensure t ; (:host github :repo "rainstormstudio/nerd-icons.el")
:custom
;; The Nerd Font you want to use in GUI defaults to fixed-font:
(nerd-icons-font-family ha-fixed-font))
@ -636,14 +632,16 @@ Oh, and turn off the line highlighting:
And of course, the default is /inside/ where my mind is dark and safe:
#+begin_src emacs-lisp
(laptop-inside)
(use-package emacs
:ensure nil
:config (laptop-inside))
#+end_src
** Highlight Task Labels
In code, if you drop a specific /text/ labels, we can highlight them with [[https://github.com/tarsius/hl-todo][hl-todo package]]:
#+begin_src emacs-lisp
(use-package hl-todo
;; :straight (:host github :repo "tarsius/hl-todo")
;; :ensure (:host github :repo "tarsius/hl-todo")
:config
(setq hl-todo-keyword-faces
`(("TODO" . ,(face-foreground 'warning))
@ -659,8 +657,7 @@ Suggests to bind some keys to =hl-todo-next= in order to jump from tag to tag, b
#+begin_src emacs-lisp
(use-package consult-todo
;; :straight (:host github :repo "liuyinz/consult-todo")
:ensure t
:ensure t ; (:host github :repo "liuyinz/consult-todo")
:init
(defconst consult-todo--narrow
'((?t . "TODO")

View file

@ -737,7 +737,7 @@ The idea of linking org documents to email could be nice, however, the =ol-notmu
#+begin_src emacs-lisp :tangle no
(use-package ol-notmuch
:after org
;; :straight (:type built-in)
:ensure nil
:config (add-to-list 'org-modules 'ol-notmuch))
#+end_src
To use, read a message and save a link to it with ~SPC o l~. Next, in an org document, create a link with ~, l~. Now, you can return to the message from that document with ~, o~. Regardless, I may need to store a local copy when I upgrade Org.

View file

@ -27,10 +27,9 @@ A literate programming file for configuring the Emacs Shell.
While I like [[https://github.com/akermu/emacs-libvterm][vterm]] for logging into [[file:ha-remoting.org][remote systems]], I find Emacs shell, =eshell=, an interesting alternative.
If you find the documentation lacking, I [[http://www.howardism.org/Technical/Emacs/eshell-fun.html][documented most features]], and you might find the following helpful.
Tell straight to use the built-in =eshell=:
#+begin_src emacs-lisp
(use-package eshell
;; :straight (:type built-in)
:ensure nil
:hook (eshell-mode . ha-eshell-setup))
#+end_src
@ -87,6 +86,7 @@ Need to hook this when we change the directory.
#+BEGIN_SRC emacs-lisp
(use-package eshell
:ensure nil
:hook (eshell-directory-change . ha-eshell-header-line))
#+END_SRC
@ -974,26 +974,26 @@ I think using the [[help:rx][rx]] macro with applications like =grep= is great r
The problem with this trick is that =rx= outputs an Emacs-compatible regular expression, which doesnt always match regular expressions accepted by most applications.
The [[https://github.com/joddie/pcre2el][pcre2el]] project can convert from a Lisp regular expression to a [[http://www.pcre.org/][PCRE]] (Perl Compatible Regular Expression), acceptable by [[https://github.com/BurntSushi/ripgrep][ripgrep]].
#+begin_src emacs-lisp
(use-package pcre2el
;; :straight (:host github :repo "joddie/pcre2el")
:config
(defmacro prx (&rest expressions)
"Convert the rx-compatible regular EXPRESSIONS to PCRE.
Most shell applications accept Perl Compatible Regular Expressions."
`(rx-let ((integer (1+ digit))
(float (seq integer "." integer))
(b256 (seq (optional (or "1" "2"))
(regexp "[0-9]\\{1,2\\}")))
(ipaddr (seq b256 "." b256 "." b256 "." b256))
(time (seq digit (optional digit) ":" (= 2 digit) (optional ":" (= 2 digit))))
(email (seq (1+ (regexp "[^,< ]")) "@" (1+ (seq (1+ (any alnum "-"))) ".") (1+ alnum)))
(date (seq (= 2 digit) (or "/" "-") (= 2 digit) (or "/" "-") (= 4 digit)))
(ymd (seq (= 4 digit) (or "/" "-") (= 2 digit) (or "/" "-") (= 2 digit)))
(uuid (seq (= 8 hex) "-" (= 3 (seq (= 4 hex) "-")) (= 12 hex)))
(guid (seq uuid)))
(rxt-elisp-to-pcre (rx ,@expressions)))))
#+end_src
#+begin_src emacs-lisp
(use-package pcre2el
:ensure t ; (:host github :repo "joddie/pcre2el")
:config
(defmacro prx (&rest expressions)
"Convert the rx-compatible regular EXPRESSIONS to PCRE.
Most shell applications accept Perl Compatible Regular Expressions."
`(rx-let ((integer (1+ digit))
(float (seq integer "." integer))
(b256 (seq (optional (or "1" "2"))
(regexp "[0-9]\\{1,2\\}")))
(ipaddr (seq b256 "." b256 "." b256 "." b256))
(time (seq digit (optional digit) ":" (= 2 digit) (optional ":" (= 2 digit))))
(email (seq (1+ (regexp "[^,< ]")) "@" (1+ (seq (1+ (any alnum "-"))) ".") (1+ alnum)))
(date (seq (= 2 digit) (or "/" "-") (= 2 digit) (or "/" "-") (= 4 digit)))
(ymd (seq (= 4 digit) (or "/" "-") (= 2 digit) (or "/" "-") (= 2 digit)))
(uuid (seq (= 8 hex) "-" (= 3 (seq (= 4 hex) "-")) (= 12 hex)))
(guid (seq uuid)))
(rxt-elisp-to-pcre (rx ,@expressions)))))
#+end_src
** Map over Files
While I like eshells =for= loop well enough (if I can remember the syntax), as in:
#+begin_src sh :tangle no
@ -1378,7 +1378,7 @@ The [[https://codeberg.org/akib/emacs-eat][Emulate a Terminal]] project provides
#+begin_src emacs-lisp :tangle no
(use-package eat
:after eshell
;; :straight (:repo "https://codeberg.org/akib/emacs-eat")
:ensure t ; (:repo "https://codeberg.org/akib/emacs-eat")
:hook (eshell-load . eat-eshell-visual-command-mode))
#+end_src
@ -1787,7 +1787,8 @@ Sometimes you need to change something about the current file you are editing...
Here is where we associate all the functions and their hooks with =eshell=, through the magic of =use-package=.
#+begin_src emacs-lisp
(use-package eshell
;; :straight (:type built-in)
:ensure nil
:defer t
:custom (eshell-banner-message '(ha-eshell-banner))
:init
(setq eshell-error-if-no-glob t
@ -1805,6 +1806,8 @@ Here is where we associate all the functions and their hooks with =eshell=, thro
;; Me neither, so this makes it act a bit more shell-like:
eshell-prefer-lisp-functions nil)
(defvar eshell-mode-map (make-keymap) "Keybindings in Eshell")
;; :hook ((eshell-pred-load . ha-eshell-add-predicates))
:bind (("M-!" . eshell-command)
@ -1816,6 +1819,7 @@ Note that the default list to [[elisp:(describe-variable 'eshell-visual-commands
#+begin_src emacs-lisp :tangle no
(use-package eshell
:ensure nil
:config
(add-to-list 'eshell-visual-commands "ssh"))
#+end_src

View file

@ -45,7 +45,7 @@ TODO: Rebind the ~z~ keys
I split the configuration of Evil mode into sections. First, global settings:
#+begin_src emacs-lisp
(use-package evil
:ensure t
:ensure (:wait t)
:init
(setq evil-undo-system 'undo-fu
evil-auto-indent t
@ -350,14 +350,12 @@ I often use the Emacs commands, ~M-t~ and whatnot to exchange words and whatnot,
(setq evil-exchange-key (kbd "gx")
evil-exchange-cancel-key (kbd "gX"))
:general (:states 'normal
"g x" '("exchange" . 'evil-exchange)
"g X" '("cancel exchange" . 'evil-exchange-cancel)
;; What about a "normal mode" binding to regular emacs transpose?
"z w" '("transpose words" . transpose-words)
"z x" '("transpose sexps" . transpose-sexps)
"z k" '("transpose lines" . transpose-lines))
:config
(define-key evil-normal-state-map (kbd "g x") '("exchange" . evil-exchange))
(define-key evil-normal-state-map (kbd "g X") '("cancel exchange" . evil-exchange-cancel))
(define-key evil-normal-state-map (kbd "z w") '("transpose words" . transpose-words))
(define-key evil-normal-state-map (kbd "z x") '("transpose sexps" . transpose-sexps))
(define-key evil-normal-state-map (kbd "z k") '("transpose lines" . transpose-lines))
:config (evil-exchange-install))
#+end_src
@ -384,28 +382,30 @@ The [[https://github.com/edkolev/evil-lion][evil-lion]] package is a wrapper aro
#+begin_src emacs-lisp
(use-package evil-lion
:after evil
:general
(:states '(normal visual)
"g a" '("lion ←" . evil-lion-left)
"g A" '("lion →" . evil-lion-right)))
:config
(define-key evil-normal-state-map (kbd "g a") '("lion ←" . evil-lion-left))
(define-key evil-normal-state-map (kbd "g A") '("lion →" . evil-lion-right)))
#+end_src
Lion sounds like /align/ … get it?
Where I like to align, is on variable assignments, e.g.
#+begin_src emacs-lisp :tangle no
(let ((foobar "Something something")
(a 42)
(very-long-var "odd string"))
;;
Where I like to align, is on variable assignments, for instance, converting the code on the left with the code on the right:
#+begin_example
(let ((foobar "Something") (let ((foobar "Something")
⫾ (a 42) ⇒ (a 42)
(very-long-var "odd string")) (very-long-var "odd string")
;; ...
)
#+end_src
#+end_example
When the point is /inside/ the variable assignment section, but not inside any particular assignment (see the ⫾ character), typing ~g a i x~ triggers =align= /inside an s-expression/. If you press ~RETURN~ for the /character/ to align, =evil-lion= package calls the built-in [[help:align][align]] function. This function chooses a regular expression based on a list of /rules/, and aligning Lisp variables requires a complicated regular expression. Extend [[elisp:(describe-variable 'align-rules-list)][align-rules-list]]:
If you press ~RETURN~ for the /character/ to align, =evil-lion= package simply calls the built-in [[help:align][align]] function. This function chooses a regular expression based on a list of /rules/, and aligning Lisp variables requires a complicated regular expression. Extend [[elisp:(describe-variable 'align-rules-list)][align-rules-list]]:
#+begin_src emacs-lisp
(use-package align
:ensure nil
:config
(add-to-list 'align-rules-list
`("lisp-assignments"
`(lisp-assignments
(regexp . ,(rx (group (one-or-more space))
(or
(seq "\"" (zero-or-more any) "\"")
@ -419,13 +419,10 @@ The [[https://github.com/linktohack/evil-commentary][evil-commentary]] is a VI-l
#+begin_src emacs-lisp
(use-package evil-commentary
:config (evil-commentary-mode)
:general
(:states '(normal visual motion operator)
"g c" '("comments" . evil-commentary)
"g y" '("yank comment" . evil-commentary-yank)))
:after evil
:config (evil-commentary-mode))
#+end_src
** Evil Collection
Dropping into Emacs state is better than pure Evil state for applications, however, [[https://github.com/emacs-evil/evil-collection][the evil-collection package]] creates a hybrid between the two, that I like.
@ -459,7 +456,6 @@ I like both [[https://github.com/emacs-evil/evil-surround][evil-surround]] and H
#+begin_src emacs-lisp
(use-package evil-surround
:ensure t
:config
(defun evil-surround-elisp ()
(push '(?\` . ("`" . "'")) evil-surround-pairs-alist))

View file

@ -56,6 +56,7 @@ Cant remember all the shortcuts on the ~g~ key, and =which-key= displays the
#+begin_src emacs-lisp :tangle no
(use-package evil
:after general
:general
(:states '(normal visual motion operator)
;; These go into operator mode, so the key sequence, g U i o
@ -118,6 +119,7 @@ Cant remember all the shortcuts on the ~g~ key, and =which-key= displays the
While we are at it, lets readd, and relabel the ~z~ command functions:
#+begin_src emacs-lisp :tangle no
(use-package evil
:after general
:general
(:states '(normal visual motion operator)
"z q" '("fill para" . fill-paragraph)
@ -547,9 +549,10 @@ And put it on the toggle menu:
(ha-leader "t n" '("narrow" . ha-narrow-dwim))
#+end_src
* Window Operations
While it comes with Emacs, I use [[https://www.emacswiki.org/emacs/WinnerMode][winner-mode]] to undo window-related changes:
While it comes with Emacs, I use the built-in [[https://www.emacswiki.org/emacs/WinnerMode][winner-mode]] to undo window-related changes:
#+begin_src emacs-lisp
(use-package winner
:ensure nil
:custom
(winner-dont-bind-my-keys t)
:config
@ -757,6 +760,8 @@ Ways to search for information goes under the ~s~ key. The venerable sage has al
Install the [[https://github.com/dajva/rg.el][rg]] package, which builds on the internal =grep= system, and creates a =*rg*= window with =compilation= mode, so ~C-j~ and ~C-k~ will move and show the results by loading those files.
#+begin_src emacs-lisp
(use-package transient)
(use-package rg
:config
;; Make an interesting Magit-like menu of options, which I don't use much:
@ -881,6 +886,8 @@ Remember these keys in the *Help* buffer:
Let's make Info behave a little more VI-like:
#+begin_src emacs-lisp
(use-package info
:ensure nil
:after general
:general
(:states 'normal :keymaps 'Info-mode-map
"B" 'Info-bookmark-jump

View file

@ -27,22 +27,20 @@ A literate programming file for publishing my website using org.
* Introduction
While the Emacs community have a plethora of options for generating a static website from org-formatted files, I keep my pretty simple, and use the standard =org-publish= feature.
The RSS needs UUIDs:
The RSS needs UUIDs using the [[https://github.com/emacsmirror/uuidgen][uuidgen project]].:
#+BEGIN_SRC emacs-lisp results silent
(use-package uuidgen
;; :straight (:host github :repo "emacsmirror/uuidgen"))
(use-package uuidgen)
(defun org-icalendar-create-uid (&rest ignored)
"Returns a UUID."
(uuidgen-1))
#+END_SRC
While the following packages come with Emacs, they aren't necessarily loaded:
While the following packages come with Emacs, they aren't necessarily loaded, as [[https://github.com/emacsmirror/ox-rss][ox-rss]] has it own package:
#+begin_src emacs-lisp :results silent
(use-package ox-rss
;; :straight (:host github :repo "emacsmirror/ox-rss"))
(use-package ox-rss)
(use-package org
:config
@ -64,7 +62,7 @@ Render my code with my font colors:
Also, we need Jack, and his HTML prowess:
#+begin_src emacs-lisp
(use-package jack
;; :straight (:host github :repo "tonyaldon/jack")
;; :ensure (:host github :repo "tonyaldon/jack")
:commands (jack-html))
#+end_src

View file

@ -110,7 +110,7 @@ The variable, =org-hide-emphasis-markers=, is key to pretending that Emacs can b
#+begin_src emacs-lisp
(use-package org-appear
:ensure (:type git :host github :repo "awth13/org-appear")
:ensure t ; (:host github :repo "awth13/org-appear")
:init (setq org-appear-trigger 'manual)
:hook
((org-mode . (lambda ()
@ -331,7 +331,7 @@ The [[https://github.com/minad/org-modern][org-modern]] project attempts to do a
#+begin_src emacs-lisp
(use-package org-modern
:ensure (:host github :repo "minad/org-modern")
:ensure t ; (:host github :repo "minad/org-modern")
:after org
:hook ((org-mode . org-modern-mode)
(org-agenda-finalize . org-modern-agenda))
@ -365,9 +365,10 @@ According to an idea by [[https://jft.home.blog/2019/07/17/use-unicode-symbol-to
#+end_src
* Padding
The [[https://github.com/TonCherAmi/org-padding][org-padding]] project looks places extra space before and after headers and blocks (essentially leading), to create a more word-processor-y experience. Great idea, however, I have spent a lot of extra time entering blank lines before and after my headers and blocks:
#+begin_src emacs-lisp
#+begin_src emacs-lisp :tangle no
(use-package org-padding
:ensure (:host github :repo "TonCherAmi/org-padding")
:ensure t ; (:host github :repo "TonCherAmi/org-padding")
:vc (:url "https://github.com/TonCherAmi/org-padding.git")
:hook (org-mode . org-padding-mode)
:config
(setq org-padding-block-begin-line-padding '(0.5 . 0.3)

View file

@ -3,7 +3,7 @@
#+date: 2020-09-18
#+tags: emacs org
#+startup: inlineimages
#+lastmod: [2025-09-09 Tue]
#+lastmod: [2025-09-11 Thu]
A literate programming file for configuring org-mode and those files.
@ -31,9 +31,10 @@ A literate programming file for configuring org-mode and those files.
Org is a /large/ complex beast with a gazillion settings, so I discuss these later in this document.
#+begin_src emacs-lisp :noweb yes
(use-package org
:ensure t
:ensure nil
:after general
;; TODO: Using the latest org-mode
;; ;; :straight (:type built-in)
;; :ensure t
:mode (("\\.org" . org-mode))
:init
<<variables>>
@ -279,7 +280,7 @@ Came up with a great way to search a project for Org-specific files, and wrote [
#+begin_src emacs-lisp
(use-package org-find-file
;; :straight nil
:ensure nil
:config
(ha-leader "f o" '("load org" . org-find-file)))
#+end_src
@ -445,7 +446,6 @@ Using the [[https://graphviz.org/][graphviz project]], create charts with /textu
#+begin_src emacs-lisp
(use-package graphviz-dot-mode
:ensure t
:mode "\\.dot\\'"
:init
(setq graphviz-dot-indent-width 2
@ -492,7 +492,7 @@ Need to install and configure Emacs to work with [[https://plantuml.com/][PlantU
After installing the [[https://github.com/skuro/plantuml-mode][plantuml-mode]], we need to reference the location:
#+begin_src emacs-lisp
(use-package plantuml-mode
;; :straight (:host github :repo "skuro/plantuml-mode")
;; :ensure (:host github :repo "skuro/plantuml-mode")
:init
(setq org-plantuml-jar-path (expand-file-name "~/bin/plantuml.jar")))
#+end_src
@ -545,8 +545,8 @@ Of course, since we are dealing with Emacs, where we assimilate any good idea. J
#+begin_src emacs-lisp
(use-package pikchr-mode
;; :straight (:local-repo "~/src/pikchr-mode")
;; :straight (:host github :repo "kljohann/pikchr-mode")
:load-path "~/src/pikchr-mode"
;; :ensure (:host github :repo "kljohann/pikchr-mode")
:custom
(pikchr-executable "~/bin/pikchr"))
#+end_src
@ -734,7 +734,7 @@ I have a special version of tweaked [[file:elisp/ox-confluence.el][Confluence ex
#+begin_src emacs-lisp
(use-package ox-confluence
:after org
;; :straight nil ; Located in my "elisp" directory
:ensure nil ; Located in my "elisp" directory
:config
(ha-leader :keymaps 'org-mode-map
"o E" '("to confluence" . ox-export-to-confluence)))
@ -745,7 +745,7 @@ I have a special version of tweaked [[file:elisp/ox-confluence.el][Confluence ex
Im not afraid of HTML, but I like the idea of doing my HTML work in a Lisp-like way using the [[https://github.com/tonyaldon/jack][jack-html project]]:
#+begin_src emacs-lisp
(use-package jack
;; :straight (:host github :repo "tonyaldon/jack")
;; :ensure (:host github :repo "tonyaldon/jack")
:commands (jack-html))
#+end_src
@ -802,7 +802,7 @@ I've been working on my own [[http://www.howardism.org/Technical/Emacs/focused-w
(use-package async)
(use-package ha-focus
;; :straight (:type built-in)
:ensure nil
:config
(ha-leader
"o f" '("begin focus" . ha-focus-begin)
@ -830,6 +830,32 @@ In general, /fill/ the list, by moving the point to the /end/ of some word, and
The idea is that you can correct a typo /and remember/ it. Perhaps calling [[help:edit-abbrevs][edit-abbrevs]] to making any fixes to that list.
*** Flyspell
The venerable flyspell, built into Emacs.
#+BEGIN_SRC emacs-lisp
(use-package flyspell
:ensure nil
:hook ((text-mode . flyspell-mode))
:config
(defun ha-spell-last ()
"Automatically correct the last spelling mistake."
(interactive)
(save-excursion
(flyspell-goto-next-error t)
(flyspell-auto-correct-word)))
:bind (("s-;" . 'ha-spell-last)
(:map flyspell-mouse-map
([down-mouse-3] . 'flyspell-correct-word)
([mouse-3] . 'undefined))))
#+END_SRC
- ~M-t~ (=flyspell-auto-correct-word=) - press this while in word with typo in it to trigger auto-correct. You can press it repeatedly to cycle through the list of candidates.
- ~C-,~ (=flyspell-goto-next-error=) - go to the next typo in the current buffer
- ~C-.~ (=flyspell-auto-correct-word=) - same as =M-t=
- ~C-;~ (=flyspell-auto-correct-previous-word=) - automatically correct the last misspelled word. (you can cycle here as well)
*** jinx
Once upon a time, I used [[https://www.emacswiki.org/emacs/FlySpell][flyspell]] mode to highlight the misspelled words, and the venerable [[https://www.emacswiki.org/emacs/InteractiveSpell][ispell]] for correcting. To be able to correct spelling mistakes /from a distance/, without navigation, I wrote a function that took advantage of Evils [[help:evil-prev-flyspell-error][evil-prev-flyspell-error]] to jump back to the last spelling mistake.
@ -851,10 +877,9 @@ And on Linux:
And the Emacs interface to that:
#+begin_src emacs-lisp
#+begin_src emacs-lisp :tangle no
(use-package jinx
:ensure t
;; :straight (:host github :repo "minad/jinx" :files (:defaults "jinx-mod.c" "emacs-module.h"))
;; :ensure (:host github :repo "minad/jinx" :files (:defaults "jinx-mod.c" "emacs-module.h"))
:hook (emacs-startup . global-jinx-mode)
:bind (("C-;" . jinx-correct-nearest)
("s-;" . jinx-correct-nearest)
@ -1056,7 +1081,6 @@ Another flycheck feature is to use [[http://languagetool.org][LanguageTool]] con
#+BEGIN_SRC emacs-lisp :tangle no
(use-package flycheck-languagetool
:ensure t
:hook (text-mode . flycheck-languagetool-setup)
:init
(setq flycheck-languagetool-server-jar (expand-file-name "/opt/homebrew/Cellar/languagetool/6.6/libexec/languagetool-commandline.jar")
@ -1253,7 +1277,7 @@ The [[https://github.com/rnkn/olivetti][olivetti project]] sets wide margins and
Trying out [[https://protesilaos.com/][Protesilaos Stavrou]]s [[https://protesilaos.com/emacs/logos][logos project]] as a replacement for [[https://github.com/joostkremers/writeroom-mode][Writeroom-mode]]:
#+begin_src emacs-lisp
(use-package logos
;; :straight (:host gitlab :repo "protesilaos/logos")
;; :ensure (:host gitlab :repo "protesilaos/logos")
:init
(setq logos-outlines-are-pages t
logos-outline-regexp-alist

View file

@ -35,7 +35,7 @@ The obvious keybindings are ~M-h/j/k/l~ … but that is used … well, somewhat.
#+begin_src emacs-lisp :tangle no
(use-package spatial-navigate
;; :straight (:repo "https://codeberg.org/ideasman42/emacs-spatial-navigate")
;; :ensure (:repo "https://codeberg.org/ideasman42/emacs-spatial-navigate")
:config
(pretty-hydra-define spatial-navigate (:color amaranth :quit-key "q")
("Box"
@ -62,7 +62,7 @@ The [[https://github.com/antonj/Highlight-Indentation-for-Emacs][Highlight-Inden
#+begin_src emacs-lisp
(use-package highlight-indentation
;; :straight (:host github :repo "antonj/Highlight-Indentation-for-Emacs")
;; :ensure (:host github :repo "antonj/Highlight-Indentation-for-Emacs")
:hook ((yaml-mode . highlight-indentation-mode)
(python-mode . highlight-indentation-mode)))
#+end_src
@ -119,7 +119,7 @@ Allow this mode in Org blocks:
And we hook
#+begin_src emacs-lisp
(use-package yaml-pro
;; :straight (:host github :repo "zkry/yaml-pro")
;; :ensure (:host github :repo "zkry/yaml-pro")
:after yaml-mode
:hook ((yaml-mode . yaml-pro-mode)))
#+end_src
@ -224,7 +224,7 @@ Do I consider all YAML files an Ansible file needing [[https://github.com/k1LoW/
#+begin_src emacs-lisp
(use-package ansible
;; :straight (:host gitlab :repo "emacs-ansible/emacs-ansible")
;; :ensure (:host gitlab :repo "emacs-ansible/emacs-ansible")
;; :mode ((rx (or "playbooks" "roles") (one-or-more any) ".y" (optional "a") "ml") . ansible-mode)
:config
(setq ansible-vault-password-file "~/.ansible-vault-passfile")
@ -242,7 +242,7 @@ Since most Ansible files are a combination of YAML and Jinja, the [[https://gith
#+BEGIN_SRC emacs-lisp
(use-package poly-ansible
;; :straight (:host github :repo "emacsmirror/poly-ansible")
;; :ensure (:host github :repo "emacsmirror/poly-ansible")
:after ansible)
#+END_SRC

View file

@ -247,7 +247,7 @@ The /real problem/ is trying to remember all the [[https://github.com/clojure-em
And of course, we want to put this with org blocks:
#+begin_src emacs-lisp
(use-package ob-clojure
;; :straight (:type built-in)
:ensure nil
:custom
(org-babel-clojure-backend 'cider)
:config

View file

@ -78,6 +78,7 @@ Wilfreds [[https://github.com/Wilfred/suggest.el][suggest]] function helps yo
Wilfreds [[https://github.com/Wilfred/elisp-def][elisp-def]] project does a better job at jumping to the definition of a symbol at the point, so:
#+begin_src emacs-lisp
(use-package elisp-def
:ensure t ; (:repo "https://github.com/Wilfred/elisp-def")
:hook (emacs-lisp-mode . elisp-def-mode))
#+end_src
This /should work/ with [[help:evil-goto-definition][evil-goto-defintion]], as that calls this list from [[help:evil-goto-definition-functions][evil-goto-definition-functions]]:
@ -127,7 +128,6 @@ My primary use-case is for its refactoring and other unique features. For instan
#+begin_src emacs-lisp
(use-package lispy
:ensure t
:config
(when (fboundp 'evil-define-key)
(evil-define-key '(normal visual) lispyville-mode-map
@ -188,7 +188,6 @@ Use the ~>~ key to /slurp/ in outside objects into the current expression… in
#+begin_src emacs-lisp
(when (fboundp 'evil-define-key)
(use-package lispyville
:ensure t
:after lispy
:hook ((emacs-lisp-mode lisp-mode) . lispyville-mode)))
#+end_src
@ -197,7 +196,6 @@ Now we need to define additional key movements:
#+begin_src emacs-lisp
(when (fboundp 'evil-define-key)
(use-package lispyville
:ensure t
:after lispy
:config
(lispyville-set-key-theme '(operators atom-movement
@ -284,8 +282,11 @@ These are all good, but the primary keys I need to figure out, are the s-express
** Refactoring
Wilfreds [[https://github.com/Wilfred/emacs-refactor/tree/master#elisp][emacs-refactor]] package can be helpful if you turn on =context-menu-mode= and …
#+begin_src emacs-lisp
(use-package iedit)
(use-package emr
;; ;; :straight (:host github :repo "Wilfred/emacs-refactor")
;; :ensure (:host github :repo "Wilfred/emacs-refactor")
:after iedit
:config
(pretty-hydra-define+ lisp-refactor nil
("To 𝛌"
@ -315,7 +316,6 @@ The idea of stealing some of Clojure Modes refactoring is brilliant (see [[ht
The [[https://github.com/xiongtx/eros][eros]] package stands for Evaluation Result OverlayS for Emacs Lisp, and basically shows what each s-expression is near the cursor position instead of in the mini-buffer at the bottom of the window.
#+begin_src emacs-lisp
(use-package eros
:ensure t
:hook (emacs-lisp-mode . eros-mode))
#+end_src

View file

@ -60,7 +60,7 @@ The [[https://github.com/mihaimaruseac/hindent][hindent package]] looks interest
* Haskell and Org
#+begin_src emacs-lisp
(use-package ob-haskell
;; :straight (:type built-in)
:ensure nil
:config
(add-to-list 'org-babel-load-languages '(haskell . t)))
#+end_src

View file

@ -57,7 +57,7 @@ The [[https://www.nongnu.org/geiser/][geiser project]] attempts to be the interf
Do we need a Scheme work for Org Babel? According to [[https://orgmode.org/worg/org-contrib/babel/languages/ob-doc-scheme.html][this document]], we just need to make sure we add the =:session= variable to start the REPL.
#+begin_src emacs-lisp
(use-package ob-scheme
;; :straight (:type built-in)
:ensure nil
:config
(add-to-list 'org-babel-load-languages '(scheme . t)))
@ -103,7 +103,7 @@ Lets get the book available as an Info page:
Still having difficulty getting the Scheme REPL to output the results back into this document. Lets try Racket...
Normally, I would just [[info:SICP][read the book]], however, if we want to read the [[file:~/.emacs.d/straight/build/sicp/sicp.info][sicp.info]] file, we need this, at least, temporarily:
Seems that to read the [[file:~/.emacs.d/straight/build/sicp/sicp.info][sicp.info]] file, we need this, at least, temporarily:
#+begin_src emacs-lisp
(add-to-list 'auto-mode-alist '("\\.info\\'" . Info-mode))
#+end_src
@ -122,7 +122,7 @@ While Racket, as a Scheme, should work with Geiser (below), lets also get [[h
Can we get Racket working with Org?
#+begin_src emacs-lisp
(use-package ob-racket
;; :straight (:host github :repo "DEADB17/ob-racket")
;; :ensure (:host github :repo "DEADB17/ob-racket")
:after org
:config
(add-to-list 'org-babel-load-languages '(racket . t)))

View file

@ -47,6 +47,7 @@ For all programming languages, I would like to now default to absolute line numb
#+begin_src emacs-lisp
(use-package emacs
:ensure nil
:config
(defun ha-prog-mode-config ()
"Configure the `prog-mode'"
@ -58,7 +59,7 @@ For all programming languages, I would like to now default to absolute line numb
While Emacs has options for viewing and moving around code, sometimes, we could /collapse/ all functions, and then start to expand them one at a time. For this, we could enable the built-in [[https://www.emacswiki.org/emacs/HideShow][hide-show feature]]:
#+begin_src emacs-lisp :tangle no
(use-package hide-show
;; :straight (:type built-in)
:ensure nil
:init
(setq hs-hide-comments t
hs-hide-initial-comment-block t
@ -68,7 +69,6 @@ While Emacs has options for viewing and moving around code, sometimes, we could
Note that =hide-show= doesnt work with complex YAML files. The [[https://github.com/gregsexton/origami.el][origami]] mode works better /out-of-the-box/, as it works with Python and Lisp, but falls back to indents as the format, which works well.
#+begin_src emacs-lisp
(use-package origami
:ensure t
:init
(setq origami-fold-replacement "⤵")
:hook (prog-mode . origami-mode))
@ -85,7 +85,7 @@ Note: Yes, we could use [[https://github.com/mrkkrp/vimish-fold][vimish-fold]] (
We need to make sure we keep the [[https://github.com/Fuco1/smartparens][smartparens]] project always in /strict mode/, because who wants to worry about paren-matching:
#+begin_src emacs-lisp
(use-package smartparens
:ensure (:wait t)
:ensure t ;; (:wait t)
:custom
(smartparens-global-strict-mode t)
@ -111,7 +111,7 @@ I appreciate calling =hi-lock-face-symbol-at-point= (or =highlight-symbol-at-poi
#+begin_src emacs-lisp
(use-package auto-highlight-symbol
:ensure (:wait t)
:ensure (:wait t)
:config
(setq ahs-idle-interval 0.1)
@ -125,7 +125,7 @@ Instead of calling =global-auto-highlight-symbol-mode=, we should just hook it t
#+begin_src emacs-lisp
(use-package auto-highlight-symbol
:ensure (:wait t)
:ensure (:wait t)
:hook ((prog-mode . auto-highlight-symbol-mode)))
#+end_src
@ -209,6 +209,7 @@ The [[https://www.emacswiki.org/emacs/FlySpell#h5o-2][flyspell-prog-mode]] check
#+begin_src emacs-lisp
(use-package flyspell
:ensure nil
:hook (prog-mode . flyspell-prog-mode))
#+end_src
** Linting with Flycheck
@ -216,7 +217,7 @@ Why use [[https://www.flycheck.org/][flycheck]] over the built-in =flymake=? Spe
#+begin_src emacs-lisp
(use-package flycheck
;; :straight (:host github :repo "flycheck/flycheck")
;; :ensure (:host github :repo "flycheck/flycheck")
:init
(setq next-error-message-highlight t)
:bind (:map flycheck-error-list-mode-map
@ -401,10 +402,10 @@ In most cases,the =npm install= /usually/ works, but I may work on some sort of
At this point, we can now parse stuff using: =tree-sitter parse <source-code-file>=
**** Emacs Part
However, Emacs already has the ability to download and install grammars, so following instructions from Mickey Petersens essay on [[https://www.masteringemacs.org/article/combobulate-structured-movement-editing-treesitter][using Tree-sitter with Combobulate]]:
#+begin_src emacs-lisp
#+begin_src emacs-lisp tangle no
(when (treesit-available-p)
(use-package treesit
;; :straight (:type built-in)
:ensure nil
:preface
(setq treesit-language-source-alist
'(;; (bash "https://github.com/tree-sitter/tree-sitter-bash")
@ -426,7 +427,7 @@ However, Emacs already has the ability to download and install grammars, so foll
;; (html "https://github.com/tree-sitter/tree-sitter-html")
;; (java "https://github.com/tree-sitter/tree-sitter-java" "master" "src")
;; (javascript "https://github.com/tree-sitter/tree-sitter-javascript" "master" "src")
(json "https://github.com/tree-sitter/tree-sitter-json")
;; (json "https://github.com/tree-sitter/tree-sitter-json")
;; (julia "https://github.com/tree-sitter/tree-sitter-julia" "master" "src")
;; (lua "https://github.com/MunifTanjim/tree-sitter-lua" "main" "src")
;; (make "https://github.com/alemuller/tree-sitter-make")
@ -481,10 +482,10 @@ And enable the languages:
#+end_src
*** Combobulate
I like [[file:ha-programming-elisp.org::*Clever Parenthesis][Clever Parenthesis]], but can we extend that to other languages generally? After reading Mickey Petersens essay, [[https://www.masteringemacs.org/article/combobulate-structured-movement-editing-treesitter][Combobulate project]], I decided to try out his [[https://github.com/mickeynp/combobulate][combobulate package]]. Of course, this can only work with the underlying tooling supplied by the [[https://emacs-tree-sitter.github.io/][Tree Sitter]] →
#+begin_src emacs-lisp
#+begin_src emacs-lisp :tangle no
(when (treesit-available-p)
(use-package combobulate
;; :straight (:host github :repo "mickeynp/combobulate")
:ensure t ; (:host github :repo "mickeynp/combobulate")
:after treesit
:hook ((yaml-ts-mode . combobulate-mode)
;; (css-ts-mode . combobulate-mode)
@ -495,9 +496,11 @@ I like [[file:ha-programming-elisp.org::*Clever Parenthesis][Clever Parenthesis]
#+end_src
Now, I can create an /interface/ of keystrokes to jump around like a boss:
#+begin_src emacs-lisp
#+begin_src emacs-lisp :tangle no
(when (treesit-available-p)
(use-package combobulate
:ensure t ; (:host github :repo "mickeynp/combobulate")
:bind (:map )
:general
(:states 'visual :keymaps 'combobulate-key-map
"o" '("mark node" . combobulate-mark-node-dwim)) ; Mark symbol since "o" doesn't do anything
@ -543,7 +546,7 @@ Now, I can create an /interface/ of keystrokes to jump around like a boss:
Mickeys interface is the [[help:combobulate][combobulate]] function (or ~C-c o o~), but mine is more /evil/.
I can create a /helper function/ to allow me to jump to various types of—well, /types/:
#+begin_src emacs-lisp
#+begin_src emacs-lisp :tangle no
(when (treesit-available-p)
(use-package combobulate
:config
@ -633,6 +636,8 @@ While Im at it, lets connect various ~g~ sequence keys to =xref-= interfac
#+begin_src emacs-lisp
(use-package emacs
:ensure nil
:after general
:general
(:states 'normal
"g ." '("find def" . xref-find-definitions)
@ -734,7 +739,7 @@ The [[https://github.com/emacs-lsp/lsp-ui/blob/master/lsp-ui-imenu.el][lsp-imenu
#+begin_src emacs-lisp :tangle no
(use-package lsp-ui-imenu
;; :straight nil
;; :ensure nil
:after lsp-ui
:config
(ha-local-leader :keymaps 'prog-mode-map
@ -1049,6 +1054,7 @@ Simple to configure languages go here. More advanced languages go into their own
So many configuration files to track:
#+begin_src emacs-lisp
(use-package conf-mode
:ensure nil
:mode (("\\.conf\\'" . conf-space-mode)
("\\.repo\\'" . conf-unix-mode)
("\\.setup.*\\'" . conf-space-mode)))
@ -1250,8 +1256,9 @@ Using [[https://polymode.github.io/][polymode]], lets add syntax coloring to
#+end_src
** ReStructured Text
Support for [[https://docutils.sourceforge.io/rst.html][reStructuredText]] is [[https://www.emacswiki.org/emacs/reStructuredText][well supported]] in Emacs.
#+begin_src emacs-lisp
#+begin_src emacs-lisp :tangle no
(use-package rst
:ensure nil
:config
(when (and (display-graphic-p) (boundp 'ha-fixed-font))
(set-face-attribute 'rst-literal nil :font ha-fixed-font)))
@ -1300,7 +1307,7 @@ While I don't like writing them, I can't get away from them. Check out the goodi
While filename extensions work fine most of the time, I don't like to pre-pend =.sh= to the shell scripts I write, and instead, would like to associate =shell-mode= with all files in a =bin= directory:
#+begin_src emacs-lisp
(use-package sh-mode
;; :straight (:type built-in)
:ensure nil
:mode (rx (or (seq ".sh" eol)
"/bin/"))
:init

View file

@ -28,8 +28,7 @@ A literate configuration for accessing remote systems.
[[https://www.emacswiki.org/emacs/TrampMode][Tramp]] allows almost all Emacs features to execute on a remote system.
#+begin_src emacs-lisp
(use-package tramp
;; :straight (:type built-in)
:ensure nil
:config
;; Use remote PATH on tramp (handy for eshell).
(add-to-list 'tramp-remote-path 'tramp-own-remote-path)
@ -42,7 +41,7 @@ A literate configuration for accessing remote systems.
Will Schenk has [[https://willschenk.com/articles/2020/tramp_tricks/][a simple extension]] to allow editing of files /inside/ a Docker container:
#+begin_src emacs-lisp
(use-package tramp
;; :straight (:type built-in)
:ensure nil
:config
(push '("docker" . ((tramp-login-program "docker")
(tramp-login-args (("exec" "-it") ("%h") ("/bin/sh")))
@ -72,7 +71,7 @@ Which means, I need to put it as a link in an org file.
#+begin_src emacs-lisp
(use-package tramp-sh
:after tramp
;; :straight (:type built-in)
:ensure nil
:custom (tramp-use-ssh-controlmaster-options nil))
#+end_src
* Remote Terminals
@ -159,12 +158,6 @@ While not as fast as [[https://github.com/akermu/emacs-libvterm][vterm]], the [[
#+BEGIN_SRC emacs-lisp :tangle no
(use-package eat
;; :straight (:host codeberg :repo "akib/emacs-eat"
:files ("*.el" ("term" "term/*.el") "*.texi"
"*.ti" ("terminfo/e" "terminfo/efo/e/*")
("terminfo/65" "terminfo/65/*")
("integration" "integration/*")
(:exclude ".dir-locals.el" "*-tests.el")))
:commands (eat eat-make eat-project)
:bind (:map eat-semi-char-mode-map
("C-c C-t" . ha-eat-narrow-to-shell-prompt-dwim))

View file

@ -98,6 +98,8 @@ cat > "$HAMACS_DEST/init.el" <<EOF
(add-to-list 'package-archives
'("elpa-dev" . "https://elpa.gnu.org/devel/"))
(setq use-package-always-ensure t)
;; Configure Elpaca https://github.com/progfolio/elpaca
(defvar elpaca-installer-version 0.11)
@ -118,7 +120,7 @@ cat > "$HAMACS_DEST/init.el" <<EOF
(when (<= emacs-major-version 28) (require 'subr-x))
(condition-case-unless-debug err
(if-let* ((buffer (pop-to-buffer-same-window "*elpaca-bootstrap*"))
((zerop (apply #'call-process `("git" nil ,buffer t "clone"
((zerop (apply #'call-process \`("git" nil ,buffer t "clone"
,@(when-let* ((depth (plist-get order :depth)))
(list (format "--depth=%d" depth) "--no-single-branch"))
,(plist-get order :repo) ,repo))))
@ -137,7 +139,7 @@ cat > "$HAMACS_DEST/init.el" <<EOF
(elpaca-generate-autoloads "elpaca" repo)
(let ((load-source-file-function nil)) (load "./elpaca-autoloads"))))
(add-hook 'after-init-hook #'elpaca-process-queues)
(elpaca `(,@elpaca-order))
(elpaca \`(,@elpaca-order))
;; Install use-package support
(elpaca elpaca-use-package