emacs.d/init.el

220 lines
7.8 KiB
EmacsLisp
Executable file

(require 'server)
;; Start a server if (server-running-p) does not return t (e.g. if it
;; returns nil or :other)
(or (eq (server-running-p) t)
(server-start))
;; PACKAGE
(require 'package)
(let* ((no-ssl (and (memq system-type '(windows-nt ms-dos))
(not (gnutls-available-p))))
(proto (if no-ssl "http" "https")))
(when no-ssl
(warn "\
Your version of Emacs does not support SSL connections,
which is unsafe because it allows man-in-the-middle attacks.
There are two things you can do about this warning:
1. Install an Emacs version that does support SSL and be safe.
2. Remove this warning from your init file so you won't see it again."))
;; Comment/uncomment these two lines to enable/disable MELPA and MELPA Stable as desired
(add-to-list 'package-archives (cons "melpa" (concat proto "://melpa.org/packages/")) t)
;;(add-to-list 'package-archives (cons "melpa-stable" (concat proto "://stable.melpa.org/packages/")) t)
(when (< emacs-major-version 24)
;; For important compatibility libraries like cl-lib
(add-to-list 'package-archives (cons "gnu" (concat proto "://elpa.gnu.org/packages/")))))
(package-initialize)
;; OS SETTINGS
(when (eq system-type 'gnu/linux)
(setq custom-file "~/.emacs.d/bundle/custom_gnu.el"))
(when (eq system-type 'windows-nt)
(setq custom-file "~/.emacs.d/bundle/custom_win32.el")
(add-to-list 'load-path (expand-file-name "~/AppData/Roaming/__secrets"))
(cd "~/opt")
(when (string= (system-name) "EVG02667NB")
(add-to-list 'Info-default-directory-list "~/Info")
(setq custom-file "~/.emacs.d/bundle/custom_win32_EVG02667NB.el"))
(when (string= (system-name) "XPS-8930")))
;; CUSTOM_FILE
(load custom-file :noerror)
;; DISPLAY SETTINGS
;; General userinterface and appearance
(global-font-lock-mode t) ; Color enabled
(global-prettify-symbols-mode t) ; Prettify symbols
(global-hl-line-mode 1) ; Highlight cursor line
(global-whitespace-mode -1) ; Show whitespace globally
(show-paren-mode 1) ; Visual matching parens
(global-display-line-numbers-mode -1) ; Display line numbers
;; Mode line specific
(column-number-mode 1) ; Display column number in the mode line
(size-indication-mode -1) ; Display buffer size in the mode line
(line-number-mode 1) ; Display line number in the mode line
(display-battery-mode -1) ; Display battery status in the mode line
(display-time-mode 1) ; Display time in the mode line
;; (load-theme 'nord t)
(require 'color-theme-sanityinc-tomorrow)
;; GLOBAL KEYS
(global-set-key (kbd "C-c l") 'org-store-link)
(global-set-key (kbd "C-c a") 'org-agenda)
(global-set-key (kbd "C-c c") 'org-capture)
(global-set-key (kbd "C-c b") 'org-switchb)
;; (global-set-key (kbd "C-c C-x m") 'org-pomodoro)
(global-set-key (kbd "C-x g") 'magit-status)
(global-set-key (kbd "C-x M-g") 'magit-dispatch)
(global-set-key (kbd "M-i") 'imenu)
(global-set-key (kbd "C-c n") 'newsticker-start)
(global-set-key (kbd "M-o") 'ace-window)
;; UTF-8 FTW
(prefer-coding-system 'utf-8)
(set-default-coding-systems 'utf-8)
(set-terminal-coding-system 'utf-8)
(set-keyboard-coding-system 'utf-8)
(setq default-buffer-file-coding-system 'utf-8)
(defalias 'yes-or-no-p 'y-or-n-p)
;; PACKAGES
(ivy-mode 1)
(use-package nov
:ensure t
:config
(setq nov-text-width 80))
(use-package projectile
:ensure t
:init
(projectile-mode +1))
(use-package elpy
:ensure t
:init
(elpy-enable))
(use-package js2-mode
:ensure t
:interpreter (("node" . js2-mode))
:bind (:map js2-mode-map ("C-c C-p" . js2-print-json-path))
:mode "\\.\\(js\\|json\\)$"
:config
(add-hook 'js-mode-hook 'js2-minor-mode)
(setq js2-basic-offset 2
js2-highlight-level 3
js2-mode-show-parse-errors nil
js2-mode-show-strict-warnings nil))
(use-package web-mode
:ensure t
:mode "\\.html?\\'"
:init
(dolist (hook '(emmet-mode ac-emmet-html-setup ac-emmet-css-setup))
(add-hook 'web-mode-hook hook))
:config
(setq web-mode-markup-indent-offset 2
web-mode-css-indent-offset 2
web-mode-code-indent-offset 2
web-mode-enable-auto-pairing nil
web-mode-enable-auto-closing t
web-mode-enable-current-element-highlight t
web-mode-enable-current-column-highlight t
web-mode-ac-sources-alist
'(("css" . (ac-source-css-property ac-source-emmet-css-snippets))
("html" . (ac-source-emmet-html-aliases
ac-source-emmet-html-snippets))))
(add-hook 'web-mode-before-auto-complete-hooks
'(lambda ()
(let ((web-mode-cur-language (web-mode-language-at-pos)))
(if (string= web-mode-cur-language "css")
(setq emmet-use-css-transform t)
(setq emmet-use-css-transform nil))))))
(use-package slime
:ensure t
:config (setq inferior-lisp-program (executable-find "sbcl")))
(add-to-list 'auto-mode-alist '("\\.epub\\'" . nov-mode))
;; ORG_MODE SETTINGS
(setq org-agenda-dim-blocked-tasks nil
org-agenda-inhibit-startup nil
org-babel-shell-names (quote ("sh" "bash" "csh" "ash" "dash" "ksh" "mksh" "posh"))
org-clock-persist t
org-confirm-babel-evaluate nil
org-html-doctype "html5"
org-html-html5-fancy t
org-log-done (quote time)
org-startup-folded t
org-startup-truncated nil
org-todo-keywords (quote ((sequence "TODO" "FEEDBACK" "VERIFY" "|" "DONE" "DELEGATED")))
org-use-property-inheritance nil)
(org-clock-persistence-insinuate)
;; HOOKS
(add-hook 'diary-display-hook 'fancy-diary-display)
(add-hook 'today-visible-calendar-hook 'calendar-mark-today)
(add-hook 'write-file-hooks 'delete-trailing-whitespace)
(defun me/org-mode ()
"My custom configuration for 'org-mode'."
(olivetti-mode)
(olivetti-set-width 82))
;; (add-hook 'org-mode-hook 'me/org-mode)
(add-hook 'org-mode-hook 'turn-on-auto-fill)
(add-hook 'rst-mode-hook 'turn-on-orgstruct)
(add-hook 'newsticker-mode-hook 'imenu-add-menubar-index)
(add-to-list 'auto-mode-alist '("\\.tmpl\\'" . web-mode))
;; DIARY
(setq cal-html-directory "~/Documents/Diary"
view-diary-entries-initially t
mark-diary-entries-in-calendar t
number-of-diary-entries 7
calendar-date-style (quote iso)
calendar-week-start-day 1)
(setq calendar-intermonth-text
(quote
(propertize
(format "%2d"
(car
(calendar-iso-from-absolute
(calendar-absolute-from-gregorian
(list month day year)))))
(quote font-lock-face)
(quote font-lock-function-name-face))))
(when (string= (system-name) "EVG02667NB")
(unless (file-directory-p (expand-file-name "~/Documents"))
(let ((docs-path (getenv "DOCS_PATH")))
(setq cal-html-directory (concat docs-path "\\Diary")
diary-file (concat docs-path "\\Diary\\diary")
timeclock-file (concat docs-path "\\Diary\\timelog")))))
(provide 'calendar-settings)
(put 'narrow-to-region 'disabled nil)
(put 'narrow-to-page 'disabled nil)
;; SBCL
(defun win-set-sbcl ()
;; %USERPROFILE%\AppData\Local\Programs\emacs-26.2-x86_64\bin\emacsclientw.exe -c -n -a runemacs.exe
;; (setq inferior-lisp-program (executable-find "sbcl"))
(setq sbcl-exe (expand-file-name "~/AppData/Local/Programs/Steel Bank Common Lisp/1.4.14/sbcl.exe")
sbcl-core (expand-file-name "~/AppData/Local/Programs/Steel Bank Common Lisp/1.4.14/sbcl.core")
inferior-lisp-program "sbcl"
slime-lisp-implementations `((sbcl (,sbcl-exe "--core" ,sbcl-core)))))
(when (eq system-type 'windows-nt)
(win-set-sbcl))
(defun mk-write-mode-enable ()
(setq olivetti-body-width 73)
(setq mode-line-format nil)
(olivetti-mode))
(defun mk-write-mode-disable ()
(setq mode-line-format '(("-" mode-line-mule-info mode-line-modified mode-line-frame-identification mode-line-buffer-identification " " mode-line-position mode-line-modes (which-func-mode ("" which-func-format "--")) (global-mode-string ("--" global-mode-string)) "-%-")))
(olivetti-mode)
(defvar mode-line-format-current
(symbol-value 'mode-line-format)))