Compare commits

...

2 Commits

Author SHA1 Message Date
Yushun Cheng af6c0b0f60 [emacs] Separate 'appearance' section into packages or c source section. 2022-04-10 10:13:15 +08:00
Yushun Cheng 4569a52d49 [emacs] Rearrange init.el with use-package utility. 2022-04-10 09:44:44 +08:00
2 changed files with 247 additions and 235 deletions

View File

@ -1,89 +1,57 @@
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;; PACKAGE MANAGEMENT
;;; START UP
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;; Add load path.
(add-to-list 'load-path (concat user-emacs-directory "lisp"))
(require 'chezmoi)
;;; Add package-custom.
(require 'package-custom)
;;; ELPA's.
(setq package-archives
; '(("gnu" . "https://elpa.gnu.org/packages/")
; ("melpa" . "https://melpa.org/packages/")))
'(("gnu" . "https://mirrors.tuna.tsinghua.edu.cn/elpa/gnu/")
("melpa" . "https://mirrors.tuna.tsinghua.edu.cn/elpa/melpa/")))
;;; Bootstrap.
(defun package-install-smart (package-name)
"Install PACKAGE-NAME (a symbol) smartly."
(if (package-installed-p package-name)
(add-to-list 'package-selected-packages package-name)
(unless (locate-library (symbol-name package-name))
(unless package-archive-contents
(package-refresh-contents))
(package-install package-name)
(add-to-list 'package-selected-packages package-name))))
;;; Update.
(defun package-update (&rest package-names)
"Update PACKAGE-NAMES or all packages installed.
Return the list updated."
(unless package-archive-contents
(package-refresh-contents))
(let ((ret nil) (name) (desc))
(dolist (package-cons package-alist)
(setq name (car package-cons))
(setq desc (nth 1 package-cons))
(when (and (or (null package-names)
(member name package-names))
(not (equal (package-desc-version desc)
(package-desc-version
(nth 1 (assoc name package-archive-contents))))))
(package-reinstall name)
(setq ret (cons name ret))))
ret))
;;; use-package
;;; Bootstrap use-package.
(package-install-smart 'use-package)
(require 'use-package)
(defun use-package-ensure-smart (name args _state &optional _no-refresh)
"Function for use-package :ensure keyword."
(dolist (ensure args)
(let ((package
(or (and (eq ensure t) (use-package-as-symbol name))
ensure)))
(when (consp package)
(use-package-pin-package (car package) (cdr-package))
(setq package (car package)))
(package-install-smart package))))
(setq use-package-ensure-function 'use-package-ensure-smart)
(setq use-package-always-ensure t)
;;; chezmoi.
(use-package chezmoi)
;;; package.
(use-package package
:after (chezmoi)
:config
(setq package-archives
; '(("gnu" . "https://elpa.gnu.org/packages/")
; ("melpa" . "https://melpa.org/packages/")))
'(("gnu" . "https://mirrors.tuna.tsinghua.edu.cn/elpa/gnu/")
("melpa" . "https://mirrors.tuna.tsinghua.edu.cn/elpa/melpa/"))))
;;; use-package.
(use-package use-package
:config
(defun use-package-ensure-smart (name args _state &optional _no-refresh)
"Function for use-package :ensure keyword."
(dolist (ensure args)
(let ((package
(or (and (eq ensure t) (use-package-as-symbol name))
ensure)))
(when (consp package)
(use-package-pin-package (car package) (cdr-package))
(setq package (car package)))
(package-install-smart package))))
(setq use-package-ensure-function 'use-package-ensure-smart)
(setq use-package-always-ensure t))
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;; BEHAVIOUR
;;; C SOURCE
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;; Save #*# files to $XDG_CONFIG_HOME/emacs/auto-saves.
(setq auto-save-file-name-transforms
'((".*" "~/.config/emacs/auto-saves/" t)))
;;; Save *~ files to $XDG_CONFIG_HOME/emacs/backups.
(setq backup-directory-alist
'(("." . "~/.config/emacs/backups")))
;;; UTF-8!
(prefer-coding-system 'utf-8)
;;; Disable warnings
(setq warning-suppress-types '((comp)))
;;; Disable ring bell.
(setq ring-bell-function 'ignore)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;; APPEARANCE
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;; Encoding.
(prefer-coding-system 'utf-8)
;;; Emoji fonts
(unless (equal chezmoi-os "windows")
@ -103,43 +71,62 @@ Return the list updated."
(set-fontset-font t charset (font-spec :family (car chinese-font-pair))))
(add-to-list 'face-font-rescale-alist chinese-font-pair))
;;; Don't show tool bar (copy, paste stuff).
(tool-bar-mode -1)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;; PACKAGES
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;; Set faces.
(set-face-background 'default "black")
(set-face-foreground 'default "white")
(set-face-attribute 'default nil :height (if (equal chezmoi-os "windows")
100 90))
;;; ahk-mode.
(when (equal chezmoi-os "windows")
(set-face-attribute 'default nil :family "Consolas"))
(use-package ahk-mode))
;;; fill-column-indicator
(defun fill-column-indicator-setup ()
"Setup fill-column-indicator."
(set-fill-column 79)
(display-fill-column-indicator-mode 1))
(add-hook 'text-mode-hook 'fill-column-indicator-setup)
(add-hook 'prog-mode-hook 'fill-column-indicator-setup)
;;; ccls.
(use-package ccls
:after (cc-mode)
:hook ((c-mode c++-mode objc-mode cuda-mode) .
(lambda () (require 'ccls) (lsp))))
;;; Set theme.
;;; cc-mode.
(use-package cc-mode
:hook ((c-mode) .
(lambda () (c-set-style "linux"))))
;;; color-theme-tomorrow.
(use-package color-theme-tomorrow
:config
(color-theme-tomorrow--define-theme night-bright)
(enable-theme 'tomorrow-night-bright))
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;; PACKAGES
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;; undo-tree
(use-package undo-tree
;;; company
(use-package company
:demand t
:bind (:map
company-active-map
;; my binds
("<tab>" . company-select-next)
("<backtab>" . company-select-previous)
("<RET>" . company-complete-selection)
("S-<return>" . company-abort)
("<right>" . company-complete-common))
:config
(let ((dir (concat user-emacs-directory "undo-tree")))
(make-directory dir t)
(setq undo-tree-history-directory-alist
`(("." . ,dir))))
(global-undo-tree-mode))
(setq company-idle-delay 0.05)
(setq completion-ignore-case t)
(unless (equal chezmoi-os "windows")
(global-company-mode)))
;;; dired.
(use-package dired)
;;; display-fill-column-indicator.
(use-package display-fill-column-indicator
:after (text-mode prog-mode simple)
:hook ((text-mode prog-mode) .
(lambda ()
(set-fill-column 79)
(display-fill-column-indicator-mode 1))))
;;; elist-mode.
(use-package elisp-mode
:hook (emacs-lisp-mode . (lambda () (setq indent-tabs-mode nil))))
;;; evil
(use-package evil
@ -190,21 +177,9 @@ Return the list updated."
("<return>" . comment-indent-new-line))
:config (evil-mode 1))
;;; man.
(use-package man)
;;; dired.
(use-package dired)
;;; help.
(use-package help)
;;; info.
(use-package info)
;;; evil-collection
(use-package evil-collection
:after (man dired help info)
:after (evil man dired help info)
:config
;; Initialize.
(evil-collection-init)
@ -225,6 +200,41 @@ Return the list updated."
(evil-collection-define-key 'normal 'Info-mode-map
(kbd "SPC") nil))
;;; faces.
(use-package faces
:config
(set-face-background 'default "black")
(set-face-foreground 'default "white")
(when (equal chezmoi-os "windows")
(set-face-attribute 'default nil :family "Consolas"))
(set-face-attribute 'default nil
:height (if (equal chezmoi-os "windows")
100 90)))
;;; file.
(use-package files
:config
;; Save #*# files to $XDG_CONFIG_HOME/emacs/auto-saves.
(setq auto-save-file-name-transforms
'((".*" "~/.config/emacs/auto-saves/" t)))
;; Save *~ files to $XDG_CONFIG_HOME/emacs/backups.
(setq backup-directory-alist
'(("." . "~/.config/emacs/backups"))))
;;; fish-mode.
(use-package fish-mode)
;;; help.
(use-package help)
;;; ibus
(unless (equal chezmoi-os "windows")
(use-package ibus
:after (evil)))
;;; info.
(use-package info)
;;; ivy
(use-package ivy
:demand t
@ -239,60 +249,62 @@ Return the list updated."
:config
(ivy-mode 1))
;;; js.
(use-package js
:hook ((js-mode) .
(lambda () (setq indent-tabs-mode nil)))
:config
(setq js-indent-level 4))
(use-package lsp-mode
:after (evil)
:demand t
:config
(setq lsp-keep-workspace-alive nil)
:bind (:map
evil-motion-state-map
;; workspaces
("C-c C-l wD" . lsp-disconnect)
("C-c C-l wd" . lsp-describe-session)
("C-c C-l ws" . lsp)
;; folders
("C-c C-l fa" . lsp-workspace-folders-add)
("C-c C-l fb" . lsp-workspace-blacklist-remove)
("C-c C-l fr" . lsp-workspace-folders-remove)
;; goto
("gD" . nil)
("gD" . lsp-find-declaration)
("gd" . nil)
("gd" . lsp-find-definition)
:map
evil-normal-state-map
;; formatting
("=" . nil)
("==" . lsp-format-buffer)
("=r" . lsp-format-region)))
;;; lua-mode.
(use-package lua-mode
:hook ((lua-mode) .
(lambda () (setq indent-tabs-mode nil)))
:config
(setq lua-indent-level 4))
;;; magit
(use-package magit
:config
(when (equal chezmoi-os "windows")
(setq magit-git-executable "C:\\msys64\\usr\\bin\\git.exe")))
;;; company
(use-package company
:demand t
:bind (:map
company-active-map
;; my binds
("<tab>" . company-select-next)
("<backtab>" . company-select-previous)
("<RET>" . company-complete-selection)
("S-<return>" . company-abort)
("<right>" . company-complete-common))
:config
(setq company-idle-delay 0.05)
(setq completion-ignore-case t)
(unless (equal chezmoi-os "windows")
(global-company-mode)))
;;; man.
(use-package man)
;;; org
(use-package org
:config
(setq org-startup-indented t)
(set-face-attribute 'outline-1 nil :height 150)
(set-face-attribute 'outline-2 nil :height 140)
(set-face-attribute 'outline-3 nil :height 130)
(set-face-attribute 'outline-4 nil :height 120)
(set-face-attribute 'outline-5 nil :height 110)
(set-face-attribute 'outline-6 nil :height 100))
;;; chezmoi
(use-package chezmoi)
;;; YAML.
(use-package yaml-mode)
;;; ibus
;;; message.
(unless (equal chezmoi-os "windows")
(use-package ibus
:after (evil)))
;;; AutoHotkey.
(when (equal chezmoi-os "windows")
(use-package ahk-mode))
;;; smtpmail.
(unless (equal chezmoi-os "windows")
(use-package smtpmail
(use-package message
:after (smtpmail)
:config
(setq smtpmail-local-domain (system-name))))
(setq message-send-mail-function 'smtpmail-send-it)))
;;; mu4e.
(unless (equal chezmoi-os "windows")
@ -327,89 +339,22 @@ Return the list updated."
(smtpmail-smtp-user . "chengys")
(smtpmail-smtp-service . 587)
(smtpmail-smtp-server . "disroot.org")))))))
;;; message.
(unless (equal chezmoi-os "windows")
(use-package message
:after (smtpmail)
:config
(setq message-send-mail-function 'smtpmail-send-it)))
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;; PROGRAMMING
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(use-package lsp-mode
:demand t
;;; org
(use-package org
:config
(setq lsp-keep-workspace-alive nil)
:bind (:map
evil-motion-state-map
;; workspaces
("C-c C-l wD" . lsp-disconnect)
("C-c C-l wd" . lsp-describe-session)
("C-c C-l ws" . lsp)
;; folders
("C-c C-l fa" . lsp-workspace-folders-add)
("C-c C-l fb" . lsp-workspace-blacklist-remove)
("C-c C-l fr" . lsp-workspace-folders-remove)
;; goto
("gD" . nil)
("gD" . lsp-find-declaration)
("gd" . nil)
("gd" . lsp-find-definition)
:map
evil-normal-state-map
;; formatting
("=" . nil)
("==" . lsp-format-buffer)
("=r" . lsp-format-region)))
(setq org-startup-indented t)
(set-face-attribute 'outline-1 nil :height 150)
(set-face-attribute 'outline-2 nil :height 140)
(set-face-attribute 'outline-3 nil :height 130)
(set-face-attribute 'outline-4 nil :height 120)
(set-face-attribute 'outline-5 nil :height 110)
(set-face-attribute 'outline-6 nil :height 100))
(use-package flycheck
:demand t
:after (evil evil-collection)
:bind (:map
evil-motion-state-map
;; error navigation
("[[" . nil)
("[d" . flycheck-previous-error)
("]d" . flycheck-next-error)
("[[d" . flycheck-first-error))
:config
(setq flycheck-emacs-lisp-load-path 'inherit)
(add-hook 'emacs-lisp-mode-hook
(lambda ()
(when (equal (buffer-name) "init.el")
(flycheck-mode -1))))
(unless (equal chezmoi-os "windows")
(global-flycheck-mode)))
;;; prog-mode.
(use-package prog-mode)
;;; Emacs Lisp
(add-hook 'emacs-lisp-mode-hook (lambda () (setq indent-tabs-mode nil)))
;;; C
(use-package ccls
:after (cc-mode)
:hook ((c-mode c++-mode objc-mode cuda-mode) .
(lambda () (require 'ccls) (lsp))))
(use-package cc-mode
:hook ((c-mode) .
(lambda () (c-set-style "linux"))))
;;; Javascript
(use-package js
:hook ((js-mode) .
(lambda () (setq indent-tabs-mode nil)))
:config
(setq js-indent-level 4))
;;; Lua
(use-package lua-mode
:hook ((lua-mode) .
(lambda () (setq indent-tabs-mode nil)))
:config
(setq lua-indent-level 4))
;;; Rust
;;; rustic.
(use-package rustic
:demand t
:hook ((rust-mode) .
@ -423,11 +368,37 @@ Return the list updated."
:config
(setq lsp-rust-analyzer-diagnostics-disabled ["inactive-code"]))
;;; Shell
;;; sh-script.
(use-package sh-script
:hook ((sh-mode) . (lambda () (setq indent-tabs-mode nil)))
:config
(setq sh-basic-offset 2))
;;; Fish.
(use-package fish-mode)
;;; simple.
(use-package simple)
;;; smtpmail.
(unless (equal chezmoi-os "windows")
(use-package smtpmail
:config
(setq smtpmail-local-domain (system-name))))
;;; text-mode
(use-package text-mode)
;;; tool-bar.
(use-package tool-bar
:config
(tool-bar-mode -1))
;;; undo-tree
(use-package undo-tree
:config
(let ((dir (concat user-emacs-directory "undo-tree")))
(make-directory dir t)
(setq undo-tree-history-directory-alist
`(("." . ,dir))))
(global-undo-tree-mode))
;;; yaml-mode.
(use-package yaml-mode)

View File

@ -0,0 +1,41 @@
;;; package-custom --- Customized functions for package.el.
;;; Commentary:
;;; Customized functions for package.el.
;;; Code:
;;; Load package.el.
(require 'package)
;;; Functions.
(defun package-install-smart (package-name)
"Install PACKAGE-NAME (a symbol) smartly."
(if (package-installed-p package-name)
(add-to-list 'package-selected-packages package-name)
(unless (locate-library (symbol-name package-name))
(unless package-archive-contents
(package-refresh-contents))
(package-install package-name)
(add-to-list 'package-selected-packages package-name))))
(defun package-update (&rest package-names)
"Update PACKAGE-NAMES or all packages installed.
Return the list updated."
(unless package-archive-contents
(package-refresh-contents))
(let ((ret nil) (name) (desc))
(dolist (package-cons package-alist)
(setq name (car package-cons))
(setq desc (nth 1 package-cons))
(when (and (or (null package-names)
(member name package-names))
(not (equal (package-desc-version desc)
(package-desc-version
(nth 1 (assoc name package-archive-contents))))))
(package-reinstall name)
(setq ret (cons name ret))))
ret))
(provide 'package-custom)
;;; package-custom.el ends here