diff options
-rw-r--r-- | init.org | 4 | ||||
-rw-r--r-- | lib/eos/jao-dirmon.el | 60 | ||||
-rw-r--r-- | lib/eos/jao-shell.el | 37 |
3 files changed, 101 insertions, 0 deletions
@@ -251,6 +251,10 @@ suffixes))) #+end_src +*** Dirs + #+begin_src emacs-lisp + (use-package jao-dirmon) + #+end_src * Crypto *** PGP, EPG, passwords #+begin_src emacs-lisp diff --git a/lib/eos/jao-dirmon.el b/lib/eos/jao-dirmon.el new file mode 100644 index 0000000..e2778bb --- /dev/null +++ b/lib/eos/jao-dirmon.el @@ -0,0 +1,60 @@ +;;; jao-dirmon.el --- little utility to monitor disk usage -*- lexical-binding: t; -*- + +;; Copyright (C) 2022 jao + +;; Author: jao <mail@jao.io> +;; Keywords: tools + +;; This program is free software; you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published by +;; the Free Software Foundation, either version 3 of the License, or +;; (at your option) any later version. + +;; This program is distributed in the hope that it will be useful, +;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;; GNU General Public License for more details. + +;; You should have received a copy of the GNU General Public License +;; along with this program. If not, see <https://www.gnu.org/licenses/>. + +;;; Commentary: + +;; What directories suddenly increased their size? + +;;; Code: + +(require 'multisession) +(require 'jao-shell) + +(define-multisession-variable jao-dirmon-last '()) + +(defun jao-dirmon-dirs () + (jao-shell-cmd-lines "find ~ -mindepth 2 -maxdepth 3 -type d")) + +(defun jao-dirmon-sizes () + (mapcar (lambda (f) + (let ((x (split-string (jao-shell-cmd-line "du -s" f)))) + (cons (cadr x) (string-to-number (car x))))) + (jao-dirmon-dirs))) + +(defvar jao-dirmon-threshold 100000) +(defvar jao-dirmon-last-delta nil) + +;;;###autoload +(defun jao-dirmon-report (&optional remember) + (interactive "P") + (let ((old (multisession-value jao-dirmon-last)) + (current (jao-dirmon-sizes)) + (high ())) + (dolist (c current) + (let ((d (- (cdr c) (alist-get (car c) old 0 nil #'string=)))) + (when (> d jao-dirmon-threshold) + (push c high)))) + (when remember + (setf (multisession-value jao-dirmon-last) current)) + (message "High deltas: %s" (setq jao-dirmon-last-delta high)) + jao-dirmon-last-delta)) + +(provide 'jao-dirmon) +;;; jao-dirmon.el ends here diff --git a/lib/eos/jao-shell.el b/lib/eos/jao-shell.el new file mode 100644 index 0000000..f3ce438 --- /dev/null +++ b/lib/eos/jao-shell.el @@ -0,0 +1,37 @@ +;;; jao-shell.el --- shell utils -*- lexical-binding: t; -*- + +;; Copyright (C) 2022 jao + +;; Author: jao <mail@jao.io> +;; Keywords: shell + +;; This program is free software; you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published by +;; the Free Software Foundation, either version 3 of the License, or +;; (at your option) any later version. + +;; This program is distributed in the hope that it will be useful, +;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;; GNU General Public License for more details. + +;; You should have received a copy of the GNU General Public License +;; along with this program. If not, see <https://www.gnu.org/licenses/>. + +;;; Commentary: + +;; shell helpers + +;;; Code: + +(defun jao-shell-cmd-lines (cmd &rest args) + (let ((cmd (concat cmd " " + (mapconcat #'shell-quote-argument args " ")))) + (split-string (shell-command-to-string cmd) "\n" t))) + + +(defun jao-shell-cmd-line (cmd &rest args) + (car (apply #'jao-shell-cmd-lines cmd args))) + +(provide 'jao-shell) +;;; jao-shell.el ends here |