| @ -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 | |||||