;;; -*- lexical-binding: t; -*- ;;; garbage collection threshold maneuvre (setq gc-cons-threshold (* 512 1024 1024)) ;;; tell me the start time at start-up ;;;###autoload (defun message-start-time () "Tell me the start time at start-up." (interactive) (message "%s" (emacs-init-time))) (add-hook 'emacs-startup-hook #'message-start-time) ;;; Macro to conveniently load files ;;;###autoload (defvar load-file-directory (cond ((stringp load-file-name) (file-name-directory load-file-name)) (t default-directory)) "The directory to load files") ;;;###autoload (defsubst load-config (file-name) "Conviently load configuration files in the same directory as this file." (load-file (expand-file-name file-name load-file-directory))) ;;;###autoload (defun load-config-later (file-name seconds) "Load FILE-NAME SECONDS later." (run-with-idle-timer seconds nil (lambda () (load-config file-name)))) ;;;###autoload (defmacro prepare-in-hook-once (entry-name hook file) "Define a function called ENTRY-NAME that loads FILE in HOOK once." `(progn (defun ,entry-name () (interactive) (remove-hook ',hook ',entry-name) (load-config ,file)) (add-hook ',hook ',entry-name))) ;;;###autoload (defmacro load-after-function (function-name file-path doc redefine-p &rest def) "Load FILE-PATH after FUNCTION-NAME. After loading, execute DEF. Finally if REDEFINE-P is non-nil, then FUNCTION-NAME will be defined as DEF after loading. If FUNCTION-NAME is already a valid function, this won't do anything." (cond ((fboundp function-name)) (t `(defun ,function-name () ,doc (interactive) (load-config ,file-path) ,@def ,(cond (redefine-p `(defun ,function-name () ,doc (interactive) ,@def))))))) (load-config "common.el") (load-config "basic.el") (load-config "backup-conf.el") (load-config "recentf-conf.el") (load-config "dashboard.el") (load-config "theme.el") (load-config "modeline.el") (add-hook 'emacs-lisp-mode-hook (lambda () (set 'mode-name "ELisp"))) (prepare-in-hook-once prepare-elisp emacs-lisp-mode-hook "elisp.el") (prepare-in-hook-once prepare-org org-mode-hook "org-conf.el") (add-hook 'org-mode-hook #'prepare-org) (define-key global-map (vector 3 97) #'prepare-org) (define-key global-map (vector 3 99) #'prepare-org) (define-key global-map (vector 3 ?l) #'prepare-org) ;;;###autoload (load-after-function durand-mu4e "mail.el" "Open mu4e." t (mu4e)) (add-to-list 'auto-mode-alist (cons "pdf$" #'pdf-view-mode)) ;;;###autoload (load-after-function pdf-view-mode "pdf.el" "Fake mode that loads the pacakge." nil (pdf-view-mode)) ;;; bongo ;;;###autoload (load-after-function bongo "bongo.el" "Listen to music in Emacs." nil (bongo)) ;;; My PDF facilities (use-package "durand-chercher-pdf" 'durand-chercher-pdf (define-key durand-pdf-mode-map (vector ?q) 'quit-window) (define-key durand-pdf-mode-map (vector ?N) 'forward-line) (define-key durand-pdf-mode-map (vector ?n) 'durand-pdf-next-pdf-line) (define-key durand-pdf-mode-map (vector ?P) (lambda () (interactive) (forward-line -1))) (define-key durand-pdf-mode-map (vector ?p) 'durand-pdf-previous-pdf-line) (define-key durand-pdf-mode-map (vector 'return) 'durand-pdf-open-pdf) (define-key durand-pdf-mode-map (vector 32) 'durand-pdf-open-or-scroll-up) (define-key durand-pdf-mode-map (vector 'backspace) 'durand-pdf-open-or-scroll-down) (define-key durand-pdf-mode-map (vector ?o) 'kill-other-buffer-window) (define-key durand-pdf-mode-map (vector ?k) 'kill-current-buffer)) ;;; gnus (load-config "gnus-conf.el") ;;; comb ;; (load-config "comb/comb.el") ;; (load-config "comb/comb-annotation.el") ;;; Completion framework configurations ;; TODO: Write my own completion styles library ;; (load-config "comb/orderless-conf.el") (load-config "completion-conf.el") ;;; dired configurations (prepare-in-hook-once prepare-dired dired-mode-hook "dired-conf.el") (add-hook 'dired-mode-hook 'dired-hide-details-mode) ;;; ibuffer (load-config "ibuffer.el") ;;; center buffer (load-config "center-buffer.el") ;;; tab configurations (load-config "tab-conf.el") ;;; Save sessions (load-config "desktop-conf.el") ;;; Text Configurations (prepare-in-hook-once prepare-text text-mode-hook "text-conf.el") ;;; embark (load-config "embark-conf.el") ;;; magit (load-after-function magit "magit-conf.el" "Load magit and launch it." nil (defalias 'magit 'magit-status) (magit)) (define-key global-map (vector ?\C-x ?g) 'magit) ;;; eww (load-config "eww-conf.el") ;;; Viewing things (load-config "view-conf.el") ;;; flymake (prepare-in-hook-once prepare-flymake prog-mode-hook "flymake-conf.el") ;;; Don't let s-q quit as I oft press that by accident. (define-key global-map (vector ?\s-q) #'window-toggle-side-windows) ;;; My simple utilities (use-package "durand-simple" 'durand-simple (define-key global-map (vector ?\C-\M-\s) #'durand-simple-mark-dwim) (define-key global-map (vector ?\C-o) #'durand-simple-open-line) (define-key global-map (vector ?\C-') #'durand-simple-insert-pair)) ;;; Searches (load-config "search-conf.el") ;;; Transpose frame (use-package "transpose-frame" 'transpose-frame (define-key global-map (vector ?\C-\s-r) #'rotate-frame-clockwise) (define-key global-map (vector ?\C-\s-t) #'transpose-frame)) ;;; server ;; (cond ;; ((bound-and-true-p server-process)) ;; ((server-start))) (setq gc-cons-threshold (* 2 1024 1024))