From 6c8fc1c340341e98b10d3cf9a97d633a5208cd34 Mon Sep 17 00:00:00 2001 From: Ian Keane Date: Fri, 10 Nov 2023 14:17:31 -0500 Subject: [PATCH] more emacs configs --- guix/init.el | 229 ++++++++++++++++++++++++++++++++++++++++++++------- 1 file changed, 201 insertions(+), 28 deletions(-) diff --git a/guix/init.el b/guix/init.el index 4f1afd0..e92e373 100644 --- a/guix/init.el +++ b/guix/init.el @@ -4,7 +4,7 @@ (tool-bar-mode -1) (scroll-bar-mode -1) -(load-theme 'tango-dark t) + (recentf-mode 1) (savehist-mode 1) ; remember previous commands in minibuffer (save-place-mode 1) ; put cursor in last place when opening a file @@ -19,7 +19,7 @@ ;; Update files when changed on disk (global-auto-revert-mode 1) -(set-frame-font "DejaVu Sans Mono 12") +(set-frame-font "DejaVu Sans Mono 14") ;; Initialize Package Sources (require 'package) @@ -86,32 +86,6 @@ ;; (setq read-extended-command-predicate ;; #'command-completion-default-include-p) - ;; Enable recursive minibuffers - (setq enable-recursive-minibuffers t)) -;; A few more useful configurations... -(use-package emacs - :init - ;; Add prompt indicator to `completing-read-multiple'. - ;; We display [CRM], e.g., [CRM,] if the separator is a comma. - (defun crm-indicator (args) - (cons (format "[CRM%s] %s" - (replace-regexp-in-string - "\\`\\[.*?]\\*\\|\\[.*?]\\*\\'" "" - crm-separator) - (car args)) - (cdr args))) - (advice-add #'completing-read-multiple :filter-args #'crm-indicator) - - ;; Do not allow the cursor in the minibuffer prompt - (setq minibuffer-prompt-properties - '(read-only t cursor-intangible t face minibuffer-prompt)) - (add-hook 'minibuffer-setup-hook #'cursor-intangible-mode) - - ;; Emacs 28: Hide commands in M-x which do not work in the current mode. - ;; Vertico commands are hidden in normal buffers. - ;; (setq read-extended-command-predicate - ;; #'command-completion-default-include-p) - ;; Enable recursive minibuffers (setq enable-recursive-minibuffers t)) @@ -154,6 +128,7 @@ :hook (after-init . simple-modeline-mode)) (use-package base16-theme) +(load-theme 'base16-oceanicnext t) (global-display-line-numbers-mode t) (dolist (mode @@ -190,3 +165,201 @@ ;; By default, C-h F is bound to `Info-goto-emacs-command-node'. Helpful ;; already links to the manual, if a function is referenced there. (global-set-key (kbd "C-h F") #'helpful-function) + +(defconst IS-MAC (eq system-type 'darwin)) + +(when IS-MAC + ;; mac specific settings + ) + +;; General Emacs keybindings +(which-key-add-key-based-replacements + "C-x" "Ctrl-X-prefix" + "C-c" "Ctrl-C-prefix" + "C-h" "Help" + "M-x" "M-x-commands" + "C-x r" "Rectangles/Registers" + "C-x 4" "Other-window" + "C-x 5" "Frames" + "C-x 8" "Unicode" + "C-x @" "Event-modifiers" + "C-x a" "Abbreviations" + "C-x n" "Narrowing" + "C-x g" "Magit-status" + "C-c M-g" "Magit-file-dispatch" + "C-x v" "Version-Control" + "C-x X" "Font/Encoding" + "C-x p" "Project/Buffer" + "C-x t" "Tabs/Terminal" + "C-x w" "Windows/Workspaces" + "C-x x" "Text/Rectangle" + "C-x C-a" "Emacs-Lisp-Debug" + "C-x RET" "Coding-system") + +;; Emacs major modes and related prefixes +(which-key-add-key-based-replacements + "C-c m" "Major-mode-cmds" + "C-c p" "Projectile" + "C-c g" "Magit" + "C-c l" "Lisp" + "C-c @" "HS-minor-mode" + "C-c t" "Toggle" + "C-c /" "Comment") + +;; Org mode specific bindings +(which-key-add-key-based-replacements + "C-c C-x" "Org-mode-C-c-C-x" + "C-c C-w" "Org-refile" + "C-c [" "Org-agenda") + + +(defun split-and-follow-horizontally () + (interactive) + (split-window-below) + (balance-windows) + (other-window 1)) + +(defun split-and-follow-vertically () + (interactive) + (split-window-right) + (balance-windows) + (other-window 1)) + +(global-set-key (kbd "s-c") 'delete-window) +(global-set-key (kbd "s-h") 'windmove-left) +(global-set-key (kbd "s-j") 'windmove-down) +(global-set-key (kbd "s-k") 'windmove-up) +(global-set-key (kbd "s-l") 'windmove-right) +; (define-key evil-normal-state-map (kbd "s-d") 'kill-this-buffer) +; (define-key evil-normal-state-map (kbd "s-n") 'projectile-next-project-buffer) +; (define-key evil-normal-state-map (kbd "s-p") 'projectile-previous-project-buffer) +; (define-key evil-normal-state-map (kbd "s-J") 'split-and-follow-horizontally) +; (define-key evil-normal-state-map (kbd "s-L") 'split-and-follow-vertically) +; (define-key evil-normal-state-map (kbd "s-b") 'buffer-menu) +; (define-key evil-normal-state-map (kbd "s-x") 'execute-extended-command) +(global-set-key (kbd "s-SPC") 'tab-next) + +(use-package magit) +(use-package treemacs) +(use-package org) +(use-package projectile) + +(use-package lsp-mode + :commands (lsp lsp-deferred) + :init + (setq lsp-keymap-prefix "C-c l") + :config + (lsp-enable-which-key-integration t)) + +(use-package lsp-ui) +(use-package lsp-treemacs) +;; todo + +;; projectile +;; deft +;; roam +;; ivy + fuzzzy +prescient? +;; ivy-lsp +;; hl-todo +;; gitgutter +;; perspective +;; workspaces? +;; paredit +;; lispy +;; persistent undo +;; org : roam2, hugo, pretty, dragndrop, bullet +;; dap-mode +;; dabbrev-expand or company on c-n c-p +;; c-N c-P for expand full line +;; yasnippet +;; tramp +;; flesh out treemacs + + +;; (setq deft-directory "~/notes/deft" +;; deft-extensions '("org" "txt") +;; deft-recursive t) + +;; (setq org-roam-directory "~/notes/roam") + +(setq projectile-project-search-path '("~/code/")) + +;; (setq company-minimum-prefix-length 100) +;; (map! :i "S-o" #'company-complete) + + + +(setq tab-always-indent 'complete) +(setq tab-first-completion 'word) + +(use-package company + :ensure t + :hook (prog-mode . company-mode) + :diminish + :bind (:map company-active-map + ("" . company-select-next) + ("TAB" . company-select-next) + ("" . company-select-previous) + ("" . company-select-previous)) + (:map lsp-mode-map ; more general mode than this? + ("" . company-indent-or-complete-common)) + :config + (global-company-mode 1) + :init + (setq company-idle-delay nil)) + +(use-package rust-mode + :ensure t + :mode "\\.rs\\'" + :config + (setq rust-format-on-save t)) ; Automatically format rust files on save + +(use-package cargo + :ensure t + :hook (rust-mode . cargo-minor-mode)) + +(use-package eshell) +(use-package vterm) +(use-package treemacs-projectile) +;(use-package treemacs-nerd-icons +; :config +; (treemacs-load-theme "nerd-icons")) + +(setq ring-bell-function 'ignore) +(setq dired-listing-switches "-al") + +(setq backup-directory-alist `(("." . "~/.config/emacs/backups/"))) +(setq auto-save-file-name-transforms + `((".*" "~/.config/emacs/autosaves/" t))) + +(setq dired-dwim-target t) ; opening 'other window' on a subdir enters 2 window dired mode for copy/paste +(use-package dired-single) + +(defun my-dired-init () + "Bunch of stuff to run for dired, either immediately or when it's + loaded." + ;; + (define-key dired-mode-map [remap dired-find-file] + 'dired-single-buffer) + (define-key dired-mode-map [remap dired-mouse-find-file-other-window] + 'dired-single-buffer-mouse) + (define-key dired-mode-map [remap dired-up-directory] + 'dired-single-up-directory)) + +;; if dired's already loaded, then the keymap will be bound +(if (boundp 'dired-mode-map) + ;; we're good to go; just add our bindings + (my-dired-init) + ;; it's not loaded yet, so add our bindings to the load-hook + (add-hook 'dired-load-hook 'my-dired-init)) + +(use-package dired-open + :config + (setq dired-open-extensions '(("png" . "sxiv") + ("mkv" . "mpv") + ("avi" . "mpv")))) + +(use-package all-the-icons-dired + :hook (dired-mode . all-the-icons-dired-mode)) + +(use-package treemacs-all-the-icons)