;;; -*- lexical-binding: t; -*- ;;; Commentary: ;;; Code: (require 'project) (require 'xdg) (defun bd/set-frame-alpha (value) "Set the transparency of the frame background to VALUE. 0=transparent/100=opaque." (interactive "nTransparency Value (50 - 100 opaque): ") (setq value (max 50 (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 TODO default folder" (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 (directory-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) "Set 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) "Set 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 () "Return 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-shell-p (buf) "Return non-nil if BUF derives from `text-mode'." (member (buffer-local-value 'major-mode (get-buffer buf)) '(shell-mode eshell-mode term-mode vterm-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-shell-p buf) (bd/buffer-scratch-p buf) (bd/buffer-dired-p buf) (bd/buffer-irc-p buf)))) (defun bd/kill-quietly (proc) "Kill PROC quietly." (ignore-errors (cond ((bufferp proc) (kill-buffer proc)) ((stringp proc) (interrupt-process proc))))) (provide 'bd--utility) ;;; bd--utility.el ends here