nix-configs

Personal NixOS and home-manager configuration files
Log | Files | Refs

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 }