;; Bootstrap Straight Package Manager (defvar bootstrap-version) (let ((bootstrap-file (expand-file-name "straight/repos/straight.el/bootstrap.el" user-emacs-directory)) (bootstrap-version 5)) (unless (file-exists-p bootstrap-file) (with-current-buffer (url-retrieve-synchronously "https://raw.githubusercontent.com/raxod502/straight.el/develop/install.el" 'silent 'inhibit-cookies) (goto-char (point-max)) (eval-print-last-sexp))) (load bootstrap-file nil 'nomessage)) ;; packages to install and load (straight-use-package 'auto-complete) (straight-use-package '(nano-theme :type git :host github :repo "rougier/nano-theme")) (straight-use-package '(slime-company :type git :host github :repo "anwyn/slime-company")) (straight-use-package 'sublimity) (straight-use-package 'all-the-icons) (straight-use-package 'neotree) (straight-use-package 'rust-mode) (straight-use-package 'markdown-mode) (straight-use-package 'moe-theme) (straight-use-package 'ample-theme) (straight-use-package 'slime) (straight-use-package 'ac-slime) (straight-use-package 'evil) (straight-use-package 'dimmer) (straight-use-package 'magit) (straight-use-package 'diff-hl) (straight-use-package 'rainbow-delimiters) (straight-use-package 'focus) (straight-use-package 'solarized-theme) (straight-use-package 'windresize) (straight-use-package 'yasnippet) (straight-use-package '(janet-mode :type git :host github :repo "ALSchwalm/janet-mode")) (straight-use-package '(puppet-mode :type git :host github :repo "voxpupuli/puppet-mode")) (straight-use-package '(pico8-mode :type git :host github :repo "Kaali/pico8-mode")) (straight-use-package '(fzf :type git :host github :repo "bling/fzf.el")) ;; Mastodon (straight-use-package '(mastodon :type git :host nil :repo "https://codeberg.org/martianh/mastodon.el")) ;; Gopher browser (straight-use-package 'elpher) (straight-use-package 'xterm-color) (defun display-ansi-colors () (interactive) (let ((inhibit-read-only t)) (ansi-color-apply-on-region (point-min) (point-max)))) ;;; Terminal in emacs via vterm lib (straight-use-package '(vterm :type git :host github :repo "akermu/emacs-libvterm")) ;;; Vterm config (setq vterm-buffer-name-string "%s") (add-hook 'vterm-mode-hook (lambda () (set (make-local-variable 'buffer-face-mode-face) 'fixed-pitch) (buffer-face-mode t))) ;;; Syntax highlights for uxn-tal (straight-use-package '(tal-mode :type git :host github :repo "rafapaezbas/uxntal-mode")) ;;; Cursor highlighter (straight-use-package '(beacon :type git :host github :repo "Malabarba/beacon")) (global-set-key (kbd "C-c B") 'beacon-mode) ;; Vimperator like hints for ;; file navigationaki2o/emacs-pophint (straight-use-package '(pophint :type git :host github :repo "aki2o/emacs-pophint")) (global-set-key (kbd "C-c f") 'pophint:do-flexibly) ;;; Code folding (add-hook 'prog-mode-hook 'hs-minor-mode) (global-set-key (kbd "C-c a") 'hs-toggle-hiding) ;;; Error checking (global-set-key (kbd "C-c 2 e") 'flymake-mode) ;; System monitor (straight-use-package '(symon :type git :host github :repo "zk-phi/symon")) (symon-mode 1) (straight-use-package '(telephone-line :type git :host github :repo "dbordak/telephone-line")) (telephone-line-mode 1) ;;; Indent highlighting (straight-use-package '(highlight-indent-guides :type git :host github :repo "DarthFennec/highlight-indent-guides")) (setq highlight-indent-guides-method 'character) (add-hook 'prog-mode-hook 'highlight-indent-guides-mode) (require 'yasnippet) ;; Configure focus (require 'focus) (add-to-list 'focus-mode-to-thing '(lisp-mode . paragraph)) ;; rainbow delims (require 'rainbow-delimiters) (add-hook 'prog-mode-hook #'rainbow-delimiters-mode) ;; Git stuff (require 'magit) (require 'diff-hl) ;; Just enable diff-hl per buffer, ;; it seems expensive ;; (global-diff-hl-mode) (add-hook 'magit-pre-refresh-hook 'diff-hl-magit-pre-refresh) (add-hook 'magit-post-refresh-hook 'diff-hl-magit-post-refresh) (diff-hl-margin-mode t) (require 'dimmer) (setq dimmer-fraction 0.4) ;; always enable ido mode (require 'ido) (ido-mode t) (require 'evil) (evil-mode 1) ;; Enable tab behavior like vi (straight-use-package '(evil-tabs :type git :host github :repo "krisajenkins/evil-tabs")) (require 'evil-tabs) (global-evil-tabs-mode t) (require 'auto-complete) (global-auto-complete-mode t) (require 'slime) (require 'ac-slime) (slime-setup '(slime-fancy ac-slime)) (add-hook 'slime-mode-hook 'set-up-slime-ac) (add-hook 'slime-repl-mode-hook 'set-up-slime-ac) (eval-after-load "auto-complete" '(add-to-list 'ac-modes 'slime-repl-mode)) (require 'markdown-mode) (require 'neotree) (global-set-key [f8] 'neotree-toggle) (require 'all-the-icons) (require 'sublimity) (require 'sublimity-scroll) (require 'sublimity-map) ;; experimental (require 'sublimity-attractive) (setq sublimity-scroll-weight 10 sublimity-scroll-drift-length 5) (setq sublimity-map-size 40) (setq sublimity-map-fraction 0.3) (setq sublimity-map-text-scale -5) (sublimity-map-set-delay 0.1) (setq sublimity-attractive-centering-width nil) (setq backup-directory-alist `((".*" . ,temporary-file-directory))) (setq auto-save-file-name-transforms `((".*" ,temporary-file-directory t))) ;;; Generic options for all OSs ; Smooth mouse scroll a bit (setq mouse-wheel-scroll-amount '(1 ((shift) . 1) ((control) . nil))) (setq mouse-wheel-progressive-speed nil) ;; normal home/end behavior (global-set-key (kbd "") 'beginning-of-line) (global-set-key (kbd "") 'end-of-line) ;; Custom functions (defun reload-dot-emacs () (interactive) (load-file (file-truename "~/.emacs"))) (defun sol-dk () (interactive) (load-theme 'solarized-dark)) (defun sol-l () (interactive) (load-theme 'solarized-light)) ;; Keybinds/macros ;;(global-set-key (kbd "C-c C-q") #'mu-magit-kill-buffers magit-status-mode-map) (global-set-key (kbd "C-c C-q") #'mu-magit-kill-buffers) (global-set-key (kbd "C-c ;") 'comment-line) (global-set-key (kbd "C-c b") 'fzf-switch-buffer) (global-set-key (kbd "C-c z") 'fzf-find-file) (global-set-key (kbd "C-c e") '(lambda () (interactive) (diff-hl-mode) (diff-hl-flydiff-mode))) (global-set-key (kbd "C-c d") 'slime-describe-symbol) (global-set-key (kbd "C-c M-r") 'slime-restart-inferior-lisp) (global-set-key (kbd "C-c D") 'dimmer-mode) (global-set-key (kbd "C-c s") 'sublimity-mode) (global-set-key (kbd "C-c F") 'focus-mode) (global-set-key (kbd "C-c r") 'reload-dot-emacs) (global-set-key (kbd "C-c l") 'display-line-numbers-mode) (global-set-key (kbd "C-c w") 'window-swap-states) (global-set-key (kbd "C-c C-w") 'windresize) (global-set-key (kbd "C-c W") 'whitespace-mode) (global-set-key (kbd "C-c t") 'sol-dk) (global-set-key (kbd "C-c y") 'sol-l) ; Quick toggle evil-mode for slime err (global-set-key (kbd "C-c g") 'magit) (global-set-key (kbd "C-c C-.") '(lambda () (interactive) (switch-to-buffer "*Messages*"))) (global-set-key (kbd "C-c C-f") 'find-file-at-point) ;;; Can probably be replaced with ;;; a yasnippet (fset 'date-to-point (kmacro-lambda-form [?\C-u ?\M-! ?d ?a ?t ?e return] 0 "%d")) ;;; Erc config (setq erc-nick "speskk") (setq erc-hide-list '("JOIN" "PART" "QUIT")) (if (file-exists-p "~/.emacs.d/.erc-auth.el") (progn (load "~/.emacs.d/.erc-auth.el") (defun connect-to-libera-erc () (interactive) (erc :server "irc.libera.chat" :port "6667" :nick "speskk" :password *libera-chat*)))) ;; Allow M-up / M-down behavior to switch windows (windmove-default-keybindings 'meta) (display-time-mode t) ;; Perl Config (setq perl-indent-parens-as-block 0 perl-indent-level 8) ;; Set to make mouse focus window (setq mouse-autoselect-window t focus-follows-mouse t) ;; Custom eshell prompt (setq eshell-prompt-function (lambda nil " λ > ")) (setq eshell-prompt-regexp "^ λ > ") (set-language-environment "UTF-8") ;; Simple rclone cli wrapper (load "~/Repos/dotfiles/emacs/elisp/rclone.el") (global-set-key (kbd "C-c o") 'rclone-post-buffer) (global-set-key (kbd "C-c C-o") 'rclone-get-org) (global-set-key (kbd "C-c C-P") 'post-region-to-pb) (global-set-key (kbd "C-c 2 p") 'display-pb) ;; Small helper functions (load "~/Repos/dotfiles/emacs/elisp/helpers.el") (global-set-key (kbd "C-c p") 'display-full-buffer-path) ;; Disable bars (menu-bar-mode -1) (tool-bar-mode -1) (scroll-bar-mode -1) ;; Load for macOS ;;; Slime/etc (if (eq system-type 'darwin) (progn ;; Configure yasnippet (setq yas-snippet-dirs '("~/Repos/dotfiles/emacs/yasnippets/")) (yas-global-mode 1) (setq inferior-lisp-program "/opt/homebrew/bin/sbcl") (load (expand-file-name "~/.local/opt/quicklisp/slime-helper.el")) ;; Font/themes/etc (load "/Users/swatson/Repos/dotfiles/emacs/mac-load/customs.el") ;; Easily set cua mode on/off so that I don't have to ;; use shift+insert for paste on mac (global-set-key (kbd "C-c c") 'cua-mode) (global-set-key (kbd "C-c n") 'toggle-frame-fullscreen) ;; Graphic Display (if (display-graphic-p) (progn (load-theme 'solarized-dark t))))) ;; Load for GUI Linux (if (eq system-type 'gnu/linux) (if (display-graphic-p) (progn (load (expand-file-name "~/quicklisp/slime-helper.el")) (setq inferior-lisp-program (locate-file "sbcl" exec-path exec-suffixes 1)) ;; https://emacs.stackexchange.com/questions/332/how-can-i-find-the-path-to-an-executable-with-emacs-lisp (setq yas-snippet-dirs '("~/Repos/dotfiles/emacs/yasnippets/")) (yas-global-mode 1) (if (file-exists-p "~/.enable_exwm") (progn (straight-use-package 'exwm) (require 'exwm) (load "~/Repos/dotfiles/emacs/linux-load/exwm-config.el") (require 'exwm-config-spw) (exwm-config-spw))) (setq visible-bell 1) (load "~/Repos/dotfiles/emacs/linux-load/customs.el") (load-theme 'solarized-light t)))) ;; Load for Term (unless (display-graphic-p) (progn (load "~/Repos/dotfiles/emacs/linux-load/customs.el") (xterm-mouse-mode t) (load (expand-file-name "~/quicklisp/slime-helper.el")) (setq inferior-lisp-program (locate-file "sbcl" exec-path exec-suffixes 1))))