diff options
-rw-r--r-- | .config/emacs/modules/bd--utility.el | 130 |
1 files changed, 130 insertions, 0 deletions
diff --git a/.config/emacs/modules/bd--utility.el b/.config/emacs/modules/bd--utility.el new file mode 100644 index 0000000..bff3eeb --- /dev/null +++ b/.config/emacs/modules/bd--utility.el @@ -0,0 +1,130 @@ +;;; -*- lexical-binding: t; -*- +;;; Commentary: +;;; Code: + +(defun bd/set-frame-alpha (value) + "Sets the transparency of the frame background. 0=transparent/100=opaque." + (interactive "nTransparency Value (30 - 100 opaque): ") + (setq value (max 30 (min value 100))) + (set-frame-parameter (selected-frame) 'alpha `(,value . ,value)) + (message "Alpha set to %d" value)) + +(defun bd/set-bg (&optional arg) + "Set the current wallpaper using feh. +ARG can be one of the following: + +- nil: set the most recent wallpaper +- directory: set a random image from the directory +- file: set the specified file" + (interactive "f") + (let ((wall (expand-file-name "~/wf/wall/current"))) + (when arg + (cond + ((file-regular-p arg) (copy-file arg wall t)) + ((file-directory-p arg) + (let* ((images (f-files arg (lambda (f) (string-match-p "\\.jpeg\\'" f)))) + (rfile (nth (random (length images)) images))) + (and rfile (copy-file rfile wall t)))))) + (start-process "set wallpaper" nil "feh" "--bg-fill" wall) + (message "Set wallpaper."))) + +(defun bd/lock () + "Lock the screen." + (interactive) + (start-process "lock" nil "slock")) + +(defun bd/shoot-full () + "Take a full-screen screenshot." + (interactive) + (let ((default-directory (xdg-user-dir "PICTURES"))) + (start-process-shell-command "flameshot" nil "flameshot full"))) + +(defun bd/shoot-part () + "Take a selective screen screenshot." + (interactive) + (let ((default-directory (xdg-user-dir "PICTURES"))) + (start-process-shell-command "flameshot" nil "flameshot launcher"))) + +(defun bd/toggle-mute () + "Toggle between muted and unmuted." + (interactive) + (start-process "sound toggle" nil "pactl" "set-sink-mute" "@DEFAULT_SINK@" "toggle")) + +(defun bd/set-volume (value) + "Sets the volume to VALUE." + (start-process "set volume" nil "pactl" "set-sink-volume" "@DEFAULT_SINK@" value)) + +(defun bd/decrement-volume () + "Decrements the volume." + (interactive) + (bd/set-volume "-4%")) + +(defun bd/increment-volume () + "Increments the volume." + (interactive) + (bd/set-volume "+4%")) + +(defun bd/set-brightness (value) + "Sets the brightness to VALUE." + (start-process "set brightness" nil "brightnessctl" "set" value)) + +(defun bd/decrement-brightness () + "decrements the brightness." + (interactive) + (bd/set-brightness "5%-")) + +(defun bd/increment-brightness () + "Increments the brightness." + (interactive) + (bd/set-brightness "5%+")) + +(defun bd/get-directory-dwim () + "Returns the directory you always wanted." + (or (when (project-current) + (project-root (project-current))) ;; git + (locate-dominating-file "." "Makefile") ;; make + (locate-dominating-file "." "manifest.scm") ;; guix + default-directory)) + + (defun bd/buffer-exwm-p (buf) + "Return non-nil if BUF is an `exwm-mode' buffer." + (member + (buffer-local-value 'major-mode (get-buffer buf)) + '(exwm-mode))) + + (defun bd/buffer-scratch-p (buf) + "Return non-nil if BUF is a scratch buffer." + (buffer-local-value 'scratch-buffer (get-buffer buf))) + + (defun bd/buffer-text-p (buf) + "Return non-nil if BUF derives from `text-mode'." + (provided-mode-derived-p (buffer-local-value 'major-mode (get-buffer buf)) 'text-mode)) + + (defun bd/buffer-prog-p (buf) + "Return non-nil if BUF derives from `prog-mode'." + (provided-mode-derived-p (buffer-local-value 'major-mode (get-buffer buf)) 'prog-mode)) + + (defun bd/buffer-dired-p (buf) + "Return non-nil if BUF is a `dired-mode' buffer." + (member + (buffer-local-value 'major-mode (get-buffer buf)) + '(dired-mode))) + + (defun bd/buffer-irc-p (buf) + "Return non-nil if BUF is an `irc-mode' buffer." + (member + (buffer-local-value 'major-mode (get-buffer buf)) + '(rcirc-mode erc-mode))) + + (defun bd/buffer-ordinary-p (buf) + "Return non-nil if BUF does not fit into known categories." + (not (or (bd/buffer-exwm-p buf) + (bd/buffer-text-p buf) + (bd/buffer-prog-p buf) + (bd/buffer-scratch-p buf) + (bd/buffer-dired-p buf) + (bd/buffer-irc-p buf)))) + + +(provide 'bd--utility) +;;; bd--utility.el ends here |