Skip to content

Instantly share code, notes, and snippets.

@Lukewh
Created October 19, 2021 16:30
Show Gist options
  • Save Lukewh/2da7b54cd773f931b1bf710c84f2f0fb to your computer and use it in GitHub Desktop.
Save Lukewh/2da7b54cd773f931b1bf710c84f2f0fb to your computer and use it in GitHub Desktop.
20211019 - Emacs config
(eval-and-compile
(customize-set-variable
'package-archives '(("org" . "https://orgmode.org/elpa/")
("melpa" . "https://melpa.org/packages/")
("gnu" . "https://elpa.gnu.org/packages/")))
(package-initialize)
(unless (package-installed-p 'use-package)
(package-refresh-contents)
(package-install 'use-package)))
;; IDO
;; (setq ido-everywhere t
;; ido-enable-prefix nil
;; ido-enable-flex-matching t
;; ido-auto-merge-work-directories-length nil
;; ;;ido-use-filename-at-point t
;; ido-max-prospects 10
;; ido-create-new-buffer 'always
;; ;; ido-use-virtual-buffers t
;; ;; ido-handle-duplicate-virtual-buffers 2
;; ido-default-buffer-method 'selected-window
;; ido-default-file-method 'selected-window)
;; (setq ido-decorations (quote ("\n" "" "\n" "\n ..." "[" "]" "
;; [No match]" " [Matched]" " [Not readable]" " [Too big]" "
;; [Confirm]")))
;; (defun ido-disable-line-truncation () (set (make-local-variable 'truncate-lines) nil))
;; (add-hook 'ido-minibuffer-setup-hook 'ido-disable-line-truncation)
;; (defun ido-my-keys ()
;; (define-key ido-completion-map (kbd "<up>") 'ido-prev-match)
;; (define-key ido-completion-map (kbd "<down>") 'ido-next-match))
;; (add-hook 'ido-setup-hook 'ido-my-keys)
;; (ido-mode 1)
;; Icomplete
;; (setq icomplete-show-matches-on-no-input t)
;; (setq icomplete-in-buffer t)
;; (icomplete-mode 1)
;; FIDO
(fido-mode 1)
;; Built-in project package
(require 'project)
(global-set-key (kbd "C-x p f") #'project-find-file)
;; I need the hash on uk keyboard
(global-set-key (kbd "M-3") (lambda () (interactive) (insert "#")))
;; Go to next error
(global-set-key (kbd "C-c N") #'flymake-goto-next-error)
;; Go to previous error
(global-set-key (kbd "C-c P") #'flymake-goto-prev-error)
;; (defun luke/select-project ()
;; (interactive)
;; (let (
;; (projects (directory-files "~/Projects"))))
;; (let (
;; (pr (project-current nil (concat "~/Projects/" (ido-completing-read "Select projec;;: " project)))))
;; (dirs (project-roots pr))
;; (project-find-file-in (thing-at-point 'filename) dirs pr)))
;; (luke/select-project)
(defun luke/grep-in-project ()
(interactive)
(let* (
(current-project (project-current t))
(current-project-root (car (project-roots current-project)))
(search-term
(read-from-minibuffer "Search term: ")))
(rgrep search-term "*" current-project-root)
))
;; Particles
;; https://github.com/elizagamedev/power-mode.el
(setq power-mode-shake-strength nil)
(setq power-mode-streak-shake-threshold nil)
(use-package power-mode
:load-path "packages"
:init
(add-hook 'after-init-hook #'power-mode))
;; Preferred font
;; Load pragmatapro-lig.el
;;(add-to-list 'load-path "/home/luke/emacs/custom-packages/emacs-pragmatapro-ligatures")
;;(require 'pragmatapro-lig)
;;(add-to-list 'default-frame-alist '(font . "PragmataPro Mono Liga-10"))
;; Enable pragmatapro-lig-mode for specific modes
;;(add-hook 'text-mode-hook 'pragmatapro-lig-mode)
;;(add-hook 'prog-mode-hook 'pragmatapro-lig-mode)
;; or globally
;;(pragmatapro-lig-global-mode)
;;(setq line-spacing 0)
;; General settings
(delete-selection-mode t)
(tool-bar-mode -1)
(setq gc-cons-threshold 100000000)
(setq read-process-output-max (* 1024 1024)) ;; 1mb
(setq auto-save-default nil)
(setq make-backup-files nil)
(setq create-lockfiles nil)
(global-display-line-numbers-mode)
(global-prettify-symbols-mode 1)
(global-hl-line-mode 1)
(setq tab-line-close-button-show nil)
(setq tab-line-tabs-function 'tab-line-tabs-mode-buffers)
(global-tab-line-mode t)
(add-to-list 'default-frame-alist '(ns-transparent-titlebar . t))
(add-to-list 'default-frame-alist '(ns-appearance . dark))
(when (eq window-system 'mac)
(mac-auto-operator-composition-mode))
(use-package exec-path-from-shell
:ensure t
:config
(exec-path-from-shell-initialize))
(use-package add-node-modules-path
:ensure t)
(use-package which-key
:ensure t
:config
(which-key-mode))
(use-package expand-region
:ensure t
:bind (("C-=" . er/expand-region)
("C--" . er/contract-region)))
;; json-mode
(use-package json-mode
:ensure t)
;; web-mode
(setq-default tab-width 2)
(setq indent-tabs-mode nil)
(defun luke/webmode-hook ()
"Webmode hooks."
(setq web-mode-enable-comment-annotation t)
(setq web-mode-markup-indent-offset 2)
(setq web-mode-code-indent-offset 2)
(setq web-mode-css-indent-offset 2)
(setq web-mode-attr-indent-offset 0)
(setq web-mode-enable-auto-indentation t)
(setq web-mode-enable-auto-closing t)
(setq web-mode-enable-auto-pairing t)
(setq web-mode-enable-css-colorization t)
)
(use-package web-mode
:ensure t
:mode (("\\.jsx?\\'" . web-mode)
("\\.tsx?\\'" . web-mode)
("\\.html\\'" . web-mode))
:commands web-mode
:hook (web-mode . luke/webmode-hook)
)
;; company
(setq company-minimum-prefix-length 1
company-idle-delay 0.0)
(use-package company
:ensure t
:config (global-company-mode t))
;; magit
(use-package magit
:ensure t
:bind (
("C-x g" . magit-status)))
;; theme
(use-package modus-themes
:ensure t
:init
(setq modus-themes-syntax '(green-strings yellow-comments)
modus-themes-mode-line '(accented borderless)
modus-themes-hl-line '(accented))
(modus-themes-load-themes)
:config
(load-theme 'modus-vivendi t))
;; lsp-mode
(setq lsp-log-io nil) ;; Don't log everything = speed
(setq lsp-keymap-prefix "C-c l")
;;(setq lsp-restart 'auto-restart)
(setq lsp-ui-sideline-show-diagnostics t)
(setq lsp-ui-sideline-show-hover t)
(setq lsp-ui-sideline-show-code-actions t)
(setq lsp-diagnostics-provider :flymake)
(setq lsp-ui-doc-enable t)
(setq lsp-ui-doc-position 'at-point)
(global-set-key (kbd "C-.") #'lsp-ui-peek-find-definitions)
(use-package lsp-mode
:ensure t
:hook (
(web-mode . lsp-deferred)
(lsp-mode . lsp-enable-which-key-integration)
)
:commands lsp-deferred)
(use-package lsp-ui
:ensure t
:commands lsp-ui-mode)
(use-package lsp-python-ms
:ensure t
:init (setq lsp-python-ms-auto-install-server t)
:hook (python-mode . (lambda ()
(require 'lsp-python-ms)
(lsp)))) ; or lsp-deferred
(defun enable-minor-mode (my-pair)
"Enable minor mode if filename match the regexp. MY-PAIR is a cons cell (regexp . minor-mode)."
(if (buffer-file-name)
(if (string-match (car my-pair) buffer-file-name)
(funcall (cdr my-pair)))))
(use-package prettier-js
:ensure t)
(add-hook 'web-mode-hook #'(lambda ()
(enable-minor-mode
'("\\.jsx?\\'" . prettier-js-mode))
(enable-minor-mode
'("\\.tsx?\\'" . prettier-js-mode))))
(eval-after-load 'web-mode
'(progn
(add-hook 'web-mode-hook #'add-node-modules-path)
(add-hook 'web-mode-hook #'prettier-js-mode)))
(use-package editorconfig
:ensure t
:config
(editorconfig-mode 1))
(use-package npm-mode
:ensure t
:config
(npm-global-mode))
;; Custom functions
(defun lukewh/kill-buffer ()
"Kill the active buffer."
(interactive)
(kill-buffer (current-buffer)))
(global-set-key (kbd "C-x K") 'lukewh/kill-buffer)
(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.
'(package-archives
'(("org" . "https://orgmode.org/elpa/")
("melpa" . "https://melpa.org/packages/")
("gnu" . "https://elpa.gnu.org/packages/")))
'(package-selected-packages
'(editorconfig add-node-modules-path flymake-cursor lsp-python-ms modus-themes modus-vivendi-theme npm-mode mini-frame prettier-js lsp-ui lsp-mode modus-operandi-theme magit company web-mode json-mode expand-region which-key exec-path-from-shell use-package)))
(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.
)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment