;; Ignore bell (setq ring-bell-function 'ignore) (setq python-shell-interpreter "~/.micromamba/envs/emacs-py/bin/ipython" python-shell-interpreter-args "--pylab") (defun elchemy/add-to-pypath (&optional path) "# Add to python path" (interactive) (let* ((fullpath (if path path (ido-read-directory-name "Path: ")))) (setenv "PYTHONPATH" (let ((current (getenv "PYTHONPATH")) (new fullpath)) (if current (concat new ":" current) new))))) (add-to-list 'major-mode-remap-alist '(python-mode . python-ts-mode)) (require 'eglot) (define-key eglot-mode-map (kbd "C-c l r") 'eglot-rename) (define-key eglot-mode-map (kbd "C-c l f") 'eglot-format) (define-key eglot-mode-map (kbd "C-c l d") 'eldoc) (setq org-format-latex-options (plist-put org-format-latex-options :scale 1.8)) (let ((png (cdr (assoc 'dvipng org-preview-latex-process-alist)))) (plist-put png :latex-compiler '("latex -interaction nonstopmode -output-directory %o %F")) (plist-put png :image-converter '("dvipng -D %D -T tight -o %O %F")) (plist-put png :transparent-image-converter '("dvipng -D %D -T tight -bg Transparent -o %O %F"))) (org-babel-do-load-languages 'org-babel-load-languages '((python . t) (gnuplot . t) (R . t))) (setq org-babel-python-command python-shell-interpreter) (setq org-babel-R-command "/usr/local/bin/R --slave --no-save") (setq org-babel-gnuplot-command "/usr/local/bin/gnuplot") (setq org-confirm-babel-evaluate nil) (defun elchemy/personal/ignore-angle-brackets () "Ignore angle brackets in org mode" (modify-syntax-entry ?< ".") (modify-syntax-entry ?> ".")) (add-hook 'org-mode-hook 'elchemy/personal/ignore-angle-brackets) (add-to-list 'load-path "~/.emacs.d/extras/") (when (require 'writegood-mode nil t) (global-set-key (kbd "C-c g") 'writegood-mode)) (with-eval-after-load 'python (defun python-shell-completion-native-try () "Return non-nil if can trigger native completion." (let ((python-shell-completion-native-enable t) (python-shell-completion-native-output-timeout python-shell-completion-native-try-output-timeout)) (python-shell-completion-native-get-completions (get-buffer-process (current-buffer)) nil "_")))) (setq sentence-end-double-space nil) (defun elchemy/read-alist-file (file-path) "Read a file where each line is an alist of the form (name . location), returning a list of these pairs." (interactive "fEnter file path: ") (let (result) (with-temp-buffer (insert-file-contents file-path) (goto-char (point-min)) (while (not (eobp)) (let ((line (buffer-substring-no-properties (line-beginning-position) (line-end-position)))) (when (not (string-blank-p line)) (let ((pair (car (read-from-string line)))) (push pair result)))) (forward-line 1))) (reverse result))) (defun elchemy/find-file (FILENAME) "Find File to new split" (let ((buffer (find-file-noselect FILENAME))) (when (one-window-p) (split-window-right)) (other-window 1) (switch-to-buffer buffer))) (defun elchemy/term (TERM) "Terminal to new split" (when (one-window-p) (split-window-right)) (other-window 1) (term TERM)) (defun elchemy/create-dashboard () "Create the user dashboard" (interactive) (let ((buffer (get-buffer-create "*Dashboard*"))) (switch-to-buffer buffer) (unless buffer-read-only (when (file-exists-p "~/.elchemy/assets/splash.png") (insert-image (create-image "~/.elchemy/assets/splash.png" nil nil :scale 0.25)) (insert "\n")) (let ((start (point))) (insert "Elchemy Dashboard") (add-text-properties start (point) '(face (:height 4.0)))) (insert "\n\n") (insert (buttonize "Open Local TODO" (lambda (x) (elchemy/find-file "~/org/todo.org")))) (insert " ") (insert (buttonize "Open Remote TODO" (lambda (x) (elchemy/find-file "/ssh:onid:todo.org")))) (insert "\n") (insert (buttonize "Open Local Notes" (lambda (x) (elchemy/find-file "~/org/notes.org")))) (insert " ") (insert (buttonize "Open Remote Notes" (lambda (x) (elchemy/find-file "/ssh:onid:knowledge.org")))) (insert "\n\n") (insert (buttonize "Open Terminal (zsh)" (lambda (x) (elchemy/term "/bin/zsh")))) (insert "\n\n") (insert (buttonize "Open Personal Configuration" (lambda (x) (elchemy/find-file "~/.elchemy/elchemy-personal.el")))) (insert "\n\n") (when (file-exists-p "~/.elchemy/projects") (let ((start (point))) (insert "Projects") (add-text-properties start (point) '(face (:height 1.5)))) (insert "\n") (mapcar #'(lambda (x) (let ((name (car x)) (path (cdr x))) (insert (buttonize name (lambda (y) (elchemy/find-file y)) path) "\n"))) (elchemy/read-alist-file "~/.elchemy/projects")) (insert "\n")) (let ((start (point))) (insert "Command Reference") (add-text-properties start (point) '(face (:height 1.5)))) (insert "\n") (insert "C-/ ~ Undo\n") (insert "C-x n n ~ Narrow\n") (insert "C-x n w ~ Widen\n") (insert "M-% ~ Query Replace\n") (insert "C-M-s ~ Regex Search\n") (insert "F3 ~ Record Macro\n") (insert "F4 ~ Play Macro\n") (insert "M-0 F4 ~ Play Macro until failure\n") (insert "M-l ~ Locwercase following word\n") (insert "M-u ~ Uppercase following word\n") (insert "M-c ~ Capitalize following word\n") (insert "M-g w ~ Jump to word\n") (insert "M-g l ~ Jump to line\n") (insert "C-x C-l ~ Lowercase Region\n") (insert "C-x C-u ~ Uppercase Region\n") (insert "C-M-n ~ Move forward one balanced expression\n") (insert "C-M-p ~ Move forward one balanced expression\n") (setq header-line-format nil) (read-only-mode +1)))) (elchemy/create-dashboard) (add-to-list 'org-agenda-files "/ssh:onid:todo.org") (add-to-list 'org-capture-templates '("o" "OSU Todo" entry (file+headline "/ssh:onid:todo.org" "Imported") "* TODO %?\n %i\n %a\n")) (add-to-list 'org-capture-templates '("k" "Knowledge Entry" entry (file+headline "/ssh:onid:knowledge.org" "Imported") "* %?\n %i\n %a\n")) (add-hook 'minibuffer-setup-hook (lambda () (make-local-variable 'face-remapping-alist) (add-to-list 'face-remapping-alist '(default (:background "gray90"))))) (setq-default header-line-format '("♥︎ ELCHEMY ♦︎ %b ♣︎ " (:eval mode-name) " ♠︎")) (load "extras/guile-interaction.el") (require 'guile-interaction) (provide 'elchemy-personal)