literate-dotfiles/dotfiles/systemd.org

6.0 KiB

Systemd

Buku Git

Service

  [Unit]
  Description=Sync Bookmarks every day
  RefuseManualStart=no
  RefuseManualStop=yes

  [Service]
  Type=oneshot
  ExecStart=%h/scripts/buku_git_push.sh

Timer

  [Unit]
  Description=Sync All Mails every x hours
  RefuseManualStart=no
  RefuseManualStop=no
  After=network.target network-online.target dbus.socket

  [Timer]
  OnCalendar=*-*-* 16:00:00
  Persistent=true
  Unit=bukugit.service

  [Install]
  WantedBy=default.target

Script

  cd ~/.local/share/buku/

  if [[ ! -z $(git status -s bookmarks.db) ]]
  then
      git add bookmarks.db
      git commit -m "Changed bookmarks - $(date +%F)"
      git push
      exit
  fi

Check mail

Service

  [Unit]
  Description=Check new mails
  RefuseManualStart=no
  RefuseManualStop=yes

  [Service]
  Type=oneshot
  ExecStart=%h/scripts/checkmail.sh

Timer

  [Unit]
  Description=Check Mail every x minutes
  RefuseManualStart=no
  RefuseManualStop=no
  After=network.target network-online.target dbus.socket
  Requires=checkmail.service

  [Timer]
  Persistent=false
  OnBootSec=2min
  OnUnitActiveSec=5min
  AccuracySec=10s
  Unit=checkmail.service

  [Install]
  WantedBy=default.target

Script

  # =============================================================
  # Count number of mails
  gmail_old="$(ls ~/.mail/gmail/Inbox/new | wc -l)"
  esrf_old="$(ls ~/.mail/esrf/Inbox/new | wc -l)"
  ulg_old="$(ls ~/.mail/ulg/Inbox/new | wc -l)"
  # =============================================================

  # =============================================================
  # Retreive mails
  if [ -z "$1" ]; then
      # No argument => just check Inbox
      mbsync gmail-Home esrf-Home ulg-Home
  elif [ "$1" = "all" ]; then
      # Synchronize all mails
      mbsync -a
  fi
  # =============================================================

  # =============================================================
  # Count number of mails
  gmail_new="$(ls ~/.mail/gmail/Inbox/new | wc -l)"
  esrf_new="$(ls ~/.mail/esrf/Inbox/new | wc -l)"
  ulg_new="$(ls ~/.mail/ulg/Inbox/new | wc -l)"
  # =============================================================

  # =============================================================
  # Total Number of new mails since last checking
  new="$(($gmail_new+$esrf_new+$ulg_new))"
  old="$(($gmail_old+$esrf_old+$ulg_old))"
  # =============================================================

  # =============================================================
  # Notification
  if [ "$new" -gt 0 ]; then
      notify-send 'New mail' " $esrf_new$gmail_new$ulg_new"
  fi
  # =============================================================

  # =============================================================
  # Indexation and Tags
  # notmuch new
  # mu index --maildir=~/.mail --quiet
  # Update on Emacs
  if [ "$(($new-$old))" -gt 0 ]; then
      emacsclient --eval '(mu4e-update-index)';
  fi
  # =============================================================

Sync mail

Service

  [Unit]
  Description=Sync all mails
  RefuseManualStart=no
  RefuseManualStop=yes

  [Service]
  Type=oneshot
  ExecStart=%h/scripts/checkmail.sh all

Timer

  [Unit]
  Description=Sync All Mails every x hours
  RefuseManualStart=no
  RefuseManualStop=no
  After=network.target network-online.target dbus.socket
  Requires=syncmail.service

  [Timer]
  Persistent=false
  OnBootSec=30min
  OnUnitActiveSec=300min
  AccuracySec=10s
  Unit=syncmail.service

  [Install]
  WantedBy=default.target

Emacs

Service

  [Unit]
  Description=Emacs text editor
  Documentation=info:emacs man:emacs(1) https://gnu.org/software/emacs/

  [Service]
  Type=simple
  ExecStart=/usr/bin/emacs --fg-daemon
  ExecStop=/usr/bin/emacsclient --eval "(kill-emacs)"
  Environment=SSH_AUTH_SOCK=%t/keyring/ssh
  Restart=on-failure

  [Install]
  WantedBy=default.target

Vdirsyncer

Service

  [Unit]
  Description=Synchronize calendars and contacts
  Documentation=https://vdirsyncer.readthedocs.org/

  [Service]
  ExecStart=/usr/bin/vdirsyncer sync
  Type=oneshot

Timer

  [Unit]
  Description=Synchronize vdirs

  [Timer]
  OnBootSec=5m
  OnUnitActiveSec=15m
  AccuracySec=5m

  [Install]
  WantedBy=timers.target