| @ -0,0 +1,9 @@ | |||
| # For more information visit http://editorconfig.org/ | |||
| root = true | |||
| [*] | |||
| end_of_line = lf | |||
| insert_final_newline = true | |||
| trim_trailing_whitespace = true | |||
| indent_style = space | |||
| indent_size = 2 | |||
| @ -0,0 +1,7 @@ | |||
| /* | |||
| !/uno/ | |||
| !/.editorconfig | |||
| !/.gitignore | |||
| !/init.el | |||
| !/early-init.el | |||
| @ -0,0 +1,2 @@ | |||
| ;; Prevent package.el loading packages prior to their init-file loading. | |||
| (setq package-enable-at-startup nil) | |||
| @ -0,0 +1,3 @@ | |||
| ;; Load bootstrap.org for actual setup | |||
| (org-babel-load-file | |||
| (locate-user-emacs-file (convert-standard-filename "uno/bootstrap.org"))) | |||
| @ -0,0 +1 @@ | |||
| *.el | |||
| @ -0,0 +1,14 @@ | |||
| ⠛⢻⣿⣯⣿⣿⣿⣶⣶⣶⣶⣤⣤⣤⣀ | |||
| ⢨⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣷ | |||
| ⠈⠻⣿⡛⠉⠭⠉⠉⢉⣿⣿⣧ | |||
| ⠈⠙⠲⣶⠖ ⢿⣿ ⠶⣶⣾⣿⣿⣿⣿⣧ | |||
| ⠈ ⠺⢿⡗ ⣹⣿⣿⠿⣟⣿⡏ | |||
| ⠤⠤⢾⣿⣿⣿⣦⠘⡿ | |||
| ⠈⢻⡿⣷⣶⣶⣤⣤⣤⣶⣦⠁ | |||
| ⣽⣿⣿⣿⣿⣿⣿⣿⣿⡟ | |||
| ⠘⠿⣿⣿⣿⣿⣿⣿⣿⠃ | |||
| ⠉⠉⠛⠋⠉⠁ | |||
| @ -0,0 +1,101 @@ | |||
| #+TITLE: Bootstrap | |||
| #+AUTHOR: Juan Placencia | |||
| * Helpers | |||
| #+BEGIN_SRC emacs-lisp | |||
| (defun uno-emacs-path (name) | |||
| (expand-file-name (locate-user-emacs-file | |||
| (convert-standard-filename name)))) | |||
| (defun uno-path (name) | |||
| (uno-emacs-path (concat "uno/" name))) | |||
| (defun uno-assets-path (name) | |||
| (uno-path (concat "assets/" name))) | |||
| (defun uno-cache-path (name) | |||
| (uno-emacs-path (concat "cache/" name))) | |||
| #+END_SRC | |||
| * Backup Files | |||
| Isolate or remove backup files for a clean structure. | |||
| #+BEGIN_SRC emacs-lisp | |||
| (setq | |||
| auto-save-file-name-transforms `((".*" ,temporary-file-directory t)) | |||
| auto-save-list-file-prefix (uno-cache-path "auto-save-list/.saves-") | |||
| backup-directory-alist `((".*" . ,temporary-file-directory)) | |||
| create-lockfiles nil | |||
| recentf-save-file (uno-cache-path "recentf/list") | |||
| tramp-persistency-file-name (uno-cache-path "tramp/history")) | |||
| #+END_SRC | |||
| * Straight + Use Package | |||
| Run bootstrap code for =straight= and have =use-package= ready. | |||
| #+BEGIN_SRC emacs-lisp | |||
| (setq straight-use-package-by-default t) | |||
| (let ((bootstrap-file | |||
| (uno-emacs-path "straight/repos/straight.el/bootstrap.el")) | |||
| (bootstrap-version 5)) | |||
| (unless (file-exists-p bootstrap-file) | |||
| (with-current-buffer | |||
| (url-retrieve-synchronously | |||
| "https://raw.githubusercontent.com/raxod502/straight.el/develop/install.el" | |||
| 'silent 'inhibit-cookies) (goto-char (point-max)) | |||
| (eval-print-last-sexp))) | |||
| (load bootstrap-file nil)) | |||
| (straight-use-package 'use-package) | |||
| (use-package general) | |||
| #+END_SRC | |||
| * General | |||
| Set up general and leader key binds that are used throughout. | |||
| #+BEGIN_SRC emacs-lisp | |||
| (use-package general | |||
| :init | |||
| (defvar uno-leader-key "SPC" | |||
| "Leader key.") | |||
| (defvar uno-mode-leader-key "," | |||
| "Mode leader key.") | |||
| :config | |||
| (general-create-definer uno-define | |||
| :states '(motion normal visual)) | |||
| (general-create-definer uno-leader-define | |||
| :prefix uno-leader-key | |||
| :states '(motion normal visual)) | |||
| (general-create-definer uno-mode-leader-define | |||
| :prefix uno-mode-leader-key | |||
| :states '(motion normal visual)) | |||
| (uno-leader-define "" nil) | |||
| (uno-mode-leader-define "" nil)) | |||
| #+END_SRC | |||
| * Modules | |||
| #+BEGIN_SRC emacs-lisp | |||
| (let* ((uno-module-directory (uno-path "modules/")) | |||
| (uno-module-files (directory-files-recursively | |||
| uno-module-directory | |||
| "\\.org$" | |||
| nil | |||
| t))) | |||
| (dolist (file (reverse uno-module-files)) | |||
| (org-babel-load-file file))) | |||
| #+END_SRC | |||
| * Isolate Custom File | |||
| #+BEGIN_SRC emacs-lisp | |||
| (when (null custom-file) | |||
| (setq custom-file (uno-cache-path "custom.el")) | |||
| (load custom-file 'noerror)) | |||
| #+END_SRC | |||
| @ -0,0 +1,23 @@ | |||
| #+TITLE: Core | |||
| #+AUTHOR: Juan Placencia | |||
| * Package | |||
| Define core package. | |||
| #+BEGIN_SRC emacs-lisp | |||
| (use-package emacs | |||
| :config | |||
| (provide 'uno)) | |||
| #+END_SRC | |||
| * Garbage Collection | |||
| Use =gcmh= to optimize garbage collection calls. | |||
| #+BEGIN_SRC emacs-lisp | |||
| (use-package gcmh | |||
| :after uno | |||
| :config | |||
| (gcmh-mode)) | |||
| #+END_SRC | |||
| @ -0,0 +1,78 @@ | |||
| #+TITLE: Core - Buffer | |||
| #+AUTHOR: Juan Placencia | |||
| * Package | |||
| Define core buffer package. | |||
| #+BEGIN_SRC emacs-lisp | |||
| (use-package emacs | |||
| :after uno | |||
| :config | |||
| (provide 'uno-buffer)) | |||
| #+END_SRC | |||
| * Useful/Useless Buffers | |||
| Define useful and useless buffers. Borrowed from Spacemacs. | |||
| #+BEGIN_SRC emacs-lisp | |||
| (use-package emacs | |||
| :after uno-buffer | |||
| :init | |||
| (defvar uno--useful-buffers nil | |||
| "Regexp used to determine if a buffer is useful.") | |||
| (defvar uno--useless-buffers nil | |||
| "Regexp used to determine if a buffer is useless.") | |||
| (defun uno/add-useful-buffer (buffer) | |||
| "Add BUFFER to useful buffers." | |||
| (push buffer uno--useful-buffers)) | |||
| (defun uno/add-useless-buffer (buffer) | |||
| "Add BUFFER to useless buffers." | |||
| (push buffer uno--useless-buffers)) | |||
| (defun uno/useful-buffer-p (buffer) | |||
| "Determines if a buffer is useful." | |||
| (let ((buf-name (buffer-name buffer))) | |||
| (or (provided-mode-derived-p | |||
| (buffer-local-value 'major-mode buffer) | |||
| 'comint-mode) | |||
| (cl-loop for useful-regexp in uno--useful-buffers | |||
| thereis (string-match-p useful-regexp buf-name)) | |||
| (cl-loop for useless-regexp in uno--useless-buffers | |||
| never (string-match-p useless-regexp buf-name))))) | |||
| :config | |||
| (uno/add-useless-buffer "\\*Messages\\*") | |||
| (uno/add-useless-buffer "\\*scratch\\*") | |||
| (uno/add-useless-buffer "\\*straight-process\\*") | |||
| (let ((buf-pred-entry (assq 'buffer-predicate default-frame-alist))) | |||
| (if buf-pred-entry | |||
| (setcdr buf-pred-entry 'uno/useful-buffer-p) | |||
| (push '(buffer-predicate . uno/useful-buffer-p) default-frame-alist)))) | |||
| #+END_SRC | |||
| * Keybinds | |||
| #+BEGIN_SRC emacs-lisp | |||
| (use-package emacs | |||
| :after uno-buffer | |||
| :general | |||
| (uno-leader-define | |||
| "b" '(:ignore t :which-key "Buffer") | |||
| "bd" '(uno/kill-this-buffer :which-key "Kill buffer") | |||
| "bm" '(uno/switch-to-messages-buffer :which-key "Messages") | |||
| "bn" '(next-buffer :which-key "Next buffer") | |||
| "bp" '(previous-buffer :which-key "Previous buffer")) | |||
| :init | |||
| (defun uno/kill-this-buffer () | |||
| "Split the window vertically and focus the new window." | |||
| (interactive) | |||
| (if (window-minibuffer-p) | |||
| (abort-recursive-edit) | |||
| (kill-buffer))) | |||
| (defun uno/switch-to-messages-buffer () | |||
| "Split the window horizontally and focus the new window." | |||
| (interactive) | |||
| (with-current-buffer (messages-buffer) | |||
| (goto-char (point-max)) | |||
| (switch-to-buffer (current-buffer))))) | |||
| #+END_SRC | |||
| @ -0,0 +1,35 @@ | |||
| #+TITLE: Core - Config | |||
| #+AUTHOR: Juan Placencia | |||
| * Package | |||
| Define core config package. | |||
| #+BEGIN_SRC emacs-lisp | |||
| (use-package emacs | |||
| :after uno | |||
| :config | |||
| (provide 'uno-config)) | |||
| #+END_SRC | |||
| * Emacs Customizations and Overrides | |||
| #+BEGIN_SRC emacs-lisp | |||
| (use-package emacs | |||
| :after uno-config | |||
| :general | |||
| (uno-leader-define | |||
| "fed" '(uno/config/edit :which-key "Edit emacs configuration") | |||
| "fer" '(uno/config/reload :which-key "Reload Emacs configuration") | |||
| "fs" '(save-buffer :which-key "Save file") | |||
| "fS" '(uno/file/save-all-files :which-key "Save all files")) | |||
| :init | |||
| (defun uno/config/edit () | |||
| "Open configuration file." | |||
| (interactive) | |||
| (find-file (uno-path "bootstrap.org"))) | |||
| (defun uno/config/reload () | |||
| "Reload configuration." | |||
| (interactive) | |||
| (load-file (uno-emacs-path "init.el")))) | |||
| #+END_SRC | |||
| @ -0,0 +1,35 @@ | |||
| #+TITLE: Dev | |||
| #+AUTHOR: Juan Placencia | |||
| * Package | |||
| Define dev package. | |||
| #+BEGIN_SRC emacs-lisp | |||
| (use-package emacs | |||
| :after uno | |||
| :config | |||
| (provide 'uno-dev)) | |||
| #+END_SRC | |||
| * EditorConfig | |||
| Automatically configure coding styles. | |||
| #+BEGIN_SRC emacs-lisp | |||
| (use-package editorconfig | |||
| :after uno-dev | |||
| :config | |||
| (editorconfig-mode 1)) | |||
| #+END_SRC | |||
| * Keychain | |||
| Set up integration with keychain. | |||
| #+BEGIN_SRC emacs-lisp | |||
| (use-package keychain-environment | |||
| :after uno-dev | |||
| :config | |||
| (keychain-refresh-environment)) | |||
| #+END_SRC | |||
| @ -0,0 +1,51 @@ | |||
| #+TITLE: Dev - Format | |||
| #+AUTHOR: Juan Placencia | |||
| * Package | |||
| Define format dev package. | |||
| #+BEGIN_SRC emacs-lisp | |||
| (use-package emacs | |||
| :after uno-dev | |||
| :config | |||
| (provide 'uno-dev-format)) | |||
| #+END_SRC | |||
| * Default Formatting | |||
| #+BEGIN_SRC emacs-lisp | |||
| (use-package emacs | |||
| :after uno-dev-format | |||
| :custom | |||
| (indent-tabs-mode nil) | |||
| (tab-width 2)) | |||
| #+END_SRC | |||
| * Smartparens | |||
| Helpers are borrowed from Spacemacs. | |||
| #+BEGIN_SRC emacs-lisp | |||
| (use-package smartparens | |||
| :after uno-dev-format | |||
| :custom | |||
| (sp-show-pair-delay 0.2) | |||
| (sp-show-pair-from-inside t) | |||
| (sp-cancel-autoskip-on-backward-movement nil) | |||
| (sp-highlight-pair-overlay nil) | |||
| (sp-highlight-wrap-overlay nil) | |||
| (sp-highlight-wrap-tag-overlay nil) | |||
| :hook | |||
| ((comint-mode uno-prog-mode) . smartparens-strict-mode) | |||
| (minibuffer-setup . uno/dev/format/minibuffer-smartparens) | |||
| :init | |||
| (defun uno/dev/format/minibuffer-smartparens () | |||
| "Enable `smartparens-mode' in the minibuffer, during `eval-expression'." | |||
| (when (or (eq this-command 'eval-expression) | |||
| (eq this-command 'eldoc-eval-expression)) | |||
| (smartparens-strict-mode 1))) | |||
| :config | |||
| (show-smartparens-global-mode 1) | |||
| (sp-local-pair 'minibuffer-inactive-mode "'" nil :actions nil)) | |||
| #+END_SRC | |||
| @ -0,0 +1,92 @@ | |||
| #+TITLE: Dev - Git | |||
| #+AUTHOR: Juan Placencia | |||
| * Package | |||
| Define Git dev package. | |||
| #+BEGIN_SRC emacs-lisp | |||
| (use-package emacs | |||
| :after uno-dev | |||
| :config | |||
| (provide 'uno-dev-git)) | |||
| #+END_SRC | |||
| * Magit | |||
| #+BEGIN_SRC emacs-lisp | |||
| (use-package magit | |||
| :after uno-dev-git | |||
| :general | |||
| (uno-leader-define | |||
| "g" '(:ignore t :which-key "Git") | |||
| "gc" '(magit-clone :which-key "Git clone") | |||
| "gf" '(:ignore t :which-key "Git file") | |||
| "gff" '(magit-find-file :which-key "Git file find") | |||
| "gfd" '(magit-diff :which-key "Git file diff") | |||
| "gfl" '(magit-log-buffer-file :which-key "Git file log") | |||
| "gfm" '(magit-file-dispatch :which-key "Git file dispatch") | |||
| "gfs" '(magit-stage-file :which-key "Git stage file") | |||
| "gfu" '(magit-unstage-file :which-key "Git unstage file") | |||
| "gi" '(magit-init :which-key "Git init") | |||
| "gl" '(magit-list-repositories :which-key "Git repositories") | |||
| "gm" '(magit-dispatch :which-key "Git dispatch") | |||
| "gs" '(magit-status :which-key "Git status")) | |||
| (uno-mode-leader-define | |||
| :keymaps 'with-editor-mode-map | |||
| uno-mode-leader-key '(with-editor-finish :which-key "Finish") | |||
| "k" '(with-editor-cancel :which-key "Cancel")) | |||
| (uno-mode-leader-define | |||
| :keymaps 'magit-log-select-mode-map | |||
| uno-mode-leader-key '(magit-log-select-pick :which-key "Pick") | |||
| "k" '(magit-log-select-quit :which-key "Cancel")) | |||
| :init | |||
| (uno/add-useful-buffer "magit: .*") | |||
| (uno/add-useful-buffer "magit-.*: .*")) | |||
| (use-package magit | |||
| :after (uno-dev-git mixed-pitch) | |||
| :hook | |||
| (git-commit-mode . uno/dev/git/commit-mode) | |||
| :init | |||
| (defun uno/dev/git/commit-mode () | |||
| "Customize commit mode." | |||
| (mixed-pitch-mode -1))) | |||
| (use-package forge | |||
| :unless (eq system-type 'windows-nt) | |||
| :after (uno-dev-git magit) | |||
| :custom | |||
| (forge-database-file (uno-cache-path "forge/database.sqlite")) | |||
| :general | |||
| (uno-mode-leader-define | |||
| :keymaps 'forge-topic-mode-map | |||
| "c" '(forge-post-submit :which-key "Create post") | |||
| "e" '(forge-post-cancel :which-key "Edit post")) | |||
| (uno-mode-leader-define | |||
| :keymaps 'forge-post-mode-map | |||
| uno-mode-leader-key '(forge-post-submit :which-key "Submit") | |||
| "k" '(forge-post-cancel :which-key "Cancel"))) | |||
| (use-package transient | |||
| :after uno-dev-git | |||
| :custom | |||
| (transient-history-file (uno-cache-path "transient/history.el")) | |||
| (transient-levels-file (uno-cache-path "transient/levels.el")) | |||
| (transient-values-file (uno-cache-path "transient/values.el"))) | |||
| #+END_SRC | |||
| * Git Files | |||
| #+BEGIN_SRC emacs-lisp | |||
| (use-package gitattributes-mode | |||
| :after uno-dev-git | |||
| :config | |||
| (uno/add-prog-mode 'gitattributes-mode)) | |||
| (use-package gitconfig-mode | |||
| :after uno-dev-git) | |||
| (use-package gitignore-mode | |||
| :after uno-dev-git) | |||
| #+END_SRC | |||
| @ -0,0 +1,48 @@ | |||
| #+TITLE: Dev - LSP | |||
| #+AUTHOR: Juan Placencia | |||
| * Package | |||
| Define LSP dev package. | |||
| #+BEGIN_SRC emacs-lisp | |||
| (use-package emacs | |||
| :after uno-dev | |||
| :config | |||
| (provide 'uno-dev-lsp)) | |||
| #+END_SRC | |||
| * Language Server Protocol | |||
| #+BEGIN_SRC emacs-lisp | |||
| (use-package lsp-mode | |||
| :after uno-dev-lsp | |||
| :custom | |||
| (read-process-output-max (* 5 1024 1024)) | |||
| (lsp-headerline-breadcrumb-segments '(file symbols)) | |||
| (lsp-server-install-dir (uno-cache-path "lsp/server/")) | |||
| (lsp-session-file (uno-cache-path "lsp/session")) | |||
| :general | |||
| (uno-mode-leader-define | |||
| :keymaps 'lsp-mode-map | |||
| "h" '(:ignore t :which-key "Help") | |||
| "hh" '(lsp-describe-thing-at-point :which-key "Describe") | |||
| "r" '(:ignore t :watch-key "Refactor") | |||
| "rr" '(lsp-rename :which-key "Rename")) | |||
| :config | |||
| (uno/add-useless-buffer "\\*lsp-log\\*")) | |||
| (use-package lsp-mode | |||
| :after (uno-dev-lsp which-key) | |||
| :hook | |||
| (lsp-mode . lsp-enable-which-key-integration)) | |||
| (use-package lsp-ui | |||
| :after (uno-dev-lsp lsp-mode)) | |||
| (use-package lsp-treemacs | |||
| :disabled | |||
| :after (uno-dev-lsp lsp-mode treemacs) | |||
| :config | |||
| (lsp-treemacs-sync-mode 1)) | |||
| #+END_SRC | |||
| @ -0,0 +1,35 @@ | |||
| #+TITLE: Dev - Project | |||
| #+AUTHOR: Juan Placencia | |||
| * Package | |||
| Define project dev package. | |||
| #+BEGIN_SRC emacs-lisp | |||
| (use-package emacs | |||
| :after uno-dev | |||
| :config | |||
| (provide 'uno-dev-project)) | |||
| #+END_SRC | |||
| * Projectile | |||
| #+BEGIN_SRC emacs-lisp | |||
| (use-package projectile | |||
| :after uno-dev-project | |||
| :custom | |||
| (projectile-cache-file (uno-cache-path "projectile/cache")) | |||
| (projectile-completion-system 'default) | |||
| (projectile-sort-order 'recentf) | |||
| (projectile-known-projects-file (uno-cache-path "projectile/bookmarks.eld")) | |||
| :general | |||
| (uno-leader-define | |||
| "p" '(:ignore t :which-key "Project") | |||
| "pb" '(projectile-switch-to-buffer :which-key "Switch project buffer") | |||
| "pf" '(projectile-find-file :which-key "Open project file") | |||
| "pk" '(projectile-kill-buffers :which-key "Kill project buffers") | |||
| "pp" '(projectile-switch-project :which-key "Switch project") | |||
| "pr" '(projectile-recentf :which-key "Open recent project file")) | |||
| :init | |||
| (projectile-mode 1)) | |||
| #+END_SRC | |||
| @ -0,0 +1,47 @@ | |||
| #+TITLE: Dev - Shell | |||
| #+AUTHOR: Juan Placencia | |||
| * Package | |||
| Define shell dev package. | |||
| #+BEGIN_SRC emacs-lisp | |||
| (use-package emacs | |||
| :after uno-dev | |||
| :config | |||
| (provide 'uno-dev-shell)) | |||
| #+END_SRC | |||
| * Eshell | |||
| Configure eshell package. | |||
| #+BEGIN_SRC emacs-lisp | |||
| (use-package eshell | |||
| :after uno-dev-shell | |||
| :custom | |||
| (eshell-banner-message "") | |||
| :general | |||
| (uno-leader-define | |||
| "se" '(eshell :which-key "Eshell")) | |||
| :config | |||
| (defun eshell/clear () | |||
| (let ((inhibit-read-only t)) | |||
| (erase-buffer))) | |||
| (eshell/alias "e" "find-file $*") | |||
| (eshell/alias "hgrep" "history | grep $*") | |||
| (eshell/alias "la" "ls -lAh $*")) | |||
| (use-package eshell | |||
| :after (uno-dev-shell projectile) | |||
| :general | |||
| (uno-leader-define | |||
| "pse" '(uno/shell/project-eshell :which-key "Eshell")) | |||
| :init | |||
| (defun uno/shell/project-eshell () | |||
| "Open Eshell in project root." | |||
| (interactive) | |||
| (when (projectile-project-p) | |||
| (let ((default-directory (projectile-project-root))) | |||
| (eshell 'N))))) | |||
| #+END_SRC | |||
| @ -0,0 +1,62 @@ | |||
| #+TITLE: Dev - Sudo | |||
| #+AUTHOR: Juan Placencia | |||
| * Package | |||
| Define sudo dev package. | |||
| #+BEGIN_SRC emacs-lisp | |||
| (use-package emacs | |||
| :after uno-dev | |||
| :config | |||
| (provide 'uno-dev-sudo)) | |||
| #+END_SRC | |||
| * Sudo File Support | |||
| Borrowed from doom-emacs. | |||
| #+BEGIN_SRC emacs-lisp | |||
| (use-package emacs | |||
| :after uno-dev-sudo | |||
| :init | |||
| (defun uno/dev/sudo/file-path (file) | |||
| "Get FILE path for sudo access." | |||
| (let ((host (or (file-remote-p file 'host) "localhost"))) | |||
| (concat "/" (when (file-remote-p file) | |||
| (concat (file-remote-p file 'method) ":" | |||
| (if-let (user (file-remote-p file 'user)) | |||
| (concat user "@" host) | |||
| host) | |||
| "|")) | |||
| "sudo:root@" host | |||
| ":" (or (file-remote-p file 'localname) | |||
| file)))) | |||
| (defun uno/dev/sudo/find-file (file) | |||
| "Open FILE as root." | |||
| (interactive "FOpen file as root: ") | |||
| (find-file (uno/dev/sudo/file-path file))) | |||
| (defun uno/dev/sudo/open-this-file () | |||
| "Open the current file as root." | |||
| (interactive) | |||
| (uno/dev/sudo/find-file | |||
| (or buffer-file-name | |||
| (when (or (derived-mode-p 'dired-mode) | |||
| (derived-mode-p 'wdired-mode)) | |||
| default-directory)))) | |||
| (defun uno/dev/sudo/save-this-file () | |||
| "Save this file as root." | |||
| (interactive) | |||
| (let ((file (uno/dev/sudo/file-path buffer-file-name))) | |||
| (if-let (buffer (find-file-noselect file)) | |||
| (let ((origin (current-buffer))) | |||
| (copy-to-buffer buffer (point-min) (point-max)) | |||
| (unwind-protect | |||
| (with-current-buffer buffer | |||
| (save-buffer)) | |||
| (unless (eq origin buffer) | |||
| (kill-buffer buffer)) | |||
| (with-current-buffer origin | |||
| (revert-buffer t t)))) | |||
| (user-error "Unable to open %S" file))))) | |||
| #+END_SRC | |||
| @ -0,0 +1,38 @@ | |||
| #+TITLE: Dev - Syntax | |||
| #+AUTHOR: Juan Placencia | |||
| * Package | |||
| Define syntax dev package. | |||
| #+BEGIN_SRC emacs-lisp | |||
| (use-package emacs | |||
| :after uno-dev | |||
| :config | |||
| (provide 'uno-dev-syntax)) | |||
| #+END_SRC | |||
| * Flycheck | |||
| #+BEGIN_SRC emacs-lisp | |||
| (use-package flycheck | |||
| :after uno-dev-syntax | |||
| :general | |||
| (uno-leader-define | |||
| "e" '(:ignore t :which-key "Error") | |||
| "el" '(uno/dev/syntax/toggle-flycheck :which-key "Error list")) | |||
| :init | |||
| (defun uno/dev/syntax/toggle-flycheck () | |||
| "Toggle flycheck" | |||
| (interactive) | |||
| (if-let ((-window (flycheck-get-error-list-window))) | |||
| (quit-window nil -window) | |||
| (flycheck-list-errors))) | |||
| :config | |||
| (uno/handle-side-window "\\*Flycheck errors\\*")) | |||
| (use-package hide-mode-line | |||
| :after (uno-dev-syntax flycheck) | |||
| :hook | |||
| (flycheck-error-list-mode . turn-on-hide-mode-line-mode)) | |||
| #+END_SRC | |||
| @ -0,0 +1,24 @@ | |||
| #+TITLE: Document | |||
| #+AUTHOR: Juan Placencia | |||
| * Package | |||
| Define document package. | |||
| #+BEGIN_SRC emacs-lisp | |||
| (use-package emacs | |||
| :after uno | |||
| :config | |||
| (provide 'uno-doc)) | |||
| #+END_SRC | |||
| * Mixed Pitch | |||
| Use variable pitch font where applicable. | |||
| #+BEGIN_SRC emacs-lisp | |||
| (use-package mixed-pitch | |||
| :after uno-doc | |||
| :hook | |||
| (uno-text-mode . mixed-pitch-mode)) | |||
| #+END_SRC | |||
| @ -0,0 +1,40 @@ | |||
| #+TITLE: Doc - Markdown | |||
| #+AUTHOR: Juan Placencia | |||
| * Package | |||
| Define markdown document package. | |||
| #+BEGIN_SRC emacs-lisp | |||
| (use-package emacs | |||
| :after uno-doc | |||
| :config | |||
| (provide 'uno-doc-markdown)) | |||
| #+END_SRC | |||
| * Markdown | |||
| #+BEGIN_SRC emacs-lisp | |||
| (use-package markdown-mode | |||
| :after uno-doc-markdown | |||
| :hook | |||
| (markdown-mode . uno/doc/markdown/theme-markdown) | |||
| :init | |||
| (defun uno/doc/markdown/theme-markdown () | |||
| "Customize face heights." | |||
| (when (display-graphic-p) | |||
| (custom-theme-set-faces | |||
| 'user | |||
| '(markdown-header-face-1 | |||
| ((t (:inherit markdown-header-face :height 1.6)))) | |||
| '(markdown-header-face-2 | |||
| ((t (:inherit markdown-header-face :height 1.5)))) | |||
| '(markdown-header-face-3 | |||
| ((t (:inherit markdown-header-face :height 1.4)))) | |||
| '(markdown-header-face-4 | |||
| ((t (:inherit markdown-header-face :height 1.3)))) | |||
| '(markdown-header-face-5 | |||
| ((t (:inherit markdown-header-face :height 1.2)))) | |||
| '(markdown-header-face-6 | |||
| ((t (:inherit markdown-header-face :height 1.1)))))))) | |||
| #+END_SRC | |||
| @ -0,0 +1,123 @@ | |||
| #+TITLE: Doc - Org | |||
| #+AUTHOR: Juan Placencia | |||
| * Package | |||
| Define Org document package. | |||
| #+BEGIN_SRC emacs-lisp | |||
| (use-package emacs | |||
| :after uno-doc | |||
| :config | |||
| (provide 'uno-doc-org)) | |||
| #+END_SRC | |||
| * Org | |||
| #+BEGIN_SRC emacs-lisp | |||
| (use-package org | |||
| :after uno-doc-org | |||
| :ensure org-plus-contrib | |||
| :custom | |||
| (org-adapt-indentation nil) | |||
| (org-ellipsis " ▼") | |||
| (org-hide-emphasis-markers t) | |||
| (org-src-window-setup 'current-window) | |||
| :hook | |||
| (org-mode . toggle-truncate-lines) | |||
| (org-mode . uno/doc/org/theme) | |||
| :general | |||
| (uno-mode-leader-define | |||
| :keymaps 'org-mode-map | |||
| "p" '(org-present :which-key "Org present") | |||
| "'" '(org-edit-special :which-key "Edit special")) | |||
| (uno-mode-leader-define | |||
| :definer 'minor-mode | |||
| :keymaps 'org-src-mode | |||
| uno-mode-leader-key '(org-edit-src-exit :which-key "Save") | |||
| "k" '(org-edit-src-abort :which-key "Cancel")) | |||
| :init | |||
| (defun uno/doc/org/theme () | |||
| "Customize face heights for org-mode." | |||
| (when (display-graphic-p) | |||
| (custom-theme-set-faces | |||
| 'user | |||
| '(org-document-title ((t (:height 1.8)))) | |||
| '(org-level-1 ((t (:inherit outline-1 :height 1.6)))) | |||
| '(org-level-2 ((t (:inherit outline-2 :height 1.5)))) | |||
| '(org-level-3 ((t (:inherit outline-3 :height 1.4)))) | |||
| '(org-level-4 ((t (:inherit outline-4 :height 1.3)))) | |||
| '(org-level-4 ((t (:inherit outline-5 :height 1.2)))) | |||
| '(org-level-5 ((t (:inherit outline-6 :height 1.1)))))))) | |||
| (use-package org-superstar | |||
| :if (display-graphic-p) | |||
| :after (uno-doc-org org) | |||
| :custom | |||
| (org-hide-leading-stars nil) | |||
| (org-superstar-leading-bullet "") | |||
| (org-superstar-special-todo-items t) | |||
| :hook | |||
| (org-mode . org-superstar-mode)) | |||
| #+END_SRC | |||
| * Presentation | |||
| #+BEGIN_SRC emacs-lisp | |||
| (use-package org-present | |||
| :after uno-doc-org | |||
| :hook | |||
| (org-present-mode . evil-motion-state) | |||
| (org-present-mode . org-display-inline-images) | |||
| (org-present-mode . org-present-big) | |||
| (org-present-mode . org-present-hide-cursor) | |||
| (org-present-mode . org-present-read-only) | |||
| (org-present-mode . uno/doc/org/present) | |||
| (org-present-mode-quit . blink-cursor-mode) | |||
| (org-present-mode-quit . evil-normal-state) | |||
| (org-present-mode-quit . fringe-mode) | |||
| (org-present-mode-quit . org-present-read-write) | |||
| (org-present-mode-quit . org-present-show-cursor) | |||
| (org-present-mode-quit . org-present-small) | |||
| (org-present-mode-quit . uno/doc/org/present-quit) | |||
| :general | |||
| (uno-define | |||
| :keymaps 'org-present-mode-keymap | |||
| "h" 'org-present-prev | |||
| "l" 'org-present-next | |||
| "q" 'org-present-quit | |||
| "<left>" 'org-present-prev | |||
| "<right>" 'org-present-next) | |||
| :init | |||
| (defun uno/doc/org/present () | |||
| "Start up org-present." | |||
| (set-window-margins (get-buffer-window) 1 1) | |||
| (setq-local header-line-format " ") | |||
| (blink-cursor-mode -1) | |||
| (fringe-mode -1)) | |||
| (defun uno/doc/org/present-quit () | |||
| "Clean up after exiting org-present." | |||
| (set-window-margins (get-buffer-window) 0 0) | |||
| (setq-local header-line-format nil) | |||
| (unless org-startup-with-inline-images | |||
| (org-remove-inline-images)))) | |||
| (use-package hide-mode-line | |||
| :after (uno-doc-org org-present) | |||
| :hook | |||
| (org-present-mode . turn-on-hide-mode-line-mode) | |||
| (org-present-mode-quit . turn-off-hide-mode-line-mode)) | |||
| #+END_SRC | |||
| * Evil Integration | |||
| #+BEGIN_SRC emacs-lisp | |||
| (use-package evil-org | |||
| :after (uno-doc-org evil org) | |||
| :custom | |||
| (evil-org-use-additional-insert t) | |||
| (evil-org-key-theme '(textobjects navigation additional)) | |||
| :hook | |||
| (org-mode . evil-org-mode) | |||
| (org-src-mode . evil-normalize-keymaps)) | |||
| #+END_SRC | |||
| @ -0,0 +1,22 @@ | |||
| #+TITLE: Key | |||
| #+AUTHOR: Juan Placencia | |||
| * Package | |||
| Define key package. | |||
| #+BEGIN_SRC emacs-lisp | |||
| (use-package emacs | |||
| :after uno | |||
| :config | |||
| (provide 'uno-key)) | |||
| #+END_SRC | |||
| * Ace Link | |||
| #+BEGIN_SRC emacs-lisp | |||
| (use-package ace-link | |||
| :after uno-key | |||
| :config | |||
| (ace-link-setup-default)) | |||
| #+END_SRC | |||
| @ -0,0 +1,67 @@ | |||
| #+TITLE: Key - Emacs | |||
| #+AUTHOR: Juan Placencia | |||
| * Package | |||
| Define Emacs key package. | |||
| #+BEGIN_SRC emacs-lisp | |||
| (use-package emacs | |||
| :after uno-key | |||
| :config | |||
| (provide 'uno-key-emacs)) | |||
| #+END_SRC | |||
| * Keybinds | |||
| Define core keybinds. | |||
| #+BEGIN_SRC emacs-lisp | |||
| (use-package emacs | |||
| :after uno-key-emacs | |||
| :custom | |||
| (confirm-kill-emacs 'y-or-n-p) | |||
| :general | |||
| (uno-leader-define | |||
| "f" '(:ignore t :which-key "File") | |||
| "fe" '(:ignore t :which-key "Emacs") | |||
| "fR" '(uno/key/emacs/rename-file :which-key "Rename file") | |||
| "fs" '(save-buffer :which-key "Save file") | |||
| "fS" '(uno/key/emacs/save-all-files :which-key "Save all files") | |||
| "h" '(:ignore t :which-key "Help") | |||
| "hd" '(:ignore t :which-key "Describe") | |||
| "hdb" '(describe-bindings :which-key "Describe bindings") | |||
| "hdc" '(describe-char :which-key "Describe char") | |||
| "hdf" '(describe-function :which-key "Describe function") | |||
| "hdF" '(describe-face :which-key "Describe face") | |||
| "hdk" '(describe-key :which-key "Describe key") | |||
| "hdm" '(describe-mode :which-key "Describe mode") | |||
| "hdp" '(describe-package :which-key "Describe package") | |||
| "hdt" '(describe-theme :which-key "Describe theme") | |||
| "hdv" '(describe-variable :which-key "Describe variable") | |||
| "q" '(:ignore t :which-key "Quit") | |||
| "qq" '(save-buffers-kill-terminal :which-key "Save all and quit Emacs") | |||
| "qQ" '(kill-emacs :which-key "Quit Emacs") | |||
| "qx" '(save-buffers-kill-emacs :which-key "Save all and kill Emacs")) | |||
| :init | |||
| (defun uno/key/emacs/save-all-files () | |||
| "Save all files." | |||
| (interactive) | |||
| (save-some-buffers t (lambda () | |||
| (and (not buffer-read-only) | |||
| (buffer-file-name)))))) | |||
| #+END_SRC | |||
| ** Restart Emacs | |||
| Use =restart-emacs= to handle different edge cases. | |||
| #+BEGIN_SRC emacs-lisp | |||
| (use-package restart-emacs | |||
| :after uno-key-emacs | |||
| :custom | |||
| (restart-emacs-restore-frames t) | |||
| :general | |||
| (uno-leader-define | |||
| "qr" '(restart-emacs :which-key "Restart Emacs"))) | |||
| #+END_SRC | |||
| @ -0,0 +1,67 @@ | |||
| #+TITLE: Key - Vim | |||
| #+AUTHOR: Juan Placencia | |||
| * Package | |||
| Define Vim key package. | |||
| #+BEGIN_SRC emacs-lisp | |||
| (use-package emacs | |||
| :after uno-key | |||
| :config | |||
| (provide 'uno-key-vim)) | |||
| #+END_SRC | |||
| * Evil | |||
| #+BEGIN_SRC emacs-lisp | |||
| (use-package evil | |||
| :after uno-key-vim | |||
| :custom | |||
| (evil-split-window-before t) | |||
| (evil-vsplit-window-right t) | |||
| (evil-want-integration t) | |||
| (evil-want-keybinding nil) | |||
| :config | |||
| (general-evil-setup) | |||
| (evil-mode 1)) | |||
| #+END_SRC | |||
| ** Comment | |||
| #+BEGIN_SRC emacs-lisp | |||
| (use-package evil-nerd-commenter | |||
| :after (uno-key-vim evil) | |||
| ;; :general | |||
| ;; (uno-leader-define | |||
| ;; ";" '(evilnc-comment-or-uncomment-lines :which-key "Toggle comment")) | |||
| ) | |||
| #+END_SRC | |||
| ** Undo-Fu Integration | |||
| #+BEGIN_SRC emacs-lisp | |||
| (use-package undo-fu | |||
| :after (uno-key-vim evil) | |||
| :custom | |||
| (evil-undo-system 'undo-fu) | |||
| :general | |||
| (uno-define ";" 'evil-ex)) | |||
| #+END_SRC | |||
| ** Evil Collection | |||
| #+BEGIN_SRC emacs-lisp | |||
| (use-package evil-collection | |||
| :after (uno-key-vim evil) | |||
| :config | |||
| (evil-collection-init)) | |||
| #+END_SRC | |||
| ** Anzu Integration | |||
| #+BEGIN_SRC emacs-lisp | |||
| (use-package evil-anzu | |||
| :after (uno-key-vim evil) | |||
| :config | |||
| (global-anzu-mode 1)) | |||
| #+END_SRC | |||
| @ -0,0 +1,52 @@ | |||
| #+TITLE: Key - Window | |||
| #+AUTHOR: Juan Placencia | |||
| * Package | |||
| Define window key package. | |||
| #+BEGIN_SRC emacs-lisp | |||
| (use-package emacs | |||
| :after uno-key | |||
| :config | |||
| (provide 'uno-key-window)) | |||
| #+END_SRC | |||
| * Keybinds | |||
| #+BEGIN_SRC emacs-lisp | |||
| (use-package emacs | |||
| :after uno-key-window | |||
| :general | |||
| (uno-leader-define | |||
| "w" '(:ignore t :which-key "Window") | |||
| "wd" '(delete-window :which-key "Delete window") | |||
| "wD" '(delete-other-windows :which-key "Delete other windows") | |||
| "wm" '(uno/key/window/toggle-maximize :which-key "Toggle maximize") | |||
| "ws" '(uno/key/window/split-below :which-key "Split down and focus") | |||
| "wS" '(split-window-below :which-key "Split down") | |||
| "wv" '(uno/key/window/split-right :which-key "Split right and focus") | |||
| "wV" '(split-window-right :which-key "Split right")) | |||
| :init | |||
| (defun uno/key/window/toggle-maximize () | |||
| "Maximize buffer" | |||
| (interactive) | |||
| (save-excursion | |||
| (if (and (= 1 (length (window-list))) | |||
| (assoc ?_ register-alist)) | |||
| (jump-to-register ?_) | |||
| (progn | |||
| (window-configuration-to-register ?_) | |||
| (delete-other-windows))))) | |||
| (defun uno/key/window/split-below () | |||
| "Split the window vertically and focus the new window." | |||
| (interactive) | |||
| (split-window-below) | |||
| (windmove-down)) | |||
| (defun uno/key/window/split-right () | |||
| "Split the window horizontally and focus the new window." | |||
| (interactive) | |||
| (split-window-right) | |||
| (windmove-right))) | |||
| #+END_SRC | |||
| @ -0,0 +1,13 @@ | |||
| #+TITLE: Language | |||
| #+AUTHOR: Juan Placencia | |||
| * Package | |||
| Define language package. | |||
| #+BEGIN_SRC emacs-lisp | |||
| (use-package emacs | |||
| :after uno | |||
| :config | |||
| (provide 'uno-lang)) | |||
| #+END_SRC | |||
| @ -0,0 +1,29 @@ | |||
| #+TITLE: Language - Emacs Lisp | |||
| #+AUTHOR: Juan Placencia | |||
| * Package | |||
| Define Emacs Lisp language package. | |||
| #+BEGIN_SRC emacs-lisp | |||
| (use-package emacs | |||
| :after uno-lang | |||
| :config | |||
| (provide 'uno-lang-elisp)) | |||
| #+END_SRC | |||
| * Flycheck Integration | |||
| #+BEGIN_SRC emacs-lisp | |||
| (use-package emacs | |||
| :after flycheck | |||
| :hook | |||
| (emacs-lisp-mode . flycheck-mode) | |||
| (emacs-lisp-mode . uno/emacs-lisp/check-org-src) | |||
| :init | |||
| (defun uno/lang/elisp/check-org-src () | |||
| "Check if in org-src mode." | |||
| (when (org-src-edit-buffer-p) | |||
| (make-local-variable 'flycheck-disabled-checkers) | |||
| (push 'emacs-lisp-checkdoc flycheck-disabled-checkers)))) | |||
| #+END_SRC | |||
| @ -0,0 +1,13 @@ | |||
| #+TITLE: Language - JavaScript | |||
| #+AUTHOR: Juan Placencia | |||
| * Package | |||
| Define JavaScript language package. | |||
| #+BEGIN_SRC emacs-lisp | |||
| (use-package emacs | |||
| :after uno-lang | |||
| :config | |||
| (provide 'uno-lang-js)) | |||
| #+END_SRC | |||
| @ -0,0 +1,50 @@ | |||
| #+TITLE: Language - JavaScript - TypeScript | |||
| #+AUTHOR: Juan Placencia | |||
| * Package | |||
| Define TypeScript JavaScript language package. | |||
| #+BEGIN_SRC emacs-lisp | |||
| (use-package emacs | |||
| :after uno-lang-js | |||
| :config | |||
| (provide 'uno-lang-js-ts)) | |||
| #+END_SRC | |||
| * TypeScript, TSX Mode | |||
| #+BEGIN_SRC emacs-lisp | |||
| (use-package web-mode | |||
| :after uno-lang-js-ts) | |||
| (use-package typescript-mode | |||
| :after (uno-lang-js-ts web-mode) | |||
| :init | |||
| (define-derived-mode typescript-tsx-mode web-mode "typescript-tsx") | |||
| (push '("\\.tsx\\'" . typescript-tsx-mode) auto-mode-alist)) | |||
| #+END_SRC | |||
| * LSP Integration | |||
| #+BEGIN_SRC emacs-lisp | |||
| (use-package typescript-mode | |||
| :after (uno-lang-js-ts uno-lang-js-yarn) | |||
| :hook | |||
| (uno-lang-js-yarn . uno/lang/js/ts/yarn) | |||
| ((typescript-mode typescript-tsx-mode) . uno/lang/js/yarn/check) | |||
| :init | |||
| (defun uno/lang/js/ts/yarn () | |||
| "Attempt to load SDKs with Yarn support." | |||
| (when (and (member major-mode '(typescript-mode typescript-tsx-mode)) | |||
| (uno/lang/js/yarn/add-to-local-lsp | |||
| 'typescript-language-server | |||
| "typescript-language-server/lib/cli.js") | |||
| (uno/lang/js/yarn/add-to-local-lsp | |||
| 'typescript | |||
| "typescript/bin/tsserver")) | |||
| (push 'ts-ls lsp-enabled-clients) | |||
| (lsp))) | |||
| (uno/add-useless-buffer "\\*ts-ls\\*") | |||
| (uno/add-useless-buffer "\\*ts-ls::.*\\*")) | |||
| #+END_SRC | |||
| @ -0,0 +1,65 @@ | |||
| #+TITLE: Language - JavaScript - Yarn | |||
| #+AUTHOR: Juan Placencia | |||
| * Package | |||
| Define JavaScript language package. | |||
| #+BEGIN_SRC emacs-lisp | |||
| (use-package emacs | |||
| :after (uno-lang-js uno-dev-lsp projectile) | |||
| :config | |||
| (provide 'uno-lang-js-yarn)) | |||
| #+END_SRC | |||
| * LSP Integration | |||
| #+BEGIN_SRC emacs-lisp | |||
| (use-package emacs | |||
| :after uno-lang-js-yarn | |||
| :init | |||
| (defun uno/lang/js/yarn/add-to-local-lsp (name file) | |||
| "Add NAME dependency from FILE to local yarn instance." | |||
| (when (uno/lang/js/yarn/local-p file) | |||
| (lsp-dependency name `(:yarn-local ,file)) | |||
| t)) | |||
| (defun uno/lang/js/yarn/check () | |||
| "Set up support with local Yarn instance." | |||
| (when (uno/lang/js/yarn/local-p) | |||
| (require 'lsp-javascript) | |||
| (make-local-variable 'lsp-enabled-clients) | |||
| (plist-put lsp-deps-providers | |||
| :yarn-local '(:path uno/lang/js/yarn/local-provider)) | |||
| (setq-local lsp-auto-guess-root t) | |||
| (run-hooks 'uno-lang-js-yarn-hook))) | |||
| (defun uno/lang/js/yarn/local-p (&optional file) | |||
| "Check if Yarn SDK is available locally." | |||
| (if file | |||
| (file-exists-p (uno/lang/js/yarn/local-provider file)) | |||
| (file-directory-p (uno/lang/js/yarn/local-provider)))) | |||
| (defun uno/lang/js/yarn/local-provider (&optional path) | |||
| "Provide path for local yarn instance relative to PATH." | |||
| (concat (projectile-project-root) ".yarn/sdks/" path))) | |||
| #+END_SRC | |||
| ** ESLint Integration | |||
| #+BEGIN_SRC emacs-lisp | |||
| (use-package emacs | |||
| :after (uno-lang-js-yarn flycheck) | |||
| :hook | |||
| (uno-lang-js-yarn . uno/lang/js/eslint/add) | |||
| :init | |||
| (defun uno/lang/js/eslint/add () | |||
| "Add support for ESLint." | |||
| (when (uno/lang/js/yarn/local-p "eslint/bin/eslint.js") | |||
| (let ((-eslint-full (uno/lang/js/yarn/local-provider "eslint/bin/eslint.js")) | |||
| (-node-path (uno/lang/js/yarn/local-provider))) | |||
| (setq-local | |||
| flycheck-javascript-eslint-executable -eslint-full | |||
| lsp-eslint-node-path -node-path | |||
| lsp-eslint-package-manager "yarn")) | |||
| (push 'eslint lsp-enabled-clients))) | |||
| (uno/add-useless-buffer "\\*eslint\\*") | |||
| (uno/add-useless-buffer "\\*eslint::.*\\*")) | |||
| #+END_SRC | |||
| @ -0,0 +1,39 @@ | |||
| #+TITLE: Core - Mode | |||
| #+AUTHOR: Juan Placencia | |||
| * Package | |||
| Define core mode package. | |||
| #+BEGIN_SRC emacs-lisp | |||
| (use-package emacs | |||
| :after uno | |||
| :config | |||
| (provide 'uno-mode)) | |||
| #+END_SRC | |||
| * Program/Text Mode | |||
| Define custom =prog-mode= and =text-mode= as there are some libraries that do not abide. | |||
| #+BEGIN_SRC emacs-lisp | |||
| (use-package emacs | |||
| :after uno-mode | |||
| :hook | |||
| ((conf-mode prog-mode) . uno/run-prog-mode-hook) | |||
| (text-mode . uno/run-text-mode-hook) | |||
| :init | |||
| (defvar uno--prog-based-modes '(nxml-mode) | |||
| "List of prog based modes.") | |||
| (defun uno/add-prog-mode (mode) | |||
| "Consider MODE prog based." | |||
| (push mode uno--prog-based-modes)) | |||
| (defun uno/run-prog-mode-hook () | |||
| "Configure program mode." | |||
| (run-hooks 'uno-prog-mode-hook)) | |||
| (defun uno/run-text-mode-hook () | |||
| "Configure text mode, checking for prog mode." | |||
| (if (member major-mode uno--prog-based-modes) | |||
| (uno/run-prog-mode-hook) | |||
| (run-hooks 'uno-text-mode-hook)))) | |||
| #+END_SRC | |||
| @ -0,0 +1,31 @@ | |||
| #+TITLE: UI | |||
| #+AUTHOR: Juan Placencia | |||
| * Package | |||
| Define UI package. | |||
| #+BEGIN_SRC emacs-lisp | |||
| (use-package emacs | |||
| :after uno | |||
| :config | |||
| (provide 'uno-ui)) | |||
| #+END_SRC | |||
| * Icons | |||
| Add support for icons via =all-the-icons=. | |||
| #+BEGIN_SRC emacs-lisp | |||
| (use-package all-the-icons | |||
| :after uno-ui) | |||
| #+END_SRC | |||
| * Which Key | |||
| #+BEGIN_SRC emacs-lisp | |||
| (use-package which-key | |||
| :after uno-ui | |||
| :config | |||
| (which-key-mode 1)) | |||
| #+END_SRC | |||
| @ -0,0 +1,160 @@ | |||
| #+TITLE: UI - Completion | |||
| #+AUTHOR: Juan Placencia | |||
| * Package | |||
| Define UI completion package. | |||
| #+BEGIN_SRC emacs-lisp | |||
| (use-package emacs | |||
| :after uno-ui | |||
| :config | |||
| (provide 'uno-ui-completion)) | |||
| #+END_SRC | |||
| * Vertico | |||
| #+BEGIN_SRC emacs-lisp | |||
| (use-package vertico | |||
| :after uno-ui-completion | |||
| :custom | |||
| (enable-recursive-minibuffers t) | |||
| (minibuffer-prompt-properties '(read-only | |||
| t | |||
| cursor-intangible | |||
| t | |||
| face | |||
| minibuffer-prompt)) | |||
| (vertico-cycle t) | |||
| :hook | |||
| (minibuffer-setup . cursor-intangible-mode) | |||
| :general | |||
| (vertico-map | |||
| "<escape>" 'abort-recursive-edit | |||
| "C-j" 'vertico-next | |||
| "C-k" 'vertico-previous) | |||
| :init | |||
| (defun crm-indicator (args) | |||
| (cons (concat "[CRM] " (car args)) (cdr args))) | |||
| (advice-add 'completing-read-multiple :filter-args 'crm-indicator) | |||
| (vertico-mode 1)) | |||
| (use-package orderless | |||
| :after (uno-ui-completion vertico) | |||
| :custom | |||
| (completion-category-defaults nil) | |||
| (completion-category-overrides '((file (styles . (partial-completion))))) | |||
| (completion-styles '(substring orderless))) | |||
| (use-package savehist | |||
| :after (uno-ui-completion vertico) | |||
| :custom | |||
| (savehist-file (uno-cache-path "savehist")) | |||
| :config | |||
| (savehist-mode 1)) | |||
| #+END_SRC | |||
| * Consult | |||
| Enhance completion. | |||
| #+BEGIN_SRC emacs-lisp | |||
| (use-package consult | |||
| :after uno-ui-completion | |||
| :custom | |||
| (register-preview-delay 0) | |||
| (register-preview-function 'consult-register-format) | |||
| (xref-show-xrefs-function 'consult-xref) | |||
| (xref-show-definitions-function 'consult-xref) | |||
| :hook | |||
| (completion-list-mode . consult-preview-at-point-mode) | |||
| :general | |||
| (uno-leader-define | |||
| "bb" '(consult-buffer :which-key "Switch buffer"))) | |||
| (use-package consult | |||
| :after (uno-ui-completion projectile) | |||
| :custom | |||
| (consult-project-root-function 'projectile-project-root)) | |||
| #+END_SRC | |||
| ** Ripgrep Integration | |||
| Integrate for searching capabilities. | |||
| #+BEGIN_SRC emacs-lisp | |||
| (use-package ripgrep | |||
| :after uno-ui-completion | |||
| :if (executable-find "rg")) | |||
| (use-package consult | |||
| :after (uno-ui-completion ripgrep) | |||
| :general | |||
| (uno-leader-define | |||
| "/" '(consult-ripgrep :which-key "Search files"))) | |||
| #+END_SRC | |||
| * Company | |||
| Text completion framework. | |||
| #+BEGIN_SRC emacs-lisp | |||
| (use-package company | |||
| :after uno-ui-completion | |||
| :custom | |||
| (company-idle-delay 0) | |||
| (company-minimum-prefix-length 2) | |||
| (company-tooltip-limit 14) | |||
| (company-tooltip-align-annotations t) | |||
| (company-require-match 'never) | |||
| :hook | |||
| (company-mode . evil-normalize-keymaps) | |||
| (uno-prog-mode . company-mode)) | |||
| #+END_SRC | |||
| ** Help | |||
| Enable help tooltip for =company=. | |||
| #+BEGIN_SRC emacs-lisp | |||
| (use-package company-quickhelp | |||
| :after (uno-ui-completion company) | |||
| :custom | |||
| (register-preview-delay 0) | |||
| (register-preview-function 'consult-register-format) | |||
| (xref-show-xrefs-function 'consult-xref) | |||
| (xref-show-definitions-function 'consult-xref) | |||
| :hook | |||
| (company-mode . company-quickhelp-local-mode) | |||
| :config | |||
| (delq 'company-echo-metadata-frontend company-frontends)) | |||
| #+END_SRC | |||
| ** Icons | |||
| Front-end for =company= GUI. | |||
| #+BEGIN_SRC emacs-lisp | |||
| (use-package company-box | |||
| :after (uno-ui-completion company) | |||
| :if (display-graphic-p) | |||
| :custom | |||
| (company-box-backends-colors nil) | |||
| (company-box-max-candidates 50) | |||
| (company-box-show-single-candidate t) | |||
| :hook | |||
| (company-mode . company-box-mode) | |||
| :config | |||
| (delq 'company-echo-metadata-frontend company-frontends)) | |||
| #+END_SRC | |||
| ** Usage History | |||
| #+BEGIN_SRC emacs-lisp | |||
| (use-package company-statistics | |||
| :after (uno-ui-completion company) | |||
| :custom | |||
| (company-statistics-file (uno-cache-path "company/statistics.el")) | |||
| :hook | |||
| (company-mode . company-statistics-mode)) | |||
| #+END_SRC | |||
| @ -0,0 +1,51 @@ | |||
| #+TITLE: UI - Dashboard | |||
| #+AUTHOR: Juan Placencia | |||
| * Package | |||
| Define UI dashboard package. | |||
| #+BEGIN_SRC emacs-lisp | |||
| (use-package emacs | |||
| :after uno-ui | |||
| :config | |||
| (provide 'uno-ui-dashboard)) | |||
| #+END_SRC | |||
| * Dashboard | |||
| #+BEGIN_SRC emacs-lisp | |||
| (use-package dashboard | |||
| :after uno-ui-dashboard | |||
| :custom | |||
| (dashboard-banner-logo-title nil) | |||
| (dashboard-center-content t) | |||
| (dashboard-image-banner-max-height 210) | |||
| (dashboard-items '((recents . 5) | |||
| (agenda . 5))) | |||
| (dashboard-page-separator "\n\n") | |||
| (dashboard-set-file-icons t) | |||
| (dashboard-set-footer nil) | |||
| (dashboard-set-heading-icons t) | |||
| (dashboard-show-shortcuts nil) | |||
| (dashboard-startup-banner (uno-assets-path (if (display-graphic-p) | |||
| "banner.png" | |||
| "banner.txt"))) | |||
| (initial-buffer-choice 'uno/ui/dashboard/get-buffer) | |||
| :general | |||
| (uno-leader-define | |||
| "bh" '(dashboard-refresh-buffer :which-key "Dashboard")) | |||
| :init | |||
| (defun uno/ui/dashboard/get-buffer () | |||
| "Get dashboard buffer." | |||
| (get-buffer dashboard-buffer-name)) | |||
| (dashboard-setup-startup-hook) | |||
| :config | |||
| (uno/add-useless-buffer "\\*dashboard\\*") | |||
| (uno/ui/exclude-center-cursor 'dashboard-mode)) | |||
| (use-package dashboard | |||
| :after (uno-ui-dashboard projectile) | |||
| :config | |||
| (push '(projects . 5) dashboard-items)) | |||
| #+END_SRC | |||
| @ -0,0 +1,69 @@ | |||
| #+TITLE: UI - Emacs | |||
| #+AUTHOR: Juan Placencia | |||
| * Package | |||
| Define UI Emacs package. | |||
| #+BEGIN_SRC emacs-lisp | |||
| (use-package emacs | |||
| :after uno-ui | |||
| :config | |||
| (provide 'uno-ui-emacs)) | |||
| #+END_SRC | |||
| * Overrides | |||
| - Hide UI items | |||
| - Set up relative line numbers | |||
| - Highlight current line. | |||
| - Simplify yes/no | |||
| - Switch to help automatically | |||
| - Avoid cursor going into minibuffer. | |||
| #+BEGIN_SRC emacs-lisp | |||
| (use-package emacs | |||
| :after uno-ui-emacs | |||
| :custom | |||
| (display-line-numbers-type 'relative) | |||
| (help-window-select t) | |||
| (minibuffer-prompt-properties '(read-only | |||
| t | |||
| point-entered | |||
| minibuffer-avoid-prompt | |||
| face | |||
| minibuffer-prompt)) | |||
| :hook | |||
| ((special-mode uno-prog-mode uno-text-mode) . hl-line-mode) | |||
| (uno-prog-mode . display-line-numbers-mode) | |||
| (uno-prog-mode . toggle-truncate-lines) | |||
| (uno-text-mode . toggle-word-wrap) | |||
| :config | |||
| (fset 'yes-or-no-p 'y-or-n-p) | |||
| (scroll-bar-mode -1) | |||
| (menu-bar-mode -1) | |||
| (tool-bar-mode -1)) | |||
| #+END_SRC | |||
| * Centered Cursor | |||
| Hide UI items, set up relative line numbers, and highlight current line. | |||
| #+BEGIN_SRC emacs-lisp | |||
| (use-package emacs | |||
| :after uno-ui-emacs | |||
| :init | |||
| (defvar uno--ui-center-cursor-blacklist nil | |||
| "Major modes to exclude center cursor mode.") | |||
| (defun uno/ui/exclude-center-cursor (mode) | |||
| "Exclude major MODE from center cursor." | |||
| (push mode uno--ui-center-cursor-blacklist)) | |||
| (defun uno/ui/center-cursor () | |||
| "Set up center cursor unless excluded." | |||
| (unless (member major-mode uno--ui-center-cursor-blacklist) | |||
| (setq-local | |||
| scroll-preserve-screen-position t | |||
| scroll-conservatively 0 | |||
| maximum-scroll-margin 0.5 | |||
| scroll-margin 99999)))) | |||
| #+END_SRC | |||
| @ -0,0 +1,90 @@ | |||
| #+TITLE: UI - Filetree | |||
| #+AUTHOR: Juan Placencia | |||
| * Package | |||
| Define UI filetree package. | |||
| #+BEGIN_SRC emacs-lisp | |||
| (use-package emacs | |||
| :after uno-ui | |||
| :config | |||
| (provide 'uno-ui-filetree)) | |||
| #+END_SRC | |||
| * Treemacs | |||
| #+BEGIN_SRC emacs-lisp | |||
| (use-package treemacs | |||
| :after uno-ui-filetree | |||
| :commands | |||
| (treemacs--window-number-ten | |||
| treemacs-current-visibility | |||
| treemacs-current-workspace | |||
| treemacs-select-scope-type | |||
| treemacs-select-window) | |||
| :custom | |||
| (treemacs-persist-file (uno-cache-path "treemacs/persist")) | |||
| (treemacs-project-follow-cleanup t) | |||
| (treemacs-show-hidden-files nil) | |||
| :general | |||
| (uno-leader-define | |||
| "ft" '(treemacs :which-key "File tree") | |||
| "fB" '(treemacs-bookmark :which-key "Find bookmark in file tree") | |||
| "fT" '(treemacs-find-file :which-key "Focus current file in file tree")) | |||
| :init | |||
| (require 'treemacs)) | |||
| (use-package treemacs-evil | |||
| :after (uno-ui-filetree treemacs evil)) | |||
| (use-package treemacs-icons-dired | |||
| :after (uno-ui-filetree treemacs dired) | |||
| :config | |||
| (treemacs-icons-dired-mode 1)) | |||
| (use-package treemacs-magit | |||
| :after (uno-ui-filetree treemacs magit)) | |||
| #+END_SRC | |||
| ** Projectile Integration | |||
| #+BEGIN_SRC emacs-lisp | |||
| (use-package treemacs-projectile | |||
| :after (uno-ui-filetree treemacs projectile) | |||
| :general | |||
| (uno-leader-define | |||
| "pt" '(uno/ui/filetree/project-toggle :which-key "Open project file tree")) | |||
| :init | |||
| (defun uno/ui/filetree/project-toggle () | |||
| "Toggle and add the current project to treemacs if not already added." | |||
| (interactive) | |||
| (if (eq (treemacs-current-visibility) 'visible) | |||
| (delete-window (treemacs-get-local-window)) | |||
| (let ((path (projectile-ensure-project (projectile-project-root))) | |||
| (name (projectile-project-name))) | |||
| (unless (treemacs-current-workspace) | |||
| (treemacs--find-workspace)) | |||
| (treemacs-do-add-project-to-workspace path name) | |||
| (treemacs-select-window))))) | |||
| #+END_SRC | |||
| * Winum Integration | |||
| Borrowed from Spacemacs. | |||
| #+BEGIN_SRC emacs-lisp | |||
| (use-package treemacs | |||
| :after (uno-ui-filetree winum) | |||
| :general | |||
| (winum-keymap | |||
| [remap winum-select-window-0-or-10] 'treemacs-select-window) | |||
| :config | |||
| (push | |||
| '((nil . "winum-select-window-0-or-10") . (nil . "treemacs-select-window")) | |||
| which-key-replacement-alist) | |||
| (dolist (n (number-sequence 1 5)) | |||
| (push | |||
| (format "%sFramebuffer-%s*" treemacs--buffer-name-prefix n) | |||
| winum-ignored-buffers))) | |||
| #+END_SRC | |||
| @ -0,0 +1,26 @@ | |||
| #+TITLE: UI - Modeline | |||
| #+AUTHOR: Juan Placencia | |||
| * Package | |||
| Define UI modeline package. | |||
| #+BEGIN_SRC emacs-lisp | |||
| (use-package emacs | |||
| :after uno-ui | |||
| :config | |||
| (provide 'uno-ui-modeline)) | |||
| #+END_SRC | |||
| * Doom Modeline | |||
| #+BEGIN_SRC emacs-lisp | |||
| (use-package doom-modeline | |||
| :after uno-ui-modeline | |||
| :custom | |||
| (column-number-indicator-zero-based nil) | |||
| (column-number-mode t) | |||
| (doom-modeline-indent-info t) | |||
| :config | |||
| (doom-modeline-mode 1)) | |||
| #+END_SRC | |||
| @ -0,0 +1,35 @@ | |||
| #+TITLE: UI - Mouse | |||
| #+AUTHOR: Juan Placencia | |||
| * Package | |||
| Define mouse modeline package. | |||
| #+BEGIN_SRC emacs-lisp | |||
| (use-package emacs | |||
| :after uno-ui | |||
| :config | |||
| (provide 'uno-ui-mouse)) | |||
| #+END_SRC | |||
| * Disable Mouse | |||
| #+BEGIN_SRC emacs-lisp | |||
| (use-package emacs | |||
| :after uno-ui-mouse | |||
| :custom | |||
| (mouse-highlight nil)) | |||
| (use-package disable-mouse | |||
| :after uno-ui-mouse | |||
| :config | |||
| (global-disable-mouse-mode 1)) | |||
| (use-package disable-mouse | |||
| :after (uno-ui-mouse evil) | |||
| :config | |||
| (mapc 'disable-mouse-in-keymap (list evil-motion-state-map | |||
| evil-normal-state-map | |||
| evil-visual-state-map | |||
| evil-insert-state-map))) | |||
| #+END_SRC | |||
| @ -0,0 +1,28 @@ | |||
| #+TITLE: UI - Theme | |||
| #+AUTHOR: Juan Placencia | |||
| * Package | |||
| Define UI theme package. | |||
| #+BEGIN_SRC emacs-lisp | |||
| (use-package emacs | |||
| :after uno-ui | |||
| :config | |||
| (provide 'uno-ui-theme)) | |||
| #+END_SRC | |||
| * Theme | |||
| #+BEGIN_SRC emacs-lisp | |||
| (use-package doom-themes | |||
| :after uno-ui-theme | |||
| :custom | |||
| (doom-themes-enable-bold t) | |||
| (doom-themes-enable-italic t) | |||
| (doom-themes-treemacs-theme "doom-colors") | |||
| :config | |||
| (load-theme 'doom-one t) | |||
| (when (display-graphic-p) | |||
| (doom-themes-treemacs-config))) | |||
| #+END_SRC | |||
| @ -0,0 +1,47 @@ | |||
| #+TITLE: UI - Window | |||
| #+AUTHOR: Juan Placencia | |||
| * Package | |||
| Define UI window package. | |||
| #+BEGIN_SRC emacs-lisp | |||
| (use-package emacs | |||
| :after uno-ui | |||
| :config | |||
| (provide 'uno-ui-window)) | |||
| #+END_SRC | |||
| * Winum | |||
| #+BEGIN_SRC emacs-lisp | |||
| (use-package winum | |||
| :after uno-ui-window | |||
| :custom | |||
| (winum-auto-assign-0-to-minibuffer nil) | |||
| (winum-auto-setup-mode-line nil) | |||
| (winum-ignored-buffers '(" *LV*" " *which-key*")) | |||
| :general | |||
| (uno-leader-define | |||
| "0" '(winum-select-window-0-or-10 :which-key "Switch to window 0") | |||
| "1" '(winum-select-window-1 :which-key "Switch to window 1") | |||
| "2" '(winum-select-window-2 :which-key "Switch to window 2") | |||
| "3" '(winum-select-window-3 :which-key "Switch to window 3") | |||
| "4" '(winum-select-window-4 :which-key "Switch to window 4") | |||
| "5" '(winum-select-window-5 :which-key "Switch to window 5") | |||
| "6" '(winum-select-window-6 :which-key "Switch to window 6") | |||
| "7" '(winum-select-window-7 :which-key "Switch to window 7") | |||
| "8" '(winum-select-window-8 :which-key "Switch to window 8") | |||
| "9" '(winum-select-window-9 :which-key "Switch to window 9") | |||
| "b1" '(buffer-to-window-1 :which-key "Move buffer to window 1") | |||
| "b2" '(buffer-to-window-2 :which-key "Move buffer to window 2") | |||
| "b3" '(buffer-to-window-3 :which-key "Move buffer to window 3") | |||
| "b4" '(buffer-to-window-4 :which-key "Move buffer to window 4") | |||
| "b5" '(buffer-to-window-5 :which-key "Move buffer to window 5") | |||
| "b6" '(buffer-to-window-6 :which-key "Move buffer to window 6") | |||
| "b7" '(buffer-to-window-7 :which-key "Move buffer to window 7") | |||
| "b8" '(buffer-to-window-8 :which-key "Move buffer to window 8") | |||
| "b9" '(buffer-to-window-9 :which-key "Move buffer to window 9")) | |||
| :config | |||
| (winum-mode 1)) | |||
| #+END_SRC | |||
| @ -0,0 +1,45 @@ | |||
| #+TITLE: Core - Window | |||
| #+AUTHOR: Juan Placencia | |||
| * Package | |||
| Define core window package. | |||
| #+BEGIN_SRC emacs-lisp | |||
| (use-package emacs | |||
| :after uno | |||
| :config | |||
| (provide 'uno-window)) | |||
| #+END_SRC | |||
| * Display Buffer | |||
| Define where certain buffers go where in the window. | |||
| #+BEGIN_SRC emacs-lisp | |||
| (use-package emacs | |||
| :after uno-window | |||
| :custom | |||
| (display-buffer-alist nil) | |||
| :init | |||
| (defun uno/handle-side-window (buffer &optional side slot) | |||
| "Support displaying BUFFER in a SIDE window for a SLOT." | |||
| (let* ((-side (if (member side '(top left right)) side 'bottom)) | |||
| (-slot (if (integerp slot) slot 0)) | |||
| (-size (if (member -side '(left right)) | |||
| 'window-height | |||
| 'window-width))) | |||
| (push `(,buffer | |||
| (display-buffer-in-side-window) | |||
| (,-size . 0.25) | |||
| (side . ,-side) | |||
| (slot . ,-slot)) | |||
| display-buffer-alist))) | |||
| :config | |||
| (uno/handle-side-window "\\*Backtrace\\*") | |||
| (uno/handle-side-window "\\*Compile-Log\\*") | |||
| (uno/handle-side-window "\\*eshell\\*" 'bottom -1) | |||
| (uno/handle-side-window "\\*[Hh]elp\\*") | |||
| (uno/handle-side-window "\\*Messages\\*") | |||
| (uno/handle-side-window "\\*Warnings\\*")) | |||
| #+END_SRC | |||