Automaticé toda mi mañana con un banderín y nunca volveré antes.

#!/usr/bin/env python3

import subprocess
import time
import os
from datetime import datetime
import webbrowser

CONFIG = {
"chrome_profile": "Profile 1",
"urls": {
"current_doc": "https://docs.google.com/document/d/YOUR_DOC_ID",
"task_manager": "https://app.asana.com/0/home",
"research_tool": "https://notebooklm.google.com",
"email": "https://mail.google.com",
},
"apps": {
"notes": "Notes",
"calendar": "Calendar",
"slack": "Slack",
},
"docker_services": (),
"delays": {
"email": 300,
"slack": 600,
},
}

def run_command(cmd, shell=False):
try:
result = subprocess.run(cmd, shell=shell, capture_output=True, text=True, check=False)
return result.stdout.strip()
except Exception as e:
print(f"Error: {e}")
return ""

def open_app(app_name):
subprocess.Popen(("open", "-a", app_name))

def open_url(url, profile=None):
if profile:
chrome_path = "/Applications/Google Chrome.app/Contents/MacOS/Google Chrome"
subprocess.Popen((chrome_path, f"--profile-directory={profile}", url))
else:
webbrowser.open(url)

def notify(title, message):
script = f'display notification "{message}" with title "{title}"'
subprocess.run(("osascript", "-e", script))

def start_docker():
for service in CONFIG("docker_services"):
if service.endswith("docker-compose.yml"):
service_dir = os.path.dirname(os.path.expanduser(service))
subprocess.Popen(("docker-compose", "up", "-d"), cwd=service_dir)
else:
subprocess.Popen(("docker", "start", service))

def get_calendar_mode():
now = datetime.now()
hour = now.hour
is_friday = now.weekday() == 4

# check if early meeting (before 10am)
# in efectivo version: pull from gcal api
has_early_meeting = False # placeholder

if is_friday:
return "friday"
elif has_early_meeting:
return "meeting"
elif hour return "deep_work"
else:
return "standard"

def meeting_mode():
open_app(CONFIG("apps")("calendar"))
time.sleep(2)
run_command("""
osascript -e 'tell application "Calendar"
activate
tell application "System Events"
keystroke "f" using {command down, control down}
end tell
end tell
""", shell=True)
open_url(CONFIG("urls")("current_doc"), CONFIG("chrome_profile"))

def deep_work_mode():
open_app(CONFIG("apps")("notes"))
open_url(CONFIG("urls")("task_manager"), CONFIG("chrome_profile"))

def friday_mode():
# point these at presente urls
reporting_doc = "https://docs.google.com/document/d/YOUR_REPORTING_DOC"
analytics = "https://your-analytics-dashboard.com"
open_url(reporting_doc, CONFIG("chrome_profile"))
open_url(analytics, CONFIG("chrome_profile"))

def standard_mode():
open_app(CONFIG("apps")("calendar"))
open_app(CONFIG("apps")("notes"))
open_url(CONFIG("urls")("current_doc"), CONFIG("chrome_profile"))
time.sleep(1)
open_url(CONFIG("urls")("task_manager"), CONFIG("chrome_profile"))
time.sleep(1)
open_url(CONFIG("urls")("research_tool"), CONFIG("chrome_profile"))

def show_briefing():
now = datetime.now()
briefing = f"""Good morning - {now.strftime('%A, %B %d')}

Meetings today:
- (pull from calendar api)

Top priorities:
1.
2.
3.

Reminder: (your thing)
"""
print(briefing)
notify("Morning", "Briefing ready")

def main():
start_docker()
show_briefing()

mode = get_calendar_mode()

if mode == "meeting":
meeting_mode()
elif mode == "deep_work":
deep_work_mode()
elif mode == "friday":
friday_mode()
else:
standard_mode()

# delayed opens
subprocess.Popen((
"python3", "-c",
f"import time; time.sleep({CONFIG('delays')('email')}); "
f"import subprocess; subprocess.run(('open', '{CONFIG('urls')('email')}'))"
))

subprocess.Popen((
"python3", "-c",
f"import time; time.sleep({CONFIG('delays')('slack')}); "
f"import subprocess; subprocess.run(('open', '-a', '{CONFIG('apps')('slack')}'))"
))

if __name__ == "__main__":
main()

Related Posts

HomeKit Secure Video sufre una interrupción de 24 horas mientras continúa el tiempo de inactividad

La plataforma de Apple para imprimir y llevar la batuta imágenes de cámaras de seguridad ha estado experimentando problemas de rendimiento durante más de 24 horas. Aquí están los detalles.…

Probando el escalado de la CPU en Crimson Desert: X3D deseo, pero no por mucho, y Raptor Lake brilla

Desierto carmesí es el tipo de placer que nunca debería ver la luz del día. Creado originalmente como una precuela del popular MMO. Desierto Adverso en lista antiguamente de ser…

You Missed

HomeKit Secure Video sufre una interrupción de 24 horas mientras continúa el tiempo de inactividad

HomeKit Secure Video sufre una interrupción de 24 horas mientras continúa el tiempo de inactividad

Tráiler de SpiderMan: Brand New Day (vídeo)

Tráiler de SpiderMan: Brand New Day (vídeo)

Productos dominicanos siguen su consolidación en el mercado hondureño

Productos dominicanos siguen su consolidación en el mercado hondureño

UE averiguación depreciar la energía en plena refriega de Irán

UE averiguación depreciar la energía en plena refriega de Irán

Papi Sánchez renueva su repertorio musical

Papi Sánchez renueva su repertorio musical

Probando el escalado de la CPU en Crimson Desert: X3D deseo, pero no por mucho, y Raptor Lake brilla

Probando el escalado de la CPU en Crimson Desert: X3D deseo, pero no por mucho, y Raptor Lake brilla