dotfiles/emacs.d/init.el

351 lines
9.4 KiB
EmacsLisp

:;; -*- origami-fold-style: triple-braces -*-
; customise {{{
(custom-set-variables
;; custom-set-variables was added by Custom.
;; If you edit it by hand, you could mess it up, so be careful.
;; Your init file should contain only one such instance.
;; If there is more than one, they won't work right.
'(custom-safe-themes
'("9e22d3e0196f248120d200012f4983bfb68ed322e294199a30d16c45b2dee99b" "3f7b4c736ffe0a373b06ce3d97c26b9e559bbc4f9b2e50e4b53143f0b0d7eb2c" default))
'(safe-local-variable-values '((origami-fold-style . triple-braces)))
'(tool-bar-mode nil)
'(warning-suppress-log-types '(((unlock-file)) ((unlock-file)) ((unlock-file))))
'(warning-suppress-types '(((unlock-file)) ((unlock-file)))))
(custom-set-faces
;; custom-set-faces was added by Custom.
;; If you edit it by hand, you could mess it up, so be careful.
;; Your init file should contain only one such instance.
;; If there is more than one, they won't work right.
'(default ((t (:family "Source Code Pro" :foundry "ADBO" :slant normal :weight normal :height 203 :width normal)))))
;}}}
; bootstrap straight.el {{{
(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 {{{
(straight-use-package 'use-package)
(setq straight-use-package-by-default t)
; org needs to be immidiately after bootstrap or it errors.
(use-package org
:config
(setq org-log-done t
org-enforce-todo-dependencies t
org-enforce-todo-checkbox-dependencies t
org-element-use-cache nil))
; convenience {{{
(use-package diminish)
(use-package smex
:bind
(("M-x" . 'smex)))
(use-package rainbow-delimiters)
(use-package ibuffer
:bind
(("C-x C-b" . 'ibuffer)
:map ibuffer-mode-map
("j" . 'next-line)
("k" . 'previous-line)))
(use-package undo-tree
:diminish 'undo-tree-mode
:init
(global-undo-tree-mode 1))
(use-package origami
:config
(global-origami-mode))
(use-package neotree
:disabled
:bind (("<f11>" . 'neotree-toggle)))
(use-package elscreen
:after evil
:config
(elscreen-start)
:bind
(
:map evil-normal-state-map
("C-w t" . 'elscreen-create)
("C-w x" . 'elscreen-kill)
("gT" . 'elscreen-previous)
("gt" . 'elscreen-next)))
(use-package treemacs
:bind
(("<f11>" . 'treemacs)))
(use-package avy)
; }}}
; evil {{{
(use-package evil
:init
(progn
(setq evil-undo-system 'undo-tree)
(setq evil-want-keybinding nil)
)
:config
(progn
(evil-mode 1)
(setq evil-shift-width 4)))
(use-package evil-leader
:after evil
:config
(progn
(global-evil-leader-mode)
))
(use-package evil-surround
:after evil
:config
(progn
(global-evil-surround-mode 1)))
(use-package evil-smartparens
:after evil)
(use-package evil-org)
(use-package evil-collection
:straight t
:after evil
:ensure t
:config
(evil-collection-init))
(use-package treemacs-evil
:after (treemacs evil)
:ensure t)
; }}}
; project management {{{
(use-package magit)
(use-package treemacs-magit
:after (treemacs magit)
:ensure t)
(use-package editorconfig)
(use-package projectile
:config
(progn (projectile-mode +1))
:bind
(
:map projectile-mode-map
("s-p" . 'projectile-command-map)
("C-c p" . 'projectile-command-map)))
(use-package treemacs-projectile
:after (treemacs projectile)
:ensure t)
; }}}
; emacs lisp {{{
(use-package el-patch)
; }}}
; Theming {{{
(use-package molokai-theme
:config
(load-theme 'molokai t))
(use-package abyss-theme
:disabled
:config
(load-theme 'abyss t))
(use-package uwu-theme
:disabled
:config
(load-theme 'uwu t)
:straight (uwu-theme
:host github
:repo "kborling/uwu-theme"))
(use-package powerline
:config
(powerline-default-theme))
(use-package airline-themes
:after powerline
:config
(progn
(load-theme 'airline-molokai)))
; }}}
; LSP {{{
(use-package lsp-mode)
(use-package lsp-ui)
(use-package ccls
:disabled
:after lsp
:hook ((c-mode c++-mode objc-mode cuda-mode) .
(lambda () (require 'ccls) (lsp))))
(use-package company-lsp)
(use-package lsp-treemacs)
; }}}
; Editing {{{
(use-package flycheck)
(use-package company)
(use-package company-quickhelp)
(use-package yasnippet)
; }}}
; languages {{{
(use-package elixir-mode)
(use-package racket-mode)
(use-package rust-mode)
(use-package nix-mode)
(use-package dap-mode)
; }}}
(use-package dashboard
:init
(setq dashboard-set-footer nil)
:custom
(dashboard-startup-banner 'logo)
(dashboard-items '((recents . 5)
(projects . 5)
(agenda . 5)))
(initial-buffer-choice (lambda () (get-buffer-create "*dashboard*")))
:config
(dashboard-setup-startup-hook))
(use-package which-key
:config (which-key-mode))
(use-package easy-jekyll
:init
(setq easy-jekyll-basedir "~/Projects/blog/")
(setq easy-jekyll-url "https://foxiepa.ws")
(setq easy-jekyll-sshdomain "foxiepa.ws")
(setq easy-jekyll-root "/srv/www/foxiepa.ws/htdocs/")
(setq easy-jekyll-previewtime "300"))
;;}}}
; graphical mode {{{
(when (display-graphic-p)
(tool-bar-mode -1)
(scroll-bar-mode -1)
(defun transparency (value)
"Sets the transparency of the frame window. 0=transparent/100=opaque"
(interactive "nTransparency Value 0 - 100 opaque:")
(set-frame-parameter (selected-frame) 'alpha value)))
; }}}
; mac settings {{{
(when (eq system-type 'darwin)
(setenv "PATH" "/Users/rachel/.nix-profile/bin:/usr/local/bin:/bin:/usr/bin/:/sbin:/usr/sbin" t)
(setq mac-right-option-modifier 'none)
(setq mac-option-modifier 'meta)
(setq mac-command-modifier 'super)
(setq ns-use-native-fullscreen t)
(setq frame-resize-pixelwise t)
(menu-bar-mode -1) ; we have a global menu so this is uneeded
(toggle-frame-fullscreen))
;;}}}
; programming {{{
; emacs lisp {{{
(add-hook 'emacs-lisp-mode-hook
(lambda ()
(linum-mode)
(setq comment-column 0)))
;;}}}
; perl {{{
(defalias 'perl-mode 'cperl-mode)
; tell Flycheck to actually use our local perl. {{{
(defun do-flycheck-perlbrew ()
(let ((userdir (expand-file-name "~/")))
(setq
flycheck-perl-executable (concat userdir "perl5/perlbrew/perls/perl-5.26.1/bin/perl"))
(setq
flycheck-perl-include-path
(list
(concat userdir "perl5/perlbrew/perls/perl-5.26.1/lib/5.26.1")
(concat userdir "perl5/perlbrew/perls/perl-5.26.1/lib/site_perl/5.26.1")
(when (eq system-type 'darwin)
(concat userdir "perl5/perlbrew/perls/perl-5.26.1/lib/5.26.1/darwin-2level")
(concat userdir "perl5/perlbrew/perls/perl-5.26.1/lib/site_perl/5.26.1/darwin-2level"))
))))
;}}}
;; perl file hooks
(add-hook 'cperl-mode-hook
(lambda ()
(linum-mode)
(cperl-set-style "PerlStyle")
(flycheck-mode)
(do-flycheck-perlbrew)
))
;}}}
; haskell {{{
(add-hook 'haskell-mode-hook 'turn-on-haskell-indent)
(add-hook 'haskell-mode-hook
(lambda ()
(flycheck-mode)))
(eval-after-load "align"
'(add-to-list 'align-rules-list
'(haskell-types
(regexp . "\\(\\s-+\\)\\(::\\|∷\\)\\s-+")
(modes quote (haskell-mode literate-haskell-mode)))))
(eval-after-load "align"
'(add-to-list 'align-rules-list
'(haskell-assignment
(regexp . "\\(\\s-+\\)=\\s-+")
(modes quote (haskell-mode literate-haskell-mode)))))
(eval-after-load "align"
'(add-to-list 'align-rules-list
'(haskell-arrows
(regexp . "\\(\\s-+\\)\\(->\\|→\\)\\s-+")
(modes quote (haskell-mode literate-haskell-mode)))))
(eval-after-load "align"
'(add-to-list 'align-rules-list
'(haskell-left-arrows
(regexp . "\\(\\s-+\\)\\(<-\\|←\\)\\s-+")
(modes quote (haskell-mode literate-haskell-mode)))))
;}}}
; racket {{{
(add-hook 'racket-mode-hook
(lambda ()
(linum-mode)
(flycheck-mode)))
;}}}
; c / c++ {{{
(setq c-basic-style "k&r"
c-basic-offset 4)
(add-hook 'c-mode-hook
(lambda ()
(linum-mode)
(flycheck-mode)))
(add-hook 'c++-mode-hook
(lambda ()
(linum-mode)
(flycheck-mode)))
(add-hook 'c-mode-hook #'lsp)
(add-hook 'c++-mode-hook #'lsp)
; QT {{{
;}}}
;}}}
; nix {{{
;(add-to-list 'lsp-language-id-configuration '(nix-mode . "nix"))
;(lsp-register-client
;(make-lsp-client :new-connection (lsp-stdio-connection '("rnix-lsp"))
; :major-modes '(nix-mode)
; :server-id 'nix))
; }}}
;}}}
; org mode {{{
(add-hook 'org-mode-hook
(lambda ()
(auto-fill-function)
(flyspell-mode)))
;}}}
; basic editing {{{
(setq text-width 4
standard-indent 4
indent-tabs-mode t
enable-local-variables t
)
;}}}
; Backups and undotree {{{
(setq backup-directory-alist
`(("." . "~/.emacs.d/saves")))
(setq undo-tree-history-directory-alist
`(("." . "~/.emacs.d/undo-tree")))
(setq auto-save-file-name-transforms
`((".*" "~/.emacs.d/auto-saves/" t)))
(setq backup-by-copying t)
(setq delete-old-versions t
kept-new-versions 3
kept-old-versions 2
version-control t)
;}}}