From ca602c566c38da2faf2cbeecb8dc30dc884c4dc4 Mon Sep 17 00:00:00 2001 From: Juan Placencia Date: Tue, 1 Jun 2021 19:32:56 -0500 Subject: [PATCH] Initial commit --- .editorconfig | 9 ++ .gitignore | 7 ++ early-init.el | 2 + init.el | 3 + uno/.gitignore | 1 + uno/assets/banner.png | Bin 0 -> 16787 bytes uno/assets/banner.txt | 14 +++ uno/bootstrap.org | 101 +++++++++++++++++++ uno/modules/+index.org | 23 +++++ uno/modules/buffer.org | 78 +++++++++++++++ uno/modules/config.org | 35 +++++++ uno/modules/dev/+index.org | 35 +++++++ uno/modules/dev/format.org | 51 ++++++++++ uno/modules/dev/git.org | 92 +++++++++++++++++ uno/modules/dev/lsp.org | 48 +++++++++ uno/modules/dev/project.org | 35 +++++++ uno/modules/dev/shell.org | 47 +++++++++ uno/modules/dev/sudo.org | 62 ++++++++++++ uno/modules/dev/syntax.org | 38 +++++++ uno/modules/doc/+index.org | 24 +++++ uno/modules/doc/markdown.org | 40 ++++++++ uno/modules/doc/org.org | 123 +++++++++++++++++++++++ uno/modules/key/+index.org | 22 ++++ uno/modules/key/emacs.org | 67 +++++++++++++ uno/modules/key/vim.org | 67 +++++++++++++ uno/modules/key/window.org | 52 ++++++++++ uno/modules/lang/+index.org | 13 +++ uno/modules/lang/elisp/+index.org | 29 ++++++ uno/modules/lang/js/+index.org | 13 +++ uno/modules/lang/js/ts.org | 50 ++++++++++ uno/modules/lang/js/yarn.org | 65 ++++++++++++ uno/modules/mode.org | 39 ++++++++ uno/modules/ui/+index.org | 31 ++++++ uno/modules/ui/completion.org | 160 ++++++++++++++++++++++++++++++ uno/modules/ui/dashboard.org | 51 ++++++++++ uno/modules/ui/emacs.org | 69 +++++++++++++ uno/modules/ui/filetree.org | 90 +++++++++++++++++ uno/modules/ui/modeline.org | 26 +++++ uno/modules/ui/mouse.org | 35 +++++++ uno/modules/ui/theme.org | 28 ++++++ uno/modules/ui/window.org | 47 +++++++++ uno/modules/window.org | 45 +++++++++ 42 files changed, 1867 insertions(+) create mode 100644 .editorconfig create mode 100644 .gitignore create mode 100644 early-init.el create mode 100644 init.el create mode 100644 uno/.gitignore create mode 100644 uno/assets/banner.png create mode 100644 uno/assets/banner.txt create mode 100644 uno/bootstrap.org create mode 100644 uno/modules/+index.org create mode 100644 uno/modules/buffer.org create mode 100644 uno/modules/config.org create mode 100644 uno/modules/dev/+index.org create mode 100644 uno/modules/dev/format.org create mode 100644 uno/modules/dev/git.org create mode 100644 uno/modules/dev/lsp.org create mode 100644 uno/modules/dev/project.org create mode 100644 uno/modules/dev/shell.org create mode 100644 uno/modules/dev/sudo.org create mode 100644 uno/modules/dev/syntax.org create mode 100644 uno/modules/doc/+index.org create mode 100644 uno/modules/doc/markdown.org create mode 100644 uno/modules/doc/org.org create mode 100644 uno/modules/key/+index.org create mode 100644 uno/modules/key/emacs.org create mode 100644 uno/modules/key/vim.org create mode 100644 uno/modules/key/window.org create mode 100644 uno/modules/lang/+index.org create mode 100644 uno/modules/lang/elisp/+index.org create mode 100644 uno/modules/lang/js/+index.org create mode 100644 uno/modules/lang/js/ts.org create mode 100644 uno/modules/lang/js/yarn.org create mode 100644 uno/modules/mode.org create mode 100644 uno/modules/ui/+index.org create mode 100644 uno/modules/ui/completion.org create mode 100644 uno/modules/ui/dashboard.org create mode 100644 uno/modules/ui/emacs.org create mode 100644 uno/modules/ui/filetree.org create mode 100644 uno/modules/ui/modeline.org create mode 100644 uno/modules/ui/mouse.org create mode 100644 uno/modules/ui/theme.org create mode 100644 uno/modules/ui/window.org create mode 100644 uno/modules/window.org 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 0000000000000000000000000000000000000000..9094edf1fa9efba0de286b7959eca407b7dd41f7 GIT binary patch literal 16787 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" '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