tank-log.nix (1759B)
1 { pkgs, username, ... }: 2 3 let 4 tank-log = pkgs.writeShellScriptBin "tank-log" '' 5 # variables 6 git_directory="$HOME/vault/src/logger/" 7 file_git_log="$git_directory/media.log" 8 log_remote="nas:" 9 git_logger="git --git-dir=$git_directory/.git --work-tree=$git_directory" 10 # git configuruation 11 if [ ! -e "$git_directory" ]; then 12 printf "Logger directory not found, quitting...\n" 13 exit 1 14 fi 15 if [ ! -e "$git_directory/.git" ]; then 16 printf "Initialising blank git repo...\n" 17 $git_logger init 18 fi 19 if [ -e "$file_git_log.xz" ]; then 20 printf "Decompressing existing xz archive...\n" 21 xz -d "$file_git_log.xz" 22 fi 23 if [ -e "$file_git_log" ]; then 24 printf "Removing existing log file...\n" 25 rm "$file_git_log" 26 fi 27 printf "Creating log...\n" 28 rclone ls "$log_remote" | sort -k2 >"$file_git_log" 29 printf "Appending size information...\n" 30 rclone size "$log_remote" >>"$file_git_log" 31 printf "Commiting log file to repository...\n" 32 $git_logger add "$file_git_log" 33 $git_logger commit -m "Update: $(date +%F)" 34 if [ -e "$file_git_log.xz" ]; then 35 printf "Removing xz archive...\n" 36 rm "$file_git_log.xz" 37 fi 38 printf "Compressing log file...\n" 39 xz "$file_git_log" 40 printf "Compressing repository...\n" 41 $git_logger config pack.windowMemory 10m 42 $git_logger config pack.packSizeLimit 20m 43 $git_logger gc --aggressive --prune 44 printf "Log complete!\n" 45 ''; 46 in { 47 environment.systemPackages = [tank-log]; 48 49 systemd.timers.tank-log = { 50 wantedBy = [ "timers.target" ]; 51 timerConfig = { 52 OnCalendar = [ "0/12:20:00" ]; 53 Persistent = true; 54 }; 55 }; 56 57 systemd.services.tank-log = { 58 script = "tank-log"; 59 path = [ "/run/current-system/sw" ]; 60 serviceConfig = { 61 Type = "oneshot"; 62 User = "${username}"; 63 }; 64 }; 65 }