diff --git a/config.el b/config.el index f6d9bea..2bf8ccb 100644 --- a/config.el +++ b/config.el @@ -1,26 +1,139 @@ -(use-package benchmark-init - :ensure t - :config - (add-hook 'after-init-hook 'benchmark-init/deactivate)) - (defmacro definteractive (name &rest body) - `(defun ,name ,(car body) - (interactive) - ,@(cdr body))) + `(defun ,name ,(car body) + (interactive) + ,@(cdr body))) (defmacro lambdainteractive (&rest body) - `(lambda ,(car body) (interactive) ,@(cdr body))) + `(lambda ,(car body) (interactive) ,@(cdr body))) (defmacro local-keybind (key value) - `(lambda () (local-set-key (kbd ,key) (quote ,value)))) + `(lambda () (local-set-key (kbd ,key) (quote ,value)))) + +(setq use-package-always-ensure t + use-package-verbose t) + +(use-package diminish) + +(use-package company + :diminish 'company-mode + :bind (:map company-mode-map + ("C-c /" . 'yas-expand)) + :custom + (company-idle-delay 0) + (company-minimum-prefix-length 3) + :init (add-hook 'after-init-hook 'global-company-mode)) + +(use-package csharp-mode + :defer t + :config + (use-package omnisharp + :defer t + :config + (add-hook 'csharp-mode-hook 'omnisharp-mode) + (add-to-list 'company-backends 'company-omnisharp))) + +(use-package elixir-mode + :defer t + :config (use-package alchemist)) + +(use-package nginx-mode + :custom + (nginx-indent-tabs-mode t) + (nginx-indent-level 2) + :config (add-to-list 'auto-mode-alist '("/nginx/sites-\\(?:available\\|enabled\\)/" . nginx-mode))) + +(use-package slime + :defer t + :custom + (slime-lisp-implementations + '((sbcl ("sbcl" "--core" "/usr/lib64/sbcl/sbcl.core") + :env ("SBCL_HOME=/usr/lib64/sbcl/")))) + :diminish 'slime-mode + :init + (use-package slime-company) + (add-hook 'lisp-mode-hook 'slime-mode) + (slime-setup '(slime-fancy slime-company))) + +(use-package keychain-environment + :bind ("C-c r e" . 'keychain-refresh-environment) + :init (keychain-refresh-environment)) + +(use-package htmlize) + +(use-package spaceline + :custom (powerline-default-seperator (quote arrow)) + :init + (require 'spaceline-config) + (spaceline-spacemacs-theme) + :config (spaceline-toggle-buffer-size-off)) + +(use-package dashboard + :diminish (dashboard-mode page-break-lines-mode) + :custom + (dashboard-center-content t) + (dashboard-banner-logo-title "Komacs") + (dashboard-set-init-info t) + (dashboard-startup-banner "~/.emacs.d/Komacs.png") + (dashboard-show-shortcuts nil) + (dashboard-items '((recents . 5))) + :config (dashboard-setup-startup-hook)) + +(setq initial-buffer-choice (lambda () (get-buffer "*dashboard*"))) + +(use-package switch-window + :custom + (switch-window-input-style 'minibuffer) + (switch-window-increase 4) + (switch-window-threshold 2) + :bind ([remap other-window] . switch-window)) + +(use-package yasnippet + :diminish 'yas-minor-mode + :hook ((html-mode + LaTeX-mode + emacs-lisp-mode + lisp-mode) + . yas-minor-mode) + :init ;; These are computationally expensive, so init. + (use-package yasnippet-snippets) + (yas-reload-all)) + +(use-package hungry-delete + :diminish 'hungry-delete-mode + :config (global-hungry-delete-mode 1)) + +(use-package which-key + :diminish 'which-key-mode + :config (which-key-mode)) + +(use-package avy + :bind ("M-s" . avy-goto-char)) + +(use-package beacon + :diminish 'beacon-mode + :config (beacon-mode 1)) + +(use-package popup-kill-ring + :bind ("M-y" . popup-kill-ring)) + +(setq ido-enable-flex-matching t + ido-create-new-buffer 'always + ido-everywhere 1) + +(use-package ido-vertical-mode + :bind ("C-l" . 'ido-reread-directory) + :custom (ido-vertical-define-keys 'C-n-and-C-p-only) + :config + (ido-vertical-mode 1) + (ido-mode 1)) (definteractive manx/config-reload () - (when (get-buffer "config.org") - (with-current-buffer "config.org" (save-buffer))) - (org-babel-load-file (expand-file-name "~/.emacs.d/config.org"))) + (when (get-buffer "config.org") + (with-current-buffer "config.org" (save-buffer))) + (org-babel-load-file (concat user-emacs-directory "config.org"))) (global-set-key (kbd "C-c x r") 'manx/config-reload) -(global-set-key (kbd "C-c x e") (lambdainteractive ()(find-file "~/.emacs.d/config.org"))) +(global-set-key (kbd "C-c x e") (lambdainteractive () (find-file (concat user-emacs-directory "config.org")))) (setq org-src-window-setup 'current-window) @@ -30,71 +143,50 @@ ;; Don't indent whole file with org-mode (eval-after-load "org-mode" (local-set-key (kbd "s-i") nil)) -(setq org-structure-template-alist - (append - '(("el" "#+BEGIN_SRC emacs-lisp\n?\n#+END_SRC") - ("js" "#+BEGIN_SRC javascript\n?\n#+END_SRC")) - org-structure-template-alist)) +(add-to-list 'org-structure-template-alist '("el" "#+BEGIN_SRC emacs-lisp\n?\n#+END_SRC")) (setq org-html-doctype "html5") (definteractive manx/save-org-to-html() - (when (equal major-mode 'org-mode) - (save-buffer) - (org-html-export-to-html))) + (when (equal major-mode 'org-mode) + (save-buffer) + (org-html-export-to-html))) (add-hook 'org-mode-hook - (local-keybind "C-c s h" manx/save-org-to-html)) + (local-keybind "C-c s h" manx/save-org-to-html)) (definteractive manx/delete-org-link () - (if (org-in-regexp org-bracket-link-regexp 1) - (apply 'delete-region (list (match-beginning 0) (match-end 0))))) + (if (org-in-regexp org-bracket-link-regexp 1) + (apply 'delete-region (list (match-beginning 0) (match-end 0))))) (add-hook 'org-mode-hook (local-keybind "C-c o l" manx/delete-org-link)) (setq org-image-actual-width 150) (definteractive manx/org-insert-link () - (org-insert-link) - (org-redisplay-inline-images)) + (org-insert-link) + (org-redisplay-inline-images)) (add-hook 'org-mode-hook (local-keybind "C-c C-l" manx/org-insert-link)) -(tool-bar-mode -1) -(menu-bar-mode -1) -(scroll-bar-mode -1) -(line-number-mode 1) -(column-number-mode 1) -(display-battery-mode 1) - -(global-unset-key (kbd "C-z")) +(definteractive manx/kill-word () + (backward-word) + (kill-word 1)) -(definteractive manx/kill-whole-word () - (backward-word) - (kill-word 1)) - -(global-set-key (kbd "C-c k w") 'manx/kill-whole-word) - -(definteractive manx/kill-whole-line() - (move-beginning-of-line nil) - (kill-whole-line)) - -(global-set-key (kbd "C-c k l") 'manx/kill-whole-line) - -(global-set-key (kbd "C-c r b") 'revert-buffer) +(definteractive manx/kill-line() + (move-beginning-of-line nil) + (kill-whole-line)) (definteractive manx/format-whole-buffer() - (save-excursion - (indent-region (point-min) (point-max) nil))) + (save-excursion + (indent-region (point-min) (point-max) nil))) +(global-set-key (kbd "") 'forward-whitespace) +(global-set-key (kbd "C-c r b") 'revert-buffer) +(global-set-key (kbd "C-c k w") 'manx/kill-word) +(global-set-key (kbd "C-c k l") 'manx/kill-line) (global-set-key (kbd "s-i") 'manx/format-whole-buffer) -(defun what-face (pos) - (interactive "d") - (let ((face (or (get-char-property (pos) 'read-face-name) - (get-char-property (pos) 'face)))) - (if face (message "Face: %s" face) (message "No face at %d" pos)))) - (global-set-key (kbd "C-x k") (lambdainteractive () (kill-buffer (current-buffer)))) (global-set-key (kbd "C-M-s-k") (lambdainteractive () (mapc 'kill-buffer (buffer-list)))) @@ -108,143 +200,18 @@ (global-set-key (kbd "C-c f o") 'flop-frame) (defmacro manx/split-and-follow (direction) - `(progn - ,direction - (balance-windows) - (other-window 1))) + `(progn + ,direction + (balance-windows) + (other-window 1))) (global-set-key (kbd "C-x 3") (lambdainteractive () (manx/split-and-follow (split-window-below)))) (global-set-key (kbd "C-x 2") (lambdainteractive () (manx/split-and-follow (split-window-horizontally)))) -(setq use-package-always-ensure t - use-package-verbose t) - -(use-package diminish) - -(use-package keychain-environment - :bind ("C-c r e" . 'keychain-refresh-environment) - :init (keychain-refresh-environment)) - -(unless (display-graphic-p) - (use-package exwm - :bind ("s-k" . 'exwm-workspace-delete) - :config - (require 'exwm-config) - (require 'exwm-systemtray) - (exwm-systemtray-enable))) - -(use-package nginx-mode - :custom - (nginx-indent-tabs-mode t) - (nginx-indent-level 2) - :config (add-to-list 'auto-mode-alist '("/nginx/sites-\\(?:available\\|enabled\\)/" . nginx-mode))) - -(use-package company - :diminish 'company-mode - :bind (:map company-mode-map - ("C-c /" . 'yas-expand)) - :custom - (company-idle-delay 0) - (company-minimum-prefix-length 3) - :init (add-hook 'after-init-hook 'global-company-mode)) - -(use-package csharp-mode - :defer t - :config - (use-package omnisharp - :defer t - :config - (add-hook 'csharp-mode-hook 'omnisharp-mode) - (add-to-list 'company-backends 'company-omnisharp))) - -(use-package spaceline - :init - (require 'spaceline-config) - (setq powerline-default-seperator (quote arrow)) - (spaceline-spacemacs-theme) - :config (spaceline-toggle-buffer-size-off)) - -(use-package dashboard - :diminish (dashboard-mode page-break-lines-mode) - :custom - (dashboard-center-content t) - (dashboard-banner-logo-title "Komacs") - (dashboard-set-init-info t) - (dashboard-startup-banner "~/.emacs.d/Komacs.png") - (dashboard-show-shortcuts nil) - (dashboard-items '((recents . 5))) - :config (dashboard-setup-startup-hook)) - -(setq initial-buffer-choice (lambda () (get-buffer "*dashboard*"))) - -(use-package slime - :defer t - :custom - (slime-lisp-implementations - '((sbcl ("sbcl" "--core" "/usr/lib64/sbcl/sbcl.core") - :env ("SBCL_HOME=/usr/lib64/sbcl/")))) - :diminish 'slime-mode - :init - (use-package slime-company) - (add-hook 'lisp-mode-hook 'slime-mode) - (slime-setup '(slime-fancy slime-company))) - -(use-package switch-window - :custom - (switch-window-input-style 'minibuffer) - (switch-window-increase 4) - (switch-window-threshold 2) - :bind ([remap other-window] . switch-window)) - -(use-package elixir-mode - :defer t - :config (use-package alchemist)) - -(use-package yasnippet - :diminish 'yas-minor-mode - :hook ((html-mode - LaTeX-mode - emacs-lisp-mode - lisp-mode) - . yas-minor-mode) - :init - (use-package yasnippet-snippets) - (yas-reload-all)) - -(use-package hungry-delete - :diminish 'hungry-delete-mode - :config (global-hungry-delete-mode 1)) - -(use-package which-key - :diminish 'which-key-mode - :config (which-key-mode)) - -(use-package avy - :bind ("M-s" . avy-goto-char)) - -(use-package beacon - :diminish 'beacon-mode - :config (beacon-mode 1)) - -(use-package popup-kill-ring - :bind ("M-y" . popup-kill-ring)) - -(setq ido-enable-flex-matching t - ido-create-new-buffer 'always - ido-everywhere 1) - -(use-package ido-vertical-mode - :bind ("C-l" . 'ido-reread-directory) - :custom - (ido-vertical-define-keys 'C-n-and-C-p-only) - :config - (ido-vertical-mode 1) - (ido-mode 1)) - (defun unix-line-ends () - (let ((coding-str (symbol-name buffer-file-coding-system))) - (when (string-match "-\\(?:dos\\|mac\\)$" coding-str) - (set-buffer-file-coding-system 'unix)))) + (let ((coding-str (symbol-name buffer-file-coding-system))) + (when (string-match "-\\(?:dos\\|mac\\)$" coding-str) + (set-buffer-file-coding-system 'unix)))) (add-hook 'find-file-hooks 'unix-line-ends) @@ -255,32 +222,39 @@ (prefer-coding-system 'utf-8) (setq x-select-request-type '(UTF8_STRING COMPOUND_TEXT TEXT STRING)) -(defvar my-term-shell "/bin/bash") -(defadvice ansi-term (before force-bash) - (interactive (list my-term-shell))) -(ad-activate 'ansi-term) - -(global-set-key (kbd "") 'ansi-term) - +(line-number-mode 1) +(column-number-mode 1) +(display-battery-mode 1) (show-paren-mode 1) (electric-pair-mode t) (global-hl-line-mode t) -(global-prettify-symbols-mode t) + +(tool-bar-mode -1) +(menu-bar-mode -1) +(scroll-bar-mode -1) (defalias 'yes-or-no-p 'y-or-n-p) (setq scroll-conservatively 100 - x-select-enable-clipboard t - vc-follow-symlinks t) + select-enable-clipboard t + vc-follow-symlinks t) (setq backup-directory-alist - `(("." . ,(concat user-emacs-directory "autosaves")))) + `(("." . ,(concat user-emacs-directory "autosaves")))) -(add-hook 'doc-view-mode-hook 'auto-revert-mode) +(global-unset-key (kbd "C-z")) ;; Fuck unix (setq-default tab-width 2 indent-tabs-mode t) (defvaralias 'css-indent-offset 'tab-width) +(defvaralias 'js-indent-level 'tab-width) + +(global-prettify-symbols-mode t) +(add-hook 'emacs-lisp-mode-hook + (lambda () + (push + '("lambdainteractive" . ?Λ) + prettify-symbols-alist))) (defvar auto-minor-mode-alist () "Alist of filename patterns vs correpsonding minor mode functions, see `auto-mode-alist' @@ -291,47 +265,42 @@ All elements of this alist are checked, meaning you can enable multiple minor mo the checking happens for all pairs in auto-minor-mode-alist" (when buffer-file-name (let ((name (file-name-sans-versions buffer-file-name)) - (remote-id (file-remote-p buffer-file-name)) - (case-fold-search auto-mode-case-fold) - (alist auto-minor-mode-alist)) + (remote-id (file-remote-p buffer-file-name)) + (case-fold-search auto-mode-case-fold) + (alist auto-minor-mode-alist)) ;; Remove remote file name identification. (when (and (stringp remote-id) - (string-match-p (regexp-quote remote-id) name)) - (setq name (substring name (match-end 0)))) + (string-match-p (regexp-quote remote-id) name)) + (setq name (substring name (match-end 0)))) (while (and alist (caar alist) (cdar alist)) - (if (string-match-p (caar alist) name) - (funcall (cdar alist) 1)) - (setq alist (cdr alist)))))) + (if (string-match-p (caar alist) name) + (funcall (cdar alist) 1)) + (setq alist (cdr alist)))))) (add-hook 'find-file-hook #'enable-minor-mode-based-on-extension) (define-minor-mode sensitive-minor-mode - "For sensitive files like password lists. + "For sensitive files like password lists. It disables backup creation and auto saving. With no argument, this command toggles the mode. Non-null prefix argument turns on the mode. Null prefix argument turns off the mode." - nil ;; Initial - "Sensitive" ;; Modeline - nil ;; Bindings - (if (symbol-value sensitive-minor-mode) - (progn - (setq make-backup-files nil) - (auto-save-mode -1)) - (setq-local make-backup-files t) - (auto-save-mode 1))) + :init-value nil + :lighter " Sensitive" + :keymap nil + (if (symbol-value sensitive-minor-mode) + (progn + (setq make-backup-files nil) + (auto-save-mode -1)) + (setq-local make-backup-files t) + (auto-save-mode 1))) ;; Regexps of sensitive files. (setq auto-minor-mode-alist - (append - '(("stream/manifest/.*\\.json$" . sensitive-minor-mode) - (".emacs.d/snippets/\\*$" . sensitive-minor-mode) - ("nginx/sites-(enabled|available)/*" . sensitive-minor-mode)) - auto-minor-mode-alist)) - -(add-hook 'emacs-lisp-mode-hook - (lambda () - (push - '("lambdainteractive" . ?Λ) prettify-symbols-alist))) + (append + '(("stream/manifest/.*\\.json$" . sensitive-minor-mode) + (".emacs.d/snippets/\\*$" . sensitive-minor-mode) + ("nginx/sites-(enabled|available)/*" . sensitive-minor-mode)) + auto-minor-mode-alist)) diff --git a/config.org b/config.org index 826829b..dc9da78 100644 --- a/config.org +++ b/config.org @@ -1,14 +1,9 @@ -* Benchmark - #+BEGIN_SRC emacs-lisp - (use-package benchmark-init - :ensure t - :config - (add-hook 'after-init-hook 'benchmark-init/deactivate)) - #+END_SRC * macros ** definteractive Wrappers around functions and lambdas so I don't have to type (interactive) all the damn time + +I have ~prettify-symbols-mode~ set ~lambdainteractive~ to Λ (capital lambda) because it's cute. #+BEGIN_SRC emacs-lisp (defmacro definteractive (name &rest body) `(defun ,name ,(car body) @@ -19,179 +14,53 @@ Wrappers around functions and lambdas so I don't have to type `(lambda ,(car body) (interactive) ,@(cdr body))) #+END_SRC ** local-keybind -Hide unecessary lambda when calling (local-set-key) for -org-modefunctions +Hide unecessary lambda when calling (local-set-key) for org-mode +functions #+BEGIN_SRC emacs-lisp (defmacro local-keybind (key value) `(lambda () (local-set-key (kbd ,key) (quote ,value)))) #+END_SRC -* org -** edit/reload config.org -Saves config.org if it's open then reloads the file. -#+BEGIN_SRC emacs-lisp - (definteractive manx/config-reload () - (when (get-buffer "config.org") - (with-current-buffer "config.org" (save-buffer))) - (org-babel-load-file (expand-file-name "~/.emacs.d/config.org"))) - - (global-set-key (kbd "C-c x r") 'manx/config-reload) - (global-set-key (kbd "C-c x e") (lambdainteractive ()(find-file "~/.emacs.d/config.org"))) -#+END_SRC -** misc -#+BEGIN_SRC emacs-lisp - (setq org-src-window-setup 'current-window) - - ;; I read somewhere that Company breaks things? - (add-hook 'org-mode-hook 'company-mode) - - ;; Don't indent whole file with org-mode - (eval-after-load "org-mode" (local-set-key (kbd "s-i") nil)) -#+END_SRC -** Snippets -#+BEGIN_SRC emacs-lisp - (setq org-structure-template-alist - (append - '(("el" "#+BEGIN_SRC emacs-lisp\n?\n#+END_SRC") - ("js" "#+BEGIN_SRC javascript\n?\n#+END_SRC")) - org-structure-template-alist)) -#+END_SRC -** html export -#+BEGIN_SRC emacs-lisp - (setq org-html-doctype "html5") - - (definteractive manx/save-org-to-html() - (when (equal major-mode 'org-mode) - (save-buffer) - (org-html-export-to-html))) - - (add-hook 'org-mode-hook - (local-keybind "C-c s h" manx/save-org-to-html)) -#+END_SRC -** Links -#+BEGIN_SRC emacs-lisp - (definteractive manx/delete-org-link () - (if (org-in-regexp org-bracket-link-regexp 1) - (apply 'delete-region (list (match-beginning 0) (match-end 0))))) - - (add-hook 'org-mode-hook (local-keybind "C-c o l" manx/delete-org-link)) -#+END_SRC -*** Inline Images - #+BEGIN_SRC emacs-lisp - (setq org-image-actual-width 150) - - (definteractive manx/org-insert-link () - (org-insert-link) - (org-redisplay-inline-images)) - - (add-hook 'org-mode-hook (local-keybind "C-c C-l" manx/org-insert-link)) - #+END_SRC -* emacs gui -#+BEGIN_SRC emacs-lisp - (tool-bar-mode -1) - (menu-bar-mode -1) - (scroll-bar-mode -1) - (line-number-mode 1) - (column-number-mode 1) - (display-battery-mode 1) - - (global-unset-key (kbd "C-z")) -#+END_SRC -* functions -** text -*** forward whitespace -#+BEGIN_SRC emacs-lisp - (global-set-k'ey (kbd "") 'forward-whitespace) -#+END_SRC -*** kill whole word - #+BEGIN_SRC emacs-lisp - (definteractive manx/kill-whole-word () - (backward-word) - (kill-word 1)) - - (global-set-key (kbd "C-c k w") 'manx/kill-whole-word) - #+END_SRC -*** kill whole line - #+BEGIN_SRC emacs-lisp - (definteractive manx/kill-whole-line() - (move-beginning-of-line nil) - (kill-whole-line)) - - (global-set-key (kbd "C-c k l") 'manx/kill-whole-line) - #+END_SRC -*** revert buffer - #+BEGIN_SRC emacs-lisp - (global-set-key (kbd "C-c r b") 'revert-buffer) - #+END_SRC -*** Format whole file - #+BEGIN_SRC emacs-lisp - (definteractive manx/format-whole-buffer() - (save-excursion - (indent-region (point-min) (point-max) nil))) - - (global-set-key (kbd "s-i") 'manx/format-whole-buffer) - #+END_SRC -*** colour under cursor - #+BEGIN_SRC emacs-lisp - (defun what-face (pos) - (interactive "d") - (let ((face (or (get-char-property (pos) 'read-face-name) - (get-char-property (pos) 'face)))) - (if face (message "Face: %s" face) (message "No face at %d" pos)))) - #+END_SRC -** buffers -#+BEGIN_SRC emacs-lisp - (global-set-key (kbd "C-x k") (lambdainteractive () (kill-buffer (current-buffer)))) - (global-set-key (kbd "C-M-s-k") (lambdainteractive () (mapc 'kill-buffer (buffer-list)))) -#+END_SRC -** frames -*** transpose-frame - #+BEGIN_SRC emacs-lisp - ;; This is only used here for now but we should still more it some - ;; time - (add-to-list 'load-path "~/.emacs.d/scripts/") - - (require 'transpose-frame) - (global-set-key (kbd "C-c f t") 'transpose-frame) - (global-set-key (kbd "C-c f i") 'flip-frame) - (global-set-key (kbd "C-c f o") 'flop-frame) - #+END_SRC -*** split and follow - #+BEGIN_SRC emacs-lisp - (defmacro manx/split-and-follow (direction) - `(progn - ,direction - (balance-windows) - (other-window 1))) - - (global-set-key (kbd "C-x 3") (lambdainteractive () (manx/split-and-follow (split-window-below)))) - (global-set-key (kbd "C-x 2") (lambdainteractive () (manx/split-and-follow (split-window-horizontally)))) - #+END_SRC * use-package +** use-package config +Always ensure packages are installed. Log to ~*Messages*~. #+BEGIN_SRC emacs-lisp - (setq use-package-always-ensure t - use-package-verbose t) + (setq use-package-always-ensure t + use-package-verbose t) #+END_SRC ** diminish #+BEGIN_SRC emacs-lisp (use-package diminish) #+END_SRC -** keychain-environment +** company #+BEGIN_SRC emacs-lisp - (use-package keychain-environment - :bind ("C-c r e" . 'keychain-refresh-environment) - :init (keychain-refresh-environment)) + (use-package company + :diminish 'company-mode + :bind (:map company-mode-map + ("C-c /" . 'yas-expand)) + :custom + (company-idle-delay 0) + (company-minimum-prefix-length 3) + :init (add-hook 'after-init-hook 'global-company-mode)) #+END_SRC -** exwm +** prog +*** c# #+BEGIN_SRC emacs-lisp - (unless (display-graphic-p) - (use-package exwm - :bind ("s-k" . 'exwm-workspace-delete) - :config - (require 'exwm-config) - (require 'exwm-systemtray) - (exwm-systemtray-enable))) + (use-package csharp-mode + :defer t + :config + (use-package omnisharp + :defer t + :config + (add-hook 'csharp-mode-hook 'omnisharp-mode) + (add-to-list 'company-backends 'company-omnisharp))) #+END_SRC -** nginx +*** elixir +#+BEGIN_SRC emacs-lisp + (use-package elixir-mode + :defer t + :config (use-package alchemist)) +#+END_SRC +*** nginx #+BEGIN_SRC emacs-lisp (use-package nginx-mode :custom @@ -199,35 +68,37 @@ Saves config.org if it's open then reloads the file. (nginx-indent-level 2) :config (add-to-list 'auto-mode-alist '("/nginx/sites-\\(?:available\\|enabled\\)/" . nginx-mode))) #+END_SRC -** company +*** slime +sbcl is in a werid place on Gentoo. #+BEGIN_SRC emacs-lisp - (use-package company - :diminish 'company-mode - :bind (:map company-mode-map - ("C-c /" . 'yas-expand)) + (use-package slime + :defer t :custom - (company-idle-delay 0) - (company-minimum-prefix-length 3) - :init (add-hook 'after-init-hook 'global-company-mode)) + (slime-lisp-implementations + '((sbcl ("sbcl" "--core" "/usr/lib64/sbcl/sbcl.core") + :env ("SBCL_HOME=/usr/lib64/sbcl/")))) + :diminish 'slime-mode + :init + (use-package slime-company) + (add-hook 'lisp-mode-hook 'slime-mode) + (slime-setup '(slime-fancy slime-company))) #+END_SRC -** c# +** keychain-environment #+BEGIN_SRC emacs-lisp - (use-package csharp-mode - :defer t - :config - (use-package omnisharp - :defer t - :config - (add-hook 'csharp-mode-hook 'omnisharp-mode) - (add-to-list 'company-backends 'company-omnisharp))) - + (use-package keychain-environment + :bind ("C-c r e" . 'keychain-refresh-environment) + :init (keychain-refresh-environment)) +#+END_SRC +** htmlize +#+BEGIN_SRC emacs-lisp + (use-package htmlize) #+END_SRC ** spaceline #+BEGIN_SRC emacs-lisp (use-package spaceline + :custom (powerline-default-seperator (quote arrow)) :init (require 'spaceline-config) - (setq powerline-default-seperator (quote arrow)) (spaceline-spacemacs-theme) :config (spaceline-toggle-buffer-size-off)) #+END_SRC @@ -246,20 +117,6 @@ Saves config.org if it's open then reloads the file. (setq initial-buffer-choice (lambda () (get-buffer "*dashboard*"))) #+END_SRC -** slime -#+BEGIN_SRC emacs-lisp - (use-package slime - :defer t - :custom - (slime-lisp-implementations - '((sbcl ("sbcl" "--core" "/usr/lib64/sbcl/sbcl.core") - :env ("SBCL_HOME=/usr/lib64/sbcl/")))) - :diminish 'slime-mode - :init - (use-package slime-company) - (add-hook 'lisp-mode-hook 'slime-mode) - (slime-setup '(slime-fancy slime-company))) -#+END_SRC ** switch window #+BEGIN_SRC emacs-lisp (use-package switch-window @@ -269,37 +126,31 @@ Saves config.org if it's open then reloads the file. (switch-window-threshold 2) :bind ([remap other-window] . switch-window)) #+END_SRC -** elixir -#+BEGIN_SRC emacs-lisp - (use-package elixir-mode - :defer t - :config (use-package alchemist)) -#+END_SRC ** yasnippet #+BEGIN_SRC emacs-lisp - (use-package yasnippet - :diminish 'yas-minor-mode - :hook ((html-mode - LaTeX-mode - emacs-lisp-mode - lisp-mode) - . yas-minor-mode) - :init - (use-package yasnippet-snippets) - (yas-reload-all)) + (use-package yasnippet + :diminish 'yas-minor-mode + :hook ((html-mode + LaTeX-mode + emacs-lisp-mode + lisp-mode) + . yas-minor-mode) + :init ;; These are computationally expensive, so init. + (use-package yasnippet-snippets) + (yas-reload-all)) #+END_SRC ** minor modes *** hungry delete #+BEGIN_SRC emacs-lisp - (use-package hungry-delete - :diminish 'hungry-delete-mode - :config (global-hungry-delete-mode 1)) + (use-package hungry-delete + :diminish 'hungry-delete-mode + :config (global-hungry-delete-mode 1)) #+END_SRC *** which key #+BEGIN_SRC emacs-lisp - (use-package which-key - :diminish 'which-key-mode - :config (which-key-mode)) + (use-package which-key + :diminish 'which-key-mode + :config (which-key-mode)) #+END_SRC *** avy #+BEGIN_SRC emacs-lisp @@ -317,20 +168,122 @@ Saves config.org if it's open then reloads the file. (use-package popup-kill-ring :bind ("M-y" . popup-kill-ring)) #+END_SRC -* ido +** ido #+BEGIN_SRC emacs-lisp (setq ido-enable-flex-matching t - ido-create-new-buffer 'always - ido-everywhere 1) + ido-create-new-buffer 'always + ido-everywhere 1) (use-package ido-vertical-mode :bind ("C-l" . 'ido-reread-directory) - :custom - (ido-vertical-define-keys 'C-n-and-C-p-only) + :custom (ido-vertical-define-keys 'C-n-and-C-p-only) :config (ido-vertical-mode 1) (ido-mode 1)) #+END_SRC +* org +** edit/reload config +Also saves config if open. +#+BEGIN_SRC emacs-lisp + (definteractive manx/config-reload () + (when (get-buffer "config.org") + (with-current-buffer "config.org" (save-buffer))) + (org-babel-load-file (concat user-emacs-directory "config.org"))) + + (global-set-key (kbd "C-c x r") 'manx/config-reload) + (global-set-key (kbd "C-c x e") (lambdainteractive () (find-file (concat user-emacs-directory "config.org")))) +#+END_SRC +** misc +#+BEGIN_SRC emacs-lisp + (setq org-src-window-setup 'current-window) + + ;; I read somewhere that Company breaks things? + (add-hook 'org-mode-hook 'company-mode) + + ;; Don't indent whole file with org-mode + (eval-after-load "org-mode" (local-set-key (kbd "s-i") nil)) + + (add-to-list 'org-structure-template-alist '("el" "#+BEGIN_SRC emacs-lisp\n?\n#+END_SRC")) +#+END_SRC +** html export +#+BEGIN_SRC emacs-lisp + (setq org-html-doctype "html5") + + (definteractive manx/save-org-to-html() + (when (equal major-mode 'org-mode) + (save-buffer) + (org-html-export-to-html))) + + (add-hook 'org-mode-hook + (local-keybind "C-c s h" manx/save-org-to-html)) +#+END_SRC +** Links +#+BEGIN_SRC emacs-lisp + (definteractive manx/delete-org-link () + (if (org-in-regexp org-bracket-link-regexp 1) + (apply 'delete-region (list (match-beginning 0) (match-end 0))))) + + (add-hook 'org-mode-hook (local-keybind "C-c o l" manx/delete-org-link)) +#+END_SRC +*** Inline Images + #+BEGIN_SRC emacs-lisp + (setq org-image-actual-width 150) + + (definteractive manx/org-insert-link () + (org-insert-link) + (org-redisplay-inline-images)) + + (add-hook 'org-mode-hook (local-keybind "C-c C-l" manx/org-insert-link)) + #+END_SRC +* functions +** text +#+BEGIN_SRC emacs-lisp + (definteractive manx/kill-word () + (backward-word) + (kill-word 1)) + + (definteractive manx/kill-line() + (move-beginning-of-line nil) + (kill-whole-line)) + + (definteractive manx/format-whole-buffer() + (save-excursion + (indent-region (point-min) (point-max) nil))) + + (global-set-key (kbd "") 'forward-whitespace) + (global-set-key (kbd "C-c r b") 'revert-buffer) + (global-set-key (kbd "C-c k w") 'manx/kill-word) + (global-set-key (kbd "C-c k l") 'manx/kill-line) + (global-set-key (kbd "s-i") 'manx/format-whole-buffer) + #+END_SRC +** buffers +#+BEGIN_SRC emacs-lisp + (global-set-key (kbd "C-x k") (lambdainteractive () (kill-buffer (current-buffer)))) + (global-set-key (kbd "C-M-s-k") (lambdainteractive () (mapc 'kill-buffer (buffer-list)))) +#+END_SRC +** frames +*** transpose-frame + #+BEGIN_SRC emacs-lisp + ;; This is only used here for now but we should still more it some + ;; time + (add-to-list 'load-path "~/.emacs.d/scripts/") + + (require 'transpose-frame) + (global-set-key (kbd "C-c f t") 'transpose-frame) + (global-set-key (kbd "C-c f i") 'flip-frame) + (global-set-key (kbd "C-c f o") 'flop-frame) + #+END_SRC +*** split and follow + #+BEGIN_SRC emacs-lisp + (defmacro manx/split-and-follow (direction) + `(progn + ,direction + (balance-windows) + (other-window 1))) + + (global-set-key (kbd "C-x 3") (lambdainteractive () (manx/split-and-follow (split-window-below)))) + (global-set-key (kbd "C-x 2") (lambdainteractive () (manx/split-and-follow (split-window-horizontally)))) + #+END_SRC * misc ** unix line endings #+BEGIN_SRC emacs-lisp @@ -350,41 +303,48 @@ Saves config.org if it's open then reloads the file. (prefer-coding-system 'utf-8) (setq x-select-request-type '(UTF8_STRING COMPOUND_TEXT TEXT STRING)) #+END_SRC -** terminal -*** Make bash implicit terminal - #+BEGIN_SRC emacs-lisp - (defvar my-term-shell "/bin/bash") - (defadvice ansi-term (before force-bash) - (interactive (list my-term-shell))) - (ad-activate 'ansi-term) - - (global-set-key (kbd "") 'ansi-term) - #+END_SRC ** minor things +Things for GUI and basic config, like electric pairs and highlighting +parens. #+BEGIN_SRC emacs-lisp + (line-number-mode 1) + (column-number-mode 1) + (display-battery-mode 1) (show-paren-mode 1) (electric-pair-mode t) (global-hl-line-mode t) - (global-prettify-symbols-mode t) + + (tool-bar-mode -1) + (menu-bar-mode -1) + (scroll-bar-mode -1) (defalias 'yes-or-no-p 'y-or-n-p) (setq scroll-conservatively 100 - x-select-enable-clipboard t - vc-follow-symlinks t) + select-enable-clipboard t + vc-follow-symlinks t) (setq backup-directory-alist - `(("." . ,(concat user-emacs-directory "autosaves")))) -#+END_SRC -** docView auto reload -#+BEGIN_SRC emacs-lisp - (add-hook 'doc-view-mode-hook 'auto-revert-mode) + `(("." . ,(concat user-emacs-directory "autosaves")))) + + (global-unset-key (kbd "C-z")) ;; Fuck unix #+END_SRC ** indentation +tabs > spaces. #+BEGIN_SRC emacs-lisp (setq-default tab-width 2 indent-tabs-mode t) (defvaralias 'css-indent-offset 'tab-width) + (defvaralias 'js-indent-level 'tab-width) +#+END_SRC +** Prettify symbols +#+BEGIN_SRC emacs-lisp + (global-prettify-symbols-mode t) + (add-hook 'emacs-lisp-mode-hook + (lambda () + (push + '("lambdainteractive" . ?Λ) + prettify-symbols-alist))) #+END_SRC * auto-minor-mode auto-mode-alist for minor modes. @@ -401,52 +361,45 @@ For example, used with sensitive-mode to not create backups the checking happens for all pairs in auto-minor-mode-alist" (when buffer-file-name (let ((name (file-name-sans-versions buffer-file-name)) - (remote-id (file-remote-p buffer-file-name)) - (case-fold-search auto-mode-case-fold) - (alist auto-minor-mode-alist)) + (remote-id (file-remote-p buffer-file-name)) + (case-fold-search auto-mode-case-fold) + (alist auto-minor-mode-alist)) ;; Remove remote file name identification. (when (and (stringp remote-id) - (string-match-p (regexp-quote remote-id) name)) - (setq name (substring name (match-end 0)))) + (string-match-p (regexp-quote remote-id) name)) + (setq name (substring name (match-end 0)))) (while (and alist (caar alist) (cdar alist)) - (if (string-match-p (caar alist) name) - (funcall (cdar alist) 1)) - (setq alist (cdr alist)))))) + (if (string-match-p (caar alist) name) + (funcall (cdar alist) 1)) + (setq alist (cdr alist)))))) (add-hook 'find-file-hook #'enable-minor-mode-based-on-extension) #+END_SRC * sensitive-minor-mode #+BEGIN_SRC emacs-lisp - (define-minor-mode sensitive-minor-mode - "For sensitive files like password lists. - It disables backup creation and auto saving. + (define-minor-mode sensitive-minor-mode + "For sensitive files like password lists. + It disables backup creation and auto saving. - With no argument, this command toggles the mode. - Non-null prefix argument turns on the mode. - Null prefix argument turns off the mode." - nil ;; Initial - "Sensitive" ;; Modeline - nil ;; Bindings - (if (symbol-value sensitive-minor-mode) - (progn - (setq make-backup-files nil) - (auto-save-mode -1)) - (setq-local make-backup-files t) - (auto-save-mode 1))) + With no argument, this command toggles the mode. + Non-null prefix argument turns on the mode. + Null prefix argument turns off the mode." + :init-value nil + :lighter " Sensitive" + :keymap nil + (if (symbol-value sensitive-minor-mode) + (progn + (setq make-backup-files nil) + (auto-save-mode -1)) + (setq-local make-backup-files t) + (auto-save-mode 1))) - ;; Regexps of sensitive files. - (setq auto-minor-mode-alist - (append - '(("stream/manifest/.*\\.json$" . sensitive-minor-mode) - (".emacs.d/snippets/\\*$" . sensitive-minor-mode) - ("nginx/sites-(enabled|available)/*" . sensitive-minor-mode)) - auto-minor-mode-alist)) -#+END_SRC -* Prettify symbols -#+BEGIN_SRC emacs-lisp - (add-hook 'emacs-lisp-mode-hook - (lambda () - (push - '("lambdainteractive" . ?Λ) prettify-symbols-alist))) + ;; Regexps of sensitive files. + (setq auto-minor-mode-alist + (append + '(("stream/manifest/.*\\.json$" . sensitive-minor-mode) + (".emacs.d/snippets/\\*$" . sensitive-minor-mode) + ("nginx/sites-(enabled|available)/*" . sensitive-minor-mode)) + auto-minor-mode-alist)) #+END_SRC diff --git a/custom.el b/custom.el index e2c4156..4b4c6e3 100644 --- a/custom.el +++ b/custom.el @@ -9,8 +9,8 @@ '(company-minimum-prefix-length 3) '(custom-enabled-themes (quote (spacemacs-dark))) '(custom-safe-themes - (quote - ("bffa9739ce0752a37d9b1eee78fc00ba159748f50dc328af4be661484848e476" default))) + (quote + ("bffa9739ce0752a37d9b1eee78fc00ba159748f50dc328af4be661484848e476" default))) '(dashboard-banner-logo-title "Komacs") '(dashboard-center-content t) '(dashboard-items (quote ((recents . 5)))) @@ -21,14 +21,14 @@ '(nginx-indent-level 2) '(nginx-indent-tabs-mode t) '(package-selected-packages - (quote - (benchmark-init alchemist elixir-mode nginx-mode yasnippet-snippets which-key use-package switch-window spacemacs-theme spaceline slime-company popup-kill-ring omnisharp keychain-environment ido-vertical-mode hungry-delete exwm diminish dashboard company-auctex beacon avy))) + (quote + (htmlize benchmark-init alchemist elixir-mode nginx-mode yasnippet-snippets which-key use-package switch-window spacemacs-theme spaceline slime-company popup-kill-ring omnisharp keychain-environment ido-vertical-mode hungry-delete exwm diminish dashboard company-auctex beacon avy))) '(slime-lisp-implementations - (quote - ((sbcl - ("sbcl" "--core" "/usr/lib64/sbcl/sbcl.core") - :env - ("SBCL_HOME=/usr/lib64/sbcl/")))) t) + (quote + ((sbcl + ("sbcl" "--core" "/usr/lib64/sbcl/sbcl.core") + :env + ("SBCL_HOME=/usr/lib64/sbcl/")))) t) '(switch-window-increase 4 t) '(switch-window-input-style (quote minibuffer)) '(switch-window-threshold 2)) diff --git a/init.el b/init.el index 1a8804a..1964c66 100644 --- a/init.el +++ b/init.el @@ -23,14 +23,14 @@ ;; Files we care about loading (setq custom-file (in-emacs-home "custom.el")) -(defconst emacs-config (in-emacs-home "config.el")) -(defconst emacs-org (in-emacs-home "config.org")) -(defconst emacs-email (in-emacs-home "email.el")) +(defconst manx/emacs-el (in-emacs-home "config.el")) +(defconst manx/emacs-org (in-emacs-home "config.org")) +(defconst manx/emacs-email (in-emacs-home "email.el")) ;; If everything exists then execute files -(unless (member nil '(custom-file emacs-config emacs-org emacs-email)) - (if (file-newer-than-file-p emacs-org emacs-config) - (org-babel-load-file emacs-org) - (load emacs-config)) +(unless (member nil '(custom-file manx/emacs-el manx/emacs-org manx/emacs-email)) + (if (file-newer-than-file-p manx/emacs-org manx/emacs-el) + (org-babel-load-file manx/emacs-org) + (load manx/emacs-el 'noerror)) (load custom-file 'noerrror) - (load emacs-email 'noerror)) + (load manx/emacs-email 'noerror)) diff --git a/snippets/lisp-mode/defsystem b/snippets/lisp-mode/defsystem new file mode 100644 index 0000000..623988a --- /dev/null +++ b/snippets/lisp-mode/defsystem @@ -0,0 +1,14 @@ +# -*- mode: snippet -*- +# name: defsystem +# key: defs +# contributor: Manx +# -- +(asdf:defsystem #:${1:system-name} + :description "${2:none}" + :author "Manx (boku@plum.moe)" + :license ${3:"X11/MIT"} + :version "0.0.1" + :serial t + :depends-on ${4:} + :Components ${5:}) +$0 \ No newline at end of file