← Back to Resources

Kandji Apple Dock Cleanup Script

This script safely clears all preloaded macOS Dock items for existing and future users without needing dockutil. It’s compatible with macOS Monterey through Sequoia and can be re-run safely. Ideal for Kandji deployment to provide a clean, minimal Dock setup for new users.

#!/bin/zsh
# Simple: empty the Dock for all users + default template (no dockutil required)
# macOS 12+ (Monterey) through Sequoia compatible. Safe to re-run.

set -euo pipefail

is_real_user() {
  local u="$1"
  local uid
  uid="$(/usr/bin/id -u "$u" 2>/dev/null || echo 0)"
  [[ "$uid" -ge 500 && "$u" != "root" ]]
}

user_home() {
  /usr/bin/dscl . -read "/Users/$1" NFSHomeDirectory 2>/dev/null | awk '{print $2}'
}

empty_user_dock() {
  local user="$1" home="$2"
  [[ -d "$home" ]] || return
  local plist="$home/Library/Preferences/com.apple.dock.plist"

  echo "Clearing Dock for $user ($home)…"
  /bin/mkdir -p "$home/Library/Preferences"

  /usr/bin/defaults write "$plist" persistent-apps -array
  /usr/bin/defaults write "$plist" persistent-others -array
  /usr/bin/defaults write "$plist" show-recents -bool false
  /usr/bin/defaults write "$plist" autohide -bool false

  /usr/sbin/chown "$user":"$(/usr/bin/id -gn "$user")" "$plist" 2>/dev/null || true
  su -l "$user" -c "/usr/bin/killall Dock" 2>/dev/null || true
}

empty_default_template() {
  echo "Clearing Dock in default user templates…"
  for tmpl in "/System/Library/User Template/"*; do
    [[ -d "$tmpl" ]] || continue
    local plist="$tmpl/Library/Preferences/com.apple.dock.plist"
    /bin/mkdir -p "$tmpl/Library/Preferences"

    /usr/bin/defaults write "$plist" persistent-apps -array
    /usr/bin/defaults write "$plist" persistent-others -array
    /usr/bin/defaults write "$plist" show-recents -bool false

    /usr/sbin/chown -R root:wheel "$tmpl"
  done
}

main() {
  /usr/bin/dscl . -list /Users | while read -r u; do
    is_real_user "$u" || continue
    h="$(user_home "$u")"
    [[ -n "$h" ]] && empty_user_dock "$u" "$h"
  done
  empty_default_template
  echo "Done."
}

main

Usage: Save as kandji-apple-dock-cleanup.sh and deploy in Kandji as a “Run as root” script item.