Skip to main content
Question

Modify the Dock Master Package Script to ignore user template filling

  • August 19, 2019
  • 0 replies
  • 10 views

Forum|alt.badge.img+18

Hey all,
I'm looking for help modifying this Dock Master script to ignore the part about the user template and to just install in the current user that's logged in. I want to create a policy to apply once per user per computer, on login. Can anyone help me tweak this?

#!/bin/bash

# Apply dock to existing user accounts.
APPLY_DOCK_TO_EXISTING_USERS=false

# A dock plist placed in the User Template directory is applied to new user accounts.
USER_TEMPLATE_DOCK_PLIST="/System/Library/User Template/English.lproj/Library/Preferences/com.apple.dock.plist"

# Currently logged in user.
CURRENTLY_LOGGED_IN_USER=$(/usr/bin/python -c 'from SystemConfiguration import SCDynamicStoreCopyConsoleUser; import sys; username = (SCDynamicStoreCopyConsoleUser(None, None, None) or [None])[0]; username = [username,""][username in [u"loginwindow", None, u""]]; sys.stdout.write(username + "
");')

if [[ "$APPLY_DOCK_TO_EXISTING_USERS" == "true" ]]
then
    # Output local home directory path (/Users/username).
    for USER_HOME in /Users/*
    do
        # Extract account name (a.k.a. username) from home directory path.
        ACCOUNT_NAME=$(/usr/bin/basename "${USER_HOME}")

        # If account name is not "Shared".
        if [[ "$ACCOUNT_NAME" != "Shared" ]]
        then
            USER_DOCK_PLIST="${USER_HOME}/Library/Preferences/com.apple.dock.plist"

            # If the account already contains a dock plist.
            if [[ -f "$USER_DOCK_PLIST" ]]
            then
                echo "Removing existing user dock plist."
                /usr/bin/defaults delete "$USER_DOCK_PLIST"
           fi

            echo "Copying the latest dock plist into place."
            cp "$USER_TEMPLATE_DOCK_PLIST" "$USER_DOCK_PLIST"

            echo "Updating permissions to match user (${ACCOUNT_NAME})."
            /usr/sbin/chown -R "$ACCOUNT_NAME" "$USER_DOCK_PLIST"

            # Reboot the dock if a user is currently logged in.
            if [[ "$CURRENTLY_LOGGED_IN_USER" == "$ACCOUNT_NAME" ]]
            then
                # Update cached dock plist.
                /usr/bin/sudo -u "$ACCOUNT_NAME" /usr/bin/defaults read "$USER_DOCK_PLIST"
                # Relaunch the dock process.
                /usr/bin/killall Dock
            fi
        fi
    done
fi