literate-dotfiles/dotfiles/systemd.org

10 KiB

Systemd services and timers

https://www.digitalocean.com/community/tutorials/how-to-use-systemctl-to-manage-systemd-services-and-units

Pass Git

Service

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

  [Service]
  Type=oneshot
  ExecStart=%h/.local/bin/pass_git_sync

Timer

  [Unit]
  Description=Sync Passwords every day
  RefuseManualStart=no
  RefuseManualStop=no
  Wants=network-online.target
  After=network-online.target

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

  [Install]
  WantedBy=default.target

Script

  cd ~/.local/share/buku/ || exit

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

Buku Git

Service

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

  [Service]
  Type=oneshot
  ExecStart=%h/.local/bin/buku_git_push

Timer

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

  [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/.local/bin/checkmail -q

Timer

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

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

  [Install]
  WantedBy=default.target

Script

  while [ -n "$1" ]; do # while loop starts
      case "$1" in
      -a) opt_all='--all' ;; # Check All inboxes
      -v) opt_verbose='--verbose' ;; # Verbose
      -q) opt_quiet='--quiet' ;; # Quiet
      ,*) echo "Option $1 not recognized" ;; # In case you typed a different option
      esac
      shift
  done


  # =============================================================
  # 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)"
  uliege_old="$(ls ~/.mail/uliege/Inbox/new | wc -l)"
  # =============================================================

  # =============================================================
  # Retreive mails
  mbsync $opt_all $opt_verbose gmail-Home esrf-Home ulg-Home uliege-Home 2>/tmp/mbsync.log
  # =============================================================

  # =============================================================
  # 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)"
  uliege_new="$(ls ~/.mail/uliege/Inbox/new | wc -l)"
  # =============================================================

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

  # =============================================================
  # Notification
  if [ "$new" -gt 0 ]; then
    dunstify --replace=98465 'Mails ' "$(($gmail_new+$esrf_new+$ulg_new+$uliege_new)) new mail(s)"
  fi
  # =============================================================

  # =============================================================
  # Indexation and Tags
  if pgrep -f 'mu server'; then
      emacsclient --eval '(mu4e-update-index)'
  else
      mu index $opt_verbose $opt_quiet
  fi
  # =============================================================

Sync mail

Service

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

  [Service]
  Type=oneshot
  ExecStart=%h/.local/bin/checkmail -a -q

Timer

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

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

  [Install]
  WantedBy=default.target

Vdirsyncer

Service

  [Unit]
  Description=Synchronize calendars and contacts
  Documentation=https://vdirsyncer.readthedocs.org/
  Wants=network-online.target
  After=network-online.target

  [Service]
  ExecStart=/usr/bin/vdirsyncer --verbosity "ERROR" sync
  Type=oneshot

Timer

  [Unit]
  Description=Synchronize vdirs

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

  [Install]
  WantedBy=timers.target

SSH Agent

Service

  [Unit]
  Description=SSH key agent

  [Service]
  Type=simple
  Environment=SSH_AUTH_SOCK=%t/ssh-agent.socket
  ExecStart=/usr/bin/ssh-agent -D -a $SSH_AUTH_SOCK

  [Install]
  WantedBy=default.target

Powertop

Service

  [Unit]
  Description=Powertop tunings

  [Service]
  ExecStart=/usr/bin/powertop --auto-tune
  RemainAfterExit=true

  [Install]
  WantedBy=multi-user.target

Mopidy

Service

  [Unit]
  Description=Mopidy music server
  After=avahi-daemon.service
  After=dbus.service
  After=network.target
  After=nss-lookup.target
  After=pulseaudio.service
  After=remote-fs.target
  After=sound.target

  [Service]
  ExecStart=/usr/bin/mopidy --config ~/.config/mopidy/mopidy.conf

  [Install]
  WantedBy=multi-user.target

Brain Website

Service

  [Unit]
  Description=Sync Brain Website everyday
  RefuseManualStart=no
  RefuseManualStop=yes

  [Service]
  Type=oneshot
  ExecStart=%h/.local/bin/brain_git_push

Timer

  [Unit]
  Description=Sync Brain Website everyday
  RefuseManualStart=no
  RefuseManualStop=no
  Wants=network-online.target
  After=network-online.target

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

  [Install]
  WantedBy=default.target

Script

  cd ~/Cloud/brain-website/

  if [[ ! -z $(git status -s content/) ]]
  then
      git add content static && \
          git commit -m "Update Content - $(date +%F)" && \
          git push
      exit
  fi