summaryrefslogtreecommitdiff
path: root/emacs/site-lisp
diff options
context:
space:
mode:
Diffstat (limited to 'emacs/site-lisp')
-rw-r--r--emacs/site-lisp/chinese.el18
-rwxr-xr-xemacs/site-lisp/coding-config.el127
-rw-r--r--emacs/site-lisp/evil-config.el77
-rw-r--r--emacs/site-lisp/exwm-pref.el284
-rw-r--r--emacs/site-lisp/general-text.el32
-rw-r--r--emacs/site-lisp/maze.el64
-rw-r--r--emacs/site-lisp/modeline-config.el63
-rw-r--r--emacs/site-lisp/my-binds.el24
-rw-r--r--emacs/site-lisp/my-funcs.el143
-rwxr-xr-xemacs/site-lisp/single-header.el143
-rw-r--r--emacs/site-lisp/tex-conf.el47
-rwxr-xr-xemacs/site-lisp/tmu-custom-theme.el66
12 files changed, 1088 insertions, 0 deletions
diff --git a/emacs/site-lisp/chinese.el b/emacs/site-lisp/chinese.el
new file mode 100644
index 0000000..4b01594
--- /dev/null
+++ b/emacs/site-lisp/chinese.el
@@ -0,0 +1,18 @@
+;; chinese input stuff
+;; (require 'unicode-fonts)
+;; (unicode-fonts-setup)
+(require 'pyim)
+(require 'pyim-basedict)
+(pyim-basedict-enable)
+;; (require 'pyim-wbdict)
+(setq default-input-method "pyim")
+(setq pyim-default-scheme 'quanpin)
+;; (pyim-wbdict-v98-morphe-enable)
+;; (dolist (charset '(kana han symbol cjk-misc bopomofo))
+;; (set-fontset-font (frame-parameter nil 'font)
+;; charset
+;; (font-spec :family "FangSong" :size 15)))
+;; (setq rime-translate-keybindings
+;; '("C-f" "C-b" "C-n" "C-p" "C-g" "<left>" "<right>" "<up>" "<down>" "<prior>" "<next>" "<delete>"))
+;; (setq rime-share-data-dir "~/.local/share/fcitx5/rime")
+;; (setq rime-show-candidate 'popup)
diff --git a/emacs/site-lisp/coding-config.el b/emacs/site-lisp/coding-config.el
new file mode 100755
index 0000000..9d228f0
--- /dev/null
+++ b/emacs/site-lisp/coding-config.el
@@ -0,0 +1,127 @@
+;;; The config specifically for editing code
+
+(provide 'coding-config)
+
+;; (add-hook 'xref-backend-functions 'gxref-xref-backend)
+
+;; better commenting binds
+(global-set-key (kbd "C-x C-;") 'comment-or-uncomment-region)
+(global-set-key (kbd "C-x ;") 'comment-line)
+(global-set-key (kbd "C-x :") 'comment-set-column) ;never gonna use but whatever
+
+(setq asm-comment-char ?#) ; prefer # over ; for asm comments
+
+;; generate tags for label names in asm files, based on asm files in the current directory
+(add-hook 'asm-mode-hook
+ (lambda ()
+ (add-hook 'after-save-hook
+ (lambda ()
+ (shell-command
+ "find . -iregex '.*\\.[sS]' -exec etags -l none -r '/\\([a-zA-Z0-9\\-_]+\\):/\1/' {} +"))
+ 0 t)))
+
+(use-package lsp-mode)
+
+(use-package lsp-haskell)
+
+(use-package sideline
+ :init
+ (setq sideline-backends-right '()))
+(use-package sideline-flycheck
+ :init
+ (push 'sideline-flycheck sideline-backends-right))
+(use-package sideline-flymake
+ :init
+ (push 'sideline-flymake sideline-backends-right))
+(use-package sideline-lsp
+ :init
+ (push 'sideline-lsp sideline-backends-right))
+
+(use-package flycheck
+ :config
+ ;; flymake stuff to be less annoying
+ ;; (face-spec-set 'flycheck-note '((t :underline nil)))
+ ;; (face-spec-set 'flycheck-info '((t :underline nil)))
+ ;; (face-spec-set 'flycheck-warning '((t :underline nil)))
+ ;; (face-spec-set 'flycheck-error '((t :underline nil)))
+ (add-hook 'prog-mode-hook (lambda () flycheck-mode 1)))
+
+;; Find defs in various ways
+(global-set-key (kbd "M-i") 'imenu)
+(global-set-key (kbd "M-I") 'xref-find-definitions)
+
+(setq imenu-auto-rescan t)
+
+;; make ibuffer play with projectile
+(use-package ibuffer
+ :bind
+ ("C-x C-b" . ibuffer)
+ :hook
+ (ibuffer . (lambda ()
+ (ibuffer-projectile-set-filter-groups)
+ (unless (eq ibuffer-sorting-mode 'alphabetic)
+ (ibuffer-do-sort-by-alphabetic)))))
+
+;; make shells and whatnot slightly better
+(require 'comint)
+(setq comint-scroll-to-bottom-on-input t)
+(setq comint-scroll-to-bottom-on-output t)
+
+;; ediff
+(setq ediff-window-setup-function 'ediff-setup-windows-plain)
+
+;; various folding types and binds
+;;(autoload 'hide-lines "hide-lines" "Hide lines based on a regexp" t)
+;;(global-set-key (kbd "C-c /") 'hide-lines)
+(use-package fold-this
+ :init
+ (define-prefix-command 'fold-map)
+ (global-set-key (kbd "M-F") 'fold-map)
+ (define-keymap :full nil
+ :parent nil
+ :suppress nil
+ :keymap nil
+ :name "fold-map"
+ :prefix 'fold-map
+ (kbd "c") 'fold-this
+ (kbd "e") 'fold-this-unfold-at-point
+ (kbd "t") 'hs-toggle-hiding
+ (kbd "f") 'fold-this-fold-forward
+ (kbd "b") 'fold-this-fold-backward
+ (kbd "l") 'hs-hide-level))
+
+;; global prog stuff that differs from global/text
+(require 'my-funcs)
+(add-hook 'prog-mode-hook (lambda ()
+ (hs-minor-mode 1)
+ (superword-mode 1)
+ (modify-syntax-entry ?_ "w") )
+ (display-fill-column-indicator-mode 1)
+ (add-hook 'before-save-hook
+ (lambda ()
+ (if (not (eq major-mode 'makefile-gmake-mode))
+ (clean-prog-file (current-buffer))))))
+
+;; haskell flavor and tags
+(use-package haskell-mode
+ :custom
+ (haskell-tags-on-save t)
+ (haskell-process-type 'cabal-repl)
+ :hook
+ (haskell-mode . (lambda ()
+ ;; (hindent-mode 1)
+ (interactive-haskell-mode 1))))
+
+(global-set-key (kbd "M-m") 'goto-next-locus)
+(global-set-key (kbd "M-M") 'recompile)
+(setq compilation-always-kill t
+ compilation-scroll-output t)
+;; Allow compilation buffer to be dedicated across frames
+(push '("\\*compilation\\*" . (nil (reusable-frames . t))) display-buffer-alist)
+
+;; better searching
+(require 'counsel)
+(setq counsel-grep-base-command
+ "rg -i -M 120 --no-heading --line-number --color never '%s' %s")
+(global-set-key (kbd "C-s") 'counsel-grep-or-swiper)
+(global-set-key (kbd "C-S-s") 'isearch-forward)
diff --git a/emacs/site-lisp/evil-config.el b/emacs/site-lisp/evil-config.el
new file mode 100644
index 0000000..b019146
--- /dev/null
+++ b/emacs/site-lisp/evil-config.el
@@ -0,0 +1,77 @@
+;;; evil config
+(provide 'evil-config)
+
+(use-package evil
+ :custom
+ (evil-want-keybinding nil)
+ (evil-want-integration t)
+ :init
+ (evil-mode 1))
+(use-package evil-collection
+ :init
+ (evil-collection-init))
+(use-package evil-easymotion
+ :init
+ (evilem-default-keybindings "SPC"))
+(use-package evil-surround
+ :config
+ (global-evil-surround-mode 1))
+(use-package evil-snipe
+ :config
+ (evil-snipe-mode 1)
+ (evil-snipe-override-mode 1)
+ (evil-define-key 'visual evil-snipe-local-mode-map "z" 'evil-snipe-s)
+ (evil-define-key 'visual evil-snipe-local-mode-map "Z" 'evil-snipe-S)
+ :custom
+ (evil-snipe-scope 'buffer))
+(define-key evil-insert-state-map (kbd "C-d") 'delete-char)
+(define-key evil-insert-state-map (kbd "C-e") 'move-end-of-line)
+(define-key evil-insert-state-map (kbd "C-a") 'move-beginning-of-line)
+(define-key evil-normal-state-map (kbd "M-.") 'xref-find-definitions)
+(define-key evil-normal-state-map (kbd "M-Z") 'suspend-frame)
+
+(define-key evil-motion-state-map (kbd "TAB") 'indent-for-tab-command)
+(evil-set-initial-state 'vterm-mode 'emacs)
+
+;;; sasha bindings
+(defun evil-window-split-and-switch ()
+ "Split the window vertically and switch to the new buffer."
+ (interactive)
+ (evil-window-split)
+ (other-window 1))
+
+(defun evil-window-vsplit-and-switch ()
+ "Split the window horizontally and switch to the new buffer."
+ (interactive)
+ (evil-window-vsplit)
+ (other-window 1))
+
+(define-key evil-insert-state-map (kbd "C-t") 'transpose-chars)
+(define-key evil-normal-state-map (kbd "C-t") 'transpose-chars)
+(evil-define-key 'normal global-map (kbd "SPC i") 'imenu)
+(evil-define-key 'normal global-map (kbd "SPC o") 'other-window)
+(evil-define-key 'normal global-map (kbd "SPC q") 'kill-current-buffer)
+(evil-define-key 'normal global-map (kbd "SPC RET") 'vterm)
+(evil-define-key 'normal global-map (kbd "SPC v") 'vterm)
+(evil-define-key 'normal global-map (kbd "SPC !") 'abort-recursive-edit)
+(evil-define-key 'normal global-map (kbd "SPC f f") 'find-file)
+
+(evil-define-key 'normal global-map (kbd "SPC SPC SPC j") 'evil-window-split-and-switch)
+(evil-define-key 'normal global-map (kbd "SPC SPC SPC k") 'evil-window-split-and-switch)
+(evil-define-key 'normal global-map (kbd "SPC SPC SPC h") 'evil-window-vsplit-and-switch)
+(evil-define-key 'normal global-map (kbd "SPC SPC SPC l") 'evil-window-vsplit-and-switch)
+(evil-define-key 'normal global-map (kbd "SPC SPC h") 'evil-window-left)
+(evil-define-key 'normal global-map (kbd "SPC SPC j") 'evil-window-down)
+(evil-define-key 'normal global-map (kbd "SPC SPC k") 'evil-window-up)
+(evil-define-key 'normal global-map (kbd "SPC SPC l") 'evil-window-right)
+(evil-define-key 'normal global-map (kbd "M-h") 'evil-window-left)
+(evil-define-key 'normal global-map (kbd "M-j") 'evil-window-down)
+(evil-define-key 'normal global-map (kbd "M-k") 'evil-window-up)
+(evil-define-key 'normal global-map (kbd "M-l") 'evil-window-right)
+(evil-define-key 'normal global-map (kbd "SPC SPC w") 'delete-window)
+(evil-define-key 'normal global-map (kbd "SPC SPC q") 'delete-window)
+(evil-define-key 'normal global-map (kbd "SPC SPC b") 'balance-windows)
+(evil-define-key 'normal global-map (kbd "SPC s s") 'save-buffer)
+(evil-define-key 'normal global-map (kbd "SPC s f") 'counsel-find-file)
+(evil-define-key 'normal global-map (kbd "SPC s r") 'counsel-rg)
+(evil-define-key 'normal global-map (kbd "SPC ;") 'frog-jump-buffer)
diff --git a/emacs/site-lisp/exwm-pref.el b/emacs/site-lisp/exwm-pref.el
new file mode 100644
index 0000000..fee729f
--- /dev/null
+++ b/emacs/site-lisp/exwm-pref.el
@@ -0,0 +1,284 @@
+;;; My full EXWM config
+(provide 'exwm-pref)
+
+;; stuff for exwm
+(use-package exwm)
+(require 'exwm-randr)
+(require 'exwm-xim)
+(require 'exwm-systemtray)
+
+(setq exwm-workspace-number 1)
+;; (setq exwm-randr-workspace-monitor-plist '(0 "DP-0" 1 "HDMI-0" 2 "DVI-I-1"))
+(setq exwm-workspace-show-all-buffers t)
+(setq exwm-layout-show-all-buffers t)
+
+(use-package exwm-modeline)
+(setq exwm-modeline-randr t)
+(setq exwm-modeline-short nil)
+(setq exwm-modeline-urgent t)
+;; (add-hook 'exwm-init-hook (lambda () (exwm-modeline-mode 1)))
+
+;; (require exwm-firefox-evil)
+;; (require 'exwm-firefox)
+;; (exwm-firefox-mode)
+
+(setq persp-auto-resume-time 0)
+
+(setq exwm-title-length 70)
+
+(defun b3n-exwm-set-buffer-name ()
+ (if (and exwm-title (string-match "\\`http[^ ]+" exwm-title))
+ (let ((url (match-string 0 exwm-title)))
+ (setq-local buffer-file-name url)
+ (setq-local exwm-title (replace-regexp-in-string
+ (concat (regexp-quote url) " - ")
+ ""
+ exwm-title))))
+
+ (setq-local exwm-title
+ (concat
+ exwm-class-name
+ "<"
+ ;; (if (<= (length exwm-title) exwm-title-length)
+ exwm-title
+ ;; (concat (substring exwm-title 0 exwm-title-length) "…"))
+ ">"))
+
+ (exwm-workspace-rename-buffer exwm-title))
+
+(add-hook 'exwm-update-class-hook 'b3n-exwm-set-buffer-name)
+(add-hook 'exwm-update-title-hook 'b3n-exwm-set-buffer-name)
+
+(defun exwm-assign-workspace (index)
+ "switch to workspace without changing monitor"
+ (interactive "p")
+ (let* ((current-index exwm-workspace-current-index)
+ (current-monitor (plist-get exwm-randr-workspace-monitor-plist current-index))
+ (displaced-monitor (plist-get exwm-randr-workspace-monitor-plist index)))
+ ;; if not associated, copy current association
+ (unless displaced-monitor
+ (setq displaced-monitor current-monitor))
+ ;; (message "%s, %s" current-monitor displaced-monitor)
+ ;; swapping prevents a monitor losing all of its associations
+ (plist-put exwm-randr-workspace-monitor-plist current-index displaced-monitor)
+ (plist-put exwm-randr-workspace-monitor-plist index current-monitor)
+
+ (exwm-workspace-switch-create index)
+
+ (exwm-randr-refresh)
+ ;; (message "%s, %s, %s" exwm-randr-workspace-monitor-plist current-index index)
+ ))
+
+(defun exwm-other-assigned-workspace ()
+ "focus other monitor's workspace. Assumes 2 monitors"
+ (interactive)
+ ;; super hacky, assumes that there are only two active workspaces
+ (exwm-workspace-switch-create (exwm-workspace--workspace-from-frame-or-index
+ (let* ((workspace-list (seq-filter 'exwm-workspace--active-p exwm-workspace--list))
+ (active-workspaces workspace-list))
+ (while (not (eq (car active-workspaces) (selected-frame)))
+ (setq active-workspaces (cdr active-workspaces)))
+ (setq active-workspaces (cdr active-workspaces))
+ (if (eq active-workspaces nil)
+ (car workspace-list)
+ (car active-workspaces))))))
+
+;; (add-hook 'exwm-randr-screen-change-hook
+;; (lambda ()
+;; (let ((connected (shell-command-to-string "xrandr")))
+;; (if (and (string-match "HDMI-0 connected" connected) (string-match "DP-0 connected" connected) (string-match "DVI-I-1 connected" connected))
+;; (start-process-shell-command
+;; "xrandr" nil "xrandr --output HDMI-0 --rotate right --pos 0x240 --output DP-0 --auto --pos 1080x0 --output DVI-I-1 --auto --pos 1080x1080")
+;; ;;else
+;; (start-process-shell-command
+;; "xrandr" nil "xrandr --output DP-0 --auto --primary --output HDMI-0 --auto")))
+;; (exwm-randr-refresh)))
+(exwm-randr-mode)
+
+;;(exwm-config-default)
+(exwm-systemtray-mode)
+(push ?\C-\\ exwm-input-prefix-keys) ;;C-\ to switch input method
+
+;; All buffers created in EXWM mode are named "*EXWM*". You may want to
+;; change it in `exwm-update-class-hook' and `exwm-update-title-hook', which
+;; are run when a new X window class name or title is available. Here's
+;; some advice on this topic:
+;; + Always use `exwm-workspace-rename-buffer` to avoid naming conflict.
+;; + For applications with multiple windows (e.g. GIMP), the class names of
+ ; all windows are probably the same. Using window titles for them makes
+;; more sense.
+;; In the following example, we use class names for all windows except for
+;; Java applications and GIMP.
+;; (add-hook 'exwm-update-class-hook
+;; (lambda ()
+;; (unless (or (string-prefix-p "sun-awt-X11-" exwm-instance-name)
+;; (string= "gimp" exwm-instance-name))
+;; (exwm-workspace-rename-buffer exwm-class-name))))
+;; (add-hook 'exwm-update-title-hook
+;; (lambda ()
+;; (when (or (not exwm-instance-name)
+;; (string-prefix-p "sun-awt-X11-" exwm-instance-name)
+;; (string= "gimp" exwm-instance-name))
+;; (exwm-workspace-rename-buffer exwm-title))))
+
+
+;; store the buffer we were at before a jump
+(setq exwm-marked-buffer "*scratch*")
+
+;; Global keybindings can be defined with `exwm-input-global-keys'.
+;; Here are a few examples:
+(setq exwm-input-global-keys
+ `(
+ ;; Bind "s-r" to exit char-mode and fullscreen mode.
+ ([?\s-r] . exwm-reset)
+ ([?\M-r] . exwm-reset)
+ ;; Bind "s-w" to window switcher
+ ([?\s-w] . consult-buffer)
+ ;; ([?\M-w] . open-window-by-buffer)
+ ([?\M-W] . consult-buffer)
+
+ ;;quicker 2-split swtiching
+ ([?\s-o] . (lambda ()
+ (interactive)
+ (other-window 1)))
+ ([?\M-o] . (lambda ()
+ (interactive)
+ (other-window 1)))
+
+ ;;fast workspace switch
+ ([?\s-O] . exwm-other-assigned-workspace)
+ ;; ([?\M-O] . exwm-other-assigned-workspace)
+
+ ;;quick calc switching
+ ;; ([?\s-c] . switch-to-calc)
+
+ ;;mark the buffer
+ ;; ([?\s- ] . (lambda ()
+ ;; (interactive)
+ ;; (setq exwm-marked-buffer (current-buffer))
+ ;; (message "Marked the current buffer, return (across workspaces) with s-x")))
+
+ ;;return to marked buffer
+ ;; ([?\s-x] . (lambda ()
+ ;; (interactive)
+ ;; (let ((hold exwm-marked-buffer))
+ ;; (setq exwm-marked-buffer (current-buffer))
+ ;; (exwm-workspace-switch-to-buffer hold))))
+
+ ;; Bind "s-0" to "s-9" to switch to a layout.
+ ;; ,@(mapcar
+ ;; (lambda (digit)
+ ;; ;; `(,(kbd (concat "s-" (int-to-string digit))) . (lambda () (interactive) (exwm-assign-workspace ,digit)))
+ ;; `(,(kbd (concat "s-" (int-to-string digit))) . (lambda ()
+ ;; (interactive)
+ ;; (exwm-workspace-switch-create ,digit)))
+ ;; )
+ ;; (number-sequence 0 9))
+
+ ([?\s-d] . (lambda (command)
+ (interactive (list (read-shell-command "$ ")))
+ (start-process-shell-command command nil command)))
+ ;; ([?\M-d] . (lambda (command)
+ ;; (interactive (list (read-shell-command "$ ")))
+ ;; (start-process-shell-command command nil command)))
+ ;; browser
+ ([?\s-e] . (lambda ()
+ (interactive)
+ (start-process-shell-command "vimb" nil "vimb")))
+ ;; ([?\M-e] . (lambda ()
+ ;; (interactive)
+ ;; (start-process-shell-command "vimb" nil "vimb")))
+
+ ;;terminal
+ ([s-return] . 'eshell)
+ ;; ([M-return] . (lambda ()
+ ;; (interactive)
+ ;;if we are already there, switch back
+ ;; (if (string= (buffer-name (current-buffer)) "*vterm*")
+ ;; (exwm-workspace-switch-to-buffer exwm-last-buffer)
+ ;; (progn
+ ;; (setq exwm-last-buffer (current-buffer))
+ ;; (vterm)))))
+
+ ;; return to the last window
+ ;; ([s-tab] . (lambda ()
+ ;; (interactive)
+ ;; (exwm-workspace-switch-to-buffer (other-buffer))))
+
+ ;; kill the current window and close the buffer if possible
+ ([?\s-Q] . kill-buffer-and-window)
+
+ ;; kill current buffer but leave window
+ ([?\s-q] . (lambda () (interactive) (kill-buffer nil)))
+
+ ;; suspend
+ ([?\s-`] . (lambda ()
+ (interactive)
+ (start-process "" nil "loginctl" "suspend")))
+ ))
+
+;; requires some custom shell scripts not included in my emacs config
+(defun my/brightnessdown () (interactive) (start-process "" nil "brightnessdown"))
+(defun my/brightnessup () (interactive) (start-process "" nil "brightnessup"))
+(defun my/mute () (interactive) (start-process "" nil "amixer" "set" "Master" "toggle"))
+(defun my/voldown () (interactive) (start-process "" nil "amixer" "set" "Master" "5%-"))
+(defun my/volup () (interactive) (start-process "" nil "amixer" "set" "Master" "5%+"))
+
+;; To add a key binding only available in line-mode, simply define it in
+;; `exwm-mode-map'. The following example shortens 'C-c q' to 'C-q'.
+(define-key exwm-mode-map [?\C-q] #'exwm-input-send-next-key)
+(define-key exwm-mode-map [?\M-!] #'shell-command)
+(define-key exwm-mode-map [?\s-d] (lambda (command)
+ (interactive (list (read-shell-command "$ ")))
+ (start-process-shell-command command nil command)))
+(define-key exwm-mode-map [?\M-o] #'other-window)
+
+(global-set-key (kbd "<XF86MonBrightnessDown>") 'my/brightnessdown)
+(global-set-key (kbd "<XF86MonBrightnessUp>") 'my/brightnessup)
+(global-set-key (kbd "<XF86AudioMute>") 'my/mute)
+(global-set-key (kbd "<XF86AudioLowerVolume>") 'my/voldown)
+(global-set-key (kbd "<XF86AudioRaiseVolume>") 'my/volup)
+
+(define-key exwm-mode-map (kbd "<XF86MonBrightnessDown>") 'my/brightnessdown)
+(define-key exwm-mode-map (kbd "<XF86MonBrightnessUp>") 'my/brightnessup)
+(define-key exwm-mode-map (kbd "<XF86AudioMute>") 'my/mute)
+(define-key exwm-mode-map (kbd "<XF86AudioLowerVolume>") 'my/voldown)
+(define-key exwm-mode-map (kbd "<XF86AudioRaiseVolume>") 'my/volup)
+
+;; The following example demonstrates how to use simulation keys to mimic
+;; the behavior of Emacs. The value of `exwm-input-simulation-keys` is a
+;; list of cons cells (SRC . DEST), where SRC is the key sequence you press
+;; and DEST is what EXWM actually sends to application. Note that both SRC
+;; and DEST should be key sequences (vector or string).
+;; (setq exwm-input-simulation-keys
+;; '(
+;; ;; movement
+;; ([?\C-b] . [left])
+;; ([?\M-b] . [C-left])
+;; ([?\C-f] . [right])
+;; ([?\M-f] . [C-right])
+;; ([?\C-p] . [up])
+;; ([?\C-n] . [down])
+;; ([?\C-a] . [home])
+;; ([?\C-e] . [end])
+;; ([?\M-v] . [prior])
+;; ([?\C-v] . [next])
+;; ([?\C-d] . [delete])
+;; ([?\C-k] . [S-end delete])
+;; ;; cut/paste.
+;; ;; ([?\C-w] . [?\C-x])
+;; ;; ([?\M-w] . [?\C-c])
+;; ;; ([?\C-y] . [?\C-v])
+;; ;; search
+;; ([?\C-s] . [?\C-f])))
+
+;; You can hide the minibuffer and echo area when they're not used, by
+;; uncommenting the following line.
+;; (setq exwm-workspace-minibuffer-position 'bottom)
+
+;; Do not forget to enable EXWM. It will start by itself when things are
+;; ready. You can put it _anywhere_ in your configuration.
+(exwm-enable)
+(call-process "dunst" nil 0)
+(call-process "bash" nil 0 nil "-c" "uname -a | grep -q gentoo && gentoo-pipewire-launcher")
+
diff --git a/emacs/site-lisp/general-text.el b/emacs/site-lisp/general-text.el
new file mode 100644
index 0000000..d03171a
--- /dev/null
+++ b/emacs/site-lisp/general-text.el
@@ -0,0 +1,32 @@
+;; General stuff for editing all text, but particularly prose
+
+(provide 'general-text)
+
+;; dictionaries
+(define-prefix-command 'dict-map)
+(define-keymap :full nil
+ :parent nil
+ :suppress nil
+ :keymap nil
+ :name "dict-map"
+ :prefix 'dict-map
+ (kbd "w") 'sdcv-search-input
+ (kbd "c") (lambda () (interactive)
+ (activate-input-method 'pyim)
+ (sdcv-search-input (read-from-minibuffer "Chinese Word: "
+ nil nil nil
+ nil nil t))
+ (activate-input-method nil)))
+
+(setq ispell-personal-dictionary "/home/tmu/.aspell.en.pws")
+(add-hook 'text-mode-hook (lambda ()
+ (ispell-mode 1)
+ (local-set-key (kbd "M-l") 'dict-map)))
+
+(electric-pair-mode 1)
+
+(use-package dabbrev
+ :config
+ (add-to-list 'dabbrev-ignored-buffer-modes 'doc-view-mode)
+ (add-to-list 'dabbrev-ignored-buffer-modes 'pdf-view-mode)
+ (add-to-list 'dabbrev-ignored-buffer-modes 'tags-table-mode))
diff --git a/emacs/site-lisp/maze.el b/emacs/site-lisp/maze.el
new file mode 100644
index 0000000..784049f
--- /dev/null
+++ b/emacs/site-lisp/maze.el
@@ -0,0 +1,64 @@
+;; [adj] movement and editing for lisp
+
+(provide 'maze-lisp)
+
+(defun maze--cur-end ()
+ (push-mark)
+ (thing-at-point--end-of-sexp)
+ (let ((cur (point)))
+ (goto-char (mark))
+ (pop-mark)
+ cur))
+
+(defun maze--hl (beg end &optional buffer)
+ (let ((overlay (make-overlay beg end (or buffer (current-buffer)))))
+ (overlay-put overlay 'face 'highlight)
+ (setq maze-overlay overlay)
+ overlay))
+
+(defun maze--unhl ()
+ (if maze-overlay
+ (delete-overlay maze-overlay)))
+
+(defun maze--update-hl (beg end)
+ (if maze-overlay
+ (move-overlay maze-overlay beg end)
+ (maze--hl beg end)))
+
+(defun maze-forward (n)
+ (interactive "p")
+ (goto-char (or (scan-sexps (point) 2) (buffer-end 1)))
+ (thing-at-point--beginning-of-sexp)
+ (maze--update-hl (point) (maze--cur-end)))
+
+(defun maze-backward (n)
+ (interactive "p")
+ (let ((n (or n 1)))
+ (backward-sexp n))
+ (maze--update-hl (point) (maze--cur-end)))
+
+(defun maze-inward (n)
+ (interactive "p")
+ (down-list n)
+ (maze--update-hl (point) (maze--cur-end)))
+
+(defun maze-outward (n)
+ (interactive "p")
+ (backward-up-list n)
+ (maze--update-hl (point) (maze--cur-end)))
+
+(defvar-keymap maze-mode-map
+ (kbd "j") 'maze-forward
+ (kbd "k") 'maze-backward
+ (kbd "l") 'maze-inward
+ (kbd "h") 'maze-outward)
+
+
+(define-minor-mode maze-mode
+ "doc"
+ :keymap maze-mode-map
+ :init-value nil
+ :after-hook (progn
+ (setq-local parse-sexp-ignore-comments t)
+ (setq-local maze-overlay nil)
+ (font-lock-mode 1)))
diff --git a/emacs/site-lisp/modeline-config.el b/emacs/site-lisp/modeline-config.el
new file mode 100644
index 0000000..873f855
--- /dev/null
+++ b/emacs/site-lisp/modeline-config.el
@@ -0,0 +1,63 @@
+;;; Modeline config
+
+(provide 'modeline-config)
+
+(require 'battery)
+(display-battery-mode 1)
+
+(use-package doom-modeline
+ :init
+ (doom-modeline-mode 1))
+(use-package minions
+ :init
+ (minions-mode 1)
+ :custom
+ (minions-prominent-modes '(persp-mode auto-fill-mode eldoc-mode eglot-mode lsp-mode)))
+
+(require 'time)
+(setq display-time-day-and-date t)
+;; Set up the time timer.
+(defun enable-display-time-backend ()
+ "Do the internal bit of `display-time-mode` but without adding it to the
+global mode string"
+ (and display-time-timer (cancel-timer display-time-timer))
+ (setq display-time-timer nil)
+ (setq display-time-string "")
+ (setq display-time-load-average display-time-default-load-average)
+ (progn
+ ;; (or (memq 'display-time-string global-mode-string)
+ ;; (setq global-mode-string
+ ;; (append global-mode-string '(display-time-string))))
+ ;; Set up the time timer.
+ (setq display-time-timer
+ (run-at-time t display-time-interval
+ 'display-time-event-handler))
+ ;; Make the time appear right away.
+ (display-time-update)))
+
+;; (enable-display-time-backend)
+(display-time-mode 1)
+;; there is more in the single-header file
+
+;; -----------------------------------------------------------------------------
+;; telephone line stuff
+
+;; (setq telephone-line-primary-left-separator 'telephone-line-tan-left)
+;; (setq telephone-line-primary-right-separator 'telephone-line-tan-right)
+
+;; (telephone-line-defsegment* telephone-line-time-segment ()
+;; (telephone-line-raw display-time-string t))
+
+;; (setq telephone-line-lhs
+;; '((evil . (telephone-line-evil-tag-segment))
+;; (accent . (telephone-line-vc-segment
+;; telephone-line-erc-modified-channels-segment
+;; telephone-line-process-segment))
+;; (nil . (telephone-line-buffer-segment
+;; telephone-line-minions-mode-segment))))
+;; (setq telephone-line-rhs
+;; '((nil . (telephone-line-misc-info-segment))
+;; (accent . (telephone-line-time-segment))
+;; (evil . (telephone-line-airline-position-segment))))
+
+;; (telephone-line-mode 1)
diff --git a/emacs/site-lisp/my-binds.el b/emacs/site-lisp/my-binds.el
new file mode 100644
index 0000000..d3455e4
--- /dev/null
+++ b/emacs/site-lisp/my-binds.el
@@ -0,0 +1,24 @@
+;;; Various custom binds that aren't part of an external package
+
+(provide 'my-binds)
+(require 'my-funcs)
+
+(global-set-key (kbd "C-x C-C") 'save-buffers-kill-terminal)
+(global-set-key (kbd "C-x C-c") 'close-or-kill)
+(global-set-key (kbd "M-w") 'copy-region-as-kill) ;;make copying not flash cursor
+(global-set-key (kbd "M-(") 'wrap-region-paren)
+(global-set-key (kbd "M-z") 'zap-whitespace)
+(global-set-key (kbd "C-M-z") 'wrap-sexp)
+(global-set-key (kbd "M-o") 'other-window)
+(global-set-key (kbd "M-c") 'calc)
+(global-set-key (kbd "M-U") 'scroll-lock-mode)
+(global-set-key (kbd "M-Q") 'auto-fill-mode)
+(require 'dired)
+(keymap-set dired-mode-map "C-o" 'dired-display-file)
+(keymap-set dired-mode-map "F" 'dired-do-find-marked-files)
+
+
+(global-set-key (kbd "M-l") 'forward-char)
+(global-set-key (kbd "M-j") 'next-line)
+(global-set-key (kbd "M-k") 'previous-line)
+(global-set-key (kbd "M-h") 'backward-char)
diff --git a/emacs/site-lisp/my-funcs.el b/emacs/site-lisp/my-funcs.el
new file mode 100644
index 0000000..b1cfdec
--- /dev/null
+++ b/emacs/site-lisp/my-funcs.el
@@ -0,0 +1,143 @@
+;;; Various functions functions that are not part of an external package
+
+(provide 'my-funcs)
+
+
+;; see transparancy in init.el
+(defun toggle-frame-transparency ()
+ "Toggle transparency."
+ (interactive)
+ (let ((alpha-transparency 90))
+ (if (eq alpha-transparency (frame-parameter nil 'alpha-background))
+ (set-frame-parameter nil 'alpha-background 100)
+ (set-frame-parameter nil 'alpha-background alpha-transparency))))
+
+(defun wrap-region-paren ()
+ "Wraps the region in parens.
+Similar to pressing ( with the region active."
+ (interactive)
+ (let ((beg (region-beginning))
+ (end (region-end)))
+ (save-excursion
+ (goto-char beg)
+ (insert "(")
+ (goto-char (+ end 1))
+ (insert ")")
+ )))
+
+(defun zap-whitespace ()
+ "zaps the whitespace around the point in both directions"
+ (interactive)
+ (push-mark)
+ (skip-chars-backward " \t\n")
+ (push-mark)
+ (skip-chars-forward " \t\n")
+ (delete-region (mark) (point))
+ (pop-mark)
+ (goto-char (mark))
+ (pop-mark))
+
+(defun wrap-sexp (&optional arg)
+ "Wraps the following sexp in a pair of parens.
+Places inside the new pair, with prefix arg do the same backwards, pushing the
+mark. Does the same of ARG number sexps if given"
+ (interactive "p")
+ (message "%s" arg)
+ (if arg
+ (progn
+ (push-mark)
+ (insert-pair arg ?\( ?\)))
+ (insert-pair 1 ?\( ?\))))
+
+(defun close-or-kill ()
+ "If this is the sole frame, kill emacs. Otherwise close the frame."
+ (interactive)
+ (if (eq 1 (length (frame-list)))
+ ;; sole frame, exit
+ (save-buffers-kill-terminal)
+ (delete-frame)))
+
+;; indent code when pasting, from
+;; https://trey-jackson.blogspot.com/2008/03/emacs-tip-15-indent-yanked-code.html
+
+;; automatically indenting yanked text if in programming-modes
+(defvar yank-indent-modes '(emacs-lisp-mode
+ c-mode c++-mode
+ tcl-mode sql-mode
+ perl-mode cperl-mode
+ java-mode jde-mode
+ lisp-interaction-mode
+ LaTeX-mode TeX-mode
+ rust-mode
+ rustic-mode)
+ "Modes in which to indent regions that are yanked (or yank-popped).")
+
+(defun yank-advised-indent-function (beg end)
+ "Do indentation, as long as the region isn't too large.
+BEG and END define the region."
+ (indent-region beg end nil))
+
+(defadvice yank (after yank-indent activate)
+ "If current mode is one of 'yank-indent-modes, indent yanked text (with prefix arg don't indent)."
+ (if (and (not (ad-get-arg 0))
+ (member major-mode yank-indent-modes))
+ (let ((transient-mark-mode nil))
+ (yank-advised-indent-function (region-beginning) (region-end)))))
+
+(defadvice yank-pop (after yank-pop-indent activate)
+ "If current mode is one of 'yank-indent-modes, indent yanked text (with prefix arg don't indent)."
+ (if (and (not (ad-get-arg 0))
+ (member major-mode yank-indent-modes))
+ (let ((transient-mark-mode nil))
+ (yank-advised-indent-function (region-beginning) (region-end)))))
+
+(defadvice evil-paste-before (after yank-indent activate)
+ "If current mode is one of 'yank-indent-modes, indent yanked text (with prefix arg don't indent)."
+ (if (and (not (ad-get-arg 0))
+ (member major-mode yank-indent-modes))
+ (let ((transient-mark-mode nil))
+ (yank-advised-indent-function (region-beginning) (region-end)))))
+
+(defadvice evil-paste-after (after yank-indent activate)
+ "If current mode is one of 'yank-indent-modes, indent yanked text (with prefix arg don't indent)."
+ (if (and (not (ad-get-arg 0))
+ (member major-mode yank-indent-modes))
+ (let ((transient-mark-mode nil))
+ (yank-advised-indent-function (region-beginning) (region-end)))))
+
+(defun fold-this-fold-forward (&optional arg)
+ "Fold forward ARG number of sexps, defaulting to one."
+ (interactive "p")
+ (push-mark)
+ (forward-sexp arg)
+ (fold-this (mark) (point))
+ (pop-mark))
+
+(defun fold-this-fold-backward (&optional arg)
+ "Fold backward ARG number of sexps, defaulting to one."
+ (interactive "p")
+ (push-mark)
+ (backward-sexp arg)
+ (fold-this (point) (mark))
+ (pop-mark))
+
+(defun clean-prog-file (buffer)
+ "Fixes whitespace in buffer"
+ (save-excursion
+ (with-current-buffer buffer
+ (untabify (point-min) (point-max))
+ (goto-char (point-min))
+ (while (re-search-forward " +$" nil t)
+ (replace-match "" nil nil)))))
+
+(defun open-window-by-buffer (buffer)
+ "Move focus to an extant window by the buffer it contains."
+ (interactive "bBuffer: ")
+ (let ((win (get-buffer-window buffer t)))
+ (if win
+ (select-window win)
+ (switch-to-buffer buffer))))
+
+(defun dired-do-find-marked-files ()
+ (interactive)
+ (seq-do 'find-file (dired-get-marked-files)))
diff --git a/emacs/site-lisp/single-header.el b/emacs/site-lisp/single-header.el
new file mode 100755
index 0000000..1196ea0
--- /dev/null
+++ b/emacs/site-lisp/single-header.el
@@ -0,0 +1,143 @@
+(defvar single-header--current-header-buffer nil "Read the name")
+
+(defvar single-header-format '(make-header-info-string) "evaluated to fill the header")
+
+(defface single-header '((default . (:background "#000000" :family "Source Code Pro"))) "Face for top line")
+
+(require 'battery)
+(defun with-face (str &rest face-plist)
+ (add-face-text-property 0 (length str) face-plist t str)
+ str)
+
+;; disable normal emms-state and move it to the header
+;; (require 'emms-state)
+;; (setq single-header-emms-state-format-string
+;; '(emms-state
+;; (" " emms-state
+;; (emms-state-current-playing-time
+;; (" "
+;; (:propertize emms-state-current-playing-time
+;; face emms-state-current-playing-time)))
+;; (emms-state-total-playing-time
+;; ("("
+;; (:propertize emms-state-total-playing-time
+;; face emms-state-total-playing-time)
+;; ")"))
+;; emms-mode-line-string)))
+;; (setq emms-state-mode-line-string "")
+
+(defun make-header-info-string ()
+ "generates the mode line string that contains all the info to the right"
+ (let ((win (when (buffer-live-p single-header--current-header-buffer)
+ (get-buffer-window single-header--current-header-buffer)))
+ (str (concat
+ (format-time-string "%a, %b %+4Y-%0m-%0d ")
+ (with-face (format-time-string "%R ")
+ :weight 'bold)
+ (with-face (format "<%03.2f> " (car (load-average 1)))
+ :foreground "#da70d6")
+ (with-face (let* ((mi (memory-info))
+ (tm (float (car mi)))
+ (fm (float (car (cdr mi))))
+ (ts (float (car (cdr (cdr mi)))))
+ (fs (float (car (cdr (cdr (cdr mi)))))))
+ (format "{%.2f %.2f} " (- 1 (/ fm tm)) (- 1 (/ fs ts))))
+ :foreground "#00ced1")
+ (with-face (battery-format "[%b%p%%] " (and battery-status-function (funcall battery-status-function)))
+ :weight 'bold)
+ ;; (format-mode-line single-header-emms-state-format-string)
+ )))
+ (setq str (concat str
+ (cond (win (make-string
+ (- (window-max-chars-per-line win 'single-header) (length str)) ? ))
+ (t ""))
+ ))
+ (with-face str 'single-header)))
+
+
+(defun shorten-path (path)
+ "Shortens each directory in PATH except for the last directory to its first character."
+ (let* ((components (split-string path "/")) ; Split the path into components
+ (last-component (-last (lambda (s) (not (string-empty-p s))) components)) ; Extract the last component
+ (shortened-components ; Shorten all components except the last
+ (mapcar (lambda (comp)
+ (if (or (string-equal comp last-component) (string-empty-p comp))
+ comp
+ (substring comp 0 1)))
+ components)))
+ (mapconcat 'identity shortened-components "/"))) ; Recombine components into a path
+
+;; (setq global-mode-string '("" (:eval (concat (with-face (format " [%s] " (shorten-path default-directory))
+;; :weight 'bold
+;; :foreground "green2")))))
+
+(defun single-header-init-buffer (buf)
+ (with-current-buffer buf
+ (insert "header test")
+ (jit-lock-mode nil)
+ (font-lock-mode -1)
+ (buffer-disable-undo)
+ (setq-local mode-line-format nil)
+ (setq-local header-line-format nil)
+ (setq-local cursor-type nil)
+ (setq-local cursor-in-non-selected-windows nil)
+ (setq-local overflow-newline-into-fringe nil)
+ (setq-local word-wrap nil)
+ (setq-local show-trailing-whitespace nil)))
+
+(defun single-header-init-window (win)
+ (with-selected-window win
+ (set-window-dedicated-p win t)
+ (set-window-parameter win 'no-other-window t)
+ (set-window-parameter win 'no-delete-other-windows t)
+ (set-window-margins win 0 0)
+ (set-window-fringes win 0 0)
+ (set-window-scroll-bars win 0 nil 0 nil)
+ (setq-local window-min-height 1)
+ (setq-local window-safe-min-height 1)
+ (let
+ (window-size-fixed)
+ (fit-window-to-buffer win 1))
+ (setq-local window-size-fixed t)
+ (when
+ (fboundp 'window-preserve-size)
+ (window-preserve-size win nil t))))
+
+(defun single-header-show (buf)
+ "show / make a header"
+ (if (buffer-live-p buf)
+ (let ((win (display-buffer-in-side-window buf '((side . top)
+ (slot . -100)))))
+ (single-header-init-window win))
+ (single-header-make)))
+
+(defun single-header-make ()
+ "create the fake header line"
+ (interactive)
+ (unless (buffer-live-p single-header--current-header-buffer)
+ (let ((buf (generate-new-buffer "*header*")))
+ (single-header-init-buffer buf)
+ (setq single-header--current-header-buffer buf)
+ (single-header-show buf))))
+
+(defun single-header-delete ()
+ "remove an existing header buffer"
+ (interactive)
+ (when (buffer-live-p single-header--current-header-buffer)
+ (kill-buffer single-header--current-header-buffer)))
+
+(defun single-header-update ()
+ "update the contents of the header line according to `single-header-format'"
+ (when (buffer-live-p single-header--current-header-buffer)
+ (with-current-buffer single-header--current-header-buffer
+ (erase-buffer)
+ (insert (eval single-header-format)))))
+
+;; (add-hook 'after-make-frame-functions (lambda (frame)
+;; (with-selected-frame frame
+;; (single-header-show single-header--current-header-buffer))))
+
+;; do init frame seperately
+;; (single-header-show single-header--current-header-buffer)
+;; (run-with-timer 0 1 'single-header-update)
+
diff --git a/emacs/site-lisp/tex-conf.el b/emacs/site-lisp/tex-conf.el
new file mode 100644
index 0000000..4592ce5
--- /dev/null
+++ b/emacs/site-lisp/tex-conf.el
@@ -0,0 +1,47 @@
+;; latex stuff
+(require 'tex-mode)
+(define-key latex-mode-map (kbd "C-c m") (lambda () (interactive)
+ (push-mark)
+ (insert "\\[\n\n\\]")
+ (indent-region (mark) (point))
+ (pop-mark)
+ (previous-line)
+ (indent-for-tab-command)
+ ))
+
+;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;; ;;;;;;;;;;;;;;;; LaTeX ;;;;;;;;;;;;;;;;;
+;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+
+;; ##### Don't forget to configure
+;; ##### Okular to use emacs in
+;; ##### "Configuration/Configure Okular/Editor"
+;; ##### => Editor => Emacsclient. (you should see
+;; ##### emacsclient -a emacs --no-wait +%l %f
+;; ##### in the field "Command".
+
+(add-hook 'LaTeX-mode-hook 'turn-on-reftex)
+(setq reftex-plug-into-AUCTeX t)
+
+;; ##### Always ask for the master file
+;; ##### when creating a new TeX file.
+(setq-default TeX-master nil)
+
+;; ##### Enable synctex correlation. From Okular just press
+;; ##### Shift + Left click to go to the good line.
+(setq TeX-source-correlate-mode t
+ TeX-source-correlate-start-server t)
+
+;; ### Set Okular as the default PDF viewer.
+(eval-after-load "tex"
+ '(setcar (cdr (assoc 'output-pdf TeX-view-program-selection)) "Okular"))
+
+(add-hook 'tex-mode-hook (lambda ()
+ (setq spell-fu-faces-exclude
+ '(tex-math
+ font-lock-builtin-face
+ font-lock-keyword-face
+ font-lock-function-name-face
+ font-lock-variable-name-face
+ font-latex-sedate-face))
+ (outline-minor-mode 1)))
diff --git a/emacs/site-lisp/tmu-custom-theme.el b/emacs/site-lisp/tmu-custom-theme.el
new file mode 100755
index 0000000..e9d95ff
--- /dev/null
+++ b/emacs/site-lisp/tmu-custom-theme.el
@@ -0,0 +1,66 @@
+(provide 'tmu-custom-theme)
+
+(deftheme tmu-custom
+ "Created 2023-01-06.")
+
+(custom-theme-set-faces
+ 'tmu-custom
+ '(cursor ((((background light)) (:background "black")) (((background dark)) (:background "white"))))
+ '(fixed-pitch ((t (:family "Monospace"))))
+ '(variable-pitch ((((type w32)) (:foundry "outline" :family "Arial")) (t (:family "Sans Serif"))))
+ '(escape-glyph ((((background dark)) (:foreground "cyan")) (((type pc)) (:foreground "magenta")) (t (:foreground "brown"))))
+ '(homoglyph ((((background dark)) (:foreground "cyan")) (((type pc)) (:foreground "magenta")) (t (:foreground "brown"))))
+ '(minibuffer-prompt ((t (:weight bold :box (:line-width (1 . -1) :color "red" :style released-button) :foreground "white smoke" :background "royal blue"))))
+ '(highlight ((t (:background "gray30"))))
+ '(region ((t (:extend t :background "SeaGreen4"))))
+ '(shadow ((((class color grayscale) (min-colors 88) (background light)) (:foreground "grey50")) (((class color grayscale) (min-colors 88) (background dark)) (:foreground "grey70")) (((class color) (min-colors 8) (background light)) (:foreground "green")) (((class color) (min-colors 8) (background dark)) (:foreground "yellow"))))
+ '(secondary-selection ((t (:extend t :foreground "#f6f3e8" :background "#333366"))))
+ '(trailing-whitespace ((((class color) (background light)) (:background "red1")) (((class color) (background dark)) (:background "red1")) (t (:inverse-video t))))
+ '(font-lock-bracket-face ((t (:inherit (font-lock-punctuation-face)))))
+ '(font-lock-builtin-face ((t (:foreground "chartreuse2"))))
+ '(font-lock-comment-delimiter-face ((default (:inherit (font-lock-comment-face)))))
+ '(font-lock-comment-face ((t (:foreground "orchid2"))))
+ '(font-lock-constant-face ((t (:foreground "maroon1"))))
+ '(font-lock-delimiter-face ((t (:inherit (font-lock-punctuation-face)))))
+ '(font-lock-doc-face ((t (:foreground "indian red"))))
+ '(font-lock-doc-markup-face ((t (:inherit (font-lock-constant-face)))))
+ '(font-lock-escape-face ((t (:inherit (font-lock-regexp-grouping-backslash)))))
+ '(font-lock-function-name-face ((t (:foreground "spring green"))))
+ '(font-lock-keyword-face ((t (:weight bold :foreground "light sea green"))))
+ '(font-lock-negation-char-face ((t nil)))
+ '(font-lock-number-face ((t nil)))
+ '(font-lock-misc-punctuation-face ((t (:inherit (font-lock-punctuation-face)))))
+ '(font-lock-operator-face ((t nil)))
+ '(font-lock-preprocessor-face ((t (:foreground "cornflower blue"))))
+ '(font-lock-property-face ((t (:inherit (font-lock-variable-name-face)))))
+ '(font-lock-punctuation-face ((t nil)))
+ '(font-lock-regexp-grouping-backslash ((t (:inherit (bold)))))
+ '(font-lock-regexp-grouping-construct ((t (:inherit (bold)))))
+ '(font-lock-string-face ((t (:foreground "Skyblue1"))))
+ '(font-lock-type-face ((t (:foreground "medium purple"))))
+ '(font-lock-variable-name-face ((t (:foreground "PaleGreen2"))))
+ '(font-lock-warning-face ((t (:weight bold :foreground "hot pink"))))
+ '(button ((t (:inherit (link)))))
+ '(link ((((class color) (min-colors 88) (background light)) (:underline (:color foreground-color :style line :position nil) :foreground "RoyalBlue3")) (((class color) (background light)) (:underline (:color foreground-color :style line :position nil) :foreground "blue")) (((class color) (min-colors 88) (background dark)) (:underline (:color foreground-color :style line :position nil) :foreground "cyan1")) (((class color) (background dark)) (:underline (:color foreground-color :style line :position nil) :foreground "cyan")) (t (:inherit (underline)))))
+ '(link-visited ((default (:inherit (link))) (((class color) (background light)) (:foreground "magenta4")) (((class color) (background dark)) (:foreground "violet"))))
+ '(fringe ((((class color) (background light)) (:background "grey95")) (((class color) (background dark)) (:background "grey10")) (t (:background "gray"))))
+ '(header-line ((t (:inherit mode-line))))
+ '(tooltip ((((class color)) (:inherit (variable-pitch) :foreground "black" :background "lightyellow")) (t (:inherit (variable-pitch)))))
+ '(mode-line ((t (:background "black" :family "DejaVu Sans"))))
+ '(mode-line-buffer-id ((t (:weight bold))))
+ '(mode-line-emphasis ((t (:weight bold))))
+ '(mode-line-highlight ((((supports :box t) (class color) (min-colors 88)) (:box (:line-width (2 . 2) :color "grey40" :style released-button))) (t (:inherit (highlight)))))
+ '(mode-line-inactive ((t (:inherit mode-line :foreground "dark gray"))))
+ '(isearch ((((class color) (min-colors 88) (background light)) (:foreground "lightskyblue1" :background "magenta3")) (((class color) (min-colors 88) (background dark)) (:foreground "brown4" :background "palevioletred2")) (((class color) (min-colors 16)) (:foreground "cyan1" :background "magenta4")) (((class color) (min-colors 8)) (:foreground "cyan1" :background "magenta4")) (t (:inverse-video t))))
+ '(isearch-fail ((((class color) (min-colors 88) (background light)) (:background "RosyBrown1")) (((class color) (min-colors 88) (background dark)) (:background "red4")) (((class color) (min-colors 16)) (:background "red")) (((class color) (min-colors 8)) (:background "red")) (((class color grayscale)) (:foreground "grey")) (t (:inverse-video t))))
+ '(lazy-highlight ((((class color) (min-colors 88) (background light)) (:distant-foreground "black" :background "paleturquoise")) (((class color) (min-colors 88) (background dark)) (:distant-foreground "white" :background "paleturquoise4")) (((class color) (min-colors 16)) (:distant-foreground "white" :background "turquoise3")) (((class color) (min-colors 8)) (:distant-foreground "white" :background "turquoise3")) (t (:underline (:color foreground-color :style line :position nil)))))
+ '(match ((((class color) (min-colors 88) (background light)) (:background "khaki1")) (((class color) (min-colors 88) (background dark)) (:background "RoyalBlue3")) (((class color) (min-colors 8) (background light)) (:foreground "black" :background "yellow")) (((class color) (min-colors 8) (background dark)) (:foreground "white" :background "blue")) (((type tty) (class mono)) (:inverse-video t)) (t (:background "gray"))))
+ '(next-error ((t (:inherit (region)))))
+ '(query-replace ((t (:inherit (isearch)))))
+ '(default ((t (:family "Source Code Pro" :foundry "ADBO" :width normal :height 98 :weight regular :slant normal :underline nil :overline nil :extend nil :strike-through nil :box nil :inverse-video nil :foreground "white smoke" :background "gray10" :stipple nil :inherit nil))))
+ '(frog-menu-posframe-background-face ((t (:background "RoyalBlue4"))))
+ '(minibuffer-prompt ((t (:background "gray10" :foreground "cyan" :box nil :weight bold))))
+ '(pyim-page ((t (:inherit default :background "#333333" :foreground "#dcdccc"))))
+ '(vterm-color-blue ((t (:inherit ansi-color-bright-green)))))
+
+(provide-theme 'tmu-custom)