diff options
-rw-r--r-- | init.el | 843 |
1 files changed, 111 insertions, 732 deletions
@@ -1,137 +1,38 @@ -;; Some combination of GNU TLS and Emacs fail to retrieve archive -;; contents over https. -;; https://www.reddit.com/r/emacs/comments/cdei4p/failed_to_download_gnu_archive_bad_request/etw48ux -;; https://debbugs.gnu.org/cgi/bugreport.cgi?bug=34341 -;; this is also included in the configuration.org file -(if (and (version< emacs-version "26.3") (>= libgnutls-version 30604)) - (setq gnutls-algorithm-priority "NORMAL:-VERS-TLS1.3")) +;; Some basic UI stuff +(setq inhibit-startup-message 1) -(require 'package) +(scroll-bar-mode -1) +(tool-bar-mode -1) +(tooltip-mode -1) +(set-fringe-mode 10) + +(setq visible-bell t) -(setq package-archives '(("gnu" . "https://elpa.gnu.org/packages/") - ("marmalade" . "https://marmalade-repo.org/packages/") - ("melpa" . "https://melpa.org/packages/") - ("org" . "https://orgmode.org/elpa/"))) +(set-face-attribute 'default nil :font "Jetbrains Mono" :height 140) +(load-theme 'tango-dark) -(setq package-enable-at-startup nil) +;; calendar proper Monday start +(setq calendar-week-start-day 1) +(setq calendar-date-style (quote european)) + +;; packages +(require 'package) +(setq package-archives '(("melpa" . "https://melpa.org/packages/") + ("org" . "https://orgmode.org/elpa/") + ("elpa" . "https://elpa.gnu.org/packages/"))) (package-initialize) -;; font -(add-to-list 'default-frame-alist - '(font . "Fira Code-14")) +(unless package-archive-contents + (package-refresh-contents)) -;;(load-config) (unless (package-installed-p 'use-package) - (package-refresh-contents) (package-install 'use-package)) - (eval-when-compile (require 'use-package)) - -;; always ensure package -(require 'use-package-ensure) (setq use-package-always-ensure t) -;; auto package update -(use-package auto-package-update - :if (not (daemonp)) - :custom - (auto-package-update-interval 7) ;; in days - (auto-package-update-prompt-before-update t) - (auto-package-update-delete-old-versions t) - (auto-package-update-hide-results t) - :config - (auto-package-update-maybe)) - -;; remove certain minor modes from the mode line -(use-package diminish) - -;; use new GNU Elpa Key update -(use-package gnu-elpa-keyring-update) - -;; ID information -(setq user-full-name "Matthew Lemon") -(setq user-mail-address "matt@matthewlemon.com") - -;; Core bindings -;; Unbind unneeded keys -(global-set-key (kbd "C-z") nil) -(global-set-key (kbd "M-z") nil) -(global-set-key (kbd "C-x C-z") nil) -(global-set-key (kbd "M-/") nil) -;; Use iBuffer instead of Buffer List -(global-set-key (kbd "C-x C-b") #'ibuffer) -;; Truncate lines -(global-set-key (kbd "C-x C-l") #'toggle-truncate-lines) -;; Adjust font size like web browsers -(global-set-key (kbd "C-+") #'text-scale-increase) -(global-set-key (kbd "C--") #'text-scale-decrease) -;; Move up/down paragraph -(global-set-key (kbd "M-n") #'forward-paragraph) -(global-set-key (kbd "M-p") #'backward-paragraph) - -;; ox-hugo -(use-package ox-hugo - :after ox) - -;; Deal with history -(setq savehist-file "~/.emacs.d/savehist") -(savehist-mode +1) -(setq savehist-save-minibuffer-history +1) -(setq savehist-additional-vriables - '(kill-ring - search-ring - regexp-search-ring)) - -;; popup kill-ring -(use-package popup-kill-ring - :bind ("M-y" . popup-kill-ring)) - -;; Disover my major -(use-package discover-my-major - :bind ("C-h C-m" . discover-my-major)) - -;; Some basics -(setq auto-save-default nil) -(global-set-key (kbd "M-o") 'other-window) -(setq column-number-mode t) -(setq apropos-do-all t) -(setq x-stretch-cursor t) -;; Emacs use own password prompt, not external PIN entry program -(setenv "GPG_AGENT_INFO" nil) -(setq kmacro-ring-max 30) - -;; encoding -(prefer-coding-system 'utf-8) -(setq coding-system-for-read 'utf-8) -(setq coding-system-for-write 'utf-8) -;; binds -(bind-keys ("M-1" . delete-other-windows) - ("M-O" . mode-line-other-buffer)) - -;; hydra -(use-package hydra - :config - (setq hydra-lv nil)) - -(defhydra hydra-zoom () - "zoom" - ("+" text-scale-increase "in") - ("=" text-scale-increase "in") - ("-" text-scale-decrease "out") - ("_" text-scale-decrease "out") - ("0" (text-scale-adjust 0) "reset") - ("q" nil "quit" :color blue)) - -(bind-keys ("C-x C-0" . hydra-zoom/body) - ("C-x C-=" . hydra-zoom/body) - ("C-x C--" . hydra-zoom/body) - ("C-x C-+" . hydra-zoom/body)) - -;; calendar proper Monday start -(setq calendar-week-start-day 1) -(setq calendar-date-style (quote european)) +(require 'use-package) ;; beacon mode (use-package beacon @@ -139,156 +40,22 @@ (setq beacon-color "OrangeRed") (beacon-mode 1)) -;; AUCTeX -(use-package tex - :ensure auctex - :defer t - :custom - (TeX-auto-save t) - (TeX-parse-self t) - (TeX-master nil) - ;; to use pdfview with auctex - (TeX-view-program-selection '((output-pdf "pdf-tools")) - TeX-source-correlate-start-server t) - (TeX-view-program-list '(("pdf-tools" "TeX-pdf-tools-sync-view"))) - (TeX-after-compilation-finished-functions #'TeX-revert-document-buffer) - :hook - (LaTeX-mode . (lambda () - (turn-on-reftex) - (setq reftex-plug-into-AUCTeX t) - (reftex-isearch-minor-mode) - (setq TeX-PDF-mode t) - (setq TeX-source-correlate-method 'synctex) - (setq TeX-source-correlate-start-server t))) - :config - (when (version< emacs-version "26") - (add-hook LaTeX-mode-hook #'display-line-numbers-mode))) - -(use-package org-edit-latex - :defer t - :after org) - -;; kill other buffers -(defun kill-other-buffers () - "Kill all other buffers." - (interactive) - (mapc 'kill-buffer (delq (current-buffer) (buffer-list)))) - -;; mu4e -;; the exact path may differ --- check it -(add-to-list 'load-path "/usr/share/emacs/site-lisp/mu4e") -(require 'mu4e) - -;; deal with horrible grey backgrounds in HTML backgrounds -(require 'mu4e-contrib) -(require 'org-mu4e) -(setq mu4e-html2text-command 'mu4e-shr2text) -(setq shr-color-visible-luminance-min 60) -(setq shr-color-visible-distance-min 5) -(setq shr-use-colors nil) -(advice-add #'shr-colorize-region :around (defun shr-no-colourise-region (&rest ignore))) - - -;; email settings -(setq mu4e-maildir "~/.mail/matt-matthewlemon.com") -(setq message-send-mail-function 'smtpmail-send-it) -(setq mu4e-contexts - `( ,(make-mu4e-context - :name "Fastmail" - :enter-func (lambda () (mu4e-message "Entering Fastmail context")) - :leave-func (lambda () (mu4e-message "Leaving Fastmail context")) - ;; we match based on the contact-fields of the message - :match-func (lambda (msg) - (when msg - (mu4e-message-contact-field-matches msg - :to "matt@matthewlemon.com"))) - :vars '((mu4e-sent-folder . "/INBOX.Sent Items") - (mu4e-drafts-folder . "/INBOX.Drafts") - (mu4e-trash-folder . "/INBOX.Trash") - (mu4e-get-mail-command . "offlineimap") - (user-email-address . "matt@matthewlemon.com") - (user-full-name . "MR Lemon") - (smtpmail-default-smtp-server . "mail.messagingengine.com") - (smtpmail-smtp-server . "mail.messagingengine.com") - (smtpmail-smtp-user . "matthewlemon@fastmail.fm") - (smtpmail-smtp-service . "465") - (smtpmail-stream-type . ssl) - (mu4e-sent-messages-behavior . sent) - (mu4e-compose-signature . - (concat - "Matthew Lemon\n" - "Berwick-upon-Tweed")))))) - - -;; elfeed -(use-package elfeed - :config - (setq elfeed-feeds - '(("http://feeds.bbci.co.uk/news/rss.xml?edition=uk" news) - "https://www.feedspot.com/?followfeedid=4946040" - ("http://feeds.bbci.co.uk/news/technology/rss.xml" tech news) - ("https://dominiccummings.com/rss.xml" blog tech) - ("http://newsrss.bbc.co.uk/rss/sportonline_uk_edition/rugby_union/rss.xml" rugby) - ("http://feeds.bbci.co.uk/news/video_and_audio/politics/rss.xml" news) - ("https://feeds.feedburner.com/arstechnica/open-source" opensource) - ("https://www.computerweekly.com/rss/IT-security.xml" cyber) - ("https://www.fsf.org/static/fsforg/rss/news.xml" opensource) - ("https://www.reddit.com/r/freebsd.rss" bsd) - ("https://www.reddit.com/r/emacs.rss" emacs) - ("https://www.reddit.com/r/rugbyunion/.rss" rugby) - ("http://pragmaticemacs.com/feed/" emacs) - ("https://200ok.ch/atom.xml" emacs) - "https://www.youtube.com/feeds/videos.xml?channel_id=UCkK9UDm_ZNrq_rIXCz3xCGA" - "https://www.youtube.com/feeds/videos.xml?channel_id=UCFzGyNKXPAglNq28qWYTDFA" - "https://www.youtube.com/feeds/videos.xml?channel_id=UC2eYFnH61tmytImy1mTYvhA" - ("http://www.linuxinsider.com/perl/syndication/rssfull.pl" linux) - ("http://planet.debian.org/rss20.xml" debian linux) - ("http://feeds2.feedburner.com/Command-line-fu" linux) - ("https://opensource.org/news.xml" opensource) - ("https://feeds.feedburner.com/arstechnica/index" news tech) - ("https://www.wired.com/feed/rss" news tech) - ("https://sivers.org/en.atom" blog)))) - -;; recentf -(use-package recentf - :hook (after-init . recentf-mode) - :custom - (recentf-auto-cleanup "05:00am") - (recentf-exclude '((expand-file-name package-user-dir) - ".cache" - ".cask" - ".elfeed" - "bookmarks" - "cache" - "ido.*" - "persp-confs" - "recentf" - "undo-tree-hist" - "url" - "COMMIT_EDITMSG\\'")) - (setq recentf-auto-cleanup 'never - recentf-max-saved-items 1000 - recentf-save-file (concat user-emacs-directory ".recentf")) - (recentf-mode t)) - - -;; Basic magit -(use-package magit - :bind ("C-x g" . magit-status)) - -;; Integration with pass password manager -(use-package password-store) - -;; Git enhancement -(use-package git-gutter +(use-package ivy + :bind (("C-s" . swiper) + :map ivy-minibuffer-map + ("TAB" . ivy-alt-done) + ("C-l" . ivy-alt-done) + ("C-j" . ivy-next-line) + ("C-k" . ivy-previous-line) + :map ivy-switch-buffer-map + ("C-k" . ivy-previous-line) + ("C-l" . ivy-done) + ("C-d" . ivy-switch-buffer-kill) + :map ivy-reverse-i-search-map + ("C-k" . ivy-previous-line) + ("C-d" . ivy-reverse-i-search-kill)) :config - (global-git-gutter-mode t) - (setq git-gutter:modified-sign "|") - (set-face-foreground 'git-gutter:modified "grey") - (set-face-foreground 'git-gutter:added "green") - (set-face-foreground 'git-gutter:deleted "red") - :bind (("C-x C-g" . git-gutter)) - :diminish nil) + (ivy-mode 1)) ;; Lisp programming (use-package paredit @@ -311,269 +78,19 @@ :config (add-hook 'prog-mode-hook 'rainbow-delimiters-mode)) -;; Ace Jump -(use-package ace-jump-mode - :bind ("C-M-SPC" . ace-jump-mode)) - -;; Dump Jump -(use-package dumb-jump - :bind (("M-g o" . dumb-jump-go-other-window) - ("M-g j" . dumb-jump-go) - ("M-g b" . dumb-jump-back) - ("M-g i" . dumb-jump-go-prompt) - ("M-g x" . dumb-jump-go-prefer-external) - ("M-g z" . dumb-jump-go-prefer-external-other-window)) - :config (setq dumb-jump-selector 'ivy) - :ensure) - -;; GUI stuff -(scroll-bar-mode -1) -(tool-bar-mode -1) -(tooltip-mode -1) -(menu-bar-mode -1) - - -;; Garbage collection -(setq gc-cons-threshold 20000000) - -;; org-gcal stuff -(use-package org-gcal - :bind (:map org-agenda-mode-map ("g" . org-gcal-fetch)) - :config - (setq org-gcal-secret (password-store-get "EmacsSecrets/org-gcal-secret") - org-gcal-client-id (password-store-get "EmacsSecrets/org-gcal-client-id")) - (setq org-gcal-client-secret org-gcal-secret - org-gcal-file-alist '(("matthew.lemon@gmail.com" . "~/Nextcloud/org/calendar/work-cal.org") - ("12panp3nqdbmm9df4if9jigigo@group.calendar.google.com" . "~/Nextcloud/org/calendar/home-cal.org")))) - -;; No backup files! -(setq make-backup-files nil) - -;; Put backups in /tmp where they belong -(setq backup-directory-alist - `((".*" . ,temporary-file-directory))) -(setq auto-save-file-name-transforms - `((".*" ,temporary-file-directory t))) - -;; Always follow symlinks -(setq vc-follow-symlinks t) - -;; Confirm before quitting emacs -(setq confirm-kill-emacs 'y-or-n-p) - -;; dired config -;; human readable -(setq-default dired-listing-switches "-alh") - -;; Dired main config -(use-package dired - :ensure nil - :bind - (("C-x C-j" . dired-jump) - ("C-x j" . dired-jump-other-window)) - :custom - ;; Always delete and copy recursively - (dired-recursive-deletes 'always) - (dired-recursive-copies 'always) - ;; Auto refresh Dired, but be quiet about it - (global-auto-revert-non-file-buffers t) - (auto-revert-verbose nil) - ;; Quickly copy/move file in Dired - (dired-dwim-target t) - ;; Move files to trash when deleting - (delete-by-moving-to-trash t) - :config - ;; Reuse same dired buffer, to prevent numerous buffers while navigating in dired - (put 'dired-find-alternate-file 'disabled nil) - :hook - (dired-mode . (lambda () - (local-set-key (kbd "<mouse-2>") #'dired-find-alternate-file) - (local-set-key (kbd "RET") #'dired-find-alternate-file) - (local-set-key (kbd "^") - (lambda () (interactive) (find-alternate-file "..")))))) - -;; recursively copy by default -(setq dired-recursive-copies 'always) - -;; y or n instead of yes or no -(fset 'yes-or-no-p 'y-or-n-p) - -;; auto revert files -(global-auto-revert-mode t) - -;; Inhibit splash -(setq inhibit-splash-screen t) -(setq inhibit-startup-message t) - -;; Display the current time -(display-time-mode t) - -;; Enable narrow region (disabled by default) -(put 'narrow-to-region 'disabled nil) - -;; Enable cursor position when reopening files -(setq save-place-file "~/.emacs.d/saveplace") -(setq-default save-place t) -(require 'saveplace) - -;; Don't lock files -(setq-default create-lockfiles nil) - -;; Windmove - use Shift and arrow keys to move in windows -(when (fboundp 'windmove-default-keybindings) - (windmove-default-keybindings)) - -;; Winner mode - undo and redo changes in window config -;; with C-c left and C-c right -(use-package winner - :ensure nil - :custom - (winner-boring-buffers - '("*Completions*" - "*Compile-Log*" - "*inferior-lisp*" - "*Fuzzy Completions*" - "*Apropos*" - "*Help*" - "*cvs*" - "*Buffer List*" - "*Ibuffer*" - "*esh command on file*")) - :config - (winner-mode 1)) - -;; Don't ring the system bell -(setq visible-bell t) - -;; Use a separation file for custom commands -(setq custom-file "~/.emacs.d/custom-settings.el") -(load custom-file t) - -;; Handling tabs (for programming) -(setq-default tab-width 2) -(setq-default tab-width 2 indent-tabs-mode nil) -(setq-default indent-tabs-mode nil) -(setq js-indent-level 2) -(setq coffee-tab-width 2) -(setq python-indent 2) -(setq css-indent-offset 2) -(add-hook 'sh-mode-hook - (lambda () - (setq sh-basic-offset 2 - sh-indentation 2))) -(setq web-mode-markup-indent-offset 2) - -;; flycheck syntax highlighting -(use-package flycheck - :ensure t - :init (global-flycheck-mode)) - -;; Auto-indent with RET -(define-key global-map (kbd "RET") 'newline-and-indent) - -;; Highlight matching parens -(show-paren-mode t) - -;; Code folding (hide show mode) -;;- zc: Fold -;;- za: Unfold -;;- zR: Unfold everything -(add-hook 'prog-mode-hook #'hs-minor-mode) - -;; Line numbers -(add-hook 'prog-mode-hook '(lambda () - (if (version<= emacs-version "26.0.50") - (linum-mode) - (display-line-numbers-mode)))) - -;; Ivy -;; from https://github.com/MatthewZMD/.emacs.d/blob/master/README.md#orgcfd324a -(use-package ivy - :diminish +;; EVIL +(use-package evil :init - (use-package amx :defer t) - (use-package counsel :diminish :config (counsel-mode 1)) - (use-package swiper :defer t) - (ivy-mode 1) - :bind - (("C-s" . swiper-isearch) - ("C-x C-f" . counsel-find-file) - ("C-x C-m" . counsel-M-x) - ("C-h f" . counsel-describe-function) - ("C-h v" . counsel-describe-variable) - ("C-z s" . counsel-rg) - ("C-x C-r" . counsel-recentf) - ("C-z b" . counsel-buffer-or-recentf) - ("C-z C-b" . counsel-ibuffer) - (:map ivy-minibuffer-map - ("C-r" . ivy-previous-line-or-history) - ("M-RET" . ivy-immediate-done)) - (:map counsel-find-file-map - ("C-~" . counsel-goto-local-home))) - :custom - (ivy-use-virtual-buffers t) - (ivy-height 10) - (ivy-on-del-error-function nil) - (ivy-magic-slash-non-match-action 'ivy-magic-slash-non-match-create) - (ivy-count-format "【%d/%d】") - (ivy-wrap t) - :config - (setq projectile-completion-system 'ivy) - (defun counsel-goto-local-home () - "Go to the $HOME of the local machine." - (interactive) - (ivy--cd "~/"))) - -;; Jump to Characters and Words -(use-package avy - :bind ("M-SPC" . avy-goto-char) - :config - (setq avy-background t - avy-keys '(?a ?o ?e ?u ?i ?d ?h ?t ?n ?s))) - -;; Ace Window -(use-package ace-window - :bind (("C-x o" . ace-window) - ("M-2" . ace-window)) - :init - (setq aw-background t - aw-keys '(?a ?o ?e ?u ?i ?d ?h ?t ?n ?s))) - -;; expand-region -(use-package expand-region - :bind (("C-@" . er/expand-region) - ("C-=" . er/expand-region) - ("M-3" . er/expand-region))) - -(pending-delete-mode t) - -;; writeroom-mode -(use-package writeroom-mode) - -;; browse-kill-ring -(use-package browse-kill-ring - :bind ("C-x C-y" . browse-kill-ring) :config - (setq browse-kill-ring-quit-action 'kill-and-delete-window)) + (setq evil-respect-visual-line-mode t) + (evil-mode 1)) -(setq save-interprogram-paste-before-kill t) - -;; better re-builder setup -(use-package re-builder - :bind (("C-c R" . re-builder)) +;; which-key - for nice menu +(use-package which-key :config - (setq reb-re-syntax 'string)) - -;; reduce size of images in eww -(setq shr-max-image-proportion 0.4) - -;; reset 'r' to go forward in eww -(add-hook 'eww-mode-hook - (lambda () - (define-key eww-mode-map "r" - 'eww-forward-url))) + (which-key-mode)) -;; org mode config +;; org mode! (use-package org :config (global-set-key "\C-cl" 'org-store-link) @@ -584,17 +101,23 @@ (org-clock-persistence-insinuate) (setq org-sort-agenda-notime-is-late nil) (setq org-agenda-span 'day) - (setq org-directory "~/Nextcloud/org") - (setq org-agenda-files (quote ("~/Nextcloud/org/todo.org" - "~/Nextcloud/org/projects.org" - "~/Nextcloud/org/habits.org" - "~/Nextcloud/org/dft.org" - "~/Nextcloud/org/calendar/home-cal.org" - "~/Nextcloud/org/calendar/work-cal.org"))) + (setq org-directory "~/org") + (setq org-agenda-files (quote ("~/org/todo.org" + "~/org/cal.org" + "~/org/projects.org" + "~/org/work.org" + "~/org/habits.org" + "~/org/calendar/home-cal.org" + "~/org/calendar/work-cal.org"))) (setq org-default-notes-file (concat org-directory "/notes.org")) - (setq diary-file "~/Nextcloud/org/diary") + (setq org-agenda-window-setup 'current-window) + (setq org-agenda-start-with-log-mode t) + (setq org-log-done 'time) + (setq diary-file "~/org/diary") (setq org-agenda-include-diary t) + (setq org-agenda-diary-file "~/org/cal.org") + (setq org-agenda-show-future-repeats t) (setq org-agenda-show-future-repeats nil) (setq org-agenda-skip-deadline-if-done t) (setq org-agenda-skip-scheduled-if-done t) @@ -603,7 +126,7 @@ (setq org-log-done-with-time 'note) (setq org-sort-agenda-notime-is-late nil) - (setq org-archive-location "~/Nextcloud/org/archive.org::* From %s") + (setq org-archive-location "~/org/archive.org::* From %s") (setq org-refile-targets (quote ((nil :maxlevel . 9) (org-agenda-files :maxlevel . 9)))) @@ -617,27 +140,29 @@ (define-key global-map "\C-cc" 'org-capture) (setq org-capture-templates (quote (("t" "Templates for Tasks") - ("tp" "Task Personal" entry (file "~/Nextcloud/org/todo.org") + ("tp" "Task Personal" entry (file "~/org/todo.org") "* TODO %?" :prepend t) - ("tw" "Task Work" entry (file "~/Nextcloud/org/dft.org") + ("tw" "Task Work" entry (file "~/org/work.org") "* TODO %?" :prepend t) - ("j" "Journal" entry (file+datetree "~/Nextcloud/org/journal.org") + ("j" "Journal" entry (file+datetree "~/org/journal.org") "* %?\nEntered on %U\n %i\n %a\n %l") + ("d" "Retrospective DONE" entry (file "~/org/todo.org") + "* DONE %?\nCLOSED: %U") ("w" "Work Notes and Journaling") - ("wn" "Note" entry (file+headline "~/Nextcloud/org/dft.org" "Notes") + ("wn" "Note" entry (file+headline "~/org/work.org" "Notes") "* %?\n\t") - ("wc" "Note from Clipboard" entry (file+headline "~/Nextcloud/org/dft.org" "Notes") + ("wc" "Note from Clipboard" entry (file+headline "~/org/work.org" "Notes") "* %?\n\t\n%c") - ("wr" "Note from Region" entry (file+headline "~/Nextcloud/org/dft.org" "Notes") + ("wr" "Note from Region" entry (file+headline "~/org/work.org" "Notes") "* %?\n\t\n%i") - ("wj" "Journal" entry (file+olp+datetree "~/Nextcloud/org/dft.org" "Journal") + ("wj" "Journal" entry (file+olp+datetree "~/org/work.org" "Journal") "* %?\n\tEntered on %U\n") ("e" "Emacs Tip") - ("et" "Emacs Tip" entry (file+headline "~/Nextcloud/org/emacs-tips.org" "Emacs Tips") + ("et" "Emacs Tip" entry (file+headline "~/org/emacs-tips.org" "Emacs Tips") "* %?\n\t%a") - ("er" "Emacs Tip from Region" entry (file+headline "~/Nextcloud/org/emacs-tips.org" "Emacs Tips") + ("er" "Emacs Tip from Region" entry (file+headline "~/org/emacs-tips.org" "Emacs Tips") "* %?\n\t%i") ))) ;; Put state transition logs into a drawer called LOGBOOK @@ -728,190 +253,44 @@ (bind-key "<f5>" 'open-agenda) -;; markdown -(use-package markdown-mode) - -;; csvs! -(use-package csv-mode - :mode ("\\.csv$" . csv-mode)) - -;; Interactively Do Things (ido) -(use-package ido - :config - (ido-mode t) - (ido-everywhere t) - (setq ido-enable-flex-matching t)) - -;; Which key -(use-package which-key - :init - (which-key-mode)) - - -;; Python programming -(use-package elpy - :ensure py-autopep8 - :defer t - :config - (add-hook 'elpy-mode-hook 'py-autopep8-enable-on-save) - (setq elpy-rpc-python-command "python3") - (setq python-shell-interpreter "python3" - python-shell-interpreter-args "console --simple-prompt" - python-shell-prompt-detect-failure-warning nil) - (add-to-list 'python-shell-completion-native-disabled-interpreters - "python3") - - (when (require 'flycheck nil t) - (setq elpy-modules (delq 'elpy-module-flymake elpy-modules)) - (add-hook 'elpy-mode-hook 'flycheck-mode))) - -(use-package python-pytest - :bind - ("C-c ESC t" . python-pytest-popup) - ) - -;; need this code to fix escape codes in compilation buffer -;; (when running elpy test, for example) -;; from https://stackoverflow.com/questions/3072648/cucumbers-ansi-colors-messing-up-emacs-compilation-buffer -(require 'ansi-color) -(defun colorize-compilation-buffer () - (let ((inhibit-read-only t)) - (ansi-color-apply-on-region (point-min) (point-max)))) -(add-hook 'compilation-filter-hook 'colorize-compilation-buffer) - -;; projectile -(use-package projectile - :config - (projectile-mode +1) - (define-key projectile-mode-map (kbd "s-p") 'projectile-command-map) - (define-key projectile-mode-map (kbd "C-c p") 'projectile-command-map) - ) - -;; Go programming -(use-package lsp-mode - :hook (go-mode . lsp-deferred) - :hook (python-mode . lsp-deferred) - :commands (lsp lsp-deferred) - :config - (add-to-list 'auto-mode-alist '("\\.go\\'" . go-mode))) - -(use-package gotest) - -;; lsp-ui -(use-package lsp-ui - :after lsp-mode - :diminish - :commands lsp-ui-mode - :custom-face - (lsp-ui-doc-background ((t (:background nil)))) - (lsp-ui-doc-header ((t (:inherit (font-lock-string-face italic))))) - :bind (:map lsp-ui-mode-map - ([remap xref-find-definitions] . lsp-ui-peek-find-definitions) - ([remap xref-find-references] . lsp-ui-peek-find-references) - ("C-c u" . lsp-ui-imenu)) - :custom - (lsp-ui-doc-enable t) - (lsp-ui-doc-header t) - (lsp-ui-doc-include-signature t) - (lsp-ui-doc-position 'top) - (lsp-ui-doc-border (face-foreground 'default)) - (lsp-ui-sideline-enable nil) - (lsp-ui-sideline-ignore-duplicate t) - (lsp-ui-sideline-show-code-actions nil) - :config - - ;; WORKAROUND Hide mode-line of the lsp-ui-imenu buffer - ;; https://github.com/emacs-lsp/lsp-ui/issues/243 - (defadvice lsp-ui-imenu (after hide-lsp-ui-imenu-mode-line activate) - (setq mode-line-format nil))) - - - -;; Yasnippet -(use-package yasnippet - :diminish yas-minor-mode - :hook ((prog-mode LaTeX-mode org-mode) . yas-minor-mode) - :bind - (:map yas-minor-mode-map ("C-c C-n" . yas-expand-from-trigger-key)) - (:map yas-keymap - (("TAB" . smarter-yas-expand-next-field) - ([(tab)] . smarter-yas-expand-next-field))) - :config - (use-package yasnippet-snippets) - (yas-reload-all) - (defun smarter-yas-expand-next-field () - "Try to `yas-expand' then `yas-next-field' at current cursor position." - (interactive) - (let ((old-point (point)) - (old-tick (buffer-chars-modified-tick))) - (yas-expand) - (when (and (eq old-point (point)) - (eq old-tick (buffer-chars-modified-tick))) - (ignore-errors (yas-next-field)))))) - -;; this config works better with yasnippet -(use-package company - :diminish company-mode - :hook ((prog-mode LaTeX-mode latex-mode ess-r-mode ledger-mode) . company-mode) - :bind - (:map company-active-map - ([tab] . smarter-yas-expand-next-field-complete) - ("TAB" . smarter-yas-expand-next-field-complete)) - :custom - (company-tooltip-align-annotations t) - (company-begin-commands '(self-insert-command)) - (company-require-match 'never) - ;; Don't use company in the following modes - (company-global-modes '(not shell-mode eaf-mode)) - ;; Trigger completion immediately. - (company-idle-delay 0.1) - ;; Number the candidates (use M-1, M-2 etc to select completions). - (company-show-numbers t) - :config - ;; clangd variable not present which was a problem -;; (unless *clangd* (delete 'company-clang company-backends)) -;; (global-company-mode 1) - (setq company-idle-delay 0) - (setq company-minimum-prefix-length 3) - (defun smarter-yas-expand-next-field-complete () - "Try to `yas-expand' and `yas-next-field' at current cursor position. - -If failed try to complete the common part with `company-complete-common'" - (interactive) - (if yas-minor-mode - (let ((old-point (point)) - (old-tick (buffer-chars-modified-tick))) - (yas-expand) - (when (and (eq old-point (point)) - (eq old-tick (buffer-chars-modified-tick))) - (ignore-errors (yas-next-field)) - (when (and (eq old-point (point)) - (eq old-tick (buffer-chars-modified-tick))) - (company-complete-common)))) - (company-complete-common)))) - -;; this stuff from https://youtu.be/XeWZfruRu6k -;; for c programming mainly -(use-package company-irony - :config - (require 'company) - (add-to-list 'company-backends 'company-irony)) - -(use-package irony - :config - (add-hook 'c-mode-hook 'irony-mode) - (add-hook 'irony-mode-hook 'irony-cdb-autosetup-compile-options)) - -(use-package ledger-mode - :mode ("\\.ledger\\'") +;; elfeed +(use-package elfeed :config - (add-hook 'ledger-mode-hook - (lambda () - (setq-local tab-always-indent 'complete) - (setq-local completion-cycle-threshold t) - (setq-local ledger-complete-in-steps t))) - :custom (ledger-clear-whole-transactions t)) - -(setq lsp-gopls-staticcheck t) -(setq lsp-eldoc-render-all t) -(setq lsp-gopls-complete-unimported t) + (setq elfeed-feeds + '(("http://feeds.bbci.co.uk/news/rss.xml?edition=uk" news) + "https://www.feedspot.com/?followfeedid=4946040" + ("http://feeds.bbci.co.uk/news/technology/rss.xml" tech news) + ("https://dominiccummings.com/rss.xml" blog tech) + ("http://newsrss.bbc.co.uk/rss/sportonline_uk_edition/rugby_union/rss.xml" rugby) + ("http://feeds.bbci.co.uk/news/video_and_audio/politics/rss.xml" news) + ("https://feeds.feedburner.com/arstechnica/open-source" opensource) + ("https://www.computerweekly.com/rss/IT-security.xml" cyber) + ("https://www.fsf.org/static/fsforg/rss/news.xml" opensource) + ("https://www.reddit.com/r/freebsd.rss" bsd) + ("https://www.reddit.com/r/emacs.rss" emacs) + ("https://www.reddit.com/r/rugbyunion/.rss" rugby) + ("http://pragmaticemacs.com/feed/" emacs) + ("https://200ok.ch/atom.xml" emacs) + "https://www.youtube.com/feeds/videos.xml?channel_id=UCkK9UDm_ZNrq_rIXCz3xCGA" + "https://www.youtube.com/feeds/videos.xml?channel_id=UCFzGyNKXPAglNq28qWYTDFA" + "https://www.youtube.com/feeds/videos.xml?channel_id=UC2eYFnH61tmytImy1mTYvhA" + ("http://www.linuxinsider.com/perl/syndication/rssfull.pl" linux) + ("http://planet.debian.org/rss20.xml" debian linux) + ("http://feeds2.feedburner.com/Command-line-fu" linux) + ("https://opensource.org/news.xml" opensource) + ("https://feeds.feedburner.com/arstechnica/index" news tech) + ("https://www.wired.com/feed/rss" news tech) + ("https://sivers.org/en.atom" blog)))) +(custom-set-variables + ;; custom-set-variables was added by Custom. + ;; If you edit it by hand, you could mess it up, so be careful. + ;; Your init file should contain only one such instance. + ;; If there is more than one, they won't work right. + '(package-selected-packages + '(elfeed-org which-key use-package rainbow-delimiters paredit evil counsel))) +(custom-set-faces + ;; custom-set-faces was added by Custom. + ;; If you edit it by hand, you could mess it up, so be careful. + ;; Your init file should contain only one such instance. + ;; If there is more than one, they won't work right. + ) |