mirror of
https://github.com/pestctrl/emacs-config.git
synced 2026-02-16 08:14:15 +00:00
Bankruptcy declared, approaching local minima, tired
This commit is contained in:
parent
3942c1e4c4
commit
c6b161f38d
7 changed files with 310 additions and 1462 deletions
1063
config-base.org
1063
config-base.org
File diff suppressed because it is too large
Load diff
345
config-exwm.org
345
config-exwm.org
|
|
@ -1,314 +1,5 @@
|
|||
#+PROPERTY: header-args :tangle "~/.emacs.d/config-exwm.el" :comments both
|
||||
|
||||
* First in load path
|
||||
#+begin_src emacs-lisp
|
||||
(add-to-list 'load-path
|
||||
"~/.emacs.d/submodule/exwm")
|
||||
|
||||
(add-to-list 'load-path
|
||||
"~/.emacs.d/submodule/xelb")
|
||||
#+end_src
|
||||
* Meta
|
||||
#+BEGIN_SRC emacs-lisp
|
||||
(require 'exwm)
|
||||
(require 'exwm-config)
|
||||
(exwm-config-default)
|
||||
#+END_SRC
|
||||
* Multimonitor support
|
||||
#+BEGIN_SRC emacs-lisp
|
||||
(require 'exwm-randr)
|
||||
(exwm-randr-enable)
|
||||
#+END_SRC
|
||||
* Startup
|
||||
|
||||
** Emacs server, startup programs, wallpaper
|
||||
#+BEGIN_SRC emacs-lisp
|
||||
(add-hook 'exwm-init-hook 'server-start)
|
||||
|
||||
;; Reminder: Hooks execute in order. Make sure megasync launches after systemtray is enabled
|
||||
(require 'exwm-startup)
|
||||
(add-hook 'exwm-init-hook 'call-startup-programs)
|
||||
|
||||
(require 'exwm-screens)
|
||||
(add-hook 'exwm-init-hook 'my/setup-screens)
|
||||
|
||||
(define-minor-mode exwm-presentation-mode
|
||||
"Make both screen outputs display the same thing"
|
||||
nil nil nil
|
||||
(cond (exwm-presentation-mode
|
||||
(cl-destructuring-bind (primary . secondary) (my/get-screens)
|
||||
(shell-command
|
||||
(format "xrandr --output %s --mode 1920x1080 --same-as %s"
|
||||
(car secondary)
|
||||
primary))
|
||||
(setq exwm-randr-workspace-monitor-plist nil)
|
||||
(exwm-randr-refresh)))
|
||||
(t
|
||||
(my/setup-screens))))
|
||||
#+END_SRC
|
||||
|
||||
** System tray, display time, display battery, display hard-drive-space
|
||||
#+BEGIN_SRC emacs-lisp
|
||||
(require 'exwm-systemtray)
|
||||
(exwm-systemtray-enable)
|
||||
(setq display-time-day-and-date t)
|
||||
|
||||
(defvar my/exclude-buffer-modes '(helm-major-mode messages-buffer-mode special-mode))
|
||||
|
||||
(defun my-buffer-predicate (buf)
|
||||
(with-current-buffer buf
|
||||
(if (memq major-mode my/exclude-buffer-modes)
|
||||
nil
|
||||
(exwm-layout--other-buffer-predicate buf))))
|
||||
|
||||
(add-hook 'exwm-init-hook
|
||||
(lambda ()
|
||||
(interactive)
|
||||
(modify-all-frames-parameters
|
||||
'((buffer-predicate . my-buffer-predicate)))))
|
||||
|
||||
;; Display hard drive space
|
||||
;; (add-hook 'display-time-hook 'update-hard-drive-space-string)
|
||||
|
||||
(display-time-mode)
|
||||
(display-battery-mode)
|
||||
;; (display-hard-drive-space-mode)
|
||||
#+END_SRC
|
||||
* Shutdown
|
||||
#+BEGIN_SRC emacs-lisp
|
||||
(add-hook 'exwm-exit-hook 'org-save-all-org-buffers)
|
||||
;;(add-hook 'exwm-exit-hook 'save-org-agenda-files)
|
||||
(eval-after-load "term"
|
||||
'(progn
|
||||
(define-key term-raw-map (kbd "C-c C-y") 'term-paste)
|
||||
(define-key term-raw-map (kbd "M-x") 'helm-M-x)))
|
||||
#+END_SRC
|
||||
* desktop-environment
|
||||
#+begin_src emacs-lisp
|
||||
(use-package desktop-environment
|
||||
:init
|
||||
(desktop-environment-mode))
|
||||
#+end_src
|
||||
* window-map
|
||||
#+begin_src emacs-lisp
|
||||
(define-prefix-command '*window-map*)
|
||||
(define-key *root-map* (kbd "w") '*window-map*)
|
||||
(define-key *window-map* (kbd "y") 'youtube-split)
|
||||
(define-key *window-map* (kbd "Y") 'big-youtube-split)
|
||||
(define-key *window-map* (kbd "j") 'side-bottom-window)
|
||||
(define-key *window-map* (kbd "h") 'side-left-window)
|
||||
(define-key *window-map* (kbd "l") 'side-right-window)
|
||||
(define-key *window-map* (kbd "d") 'window-toggle-side-windows)
|
||||
#+end_src
|
||||
* Youtube split
|
||||
#+BEGIN_SRC emacs-lisp
|
||||
(defun youtube-split (arg)
|
||||
(interactive "P")
|
||||
(let ((buf (get-buffer "youtube"))
|
||||
(back (current-buffer)))
|
||||
(delete-other-windows)
|
||||
(if buf
|
||||
(switch-to-buffer buf)
|
||||
(when arg
|
||||
(launch-program-with-name "firefox" "youtube")))
|
||||
(side-window-op 'left 472 buf)
|
||||
(switch-to-buffer back)))
|
||||
|
||||
(defun big-youtube-split (arg)
|
||||
(interactive "P")
|
||||
(delete-other-windows)
|
||||
(let ((buf (get-buffer "youtube")))
|
||||
(if buf
|
||||
(switch-to-buffer buf)
|
||||
(when arg
|
||||
(launch-program-with-name "firefox" "youtube")))
|
||||
(side-window-op 'left 630 buf)))
|
||||
|
||||
(defun side-window-op (side &optional size buffer)
|
||||
(let ((prev-win (selected-window))
|
||||
(win (display-buffer-in-side-window
|
||||
(or buffer (current-buffer))
|
||||
`((side . ,side)))))
|
||||
(select-window win)
|
||||
(set-window-dedicated-p win t)
|
||||
(set-window-parameter win 'no-delete-other-windows t)
|
||||
(when size
|
||||
(window-resize win (- size (window-pixel-width)) t nil t))
|
||||
(select-window prev-win)))
|
||||
|
||||
(defun side-left-window ()
|
||||
(interactive)
|
||||
(side-window-op 'left))
|
||||
|
||||
(defun side-right-window ()
|
||||
(interactive)
|
||||
(side-window-op 'right))
|
||||
|
||||
(defun side-bottom-window ()
|
||||
(interactive)
|
||||
(side-window-op 'bottom))
|
||||
|
||||
(setq window-sides-vertical t)
|
||||
#+END_SRC
|
||||
* toggle dedicated
|
||||
#+begin_src emacs-lisp
|
||||
(defun my/toggle-dedicated-window ()
|
||||
(interactive)
|
||||
(let ((win (selected-window)))
|
||||
(set-window-dedicated-p win (not (window-dedicated-p win)))))
|
||||
#+end_src
|
||||
* This is so that I can send fullscreen windows to the back
|
||||
#+begin_src emacs-lisp
|
||||
(cl-defun my/exwm-layout-set-fullscreen (&optional id)
|
||||
"Make window ID fullscreen."
|
||||
(interactive)
|
||||
(exwm--log "id=#x%x" (or id 0))
|
||||
(unless (and (or id (derived-mode-p 'exwm-mode))
|
||||
(not (exwm-layout--fullscreen-p)))
|
||||
(cl-return-from exwm-layout-set-fullscreen))
|
||||
(with-current-buffer (if id (exwm--id->buffer id) (window-buffer))
|
||||
;; Expand the X window to fill the whole screen.
|
||||
(with-slots (x y width height) (exwm-workspace--get-geometry exwm--frame)
|
||||
(exwm--set-geometry exwm--id x y width height))
|
||||
;; Raise the X window.
|
||||
(xcb:+request exwm--connection
|
||||
(make-instance 'xcb:ConfigureWindow
|
||||
:window exwm--id
|
||||
:value-mask (logior xcb:ConfigWindow:BorderWidth
|
||||
xcb:ConfigWindow:StackMode)
|
||||
:border-width 0
|
||||
:stack-mode xcb:StackMode:Above))
|
||||
(xcb:+request exwm--connection
|
||||
(make-instance 'xcb:ewmh:set-_NET_WM_STATE
|
||||
:window exwm--id
|
||||
:data (vector xcb:Atom:_NET_WM_STATE_FULLSCREEN)))
|
||||
(xcb:flush exwm--connection)
|
||||
;;(set-window-dedicated-p (get-buffer-window) t)
|
||||
(cl-pushnew xcb:Atom:_NET_WM_STATE_FULLSCREEN exwm--ewmh-state)
|
||||
(exwm-input--release-keyboard exwm--id)))
|
||||
|
||||
|
||||
(advice-add #'exwm-layout-set-fullscreen :override #'my/exwm-layout-set-fullscreen)
|
||||
#+end_src
|
||||
* Switch window
|
||||
#+BEGIN_SRC emacs-lisp
|
||||
(setq switch-window-input-style 'minibuffer)
|
||||
#+END_SRC
|
||||
* Keybindings
|
||||
#+BEGIN_SRC emacs-lisp
|
||||
(use-package transpose-frame)
|
||||
|
||||
(exwm-global-set-key (kbd "s-r") #'exwm-reset)
|
||||
(exwm-global-set-key (kbd "s-l") #'lock-screen)
|
||||
(exwm-global-set-key (kbd "s-c") #'org-capture)
|
||||
(exwm-global-set-key (kbd "s-n") #'switch-window)
|
||||
(exwm-global-set-key (kbd "s-z") #'resize-window)
|
||||
(exwm-global-set-key (kbd "s-s") #'youtube-split)
|
||||
(exwm-global-set-key (kbd "s-n") #'switch-to-next-buffer)
|
||||
(exwm-global-set-key (kbd "s-p") #'switch-to-prev-buffer)
|
||||
(exwm-global-set-key (kbd "s-a") #'my/toggle-keyboard)
|
||||
(exwm-global-set-key my/keymap-key '*root-map*)
|
||||
|
||||
(exwm-global-set-key (kbd "s-h") 'windmove-left)
|
||||
(exwm-global-set-key (kbd "s-l") 'windmove-right)
|
||||
(define-key desktop-environment-mode-map (kbd "s-l") nil)
|
||||
|
||||
(defun dvorak? ()
|
||||
(string-match-p "de(neo_dvorak)"
|
||||
(shell-command-to-string "setxkbmap -v | grep symbols")))
|
||||
|
||||
(defun set-keyboard (layout)
|
||||
(shell-command (format "setxkbmap %s" layout)))
|
||||
|
||||
(defun my/toggle-keyboard ()
|
||||
(interactive)
|
||||
(if (dvorak?)
|
||||
(set-keyboard "us")
|
||||
(set-keyboard "de neo_dvorak")))
|
||||
|
||||
;; Don't do this one, causes blinking
|
||||
(global-set-key (kbd "C-x p") 'launch-program)
|
||||
;; These have issues, presumably utf8 or something
|
||||
(global-set-key (kbd "M-…") 'multi-term)
|
||||
(global-set-key (kbd "C-ü") 'undo-tree-undo)
|
||||
|
||||
(defun prompt-workspace (&optional prompt)
|
||||
"Prompt for a workspace, returning the workspace frame."
|
||||
(exwm-workspace--update-switch-history)
|
||||
(let* ((current-idx (exwm-workspace--position exwm-workspace--current))
|
||||
(history-add-new-input nil) ;prevent modifying history
|
||||
(history-idx (read-from-minibuffer
|
||||
(or prompt "Workspace: ")
|
||||
(elt exwm-workspace--switch-history current-idx)
|
||||
exwm-workspace--switch-map nil
|
||||
`(exwm-workspace--switch-history . ,current-idx)))
|
||||
(workspace-idx (mod (1- (cl-position history-idx exwm-workspace--switch-history
|
||||
:test #'equal))
|
||||
10)))
|
||||
(elt exwm-workspace--list workspace-idx)))
|
||||
|
||||
(advice-add 'exwm-workspace--prompt-for-workspace
|
||||
:override
|
||||
#'prompt-workspace)
|
||||
#+END_SRC
|
||||
* Simulation keys
|
||||
#+BEGIN_SRC emacs-lisp
|
||||
(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)
|
||||
([?\M-d] . backspace)
|
||||
([?\C-k] . (S-end delete))
|
||||
;; cut/paste.
|
||||
([?\C-w] . ?\C-x)
|
||||
([?\M-w] . ?\C-c)
|
||||
([?\C-y] . ?\C-v)
|
||||
;; search
|
||||
([?\C-s] . ?\C-f)
|
||||
([?\C-.] . ?\C-w)
|
||||
([?\C-/] . ?\C-z)
|
||||
([?\M-s] . ?\C-s)))
|
||||
#+END_SRC
|
||||
|
||||
* Xephyr launches in tiling-mode
|
||||
#+BEGIN_SRC emacs-lisp
|
||||
(setq exwm-manage-configurations `(((equal exwm-class-name "Xephyr")
|
||||
floating nil
|
||||
char-mode t
|
||||
fullscreen t)
|
||||
((equal exwm-class-name "plasmashell")
|
||||
floating t)))
|
||||
#+END_SRC
|
||||
* Floating windows don't need that many faces ^_^
|
||||
#+begin_src emacs-lisp
|
||||
(def-face-copier1 my/frame-dont-copy-faces (sym)
|
||||
(let ((name (symbol-name sym)))
|
||||
(string-match-p "^doom-.*" name))
|
||||
mode-line
|
||||
mode-line-inactive)
|
||||
|
||||
(defun my/exwm-floating--advise-make-frame (orig id)
|
||||
(override1-face my/frame-dont-copy-faces
|
||||
(funcall orig id)))
|
||||
|
||||
(advice-add #'exwm-floating--set-floating
|
||||
:around
|
||||
#'my/exwm-floating--advise-make-frame)
|
||||
#+end_src
|
||||
* tagging
|
||||
#+begin_src emacs-lisp
|
||||
(require 'exwm-tag)
|
||||
#+end_src
|
||||
* exwm-background
|
||||
#+begin_src emacs-lisp
|
||||
(add-to-list 'load-path "~/.emacs.d/submodule/exwm-background/")
|
||||
|
|
@ -317,23 +8,35 @@
|
|||
(setq window-system-default-frame-alist `((x . ((alpha . (,exwm-background/current-transparency . 50))))))
|
||||
(exwm-global-set-key (kbd "s-v") #'exwm-background/toggle-viewing-background)
|
||||
(exwm-global-set-key (kbd "s-b") #'exwm-background/exwm-background-window) ;; TODO: Fix keybinding
|
||||
(define-key desktop-environment-mode-map (kbd "<S-XF86MonBrightnessDown>") #'exwm-background/decrease-transparency)
|
||||
(define-key desktop-environment-mode-map (kbd "<S-XF86MonBrightnessUp>") #'exwm-background/increase-transparency)
|
||||
;; (define-key desktop-environment-mode-map (kbd "<S-XF86MonBrightnessDown>") #'exwm-background/decrease-transparency)
|
||||
;; (define-key desktop-environment-mode-map (kbd "<S-XF86MonBrightnessUp>") #'exwm-background/increase-transparency)
|
||||
(define-key *window-map* (kbd "b") #'exwm-background/exwm-background-window)
|
||||
(define-key *root-map* (kbd "k") #'exwm-background/exwm-send-key-to-background)
|
||||
(define-key *root-map* (kbd "C-k") #'exwm-background/exwm-send-key-to-background-loop)
|
||||
#+end_src
|
||||
* e2wm
|
||||
* window manipulation
|
||||
#+begin_src emacs-lisp
|
||||
(use-package e2wm
|
||||
:bind (("M-+" . e2wm:start-management)))
|
||||
;; The prefix
|
||||
(define-prefix-command '*window-map*)
|
||||
(define-key *root-map* (kbd "w") '*window-map*)
|
||||
|
||||
;; Side-window stuff
|
||||
(use-package resize-window)
|
||||
(require 'side-window-split)
|
||||
(define-key *window-map* (kbd "j") 'side-bottom-window)
|
||||
(define-key *window-map* (kbd "h") 'side-left-window)
|
||||
(define-key *window-map* (kbd "l") 'side-right-window)
|
||||
(define-key *window-map* (kbd "d") 'window-toggle-side-windows)
|
||||
(define-key *window-map* (kbd "r") 'resize-window)
|
||||
|
||||
;; Dedicated window
|
||||
(defun my/toggle-dedicated-window ()
|
||||
(interactive)
|
||||
(let ((win (selected-window)))
|
||||
(set-window-dedicated-p win (not (window-dedicated-p win)))))
|
||||
#+end_src
|
||||
* exwm-edit
|
||||
* tags
|
||||
#+begin_src emacs-lisp
|
||||
(use-package exwm-edit)
|
||||
;; Need my tags
|
||||
(require 'exwm-tag)
|
||||
#+end_src
|
||||
* Volume
|
||||
#+BEGIN_SRC emacs-lisp
|
||||
(use-package volume)
|
||||
(define-key *root-map* (kbd "v") 'volume)
|
||||
#+END_SRC
|
||||
|
|
|
|||
|
|
@ -9,6 +9,24 @@
|
|||
|
||||
;; Don't fricken suspend emacs
|
||||
(global-set-key (kbd "C-z") nil)
|
||||
|
||||
;; Minibuffer reading
|
||||
(setq switch-window-input-style 'minibuffer)
|
||||
|
||||
;; Help window select stuff
|
||||
(setq help-window-select t)
|
||||
|
||||
;; Undo tree is useful
|
||||
(use-package undo-tree)
|
||||
|
||||
;; Beacon-mode
|
||||
(use-package beacon)
|
||||
(beacon-mode 1)
|
||||
(setq beacon-blink-delay 0.1)
|
||||
(setq beacon-color "#006400")
|
||||
|
||||
;; Use my fork of chinese-etzy
|
||||
(load-file "~/.emacs.d/my-etzy.el")
|
||||
#+end_src
|
||||
* exwm
|
||||
#+begin_src emacs-lisp
|
||||
|
|
@ -62,9 +80,79 @@
|
|||
(use-package volume
|
||||
:bind (:map *root-map*
|
||||
("v" . #'volume)))
|
||||
|
||||
;; Shut down
|
||||
(add-hook 'exwm-exit-hook 'org-save-all-org-buffers)
|
||||
|
||||
;; Startup programs
|
||||
(add-hook 'exwm-init-hook 'server-start)
|
||||
|
||||
;; Reminder: Hooks execute in order. Make sure megasync launches after systemtray is enabled
|
||||
(require 'exwm-startup)
|
||||
(add-hook 'exwm-init-hook 'call-startup-programs)
|
||||
|
||||
(require 'exwm-screens)
|
||||
(add-hook 'exwm-init-hook 'my/setup-screens)
|
||||
|
||||
(require 'exwm-systemtray)
|
||||
(exwm-systemtray-enable)
|
||||
|
||||
;; I don't really want to see these buffers
|
||||
(defvar my/exclude-buffer-modes '(helm-major-mode messages-buffer-mode special-mode))
|
||||
|
||||
(defun my-buffer-predicate (buf)
|
||||
(with-current-buffer buf
|
||||
(if (memq major-mode my/exclude-buffer-modes)
|
||||
nil
|
||||
(exwm-layout--other-buffer-predicate buf))))
|
||||
|
||||
(add-hook 'exwm-init-hook
|
||||
(lambda ()
|
||||
(interactive)
|
||||
(modify-all-frames-parameters
|
||||
'((buffer-predicate . my-buffer-predicate)))))
|
||||
#+end_src
|
||||
* keybindings
|
||||
#+begin_src emacs-lisp
|
||||
(defun lock-screen ()
|
||||
(interactive)
|
||||
(shell-command "~/Github/my-projects/i3lock-fancy/i3lock-fancy & disown"))
|
||||
|
||||
(exwm-global-set-key (kbd "s-r") #'exwm-reset)
|
||||
(require 'keyboard-toggle)
|
||||
(exwm-global-set-key (kbd "s-a") #'my/toggle-keyboard)
|
||||
|
||||
(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)
|
||||
([?\M-d] . backspace)
|
||||
([?\C-k] . (S-end delete))
|
||||
;; cut/paste.
|
||||
([?\C-w] . ?\C-x)
|
||||
([?\M-w] . ?\C-c)
|
||||
([?\C-y] . ?\C-v)
|
||||
;; search
|
||||
([?\C-s] . ?\C-f)
|
||||
([?\C-.] . ?\C-w)
|
||||
([?\C-/] . ?\C-z)
|
||||
([?\M-s] . ?\C-s)))
|
||||
#+end_src
|
||||
* theme
|
||||
#+begin_src emacs-lisp
|
||||
;; dashboard looks cool
|
||||
(use-package dashboard)
|
||||
(setq fancy-splash-image "~/.emacs.d/res/icon.png")
|
||||
|
||||
;; Disable tool and menu bar, keep the fringe though
|
||||
(tool-bar-mode -1)
|
||||
(menu-bar-mode -1)
|
||||
|
|
@ -97,6 +185,8 @@
|
|||
(display-battery-mode t)
|
||||
(display-time-mode t)
|
||||
(setq display-time-day-and-date t)
|
||||
(require 'display-hard-drive-space-mode)
|
||||
(display-hard-drive-space-mode)
|
||||
|
||||
;; Roboto mono is nice
|
||||
(when (member "Roboto Mono" (font-family-list))
|
||||
|
|
@ -107,7 +197,7 @@
|
|||
(set-fontset-font t 'unicode (font-spec :size 10 :name "FontAwesome"))
|
||||
(set-fontset-font t 'unicode (font-spec :size 16 :name "DejaVu Sans Mono"))
|
||||
#+end_src
|
||||
* navigation
|
||||
* buffer navigation
|
||||
#+begin_src emacs-lisp
|
||||
;; Allow minibuffer-ception
|
||||
(setq enable-recursive-minibuffers t)
|
||||
|
|
@ -136,6 +226,14 @@
|
|||
(use-package scrollkeeper)
|
||||
(global-set-key (kbd "C-v") 'scrollkeeper-down)
|
||||
(global-set-key (kbd "M-v") 'scrollkeeper-up)
|
||||
|
||||
;; Word navigation
|
||||
(global-set-key (kbd "M-f") 'forward-to-word)
|
||||
(global-set-key (kbd "M-F") 'forward-word)
|
||||
|
||||
;; Goto-char
|
||||
(use-package iy-go-to-char
|
||||
:bind (("M-m" . #'iy-go-to-char)))
|
||||
#+end_src
|
||||
* dired
|
||||
#+begin_src emacs-lisp
|
||||
|
|
@ -158,6 +256,26 @@
|
|||
(define-key dired-mode-map (kbd "i") 'dired-subtree-insert)
|
||||
(define-key dired-mode-map (kbd "I") 'dired-subtree-remove)
|
||||
#+end_src
|
||||
* w3m
|
||||
#+begin_src emacs-lisp
|
||||
;; Remove when Emacs 27 releases
|
||||
(setq w3m-use-tabs nil)
|
||||
(use-package w3m)
|
||||
|
||||
(defun dired-browse-with-w3m (arg)
|
||||
(interactive "P")
|
||||
(let ((browse-url-browser-function (if arg
|
||||
(symbol-function browse-url-browser-function)
|
||||
#'w3m-browse-url)))
|
||||
(browse-url-of-dired-file)))
|
||||
|
||||
(define-key dired-mode-map (kbd "W") 'dired-browse-with-w3m)
|
||||
|
||||
(exwm-global-set-key (kbd "C-c g")
|
||||
(lambda ()
|
||||
(interactive)
|
||||
(w3m-goto-url "https://google.com")))
|
||||
#+end_src
|
||||
* emacs lisp
|
||||
#+begin_src emacs-lisp
|
||||
;; These are the programming facilities I like the most for a minimal
|
||||
|
|
@ -170,9 +288,34 @@
|
|||
|
||||
;; Magit
|
||||
(use-package magit)
|
||||
(use-package magit-popup)
|
||||
(use-package magit-todos)
|
||||
(global-set-key (kbd "C-x g") 'magit-status)
|
||||
(global-set-key (kbd "C-x M-g") 'magit-dispatch)
|
||||
|
||||
;; Push all branches
|
||||
(defun my/magit-push-all ()
|
||||
"Push all branches."
|
||||
(interactive)
|
||||
(magit-run-git-async "push" "-v"
|
||||
(magit-read-remote "Remote")
|
||||
"--all"))
|
||||
|
||||
(transient-append-suffix 'magit-push "m"
|
||||
'("a" "all remotes" my/magit-push-all))
|
||||
|
||||
;; Magit uses ediff
|
||||
(setq ediff-window-setup-function 'ediff-setup-windows-plain)
|
||||
|
||||
(defun ediff-copy-both-to-C ()
|
||||
(interactive)
|
||||
(ediff-copy-diff ediff-current-difference nil 'C nil
|
||||
(concat
|
||||
(ediff-get-region-contents ediff-current-difference 'A ediff-control-buffer)
|
||||
(ediff-get-region-contents ediff-current-difference 'B ediff-control-buffer))))
|
||||
(defun add-d-to-ediff-mode-map () (define-key ediff-mode-map "d" 'ediff-copy-both-to-C))
|
||||
(add-hook 'ediff-keymap-setup-hook 'add-d-to-ediff-mode-map)
|
||||
|
||||
;; Paredit
|
||||
(use-package paredit)
|
||||
(add-hook 'emacs-lisp-mode-hook 'paredit-mode)
|
||||
|
|
@ -262,13 +405,86 @@
|
|||
|
||||
;; Eval buffer, slime-ism
|
||||
(define-key emacs-lisp-mode-map (kbd "C-c C-k") #'eval-buffer)
|
||||
|
||||
;; Make scratch buffers out of nowhere!
|
||||
(defun scratch-buffer ()
|
||||
(interactive)
|
||||
(let ((count 0))
|
||||
(while (get-buffer (format "*scratch%d*" count))
|
||||
(incf count))
|
||||
(switch-to-buffer (get-buffer-create (format "*scratch%d*" count)))
|
||||
(lisp-interaction-mode)
|
||||
(insert (substitute-command-keys initial-scratch-message))))
|
||||
|
||||
;; Eval and replace
|
||||
(defun my/eval-and-replace ()
|
||||
"Replace the preceding sexp with its value."
|
||||
(interactive)
|
||||
(backward-kill-sexp)
|
||||
(condition-case nil
|
||||
(prin1 (eval (read (current-kill 0)))
|
||||
(current-buffer))
|
||||
(error (message "Invalid expression")
|
||||
(insert (current-kill 0)))))
|
||||
|
||||
(define-key emacs-lisp-mode-map (kbd "C-c C-e") 'my/eval-and-replace)
|
||||
|
||||
;; Use cider's eval expression
|
||||
(use-package cider)
|
||||
(autoload 'cider--make-result-overlay "cider-overlays")
|
||||
|
||||
(defun endless/eval-overlay (value point)
|
||||
(cider--make-result-overlay (format "%S" value)
|
||||
:where point
|
||||
:duration 'command)
|
||||
;; Preserve the return value.
|
||||
value)
|
||||
|
||||
(advice-add 'eval-region :around
|
||||
(lambda (f beg end &rest r)
|
||||
(endless/eval-overlay
|
||||
(apply f beg end r)
|
||||
end)))
|
||||
|
||||
(advice-add 'eval-last-sexp :filter-return
|
||||
(lambda (r)
|
||||
(endless/eval-overlay r (point))))
|
||||
|
||||
(advice-add 'eval-defun :filter-return
|
||||
(lambda (r)
|
||||
(endless/eval-overlay
|
||||
r
|
||||
(save-excursion
|
||||
(end-of-defun)
|
||||
(point)))))
|
||||
|
||||
;; expand-region
|
||||
(use-package expand-region)
|
||||
(global-set-key (kbd "C-'") 'er/expand-region)
|
||||
#+end_src
|
||||
* ibuffer
|
||||
#+begin_src emacs-lisp
|
||||
(global-set-key (kbd "C-x C-b") 'ibuffer)
|
||||
|
||||
(setq ibuffer-show-empty-filter-groups nil)
|
||||
|
||||
(add-hook 'ibuffer-mode-hook
|
||||
'(lambda ()
|
||||
(ibuffer-switch-to-saved-filter-groups "default")
|
||||
(ibuffer-do-sort-by-alphabetic)
|
||||
;; (ibuffer-auto-mode)
|
||||
))
|
||||
|
||||
(require 'ibuf-ext)
|
||||
|
||||
(eval-after-load "ibuf-ext"
|
||||
'(define-ibuffer-filter directory-name
|
||||
"Filter files in the agenda folder"
|
||||
(:description "agenda")
|
||||
(and (buffer-file-name buf)
|
||||
(string-match qualifier
|
||||
(buffer-file-name buf)))))
|
||||
|
||||
(add-to-list 'ibuffer-never-show-predicates
|
||||
'(lambda (buf)
|
||||
(with-current-buffer buf
|
||||
|
|
@ -314,28 +530,13 @@
|
|||
("Help" (or (name . "\*Help\*")
|
||||
(name . "\*Apropos\*")
|
||||
(name . "\*info\*"))))))
|
||||
|
||||
(setq ibuffer-show-empty-filter-groups nil)
|
||||
|
||||
(add-hook 'ibuffer-mode-hook
|
||||
'(lambda ()
|
||||
(ibuffer-switch-to-saved-filter-groups "default")
|
||||
(ibuffer-do-sort-by-alphabetic)
|
||||
;; (ibuffer-auto-mode)
|
||||
))
|
||||
|
||||
(eval-after-load "ibuf-ext"
|
||||
'(define-ibuffer-filter directory-name
|
||||
"Filter files in the agenda folder"
|
||||
(:description "agenda")
|
||||
(and (buffer-file-name buf)
|
||||
(string-match qualifier
|
||||
(buffer-file-name buf)))))
|
||||
#+end_src
|
||||
* useful tools
|
||||
** org-mode
|
||||
#+begin_src emacs-lisp
|
||||
(require 'org)
|
||||
|
||||
(setq org-src-window-setup 'current-window)
|
||||
(setq org-use-speed-commands t)
|
||||
#+end_src
|
||||
*** Indent look
|
||||
|
|
@ -393,6 +594,9 @@
|
|||
:config
|
||||
(setq ansi-color-names-vector
|
||||
["black" "red3" "green3" "yellow3" "DodgerBlue2" "magenta3" "cyan3" "gray90"])
|
||||
|
||||
(set-face-attribute 'term-bold t :weight 'bold)
|
||||
(set-face-attribute 'term-color-blue t :background "dodger blue" :foreground "dodger blue")
|
||||
|
||||
(defun find-vterm ()
|
||||
(interactive)
|
||||
|
|
@ -400,54 +604,29 @@
|
|||
(switch-to-buffer b)
|
||||
(vterm))))
|
||||
#+end_src
|
||||
** ledger
|
||||
** posting source code
|
||||
#+begin_src emacs-lisp
|
||||
(use-package ledger-mode
|
||||
:mode "\\.dat\\'"
|
||||
:config
|
||||
(defconst new-report-str (concat "%(binary) -f %(ledger-file) --cleared-format "
|
||||
"'%(justify(scrub(get_at(display_total, 0)), 16, 16 + int(prepend_width), true, color))"
|
||||
" %(justify(scrub(get_at(display_total, 1)), 18, 36 + int(prepend_width), true, color))"
|
||||
" %(justify(scrub(get_at(display_total, 0) - get_at(display_total, 1)), 18, 36 + int(prepend_width), true, color))"
|
||||
" %(latest_cleared ? format_date(latest_cleared) : \" \")"
|
||||
" %(!options.flat ? depth_spacer : \"\")%-(ansify_if(partial_account(options.flat), blue if color))\\n"
|
||||
"%/%$1 %$2 %$3 %$4\\n"
|
||||
"%/%(prepend_width ? \" \" * int(prepend_width) : \"\")---------------- ---------------- ---------------- ---------\\n'"
|
||||
" cleared"))
|
||||
(use-package webpaste)
|
||||
|
||||
(setq ledger-reports
|
||||
`(("account" "%(binary) -f %(ledger-file) reg %(account)")
|
||||
("bal" "%(binary) -f %(ledger-file) bal")
|
||||
("reg" "%(binary) -f %(ledger-file) reg")
|
||||
("cleared" ,new-report-str)
|
||||
;; ("cleared" "%(binary) -f %(ledger-file) cleared")
|
||||
("expmonth" "%(binary) -f %(ledger-file) -M reg Expenses")
|
||||
("owedmom" "%(binary) -f %(ledger-file) reg Liabilities")
|
||||
("progress" "%(binary) -f %(ledger-file) reg Assets Equity Liabilities")
|
||||
;; ("food" "%(binary) -f %(ledger-file) --add-budget reg Assets")
|
||||
("payee" "%(binary) -f %(ledger-file) reg @%(payee)")))
|
||||
|
||||
(setq dynamic-reports
|
||||
'(("budgetcal" "%(binary) -f ~/MEGA/org/entries/food.ledger --daily --add-budget reg Expenses")))
|
||||
|
||||
(defun ledger-dynamic-report ()
|
||||
(interactive)
|
||||
(let* ((ledger-reports dynamic-reports)
|
||||
(report-name (ledger-report-read-name)))
|
||||
(ledger-report report-name nil)))
|
||||
|
||||
(setq ledger-reconcile-buffer-line-format
|
||||
"%(date)s %-4(code)s %-30(payee)s %-30(account)s %15(amount)s\n"))
|
||||
(setq webpaste-paste-confirmation t)
|
||||
(setq webpaste-provider-priority '("ix.io"))
|
||||
#+end_src
|
||||
** encryption
|
||||
** wgrep
|
||||
#+begin_src emacs-lisp
|
||||
(require 'epa-file)
|
||||
(epa-file-enable)
|
||||
(setq epa-pinentry-mode 'loopback)
|
||||
(setq epa-file-cache-passphrase-for-symmetric-encryption t)
|
||||
(setenv "GPG_AGENT_INFO" nil)
|
||||
|
||||
(setq epg-gpg-program "gpg2")
|
||||
(setq auth-source-debug t)
|
||||
(setq auth-sources '((:source "~/.emacs.d/secrets/.authinfo.gpg")))
|
||||
(use-package wgrep)
|
||||
#+end_src
|
||||
** Query replace rx
|
||||
#+begin_src emacs-lisp
|
||||
(defun my/query-replace-rx (&rest _)
|
||||
"Call `query-replace-regexp', reading regexp in `rx' syntax.
|
||||
Automatically wraps in parens and adds `seq' to the beginning of
|
||||
the form."
|
||||
(interactive)
|
||||
(cl-letf (((symbol-function #'query-replace-read-from) (lambda (&rest _)
|
||||
(--> (read-string "rx form: ")
|
||||
(concat "'(seq " it ")")
|
||||
(read it)
|
||||
(cadr it)
|
||||
(rx-to-string it)))))
|
||||
(call-interactively #'query-replace-regexp)))
|
||||
#+end_src
|
||||
|
|
|
|||
31
init.el
31
init.el
|
|
@ -46,27 +46,30 @@
|
|||
|
||||
(require 'keymap)
|
||||
|
||||
;; It is imperative that this be loaded for a nice emacs
|
||||
;; experience. Only SUPER stable stuff goes in this file, and should
|
||||
;; rarely be modified
|
||||
(org-babel-load-file
|
||||
(expand-file-name "config-minimal.org"
|
||||
user-emacs-directory))
|
||||
|
||||
;; (when (and (eq 'x window-system)
|
||||
;; my/enable-exwm)
|
||||
;; (org-babel-load-file
|
||||
;; (expand-file-name "config-exwm.org"
|
||||
;; user-emacs-directory)))
|
||||
;; Load additional exwm stuff that changes constantly
|
||||
(org-babel-load-file
|
||||
(expand-file-name "config-exwm.org"
|
||||
user-emacs-directory))
|
||||
|
||||
;; (org-babel-load-file
|
||||
;; (expand-file-name "config-base.org"
|
||||
;; user-emacs-directory))
|
||||
;; Next most important thing would be
|
||||
(org-babel-load-file
|
||||
(expand-file-name "config-org.org"
|
||||
user-emacs-directory))
|
||||
|
||||
;; (org-babel-load-file
|
||||
;; (expand-file-name "config-org.org"
|
||||
;; user-emacs-directory))
|
||||
(org-babel-load-file
|
||||
(expand-file-name "config-aux.org"
|
||||
user-emacs-directory))
|
||||
|
||||
;; (org-babel-load-file
|
||||
;; (expand-file-name "my-redefs.org"
|
||||
;; user-emacs-directory))
|
||||
(org-babel-load-file
|
||||
(expand-file-name "my-redefs.org"
|
||||
user-emacs-directory))
|
||||
|
||||
(setq my/finished t)
|
||||
;; Testing pull from windows
|
||||
|
|
|
|||
|
|
@ -71,5 +71,19 @@
|
|||
(exwm-randr-refresh)
|
||||
(setup-wallpaper))
|
||||
|
||||
(define-minor-mode exwm-presentation-mode
|
||||
"Make both screen outputs display the same thing"
|
||||
nil nil nil
|
||||
(cond (exwm-presentation-mode
|
||||
(cl-destructuring-bind (primary . secondary) (my/get-screens)
|
||||
(shell-command
|
||||
(format "xrandr --output %s --mode 1920x1080 --same-as %s"
|
||||
(car secondary)
|
||||
primary))
|
||||
(setq exwm-randr-workspace-monitor-plist nil)
|
||||
(exwm-randr-refresh)))
|
||||
(t
|
||||
(my/setup-screens))))
|
||||
|
||||
(provide 'exwm-screens)
|
||||
;;; exwm-screens.el ends here
|
||||
|
|
|
|||
|
|
@ -24,6 +24,7 @@
|
|||
|
||||
;;; Code:
|
||||
(use-package exwm-x)
|
||||
(use-package hydra)
|
||||
(require 'my-exwmx-quickrun)
|
||||
(require 'exwmx-appconfig)
|
||||
|
||||
|
|
@ -106,5 +107,8 @@
|
|||
("K" (lambda () (interactive) (shell-command "clementine --volume-increase-by 25")))
|
||||
("q" nil))
|
||||
|
||||
(add-to-list 'hydra-props-alist
|
||||
'(clementine-volume-hydra :verbosity 0))
|
||||
|
||||
(provide 'exwm-tag)
|
||||
;;; exwm-tag.el ends here
|
||||
|
|
|
|||
|
|
@ -23,6 +23,7 @@
|
|||
;;; Commentary:
|
||||
|
||||
;;; Code:
|
||||
(require 'exwm)
|
||||
(require 'exwm-launch-program)
|
||||
|
||||
(setq i3-string "Xephyr -br -ac -noreset -resizeable -screen 1920x1080 :8 & sleep 1s; DISPLAY=:8 i3")
|
||||
|
|
@ -46,6 +47,11 @@
|
|||
(interactive)
|
||||
(launch-program kde-string))
|
||||
|
||||
|
||||
(setq exwm-manage-configurations `(((equal exwm-class-name "Xephyr")
|
||||
floating nil
|
||||
char-mode t
|
||||
fullscreen t)
|
||||
((equal exwm-class-name "plasmashell")
|
||||
floating t)))
|
||||
(provide 'xephyr-helper)
|
||||
;;; xephyr-helper.el ends here
|
||||
|
|
|
|||
Loading…
Reference in a new issue