summary refs log tree commit diff stats
diff options
context:
space:
mode:
authoreli <eli@newstartmobile.com>2022-11-26 21:17:34 -0500
committereli <eli@newstartmobile.com>2022-11-26 21:17:34 -0500
commite7724b13d7a7b59576f209e20d55d4d6dad9cbba (patch)
tree095a22b808ad7eb12e01fc8fccda23013b75ccb3
downloademacs-e7724b13d7a7b59576f209e20d55d4d6dad9cbba.tar.gz
*
-rw-r--r--init.el328
1 files changed, 328 insertions, 0 deletions
diff --git a/init.el b/init.el
new file mode 100644
index 0000000..2edb53c
--- /dev/null
+++ b/init.el
@@ -0,0 +1,328 @@
+;; load path
+(add-to-list 'load-path "~/.emacs.d/lisp")
+
+;; function to create a file if it doesn't already exist
+(defun ooo/create-if-not-exist (filename)
+  (interactive)
+  (if (not(file-exists-p filename))
+      (with-temp-file filename
+        (insert ""))))
+
+;; Prevent emacs from adding stuff to init.el
+;; Instead, add that stuff to custom.el
+(ooo/create-if-not-exist "~/.emacs.d/lisp/custom.el")
+(setq custom-file
+    (expand-file-name "~/.emacs.d/lisp/custom.el" user-emacs-directory))
+(load custom-file)
+
+;; Instruct emacs to check for personal-pizza.el
+;; This file is used for one-off overrides and any
+;; tweaks that need to be made to ooo.el rather than
+;; editing the config directly.
+(when (file-exists-p "~/.emacs.d/lisp/personal-pizza.el")
+  (load "~/.emacs.d/lisp/personal-pizza.el"))
+
+;; Who am I -- probably modify this bit if you aren't me.
+(setq user-full-name "Eli Mellen"
+      user-mail-address "hi@eli.li")
+
+;; I find automated backups to be wicked useful. I allow emacs to make many of them, 
+;; and to make them often. This said, I don't like them muddying my project directories, 
+;; so I have them dumped into a common folder.
+(setq backup-directory-alist `(("." . "~/.saves")))
+(setq backup-by-copying t) ;; SLOW but very safe
+(setq delete-old-versions t
+    kept-new-versions 6
+    kept-old-versions 2
+    version-control t)
+
+;; Likewise, history can be a valuable resource. 
+;; See, https://www.wisdomandwonder.com/wp-content/uploads/2014/03/C3F.html for more on this.
+(setq savehist-file "~/.emacs.d/savehist")
+(savehist-mode 1)
+(setq history-length t)
+(setq history-delete-duplicates t)
+(setq savehist-save-minibuffer-history 1)
+(setq savehist-additional-variables
+      '(kill-ring
+        search-ring
+        regexp-search-ring))
+
+;; UI stuffs
+(setq frame-title-format '("%b")
+      ring-bell-function 'ignore
+      default-directory "~/")
+
+(tool-bar-mode   -1)
+(menu-bar-mode   +1)
+(scroll-bar-mode -1)
+(window-divider-mode 1) ; allows you to resize windows by grabbing the divider
+(global-visual-line-mode 1) ; line wrapping, because I spend a lot of time working on very tiny screens
+(global-prettify-symbols-mode 1)
+(column-number-mode +1)
+(global-hl-line-mode 1) ; highlight the currently active line
+
+;; Display line numbers, but only on Emacs26 or higher
+(when (version<= "26.0.50" emacs-version )
+  (global-display-line-numbers-mode))
+
+;; Play nice(er) with the X11 clipboard
+(setq select-enable-clipboard t)
+
+;; No thank you to a welcome screen
+(setq inhibit-startup-message t initial-scratch-message nil)
+
+;; Automatically save and load changes
+(global-auto-revert-mode +1)
+(auto-save-visited-mode  +1)
+
+;; Automatically insert buddies
+(electric-pair-mode +1)
+
+;; Highlight buddies (and do it right away)
+(setq show-paren-delay 0)
+(show-paren-mode 1)
+
+;; Increase line space for better readability
+(setq-default line-spacing 3)
+
+(setq-default indent-tabs-mode nil
+              tab-width 2)
+
+;; ===== SIMPLE THEME =====
+
+(set-face-font 'default "Go Mono 14")
+
+; (set-frame-parameter (selected-frame)
+;                      'internal-border-width 24)
+; (setq default-frame-alist
+;       (append (list '(width  . 72) '(height . 40)
+;                     '(vertical-scroll-bars . nil)
+;                     '(internal-border-width . 24)
+;                     '(font . "Go Mono 14"))))
+
+
+;; Underline line at descent position, not baseline position
+(setq x-underline-at-descent-line t)
+
+;; No ugly button for checkboxes
+(setq widget-image-enable nil)
+
+;; Line cursor and no blink
+(set-default 'cursor-type  '(bar . 1))
+(blink-cursor-mode 1)
+
+;; No sound
+(setq visible-bell t)
+(setq ring-bell-function 'ignore)
+
+;; Fringe or bangs?
+(fringe-mode '(0 . 0))
+(defface fallback '((t :family "Go Mono"
+                       :inherit 'face-faded)) "Fallback")
+(set-display-table-slot standard-display-table 'truncation
+                        (make-glyph-code ?… 'fallback))
+(set-display-table-slot standard-display-table 'wrap
+                        (make-glyph-code ?↩ 'fallback))
+
+;; Vertical window divider
+(setq window-divider-default-right-width 3)
+(setq window-divider-default-places 'right-only)
+(window-divider-mode)
+
+
+
+;; ===== PACKAGES =====
+
+;; bootstrap straight.el
+(defvar bootstrap-version)
+(let ((bootstrap-file
+       (expand-file-name "straight/repos/straight.el/bootstrap.el" user-emacs-directory))
+      (bootstrap-version 6))
+  (unless (file-exists-p bootstrap-file)
+    (with-current-buffer
+        (url-retrieve-synchronously
+         "https://raw.githubusercontent.com/radian-software/straight.el/develop/install.el"
+         'silent 'inhibit-cookies)
+      (goto-char (point-max))
+      (eval-print-last-sexp)))
+  (load bootstrap-file nil 'nomessage))
+
+;; go go gadget straight.el
+(setq package-enable-at-startup nil)
+
+;; make it pretend to be use-package
+(straight-use-package 'use-package)
+
+;; theme
+(straight-use-package 'acme-theme)
+(load-theme 'acme t)
+;; this makes it so that emacs doesn't load a theme when launched in a terminal
+(add-to-list 'default-frame-alist '(tty-color-mode  . -1))
+
+;; whimsy
+(straight-use-package 'rainbow-delimiters)
+(add-hook 'prog-mode-hook #'rainbow-delimiters-mode)
+(straight-use-package 'nyan-mode)
+(add-hook 'prog-mode-hook #'nyan-mode)
+(straight-use-package 'emojify)
+(add-hook 'after-init-hook #'global-emojify-mode)
+
+;; git
+(straight-use-package 'git-gutter)
+(add-hook 'prog-mode-hook #'global-git-gutter-mode)
+
+;; keep splits good sizes
+(straight-use-package 'golden-ratio)
+(golden-ratio-mode 1)
+
+;; ergonomic stuff for easy cheating and nicer mode-line
+(straight-use-package 'helm)
+(setq helm-M-x-fuzzy-match t
+    helm-mode-fuzzy-match t
+    helm-buffers-fuzzy-matching t
+    helm-recentf-fuzzy-match t
+    helm-locate-fuzzy-match t
+    helm-semantic-fuzzy-match t
+    helm-imenu-fuzzy-match t
+    helm-completion-in-region-fuzzy-match t
+    helm-candidate-number-list 150
+    helm-split-window-in-side-p t
+    helm-move-to-line-cycle-in-source t
+    helm-echo-input-in-header-line t
+    helm-autoresize-max-height 0
+    helm-autoresize-min-height 20)
+:config (helm-mode 1)
+(global-set-key (kbd "M-x") 'helm-M-x) ; like spacemacs, but with M-x instead of SPC
+(global-set-key (kbd "M-f") 'helm-find-files)
+
+(straight-use-package 'which-key)
+(setq which-key-separator " ")
+(setq which-key-prefix-prefix "+")
+
+(straight-use-package 'company)
+(setq company-dabbrev-downcase 0 company-idle-delay 0) 
+(progn (company-mode +1)
+  (global-company-mode +1))
+
+
+;; ===== org-mode =====
+
+(straight-use-package 'org)
+(setq org-todo-keywords
+      '((sequence "TODO(t)" "|" "DONE(d)") ;; basic boolean todo lists
+        (sequence "BACKLOG" "NEXT" "DOING" "FOLLOW-UP" "BLOCKED" "|" "DONE" "DELEGATED"))) ;; fancy-pants kanban style, multi-state todo lists
+      (setq org-tag-alist '(("@work" . ?w) ("@home" . ?h) ("hobby" . ?h) ("client" . ?c))) ;; not in use, but one day...
+      (setq org-fontify-done-headline t)
+      (custom-set-faces
+      '(org-done ((t (:foreground "#5DA7AA" :weight normal :strike-through t))))
+      '(org-headline-done
+            ((((class color) (min-colors 16) (background light))
+               (:foreground "#5E81AC" :strike-through t)))))
+
+(straight-use-package 'org-bullets)
+(add-hook 'org-mode-hook (lambda () (org-bullets-mode 1)))
+
+;; Export org files in various formats
+(straight-use-package 'htmlize)
+(straight-use-package 'ox-pandoc)
+
+(straight-use-package 'restclient)
+
+(straight-use-package 'ob-restclient)
+(org-babel-do-load-languages
+ 'org-babel-load-languages
+ '((restclient . t)))
+
+;; ORG BABEL
+(org-babel-do-load-languages
+ 'org-babel-load-languages
+ '((shell . t)
+   (emacs-lisp . t)
+   (forth . t)
+   (C . t)
+   (sqlite . t)
+   (restclient . t)))
+
+(defun org-babel-tangle-block()
+  (interactive)
+  (let ((current-prefix-arg '(4)))
+     (call-interactively 'org-babel-tangle)))
+
+(eval-after-load "org"
+  '(progn
+     (define-key org-mode-map (kbd "C-c b") 'org-babel-tangle-block)))
+
+(eval-after-load 'org
+      (lambda()
+        (require 'ob-emacs-lisp)
+        (require 'ob-sql)
+        (require 'ob-shell)
+        (require 'ob-sqlite)
+        (require 'ob-org)
+        (require 'ob-css)
+        (require 'ob-C)
+        (require 'ob-forth)
+        (require 'ob-lisp)
+        (setq org-export-babel-evaluate nil)
+        (setq org-startup-indented t)
+        ;; increase imenu depth to include third level headings
+        (setq org-imenu-depth 3)
+        ;; Update images from babel code blocks automatically
+        (add-hook 'org-babel-after-execute-hook 'org-display-inline-images)
+        (setq org-src-fontify-natively t)
+        (setq org-src-tab-acts-natively t)
+        (setq org-confirm-babel-evaluate nil)))
+
+;; ===== LANGUAGES =====
+
+;; Common Lisp support
+(straight-use-package 'sly)
+(setq inferior-lisp-program "/opt/homebrew/bin/sbcl --noinform") ;; this is the bit that changes from machine to machine, usually.
+
+;; Scheme support for chicken, chibi and racket (brev too!)...and guile
+(straight-use-package 'geiser)
+(setq geiser-racket-binary "/Applications/Racket\ v8.2/bin/racket")
+(setq geiser-chicken-binary "/opt/homebrew/bin/csi")
+(setq geiser-chibi-binary "/usr/local/bin/chibi-scheme")
+(setq geiser-guile-binary "/opt/homebrew/bin/guile")
+(setq geiser-active-implementations '(chibi chicken racket guile))
+(straight-use-package 'geiser-chibi)
+(straight-use-package 'geiser-chicken)
+(straight-use-package 'geiser-racket)
+(straight-use-package 'geiser-guile)
+(add-to-list 'auto-mode-alist '("\\.brev$" . scheme-mode))
+
+;; JANET
+(straight-use-package 'janet-mode)
+
+;; GO
+(straight-use-package 'go-mode)
+
+;; LUA
+(straight-use-package 'lua-mode)
+
+;; FENNEL
+(straight-use-package 'fennel-mode)
+
+;; RACKET
+(straight-use-package 'racket-mode)
+
+;; FORTH
+(autoload 'forth-mode "gforth.el")
+(setq auto-mode-alist (cons '("\\.fs\\'" . forth-mode) 
+			    auto-mode-alist))
+(autoload 'forth-block-mode "gforth.el")
+
+;; FLYSPELL
+(dolist (hook '(text-mode-hook))
+  (add-hook hook (lambda () (flyspell-mode 1))))
+
+(dolist (hook '(change-log-mode-hook log-edit-mode-hook))
+  (add-hook hook (lambda () (flyspell-mode -1))))
+
+(eval-after-load "flyspell"
+  '(progn
+     (define-key flyspell-mouse-map [down-mouse-3] #'flyspell-correct-word)
+     (define-key flyspell-mouse-map [mouse-3] #'undefined)))
+