From 012e58699d4183dc27e13d60bf9a85e974d45b07 Mon Sep 17 00:00:00 2001 From: Ryan Schanzenbacher Date: Tue, 21 Jan 2025 11:37:34 -0500 Subject: [PATCH] Added service to periodically clean Downloads folder --- home-config/home-configuration.scm | 3 ++ modules/ryan-services/file-manager.scm | 43 +++++++++++++++++++++++++- 2 files changed, 45 insertions(+), 1 deletion(-) diff --git a/home-config/home-configuration.scm b/home-config/home-configuration.scm index 3e35a56..c837f9e 100644 --- a/home-config/home-configuration.scm +++ b/home-config/home-configuration.scm @@ -195,6 +195,9 @@ (prefer (family "DejaVu Sans Mono"))))) (service home-dbus-service-type) + (service downloads-garbage-collector-service-type + (downloads-garbage-collector-configuration + (user "ryan"))) ;;; trying some changes ;(template-files "." ;'("spotify-player/app.toml" diff --git a/modules/ryan-services/file-manager.scm b/modules/ryan-services/file-manager.scm index 9f0bdc4..1f76d0e 100644 --- a/modules/ryan-services/file-manager.scm +++ b/modules/ryan-services/file-manager.scm @@ -3,10 +3,21 @@ #:use-module (gnu packages base) #:use-module (gnu services) #:use-module (gnu services configuration) + #:use-module (gnu services shepherd) #:use-module (gnu home services) #:use-module (gnu home services shepherd) #:use-module (srfi srfi-1) - #:use-module (guix gexp)) + #:use-module (guix gexp) + #:use-module (guix records) + #:export (downloads-garbage-collector-service-type + downloads-garbage-collector-configuration + downloads-garbage-collector-configuration?)) + +(define-configuration downloads-garbage-collector-configuration + (user + (string "") + "User to run under") + (no-serialization)) (define-public (home-symlinks files) ;; Simple service to symlink two paths. Treats all paths with HOME prepended @@ -23,3 +34,33 @@ #f) (symlink full-path1 full-path2))))) files)) + +(define downloads-garbage-collector-service + (match-record-lambda + (user) + (let ((cleanup-command #~(list "find" (string-append "/home/" #$user "/Downloads") "-mtime" "+7" "-exec" "rm" "-rf" "{}" "';'"))) + (shepherd-service + (documentation "Garbage collect downloaded files more than 1 week old for USER.") + (provision '(downloads-garbage-collector)) + ;(requirement '(root)) + (modules '((shepherd service timer))) + (start #~(make-timer-constructor + (calendar-event #:hours '(8) #:minutes '(20) + #:days-of-week '(tuesday)) + (command #$cleanup-command))) + (stop #~(make-timer-destructor)) + (actions (list (shepherd-action + (name 'trigger) + (documentation "Trigger GC in Downloads folder for USER") + (procedure #~(lambda _ + (system (string-join #$cleanup-command " "))))))))))) + +(define-public downloads-garbage-collector-service-type + (service-type + (name 'downloads-garbage-collector) + (description "Given a USER, clear files older than 1 week from Downloads folder") + (extensions + (list + (service-extension home-shepherd-service-type + (compose list downloads-garbage-collector-service)))) + (default-value (downloads-garbage-collector-configuration))))