commit ca602c566c38da2faf2cbeecb8dc30dc884c4dc4 Author: Juan Placencia Date: Tue Jun 1 19:32:56 2021 -0500 Initial commit diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 0000000..c36c70a --- /dev/null +++ b/.editorconfig @@ -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 diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..9713f0d --- /dev/null +++ b/.gitignore @@ -0,0 +1,7 @@ +/* +!/uno/ +!/.editorconfig +!/.gitignore +!/init.el +!/early-init.el + diff --git a/early-init.el b/early-init.el new file mode 100644 index 0000000..deca33f --- /dev/null +++ b/early-init.el @@ -0,0 +1,2 @@ +;; Prevent package.el loading packages prior to their init-file loading. +(setq package-enable-at-startup nil) diff --git a/init.el b/init.el new file mode 100644 index 0000000..b420b6a --- /dev/null +++ b/init.el @@ -0,0 +1,3 @@ +;; Load bootstrap.org for actual setup +(org-babel-load-file + (locate-user-emacs-file (convert-standard-filename "uno/bootstrap.org"))) diff --git a/uno/.gitignore b/uno/.gitignore new file mode 100644 index 0000000..abf136d --- /dev/null +++ b/uno/.gitignore @@ -0,0 +1 @@ +*.el diff --git a/uno/assets/banner.png b/uno/assets/banner.png new file mode 100644 index 0000000..9094edf Binary files /dev/null and b/uno/assets/banner.png differ diff --git a/uno/assets/banner.txt b/uno/assets/banner.txt new file mode 100644 index 0000000..76328eb --- /dev/null +++ b/uno/assets/banner.txt @@ -0,0 +1,14 @@ + + + ⠛⢻⣿⣯⣿⣿⣿⣶⣶⣶⣶⣤⣤⣤⣀ + ⢨⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣷ + ⠈⠻⣿⡛⠉⠭⠉⠉⢉⣿⣿⣧ + ⠈⠙⠲⣶⠖ ⢿⣿ ⠶⣶⣾⣿⣿⣿⣿⣧ + ⠈ ⠺⢿⡗ ⣹⣿⣿⠿⣟⣿⡏ + ⠤⠤⢾⣿⣿⣿⣦⠘⡿ + ⠈⢻⡿⣷⣶⣶⣤⣤⣤⣶⣦⠁ + ⣽⣿⣿⣿⣿⣿⣿⣿⣿⡟ + ⠘⠿⣿⣿⣿⣿⣿⣿⣿⠃ + ⠉⠉⠛⠋⠉⠁ + + diff --git a/uno/bootstrap.org b/uno/bootstrap.org new file mode 100644 index 0000000..d62917b --- /dev/null +++ b/uno/bootstrap.org @@ -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 diff --git a/uno/modules/+index.org b/uno/modules/+index.org new file mode 100644 index 0000000..2255f97 --- /dev/null +++ b/uno/modules/+index.org @@ -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 diff --git a/uno/modules/buffer.org b/uno/modules/buffer.org new file mode 100644 index 0000000..f2af5ec --- /dev/null +++ b/uno/modules/buffer.org @@ -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 diff --git a/uno/modules/config.org b/uno/modules/config.org new file mode 100644 index 0000000..a3157da --- /dev/null +++ b/uno/modules/config.org @@ -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 diff --git a/uno/modules/dev/+index.org b/uno/modules/dev/+index.org new file mode 100644 index 0000000..ad67067 --- /dev/null +++ b/uno/modules/dev/+index.org @@ -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 diff --git a/uno/modules/dev/format.org b/uno/modules/dev/format.org new file mode 100644 index 0000000..d8e9a12 --- /dev/null +++ b/uno/modules/dev/format.org @@ -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 diff --git a/uno/modules/dev/git.org b/uno/modules/dev/git.org new file mode 100644 index 0000000..b7a0718 --- /dev/null +++ b/uno/modules/dev/git.org @@ -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 diff --git a/uno/modules/dev/lsp.org b/uno/modules/dev/lsp.org new file mode 100644 index 0000000..0b19ed6 --- /dev/null +++ b/uno/modules/dev/lsp.org @@ -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 diff --git a/uno/modules/dev/project.org b/uno/modules/dev/project.org new file mode 100644 index 0000000..8fbdac3 --- /dev/null +++ b/uno/modules/dev/project.org @@ -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 diff --git a/uno/modules/dev/shell.org b/uno/modules/dev/shell.org new file mode 100644 index 0000000..be0c8a6 --- /dev/null +++ b/uno/modules/dev/shell.org @@ -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 diff --git a/uno/modules/dev/sudo.org b/uno/modules/dev/sudo.org new file mode 100644 index 0000000..cd14fec --- /dev/null +++ b/uno/modules/dev/sudo.org @@ -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 diff --git a/uno/modules/dev/syntax.org b/uno/modules/dev/syntax.org new file mode 100644 index 0000000..02a7c97 --- /dev/null +++ b/uno/modules/dev/syntax.org @@ -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 diff --git a/uno/modules/doc/+index.org b/uno/modules/doc/+index.org new file mode 100644 index 0000000..037ea9f --- /dev/null +++ b/uno/modules/doc/+index.org @@ -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 diff --git a/uno/modules/doc/markdown.org b/uno/modules/doc/markdown.org new file mode 100644 index 0000000..5afd6c8 --- /dev/null +++ b/uno/modules/doc/markdown.org @@ -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 diff --git a/uno/modules/doc/org.org b/uno/modules/doc/org.org new file mode 100644 index 0000000..7b9c0e5 --- /dev/null +++ b/uno/modules/doc/org.org @@ -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 + "" 'org-present-prev + "" '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 diff --git a/uno/modules/key/+index.org b/uno/modules/key/+index.org new file mode 100644 index 0000000..a331a94 --- /dev/null +++ b/uno/modules/key/+index.org @@ -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 diff --git a/uno/modules/key/emacs.org b/uno/modules/key/emacs.org new file mode 100644 index 0000000..ea3f81f --- /dev/null +++ b/uno/modules/key/emacs.org @@ -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 diff --git a/uno/modules/key/vim.org b/uno/modules/key/vim.org new file mode 100644 index 0000000..8656be5 --- /dev/null +++ b/uno/modules/key/vim.org @@ -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 diff --git a/uno/modules/key/window.org b/uno/modules/key/window.org new file mode 100644 index 0000000..511205a --- /dev/null +++ b/uno/modules/key/window.org @@ -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 diff --git a/uno/modules/lang/+index.org b/uno/modules/lang/+index.org new file mode 100644 index 0000000..a780db4 --- /dev/null +++ b/uno/modules/lang/+index.org @@ -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 diff --git a/uno/modules/lang/elisp/+index.org b/uno/modules/lang/elisp/+index.org new file mode 100644 index 0000000..a0ffc19 --- /dev/null +++ b/uno/modules/lang/elisp/+index.org @@ -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 diff --git a/uno/modules/lang/js/+index.org b/uno/modules/lang/js/+index.org new file mode 100644 index 0000000..d8bc834 --- /dev/null +++ b/uno/modules/lang/js/+index.org @@ -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 diff --git a/uno/modules/lang/js/ts.org b/uno/modules/lang/js/ts.org new file mode 100644 index 0000000..116bcb4 --- /dev/null +++ b/uno/modules/lang/js/ts.org @@ -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 diff --git a/uno/modules/lang/js/yarn.org b/uno/modules/lang/js/yarn.org new file mode 100644 index 0000000..ef6e13a --- /dev/null +++ b/uno/modules/lang/js/yarn.org @@ -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 diff --git a/uno/modules/mode.org b/uno/modules/mode.org new file mode 100644 index 0000000..36281c8 --- /dev/null +++ b/uno/modules/mode.org @@ -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 diff --git a/uno/modules/ui/+index.org b/uno/modules/ui/+index.org new file mode 100644 index 0000000..41ba8d5 --- /dev/null +++ b/uno/modules/ui/+index.org @@ -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 diff --git a/uno/modules/ui/completion.org b/uno/modules/ui/completion.org new file mode 100644 index 0000000..599d395 --- /dev/null +++ b/uno/modules/ui/completion.org @@ -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 + "" '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 diff --git a/uno/modules/ui/dashboard.org b/uno/modules/ui/dashboard.org new file mode 100644 index 0000000..e61b4ba --- /dev/null +++ b/uno/modules/ui/dashboard.org @@ -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 diff --git a/uno/modules/ui/emacs.org b/uno/modules/ui/emacs.org new file mode 100644 index 0000000..2571886 --- /dev/null +++ b/uno/modules/ui/emacs.org @@ -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 diff --git a/uno/modules/ui/filetree.org b/uno/modules/ui/filetree.org new file mode 100644 index 0000000..1746a5d --- /dev/null +++ b/uno/modules/ui/filetree.org @@ -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 diff --git a/uno/modules/ui/modeline.org b/uno/modules/ui/modeline.org new file mode 100644 index 0000000..4a47252 --- /dev/null +++ b/uno/modules/ui/modeline.org @@ -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 diff --git a/uno/modules/ui/mouse.org b/uno/modules/ui/mouse.org new file mode 100644 index 0000000..443f894 --- /dev/null +++ b/uno/modules/ui/mouse.org @@ -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 diff --git a/uno/modules/ui/theme.org b/uno/modules/ui/theme.org new file mode 100644 index 0000000..9b08bba --- /dev/null +++ b/uno/modules/ui/theme.org @@ -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 diff --git a/uno/modules/ui/window.org b/uno/modules/ui/window.org new file mode 100644 index 0000000..ece5686 --- /dev/null +++ b/uno/modules/ui/window.org @@ -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 diff --git a/uno/modules/window.org b/uno/modules/window.org new file mode 100644 index 0000000..5bef499 --- /dev/null +++ b/uno/modules/window.org @@ -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