;; __ __ __ __ ______ ______ __ ;; /\ \ /\ "-.\ \ /\ \ /\__ _\ /\ ___\ /\ \ ;; \ \ \ \ \ \-. \ \ \ \ \/_/\ \/ \ \ __\ \ \ \____ ;; \ \_\ \ \_\\"\_\ \ \_\ \ \_\ \ \_____\ \ \_____\ ;; \/_/ \/_/ \/_/ \/_/ \/_/ \/_____/ \/_____/ ;;; BAD stuff (setq package-check-signature nil) ;;; Making the interface not terrible ;;; (add-to-list 'default-frame-alist '(font . "scientifica-11")) (set-face-attribute 'default t :font "scientifica-11") (menu-bar-mode -1) (tool-bar-mode -1) (scroll-bar-mode -1) (fringe-mode 0) ;;; Sane defaults ;;; (add-to-list 'load-path "~/.emacs.d/lisp/") (when (version<= "26.0.50" emacs-version) (setq display-line-numbers-type 'relative) (global-display-line-numbers-mode)) (setq server-use-tcp t) (add-to-list 'exec-path "/home/gigavinyl/.nix-profile/bin/") (global-set-key (kbd "") 'clipboard-yank) (setq x-select-enable-primary t) (setq x-select-enable-clipboard t) (setq-default word-wrap t) ; wrap lines (setq delete-old-versions -1) ; delete excess backup versions silently (setq version-control t) ; use version control (setq vc-make-backup-files t) ; make backups file even when in version controlled dir (setq backup-directory-alist `(("." . "~/.emacs.d/backups"))) ; which directory to put backups file (setq vc-follow-symlinks t) ; don't ask for confirmation when opening symlinked file (setq auto-save-file-name-transforms '((".*" "~/.emacs.d/auto-save-list/" t))) ;transform backups file name (setq inhibit-startup-screen t) ; inhibit useless and old-school startup screen (setq ring-bell-function 'ignore) ; silent bell when you make a mistake (setq coding-system-for-read 'utf-8) ; use utf-8 by default (setq coding-system-for-write 'utf-8) (set-language-environment "UTF-8") (setq sentence-end-double-space nil) ; sentence SHOULD end with only a point. (setq default-fill-column 80) ; toggle wrapping text at the 80th character (setq-default indent-tabs-mode nil) ; tabs to spaces (setq tab-width 2) (global-set-key "\C-m" 'newline-and-indent) ;; Scratch Buffer ;; (setq initial-scratch-message ;; (format ;; ";; %s\n\n" ;; (replace-regexp-in-string ;; "\n" "\n;; " ; comment each line ;; (replace-regexp-in-string ;; "\n$" "" ; remove trailing linebreak ;; (shell-command-to-string "toilet -d ~/labs/figlet-fonts -f Sub-Zero Im\ Gay"))))) ;;; Setup Recent Files (recentf-mode 1) (setq recentf-max-menu-items 25) (global-set-key "\C-x\ \C-r" 'recentf-open-files) ;;; Use package ;;; (setq package-enable-at-startup nil) ; tells emacs not to load any packages before starting up ;; the following lines tell emacs where on the internet to look up ;; for new packages. (setq package-archives '(("org" . "http://orgmode.org/elpa/") ("gnu" . "http://elpa.gnu.org/packages/") ("melpa" . "https://melpa.org/packages/") ("marmalade" . "http://marmalade-repo.org/packages/"))) (package-initialize) ; guess what this one does ? ; Bootstrap `use-package' (unless (package-installed-p 'use-package) ; unless it is already installed (package-refresh-contents) ; updage packages archive (package-install 'use-package)) ; and install the most recent version of use-package (require 'use-package) ; guess what this one does too ? (use-package auto-package-update :config (setq auto-package-update-delete-old-versions t) (setq auto-package-update-hide-results t) (auto-package-update-maybe)) ;; 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)) (setq straight-use-package-by-default t) (setq straight-vc-git-default-protocol 'ssh) (setq straight-check-for-modifications 'live) ;;; Evil!! ; General (use-package general :config (setq general-default-prefix "") (general-evil-setup)) ; Undo-tree (use-package undo-tree) ;goto-chg (use-package goto-chg) ; evil-mode (use-package evil :init (setq evil-want-C-i-jump nil) :config (evil-mode 1) (setq evil-mode-line-format '(before . mode-line-front-space)) (setq-default display-line-numbers 'visual display-line-numbers-widen t ;; this is the default display-line-numbers-current-absolute t) (defun noct:relative () (setq-local display-line-numbers 'visual)) (defun noct:absolute () (setq-local display-line-numbers t)) (add-hook 'evil-insert-state-entry-hook #'noct:absolute) (add-hook 'evil-insert-state-exit-hook #'noct:relative) (custom-set-faces '(line-number ((t :foreground "brightblack")))) (custom-set-faces '(line-number-current-line ((t :weight bold :foreground "white"))))) ; evil-collection (use-package evil-collection :config (evil-collection-init)) ; evil-escape (use-package evil-escape :config (setq-default evil-escape-key-sequence "jk") (evil-escape-mode)) ; evil- commentary (use-package evil-commentary :config (evil-commentary-mode)) (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. '(line-number ((t :foreground "brightblack"))) '(line-number-current-line ((t :weight bold :foreground "white")))) ;;; Editing Packages (use-package powerthesaurus) (use-package lsp-mode) (use-package lsp-ui :commands lsp-ui-mode) (use-package company-lsp :commands company-lsp) (use-package helm-lsp :commands helm-lsp-workspace-symbol) ;; optionally if you want to use debugger (use-package dap-mode) (use-package evil-snipe :config (evil-snipe-mode +1) (evil-snipe-override-mode +1)) ;parinfer (use-package parinfer :general (general-nmap "," 'parinfer-toggle-mode) :config (setq parinfer-extensions '(defaults pretty-parens smart-yank smart-tab paredit evil)) :init (progn (setq parinfer-extensions '(defaults ; should be included. pretty-parens ; different paren styles for different modes. evil ; If you use Evil. ;; lispy ; If you use Lispy. With this extension, you should install Lispy and do not enable lispy-mode directly. smart-tab ; C-b & C-f jump positions and smart shift with tab & S-tab. smart-yank)) ; Yank behavior depend on mode. (add-hook 'clojure-mode-hook #'parinfer-mode) (add-hook 'emacs-lisp-mode-hook #'parinfer-mode) (add-hook 'common-lisp-mode-hook #'parinfer-mode) (add-hook 'scheme-mode-hook #'parinfer-mode) (add-hook 'lisp-mode-hook #'parinfer-mode))) ;yasnippet (use-package yasnippet :config (yas-global-mode 1)) ; focus-mode (use-package focus :commands focus-mode) (use-package writeroom-mode :commands writeroom-mode) ; flyspell (use-package flyspell :after (:any tex org) :config (setq ispell-program-name "aspell") ;; Please note ispell-extra-args contains ACTUAL parameters passed to aspell (setq ispell-extra-args '("--sug-mode=ultra" "--lang=en_US"))) ; company-mode (use-package company :config (add-hook 'after-init-hook 'global-company-mode)) (use-package pos-tip :after compmay) (use-package company-quickhelp :after company :config (company-quickhelp-mode)) ;flycheck (use-package flycheck :config (global-flycheck-mode)) (use-package flycheck-pos-tip :after flycheck :config (with-eval-after-load 'flycheck (flycheck-pos-tip-mode))) ; lsp (use-package lsp-mode :hook (XXX-mode . lsp) :commands lsp) ;; optionally (use-package lsp-ui :commands lsp-ui-mode :config (add-hook 'lsp-mode-hook 'lsp-ui-mode)) (use-package company-lsp :commands company-lsp) (use-package helm-lsp :commands helm-lsp-workspace-symbol) (use-package lsp-treemacs :commands lsp-treemacs-errors-list) ;;; Evil!! ; General (use-package general :config (setq general-default-prefix "") (general-evil-setup)) ; Undo-tree (use-package undo-tree) ;goto-chg (use-package goto-chg) ; evil-mode (use-package evil :init (setq evil-want-C-i-jump nil) :config (evil-mode 1) (setq evil-mode-line-format '(before . mode-line-front-space)) (setq-default display-line-numbers 'visual display-line-numbers-widen t ;; this is the default display-line-numbers-current-absolute t) (defun noct:relative () (setq-local display-line-numbers 'visual)) (defun noct:absolute () (setq-local display-line-numbers t)) (add-hook 'evil-insert-state-entry-hook #'noct:absolute) (add-hook 'evil-insert-state-exit-hook #'noct:relative) (custom-set-faces '(line-number ((t :foreground "brightblack")))) (custom-set-faces '(line-number-current-line ((t :weight bold :foreground "white"))))) ; evil-escape (use-package evil-escape :config (setq-default evil-escape-key-sequence "jk") (evil-escape-mode)) ; evil- commentary (use-package evil-commentary :config (evil-commentary-mode)) ;;; Interface ;;theme (use-package ewal-doom-themes :straight (ewal-doom-themes :host gitlab :repo "jjzmajic/ewal" :branch "develop" :files ("doom-themes/*.el") :depth full)) (load-theme 'ewal-doom-one t) (enable-theme 'ewal-doom-one) (use-package multi-term :config (setq term-term-name "xterm") (defun j/configure-term () (setq truncate-lines 1) (define-key term-raw-map (kbd "C-y") 'term-paste) (add-hook 'term-mode-hook 'j/configure-term t))) (use-package helm-mt) ; fix those pesky highligts (set-face-attribute 'region nil :background "brightblack") ;all-the-icons (use-package all-the-icons) ;neo-tree (use-package neotree :config (setq neo-theme (if (display-graphic-p) 'icons 'arrow)) (global-set-key [f8] 'neotree-toggle)) ;which-key (use-package which-key :config (which-key-mode) (setq which-key-allow-evil-operators t)) ;rainbow-delimiters (use-package rainbow-delimiters :config (add-hook 'prog-mode-hook #'rainbow-delimiters-mode)) ; rich-minority (use-package rich-minority :config (setq rm-whitelist "*") (rich-minority-mode 1)) ;; ; smart-mode-line ;; (use-package smart-mode-line ;; :config ;; (setq sml/theme 'respectful) ;; (setq sml/no-confirm-load-theme t) ;; (sml/setup)) ;; doom-modeline (use-package doom-modeline :config (setq doom-modeline-icon nil) (if window-system (setq doom-modeline-unicode-fallback t)) (setq doom-modeline-buffer-file-name-style 'truncate-upto-project) (setq doom-modeline-major-mode-color-icon t) (setq doom-modeline-continuous-word-count-modes '(markdown-mode gfm-mode org-mode)) (setq doom-modeline-modal-icon t) (setq doom-modeline-env-version t) (setq inhibit-compacting-font-caches t) :hook (after-init . doom-modeline-mode)) (set-face-attribute 'mode-line nil :box '(:line-width 0)) ;; helm (autoload 'dired-async-mode "dired-async.el" nil t) (dired-async-mode 1) (use-package helm :config (global-set-key (kbd "C-x C-f") #'helm-find-files) (require 'helm-config) (setq helm-mode-fuzzy-match t) (setq helm-completion-in-region-fuzzy-match t) (helm-mode 1)) (use-package smex :config (smex-initialize) :general (general-nmap ":" 'smex)) ; Parens (show-paren-mode 1) (set-face-background 'show-paren-match (face-background 'default)) (set-face-foreground 'show-paren-match "#def") (set-face-attribute 'show-paren-match nil :weight 'extra-bold :underline t) (use-package highlight-parentheses :init (add-hook 'highlight-parentheses-mode-hook) '(lambda () (setq autopair-handle-action-fns (append))) (if autopair-handle-action-fns autopair-handle-action-fns '(autopair-default-handle-action)) '((lambda (action pair pos-before)) (hl-paren-color-update))) (define-globalized-minor-mode global-highlight-parentheses-mode highlight-parentheses-mode (lambda () (highlight-parentheses-mode t))) (global-highlight-parentheses-mode t) (use-package smartparens :config (require 'smartparens-config) (smartparens-global-mode 1)) ;;; Elm (use-package elm-mode :mode ("\\.elm\\'" . elm-mode) :interpreter ("elm" . elm-mode)) ;;; Elixir (use-package elixir-mode :mode ("\\.ex*\\'" . elixir-mode) :interpreter ("ex*" . elixir-mode)) (use-package alchemist :after elixir-mode) ;;; Org Mode ; org (use-package org :mode ("\\.org\\'" . org-mode) :interpreter ("org" . org-mode) :general (general-nmap "oa" 'org-agenda) :config (setq org-agenda-files '("~/org/")) (setq org-agenda-include-diary t) (setq org-todo-keywords '((sequence "TODO" "IN-PROGRESS" "WAITING" "|" "DONE" "CANCELED"))) (define-key global-map "\C-cl" 'org-store-link) (custom-set-variables) '(org-directory "~/.org") '(org-agenda-files (list org-directory))) (use-package calfw) (use-package calfw-cal) (use-package calfw-org) (setq org-agenda-window-setup (quote current-window)) ;;warn me of any deadlines in next 7 days (setq org-deadline-warning-days 7) ;;show me tasks scheduled or due in next fortnight (setq org-agenda-span (quote fortnight)) ;;don't show tasks as scheduled if they are already shown as a deadline (setq org-agenda-skip-scheduled-if-deadline-is-shown t) ;;don't give awarning colour to tasks with impending deadlines ;;if they are scheduled to be done (setq org-agenda-skip-deadline-prewarning-if-scheduled (quote pre-scheduled)) ;;don't show tasks that are scheduled or have deadlines in the ;;normal todo list (setq org-agenda-todo-ignore-deadlines (quote all)) (setq org-agenda-todo-ignore-scheduled (quote all)) ;;sort tasks in order of when they are due and then by priority (setq org-agenda-sorting-strategy (quote ((agenda deadline-up priority-down) (todo priority-down category-keep) (tags priority-down category-keep) (search category-keep)))) (use-package org-bullets :config (add-hook 'org-mode-hook (lambda () (org-bullets-mode 1)))) ; evil-org (use-package evil-org :after org :config (add-hook 'org-mode-hook 'evil-org-mode) (add-hook 'evil-org-mode-hook (lambda () (evil-org-set-key-theme '(textobjects insert navigation additional shift todo heading)))) (require 'evil-org-agenda) (evil-org-agenda-set-keys)) ;org-journal ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; (use-package org-journal :custom (org-journal-dir "~/org/journal/") (org-journal-date-format "%A, %d %B %Y")) (use-package toc-org) (add-to-list 'load-path "~/.emacs.d/toc-org") (if (require 'toc-org nil t) (add-hook 'org-mode-hook 'toc-org-mode) ;; enable in markdown, too (add-hook 'markdown-mode-hook 'toc-org-mode) u (define-key markdown-mode-map (kbd "\C-c\C-o") 'toc-org-markdown-follow-thing-at-point) (warn "toc-org not found")) ;;; Emacs-lisp (use-package suggest) ;;; LaTeX ;; (use-package tex ;; :straight auctex ;; :mode ("\\.tex\\'" . LaTeX-mode) ;; :interpreter ("tex" . LaTeX-mode) ;; :config ;; (setq TeX-save-query nil) ;; (add-hook 'LaTeX-mode-hook 'turn-on-auto-fill) ;; (setq TeX-source-correlate-mode t) ;; (setq LaTeX-item-indent 1) ;; (setq TeX-auto-save t) ;; (setq TeX-parse-self t) ;; (setq-default TeX-master nil) ;; (add-hook 'LaTeX-mode-hook 'visual-line-mode) ;; (add-hook 'LaTeX-mode-hook 'flyspell-mode) ;; (add-hook 'LaTeX-mode-hook 'LaTeX-math-mode) ;; (add-hook 'LaTeX-mode-hook 'turn-on-reftex) ;; (add-hook 'LaTeX-mode-hook 'TeX-interactive-mode) ;; (add-hook 'LaTeX-mode-hook 'TeX-source-correlate-mode) ;; (setq TeX-view-program-selection '((output-pdf "Zathura"))) ;; (eval-after-load "tex" ;; '(progn ;; (add-to-list ;; 'TeX-engine-alist ;; '(default-shell-escape "Default with shell escape" ;; "pdftex -shell-escape" ;; "pdflatex -shell-escape" ;; ConTeXt-engine)))) ;; ;; (setq-default TeX-engine 'default-shell-escape) ;; (setq reftex-plug-into-AUCTeX t)) ;; (use-package company-auctex ;; :after tex ;; :config ;; (company-auctex-init)) ;; (use-package company-math ;; :after tex ;; :config ;; (defun my-latex-mode-setup () ;; (setq-local company-backends ;; (append '((company-math-symbols-latex company-math-symbols-unicode company-latex-commands company-auctex)) ;; company-backends))) ;; (add-hook 'TeX-mode-hook 'my-latex-mode-setup)) ;;; projects ; projectile ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; (use-package projectile :general (general-nmap "p" '(:keymap projectile-command-map :wk "projectile prefix"))) ; magit ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; (use-package magit) (use-package forge) (use-package git-gutter :config (global-git-gutter-mode +1)) (use-package evil-magit) ;;; Misc (use-package gopher :commands gopher) ;; (use-package erc) ;; (require 'erc-nicklist) ;; (setq erc-autojoin-channels-alist ;; '(("freenode.net" "#emacs" "#erc" "##crawl" "#iww" "#clojure" "#rust" "#haskell" "#NetBSD" "#pkgsrc" "#go-nuts"))) ;; ;; (erc-ssl :server "irc.freenode.net" :port 6697 :nick "gigavinyl") ;; ;; (erc-ssl :server "irc.oftc.net" :port 6697 :nick "gigavinyl") ;; ;;(erc :server "irc.indymedia.org" :port 6667 :nick "gigavinyl") ;; (use-package erc-colorize) ;; (use-package erc-status-sidebar) ;; (use-package erc-youtube) ;; (use-package erc-yt) ;; (use-package erc-social-graph) ;; (require 'erc-sasl) ;; (add-to-list 'erc-sasl-server-regexp-list "irc.freenode.net") ;; circe (use-package circe :general (general-nmap "i" 'circe)) (setq auth-sources '("~/.authinfo.gpg")) (defun my-fetch-password (&rest params) (require 'auth-source) (let ((match (car (apply 'auth-source-search params)))) (if match (let ((secret (plist-get match :secret))) (if (functionp secret) (funcall secret) secret)) (error "Password not found for %S" params)))) (defun my-nickserv-password (server) (my-fetch-password :login "gigavinyl" :machine "irc.freenode.net")) (setq circe-network-options '(("Freenode" :nick "gigavinyl" :channels (:after-auth "#emacs" "#emacs-circe" "##rust" "#clojure" "#iww" "#foodnotbombs" "#anarchism" "#NetBSD" "#pkgsrc") :nickserv-password my-nickserv-password))) (use-package deadgrep :config (global-set-key (kbd "") #'deadgrep)) (use-package elfeed :general (general-nmap "f" 'elfeed)) (use-package tramp) (use-package mentor :config (autoload 'mentor "mentor" nil t)) ;notmuch (require 'notmuch) (defun message-recipients () "Return a list of all recipients in the message, looking at TO, CC and BCC. Each recipient is in the format of `mail-extract-address-components'." (mapcan (lambda (header) (let ((header-value (message-fetch-field header))) (and header-value (mail-extract-address-components header-value t)))) '("To" "Cc" "Bcc"))) (defun message-all-epg-keys-available-p () "Return non-nil if the pgp keyring has a public key for each recipient." (require 'epa) (let ((context (epg-make-context epa-protocol))) (catch 'break (dolist (recipient (message-recipients)) (let ((recipient-email (cadr recipient))) (when (and recipient-email (not (epg-list-keys context recipient-email))) (throw 'break nil)))) t))) (defun message-sign-encrypt-if-all-keys-available () "Add MML tag to encrypt message when there is a key for each recipient. Consider adding this function to `message-send-hook' to systematically send encrypted emails when possible." (when (message-all-epg-keys-available-p) (mml-secure-message-sign-encrypt))) (add-hook 'message-send-hook #'message-sign-encrypt-if-all-keys-available) ;(require 'ol-notmuch) (use-package helm-notmuch :general (general-nmap "nm" 'helm-notmuch)) (setq notmuch-saved-searches '((:name "unread" :query "tag:inbox and tag:unread" :count-query "tag:unread and tag:inbox" :sort-order newest-first) (:name "inbox" :query "tag:inbox" :count-query "tag:inbox" :sort-order newest-first) (:name "sent" :query "tag:sent" :count-query "tag:sent" :sort-order newest-first))) (setq mail-specify-envelope-from t) (setq message-sendmail-envelope-from 'header) (setq mail-envelope-from 'header) (setq sendmail-program "/usr/pkg/bin/msmtp") (require 'notmuch-address) (setq notmuch-address-command "/usr/local/bin/nottoomuch-addresses.sh") (setq notmuch-address-selection-function (lambda (prompt collection initial-input) (completing-read prompt (cons initial-input collection) nil t nil 'notmuch-address-history))) (add-hook 'message-setup-hook 'mml-secure-sign-pgpmime) (setq notmuch-crypto-process-mime t) (define-key notmuch-search-mode-map "g" 'notmuch-poll-and-refresh-this-buffer) (define-key notmuch-hello-mode-map "g" 'notmuch-poll-and-refresh-this-buffer) (define-key notmuch-search-mode-map "d" (lambda () "toggle deleted tag for thread" (interactive) (if (member "deleted" (notmuch-search-get-tags)) (notmuch-search-tag '("-deleted")) (notmuch-search-tag '("+deleted" "-inbox" "-unread"))))) (define-key notmuch-search-mode-map "!" (lambda () "toggle unread tag for thread" (interactive) (if (member "unread" (notmuch-search-get-tags)) (notmuch-search-tag '("-unread")) (notmuch-search-tag '("+unread"))))) (define-key notmuch-show-mode-map "d" (lambda () "toggle deleted tag for message" (interactive) (if (member "deleted" (notmuch-show-get-tags)) (notmuch-show-tag '("-deleted")) (notmuch-show-tag '("+deleted" "-inbox" "-unread"))))) (define-key notmuch-search-mode-map "a" (lambda () "toggle archive" (interactive) (if (member "archive" (notmuch-search-get-tags)) (notmuch-search-tag '("-archive")) (notmuch-search-tag '("+archive" "-inbox" "-unread"))))) (define-key notmuch-show-mode-map "a" (lambda () "toggle archive" (interactive) (if (member "archive" (notmuch-show-get-tags)) (notmuch-show-tag '("-archive")) (notmuch-show-tag '("+archive" "-inbox" "-unread"))))) (define-key notmuch-hello-mode-map "i" (lambda () (interactive) (notmuch-hello-search "tag:inbox"))) (define-key notmuch-hello-mode-map "u" (lambda () (interactive) (notmuch-hello-search "tag:unread"))) (define-key notmuch-hello-mode-map "a" (lambda () (interactive) (notmuch-hello-search "tag:archive"))) (use-package w3m) (require 'sr-speedbar) (use-package exec-path-from-shell :config (when (memq window-system '(mac ns x)) (exec-path-from-shell-initialize))) (use-package rainbow-delimiters :config (add-hook 'prog-mode-hook #'rainbow-delimiters-mode)) (use-package editorconfig :config (editorconfig-mode 1)) (use-package aggressive-indent :config (global-aggressive-indent-mode 1)) ;(add-to-list 'load-path "~/.emacs.d/scel/el") ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ;(require 'sclang) ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ;;; Rust (use-package rustic :mode ("\\.rs\\'" . rustic) :interpreter ("rust" . rustic)) (use-package flycheck-rust ; :config (with-eval-after-load 'rustic (add-hook 'flycheck-mode-hook #'flycheck-rust-setup)) :after rustic) (use-package racer :after rust-mode :config (add-hook 'rustic-hook #'racer-mode) (add-hook 'rustic-hook #'eldoc-mode) (add-hook 'racer-mode-hook #'company-mode) (define-key rust-mode-map (kbd "TAB") #'company-indent-or-complete-common) (setq company-tooltip-align-annotations t)) (use-package toml-mode :mode ("\\.toml\\'" . toml-mode) :interpreter ("rust" . toml-mode)) ;;; Go (use-package go-mode :mode ("\\.go\\'" . go-mode) :interpreter ("go" . go-mode) :config (add-hook 'go-mode-hook 'lsp-deferred)) (use-package gorepl-mode :after go-mode :config (add-hook 'go-mode-hook #'gorepl-mode)) (use-package gotest :after go-mode) ;;; Haskell (use-package haskell-mode :mode ("\\.hs\\'" . haskell-mode) :interpreter ("haskell" . haskell-mode)) (use-package lsp-haskell :config (add-hook 'haskell-mode-hook #'lsp)) ;;; Clojure ;; (use-package clojure-mode ;; :mode ("\\.clj*\\'" . clojure-mode) ;; :interpreter ("clojure" . clojure-mode)) ;; (use-package cider ;; :after clojure-mode ;; :config ;; (add-hook 'clojure-mode-hook #'cider-mode) ;; (setq nrepl-hide-special-buffers t)) ;; (use-package emidje ;; :after clojure-mode ;; :config ;; (eval-after-load 'cider ;; #'emidje-setup)) ;; (use-package flycheck-clojure ;; :after flycheck ;; :config ;; (eval-after-load 'flycheck '(flycheck-clojure-setup)) ;; (add-hook 'after-init-hook #'global-flycheck-mode)) ;; (use-package clj-refactor ;; :after clojure-mode ;; :config ;; (defun my-clojure-mode-hook () ;; (clj-refactor-mode 1 ;; (yas-minor-mode 1)) ;; (cljr-add-keybindings-with-prefix "C-c C-m")) ;; (add-hook 'clojure-mode-hook #'my-clojure-mode-hook)) ; for adding require/use/import statements ;; (use-package clojure-snippets ;; :after clojure-mode) ;;; Misc langs (use-package yaml-mode :mode ("\\.yaml\\'" . yaml-mode) :interpreter ("yaml" . yaml-mode)) (general-define-key :states 'normal "b" 'helm-buffers-list "rl" 'load-file "~/emacs.d/init.el") ;; byte-compile (defun byte-compile-current-buffer () "`byte-compile' current buffer if it's emacs-lisp-mode and compiled file exists." (interactive) (when (and (eq major-mode 'emacs-lisp-mode) (file-exists-p (byte-compile-dest-file buffer-file-name))) (byte-compile-file buffer-file-name))) (add-hook 'after-save-hook #'byte-compile-current-buffer) (defun goto-match-paren (arg) "Go to the matching parenthesis if on parenthesis, otherwise insert %. vi style of % jumping to matching brace." (interactive "p") (cond ((looking-at "\\s\(\") (forward-list 1) (backward-char 1) ((looking-at \"\\s\)\") (forward-char 1) (backward-list 1)) (t (self-insert-command (or arg 1)))))\)")))) (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. '(browse-url-browser-function 'browse-url-firefox) '(custom-safe-themes '("c74e83f8aa4c78a121b52146eadb792c9facc5b1f02c917e3dbb454fca931223" "e4c8810d9ab925567a69c11d5c95d198a4e7d05871453b2c92c020712559c4c1" default)) '(elfeed-feeds '("https://therealnews.com/feed" "https://blog.netbsd.org/tnf/feed/entries/atom" "http://libcom.org/library-latest/feed" "https://itsgoingdown.org/feed/podcast/" "https://crimethinc.com/feed" "https://www.indybay.org/syn/generate_rss.php?page_id=60&include_posts=1&include_blurbs=1" "https://www.indybay.org/syn/generate_rss.php?page_id=12&include_posts=1&include_blurbs=1" "https://unicornriot.ninja/feed/" "https://blackrosefed.org/feed/" "http://news.infoshop.org/feed/" "https://antifascistnews.net/feed/" "https://en.squat.net/feed/" "https://enoughisenough14.org/feed/" "https://thefreeonline.wordpress.com/feed/" "https://www.redpepper.org.uk/feed" "https://anarchistnews.org/rss.xml" "https://waronsociety.noblogs.org/?feed=rss2" "https://en-contrainfo.espiv.net/feed/" "https://earthfirstjournal.org/newswire/feed/" "https://anarchistwithoutcontent.wordpress.com/feed/" "https://countervortex.org/node/feed" "http://ideasandaction.info/feed/" "https://industrialworker.iww.org/?feed=rss2" "https://www.iww.org/node/feed" "https://transfelinism.wordpress.com/feed/" "https://yogthos.net/feed.xml")) '(helm-completion-style 'emacs) '(lui-buttons-list '(("\\(?:id\\|mid\\|thread\\):[0-9A-Za-z][0-9A-Za-z.@-]*" 0 notmuch-show 0) ("`\\([A-Za-z0-9+=*/-]+\\)'" 1 lui-button-elisp-symbol 1) ("\\