overtid.nix (1427B)
1 { pkgs, ... }: 2 3 let 4 overtid = pkgs.writeShellScriptBin "overtid" '' 5 # variables 6 time_start="08:30" 7 time_end="18:00" 8 # check for arguments 9 if [ $# -eq 0 ]; then 10 printf "Decimal overtime calculator\\nUsage: %s HH:MM (HH:MM)\\n" "''${0##*/}" 11 exit 1 12 fi 13 # main logic 14 # no second variable, calculate singularly 15 if [ -z ''${2+x} ]; then 16 start="$(date -d "Yesterday $1" "+%s")" 17 if [ "''${time_start:0:2}" -gt "''${1:0:2}" ]; then 18 end="$(date -d "Yesterday $time_start" "+%s")" 19 printf "Early start: %s hours\\n" "$(date -d\@$((end - start)) -u +'scale=2; %H + %M/60' | ${pkgs.bc}/bin/bc)" 20 else 21 end="$(date -d "Yesterday $time_end" "+%s")" 22 printf "Late finish: %s hours\\n" "$(date -d\@$((start - end)) -u +'scale=2; %H + %M/60' | ${pkgs.bc}/bin/bc)" 23 fi 24 # second variable, calculate both and combine 25 else 26 start_am="$(date -d "Yesterday $1" "+%s")" 27 start_pm="$(date -d "Yesterday $2" "+%s")" 28 end_am="$(date -d "Yesterday $time_start" "+%s")" 29 end_pm="$(date -d "Yesterday $time_end" "+%s")" 30 printf "Combined overtimes: %s hours\\n" "$(echo "$(date -d\@$((end_am - start_am)) -u +'scale=2; %H + %M/60' | ${pkgs.bc}/bin/bc)" + "$(date -d\@$((start_pm - end_pm)) -u +'scale=2; %H + %M/60' | ${pkgs.bc}/bin/bc)" | ${pkgs.bc}/bin/bc)" 31 fi 32 ''; 33 34 in { 35 environment.systemPackages = [ overtid ]; 36 }