;;; Package configs (require 'package) (setq package-enable-at-startup nil) (setq package-archives '(("org" . "http://orgmode.org/elpa/") ("gnu" . "http://elpa.gnu.org/packages/") ("melpa" . "https://melpa.org/packages/"))) (package-initialize) ;; Bootstrap `use-package` (unless (package-installed-p 'use-package) (package-refresh-contents) (package-install 'use-package)) (require 'use-package) ;; Some term enhancement (defadvice term-sentinel (around my-advice-term-sentinel (proc msg)) (if (memq (process-status proc) '(signal exit)) (let ((buffer (process-buffer proc))) ad-do-it (kill-buffer buffer)) ad-do-it)) (ad-activate 'term-sentinel) (defadvice ansi-term (before force-bash) (interactive (list "/usr/bin/fish"))) (ad-activate 'ansi-term) ;; Other configs (setq make-backup-files nil) (setq auto-save-default nil) ;; Splash Screen (setq inhibit-startup-screen t) (setq initial-scratch-message ";; Happy Hacking") ;; Show matching parens (setq show-paren-delay 0) (show-paren-mode 1) ;; Paragraph movement (global-set-key (kbd "s-j") 'forward-paragraph) (global-set-key (kbd "s-k") 'backward-paragraph) ;; Keybinding for term mode (add-hook 'term-mode (lambda () (global-set-key (kbd "s-v") 'term-paste))) ;; OrgMode Configs (setq org-html-validation-link nil) (setq org-todo-keywords '((sequence "TODO" "WORKING" "HOLD" "|" "DONE"))) (setq org-todo-keyword-faces '(("TODO" . "blue") ("WORKING" . "yellow") ("HOLD" . "red") ("DONE" . "green"))) ;; UI configurations (if (display-graphic-p) (progn (tool-bar-mode -1) (scroll-bar-mode -1) ) ) (tooltip-mode -1) (menu-bar-mode -1) (global-linum-mode 1) (add-to-list 'default-frame-alist '(font . "Iosevka-11")) (add-to-list 'default-frame-alist '(height . 24)) (add-to-list 'default-frame-alist '(width . 80)) ;; Vim mode (use-package evil :ensure t :config (evil-mode 1)) (use-package evil-escape :ensure t :init (setq-default evil-escape-key-sequence "jk") :config (evil-escape-mode 1)) ;; Anzu for search matching (use-package anzu :ensure t :config (global-anzu-mode 1) (global-set-key [remap query-replace-regexp] 'anzu-query-replace-regexp) (global-set-key [remap query-replace] 'anzu-query-replace)) ;; Theme (use-package doom-themes :ensure t :config (load-theme 'doom-molokai t)) ;; Helm (use-package helm :ensure t :init (setq helm-M-x-fuzzy-match t helm-mode-fuzzy-match t helm-buffers-fuzzy-matching t helm-recentf-fuzzy-match t helm-locate-fuzzy-match t helm-semantic-fuzzy-match t helm-imenu-fuzzy-match t helm-completion-in-region-fuzzy-match t helm-candidate-number-list 80 helm-split-window-in-side-p t helm-move-to-line-cycle-in-source t helm-echo-input-in-header-line t helm-autoresize-max-height 0 helm-autoresize-min-height 20) :config (helm-mode 1)) ;; RipGrep (use-package helm-rg :ensure t) ;; Projectile (use-package projectile :ensure t :init (setq projectile-require-project-root nil) :config (projectile-mode 1)) ;; Helm Projectile (use-package helm-projectile :ensure t :init (setq helm-projectile-fuzzy-match t) :config (helm-projectile-on)) ;; Helm Gtags (use-package helm-gtags :defer t :ensure t :init (progn (setq helm-gtags-ignore-case t helm-gtags-auto-update t helm-gtags-prefix-key "SPC-m" helm-gtags-use-input-at-cursor t helm-gtags-pulse-at-cursor t) (add-hook 'c-mode-hook 'helm-gtags-mode))) ;; All The Icons (use-package all-the-icons :ensure t) ;; NeoTree (use-package neotree :ensure t :init (setq neo-theme (if (display-graphic-p) 'icons 'arrow))) ;; Which Key (use-package which-key :ensure t :init (setq which-key-separator " ") (setq which-key-prefix-prefix "+") :config (which-key-mode)) ;; Custom keybinding (use-package general :ensure t :config (general-define-key :states '(normal visual insert emacs) :prefix "SPC" :non-normal-prefix "M-SPC" "/" '(helm-projectile-rg :which-key "ripgrep") "TAB" '(switch-to-prev-buffer :which-key "previous buffer") "SPC" '(helm-M-x :which-key "M-x") "pf" '(helm-projectile-find-file :which-key "find files") "pp" '(helm-projectile-switch-project :which-key "switch project") "pb" '(helm-projectile-switch-to-buffer :which-key "switch buffer") "pr" '(helm-show-kill-ring :which-key "show kill ring") ;; Buffers "bb" '(helm-mini :which-key "buffers list") ;; Window "wl" '(windmove-right :which-key "move right") "wh" '(windmove-left :which-key "move left") "wk" '(windmove-up :which-key "move up") "wj" '(windmove-down :which-key "move bottom") "w/" '(split-window-right :which-key "split right") "w-" '(split-window-below :which-key "split bottom") "wx" '(delete-window :which-key "delete window") "qz" '(delete-frame :which-key "delete frame") "qq" '(kill-emacs :which-key "quit") ;; NeoTree "ft" '(neotree-toggle :which-key "toggle neotree") ;; Others "at" '(ansi-term :which-key "open terminal") ;; Gtags "gc" '(helm-gtags-create-tags :which-key "Create tag db") "gd" '(helm-gtags-fing-tag :which-key "Find definitions") "gf" '(helm-gtags-select-path :which-key "Jump to a file in tag db") "gG" '(helm-gtags-dwim-other-window :which-key "Jump to location based on context") "gi" '(helm-gtags-tags-in-this-function :which-key "Present tags in current function") "gl" '(helm-gtags-parse-file :which-key "Jump to definitions in file") "gn" '(helm-gtags-next-history :which-key "Jump to next location in context stack") "gp" '(helm-gtags-previous-history :which-key "Jump to previous location in context stack") "gr" '(helm-gtags-find-rtag :which-key "Find references") "gR" '(helm-gtags-resume :which-key "Resume previous helm-gtags session") "gs" '(helm-gtags-select :which-key "Select any tag in project retrieved by gtags") "gS" '(helm-gtags-show-stack :which-key "Show stack of visited locations") "gu" '(helm-gtags-update-tags :which-key "Create tag db") )) ;; Fancy titlebar for MacOS (add-to-list 'default-frame-alist '(ns-transparent-titlebar . t)) (add-to-list 'default-frame-alist '(ns-appearance . dark)) (setq ns-use-proxy-icon nil) (setq frame-title-format nil) ;; Flycheck (use-package flycheck :ensure t :init (global-flycheck-mode)) ;; Company mode (use-package company :ensure t :init (setq company-minimum-prefix-length 3) (setq company-auto-complete nil) (setq company-idle-delay 0) (setq company-require-match 'never) (setq company-frontends '(company-pseudo-tooltip-unless-just-one-frontend company-preview-frontend company-echo-metadata-frontend)) (setq tab-always-indent 'complete) (defvar completion-at-point-functions-saved nil) :config (global-company-mode 1) (define-key company-active-map (kbd "TAB") 'company-complete-common-or-cycle) (define-key company-active-map (kbd "") 'company-complete-common-or-cycle) (define-key company-active-map (kbd "S-TAB") 'company-select-previous) (define-key company-active-map (kbd "") 'company-select-previous) (define-key company-mode-map [remap indent-for-tab-command] 'company-indent-for-tab-command) (defun company-indent-for-tab-command (&optional arg) (interactive "P") (let ((completion-at-point-functions-saved completion-at-point-functions) (completion-at-point-functions '(company-complete-common-wrapper))) (indent-for-tab-command arg))) (defun company-complete-common-wrapper () (let ((completion-at-point-functions completion-at-point-functions-saved)) (company-complete-common)))) ;; Powerline (use-package spaceline :ensure t :init (setq powerline-default-separator 'slant) :config (spaceline-emacs-theme) (spaceline-toggle-minor-modes-off) (spaceline-toggle-buffer-size-off) (spaceline-toggle-evil-state-on)) ;;;;;;;;;;;;;;;;;;;;;;; ;; Language Supports ;; ;;;;;;;;;;;;;;;;;;;;;;; ;;; C (defun c-lineup-arglist-tabs-only (ignored) "Line up argument lists by tabs, not spaces" (let* ((anchor (c-langelem-pos c-syntactic-element)) (column (c-langelem-2nd-pos c-syntactic-element)) (offset (- (1+ column) anchor)) (steps (floor offset c-basic-offset))) (* (max steps 1) c-basic-offset))) (add-hook 'c-mode-common-hook (lambda () ;; Add kernel style (c-add-style "linux-tabs-only" '("linux" (c-offsets-alist (arglist-cont-nonempty c-lineup-gcc-asm-reg c-lineup-arglist-tabs-only)))))) (add-hook 'c-mode-hook (lambda () (let ((filename (buffer-file-name))) ;; Enable kernel mode for the appropriate files (when (and filename (string-match (expand-file-name "~/ged4k/linux-xlnx") filename)) (setq indent-tabs-mode t) (setq show-trailing-whitespace t) (c-set-style "linux-tabs-only"))))) (defun helm-gtags-dwim-other-window () "helm-gtags-dwim in the other window" (interactive) (let ((helm-gtags--use-otherwin t) (split-height-threshold nil) (split-width-threshold 140)) (helm-gtags-dwim)))