setup odin mode

This commit is contained in:
2026-01-09 10:04:55 -05:00
parent 9a35919db1
commit 2ffc66e4ad
4 changed files with 490 additions and 52 deletions

208
init.el
View File

@@ -1,3 +1,5 @@
;; -*- lexical-binding: t; -*-
(require 'package)
(add-to-list 'package-archives
'("melpa" . "https://melpa.org/packages/") t)
@@ -6,6 +8,9 @@
(require 'use-package-ensure)
(require 'bind-key)
; If startup times are slow
; (setq use-package-verbose t)
(use-package emacs)
(setq tab-bar-show nil)
(setq inhibit-startup-message t)
@@ -27,12 +32,24 @@
(setq reb-re-syntax 'string)
(setq default-tab-width 4)
(setq-default tab-width 4)
(set-face-attribute 'default nil :height 160 :family "Monaco")
(set-face-attribute 'default nil :height 160 :family "Berkeley Mono")
(global-hl-line-mode 1)
(setq use-package-always-ensure t)
(setq mac-command-modifier 'control)
(setq is-mac (string= system-type "darwin"))
(setq-default cursor-type 'bar)
(defun hgh/disable-bar-cursor ()
(blink-cursor-mode -1))
(defun hgh/enable-bar-cursor ()
(blink-cursor-mode 1))
(add-hook 'activate-mark-hook 'hgh/disable-bar-cursor)
(add-hook 'deactivate-mark-hook 'hgh/enable-bar-cursor)
(when is-mac
(setq dired-use-ls-dired t
insert-directory-program "gls"
@@ -61,59 +78,93 @@
(defun hgh/project-ripgrep (regexp)
(interactive (list (read-from-minibuffer "Search (regexp): " (thing-at-point 'symbol))))
(ripgrep-regexp regexp (project-root (project-current))))
(rg regexp "*" (project-root (project-current))))
(defun hgh/current-date-time ()
(interactive)
(insert (format-time-string "%Y-%m-%d %H:%M:%S")))
(add-hook 'compilation-filter-hook 'ansi-color-compilation-filter)
(defun hgh/next-error ()
(interactive)
(if (eglot-managed-p)
(flymake-goto-next-error)
(next-error)))
;; key bindings
(keymap-global-set "M-o" #'other-window)
(keymap-global-set "M-i" #'imenu)
(keymap-global-set "C-M-." #'end-of-buffer)
(keymap-global-set "C-M-," #'beginning-of-buffer)
(keymap-global-set "C-." #'xref-find-definitions)
(keymap-global-set "C-," #'xref-go-back)
(keymap-global-set "<f5>" #'compile)
(keymap-global-set "C-c r r" #'revert-buffer)
(keymap-global-set "C-c C-c" #'comment-or-uncomment-region)
(keymap-global-set "M-]" #'forward-paragraph)
(keymap-global-set "M-[" #'backward-paragraph)
(keymap-global-set "C-h h" #'eldoc)
(keymap-global-set "C-]" #'flymake-goto-next-error)
(keymap-global-set "C-]" #'hgh/next-error)
(keymap-global-set "C-c e i" #'hgh/visit-init-file)
(keymap-global-set "C-c c" #'compile)
(keymap-global-set "C-x C-b" #'ibuffer)
(keymap-global-set "M-0" #'delete-window)
(keymap-global-set "M-1" #'delete-other-windows)
(keymap-global-set "M-2" #'split-window-below)
(keymap-global-set "M-3" #'split-window-right)
(require 'dired)
(setq dired-dwim-target t)
(keymap-set dired-mode-map "C-c C-c" #'wdired-change-to-wdired-mode)
(load-theme 'modus-vivendi-tinted t)
(load-theme 'modus-vivendi t)
(use-package exec-path-from-shell
:when is-mac
:config
(exec-path-from-shell-initialize))
(use-package man
:when is-mac
:custom
(manual-program "gman"))
(use-package magit
:defer t)
(use-package tree-sitter
:mode (("\\.tsx\\'" . tsx-ts-mode)
("\\.js\\'" . typescript-ts-mode)
("\\.mjs\\'" . typescript-ts-mode)
("\\.mts\\'" . typescript-ts-mode)
("\\.cjs\\'" . typescript-ts-mode)
("\\.ts\\'" . typescript-ts-mode)
("\\.jsx\\'" . tsx-ts-mode)
("\\.json\\'" . json-ts-mode))
:mode ((" \\.tsx\\'" . tsx-ts-mode)
(" \\.js\\'" . typescript-ts-mode)
(" \\.mjs\\'" . typescript-ts-mode)
(" \\.mts\\'" . typescript-ts-mode)
(" \\.cjs\\'" . typescript-ts-mode)
(" \\.ts\\'" . typescript-ts-mode)
(" \\.jsx\\'" . tsx-ts-mode)
(" \\.json\\'" . json-ts-mode))
:custom
(treesit-extra-load-path '("~/repos/tree-sitter-module/dist")))
(use-package tree-sitter-langs)
(use-package tree-sitter-langs
:defer t)
(use-package haskell-mode)
(use-package haskell-mode
:defer t)
(use-package company)
(defun enable-parinfer ()
(let ((buf (or (buffer-file-name) (buffer-name) "")))
(when (and
(not (s-contains? "sbcl" buf))
(not (s-contains? "ocicl" buf))
(not (string-prefix-p "*sly" buf)))
(parinfer-rust-mode 1)
(electric-quote-mode 1))))
(use-package parinfer-rust-mode
:hook ((lisp-mode emacs-lisp-mode) . enable-parinfer)
:config
(setq parinfer-rust-disable-troublesome-modes t))
(use-package sly
:defer t
:custom
(inferior-lisp-program "/opt/homebrew/bin/sbcl"))
@@ -147,13 +198,13 @@
:config
(global-corfu-mode 1))
(use-package cape
:init
(add-to-list 'completion-at-point-functions #'cape-dabbrev))
(use-package browse-kill-ring
:bind (("C-c y" . browse-kill-ring)))
(defun hgh/org-mode-setup ()
(org-indent-mode)
(visual-line-mode 1))
(defun hgh/org-mode-visual-fill ()
(setq visual-fill-column-width 120
visual-fill-column-center-text t)
@@ -173,7 +224,8 @@
(java-ts-mode . eglot-ensure)
(svelte-mode . eglot-ensure)
(haskell-mode . eglot-ensure)
(terraform-mode . eglot-ensure))
(terraform-mode . eglot-ensure)
(odin-mode . eglot-ensure))
:bind
(:map eglot-mode-map
("C-c r" . eglot-rename)
@@ -188,14 +240,18 @@
(cl-remove-if (lambda (c) (equal (car c) 'rust-mode))
eglot-server-programs))
(setf eglot-server-programs (cons (list '(rust-ts-mode rust-mode) "rust-analyzer" :initializationOptions '(:checkOnSave (:command "clippy")))
eglot-server-programs))
(setf eglot-server-programs
(append (list
(list '(rust-ts-mode rust-mode) "rust-analyzer" :initializationOptions '(:checkOnSave (:command "clippy")))
'(svelte-mode "svelteserver" "--stdio")
'(haskell-mode "haskell-language-server-wrapper" "--lsp"))
eglot-server-programs)))
(setf eglot-server-programs (cons '(svelte-mode "svelteserver" "--stdio")
eglot-server-programs))
(setf eglot-server-programs (cons '(haskell-mode "haskell-language-server-wrapper" "--lsp")
eglot-server-programs)))
(setenv "DOTNET_ROOT" "~/.local/share/mise/installs/dotnet/9")
(push '("\\.csproj$" . xml-mode) auto-mode-alist)
(push '("\\.vs$" . c-mode) auto-mode-alist)
(push '("\\.fs$" . c-mode) auto-mode-alist)
(push '("\\.sbclrc" . lisp-mode) auto-mode-alist)
;; paredit
@@ -209,18 +265,35 @@
(define-key paredit-mode-map (kbd "M-:") #'paredit-backward-barf-sexp)
(enable-paredit-mode))
(setq lisp-mode-hooks '((emacs-lisp-mode-hook emacs-lisp-mode)
(defvar lisp-mode-hooks nil)
(setf lisp-mode-hooks '((emacs-lisp-mode-hook emacs-lisp-mode)
(clojure-mode-hook clojure-mode)
(lisp-mode-hook lisp-mode)
(sly-mode-hook sly-mode)))
(add-hook 'lisp-mode-hook
(lambda ()
(set (make-local-variable 'lisp-indent-function)
'common-lisp-indent-function)
(setup-paredit)))
(defun hgh/rg (search)
(interactive "sSearch: ")
(compilation-start
(concat "rg --no-heading '" search "'")
'compilation-mode
(lambda (s)
(concat
"*"
(file-name-nondirectory (directory-file-name default-directory))
" rg*"))))
(use-package multiple-cursors
:init
(add-hook 'multiple-cursors-mode-enabled-hook
(lambda ()
(remove-hook 'activate-mark-hook 'hgh/disable-bar-cursor)
(remove-hook 'deactivate-mark-hook 'hgh/disable-bar-cursor)
(blink-cursor-mode 1)))
(add-hook 'multiple-cursors-mode-disabled-hook
(lambda ()
(add-hook 'activate-mark-hook 'hgh/disable-bar-cursor)
(add-hook 'deactivate-mark-hook 'hgh/disable-bar-cursor)
(blink-cursor-mode 1)))
:config
(global-set-key (kbd "C->") 'mc/mark-next-like-this)
(global-set-key (kbd "C-<") 'mc/mark-previous-like-this))
@@ -237,14 +310,6 @@
(use-package markdown-mode
:ensure t)
(use-package aider
:custom
(aider-args '("--model" "o4-mini" "--no-auto-accept-architect"))
:bind
("C-c a" . #'aider-transient-menu)
:config
(setenv "OPENAI_API_KEY" "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"))
;; Run Prettier only in certain major-modes before saving:
(defvar hgh/prettier-modes
'(tsx-ts-mode typescript-ts-mode typescript-ts-base-mode json-ts-mode javascript-mode js2-mode typescript-mode web-mode)
@@ -264,8 +329,59 @@
(use-package terraform-mode)
(use-package cider)
(use-package cider
:defer t)
(use-package org
:defer t
:custom
(org-todo-keywords '((sequence "TODO" "INPROGRESS" "DONE"))))
(org-todo-keywords '((sequence "TODO" "INPROGRESS" "DONE")))
(org-support-shift-select t)
(org-html-validation-link nil)
(org-html-head-include-default-style nil)
(org-html-head-include-scripts nil)
(org-html-head "<link rel=\"stylesheet\" href=\"https://cdn.simplecss.org/simple.min.css\" />")
:config
(org-indent-mode)
(require 'ox-publish)
(org-babel-do-load-languages
'org-babel-load-languages
'((shell . t)))
(setq org-publish-use-timestamps-flag nil)
(setq org-publish-project-alist
(list
(list "writings"
:base-directory "~/Documents/writings/content"
:publishing-directory "~/Documents/writings/public"
:exclude "~/Documents/writings/notes"
:recursive t
:time-stamp-file nil
:section-numbers nil
:with-creator t
:with-author nil))))
(use-package dumber-jump
:init
(add-hook 'xref-backend-functions #'dumber-jump-xref-activate))
(use-package flycheck)
; :init (global-flycheck-mode)
(use-package idris-mode)
(use-package htmlize)
(use-package zig-mode)
(use-package fsharp-mode)
(use-package caddyfile-mode)
(use-package dockerfile-mode)
(load-file (concat (file-name-parent-directory user-init-file) "odin-mode.el"))