diff --git a/early-init.el b/early-init.el index 7ef45db..8979151 100644 --- a/early-init.el +++ b/early-init.el @@ -7,8 +7,8 @@ ;; ;; it is possible there are more so probably the most recent one is the one to use. -(setq elpaca-core-date "20240727") -(defvar elpaca-installer-version 0.7) +(setq elpaca-core-date "20241111") +(defvar elpaca-installer-version 0.8) (defvar elpaca-directory (expand-file-name "elpaca/" user-emacs-directory)) (defvar elpaca-builds-directory (expand-file-name "builds/" elpaca-directory)) (defvar elpaca-repos-directory (expand-file-name "repos/" elpaca-directory)) @@ -25,9 +25,9 @@ (make-directory repo t) (when (< emacs-major-version 28) (require 'subr-x)) (condition-case-unless-debug err - (if-let ((buffer (pop-to-buffer-same-window "*elpaca-bootstrap*")) + (if-let* ((buffer (pop-to-buffer-same-window "*elpaca-bootstrap*")) ((zerop (apply #'call-process `("git" nil ,buffer t "clone" - ,@(when-let ((depth (plist-get order :depth))) + ,@(when-let* ((depth (plist-get order :depth))) (list (format "--depth=%d" depth) "--no-single-branch")) ,(plist-get order :repo) ,repo)))) ((zerop (call-process "git" nil buffer t "checkout" diff --git a/init.org b/init.org index 3bfd40d..5b1496c 100644 --- a/init.org +++ b/init.org @@ -699,29 +699,37 @@ whether to put it under writing, comms or programming as it is equally #+BEGIN_SRC emacs-lisp (use-package llm :ensure t - :commands (llm-chat llm-ask-about llm-ask-line llm-ask-selection) - ) + :commands (llm-chat llm-ask-about llm-ask-line llm-ask-selection)) +#+END_SRC + +#+BEGIN_SRC emacs-lisp (use-package llm-openai :ensure nil - :commands (make-llm-openai) - :after llm) - ;; enable LLM access with ellama + :requires llm + :commands (make-llm-openai)) +#+END_SRC + + +#+BEGIN_SRC emacs-lisp (use-package ellama :ensure t + :requires (llm llm-openai) :commands (ellama-chat ellama-ask-about ellama-ask-line ellama-ask-selection) :custom (ellama-language "English") - (ellama-keymap-prefix "a") (ellama-provider - (make-llm-openai - :key (auth-source-pass-get 'secret "snamellit/openai-api-key") - :chat-model "gpt-4o" - )) + (make-llm-openai + :key (auth-source-pass-get 'secret "snamellit/openai-api-key") + :chat-model "gpt-4o" + )) (ellama-sessions-directory (expand-file-name "~/Nextcloud/ellama-sessions")) - :config - (report-time-since-load "Ellama is available")) + :bind-keymap + ("C-c e" . ellama-command-map)) #+END_SRC +#+RESULTS: +: [nil 26420 49222 463525 nil elpaca-process-queues nil nil 237000 nil] + It seems the *gpt-4o* model provides better responses. I should investigate local models more. @@ -1322,7 +1330,7 @@ Here is a snapshot of the keybindings dd <2024-07-30 Tue>. #+BEGIN_SRC emacs-lisp ;; configure support for google calendar (use-package org-gcal - :ensure t + ;; :ensure t :custom (org-gcal-client-id (auth-source-pass-get 'secret "snamellit/org-gcal-client")) (org-gcal-client-secret (auth-source-pass-get "id" "snamellit/org-gcal-client")) @@ -1846,8 +1854,10 @@ see also [[https://www.masteringemacs.org/article/how-to-get-started-tree-sitter #+BEGIN_SRC emacs-lisp ;; Lisp support + (use-package package-lint-flymake) ;; needed before activating lisp-interaction-mode-hook (use-package paredit :ensure nil + :after package-lint-flymake :commands (enable-paredit-mode) :init (dolist (mode '(emacs-lisp-mode-hook @@ -1885,6 +1895,18 @@ no arguments. In Emacs 23.2 and newer, it takes one argument." "Git commit 222b791") #+END_SRC +**** Rainbow Parentheses + +#+BEGIN_SRC emacs-lisp + (use-package rainbow-delimiters + :ensure t + :commands (rainbow-delimiters-mode) + :hook + (prog-mode . rainbow-delimiters-mode)) +#+END_SRC + +#+RESULTS: +: [nil 26418 38138 672360 nil elpaca-process-queues nil nil 82000 nil] **** Enable Geiser Mode in Scheme Mode @@ -1909,6 +1931,42 @@ Configure Geiser and Scheme #+RESULTS: | evil-paredit-mode | geiser-mode | enable-paredit-mode | aggressive-indent-mode | geiser-mode--maybe-activate | +**** Allow saving of an SBCL images + +When trying to call `(save-lisp-and-die #p"somefile")` , sbcl will +throw an error that it cannot comply when multiple threads are active. + +For each project using this you need to define some helper function to +stop the repl threads before saving the image like the following: + +#+BEGIN_SRC emacs-lisp :tangle no +(defun sbcl-save-sly-and-die () + "Save a sbcl image, even when running from inside Sly. +This function should only be used in the *inferior-buffer* buffer, +inside emacs." + (mapcar #'(lambda (x) + (slynk::close-connection + x nil nil)) + slynk::*connections*) + (dolist (thread (remove + (slynk-backend::current-thread) + (slynk-backend::all-threads))) + (slynk-backend::kill-thread thread)) + (sleep 1) + (sb-ext:save-lisp-and-die #P"~/your-main-program.exe" + :toplevel #'your-main-function-here + :executable t + :compression t)) +#+END_SRC + +This function has to be called in the *sly-inferior-lisp* + +#+BEGIN_SRC emacs-lisp :tangle no +;; in *sly-inferior-lisp* buffer +(sbcl-save-sly-and-die) +#+END_SRC + + *** Terraform Support #+BEGIN_SRC emacs-lisp ;; configure terraform support @@ -2124,7 +2182,7 @@ the moment. ** ERC configuration Set up ERC, an IRC client for Emacs, to automatically join specific channels and log in: -#+BEGIN_SRC emacs-lisp +#+BEGIN_SRC emacs-lisp :tangle no (use-package erc :ensure t :defer 5 @@ -2158,7 +2216,7 @@ reconnects after suspend, and sometimes it even works, but mostly I run this function again to reconnect, which will update the buffers with the rooms I joined. -#+BEGIN_SRC emacs-lisp +#+BEGIN_SRC emacs-lisp :tangle no (defun snam-erc () "Login to znc bouncer and join rooms." (interactive) @@ -2187,7 +2245,10 @@ fail. I dunno, there is something fishy here... I like to have my IRC channels on workspace 5 in *i3*. -#+BEGIN_SRC emacs-lisp +This is no longer useful : I seldom use i3, but it is useful for +inspiration + +#+BEGIN_SRC emacs-lisp :tangle no (defun my-erc () "Create new frame and move to ws5 and launch erc." (interactive) @@ -2208,6 +2269,33 @@ I like to have my IRC channels on workspace 5 in *i3*. : my-erc +** rcirc configuration + +#+BEGIN_SRC emacs-lisp + (use-package rcirc + + :config + (setopt rcirc-server-alist + (let ((data (auth-source-pass-parse-entry "snamellit/znc"))) + `((,(auth-source-pass--get-attr "server" data) + :port ,(auth-source-pass--get-attr "port" data) + :encryption tls + :server-alias "znc" + :nick ,(auth-source-pass--get-attr "nick" data) + :user-name ,(concat (auth-source-pass--get-attr "user" data) "@" (system-name)) + :password ,(auth-source-pass--get-attr 'secret data) + :channels '("#emacs" "#erc" "#spritely" "#guix" "#systemcrafters" "#systemcrafters-guix" "#systemcrafters-emacs"))))) + (setopt rcirc-reconnect-delay 15) + (setopt rcirc-dim-nicks '("Marvin2")) + (setopt rcirc-bright-nicks '("daviwil" "benoitj" "Fade" "trev" "shom" "alternateved" "dthompson")) + (rcirc-track-minor-mode)) + +#+END_SRC + +#+RESULTS: +: t + + ** Elfeed configuration Configures Elfeed, an RSS feed reader for Emacs: #+BEGIN_SRC emacs-lisp