diff --git a/.gitignore b/.gitignore index 57d81da..a1d668e 100644 --- a/.gitignore +++ b/.gitignore @@ -25,6 +25,8 @@ ac-comphist.dat /speed-type /tutorial /tree-sitter +emacs.keyfreq +ielm-history.eld # Ignore actual init as it can contain private data init.el diff --git a/lisp/icejam-copilot.el b/lisp/icejam-aider.el similarity index 62% rename from lisp/icejam-copilot.el rename to lisp/icejam-aider.el index 895a8f1..fcb8a36 100644 --- a/lisp/icejam-copilot.el +++ b/lisp/icejam-aider.el @@ -1,4 +1,4 @@ -;;; icejam-copilot.el --- summary +;;; icejam-aider.el --- summary ;; Author: Maciej Szlosarczyk ;; Maintainer: Maciej Szlosarczyk @@ -40,16 +40,29 @@ ;; Pretend to be 'AI editor' vol 1. Before usage make sure aider is installed: ;; $ pip install aider-install ;; $ aider install -(use-package aider :ensure (:host github :repo "tninja/aider.el" :files ("aider.el")) +;; (use-package aider :ensure (:host github :repo "tninja/aider.el") +;; :defer t +;; :config +;; ;; (setenv "OLLAMA_API_BASE" "http://127.0.0.1:11434") +;; (setenv "OLLAMA_API_BASE" "http://192.168.88.110:11434") +;; (setopt aider-args (list "--model" +;; "ollama_chat/deepseek-r1:32b" +;; "--no-auto-commits" +;; "--no-analytics" +;; "--no-gitignore"))) + +(use-package aidermacs :ensure (:host github :repo "MatthewZMD/aidermacs") :defer t :config ;; (setenv "OLLAMA_API_BASE" "http://127.0.0.1:11434") - (setenv "OLLAMA_API_BASE" "http://192.168.88.110:11434") - (setopt aider-args (list "--model" - "ollama_chat/deepseek-r1:32b" - "--no-auto-commits" - "--no-analytics" - "--no-gitignore"))) + (setenv "OLLAMA_API_BASE" "http://192.168.88.13:11434") + (setopt aidermacs-use-architect-mode t) + (setopt aidermacs-default-model "ollama_chat/qwen2.5-coder:32b") + (setopt aider-extra-args (list "--model" + "ollama_chat/qwen2.5-coder:32b" + "--no-auto-commits" + "--no-analytics" + "--no-gitignore"))) ;; Pretend to be 'AI editor' vol 2. (use-package elysium :ensure t :defer t @@ -64,5 +77,5 @@ (use-package smerge-mode :ensure nil :hook ((prog-mode . smerge-mode))) -(provide 'icejam-copilot) -;;; icejam-copilot.el ends here +(provide 'icejam-aider) +;;; icejam-aider.el ends here diff --git a/lisp/icejam-base.el b/lisp/icejam-base.el index c17a0d9..4490d66 100644 --- a/lisp/icejam-base.el +++ b/lisp/icejam-base.el @@ -31,6 +31,9 @@ ;; quickly self-correct. (setopt fast-but-imprecise-scrolling t) +;; Trust local folder +(setopt trusted-content '("~/.emacs.d/" "~/Development/")) + ;;;;;;;;; TRAMP configuration ;;;;;;;;;;;;;;;; (use-package tramp :ensure nil :defer 5 :config @@ -75,7 +78,9 @@ (dolist (mode '(prog-mode-hook text-mode-hook conf-mode-hook)) - (add-hook mode 'display-line-numbers-mode)) + (add-hook mode 'display-line-numbers-mode) + ;; Highlight current line. + (add-hook mode 'hl-line-mode)) ;; (global-display-line-numbers-mode t) (column-number-mode t) @@ -140,10 +145,12 @@ ;;;;;;;;;;;;;;;;; Record frequency of different commands. Review them later (use-package keyfreq :ensure t :defer t :hook ((elpaca-after-init . keyfreq-mode) - (elpaca-after-init . keyfreq-autosave-mode))) + (elpaca-after-init . keyfreq-autosave-mode)) + :config + (setopt keyfreq-file (concat user-emacs-directory "emacs.keyfreq"))) ;;;;;;;;;;;;;;;;; Show hints about key combinations -(use-package which-key :ensure t :defer t +(use-package which-key :ensure nil :defer t :hook ((elpaca-after-init . which-key-mode)) :config (setopt which-key-idle-delay 0.2)) diff --git a/lisp/icejam-complete-at-point.el b/lisp/icejam-complete-at-point.el index fdd1e25..37981c5 100644 --- a/lisp/icejam-complete-at-point.el +++ b/lisp/icejam-complete-at-point.el @@ -24,14 +24,18 @@ corfu-right-margin-width 0.5 corfu-left-margin-width 0.5 corfu-bar-width 0.5 - corfu-auto-delay 0.1 ;; Do not insert when you type a word that happens to be a ;; completion candidate. A typical example is `format`, which ;; is a yas snippet. - corfu-on-exact-match 'nil + corfu-on-exact-match 'quit + corfu-quit-at-boundary t corfu-popupinfo-delay '(0.4 . 0.2) corfu-auto t - corfu-quit-no-match 'separator)) + corfu-auto-delay 0.8 + corfu-quit-no-match 'separator + + ;; Invoke completion with tab when needed. + tab-always-indent 'complete)) ;; Allow corfu to work in terminal (use-package corfu-terminal :ensure t :defer t diff --git a/lisp/icejam-custom-init.el b/lisp/icejam-custom-init.el index 0d7c62d..3674913 100644 --- a/lisp/icejam-custom-init.el +++ b/lisp/icejam-custom-init.el @@ -23,7 +23,7 @@ ;; (setopt max-lisp-eval-depth 10000) ;;; Use elpaca for package management. -(defvar elpaca-installer-version 0.9) +(defvar elpaca-installer-version 0.11) (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)) @@ -100,7 +100,7 @@ (use-package icejam-transient :ensure nil) (use-package icejam-prog-mode :ensure nil) (use-package icejam-complete-at-point :ensure nil) -(use-package icejam-copilot :ensure nil) +(use-package icejam-aider :ensure nil) (use-package icejam-flycheck :ensure nil) (use-package icejam-ispell :ensure nil) (use-package icejam-deft :ensure nil) diff --git a/lisp/icejam-flycheck.el b/lisp/icejam-flycheck.el index a73ef44..525284c 100644 --- a/lisp/icejam-flycheck.el +++ b/lisp/icejam-flycheck.el @@ -10,6 +10,47 @@ '(emacs-lisp emacs-lisp-checkdoc emacs-lisp-package sh-shellcheck)))) +(declare-function flymake--project-diagnostics-buffer 'flymake) +(declare-function flymake--diagnostics-buffer-name 'flymake) +(declare-function flymake-project-diagnostics-mode 'flymake) +(declare-function flymake-diagnostics-buffer-mode 'flymake) + +(use-package el-patch :ensure t :defer t + :config + ;; Show the diagnostics from flymake in a second window (usually on the + ;; opposite side from this one) instead of at the bottom of the current one. + ;; Essentially revert the interesting part of this commit: + ;; https://github.com/emacs-mirror/emacs/commit/419550c7907275bf962986e1cc8fba1989d8659c + (el-patch-feature 'flymake) + (with-eval-after-load 'flymake + (el-patch-defun flymake-show-project-diagnostics () + "Show a list of Flymake diagnostics for the current project." + (interactive) + (let* ((prj (project-current)) + (root (project-root prj)) + (buffer (flymake--project-diagnostics-buffer root))) + (with-current-buffer buffer + (flymake-project-diagnostics-mode) + (setq-local flymake--project-diagnostic-list-project prj) + (display-buffer (current-buffer)) + (revert-buffer)))) + + (el-patch-defun flymake-show-buffer-diagnostics () + "Show a list of Flymake diagnostics for current buffer." + (interactive) + (unless flymake-mode + (user-error "Flymake mode is not enabled in the current buffer")) + (let* ((name (flymake--diagnostics-buffer-name)) + (source (current-buffer)) + (target (or (get-buffer name) + (with-current-buffer (get-buffer-create name) + (flymake-diagnostics-buffer-mode) + (current-buffer))))) + (with-current-buffer target + (setq flymake--diagnostics-buffer-source source) + (display-buffer (current-buffer)) + (revert-buffer)))))) + ;; Use flymake, the built in linter/checker. (use-package flymake :ensure nil :defer t diff --git a/lisp/icejam-keys-mode.el b/lisp/icejam-keys-mode.el index abf15f6..6c223da 100644 --- a/lisp/icejam-keys-mode.el +++ b/lisp/icejam-keys-mode.el @@ -26,6 +26,10 @@ ;; Splitting window (keymap-set icejam-keys-mode-map "C-c \\" #'split-window-right) (keymap-set icejam-keys-mode-map "C-c /" #'split-window-below) +(keymap-set icejam-keys-mode-map "C-c \"" #'split-window-right) +(keymap-set icejam-keys-mode-map "C-c %" #'split-window-below) +(keymap-set icejam-keys-mode-map "C-c '" #'split-window-right) +(keymap-set icejam-keys-mode-map "C-c 5" #'split-window-below) ;; Move between windows (keymap-set icejam-keys-mode-map "C-c " #'windmove-left) diff --git a/lisp/icejam-themes.el b/lisp/icejam-themes.el index 1d7743d..2574a13 100644 --- a/lisp/icejam-themes.el +++ b/lisp/icejam-themes.el @@ -3,31 +3,20 @@ ;;; Code: (use-package spaceline :ensure t - :hook ((elpaca-after-init . spaceline-emacs-theme))) + :hook ((elpaca-after-init . spaceline-emacs-theme)) + :config + ;; Recompile spaceline after each theme has been reloaded to ensure + ;; that there are no artifacts instead of arrows on the screen. + (setopt enable-theme-functions 'spaceline-compile)) -(use-package base16-theme :ensure t - ;; :config - ;; (load-theme 'base16-atelier-forest-light t t) - ;; (load-theme 'base16-harmonic16-light t t) - ;; (load-theme 'base16-horizon-light t t) - ;; (load-theme 'base16-humanoid-light t t) - ;; (load-theme 'base16-zenburn t) - ;; (load-theme 'base16-tomorrow-night-eighties t t) - ;; (load-theme 'base16-darcula t t) - ;; (load-theme 'base16-solarflare t t) - ;; (load-theme 'base16-snazzy t t) - ;; (load-theme 'base16-onedark t t) - ;; (load-theme 'base16-gruvbox-dark-hard t t) - ;; (load-theme 'modus-vivendi t t) - ;; (load-theme 'base16-zenbones t t) - ) +(use-package base16-theme :ensure t) ;; (use-package apropospriate-theme :ensure t ;; :config (load-theme 'apropospriate-light t t)) ;; (use-package leuven-theme :ensure t ;; :config ;; (load-theme 'leuven t t)) -;; (use-package modus-themes :ensure t ) +(use-package modus-themes :ensure t) ;; (use-package darktooth-theme :ensure t ;; :config ;; (load-theme 'darktooth t t)) @@ -53,10 +42,16 @@ ;; Disable cursor blinking (blink-cursor-mode 0) +;; Scroll with the trackpad smoothly +(pixel-scroll-precision-mode 1) + ;; My own theme modifications: (with-eval-after-load 'base16-theme (setopt base16-theme-256-color-source 'colors) + (load-theme 'base16-equilibrium-light t t) (load-theme 'base16-gruvbox-dark-pale t t) + (load-theme 'base16-onedark t t) + (load-theme 'modus-operandi-tinted t t) (require 'icejam-base16-zenburn) (require 'icejam-base16-harmonic-light) (require 'icejam-base16-catppuccin-latte) diff --git a/lisp/icejam-transient.el b/lisp/icejam-transient.el index 7dfa0d0..7994260 100644 --- a/lisp/icejam-transient.el +++ b/lisp/icejam-transient.el @@ -43,7 +43,7 @@ ("i" "Indent" indent-region)]] [["Complete" ("g" "Ask GPTel" gptel-menu) - ("a" "Aider" aider-transient-menu) + ("a" "Aider" aidermacs-transient-menu) ("e" "Refactor with Elysium" elysium-query)]] [["Find" ("s" "Swiper" consult-line) @@ -70,6 +70,8 @@ ("l" "Line" avy-goto-line) ("c" "Character" avy-goto-char-2)] ["Split" + ("sr" "To right" split-window-right) + ("sb" "To bottom" split-window-below) ("\\" "To right" split-window-right) ("/" "To bottom" split-window-below)]] [["Buffers" diff --git a/lisp/langs/icejam-lang-elisp.el b/lisp/langs/icejam-lang-elisp.el index 380dc7e..513a829 100644 --- a/lisp/langs/icejam-lang-elisp.el +++ b/lisp/langs/icejam-lang-elisp.el @@ -10,6 +10,7 @@ (add-to-list 'auto-mode-alist '("/Eask\\'" . emacs-lisp-mode)) (use-package lispy :ensure t :defer t :commands (lispy-mode)) +;; (use-package geiser-guile :ensure t :defer t) (defun icejam-activate-emacs-lisp-mode () "Goodies for editing Emacs files." diff --git a/lisp/langs/icejam-lang-elixir.el b/lisp/langs/icejam-lang-elixir.el index 79e208d..2916f51 100644 --- a/lisp/langs/icejam-lang-elixir.el +++ b/lisp/langs/icejam-lang-elixir.el @@ -13,7 +13,7 @@ (defvar icejam-language-transient-alist) (defvar apheleia-mode-alist)) -(use-package elixir-ts-mode :ensure t :defer t :after (apheleia lsp-mode lsp-ui) +(use-package elixir-ts-mode :ensure t :defer t :after (apheleia) :config (add-to-list 'apheleia-mode-alist '(heex-ts-mode . mix-format))) diff --git a/lisp/langs/icejam-lang-python.el b/lisp/langs/icejam-lang-python.el index 4d2108d..9820660 100644 --- a/lisp/langs/icejam-lang-python.el +++ b/lisp/langs/icejam-lang-python.el @@ -4,7 +4,11 @@ (declare-function icejam-set-lsp-capfs 'icejam-complete-at-point) (declare-function lsp 'lsp-mode) (declare-function column-enforce-n "column-enforce-mode" (number)) -(eval-when-compile (defvar icejam-language-transient-alist)) +(declare-function transient-define-prefix 'transient) + +(eval-when-compile + (defvar icejam-language-transient-alist) + (defvar icejam-python-lang-menu)) (transient-define-prefix icejam-python-lang-menu () "Python Buffer Commands." diff --git a/lisp/themes/icejam-base16-not-harmonic.el b/lisp/themes/icejam-base16-not-harmonic.el index 8d3706d..38a8c62 100644 --- a/lisp/themes/icejam-base16-not-harmonic.el +++ b/lisp/themes/icejam-base16-not-harmonic.el @@ -5,7 +5,7 @@ ;; Based on harmonic-dark theme by Jannik Seibert (https://github.com/janniks) ;;; Code: -(use-package base16-theme :ensure t :defer t) +(use-package icejam-themes :ensure nil) (defvar base16-not-harmonic-colors '(:base00 "#102941" @@ -30,6 +30,7 @@ (deftheme base16-not-harmonic) ;; Add all the faces to the theme +(declare-function base16-theme-define 'base16-theme) (base16-theme-define 'base16-not-harmonic base16-not-harmonic-colors) ;; Customise things diff --git a/lisp/themes/icejam-base16-summerfruit-light.el b/lisp/themes/icejam-base16-summerfruit-light.el index 05dee52..5842e72 100644 --- a/lisp/themes/icejam-base16-summerfruit-light.el +++ b/lisp/themes/icejam-base16-summerfruit-light.el @@ -7,7 +7,7 @@ ;;; Code: -(use-package base16-theme :ensure t :defer t) +(use-package icejam-themes :ensure nil) (defvar base16-summerfruit-light-modified-colors '(:base00 "#fdfcfa" @@ -32,6 +32,7 @@ (deftheme base16-summerfruit-light-modified) ;; Add all the faces to the theme +(declare-function base16-theme-define 'base16-theme) (base16-theme-define 'base16-summerfruit-light-modified base16-summerfruit-light-modified-colors) ;; Mark the theme as provided