add calendar alarms
This commit is contained in:
		
							parent
							
								
									abdc275d86
								
							
						
					
					
						commit
						749516aea6
					
				
							
								
								
									
										65
									
								
								hosts/profiles/desktop/cal-alarms.nix
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										65
									
								
								hosts/profiles/desktop/cal-alarms.nix
									
									
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,65 @@ | ||||||
|  | { pkgs, ... }: | ||||||
|  | 
 | ||||||
|  | { | ||||||
|  |   systemd.services.cal-alarms = { | ||||||
|  |     serviceConfig.Type = "simple"; | ||||||
|  |     path = [ | ||||||
|  |       pkgs.libnotify | ||||||
|  |       pkgs.dunstify | ||||||
|  |       pkgs.khal | ||||||
|  |     ]; | ||||||
|  |     startAt = "*08:00:00"; | ||||||
|  |     script = '' | ||||||
|  |       #!/usr/bin/env bash | ||||||
|  | 
 | ||||||
|  |       cache_file="${XDG_CACHE_HOME:-$HOME/.cache}/khal-events" | ||||||
|  |       # events starting in the next TIMESPAN will trigger an alarm | ||||||
|  |       timespan='60min' | ||||||
|  | 
 | ||||||
|  |       # this is needed for cronjobs and Xorg | ||||||
|  |       export DISPLAY=":0" | ||||||
|  |       snooze_string='💤 Snooze all.' | ||||||
|  |       dismiss_string='✅ Dismiss all.' | ||||||
|  |       # only show events with ⏰ symbol (=has alarm set) | ||||||
|  |       # remove arrows for all-day events to only have one notification | ||||||
|  |       # remove ⏰ symbol because it is obvious | ||||||
|  |       events="$(khal list --format \ | ||||||
|  |         '{cancelled}{start-style}{to-style}{end-style} {title}{description-separator}{description}{location}{repeat-symbol}{alarm-symbol}' \ | ||||||
|  |         now "${timespan}" \ | ||||||
|  |         | sed -ne '/⏰/ p' \ | ||||||
|  |         | sed -e 's/⏰//g' -e 's/\(↦\|↔\|⇥\)[^[:blank:]]*/all-day/g' \ | ||||||
|  |         | column -tl 3)" | ||||||
|  | 
 | ||||||
|  |       # get events that are new compared to cache file | ||||||
|  |       new_events="$(diff -NwU 0 "${cache_file}" - << EOF | sed -ne '/^\+[^+]/ p' \ | ||||||
|  |         | sed -ne 's/^\+\([[:print:]].*\)$/\1/p' | ||||||
|  |       ${events} | ||||||
|  |       EOF | ||||||
|  |       )" | ||||||
|  | 
 | ||||||
|  |       [ -z "${new_events}" ] && exit 0 | ||||||
|  | 
 | ||||||
|  |       action="$(dunstify --action="default,Dismiss" --action="snooze,Snooze" "${new_events}")" | ||||||
|  | 
 | ||||||
|  |       case "${action}" in | ||||||
|  |         "snooze") | ||||||
|  |           ;; | ||||||
|  |         "default") | ||||||
|  |           printf '%s' "${events}" > "${cache_file}" | ||||||
|  |           ;; | ||||||
|  |         *) | ||||||
|  |           printf '%s' "${events}" | grep -Fve "${input}" > "${cache_file}" | ||||||
|  |           ;; | ||||||
|  |       esac | ||||||
|  |     ''; | ||||||
|  |     serviceConfig = { | ||||||
|  |       User = "anish"; | ||||||
|  |       Environment = "DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/1000/bus"; | ||||||
|  |     }; | ||||||
|  |   }; | ||||||
|  |   systemd.timers.cal-alarms = { | ||||||
|  |     wantedBy = [ "timers.target" ]; | ||||||
|  |     partOf = [ "cal-alarms.service" ]; | ||||||
|  |     timerConfig.OnCalendar = [ "*:0/10" ]; | ||||||
|  |   }; | ||||||
|  | } | ||||||
|  | @ -16,7 +16,10 @@ let | ||||||
| in | in | ||||||
| { | { | ||||||
|   # TODO modularize |   # TODO modularize | ||||||
|   imports = [ ./battery-low-timer.nix ]; |   imports = [ | ||||||
|  |     ./battery-low-timer.nix | ||||||
|  |     ./cal-alarms.nix | ||||||
|  |   ]; | ||||||
| 
 | 
 | ||||||
|   # Secrets used by home-manager modules  |   # Secrets used by home-manager modules  | ||||||
|   age.secrets.fastmail.file = "${self}/secrets/fastmail.age"; |   age.secrets.fastmail.file = "${self}/secrets/fastmail.age"; | ||||||
|  |  | ||||||
		Loading…
	
		Reference in a new issue