use Elpaca for package management
This commit is contained in:
@@ -239,6 +239,7 @@ Sets environment variables by starting a shell.
|
|||||||
** noflet
|
** noflet
|
||||||
#+BEGIN_SRC emacs-lisp
|
#+BEGIN_SRC emacs-lisp
|
||||||
(use-package noflet
|
(use-package noflet
|
||||||
|
:after (dash) ;;@HACK: noflet does not properly declare dependencies
|
||||||
:demand t)
|
:demand t)
|
||||||
#+END_SRC
|
#+END_SRC
|
||||||
** Non-Forking Shell Command To String
|
** Non-Forking Shell Command To String
|
||||||
@@ -359,51 +360,6 @@ Works in the same way as os.path.join in python
|
|||||||
#+BEGIN_SRC emacs-lisp
|
#+BEGIN_SRC emacs-lisp
|
||||||
(defvar imalison:gpg-key)
|
(defvar imalison:gpg-key)
|
||||||
#+END_SRC
|
#+END_SRC
|
||||||
** Required Packages
|
|
||||||
The packages in this section provide no functionality on their own,
|
|
||||||
but provide support for writing custom elisp.
|
|
||||||
*** s
|
|
||||||
#+BEGIN_SRC emacs-lisp
|
|
||||||
(use-package s :demand t)
|
|
||||||
#+END_SRC
|
|
||||||
*** dash
|
|
||||||
#+BEGIN_SRC emacs-lisp
|
|
||||||
(use-package dash
|
|
||||||
:demand t
|
|
||||||
:config
|
|
||||||
(progn
|
|
||||||
(dash-enable-font-lock)))
|
|
||||||
#+END_SRC
|
|
||||||
*** gh
|
|
||||||
#+BEGIN_SRC emacs-lisp
|
|
||||||
(use-package gh
|
|
||||||
:defer t
|
|
||||||
:straight (gh :type git :host github :repo "IvanMalison/gh.el"))
|
|
||||||
#+END_SRC
|
|
||||||
*** shut-up
|
|
||||||
#+BEGIN_SRC emacs-lisp
|
|
||||||
(use-package shut-up
|
|
||||||
:demand t
|
|
||||||
:ensure (:inherit t :wait t)
|
|
||||||
:config
|
|
||||||
(defun imalison:shut-up-around (function &rest args)
|
|
||||||
(shut-up (apply function args))))
|
|
||||||
#+END_SRC
|
|
||||||
*** parse-csv
|
|
||||||
#+BEGIN_SRC emacs-lisp
|
|
||||||
(use-package parse-csv
|
|
||||||
:demand t)
|
|
||||||
#+END_SRC
|
|
||||||
*** emit
|
|
||||||
#+BEGIN_SRC emacs-lisp
|
|
||||||
(use-package emit
|
|
||||||
:straight (emit :type git :host github :repo "colonelpanic8/emit"))
|
|
||||||
#+END_SRC
|
|
||||||
*** request
|
|
||||||
#+BEGIN_SRC emacs-lisp
|
|
||||||
(use-package request
|
|
||||||
:defer t)
|
|
||||||
#+END_SRC
|
|
||||||
** Named Build
|
** Named Build
|
||||||
<<namedbuild>>
|
<<namedbuild>>
|
||||||
imalison:named-build provides a way to invoke a macro in such a way
|
imalison:named-build provides a way to invoke a macro in such a way
|
||||||
@@ -1181,10 +1137,6 @@ I keep it around just in case I need it.
|
|||||||
(frame-mode +1)
|
(frame-mode +1)
|
||||||
(frame-keys-mode +1)))
|
(frame-keys-mode +1)))
|
||||||
#+END_SRC
|
#+END_SRC
|
||||||
*** Handle xrefs annoying dedicated window garbage
|
|
||||||
#+BEGIN_SRC emacs-lisp
|
|
||||||
(use-package xref)
|
|
||||||
#+END_SRC
|
|
||||||
** Fill Setup
|
** Fill Setup
|
||||||
Get rid of nags about requiring setences to end with two spaces.
|
Get rid of nags about requiring setences to end with two spaces.
|
||||||
#+BEGIN_SRC emacs-lisp
|
#+BEGIN_SRC emacs-lisp
|
||||||
@@ -1478,6 +1430,20 @@ The file server file for this emacs instance no longer exists.")
|
|||||||
(use-package refine
|
(use-package refine
|
||||||
:disabled t)
|
:disabled t)
|
||||||
#+END_SRC
|
#+END_SRC
|
||||||
|
** winner
|
||||||
|
#+BEGIN_SRC emacs-lisp
|
||||||
|
(use-package winner
|
||||||
|
:ensure nil
|
||||||
|
:commands (winner-undo winner-redo)
|
||||||
|
:bind ("C-c q" . imalison:winner-hydra/body)
|
||||||
|
:config
|
||||||
|
(progn
|
||||||
|
(defhydra imalison:winner-hydra ()
|
||||||
|
"Winner"
|
||||||
|
("p" winner-undo "back")
|
||||||
|
("n" winner-redo "forward" :exit t))
|
||||||
|
(winner-mode 1)))
|
||||||
|
#+END_SRC
|
||||||
** eyebrowse
|
** eyebrowse
|
||||||
I don't have any use for this now that I use frames mode, but its an interesting idea.
|
I don't have any use for this now that I use frames mode, but its an interesting idea.
|
||||||
#+BEGIN_SRC emacs-lisp
|
#+BEGIN_SRC emacs-lisp
|
||||||
@@ -1632,10 +1598,6 @@ out how to detect that a buffer is a man mode buffer.
|
|||||||
(progn
|
(progn
|
||||||
(global-set-key (kbd "<escape>") 'god-local-mode)))
|
(global-set-key (kbd "<escape>") 'god-local-mode)))
|
||||||
#+END_SRC
|
#+END_SRC
|
||||||
** bind-key
|
|
||||||
#+BEGIN_SRC emacs-lisp
|
|
||||||
(use-package bind-key)
|
|
||||||
#+END_SRC
|
|
||||||
** which-key
|
** which-key
|
||||||
#+BEGIN_SRC emacs-lisp
|
#+BEGIN_SRC emacs-lisp
|
||||||
(use-package which-key
|
(use-package which-key
|
||||||
@@ -1834,7 +1796,9 @@ bind-key and global-set-key forms.
|
|||||||
(write-region "" nil
|
(write-region "" nil
|
||||||
(expand-file-name
|
(expand-file-name
|
||||||
(concat directory "/"
|
(concat directory "/"
|
||||||
(nth 0 file-info) "/.projectile"))))))
|
(nth 0 file-info) "/.projectile")))))))
|
||||||
|
:config
|
||||||
|
(progn
|
||||||
(projectile-global-mode)
|
(projectile-global-mode)
|
||||||
(diminish 'projectile-mode)))
|
(diminish 'projectile-mode)))
|
||||||
#+END_SRC
|
#+END_SRC
|
||||||
@@ -1883,8 +1847,7 @@ bind-key and global-set-key forms.
|
|||||||
** avy
|
** avy
|
||||||
#+BEGIN_SRC emacs-lisp
|
#+BEGIN_SRC emacs-lisp
|
||||||
(use-package avy
|
(use-package avy
|
||||||
:after emit
|
:preface
|
||||||
:config
|
|
||||||
(progn
|
(progn
|
||||||
(emit-prefix-selector imalison:avy
|
(emit-prefix-selector imalison:avy
|
||||||
avy-goto-word-1
|
avy-goto-word-1
|
||||||
@@ -1896,13 +1859,11 @@ bind-key and global-set-key forms.
|
|||||||
** ace-window
|
** ace-window
|
||||||
#+BEGIN_SRC emacs-lisp
|
#+BEGIN_SRC emacs-lisp
|
||||||
(use-package ace-window
|
(use-package ace-window
|
||||||
:after emit
|
:preface
|
||||||
:config
|
(emit-prefix-selector imalison:ace-window
|
||||||
(progn
|
ace-select-window
|
||||||
(emit-prefix-selector imalison:ace-window
|
ace-swap-window)
|
||||||
ace-select-window
|
:config (setq aw-keys '(?a ?s ?d ?f ?g ?h ?j ?k ?l))
|
||||||
ace-swap-window)
|
|
||||||
(setq aw-keys '(?a ?s ?d ?f ?g ?h ?j ?k ?l)))
|
|
||||||
:bind ("C-c w" . imalison:ace-window))
|
:bind ("C-c w" . imalison:ace-window))
|
||||||
#+END_SRC
|
#+END_SRC
|
||||||
** neotree
|
** neotree
|
||||||
@@ -1928,41 +1889,28 @@ Neotree is useless with frame mode for now, so I've disabled it.
|
|||||||
* Completion
|
* Completion
|
||||||
** vertico
|
** vertico
|
||||||
#+begin_src emacs-lisp
|
#+begin_src emacs-lisp
|
||||||
(use-package vertico
|
(use-package vertico
|
||||||
:demand t
|
:demand t
|
||||||
:config
|
:config
|
||||||
(progn
|
(vertico-mode))
|
||||||
(defmacro imalison:use-vertico-extension (extension-name &rest forms)
|
|
||||||
(let ((extension-symbol (intern (concat "vertico-" (symbol-name extension-name)))))
|
|
||||||
`(use-package ,extension-symbol
|
|
||||||
:after vertico
|
|
||||||
:straight (,extension-symbol
|
|
||||||
:repo "emacs-straight/vertico"
|
|
||||||
:host github
|
|
||||||
:files ,(list (concat "extensions/" (symbol-name extension-symbol) ".el")))
|
|
||||||
,@forms)))
|
|
||||||
|
|
||||||
(put 'imalison:use-vertico-extension 'lisp-indent-function 'defun)
|
(use-package vertico-directory :ensure nil
|
||||||
|
:bind (:map vertico-map
|
||||||
|
("RET" . vertico-directory-enter)
|
||||||
|
("DEL" . vertico-directory-delete-char)
|
||||||
|
("M-DEL" . vertico-directory-delete-word)
|
||||||
|
("TAB" . embark-act)))
|
||||||
|
|
||||||
(imalison:use-vertico-extension directory
|
(use-package vertico-grid :ensure nil :after (vertico))
|
||||||
:bind (:map vertico-map
|
(use-package vertico-buffer :ensure nil :after (vertico))
|
||||||
("RET" . vertico-directory-enter)
|
(use-package vertico-flat :ensure nil :after (vertico))
|
||||||
("DEL" . vertico-directory-delete-char)
|
(use-package vertico-multiform :ensure nil :after (vertico)
|
||||||
("M-DEL" . vertico-directory-delete-word)
|
:config
|
||||||
("TAB" . embark-act)))
|
(progn
|
||||||
|
(vertico-multiform-mode +1)
|
||||||
(imalison:use-vertico-extension grid)
|
(setq vertico-multiform-commands
|
||||||
(imalison:use-vertico-extension buffer)
|
'((consult-imenu grid)
|
||||||
(imalison:use-vertico-extension flat)
|
(consult-ripgrep buffer)))))
|
||||||
(imalison:use-vertico-extension multiform
|
|
||||||
:config
|
|
||||||
(progn
|
|
||||||
(vertico-multiform-mode +1)
|
|
||||||
(setq vertico-multiform-commands
|
|
||||||
'((consult-imenu grid)
|
|
||||||
(consult-ripgrep buffer)))))
|
|
||||||
|
|
||||||
(vertico-mode +1)))
|
|
||||||
#+end_src
|
#+end_src
|
||||||
** orderless
|
** orderless
|
||||||
#+begin_src emacs-lisp
|
#+begin_src emacs-lisp
|
||||||
@@ -2057,12 +2005,10 @@ Neotree is useless with frame mode for now, so I've disabled it.
|
|||||||
** company
|
** company
|
||||||
#+BEGIN_SRC emacs-lisp
|
#+BEGIN_SRC emacs-lisp
|
||||||
(use-package company
|
(use-package company
|
||||||
:after emit
|
|
||||||
:commands company-mode imalison:company
|
:commands company-mode imalison:company
|
||||||
:bind (("C-\\" . imalison:company))
|
:bind (("C-\\" . imalison:company))
|
||||||
:config
|
:config
|
||||||
(progn
|
(progn
|
||||||
(add-hook 'prog-mode-hook (lambda () (company-mode t)))
|
|
||||||
(emit-prefix-selector imalison:company
|
(emit-prefix-selector imalison:company
|
||||||
company-complete
|
company-complete
|
||||||
company-yasnippet)
|
company-yasnippet)
|
||||||
@@ -2072,7 +2018,9 @@ Neotree is useless with frame mode for now, so I've disabled it.
|
|||||||
:demand t
|
:demand t
|
||||||
:config (company-prescient-mode +1))
|
:config (company-prescient-mode +1))
|
||||||
(global-company-mode)
|
(global-company-mode)
|
||||||
(diminish 'company-mode)))
|
(diminish 'company-mode))
|
||||||
|
:init
|
||||||
|
(add-hook 'prog-mode-hook (lambda () (company-mode t))))
|
||||||
#+END_SRC
|
#+END_SRC
|
||||||
*** company-flx
|
*** company-flx
|
||||||
#+BEGIN_SRC emacs-lisp
|
#+BEGIN_SRC emacs-lisp
|
||||||
@@ -2296,7 +2244,7 @@ I don't use auto-complete at all, so I have set up a hook to automatically disab
|
|||||||
* auth-source
|
* auth-source
|
||||||
#+begin_src emacs-lisp
|
#+begin_src emacs-lisp
|
||||||
(use-package auth-source
|
(use-package auth-source
|
||||||
:straight nil
|
:ensure nil
|
||||||
:config
|
:config
|
||||||
(progn
|
(progn
|
||||||
(setq auth-sources '("~/.authinfo.gpg"))))
|
(setq auth-sources '("~/.authinfo.gpg"))))
|
||||||
@@ -2351,96 +2299,96 @@ I don't use auto-complete at all, so I have set up a hook to automatically disab
|
|||||||
#+end_src
|
#+end_src
|
||||||
*** go
|
*** go
|
||||||
#+BEGIN_SRC emacs-lisp
|
#+BEGIN_SRC emacs-lisp
|
||||||
;; (use-package go-mode
|
(use-package go-mode
|
||||||
;; :mode (("\\.go\\'" . go-mode))
|
:mode (("\\.go\\'" . go-mode))
|
||||||
;; :after emit
|
:preface
|
||||||
;; :config
|
(progn
|
||||||
;; (progn
|
(defun imalison:glide-novendor ()
|
||||||
;; (defun imalison:glide-novendor ()
|
(projectile-with-default-dir (projectile-project-root)
|
||||||
;; (projectile-with-default-dir (projectile-project-root)
|
(shell-command-to-string "glide novendor")))
|
||||||
;; (shell-command-to-string "glide novendor")))
|
|
||||||
|
|
||||||
;; (defun imalison:go-mode-create-imenu-index ()
|
(defun imalison:go-mode-create-imenu-index ()
|
||||||
;; "Create and return an imenu index alist. Unlike the default
|
"Create and return an imenu index alist. Unlike the default
|
||||||
;; alist created by go-mode, this method creates an alist where
|
alist created by go-mode, this method creates an alist where
|
||||||
;; items follow a style that is consistent with other prog-modes."
|
items follow a style that is consistent with other prog-modes."
|
||||||
;; (let* ((patterns '(("type" "^type *\\([^ \t\n\r\f]*\\)" 1)))
|
(let* ((patterns '(("type" "^type *\\([^ \t\n\r\f]*\\)" 1)))
|
||||||
;; (type-index (imenu--generic-function patterns))
|
(type-index (imenu--generic-function patterns))
|
||||||
;; (func-index))
|
(func-index))
|
||||||
;; (save-excursion
|
(save-excursion
|
||||||
;; (goto-char (point-min))
|
(goto-char (point-min))
|
||||||
;; (while (re-search-forward go-func-meth-regexp (point-max) t)
|
(while (re-search-forward go-func-meth-regexp (point-max) t)
|
||||||
;; (let* ((var (match-string-no-properties 1))
|
(let* ((var (match-string-no-properties 1))
|
||||||
;; (func (match-string-no-properties 2))
|
(func (match-string-no-properties 2))
|
||||||
;; (name (if var
|
(name (if var
|
||||||
;; (concat (substring var 0 -1) "." func)
|
(concat (substring var 0 -1) "." func)
|
||||||
;; func))
|
func))
|
||||||
;; (beg (match-beginning 0))
|
(beg (match-beginning 0))
|
||||||
;; (marker (copy-marker beg))
|
(marker (copy-marker beg))
|
||||||
;; (item (cons name marker)))
|
(item (cons name marker)))
|
||||||
;; (setq func-index (cons item func-index)))))
|
(setq func-index (cons item func-index)))))
|
||||||
;; (nconc type-index (list (cons "func" func-index)))))
|
(nconc type-index (list (cons "func" func-index)))))
|
||||||
|
|
||||||
;; (defun imalison:go-workspace-path ()
|
(defun imalison:go-workspace-path ()
|
||||||
;; (file-relative-name (projectile-project-root)
|
(file-relative-name (projectile-project-root)
|
||||||
;; (concat (file-name-as-directory
|
(concat (file-name-as-directory
|
||||||
;; (imalison:get-go-path)) "src")))
|
(imalison:get-go-path)) "src")))
|
||||||
|
|
||||||
;; (defun imalison:install-current-go-project ()
|
(defun imalison:install-current-go-project ()
|
||||||
;; (interactive)
|
(interactive)
|
||||||
;; (start-process
|
(start-process
|
||||||
;; "go install" "go install log" "go" "install"
|
"go install" "go install log" "go" "install"
|
||||||
;; (concat (file-name-as-directory (imalison:go-workspace-path)) "...")))
|
(concat (file-name-as-directory (imalison:go-workspace-path)) "...")))
|
||||||
|
|
||||||
;; (defun imalison:get-go-path ()
|
(defun imalison:get-go-path ()
|
||||||
;; (let ((environment-go-path (getenv "GOPATH")))
|
(let ((environment-go-path (getenv "GOPATH")))
|
||||||
;; (if environment-go-path
|
(if environment-go-path
|
||||||
;; (file-name-as-directory (car (s-split ":" environment-go-path)))
|
(file-name-as-directory (car (s-split ":" environment-go-path)))
|
||||||
;; "~/go")))
|
"~/go")))
|
||||||
|
|
||||||
;; (defmacro imalison:get-go-src (&rest paths)
|
(defmacro imalison:get-go-src (&rest paths)
|
||||||
;; `(imalison:join-paths (imalison:get-go-path) "src" ,@paths))
|
`(imalison:join-paths (imalison:get-go-path) "src" ,@paths))
|
||||||
|
|
||||||
;; (imalison:let-advise-around imalison:advise-normal-go-command
|
(imalison:let-advise-around imalison:advise-normal-go-command
|
||||||
;; (go-command "go"))
|
(go-command "go"))
|
||||||
|
|
||||||
;; (defun imalison:go-mode-hook ()
|
(defun imalison:go-mode-hook ()
|
||||||
;; (go-eldoc-setup)
|
(go-eldoc-setup)
|
||||||
;; (set (make-local-variable 'company-backends) '(company-go))
|
(set (make-local-variable 'company-backends) '(company-go))
|
||||||
;; (make-local-variable 'projectile-globally-ignored-files)
|
(make-local-variable 'projectile-globally-ignored-files)
|
||||||
;; (add-hook 'after-save-hook 'imalison:install-current-go-project nil
|
(add-hook 'after-save-hook 'imalison:install-current-go-project nil
|
||||||
;; 'yes-do-local)
|
'yes-do-local)
|
||||||
;; (add-to-list 'projectile-globally-ignored-files
|
(add-to-list 'projectile-globally-ignored-files
|
||||||
;; "vendor"))
|
"vendor")))
|
||||||
;; (use-package gotest
|
:config
|
||||||
;; :demand t
|
(progn
|
||||||
;; :after emit
|
(use-package gotest
|
||||||
;; :bind (:map go-mode-map
|
:demand t
|
||||||
;; ("C-c t" . imalison:gotest))
|
:bind (:map go-mode-map
|
||||||
;; :preface
|
("C-c t" . imalison:gotest))
|
||||||
;; (progn
|
:preface
|
||||||
;; (emit-prefix-selector imalison:gotest
|
(progn
|
||||||
;; go-test-current-test
|
(emit-prefix-selector imalison:gotest
|
||||||
;; go-test-current-file)
|
go-test-current-test
|
||||||
|
go-test-current-file)
|
||||||
|
|
||||||
;; (defun imalison:add-expected-test-name-for-suite (suite-name test-name)
|
(defun imalison:add-expected-test-name-for-suite (suite-name test-name)
|
||||||
;; (if (> (length suite-name) 0)
|
(if (> (length suite-name) 0)
|
||||||
;; (concat " -run Test" suite-name)
|
(concat " -run Test" suite-name)
|
||||||
;; "")))
|
"")))
|
||||||
;; :config
|
:config
|
||||||
;; (progn
|
(progn
|
||||||
;; (setq go-test-verbose t
|
(setq go-test-verbose t
|
||||||
;; go-test-additional-arguments-function
|
go-test-additional-arguments-function
|
||||||
;; 'imalison:add-expected-test-name-for-suite)))
|
'imalison:add-expected-test-name-for-suite)))
|
||||||
;; (use-package company-go
|
(use-package company-go
|
||||||
;; :config (setq company-go-show-annotation t))
|
:config (setq company-go-show-annotation t))
|
||||||
|
|
||||||
;; (advice-add 'go-import-add :around 'imalison:advise-normal-go-command)
|
(advice-add 'go-import-add :around 'imalison:advise-normal-go-command)
|
||||||
|
|
||||||
;; (setq gofmt-command "goimports")
|
(setq gofmt-command "goimports")
|
||||||
|
|
||||||
;; (add-hook 'go-mode-hook 'imalison:go-mode-hook)
|
(add-hook 'go-mode-hook 'imalison:go-mode-hook)
|
||||||
;; (add-hook 'before-save-hook 'gofmt-before-save t)))
|
(add-hook 'before-save-hook 'gofmt-before-save t)))
|
||||||
#+END_SRC
|
#+END_SRC
|
||||||
**** Show diffs of testify output
|
**** Show diffs of testify output
|
||||||
#+BEGIN_SRC emacs-lisp
|
#+BEGIN_SRC emacs-lisp
|
||||||
@@ -2482,25 +2430,13 @@ I don't use auto-complete at all, so I have set up a hook to automatically disab
|
|||||||
**** elisp-slime-nav
|
**** elisp-slime-nav
|
||||||
#+BEGIN_SRC emacs-lisp
|
#+BEGIN_SRC emacs-lisp
|
||||||
(use-package elisp-slime-nav
|
(use-package elisp-slime-nav
|
||||||
:after emit
|
|
||||||
:commands elisp-slime-nav-mode
|
:commands elisp-slime-nav-mode
|
||||||
:config
|
:config
|
||||||
(progn
|
(diminish 'elisp-slime-nav-mode)
|
||||||
(defvar imalison:check-parens nil)
|
:preface
|
||||||
|
(emit-prefix-selector imalison:elisp-slime-nav
|
||||||
(defun imalison:maybe-check-parens ()
|
elisp-slime-nav-find-elisp-thing-at-point
|
||||||
(if imalison:check-parens
|
elisp-slime-nav-describe-elisp-thing-at-point)
|
||||||
(check-parens)))
|
|
||||||
|
|
||||||
(defun imalison:emacs-lisp-hook ()
|
|
||||||
(elisp-slime-nav-mode t)
|
|
||||||
(add-hook 'write-file-functions 'imalison:maybe-check-parens nil t))
|
|
||||||
|
|
||||||
(add-hook 'emacs-lisp-mode-hook 'imalison:emacs-lisp-hook)
|
|
||||||
(diminish 'elisp-slime-nav-mode)
|
|
||||||
(emit-prefix-selector imalison:elisp-slime-nav
|
|
||||||
elisp-slime-nav-find-elisp-thing-at-point
|
|
||||||
elisp-slime-nav-describe-elisp-thing-at-point))
|
|
||||||
:bind (:map elisp-slime-nav-mode-map
|
:bind (:map elisp-slime-nav-mode-map
|
||||||
("M-." . imalison:elisp-slime-nav)))
|
("M-." . imalison:elisp-slime-nav)))
|
||||||
#+END_SRC
|
#+END_SRC
|
||||||
@@ -2577,7 +2513,6 @@ Reduce indentation for some functions
|
|||||||
:commands (eros-mode)
|
:commands (eros-mode)
|
||||||
:config
|
:config
|
||||||
(progn
|
(progn
|
||||||
(add-hook 'emacs-lisp-mode-hook 'eros-mode)
|
|
||||||
(advice-add 'eval-defun :around 'eros-around-eval-defun)
|
(advice-add 'eval-defun :around 'eros-around-eval-defun)
|
||||||
(advice-add 'eval-last-sexp :around 'eros-around-eval-last-sexp))
|
(advice-add 'eval-last-sexp :around 'eros-around-eval-last-sexp))
|
||||||
:preface
|
:preface
|
||||||
@@ -2598,7 +2533,9 @@ Reduce indentation for some functions
|
|||||||
(save-excursion
|
(save-excursion
|
||||||
(end-of-defun)
|
(end-of-defun)
|
||||||
(point))))
|
(point))))
|
||||||
result))))
|
result))
|
||||||
|
|
||||||
|
(add-hook 'emacs-lisp-mode-hook 'eros-mode)))
|
||||||
#+END_SRC
|
#+END_SRC
|
||||||
**** Reevalute defvars when running eval-last-sexp
|
**** Reevalute defvars when running eval-last-sexp
|
||||||
We noflet elisp--preceding-sexp to munge defvars into sexps only for
|
We noflet elisp--preceding-sexp to munge defvars into sexps only for
|
||||||
@@ -2616,10 +2553,27 @@ eval-last-sexp.
|
|||||||
#+END_SRC
|
#+END_SRC
|
||||||
**** Init hook
|
**** Init hook
|
||||||
#+BEGIN_SRC emacs-lisp
|
#+BEGIN_SRC emacs-lisp
|
||||||
|
(defvar imalison:check-parens nil)
|
||||||
|
|
||||||
|
(defun imalison:maybe-check-parens ()
|
||||||
|
(if imalison:check-parens
|
||||||
|
(check-parens)))
|
||||||
|
|
||||||
|
(defun imalison:emacs-lisp-hook ()
|
||||||
|
(when (fboundp 'elisp-slime-nav-mode) (elisp-slime-nav-mode t))
|
||||||
|
(add-hook 'write-file-functions 'imalison:maybe-check-parens nil t))
|
||||||
|
|
||||||
|
(add-hook 'emacs-lisp-mode-hook 'imalison:emacs-lisp-hook)
|
||||||
#+END_SRC
|
#+END_SRC
|
||||||
**** Keybinds
|
**** Keybinds
|
||||||
#+BEGIN_SRC emacs-lisp
|
#+BEGIN_SRC emacs-lisp
|
||||||
|
(emit-compose
|
||||||
|
imalison:copy-eval-last-sexp kill-new prin1-to-string eval-last-sexp)
|
||||||
|
|
||||||
|
(emit-prefix-selector imalison:eval-last-sexp
|
||||||
|
eval-region-or-last-sexp
|
||||||
|
imalison:copy-eval-last-sexp)
|
||||||
|
|
||||||
(define-key lisp-mode-shared-map (kbd "C-c C-c") 'eval-defun)
|
(define-key lisp-mode-shared-map (kbd "C-c C-c") 'eval-defun)
|
||||||
(define-key lisp-mode-shared-map (kbd "C-x C-e") 'imalison:eval-last-sexp)
|
(define-key lisp-mode-shared-map (kbd "C-x C-e") 'imalison:eval-last-sexp)
|
||||||
(unbind-key "C-j" lisp-interaction-mode-map)
|
(unbind-key "C-j" lisp-interaction-mode-map)
|
||||||
@@ -2648,7 +2602,7 @@ eval-last-sexp.
|
|||||||
(setq nix-indent-function 'nix-indent-line)))
|
(setq nix-indent-function 'nix-indent-line)))
|
||||||
|
|
||||||
(use-package lsp-nix
|
(use-package lsp-nix
|
||||||
:straight nil
|
:ensure nil
|
||||||
:after (lsp-mode)
|
:after (lsp-mode)
|
||||||
:config
|
:config
|
||||||
(progn
|
(progn
|
||||||
@@ -2720,6 +2674,13 @@ The following is taken from [[https://github.com/syl20bnr/spacemacs/blob/a650877
|
|||||||
cider-preferred-build-tool "boot")
|
cider-preferred-build-tool "boot")
|
||||||
(add-hook 'clojure-mode-hook 'cider-mode)))
|
(add-hook 'clojure-mode-hook 'cider-mode)))
|
||||||
#+END_SRC
|
#+END_SRC
|
||||||
|
**** clj-refactor
|
||||||
|
#+BEGIN_SRC emacs-lisp
|
||||||
|
;;@WORKAROUND clj-refactor dependency inflections Version metadata
|
||||||
|
(use-package inflections :ensure (:depth nil :version elpaca-latest-tag :version-regexp "[[:digit:]]\\.[[:digit:]]"))
|
||||||
|
(use-package clj-refactor
|
||||||
|
:commands clj-refactor-mode)
|
||||||
|
#+END_SRC
|
||||||
*** scala
|
*** scala
|
||||||
#+BEGIN_SRC emacs-lisp
|
#+BEGIN_SRC emacs-lisp
|
||||||
(use-package scala-mode
|
(use-package scala-mode
|
||||||
@@ -2882,10 +2843,9 @@ The following is taken from [[https://github.com/syl20bnr/spacemacs/blob/a650877
|
|||||||
|
|
||||||
(use-package purty
|
(use-package purty
|
||||||
:commands purty-on-save-mode
|
:commands purty-on-save-mode
|
||||||
:straight (purty :repo "joneshf/purty"
|
:ensure (purty :repo "joneshf/purty"
|
||||||
:type git
|
:host gitlab
|
||||||
:host gitlab
|
:files ("purty.el")))
|
||||||
:files ("purty.el")))
|
|
||||||
|
|
||||||
(use-package psc-ide
|
(use-package psc-ide
|
||||||
:after purescript-mode
|
:after purescript-mode
|
||||||
@@ -2923,7 +2883,7 @@ The following is taken from [[https://github.com/syl20bnr/spacemacs/blob/a650877
|
|||||||
#+END_SRC
|
#+END_SRC
|
||||||
*** C/C++
|
*** C/C++
|
||||||
#+BEGIN_SRC emacs-lisp
|
#+BEGIN_SRC emacs-lisp
|
||||||
(use-package cc-mode :ensure nil)
|
(use-package cc-mode :ensure nil :defer t)
|
||||||
#+END_SRC
|
#+END_SRC
|
||||||
*** C--
|
*** C--
|
||||||
#+BEGIN_SRC emacs-lisp
|
#+BEGIN_SRC emacs-lisp
|
||||||
@@ -3016,7 +2976,7 @@ My org-mode configuration now lives in its own file org-config.org.
|
|||||||
*** TeX
|
*** TeX
|
||||||
#+BEGIN_SRC emacs-lisp
|
#+BEGIN_SRC emacs-lisp
|
||||||
(use-package tex
|
(use-package tex
|
||||||
:straight (auctex :host github :repo "raxod502/auctex"
|
:ensure (auctex :host github :repo "raxod502/auctex"
|
||||||
:branch "fork/1"
|
:branch "fork/1"
|
||||||
:files (:defaults (:exclude "doc/*.texi")))
|
:files (:defaults (:exclude "doc/*.texi")))
|
||||||
:commands TeX-mode
|
:commands TeX-mode
|
||||||
@@ -3041,7 +3001,7 @@ My org-mode configuration now lives in its own file org-config.org.
|
|||||||
**** latex
|
**** latex
|
||||||
#+BEGIN_SRC emacs-lisp
|
#+BEGIN_SRC emacs-lisp
|
||||||
(use-package latex
|
(use-package latex
|
||||||
:straight auctex
|
:ensure nil
|
||||||
:after tex
|
:after tex
|
||||||
:config
|
:config
|
||||||
(progn
|
(progn
|
||||||
@@ -3128,10 +3088,9 @@ My org-mode configuration now lives in its own file org-config.org.
|
|||||||
** magit
|
** magit
|
||||||
#+BEGIN_SRC emacs-lisp
|
#+BEGIN_SRC emacs-lisp
|
||||||
(use-package magit
|
(use-package magit
|
||||||
:after emit
|
|
||||||
:commands magit-status
|
:commands magit-status
|
||||||
:bind (("C-x g" . imalison:magit-status))
|
:bind (("C-x g" . imalison:magit-status))
|
||||||
:config
|
:preface
|
||||||
(progn
|
(progn
|
||||||
(emit-let-around imalison:magit-status-traditional
|
(emit-let-around imalison:magit-status-traditional
|
||||||
magit-status
|
magit-status
|
||||||
@@ -3142,7 +3101,9 @@ My org-mode configuration now lives in its own file org-config.org.
|
|||||||
imalison:magit-status-traditional)
|
imalison:magit-status-traditional)
|
||||||
(defun imalison:after-magit-visit-file (&rest args)
|
(defun imalison:after-magit-visit-file (&rest args)
|
||||||
(when (derived-mode-p 'org-mode)
|
(when (derived-mode-p 'org-mode)
|
||||||
(org-show-context 'magit-goto)))
|
(org-show-context 'magit-goto))))
|
||||||
|
:config
|
||||||
|
(progn
|
||||||
(when frame-mode
|
(when frame-mode
|
||||||
(setq magit-commit-show-diff t))
|
(setq magit-commit-show-diff t))
|
||||||
(unbind-key "C-j" magit-status-mode-map)
|
(unbind-key "C-j" magit-status-mode-map)
|
||||||
@@ -3186,6 +3147,21 @@ My org-mode configuration now lives in its own file org-config.org.
|
|||||||
:disabled t
|
:disabled t
|
||||||
:after magit)
|
:after magit)
|
||||||
#+end_src
|
#+end_src
|
||||||
|
** vc
|
||||||
|
#+begin_src emacs-lisp
|
||||||
|
(use-package vc
|
||||||
|
:ensure nil
|
||||||
|
:config
|
||||||
|
(progn
|
||||||
|
(defun vc-find-revision-of-file (revision)
|
||||||
|
(interactive
|
||||||
|
(list (vc-read-revision
|
||||||
|
"Revision to visit: "
|
||||||
|
(list (imalison:join-paths (magit-toplevel) (car (magit-list-files)))))))
|
||||||
|
(let* ((file (completing-read "Select file to visit: " (magit-revision-files revision)))
|
||||||
|
(full-file (imalison:join-paths (magit-toplevel) file)))
|
||||||
|
(switch-to-buffer (vc-find-revision full-file revision))))))
|
||||||
|
#+end_src
|
||||||
** git-link
|
** git-link
|
||||||
#+BEGIN_SRC emacs-lisp
|
#+BEGIN_SRC emacs-lisp
|
||||||
(use-package git-link
|
(use-package git-link
|
||||||
@@ -3310,6 +3286,14 @@ modeline and with excessive http requests to github.
|
|||||||
gist-unstar gist-list-starred gist-fork))
|
gist-unstar gist-list-starred gist-fork))
|
||||||
#+END_SRC
|
#+END_SRC
|
||||||
* Programming
|
* Programming
|
||||||
|
** emr
|
||||||
|
emr (emacs refactor) provides support for refactoring in many programming languages
|
||||||
|
#+BEGIN_SRC emacs-lisp
|
||||||
|
(use-package emr
|
||||||
|
:bind (:map prog-mode-map
|
||||||
|
("M-RET" . emr-show-refactor-menu))
|
||||||
|
:config (emr-initialize))
|
||||||
|
#+END_SRC
|
||||||
** semantic
|
** semantic
|
||||||
#+BEGIN_SRC emacs-lisp
|
#+BEGIN_SRC emacs-lisp
|
||||||
(use-package semantic
|
(use-package semantic
|
||||||
@@ -3375,8 +3359,8 @@ in term-mode. This makes term-mode 1000% more useful
|
|||||||
(especially having M-x and C-y available).
|
(especially having M-x and C-y available).
|
||||||
#+BEGIN_SRC emacs-lisp
|
#+BEGIN_SRC emacs-lisp
|
||||||
(use-package term
|
(use-package term
|
||||||
:demand t
|
|
||||||
:ensure nil
|
:ensure nil
|
||||||
|
:demand t
|
||||||
:preface
|
:preface
|
||||||
(progn
|
(progn
|
||||||
(defun imalison:avy-term (arg)
|
(defun imalison:avy-term (arg)
|
||||||
@@ -3441,7 +3425,6 @@ in term-mode. This makes term-mode 1000% more useful
|
|||||||
#+BEGIN_SRC emacs-lisp
|
#+BEGIN_SRC emacs-lisp
|
||||||
(use-package term-projectile
|
(use-package term-projectile
|
||||||
:bind ("C-c 7" . imalison:term-hydra-global/body)
|
:bind ("C-c 7" . imalison:term-hydra-global/body)
|
||||||
:after emit
|
|
||||||
:commands
|
:commands
|
||||||
(term-projectile-backward
|
(term-projectile-backward
|
||||||
term-projectile-create-new
|
term-projectile-create-new
|
||||||
@@ -3454,8 +3437,8 @@ in term-mode. This makes term-mode 1000% more useful
|
|||||||
(progn
|
(progn
|
||||||
(use-package term-manager-eat
|
(use-package term-manager-eat
|
||||||
:demand t
|
:demand t
|
||||||
:straight
|
:ensure
|
||||||
(term-manager-eat :type git :files ("term-manager-eat.el")
|
(term-manager-eat :files ("term-manager-eat.el")
|
||||||
:host github :repo "colonelpanic8/term-manager"))
|
:host github :repo "colonelpanic8/term-manager"))
|
||||||
(setq term-projectile-term-manager (term-projectile :build-term 'term-manager-eat-build-term))
|
(setq term-projectile-term-manager (term-projectile :build-term 'term-manager-eat-build-term))
|
||||||
(emit-prefix-selector imalison:term
|
(emit-prefix-selector imalison:term
|
||||||
@@ -3608,13 +3591,14 @@ I think that shell-history is causing projectile to be very slow so I have disab
|
|||||||
** iedit
|
** iedit
|
||||||
I don't use iedit directly, but it is used by [[*emr][emr]] and I need to disable ~iedit-toggle-key-default~ or else a buffer pops up complaing that the key has been bound to something else
|
I don't use iedit directly, but it is used by [[*emr][emr]] and I need to disable ~iedit-toggle-key-default~ or else a buffer pops up complaing that the key has been bound to something else
|
||||||
#+BEGIN_SRC emacs-lisp
|
#+BEGIN_SRC emacs-lisp
|
||||||
(use-package iedit
|
;;@WORKAROUND iedit has oddball version scheme. Report upstream bug.
|
||||||
|
(use-package iedit :ensure (:depth nil :version (lambda (_) "0.99"))
|
||||||
:defer t)
|
:defer t)
|
||||||
#+END_SRC
|
#+END_SRC
|
||||||
** tramp
|
** tramp
|
||||||
#+BEGIN_SRC emacs-lisp
|
#+BEGIN_SRC emacs-lisp
|
||||||
(use-package tramp
|
(use-package tramp
|
||||||
:straight nil
|
:ensure nil
|
||||||
:commands tramp
|
:commands tramp
|
||||||
:config
|
:config
|
||||||
(setq tramp-default-method "scp"))
|
(setq tramp-default-method "scp"))
|
||||||
@@ -3622,6 +3606,7 @@ I don't use iedit directly, but it is used by [[*emr][emr]] and I need to disabl
|
|||||||
** narrow-indirect
|
** narrow-indirect
|
||||||
#+BEGIN_SRC emacs-lisp
|
#+BEGIN_SRC emacs-lisp
|
||||||
(use-package narrow-indirect
|
(use-package narrow-indirect
|
||||||
|
:disabled t ;;@FIX where is it hosted? locally? add :ensure nil + use-package :load-path keyword
|
||||||
:ensure nil
|
:ensure nil
|
||||||
:init
|
:init
|
||||||
(progn
|
(progn
|
||||||
@@ -3658,9 +3643,9 @@ I had to disable this mode because something that it does messes with coding set
|
|||||||
(interactive)
|
(interactive)
|
||||||
(setq dtrt-indent-original-indent nil)
|
(setq dtrt-indent-original-indent nil)
|
||||||
(dtrt-indent-adapt)))
|
(dtrt-indent-adapt)))
|
||||||
|
:init (add-hook 'prog-mode-hook 'dtrt-indent-mode)
|
||||||
:config
|
:config
|
||||||
(progn
|
(progn
|
||||||
(add-hook 'prog-mode-hook 'dtrt-indent-mode)
|
|
||||||
(setq dtrt-indent-active-mode-line-info " [⟼]")))
|
(setq dtrt-indent-active-mode-line-info " [⟼]")))
|
||||||
#+END_SRC
|
#+END_SRC
|
||||||
** rainbow-delimiters
|
** rainbow-delimiters
|
||||||
@@ -3680,7 +3665,6 @@ I had to disable this mode because something that it does messes with coding set
|
|||||||
(use-package recentf
|
(use-package recentf
|
||||||
:ensure nil
|
:ensure nil
|
||||||
:demand t
|
:demand t
|
||||||
:after shut-up
|
|
||||||
:config
|
:config
|
||||||
(progn
|
(progn
|
||||||
(setq recentf-max-saved-items 1000
|
(setq recentf-max-saved-items 1000
|
||||||
@@ -3718,7 +3702,7 @@ I have currently disabled key-chord because it may cause typing lag.
|
|||||||
** calc-mode
|
** calc-mode
|
||||||
#+BEGIN_SRC emacs-lisp
|
#+BEGIN_SRC emacs-lisp
|
||||||
(use-package calc-mode
|
(use-package calc-mode
|
||||||
:straight nil
|
:ensure nil
|
||||||
:commands calc
|
:commands calc
|
||||||
:config
|
:config
|
||||||
(progn
|
(progn
|
||||||
@@ -3775,8 +3759,8 @@ Not really sure what this is
|
|||||||
** epg
|
** epg
|
||||||
#+BEGIN_SRC emacs-lisp
|
#+BEGIN_SRC emacs-lisp
|
||||||
(use-package epg
|
(use-package epg
|
||||||
:after shut-up
|
|
||||||
:ensure nil
|
:ensure nil
|
||||||
|
:after shut-up
|
||||||
:config
|
:config
|
||||||
(shut-up
|
(shut-up
|
||||||
(epa-file-enable)))
|
(epa-file-enable)))
|
||||||
@@ -3799,6 +3783,113 @@ Not really sure what this is
|
|||||||
:disabled t ;; fails to load eieio on startup
|
:disabled t ;; fails to load eieio on startup
|
||||||
)
|
)
|
||||||
#+END_SRC
|
#+END_SRC
|
||||||
|
** mu4e
|
||||||
|
#+BEGIN_SRC emacs-lisp
|
||||||
|
;; (eval-when-compile
|
||||||
|
;; (require 's)
|
||||||
|
;; (defvar mu4e-elisp-directory
|
||||||
|
;; (s-trim (shell-command-to-string "mu4e_directory"))))
|
||||||
|
(use-package mu4e
|
||||||
|
:disabled t
|
||||||
|
:load-path mu4e-elisp-directory
|
||||||
|
:ensure nil
|
||||||
|
:commands (mu4e mu4e-view-message-with-msgid mu4e-update-index email)
|
||||||
|
:bind ("C-c 0" . email)
|
||||||
|
:config
|
||||||
|
(progn
|
||||||
|
(defun email (&optional arg)
|
||||||
|
(interactive "P")
|
||||||
|
(if (string-equal (persp-name persp-curr) "email")
|
||||||
|
(progn (delete-other-windows) (mu4e))
|
||||||
|
(progn
|
||||||
|
(persp-switch "email")
|
||||||
|
(when (or (not (mu4e-running-p)) arg)
|
||||||
|
(delete-other-windows) (mu4e)))))
|
||||||
|
;; enable inline images
|
||||||
|
(setq mu4e-view-show-images t)
|
||||||
|
;; show images
|
||||||
|
(setq mu4e-show-images t)
|
||||||
|
;; Try to display html as text
|
||||||
|
(setq mu4e-view-prefer-html nil)
|
||||||
|
|
||||||
|
(setq mu4e-html2text-command "html2text -width 80 -nobs -utf8")
|
||||||
|
|
||||||
|
;; use imagemagick, if available
|
||||||
|
(when (fboundp 'imagemagick-register-types)
|
||||||
|
(imagemagick-register-types))
|
||||||
|
(setq mail-user-agent 'mu4e-user-agent)
|
||||||
|
(require 'org-mu4e)
|
||||||
|
(setq mu4e-compose-complete-only-after nil)
|
||||||
|
(setq mu4e-maildir "~/Mail")
|
||||||
|
|
||||||
|
(setq mu4e-drafts-folder "/[Gmail].Drafts")
|
||||||
|
(setq mu4e-sent-folder "/[Gmail].Sent Mail")
|
||||||
|
(setq mu4e-trash-folder "/[Gmail].Trash")
|
||||||
|
|
||||||
|
(setq mu4e-sent-messages-behavior 'delete)
|
||||||
|
(setq mu4e-headers-skip-duplicates t)
|
||||||
|
(setq mu4e-update-interval (* 60 20))
|
||||||
|
(setq message-kill-buffer-on-exit t)
|
||||||
|
(setq mail-user-agent 'mu4e-user-agent) ;; make mu4e the default mail client
|
||||||
|
|
||||||
|
;; don't save message to Sent Messages, Gmail/IMAP takes care of this
|
||||||
|
(setq mu4e-sent-messages-behavior 'delete)
|
||||||
|
|
||||||
|
;; allow for updating mail using 'U' in the main view:
|
||||||
|
(setq mu4e-get-mail-command "timeout 60 offlineimap")
|
||||||
|
|
||||||
|
(add-hook 'mu4e-compose-mode-hook
|
||||||
|
(defun my-do-compose-stuff () (flyspell-mode)))
|
||||||
|
|
||||||
|
(add-to-list 'mu4e-headers-actions '("view in browser" . mu4e-action-view-in-browser))
|
||||||
|
(add-to-list 'mu4e-view-actions '("view in browser" . mu4e-action-view-in-browser))
|
||||||
|
|
||||||
|
(defun mu4e-view (msg headersbuf)
|
||||||
|
"Display the message MSG in a new buffer, and keep in sync with HDRSBUF.
|
||||||
|
'In sync' here means that moving to the next/previous message in
|
||||||
|
the the message view affects HDRSBUF, as does marking etc.
|
||||||
|
|
||||||
|
As a side-effect, a message that is being viewed loses its 'unread'
|
||||||
|
marking if it still had that."
|
||||||
|
(let* ((embedded ;; is it as an embedded msg (ie. message/rfc822 att)?
|
||||||
|
(when (gethash (mu4e-message-field msg :path)
|
||||||
|
mu4e~path-parent-docid-map) t))
|
||||||
|
(buf
|
||||||
|
(if embedded
|
||||||
|
(mu4e~view-embedded-winbuf)
|
||||||
|
(get-buffer-create mu4e~view-buffer-name))))
|
||||||
|
;; note: mu4e~view-mark-as-read will pseudo-recursively call mu4e-view again
|
||||||
|
;; by triggering mu4e~view again as it marks the message as read
|
||||||
|
(with-current-buffer buf
|
||||||
|
(switch-to-buffer buf)
|
||||||
|
(setq mu4e~view-msg msg)
|
||||||
|
;;(or embedded (not (mu4e~view-mark-as-read msg)))
|
||||||
|
(when (or (mu4e~view-mark-as-read msg) t)
|
||||||
|
(let ((inhibit-read-only t))
|
||||||
|
(erase-buffer)
|
||||||
|
(mu4e~delete-all-overlays)
|
||||||
|
(insert (mu4e-view-message-text msg))
|
||||||
|
(goto-char (point-min))
|
||||||
|
(mu4e~fontify-cited)
|
||||||
|
(mu4e~fontify-signature)
|
||||||
|
(mu4e~view-make-urls-clickable)
|
||||||
|
(mu4e~view-show-images-maybe msg)
|
||||||
|
(setq
|
||||||
|
mu4e~view-buffer buf
|
||||||
|
mu4e~view-headers-buffer headersbuf)
|
||||||
|
(when embedded (local-set-key "q" 'kill-buffer-and-window))
|
||||||
|
(mu4e-view-mode))))))
|
||||||
|
|
||||||
|
(require 'smtpmail)
|
||||||
|
|
||||||
|
;; alternatively, for emacs-24 you can use:
|
||||||
|
(setq message-send-mail-function 'smtpmail-send-it
|
||||||
|
smtpmail-stream-type 'starttls
|
||||||
|
smtpmail-default-smtp-server "smtp.gmail.com"
|
||||||
|
smtpmail-smtp-server "smtp.gmail.com"
|
||||||
|
smtpmail-smtp-service 587)))
|
||||||
|
|
||||||
|
#+END_SRC
|
||||||
** gmail-message-mode
|
** gmail-message-mode
|
||||||
This is useful with server mode when editing gmail messages. I think that it is not currently working, or it may need to be manually enabled.
|
This is useful with server mode when editing gmail messages. I think that it is not currently working, or it may need to be manually enabled.
|
||||||
#+BEGIN_SRC emacs-lisp
|
#+BEGIN_SRC emacs-lisp
|
||||||
@@ -3833,6 +3924,57 @@ This is useful with server mode when editing gmail messages. I think that it is
|
|||||||
:notifier 'imalison:windows-toast-notify)
|
:notifier 'imalison:windows-toast-notify)
|
||||||
(setq alert-default-style 'windows-toast))))
|
(setq alert-default-style 'windows-toast))))
|
||||||
#+END_SRC
|
#+END_SRC
|
||||||
|
** sauron
|
||||||
|
#+BEGIN_SRC emacs-lisp
|
||||||
|
(use-package sauron
|
||||||
|
:disabled t
|
||||||
|
:defer 5
|
||||||
|
:commands (sauron-start sauron-start-hidden)
|
||||||
|
:init
|
||||||
|
(progn
|
||||||
|
(when (eq system-type 'darwin)
|
||||||
|
(setq sauron-modules '(sauron-erc sauron-org sauron-notifications
|
||||||
|
sauron-twittering sauron-jabber sauron-identica))
|
||||||
|
(defun sauron-dbus-start ()
|
||||||
|
nil)
|
||||||
|
(makunbound 'dbus-path-emacs)))
|
||||||
|
:config
|
||||||
|
(progn
|
||||||
|
(sauron-start-hidden)
|
||||||
|
;; This should really check (featurep 'dbus) but for some reason
|
||||||
|
;; this is always true even if support is not there.
|
||||||
|
(setq sauron-prio-sauron-started 2)
|
||||||
|
(setq sauron-min-priority 3)
|
||||||
|
;; (setq sauron-dbus-cookie t) ;; linux only?
|
||||||
|
(setq sauron-separate-frame nil)
|
||||||
|
(setq sauron-nick-insensitivity 1)
|
||||||
|
(defun sauron:jabber-notify (origin priority message &optional properties)
|
||||||
|
(funcall notify-function "gtalk" message))
|
||||||
|
(defun sauron:erc-notify (origin priority message &optional properties)
|
||||||
|
(let ((event (plist-get properties :event)))
|
||||||
|
(funcall notify-function "IRC" message)))
|
||||||
|
(defun sauron:mu4e-notify (origin priority message &optional properties)
|
||||||
|
nil)
|
||||||
|
(defun sauron:dbus-notify (origin priority message &optional properties)
|
||||||
|
(funcall notify-function "GMail" message))
|
||||||
|
(defun sauron:dispatch-notify (origin priority message &optional properties)
|
||||||
|
(let ((handler (cond ((string= origin "erc") 'sauron:erc-notify)
|
||||||
|
((string= origin "jabber") 'sauron:jabber-notify)
|
||||||
|
((string= origin "mu4e") 'sauron:mu4e-notify)
|
||||||
|
((string= origin "dbus") 'sauron:dbus-notify)
|
||||||
|
(t (lambda (&rest r) nil)))))
|
||||||
|
(funcall handler origin priority message properties)))
|
||||||
|
;; Prefering alert.el for now ;; (add-hook 'sauron-event-added-functions 'sauron:dispatch-notify)
|
||||||
|
(sauron-start-hidden)
|
||||||
|
(add-hook 'sauron-event-added-functions 'sauron-alert-el-adapter)))
|
||||||
|
|
||||||
|
#+END_SRC
|
||||||
|
** screenshot
|
||||||
|
#+BEGIN_SRC emacs-lisp
|
||||||
|
(use-package screenshot
|
||||||
|
:disabled t ;;@FIX :ensure (:host github :repo "tecosaur/screenshot")?
|
||||||
|
:commands screenshot)
|
||||||
|
#+END_SRC
|
||||||
** libmpdee
|
** libmpdee
|
||||||
#+BEGIN_SRC emacs-lisp
|
#+BEGIN_SRC emacs-lisp
|
||||||
(use-package libmpdee
|
(use-package libmpdee
|
||||||
@@ -3963,7 +4105,7 @@ This also adds syntax highlighting for gradle
|
|||||||
** jsx-mode
|
** jsx-mode
|
||||||
#+BEGIN_SRC emacs-lisp
|
#+BEGIN_SRC emacs-lisp
|
||||||
(use-package jsx-mode
|
(use-package jsx-mode
|
||||||
:ensure nil
|
:disabled t ;;@FIX Add :ensure with package recipe. Could not find "jsx-mode" hosted anywhere
|
||||||
:defer t)
|
:defer t)
|
||||||
#+END_SRC
|
#+END_SRC
|
||||||
** css
|
** css
|
||||||
@@ -3973,6 +4115,13 @@ This also adds syntax highlighting for gradle
|
|||||||
:mode (("\\.css\\'" . css-mode)
|
:mode (("\\.css\\'" . css-mode)
|
||||||
("\\.rasi\\'" . css-mode)))
|
("\\.rasi\\'" . css-mode)))
|
||||||
#+END_SRC
|
#+END_SRC
|
||||||
|
** sgml-mode
|
||||||
|
#+BEGIN_SRC emacs-lisp
|
||||||
|
(use-package sgml-mode
|
||||||
|
:ensure nil
|
||||||
|
;; :bind ("C-c b" . web-beautify-html) TODO: mode specific, change binding
|
||||||
|
:commands sgml-mode)
|
||||||
|
#+END_SRC
|
||||||
** evil
|
** evil
|
||||||
#+BEGIN_SRC emacs-lisp
|
#+BEGIN_SRC emacs-lisp
|
||||||
(use-package evil
|
(use-package evil
|
||||||
@@ -4001,18 +4150,15 @@ Ensure all themes that I use are installed:
|
|||||||
(progn
|
(progn
|
||||||
(setq solarized-high-contrast-mode-line t)))
|
(setq solarized-high-contrast-mode-line t)))
|
||||||
|
|
||||||
(defun elpaca-function (pkg)
|
|
||||||
(eval `(elpaca ,pkg)))
|
|
||||||
|
|
||||||
(defvar-setq packages-appearance
|
(defvar-setq packages-appearance
|
||||||
'(monokai-theme zenburn-theme base16-theme molokai-theme moe-theme
|
'(monokai-theme zenburn-theme base16-theme molokai-theme moe-theme
|
||||||
tango-2-theme gotham-theme sublime-themes rainbow-delimiters
|
tango-2-theme gotham-theme sublime-themes
|
||||||
waher-theme ample-theme material-theme zerodark-theme
|
waher-theme ample-theme material-theme zerodark-theme
|
||||||
color-theme-modern leuven-theme spacemacs-theme gruvbox-theme
|
color-theme-modern leuven-theme spacemacs-theme gruvbox-theme
|
||||||
forest-blue-theme flatland-theme afternoon-theme
|
forest-blue-theme flatland-theme afternoon-theme
|
||||||
cyberpunk-theme dracula-theme))
|
cyberpunk-theme dracula-theme))
|
||||||
|
|
||||||
(mapcar 'elpaca-function packages-appearance)
|
(mapcar #'elpaca-try packages-appearance)
|
||||||
|
|
||||||
(use-package doom-themes
|
(use-package doom-themes
|
||||||
:defer t)
|
:defer t)
|
||||||
@@ -4123,7 +4269,7 @@ load-theme hook (See the heading below).
|
|||||||
(advice-add 'load-theme :after #'imalison:after-load-theme)
|
(advice-add 'load-theme :after #'imalison:after-load-theme)
|
||||||
#+END_SRC
|
#+END_SRC
|
||||||
** Set Font
|
** Set Font
|
||||||
#+BEGIN_SRC emacs-lisp
|
#+BEGIN_SRC emacs-lisp :tangle no
|
||||||
(add-to-list 'default-frame-alist
|
(add-to-list 'default-frame-alist
|
||||||
'(font . "JetBrainsMono Nerd Font-10:weight=medium"))
|
'(font . "JetBrainsMono Nerd Font-10:weight=medium"))
|
||||||
#+END_SRC
|
#+END_SRC
|
||||||
@@ -4167,14 +4313,12 @@ load-theme hook (See the heading below).
|
|||||||
(unless imalison:appearance-setup-done
|
(unless imalison:appearance-setup-done
|
||||||
(unless (member imalison:dark-theme custom-enabled-themes)
|
(unless (member imalison:dark-theme custom-enabled-themes)
|
||||||
(load-theme imalison:dark-theme t))
|
(load-theme imalison:dark-theme t))
|
||||||
(doom-modeline-mode +1)
|
|
||||||
(apply 'imalison:appearance args)
|
(apply 'imalison:appearance args)
|
||||||
(message "running appearance")
|
(message "running appearance")
|
||||||
|
(doom-modeline-mode +1)
|
||||||
(setq imalison:default-font-size-pt (face-attribute 'default :height))
|
(setq imalison:default-font-size-pt (face-attribute 'default :height))
|
||||||
(setq imalison:appearance-setup-done t)))
|
(setq imalison:appearance-setup-done t)))
|
||||||
|
|
||||||
(add-hook 'elpaca-after-init-hook
|
|
||||||
(lambda () (add-hook 'after-make-frame-functions 'imalison:appearance-setup-hook)))
|
|
||||||
(add-hook 'elpaca-after-init-hook 'imalison:appearance-setup-hook)
|
(add-hook 'elpaca-after-init-hook 'imalison:appearance-setup-hook)
|
||||||
#+END_SRC
|
#+END_SRC
|
||||||
* Post Init Custom
|
* Post Init Custom
|
||||||
|
|||||||
39
dotfiles/emacs.d/elpaca-installer.el
Normal file
39
dotfiles/emacs.d/elpaca-installer.el
Normal file
@@ -0,0 +1,39 @@
|
|||||||
|
;; Elpaca Installer -*- lexical-binding: t; -*-
|
||||||
|
(defvar elpaca-installer-version 0.7)
|
||||||
|
(defvar elpaca-directory (expand-file-name "elpaca/" user-emacs-directory))
|
||||||
|
(defvar elpaca-builds-directory (expand-file-name "builds/" elpaca-directory))
|
||||||
|
(defvar elpaca-repos-directory (expand-file-name "repos/" elpaca-directory))
|
||||||
|
(defvar elpaca-order '(elpaca :repo "https://github.com/progfolio/elpaca.git"
|
||||||
|
:ref nil :depth 1
|
||||||
|
:files (:defaults "elpaca-test.el" (:exclude "extensions"))
|
||||||
|
:build (:not elpaca--activate-package)))
|
||||||
|
(let* ((repo (expand-file-name "elpaca/" elpaca-repos-directory))
|
||||||
|
(build (expand-file-name "elpaca/" elpaca-builds-directory))
|
||||||
|
(order (cdr elpaca-order))
|
||||||
|
(default-directory repo))
|
||||||
|
(add-to-list 'load-path (if (file-exists-p build) build repo))
|
||||||
|
(unless (file-exists-p repo)
|
||||||
|
(make-directory repo t)
|
||||||
|
(when (< emacs-major-version 28) (require 'subr-x))
|
||||||
|
(condition-case-unless-debug err
|
||||||
|
(if-let ((buffer (pop-to-buffer-same-window "*elpaca-bootstrap*"))
|
||||||
|
((zerop (apply #'call-process `("git" nil ,buffer t "clone"
|
||||||
|
,@(when-let ((depth (plist-get order :depth)))
|
||||||
|
(list (format "--depth=%d" depth) "--no-single-branch"))
|
||||||
|
,(plist-get order :repo) ,repo))))
|
||||||
|
((zerop (call-process "git" nil buffer t "checkout"
|
||||||
|
(or (plist-get order :ref) "--"))))
|
||||||
|
(emacs (concat invocation-directory invocation-name))
|
||||||
|
((zerop (call-process emacs nil buffer nil "-Q" "-L" "." "--batch"
|
||||||
|
"--eval" "(byte-recompile-directory \".\" 0 'force)")))
|
||||||
|
((require 'elpaca))
|
||||||
|
((elpaca-generate-autoloads "elpaca" repo)))
|
||||||
|
(progn (message "%s" (buffer-string)) (kill-buffer buffer))
|
||||||
|
(error "%s" (with-current-buffer buffer (buffer-string))))
|
||||||
|
((error) (warn "%s" err) (delete-directory repo 'recursive))))
|
||||||
|
(unless (require 'elpaca-autoloads nil t)
|
||||||
|
(require 'elpaca)
|
||||||
|
(elpaca-generate-autoloads "elpaca" repo)
|
||||||
|
(load "./elpaca-autoloads")))
|
||||||
|
(add-hook 'after-init-hook #'elpaca-process-queues)
|
||||||
|
(elpaca `(,@elpaca-order))
|
||||||
@@ -1,37 +1,20 @@
|
|||||||
;; -*- no-byte-compile: t -*-
|
;; -*- no-byte-compile: t; lexical-binding: t; -*-
|
||||||
|
|
||||||
(setq native-comp-deferred-compilation-deny-list '("magit"))
|
(setq native-comp-deferred-compilation-deny-list '("magit"))
|
||||||
(setq native-comp-always-compile t)
|
(setq native-comp-always-compile t)
|
||||||
(setq load-no-native t)
|
(setq load-no-native t)
|
||||||
(setq no-native-compile t)
|
(setq no-native-compile t)
|
||||||
(setq warning-minimum-level :emergency)
|
|
||||||
|
|
||||||
(setq package-enable-at-startup nil
|
|
||||||
straight-use-package-by-default t
|
|
||||||
straight-vc-git-default-protocol 'ssh)
|
|
||||||
|
|
||||||
(require 'use-package)
|
|
||||||
(setq use-package-enable-imenu-support t)
|
|
||||||
(setq use-package-always-ensure t)
|
|
||||||
|
|
||||||
(defvar imalison:do-benchmark nil)
|
(defvar imalison:do-benchmark nil)
|
||||||
|
|
||||||
(defun emacs-directory-filepath (filename)
|
(defun emacs-directory-filepath (filename)
|
||||||
(concat (file-name-directory load-file-name) filename))
|
(concat (file-name-directory load-file-name) filename))
|
||||||
|
|
||||||
(load (emacs-directory-filepath "elpaca.el"))
|
(load-file (expand-file-name "elpaca-installer.el" user-emacs-directory))
|
||||||
|
(elpaca elpaca-use-package (elpaca-use-package-mode))
|
||||||
|
(setq use-package-enable-imenu-support t)
|
||||||
(setq use-package-always-ensure t)
|
(setq use-package-always-ensure t)
|
||||||
|
|
||||||
(let ((bench-file (concat (file-name-directory user-init-file) "benchmark.el")))
|
|
||||||
(when (file-exists-p bench-file) (load bench-file)))
|
|
||||||
|
|
||||||
(use-package benchmark-init
|
|
||||||
:if imalison:do-benchmark
|
|
||||||
:demand t
|
|
||||||
:config
|
|
||||||
(setq max-specpdl-size 99999999))
|
|
||||||
|
|
||||||
(defvar imalison:kat-mode nil)
|
(defvar imalison:kat-mode nil)
|
||||||
(setq custom-file "~/.emacs.d/custom-before.el")
|
(setq custom-file "~/.emacs.d/custom-before.el")
|
||||||
(setq load-prefer-newer t)
|
(setq load-prefer-newer t)
|
||||||
@@ -42,29 +25,25 @@
|
|||||||
(setq mac-option-modifier 'meta)
|
(setq mac-option-modifier 'meta)
|
||||||
(setq mac-command-modifier 'super))
|
(setq mac-command-modifier 'super))
|
||||||
|
|
||||||
(use-package transient
|
;;The packages in this section are used to as utilities in the rest of this init file.
|
||||||
:demand t)
|
;;Ensure they are installed/activated first.
|
||||||
|
|
||||||
;; See https://github.com/magit/magit/discussions/4997 . Without this magit is broken.
|
|
||||||
(use-package magit
|
|
||||||
:demand t)
|
|
||||||
|
|
||||||
;; This seems to fix issues with helm not explicitly declaring its dependency on async
|
|
||||||
(use-package async :demand t)
|
|
||||||
|
|
||||||
(use-package s :demand t)
|
(use-package s :demand t)
|
||||||
|
|
||||||
;; Without this, org can behave very strangely
|
(use-package dash
|
||||||
(use-package org
|
:demand t
|
||||||
:ensure
|
:config
|
||||||
(org :type git :host github :repo "colonelpanic8/org-mode" :local-repo "org"
|
(progn (dash-enable-font-lock)))
|
||||||
:branch "my-main-2025"
|
|
||||||
:depth full
|
|
||||||
:build (:not autoloads)
|
|
||||||
:files (:defaults "lisp/*.el" ("etc/styles/" "etc/styles/*"))
|
|
||||||
:wait t))
|
|
||||||
|
|
||||||
(use-package dash :demand t)
|
(use-package gh
|
||||||
|
:defer t
|
||||||
|
:ensure (:host github :repo "IvanMalison/gh.el"))
|
||||||
|
|
||||||
|
(use-package shut-up
|
||||||
|
:config
|
||||||
|
(defun imalison:shut-up-around (function &rest args)
|
||||||
|
(shut-up (apply function args))))
|
||||||
|
|
||||||
|
(use-package parse-csv :demand t)
|
||||||
|
|
||||||
(use-package emit
|
(use-package emit
|
||||||
:ensure (emit :type git :host github :repo "colonelpanic8/emit")
|
:ensure (emit :type git :host github :repo "colonelpanic8/emit")
|
||||||
@@ -87,18 +66,29 @@
|
|||||||
eval-region-or-last-sexp
|
eval-region-or-last-sexp
|
||||||
imalison:copy-eval-last-sexp)))
|
imalison:copy-eval-last-sexp)))
|
||||||
|
|
||||||
(use-package s
|
(use-package request :defer t)
|
||||||
:ensure (:inherit t :wait t)
|
|
||||||
:config
|
;; Without this, org can behave very strangely
|
||||||
(when (or (equal (s-trim (shell-command-to-string "whoami")) "kat")
|
(use-package org
|
||||||
|
:ensure
|
||||||
|
(org :type git :host github :repo "colonelpanic8/org-mode" :local-repo "org"
|
||||||
|
:branch "my-main-2025"
|
||||||
|
:depth full
|
||||||
|
:build (:not autoloads)
|
||||||
|
:files (:defaults "lisp/*.el" ("etc/styles/" "etc/styles/*"))
|
||||||
|
:wait t))
|
||||||
|
|
||||||
|
(elpaca-wait)
|
||||||
|
|
||||||
|
(when (or (equal (s-trim (shell-command-to-string "whoami")) "kat")
|
||||||
imalison:kat-mode)
|
imalison:kat-mode)
|
||||||
(let ((debug-on-error t))
|
(let ((debug-on-error t))
|
||||||
(org-babel-load-file
|
(org-babel-load-file
|
||||||
(concat (file-name-directory load-file-name) "kat-mode.org")))))
|
(concat (file-name-directory load-file-name) "kat-mode.org"))))
|
||||||
|
|
||||||
(let ((debug-on-error t))
|
(let ((debug-on-error t))
|
||||||
(org-babel-load-file
|
(org-babel-load-file
|
||||||
(concat (file-name-directory load-file-name) "README.org")))
|
(expand-file-name "README.org" user-emacs-directory)))
|
||||||
|
|
||||||
;; (when imalison:do-benchmark (benchmark-init/deactivate))
|
;; (when imalison:do-benchmark (benchmark-init/deactivate))
|
||||||
|
|
||||||
|
|||||||
@@ -90,7 +90,7 @@ This makes evil-mode play nice with org-fc
|
|||||||
*** javascript
|
*** javascript
|
||||||
#+begin_src emacs-lisp
|
#+begin_src emacs-lisp
|
||||||
(use-package ob-js
|
(use-package ob-js
|
||||||
:straight nil
|
:ensure nil
|
||||||
:after org
|
:after org
|
||||||
:config
|
:config
|
||||||
(progn
|
(progn
|
||||||
|
|||||||
@@ -675,7 +675,7 @@ specific time, they should appear in the agenda at that time!
|
|||||||
*** Templates
|
*** Templates
|
||||||
#+begin_src emacs-lisp :tangle org-config-config.el
|
#+begin_src emacs-lisp :tangle org-config-config.el
|
||||||
(use-package org-capture
|
(use-package org-capture
|
||||||
:straight nil
|
:ensure nil
|
||||||
:config
|
:config
|
||||||
(add-to-list 'org-capture-templates
|
(add-to-list 'org-capture-templates
|
||||||
`("t" "GTD Todo (Linked)" entry (file ,imalison:org-gtd-file)
|
`("t" "GTD Todo (Linked)" entry (file ,imalison:org-gtd-file)
|
||||||
@@ -774,7 +774,7 @@ Note that this does not go into org-config-config.el. This is on purpose
|
|||||||
** Disable yasnippet in org-mode
|
** Disable yasnippet in org-mode
|
||||||
#+BEGIN_SRC emacs-lisp
|
#+BEGIN_SRC emacs-lisp
|
||||||
(use-package org
|
(use-package org
|
||||||
:straight nil
|
:ensure nil
|
||||||
:config
|
:config
|
||||||
(progn
|
(progn
|
||||||
(defun imalison:disable-yas ()
|
(defun imalison:disable-yas ()
|
||||||
@@ -832,7 +832,7 @@ This function replaces the default naming scheme with a call to
|
|||||||
#+BEGIN_SRC emacs-lisp
|
#+BEGIN_SRC emacs-lisp
|
||||||
(use-package ox
|
(use-package ox
|
||||||
:defer t
|
:defer t
|
||||||
:straight nil
|
:ensure nil
|
||||||
:config
|
:config
|
||||||
(defun org-export-get-reference (datum info)
|
(defun org-export-get-reference (datum info)
|
||||||
"Return a unique reference for DATUM, as a string.
|
"Return a unique reference for DATUM, as a string.
|
||||||
@@ -860,7 +860,7 @@ alphanumeric characters only."
|
|||||||
#+BEGIN_SRC emacs-lisp
|
#+BEGIN_SRC emacs-lisp
|
||||||
(use-package ox-html
|
(use-package ox-html
|
||||||
:commands (org-html-export-as-html org-html-export-as-html)
|
:commands (org-html-export-as-html org-html-export-as-html)
|
||||||
:straight nil
|
:ensure nil
|
||||||
:preface
|
:preface
|
||||||
(progn
|
(progn
|
||||||
(defvar imalison:link-svg-html
|
(defvar imalison:link-svg-html
|
||||||
@@ -892,7 +892,7 @@ alphanumeric characters only."
|
|||||||
#+BEGIN_SRC emacs-lisp
|
#+BEGIN_SRC emacs-lisp
|
||||||
(use-package ox-html
|
(use-package ox-html
|
||||||
:defer t
|
:defer t
|
||||||
:straight nil
|
:ensure nil
|
||||||
:config
|
:config
|
||||||
(setq org-html-inline-image-rules
|
(setq org-html-inline-image-rules
|
||||||
'(("file" . "\\.\\(jpeg\\|jpg\\|png\\|gif\\|svg\\)\\(\\?.*?\\)?\\'")
|
'(("file" . "\\.\\(jpeg\\|jpg\\|png\\|gif\\|svg\\)\\(\\?.*?\\)?\\'")
|
||||||
@@ -1101,7 +1101,7 @@ alphanumeric characters only."
|
|||||||
:config
|
:config
|
||||||
(progn
|
(progn
|
||||||
(require 'org-fc-hydra))
|
(require 'org-fc-hydra))
|
||||||
:straight (org-fc :type git :host github :repo "l3kn/org-fc"
|
:ensure (:host github :repo "l3kn/org-fc"
|
||||||
:files ("*.el" "awk" "demo.org")))
|
:files ("*.el" "awk" "demo.org")))
|
||||||
#+end_src
|
#+end_src
|
||||||
** org-ql
|
** org-ql
|
||||||
@@ -1114,9 +1114,8 @@ alphanumeric characters only."
|
|||||||
#+begin_src emacs-lisp
|
#+begin_src emacs-lisp
|
||||||
(use-package org-window-habit
|
(use-package org-window-habit
|
||||||
:demand t
|
:demand t
|
||||||
:straight
|
:ensure
|
||||||
(org-window-habit
|
(:repo "colonelpanic8/org-window-habit"
|
||||||
:repo "colonelpanic8/org-window-habit"
|
|
||||||
:host github
|
:host github
|
||||||
:files ("org-window-habit.el"))
|
:files ("org-window-habit.el"))
|
||||||
:custom
|
:custom
|
||||||
|
|||||||
@@ -19,12 +19,6 @@
|
|||||||
(require 's)
|
(require 's)
|
||||||
(org-babel-tangle-file readme-src)
|
(org-babel-tangle-file readme-src)
|
||||||
|
|
||||||
;; This makes it so that any dependencies specified with :straight, will
|
|
||||||
;; actually just be installed with the default melpa use-package ensure logic.
|
|
||||||
(defalias 'use-package-handler/:straight
|
|
||||||
#'use-package-handler/:ensure)
|
|
||||||
(add-to-list 'use-package-keywords :straight)
|
|
||||||
|
|
||||||
(load-file (concat emacs-dir "org-config.el"))
|
(load-file (concat emacs-dir "org-config.el"))
|
||||||
|
|
||||||
(defun export-target (target)
|
(defun export-target (target)
|
||||||
|
|||||||
Reference in New Issue
Block a user