├── .pre-commit-config.yaml ├── .dir-locals.el ├── lisp ├── ca-shell.el ├── ca-all.el ├── ca-mobile.el ├── ca-devops.el ├── ca-sql.el ├── ca-writing.el ├── ca-web.el ├── aliases.el ├── ca-treesit.el ├── ca-ai.el ├── ca-git.el ├── ca-research.el ├── ca-python.el ├── misc.el ├── hacks.el ├── ca-project.el ├── functions.el └── ca-clojure.el ├── README.org ├── .gitignore ├── ejc.el └── ca-init.el /.pre-commit-config.yaml: -------------------------------------------------------------------------------- 1 | repos: 2 | - repo: https://github.com/gitleaks/gitleaks 3 | rev: v8.19.1 4 | hooks: 5 | - id: gitleaks 6 | -------------------------------------------------------------------------------- /.dir-locals.el: -------------------------------------------------------------------------------- 1 | ;;; Directory Local Variables 2 | ;;; See Info node `(emacs) Directory Variables' for more information. 3 | 4 | ((nil . 5 | ((ca-cleanup-is-enabled . t)))) 6 | -------------------------------------------------------------------------------- /lisp/ca-shell.el: -------------------------------------------------------------------------------- 1 | 2 | (use-package vterm 3 | :custom 4 | (vterm-shell "/usr/bin/fish")) 5 | 6 | (use-package shell 7 | :config 8 | (dirtrack-mode t)) 9 | 10 | (use-package company-shell) 11 | 12 | (use-package fish-mode) 13 | 14 | (use-package bats-mode) 15 | 16 | (add-to-list 'exec-path "~/.local/bin") 17 | 18 | (provide 'ca-shell) 19 | -------------------------------------------------------------------------------- /lisp/ca-all.el: -------------------------------------------------------------------------------- 1 | (require 'ca-ai) 2 | (require 'ca-clojure) 3 | (require 'ca-devops) 4 | (require 'ca-git) 5 | (require 'ca-project) 6 | (require 'ca-python) 7 | (require 'ca-research) 8 | (require 'ca-sql) 9 | (require 'ca-treesit) 10 | (require 'ca-web) 11 | (require 'ca-shell) 12 | (require 'ca-writing) 13 | (require 'ca-mobile) 14 | 15 | (provide 'ca-all) 16 | -------------------------------------------------------------------------------- /lisp/ca-mobile.el: -------------------------------------------------------------------------------- 1 | (use-package dart-mode) 2 | 3 | (use-package lsp-dart 4 | :hook (dart-mode . lsp)) 5 | 6 | (use-package cmake-ide) 7 | 8 | (use-package flutter) 9 | 10 | (use-package hover 11 | :after dart-mode 12 | :bind (:map dart-mode-map 13 | ("C-M-z" . #'hover-run-or-hot-reload) 14 | ("C-M-x" . #'hover-run-or-hot-restart))) 15 | 16 | 17 | (provide 'ca-mobile) 18 | -------------------------------------------------------------------------------- /lisp/ca-devops.el: -------------------------------------------------------------------------------- 1 | (use-package company-terraform) 2 | 3 | (use-package kubernetes) 4 | (use-package ssh-tunnels) 5 | (use-package ssh) 6 | (use-package ssh-agency) 7 | (use-package ssh-config-mode) 8 | 9 | (use-package terraform-mode) 10 | 11 | (use-package terraform-doc) 12 | 13 | (use-package docker) 14 | (use-package docker-api) 15 | (use-package docker-cli) 16 | (use-package dockerfile-mode) 17 | (use-package docker-compose-mode) 18 | 19 | (provide 'ca-devops) 20 | -------------------------------------------------------------------------------- /lisp/ca-sql.el: -------------------------------------------------------------------------------- 1 | (use-package sqlite3) 2 | 3 | (use-package sqlformat 4 | :custom 5 | (sqlformat-command 'sqlfluff) 6 | ;; how do we make this smarter? 7 | (sqlformat-args '("--dialect" "mysql")) 8 | :hook (sql-interactive-mode . (lambda () 9 | (toggle-truncate-lines t)))) 10 | 11 | (use-package ob-sql-mode) 12 | (use-package org-sql) 13 | (use-package sql-indent 14 | ;; :hook (sql-mode . sqlind-minor-mode) 15 | ) 16 | 17 | (provide 'ca-sql) 18 | -------------------------------------------------------------------------------- /lisp/ca-writing.el: -------------------------------------------------------------------------------- 1 | (use-package mixed-pitch) 2 | (use-package olivetti) 3 | (use-package markdown-mode 4 | :init 5 | (add-to-list 'auto-mode-alist '("\\.md" . markdown-mode)) 6 | :bind 7 | ("M-" . markdown-promote) 8 | ("M-" . markdown-demote)) 9 | 10 | (use-package writegood-mode 11 | :hook ((markdown-mode nroff-mode org-mode 12 | mail-mode 13 | git-commit-mode) 14 | . writegood-mode)) 15 | 16 | (provide 'ca-writing) 17 | -------------------------------------------------------------------------------- /lisp/ca-web.el: -------------------------------------------------------------------------------- 1 | (use-package graphql) 2 | (use-package graphql-doc) 3 | (use-package graphql-mode) 4 | (use-package ob-graphql) 5 | 6 | (use-package json-mode) 7 | (use-package nodejs-repl) 8 | (use-package biome) 9 | (use-package biomejs-format) 10 | (use-package js-format) 11 | (use-package prettier-js) 12 | 13 | (use-package company-web) 14 | (use-package typescript-mode) 15 | (use-package web-mode) 16 | (use-package emmet-mode 17 | :hook (html-mode . emmet-mode)) 18 | 19 | (use-package lsp-tailwindcss) 20 | 21 | (provide 'ca-web) 22 | -------------------------------------------------------------------------------- /README.org: -------------------------------------------------------------------------------- 1 | #+OPTIONS: toc:nil num:nil 2 | Emacs configuration 3 | 4 | This configuration uses use-package heavily, configured mostly for Clojure development. 5 | 6 | * Usage 7 | To try it out: 8 | - git clone git://github.com/AndreaCrotti/Emacs-configuration.git 9 | - git submodule update init 10 | - create an optional *custom.el* file for your own customization (which is loaded) 11 | - create or modify your *.emacs* in your $HOME with the following: 12 | + (setq base "~/Emacs-Configuration/") 13 | + (load (concat base "ca-init.el")) 14 | -------------------------------------------------------------------------------- /lisp/aliases.el: -------------------------------------------------------------------------------- 1 | (defalias 'bb 'bury-buffer) 2 | (defalias 'bu 'browse-url) 3 | (defalias 'dml 'delete-matching-lines) 4 | (defalias 'eb 'eval-buffer) 5 | (defalias 'elm 'emacs-lisp-mode) 6 | (defalias 'er 'eval-region) 7 | (defalias 'll 'load-library) 8 | (defalias 'qrs 'query-replace-regexp) 9 | (defalias 'qs 'query-replace) 10 | (defalias 'rb 'revert-buffer) 11 | (defalias 'rs 'replace-string) 12 | (defalias 'sh 'shell) 13 | (defalias 'ws 'whitespace-mode) 14 | (defalias 'yes-or-no-p 'y-or-n-p) 15 | (defalias 'ys 'yas/reload-all) 16 | (defalias 'yv 'yas/visit-snippet-file) 17 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | .bzr 2 | *.elc 3 | auctex 4 | conf.el 5 | *~ 6 | *defs.el 7 | .svn 8 | .hg 9 | /python-mode.el-6.1.3/ 10 | /modules/flycheck_*.el 11 | custom.el 12 | /.nrepl-port 13 | /.cache/ 14 | /.clj-kondo/ 15 | /.lsp/ 16 | /.persistent-scratch 17 | /elpa/ 18 | /epkgs/ 19 | /eln-cache/ 20 | /chatgpt/ 21 | /bookmarks 22 | /eshell/ 23 | /org-roam.db 24 | /projectile-bookmarks.eld 25 | /projectile.cache 26 | /quelpa/ 27 | /forge-database-v10-20231211-1541.sqlite 28 | /forge-database-v11-20240202-0912.sqlite 29 | /forge-database-v9-20231009-1544.sqlite 30 | /forge-database.sqlite 31 | /.mc-lists.el 32 | /.dap-breakpoints 33 | /straight/ 34 | /transient/ 35 | /url/ 36 | /tree-sitter/ 37 | /recentf 38 | /org-persist/ 39 | /request/ 40 | /history 41 | .aider* 42 | -------------------------------------------------------------------------------- /lisp/ca-treesit.el: -------------------------------------------------------------------------------- 1 | (use-package tree-sitter) 2 | (use-package tree-sitter-langs) 3 | (use-package tree-sitter-indent) 4 | 5 | (use-package treesit-auto 6 | :custom 7 | (treesit-auto-install 'prompt) 8 | :config 9 | (treesit-auto-add-to-auto-mode-alist 'all) 10 | (global-treesit-auto-mode t)) 11 | 12 | ;; (use-package combobulate 13 | ;; :custom 14 | ;; ;; You can customize Combobulate's key prefix here. 15 | ;; ;; Note that you may have to restart Emacs for this to take effect! 16 | ;; (combobulate-key-prefix "C-c o") 17 | ;; :hook ((prog-mode . combobulate-mode)) 18 | ;; ;; Amend this to the directory where you keep Combobulate's source 19 | ;; ;; code. 20 | ;; ;;TODO: make sure this actually exists somewhere 21 | ;; :load-path ("~/src/forks/combobulate/")) 22 | 23 | (provide 'ca-treesit) 24 | -------------------------------------------------------------------------------- /lisp/ca-ai.el: -------------------------------------------------------------------------------- 1 | (use-package gptel 2 | :custom 3 | (gptel-default-mode #'org-mode)) 4 | 5 | (use-package org-ai) 6 | 7 | (use-package aider 8 | :config 9 | ;; For latest claude sonnet model 10 | (setq aider-args '("--model" "sonnet" "--no-auto-accept-architect")) 11 | (setenv "ANTHROPIC_API_KEY" anthropic-key) 12 | ;; Optional: Set a key binding for the transient menu 13 | (global-set-key (kbd "C-c a") 'aider-transient-menu) ;; for wider screen 14 | (aider-magit-setup-transients)) 15 | 16 | (use-package aidermacs 17 | :bind (("C-c b" . aidermacs-transient-menu)) 18 | :config 19 | (setenv "ANTHROPIC_API_KEY" anthropic-key) 20 | :custom 21 | ; See the Configuration section below 22 | (aidermacs-use-architect-mode t) 23 | (aidermacs-default-model "sonnet")) 24 | 25 | (use-package aider) 26 | 27 | (provide 'ca-ai) 28 | -------------------------------------------------------------------------------- /lisp/ca-git.el: -------------------------------------------------------------------------------- 1 | 2 | (use-package github-browse-file) 3 | (use-package gist) 4 | (use-package git-modes) 5 | (use-package git-auto-commit-mode 6 | :custom 7 | (gac-debounce-interval 0.5)) 8 | 9 | (use-package git-timemachine) 10 | (use-package gitconfig) 11 | 12 | (use-package forge) 13 | (use-package magit 14 | :after forge 15 | :bind (("\C-xg" . magit-status)) 16 | ;; should we load forge automatically if possible? 17 | :config (require 'forge)) 18 | 19 | (use-package magit-todos 20 | :after magit) 21 | 22 | (use-package magit-delta 23 | ;; :hook (magit-mode . magit-delta-mode) 24 | ) 25 | 26 | (use-package magit-lfs 27 | :after magit) 28 | 29 | (use-package magit-stats 30 | :after magit) 31 | 32 | (use-package magit-annex 33 | :after magit) 34 | 35 | (use-package magit-find-file 36 | :after magit) 37 | 38 | (provide 'ca-git) 39 | -------------------------------------------------------------------------------- /lisp/ca-research.el: -------------------------------------------------------------------------------- 1 | (use-package merlin) 2 | 3 | (use-package haskell-mode) 4 | (use-package lsp-haskell) 5 | (use-package ghci-completion) 6 | 7 | (use-package zig-mode) 8 | 9 | (use-package lua-mode) 10 | 11 | (use-package go-mode 12 | :hook 13 | (go-mode . lsp-go-install-save-hooks)) 14 | 15 | (use-package gorepl-mode 16 | :hook 17 | (go-mode . gorepl-mode)) 18 | 19 | (use-package dune) 20 | (use-package tuareg) 21 | (use-package exercism) 22 | (use-package leetcode) 23 | (use-package erlang) 24 | (use-package flymake-hlint) 25 | (use-package sly) 26 | 27 | (use-package rust-mode 28 | :config 29 | (use-package flycheck-rust 30 | :hook 31 | (flycheck-mode . flycheck-rust-setup)) 32 | 33 | (use-package cargo 34 | :hook 35 | (rust-mode . cargo-minor-mode)) 36 | 37 | (use-package cargo-mode) 38 | 39 | (setq rust-format-on-save t)) 40 | 41 | (use-package ob-rust) 42 | 43 | (use-package kotlin-mode) 44 | (use-package gradle-mode) 45 | (use-package flycheck-gradle) 46 | 47 | (use-package elixir-mode) 48 | (use-package inf-elixir) 49 | (use-package flycheck-elixir) 50 | (use-package mix 51 | :hook 52 | (elixir-mode . mix-mode-hook)) 53 | 54 | (use-package scala-mode 55 | :interpreter 56 | ("scala" . scala-mode)) 57 | 58 | (use-package lsp-metals) 59 | 60 | (provide 'ca-research) 61 | -------------------------------------------------------------------------------- /lisp/ca-python.el: -------------------------------------------------------------------------------- 1 | (setq python-shell-completion-native-enable nil) 2 | 3 | (use-package blacken 4 | :ensure t) 5 | 6 | (use-package python 7 | :bind (:map python-ts-mode-map 8 | ("C-" . python-pytest-run-def-or-class-at-point-dwim)) 9 | 10 | :custom 11 | ;; should use ipython really 12 | (python-shell-interpreter "ipython")) 13 | 14 | (use-package elpy 15 | :config (elpy-enable)) 16 | 17 | (use-package lsp-jedi 18 | :after lsp) 19 | 20 | (use-package lsp-pyright 21 | :after lsp) 22 | 23 | (use-package python-pytest) 24 | 25 | (use-package ruff-format) 26 | 27 | (use-package pet 28 | :config 29 | (add-hook 'python-ts-mode-hook 30 | (lambda () 31 | (setq-local python-shell-interpreter (pet-executable-find "ipython") 32 | python-shell-virtualenv-root (pet-virtualenv-root)) 33 | (setq-local lsp-pyright-python-executable-cmd (pet-executable-find "python") 34 | lsp-pyright-venv-path python-shell-virtualenv-root) 35 | (setq-local dap-python-executable (pet-executable-find "python")) 36 | (setq-local python-pytest-executable (pet-executable-find "pytest")) 37 | (setq-local ruff-format-command (pet-executable-find "ruff")) 38 | (setq-local flycheck-python-mypy-python-executable (pet-executable-find "mypy")) 39 | (ruff-format-on-save-mode t)))) 40 | 41 | (provide 'ca-python) 42 | -------------------------------------------------------------------------------- /lisp/misc.el: -------------------------------------------------------------------------------- 1 | (setq backup-by-copying t ; don't clobber symlinks 2 | backup-directory-alist '(("." . "~/.saves")) ; don't litter my fs tree 3 | delete-old-versions t 4 | kept-new-versions 6 5 | kept-old-versions 2 6 | version-control t 7 | undo-tree-history-directory-alist '(("." . "~/.undo-tree")) 8 | vc-make-backup-files t) ; use versioned backups 9 | 10 | (setq initial-major-mode 'emacs-lisp-mode 11 | inhibit-startup-message t 12 | initial-scratch-message nil 13 | confirm-nonexistent-file-or-buffer nil) 14 | 15 | (setq-default indent-tabs-mode nil) 16 | 17 | (setq visible-bell nil 18 | ring-bell-function 'ignore) ; Turn beep off 19 | 20 | (savehist-mode t) ; save also minibuffer history, very useful 21 | 22 | (global-set-key [f1] 'delete-window) 23 | (global-set-key [f2] 'split-window-horizontally) 24 | 25 | (when (fboundp 'scroll-bar-mode) (scroll-bar-mode -1)) 26 | (when (fboundp 'horizontal-scroll-bar-mode) (horizontal-scroll-bar-mode -1)) 27 | (when (fboundp 'tool-bar-mode) (tool-bar-mode -1)) 28 | (when (fboundp 'menu-bar-mode) (menu-bar-mode -1)) 29 | 30 | (set-fringe-mode 2) 31 | 32 | (global-unset-key (kbd "C-z")) 33 | 34 | ;; set a font with something like 35 | ;; (set-face-attribute 'default nil :font "Fira Code" :height 140) 36 | 37 | (set-default-coding-systems 'utf-8) 38 | 39 | (setq display-time-format "%l:%M %p %b %y" 40 | display-time-default-load-average nil) 41 | 42 | (global-display-line-numbers-mode t) 43 | 44 | (provide 'misc) 45 | -------------------------------------------------------------------------------- /lisp/hacks.el: -------------------------------------------------------------------------------- 1 | ;; hacky changes that should be done directly in the original package 2 | ;; they were in 3 | 4 | 5 | (define-derived-mode wordnut-mode special-mode "WordNut" 6 | "Major mode interface to WordNet lexical database. 7 | Turning on wordnut mode runs the normal hook `wordnut-mode-hook'. 8 | 9 | \\{wordnut-mode-map}" 10 | 11 | (setq-local visual-line-fringe-indicators '(nil top-right-angle)) 12 | (visual-line-mode 1) 13 | 14 | ;; we make a custom imenu index 15 | (setq imenu-generic-expression nil) 16 | (setq-local imenu-create-index-function 'wordnut--imenu-make-index) 17 | (imenu-add-menubar-index) 18 | 19 | (setq font-lock-defaults '(wordnut-font-lock-keywords)) 20 | 21 | ;; if user has adaptive-wrap mode installed, use it 22 | (if (and (fboundp 'adaptive-wrap-prefix-mode) 23 | (boundp 'adaptive-wrap-extra-indent)) 24 | (progn 25 | (setq adaptive-wrap-extra-indent 3) 26 | (adaptive-wrap-prefix-mode 1))) 27 | ;; make the wordnet buffer nicer to use, see: 28 | ;; https://github.com/gromnitsky/wordnut/pull/10 29 | ;; for a PR to the upstream repository 30 | 31 | (setq org-startup-folded nil) 32 | (org-mode) 33 | (view-mode)) 34 | 35 | ;; change the size of markup in asciidoc documents to 36 | ;; something that mmakes more sense 37 | ;; (dolist (i (number-sequence 0 5)) 38 | ;; (let ((new-height (+ 1.0 (/ (- 10.0 i) 20.0)))) 39 | ;; (set-face-attribute 40 | ;; (intern (format "markup-title-%d-face" i)) nil :height new-height))) 41 | 42 | (defun 4k-p () 43 | (> (x-display-pixel-width) 7000)) 44 | 45 | ;; use a different font height depending on resolution 46 | (defun fontify-frame (frame) 47 | (interactive) 48 | (if window-system 49 | (progn 50 | (if (4k-p) 51 | (set-face-attribute 'default frame :font "Fira Code" :height 150) 52 | (set-face-attribute 'default frame :font "Fira Code" :height 120))))) 53 | -------------------------------------------------------------------------------- /lisp/ca-project.el: -------------------------------------------------------------------------------- 1 | (use-package exec-path-from-shell 2 | :config 3 | (exec-path-from-shell-initialize) 4 | (add-to-list 'exec-path-from-shell-variables "LSP_USE_PLISTS")) 5 | 6 | (use-package direnv 7 | :config 8 | (direnv-mode t)) 9 | 10 | (use-package envrc 11 | :hook 12 | (after-init . envrc-global-mode)) 13 | 14 | (use-package all-the-icons) 15 | 16 | (use-package treemacs-icons-dired) 17 | 18 | (setq dired-auto-revert-buffer 1) 19 | (setq dired-isearch-filenames 'dwim) 20 | (setq dired-listing-switches "-al") 21 | 22 | (use-package treemacs-projectile 23 | :after (treemacs projectile)) 24 | 25 | (use-package diredfl 26 | :config 27 | (diredfl-global-mode t)) 28 | 29 | (use-package treemacs-all-the-icons) 30 | 31 | (use-package projectile 32 | :diminish projectile 33 | :config 34 | (projectile-global-mode t) 35 | :bind (("" . projectile-ripgrep) 36 | ("C-" . projectile-replace) 37 | ("" . projectile-find-file) 38 | ("" . projectile-run-vterm) 39 | ("" . projectile-command-map) 40 | :map projectile-mode-map 41 | ("s-d" . projectile-find-dir) 42 | ("s-p" . projectile-switch-project) 43 | ("s-f" . projectile-find-file) 44 | ("s-a" . projectile-ag)) 45 | :custom 46 | (projectile-completion-system 'default) 47 | (projectile-switch-project-action #'projectile-find-file)) 48 | 49 | 50 | (use-package treemacs 51 | :after (projectile) 52 | :custom 53 | (treemacs-resize-icons 10) 54 | (treemacs-filewatch-mode t) 55 | (treemacs-follow-mode t) 56 | ;; this keeps on asking the mode otherwise 57 | (treemacs-fringe-indicator-mode nil) 58 | (treemacs-git-commit-diff-mode nil) 59 | (treemacs-git-mode t) 60 | (treemacs-indent-guide-mode t) 61 | (treemacs-project-follow-mode t) 62 | (treemacs-tag-follow-mode nil) 63 | (treemacs-tag-follow-delay 3) 64 | :hook 65 | (treemacs-mode . (lambda () (text-scale-adjust -2)))) 66 | 67 | (provide 'ca-project) 68 | -------------------------------------------------------------------------------- /ejc.el: -------------------------------------------------------------------------------- 1 | ;;-------------------------------------------------------------------- 2 | ;; Emacs SQL client `ejc-sql'. 3 | ;; 4 | (require 'ejc-sql) 5 | 6 | (setq nrepl-sync-request-timeout 60) 7 | (setq clomacs-httpd-default-port 8090) ; Use a port other than 8080. 8 | ;; Allow use any CIDER nREPL not only library dedicated nREPL 9 | ;; (setq clomacs-allow-other-repl t) 10 | 11 | ;; Show results of SQL snippets evaluation in `org-mode' 12 | ;; in dedicated buffer. 13 | (setq ejc-org-mode-show-results nil) 14 | (setq ejc-use-flx t) ; Enable `flx' fuzzy matching. 15 | (setq ejc-completion-system 'standard) 16 | (setq ejc-result-table-impl 'ejc-result-mode) ; Set major-mode for results. 17 | ;; (setq ejc-result-table-impl 'orgtbl-mode) ; Default major-mode for results. 18 | 19 | ;; Since `winner-mode' is enabled and M- keys are used for 20 | ;; windows navigation, so disable this keys for `orgtbl-mode-map'. 21 | (define-key orgtbl-mode-map (kbd "") nil) 22 | (define-key orgtbl-mode-map (kbd "M-") nil) 23 | (define-key orgtbl-mode-map (kbd "M-") nil) 24 | (define-key orgtbl-mode-map (kbd "M-") nil) 25 | (define-key orgtbl-mode-map (kbd "M-") nil) 26 | ;; Use C-M- keys instead. 27 | (define-key orgtbl-mode-map (kbd "C-M-") 'org-table-move-column-left) 28 | (define-key orgtbl-mode-map (kbd "C-M-") 'org-table-move-column-right) 29 | (define-key orgtbl-mode-map (kbd "C-M-") 'org-table-move-row-up) 30 | (define-key orgtbl-mode-map (kbd "C-M-") 'org-table-move-row-down) 31 | ;; Add run SQL key familiar to users of PLSQL Developer. 32 | (define-key ejc-sql-mode-keymap (kbd "") 'ejc-eval-user-sql-at-point) 33 | 34 | (add-hook 'after-init-hook 'k/ejc-after-emacs-init-hook) 35 | 36 | (defun k/sql-mode-hook () 37 | (ejc-sql-mode t)) 38 | 39 | (add-hook 'sql-mode-hook 'k/sql-mode-hook) 40 | 41 | (defun k/ejc-result-mode-hook () 42 | (display-line-numbers-mode)) 43 | 44 | (add-hook 'ejc-result-mode-hook 'k/ejc-result-mode-hook) 45 | 46 | (defun k/ejc-sql-mode-hook () 47 | ;; Enable one of the completion frontend by by default but not both. 48 | (ejc-eldoc-setup) ; Setup ElDoc. 49 | ;; (font-lock-warn-todo) ; See custom/look-and-feel.el 50 | (rainbow-delimiters-mode t) ; https://github.com/Fanael/rainbow-delimiters 51 | (idle-highlight-mode t) ; https://github.com/nonsequitur/idle-highlight-mode 52 | ;;(paredit-everywhere-mode) ; https://github.com/purcell/paredit-everywhere 53 | (electric-pair-mode)) 54 | 55 | (add-hook 'ejc-sql-minor-mode-hook 'k/ejc-sql-mode-hook) 56 | 57 | (defun k/ejc-sql-connected-hook () 58 | (ejc-set-fetch-size 99) ; Limit for the number of records to output. 59 | (ejc-set-max-rows 99) ; Limit for the number of records in ResultSet. 60 | (ejc-set-show-too-many-rows-message t) ; Set output 'Too many rows' message. 61 | (ejc-set-column-width-limit 25) ; Limit for outputing the number of chars per column. 62 | (ejc-set-use-unicode t) ; Use unicode symbols for grid borders. 63 | ) 64 | 65 | (add-hook 'ejc-sql-connected-hook 'k/ejc-sql-connected-hook) 66 | 67 | ;; Load file with actual connections configurations - 68 | ;; `ejc-create-connection' calls. 69 | (require 'ejc-databases nil 'noerror) 70 | 71 | (provide 'ejc-sql-conf) 72 | 73 | ;;; ejc-sql-conf.el ends here 74 | -------------------------------------------------------------------------------- /lisp/functions.el: -------------------------------------------------------------------------------- 1 | (defun ca-next-defun () 2 | (interactive) 3 | (end-of-defun 2) 4 | (beginning-of-defun 1)) 5 | 6 | (defun ca-prev-defun () 7 | (interactive) 8 | (beginning-of-defun)) 9 | 10 | (defun ca-err-switch() 11 | "switch on/off error debugging" 12 | (interactive) 13 | (if debug-on-error 14 | (setq debug-on-error nil) 15 | (setq debug-on-error t)) 16 | (message "debug-on-error now %s" debug-on-error)) 17 | 18 | (defun ca-cleanup-buffer () 19 | "Perform a bunch of operations on the whitespace content of a buffer." 20 | (interactive) 21 | ;; (ca-indent-buffer) 22 | (ca-untabify-buffer) 23 | ;TODO: use whitespace cleanup instead? 24 | (delete-trailing-whitespace)) 25 | 26 | (defun ca-remove-dos-eol () 27 | "Do not show ^M in files containing mixed UNIX and DOS line endings." 28 | (interactive) 29 | (setq buffer-display-table (make-display-table)) 30 | (aset buffer-display-table ?\^M [])) 31 | 32 | ;; TODO: trigger it automatically whenever you are on a data structure?? 33 | (defun get-path () 34 | "Get the path in a certain data structure" 35 | (let (path done) 36 | (save-excursion 37 | (while (not done) 38 | (if (and (sp-backward-sexp) 39 | (save-excursion (sp-backward-up-sexp))) 40 | (progn 41 | (when-let ((thing (thing-at-point 'symbol))) 42 | (push (substring-no-properties thing) path)) 43 | (sp-backward-up-sexp)) 44 | (setq done t)))) 45 | (message "Path: %s" path))) 46 | 47 | (defun file-notify-rm-all-watches () 48 | "Remove all existing file notification watches from Emacs." 49 | (interactive) 50 | (maphash 51 | (lambda (key _value) 52 | (file-notify-rm-watch key)) 53 | file-notify-descriptors)) 54 | 55 | (defun redis-ks () 56 | (interactive) 57 | (let ((buffer (apply #'make-comint-in-buffer 58 | "redis" 59 | redis-process-buffer-name 60 | redis-cli-executable 61 | nil 62 | '("-h" 63 | "localhost" 64 | "-p" 65 | "16378")))) 66 | (with-current-buffer buffer 67 | (redis-cli-mode)) 68 | (pop-to-buffer buffer t))) 69 | 70 | (defun git-blame-line () 71 | "Runs `git blame` on the current line and 72 | adds the commit id to the kill ring" 73 | (interactive) 74 | (let* ((line-number (save-excursion 75 | (goto-char (point-at-bol)) 76 | (+ 1 (count-lines 1 (point))))) 77 | (line-arg (format "%d,%d" line-number line-number)) 78 | (commit-buf (generate-new-buffer "*git-blame-line-commit*"))) 79 | (call-process "git" nil commit-buf nil 80 | "blame" (buffer-file-name) "-L" line-arg) 81 | (let* ((commit-id (with-current-buffer commit-buf 82 | (buffer-substring 1 9))) 83 | (log-buf (generate-new-buffer "*git-blame-line-log*"))) 84 | (kill-new commit-id) 85 | (call-process "git" nil log-buf nil 86 | "log" "-1" "--pretty=%h %an %s" commit-id) 87 | (with-current-buffer log-buf 88 | (message "Line %d: %s" line-number (buffer-string))) 89 | (kill-buffer log-buf)) 90 | (kill-buffer commit-buf))) 91 | 92 | (defun advice-ns-get-selection (original &rest args) 93 | (let* ((actual-string (apply original args)) 94 | (str-length (length actual-string))) 95 | (if (> str-length (* 1024 1024)) 96 | (let ((what-do (yes-or-no-p "The string you copied is > 1MB. Do you really want to do that?"))) 97 | (if what-do 98 | actual-string 99 | "refusing to paste that massive thing")) 100 | actual-string))) 101 | 102 | (advice-add 'ns-get-selection :around 'advice-ns-get-selection) 103 | 104 | (provide 'functions) 105 | -------------------------------------------------------------------------------- /lisp/ca-clojure.el: -------------------------------------------------------------------------------- 1 | (use-package flycheck-clj-kondo) 2 | 3 | (use-package elein) 4 | 5 | (use-package inf-clojure) 6 | 7 | (defhydra lsp-clojure-refactor-menu (:color blue :hint nil) 8 | " 9 | Threading Code Manip Namespace Misc 10 | ------------------------------------------------------------------------------------------------------------------------------------------------------ 11 | _th_: Thread first _el_: Expand let _cn_: Clean ns _cp_: Cycle privacy 12 | _tf_: Thread first all _il_: Introduce let _am_: Add missing libspec _cc_: Cycle coll 13 | _tt_: Thread last _ml_: Move to let 14 | _tl_: Thread last all _ef_: Extract function 15 | _ua_: Unwind all _rn_: Rename 16 | _uw_: Unwind thread _mf_: Move formattedtextfield 17 | " 18 | 19 | ("am" lsp-clojure-add-missing-libspec) 20 | ("cc" lsp-clojure-cycle-coll) 21 | ("cn" lsp-clojure-clean-ns) 22 | ("cp" lsp-clojure-cycle-privacy) 23 | ("ef" lsp-clojure-extract-function) 24 | ("el" lsp-clojure-expand-let) 25 | ("il" lsp-clojure-introduce-let) 26 | ("mf" lsp-clojure-move-form) 27 | ("ml" lsp-clojure-move-to-let) 28 | ("rn" lsp-rename) 29 | ("tf" lsp-clojure-thread-first-all) 30 | ("th" lsp-clojure-thread-first) 31 | ("tl" lsp-clojure-thread-last-all) 32 | ("tt" lsp-clojure-thread-last) 33 | ("ua" lsp-clojure-unwind-all) 34 | ("uw" lsp-clojure-unwind-thread)) 35 | 36 | (use-package kaocha-runner 37 | :bind (:map clojure-mode-map 38 | ("C-c k t" . kaocha-runner-run-test-at-point) 39 | ("C-c k r" . kaocha-runner-run-tests) 40 | ("C-c k a" . kaocha-runner-run-all-tests) 41 | ("C-c k w" . kaocha-runner-show-warnings) 42 | ("C-c k h" . kaocha-runner-hide-windows))) 43 | 44 | (use-package clj-refactor 45 | :custom 46 | (cljr-auto-clean-ns nil) 47 | (cljr-auto-sort-ns nil) 48 | (cljr-add-ns-to-blank-clj-files nil)) 49 | 50 | (defun portal.api/open () 51 | "Open the API portal." 52 | (interactive) 53 | (cider-nrepl-sync-request:eval 54 | "(do (ns dev) (def portal ((requiring-resolve 'portal.api/open) {:theme :portal.colors/solarized-dark})) (add-tap (requiring-resolve 'portal.api/submit)))")) 55 | 56 | (defun portal.api/clear () 57 | "Clear the state of the portal." 58 | (interactive) 59 | (cider-nrepl-sync-request:eval "(portal.api/clear)")) 60 | 61 | (defun portal.api/close () 62 | "Close the portal." 63 | (interactive) 64 | (cider-nrepl-sync-request:eval "(portal.api/close)")) 65 | 66 | (use-package cider 67 | :pin melpa-stable 68 | :hook (cider-mode . clj-refactor-mode) 69 | :diminish subword-mode 70 | :bind (:map clojure-mode-map 71 | ("C-" . cider-test-run-test)) 72 | 73 | ;; add this when the syntax is fixed 74 | ;; :hook 75 | ;; (lambda () 76 | ;; (add-to-list 77 | ;; 'completion-at-point-functions 78 | ;; #'cape-cider-lsp)) 79 | 80 | :custom 81 | (cider-auto-test-mode t) 82 | (cider-enrich-classpath t) 83 | (cider-font-lock-dynamically '(macro core function var)) 84 | (cider-ns-code-reload-tool 'clj-reload) 85 | (cider-overlays-use-font-lock t) 86 | (cider-prompt-for-symbol nil) 87 | (cider-repl-buffer-size-limit 100000) 88 | (cider-repl-display-help-banner nil) 89 | (cider-repl-display-in-current-window nil) 90 | (cider-repl-display-output-before-window-boundaries nil) 91 | (cider-repl-pop-to-buffer-on-connect 'display-only) 92 | (cider-repl-prompt-function 'cider-repl-prompt-abbreviated) 93 | (cider-repl-require-ns-on-set nil) 94 | (cider-repl-tab-command #'indent-for-tab-command) 95 | (cider-repl-use-clojure-font-lock t) 96 | (cider-repl-use-pretty-printing t) 97 | (nrepl-hide-special-buffers t) 98 | (nrepl-log-messages t)) 99 | 100 | (use-package cider-decompile) 101 | (use-package clj-decompiler) 102 | 103 | (use-package babashka) 104 | 105 | (use-package neil 106 | :custom 107 | (neil-inject-dep-to-project-p t)) 108 | 109 | (use-package cider-hydra 110 | :after cider 111 | :hook 112 | (clojure-mode . cider-hydra-mode)) 113 | 114 | (use-package kibit-helper) 115 | (use-package clojure-mode 116 | :mode (("\\.clj\\'" . clojure-mode) 117 | ("\\.edn\\'" . clojure-mode)) 118 | :bind 119 | (("C-c l" . lsp-clojure-refactor-menu/body)) 120 | :hook 121 | (clojure-mode . subword-mode) 122 | :init 123 | (add-to-list 'auto-mode-alist '("\\.bb" . clojure-mode))) 124 | 125 | ;; not working for some reason with font-locking 126 | ;; (use-package clojure-ts-mode) 127 | 128 | (use-package clojure-mode-extra-font-locking) 129 | (use-package jet) 130 | (use-package ob-clojurescript) 131 | (require 'ob-clojure) 132 | 133 | (defun clerk-show () 134 | "Show clerk." 135 | (interactive) 136 | (when-let 137 | ((filename 138 | (buffer-file-name))) 139 | (save-buffer) 140 | (cider-interactive-eval 141 | (concat "(nextjournal.clerk/show! \"" filename "\")")))) 142 | 143 | (define-key clojure-mode-map (kbd "") 'clerk-show) 144 | 145 | (provide 'ca-clojure) 146 | -------------------------------------------------------------------------------- /ca-init.el: -------------------------------------------------------------------------------- 1 | ;; -*- lexical-binding: t -*- 2 | (setq base (expand-file-name "~/Emacs-Configuration/lisp/")) 3 | (add-to-list 'load-path base) 4 | (setq package-enable-at-startup nil) 5 | 6 | (defvar bootstrap-version) 7 | 8 | (setq use-package-always-ensure nil) 9 | (setq gc-cons-threshold (* 50 1000 1000)) 10 | 11 | (setq native-comp-jit-compilation t 12 | native-comp-async-query-on-exit t 13 | native-comp-async-jobs-number 4 14 | native-comp-async-report-warnings-errors nil) 15 | 16 | (add-hook 'emacs-startup-hook 17 | (lambda () 18 | (message "*** Emacs loaded in %s with %d garbage collections." 19 | (format "%.2f seconds" 20 | (float-time 21 | (time-subtract after-init-time before-init-time))) 22 | gcs-done))) 23 | 24 | (setq package-archives 25 | '(("org" . "https://orgmode.org/elpa/") 26 | ("melpa" . "http://melpa.org/packages/") 27 | ("nongnu" . "https://elpa.nongnu.org/nongnu/") 28 | ("gnu" . "http://elpa.gnu.org/packages/") 29 | ("melpa-stable" . "https://stable.melpa.org/packages/"))) 30 | 31 | (eval-when-compile (require 'cl)) 32 | 33 | (defun make-relative-path 34 | (filename) 35 | "Create a relative path" 36 | (concat base filename)) 37 | 38 | (require 'package) 39 | 40 | (setq custom-safe-themes t) 41 | (require 'functions) 42 | (require 'misc) 43 | 44 | (require 'use-package) 45 | (use-package use-package-hydra) 46 | (use-package major-mode-hydra) 47 | (use-package pretty-hydra) 48 | (use-package async) 49 | 50 | (defhydra ca-lsp-refactor-menu (:color blue :hint nil) 51 | " 52 | _rn_: Rename 53 | " 54 | ("rn" lsp-rename)) 55 | 56 | (use-package ack) 57 | (use-package adoc-mode 58 | :init 59 | (add-to-list 'auto-mode-alist (cons "\\.adoc\\'" 'adoc-mode)) 60 | (add-to-list 'auto-mode-alist (cons "\\.txt\\'" 'adoc-mode)) 61 | :config 62 | (setq-local outline-regexp "[=]+")) 63 | 64 | (use-package ag) 65 | ;; (use-package auto-highlight-symbol) 66 | (use-package autorevert 67 | :custom 68 | (auto-revert-interval 2) 69 | :config 70 | (global-auto-revert-mode t)) 71 | 72 | (use-package log4j-mode 73 | :hook 74 | (log4j-mode . auto-revert-tail-mode)) 75 | 76 | (use-package beacon 77 | :config 78 | (beacon-mode t) 79 | :custom 80 | (beacon-blink-duration 0.5)) 81 | 82 | (use-package bf-mode) 83 | 84 | (use-package browse-at-remote) 85 | (use-package browse-kill-ring 86 | :config 87 | (browse-kill-ring-default-keybindings)) 88 | 89 | (use-package command-log-mode) 90 | 91 | (use-package ess) 92 | 93 | (use-package csv-mode) 94 | (use-package dap-mode 95 | :hook 96 | (lsp-mode . dap-mode) 97 | (lsp-mode . dap-ui-mode)) 98 | 99 | (use-package dape 100 | :preface 101 | ;; By default dape shares the same keybinding prefix as `gud' 102 | ;; If you do not want to use any prefix, set it to nil. 103 | (setq dape-key-prefix "\C-x\C-a") 104 | 105 | :hook 106 | ;; Save breakpoints on quit 107 | (kill-emacs . dape-breakpoint-save) 108 | ;; Load breakpoints on startup 109 | (after-init . dape-breakpoint-load) 110 | 111 | :config 112 | ;; Turn on global bindings for setting breakpoints with mouse 113 | (dape-breakpoint-global-mode) 114 | 115 | ;; Info buffers to the right 116 | (setq dape-buffer-window-arrangement 'right) 117 | 118 | ;; Info buffers like gud (gdb-mi) 119 | (setq dape-buffer-window-arrangement 'gud) 120 | (setq dape-info-hide-mode-line nil) 121 | 122 | ;; Pulse source line (performance hit) 123 | ;; (add-hook 'dape-display-source-hook 'pulse-momentary-highlight-one-line) 124 | 125 | ;; Showing inlay hints 126 | (setq dape-inlay-hints t) 127 | 128 | ;; Save buffers on startup, useful for interpreted languages 129 | (add-hook 'dape-start-hook (lambda () (save-some-buffers t t))) 130 | 131 | ;; Kill compile buffer on build success 132 | (add-hook 'dape-compile-hook 'kill-buffer) 133 | 134 | ;; Projectile users 135 | (setq dape-cwd-fn 'projectile-project-root) 136 | ) 137 | 138 | ;; Enable repeat mode for more ergonomic `dape' use 139 | (use-package repeat 140 | :config 141 | (repeat-mode t)) 142 | 143 | (use-package hl-todo 144 | :config (global-hl-todo-mode t)) 145 | 146 | (use-package diminish) 147 | (use-package dracula-theme) 148 | (use-package eldoc 149 | :diminish eldoc-mode 150 | :config (global-eldoc-mode t)) 151 | 152 | (use-package ediff 153 | :custom 154 | (ediff-diff-options "-w") 155 | (ediff-split-window-function (quote split-window-vertically)) 156 | (ediff-window-setup-function (quote ediff-setup-windows-plain))) 157 | 158 | (use-package expand-region 159 | :bind ("C-=" . er/expand-region)) 160 | 161 | (use-package find-file-in-repository) 162 | (use-package flycheck 163 | :config (global-flycheck-mode t)) 164 | 165 | (use-package flycheck-pos-tip) 166 | 167 | (use-package graphviz-dot-mode) 168 | 169 | (use-package guru-mode 170 | :custom 171 | (guru-warn-only t) 172 | :config 173 | (guru-global-mode t)) 174 | 175 | (use-package idle-highlight-mode 176 | :diminish idle-highlight-mode 177 | :hook 178 | (prog-mode . idle-highlight-mode)) 179 | 180 | (use-package know-your-http-well) 181 | (use-package imenu) 182 | 183 | (use-package imenu-anywhere 184 | :bind (("" . imenu-anywhere))) 185 | 186 | (use-package less-css-mode) 187 | (use-package log4j-mode) 188 | 189 | (use-package lsp-mode 190 | :hook ((lsp-mode . lsp-enable-which-key-integration) 191 | (c-mode . lsp) 192 | (c-sharp-mode . lsp) 193 | (c-ts-mode . lsp) 194 | (cc-mode . lsp) 195 | (clojure-mode . lsp) 196 | (clojure-ts-mode . lsp) 197 | (clojurec-mode . lsp) 198 | (clojurescript-mode . lsp) 199 | (dockerfile-mode . lsp) 200 | (dockerfile-ts-mode . lsp) 201 | (elixir-mode . lsp) 202 | (elm-mode . lsp) 203 | (go-mode . lsp) 204 | (go-ts-mode . lsp) 205 | (graphql-mode . lsp) 206 | (haskell-mode . lsp) 207 | (html-mode . lsp) 208 | (html-ts-mode . lsp) 209 | (java-mode . lsp) 210 | (java-ts-mode . lsp) 211 | (json-mode . lsp) 212 | (json-ts-mode . lsp) 213 | (kotlin-mode . lsp) 214 | (lua-mode . lsp) 215 | (markdown-mode . lsp) 216 | (ocaml-mode . lsp) 217 | (protobuf-mode . lsp) 218 | (python-mode . lsp) 219 | (python-ts-mode . lsp) 220 | (rust-mode . lsp) 221 | (rust-ts-mode . lsp) 222 | (scala-mode . lsp) 223 | (sh-mode . lsp) 224 | (sql-mode. lsp) 225 | (tex-mode . lsp) 226 | (terraform-mode . lsp) 227 | (tuareg-mode . lsp) 228 | (typescript-mode . lsp) 229 | (typescript-ts-mode . lsp) 230 | (web-mode . lsp) 231 | (xml-mode . lsp) 232 | (yaml-mode . lsp) 233 | (yaml-ts-mode . lsp) 234 | (zig-mode . lsp) 235 | (zig-ts-mode . lsp)) 236 | 237 | :bind (("M-?" . lsp-find-definition) 238 | ;; ("M-/" . lsp-find-references) 239 | ("M-'" . lsp-treemacs-call-hierarchy) 240 | ("C-c l" . ca-lsp-refactor-menu/body)) 241 | 242 | :config 243 | (dolist (m '(clojure-mode 244 | clojurec-mode 245 | clojurescript-mode 246 | clojurex-mode)) 247 | (add-to-list 'lsp-language-id-configuration `(,m . "clojure"))) 248 | (add-to-list 'lsp-language-id-configuration '(forge-post-mode . "text")) 249 | 250 | :custom 251 | (gc-cons-threshold 100000000) 252 | (lsp-completion-enable nil) 253 | ;; change it to :none if using corfu 254 | (lsp-completion-provider :capf) 255 | (lsp-completion-show-detail t) 256 | (lsp-dired-mode t) 257 | (lsp-eldoc-enable-hover t) 258 | (lsp-eldoc-render-all nil) 259 | (lsp-enable-file-watchers nil) 260 | (lsp-enable-folding t) 261 | (lsp-enable-indentation nil) 262 | (lsp-file-watch-threshold 5000) 263 | (lsp-headerline-breadcrumb-enable t) 264 | (lsp-headerline-breadcrumb-segments '(symbols)) 265 | (lsp-idle-delay 0.5) 266 | (lsp-keymap-prefix nil) 267 | (lsp-lens-enable t) 268 | (lsp-log-io nil) 269 | (lsp-signature t) 270 | (lsp-treemacs-sync-mode t) 271 | (read-process-output-max (* 1024 1024))) 272 | 273 | (use-package lsp-ui 274 | :hook 275 | (lsp-mode . lsp-ui-mode) 276 | :custom 277 | (lsp-ui-imenu-auto-refresh 'after-save) 278 | (lsp-ui-sideline-show-code-actions t) 279 | (lsp-ui-sideline-enable nil) 280 | (lsp-ui-sideline-show-hover nil) 281 | (lsp-ui-doc-position 'bottom) 282 | (lsp-ui-doc-mode nil) 283 | (lsp-ui-peek-enable t) 284 | (lsp-ui-peek-show-directory nil) 285 | (lsp-ui-doc-side 'right) 286 | (lsp-ui-imenu-mode nil) 287 | (lsp-ui-doc-show-with-mouse nil) 288 | (lsp-ui-imenu-auto-refresh 'after-save) 289 | (lsp-ui-doc-show-with-mouse t)) 290 | 291 | (use-package rfc-mode) 292 | (use-package restclient 293 | :init 294 | (add-to-list 'auto-mode-alist '("\\.rest" . restclient-mode)) 295 | :hook 296 | ((restclient-mode . outline-minor-mode) 297 | (restclient-mode . (lambda () 298 | (outline-minor-mode t) 299 | (local-set-key (kbd "") 'outline-toggle-children) 300 | (setq-local outline-regexp "#+"))))) 301 | 302 | (use-package jq-mode) 303 | 304 | (use-package jq-format) 305 | 306 | (use-package restclient-jq) 307 | 308 | (use-package multiple-cursors 309 | :bind 310 | ("C->" . mc/mark-next-like-this) 311 | ("C-<" . mc/mark-previous-like-this) 312 | ("C-c C-<" . mc/mark-all-like-this)) 313 | 314 | (use-package ox-asciidoc) 315 | 316 | (defun ca-org-mode-setup () 317 | "few org mode settings" 318 | (org-indent-mode t) 319 | ;; this messes up with the tables for example 320 | ;; (variable-pitch-mode 1) 321 | (auto-fill-mode 0) 322 | (visual-line-mode 1)) 323 | 324 | (use-package org 325 | :hook (org-mode . ca-org-mode-setup) 326 | :config 327 | (define-key org-mode-map (kbd "C-c C-r") verb-command-map) 328 | (org-babel-do-load-languages 329 | 'org-babel-load-languages 330 | '((dot . t) 331 | (calc . t) 332 | (rust . t) 333 | (clojure . t) 334 | (sql . t))) 335 | (add-to-list 'org-structure-template-alist '("N" . "notes")) 336 | :custom 337 | (org-babel-clojure-backend 'cider) 338 | (org-cycle-separator-lines 2) 339 | (org-edit-src-content-indentation 2) 340 | (org-ellipsis " ▾") 341 | (org-fontify-quote-and-verse-blocks t) 342 | (org-hide-block-startup nil) 343 | (org-hide-emphasis-markers t) 344 | (org-hide-emphasis-markers t) 345 | (org-src-preserve-indentation nil) 346 | (org-src-tab-acts-natively t) 347 | (org-src-tab-acts-natively t) 348 | (org-startup-folded 'content) 349 | (org-agenda-files (list (file-truename "~/RoamNotes/") 350 | (file-truename "~/RoamNotes/daily/")))) 351 | 352 | (use-package org-bullets 353 | :after org 354 | :hook (org-mode . org-bullets-mode)) 355 | 356 | (use-package org-roam 357 | :after org 358 | :custom 359 | (org-roam-directory (file-truename "~/RoamNotes")) 360 | (org-roam-completion-everywhere t) 361 | :bind (("C-c n l" . org-roam-buffer-toggle) 362 | ("C-c n f" . org-roam-node-find) 363 | ("C-c n i" . org-roam-node-insert) 364 | ("C-c n d" . org-roam-dailies-goto-today) 365 | ("C-c n g" . org-roam-graph) 366 | ("C-c n c" . org-roam.capture) 367 | ("C-c n j" . org-roam-dailies-capture-today)) 368 | :config 369 | (org-roam-setup) 370 | (require 'org-roam-protocol)) 371 | 372 | (use-package websocket 373 | :after org-roam) 374 | 375 | (use-package org-roam-ui 376 | :after org-roam ;; or :after org 377 | ;; normally we'd recommend hooking orui after org-roam, but since org-roam does not have 378 | ;; a hookable mode anymore, you're advised to pick something yourself 379 | ;; if you don't care about startup time, use 380 | ;; :hook (after-init . org-roam-ui-mode) 381 | :custom 382 | (org-roam-ui-sync-theme t) 383 | (org-roam-ui-follow t) 384 | (org-roam-ui-update-on-save t) 385 | (org-roam-ui-open-on-start t)) 386 | 387 | (use-package org-msg) 388 | 389 | (use-package paradox) 390 | (use-package persistent-scratch 391 | :config 392 | (persistent-scratch-autosave-mode t)) 393 | 394 | (use-package posframe) 395 | 396 | ;; eval `M-x nerd-icons-install-fonts' if you are seeing weird unicode glyphs 397 | (use-package doom-modeline 398 | :hook (after-init . doom-modeline-mode)) 399 | 400 | (use-package rainbow-delimiters 401 | :hook 402 | (prog-mode . rainbow-delimiters-mode)) 403 | 404 | (use-package rainbow-mode 405 | :hook 406 | (prog-mode . rainbow-mode)) 407 | 408 | (use-package smart-mode-line) 409 | 410 | (use-package smartparens 411 | :config 412 | (show-smartparens-global-mode t) 413 | (require 'smartparens-config) 414 | :bind 415 | (("C-M-f" . sp-forward-sexp) 416 | ("C-M-b" . sp-backward-sexp) 417 | ("C-M-d" . sp-down-sexp) 418 | ("C-M-a" . sp-backward-down-sexp) 419 | ("C-M-e" . sp-up-sexp) 420 | ("C-M-u" . sp-backward-up-sexp) 421 | ("C-M-t" . sp-transpose-sexp) 422 | ("C-M-n" . sp-next-sexp) 423 | ("C-M-p" . sp-previous-sexp) 424 | ("C-M-k" . sp-kill-sexp) 425 | ("C-M-w" . sp-copy-sexp) 426 | ("C-" . sp-forward-slurp-sexp) 427 | ("C-" . sp-forward-barf-sexp) 428 | ("C-]" . sp-select-next-thing-exchange) 429 | ("C-" . sp-select-previous-thing) 430 | ("C-M-]" . sp-select-next-thing) 431 | ("M-F" . sp-forward-symbol) 432 | ("M-B" . sp-backward-symbol))) 433 | 434 | (use-package vertico 435 | :config 436 | (vertico-mode t) 437 | :custom 438 | (vertico-cycle t) 439 | (vertico-resize t) 440 | (vertico-scroll-margin 10) 441 | (vertico-count 20)) 442 | 443 | (use-package vertico-prescient 444 | :config 445 | (vertico-prescient-mode t)) 446 | 447 | (use-package time 448 | :custom 449 | (display-time-24hr-format t) 450 | (display-time-default-load-average nil) 451 | (display-time-mode)) 452 | 453 | (use-package toml-mode) 454 | (use-package undo-tree 455 | :diminish "U" 456 | :config (global-undo-tree-mode t)) 457 | 458 | (use-package which-key) 459 | (use-package wordnut) 460 | (use-package yaml-mode) 461 | (use-package yaml-pro 462 | :hook 463 | (yaml-ts-mode . yaml-pro)) 464 | 465 | (use-package yasnippet 466 | :custom 467 | (yas-verbosity 2) 468 | (yas-wrap-around-region t) 469 | 470 | :config 471 | (yas-global-mode t)) 472 | 473 | (use-package yasnippet-snippets 474 | :after yasnippet) 475 | 476 | (use-package time 477 | :config (display-time-mode t)) 478 | 479 | (use-package paren 480 | :config (show-paren-mode t)) 481 | 482 | (use-package which-key 483 | :config (which-key-mode t)) 484 | 485 | (use-package windmove 486 | :config (windmove-default-keybindings 'shift)) 487 | 488 | ;; TODO: reconfigure these two?? 489 | (global-prettify-symbols-mode t) 490 | (transient-mark-mode t) 491 | 492 | (use-package ibuffer 493 | :bind (("C-x C-b" . ibuffer))) 494 | 495 | (size-indication-mode t) 496 | 497 | (use-package ibuffer-vc 498 | :defer t 499 | :hook 500 | (ibuffer . (lambda () 501 | (ibuffer-vc-set-filter-groups-by-vc-root) 502 | (unless (eq ibuffer-sorting-mode 'alphabetic) 503 | (ibuffer-do-sort-by-alphabetic))))) 504 | 505 | (use-package winner 506 | :config (winner-mode t)) 507 | 508 | (use-package ripgrep 509 | :config 510 | (setq ripgrep-arguments '("--max-columns 150" "--max-columns-preview"))) 511 | 512 | ;; Enable the www ligature in every possible major mode 513 | (use-package ligature 514 | :config 515 | (ligature-set-ligatures 't '("www")) 516 | ;; Enable ligatures in programming modes 517 | (ligature-set-ligatures 'prog-mode '("www" "**" "***" "**/" "*>" "*/" "\\\\" "\\\\\\" "{-" "::" 518 | ":::" ":=" "!!" "!=" "!==" "-}" "----" "-->" "->" "->>" 519 | "-<" "-<<" "-~" "#{" "#[" "##" "###" "####" "#(" "#?" "#_" 520 | "#_(" ".-" ".=" ".." "..<" "..." "?=" "??" ";;" "/*" "/**" 521 | "/=" "/==" "/>" "//" "///" "&&" "||" "||=" "|=" "|>" "^=" "$>" 522 | "++" "+++" "+>" "=:=" "==" "===" "==>" "=>" "=>>" "<=" 523 | "=<<" "=/=" ">-" ">=" ">=>" ">>" ">>-" ">>=" ">>>" "<*" 524 | "<*>" "<|" "<|>" "<$" "<$>" "