-
-
Notifications
You must be signed in to change notification settings - Fork 67
07. Configuration Guide
Complete guide for configuring, customizing, and deploying Setup Your Mac from basic parameters to advanced organizational integration.
This guide is organized to take you from basic setup to advanced deployment:
- Jamf Pro Parameters - Essential script configuration
- Basic Customization - User interface and branding
- Advanced Features - Organizational integration and complex setups
- Real-World Examples - Complete configurations for different environments
Configure these 11 parameters when creating the Setup Your Mac policy in Jamf Pro.
-
Variable:
policyJSON - Default: Built-in default configuration
- Purpose: Defines the complete policy configuration including applications, validation methods, and execution order
- Format: JSON string or path to JSON file
- Example: See Policy JSON Structure for detailed examples
-
Variable:
configurationOneName -
Default:
Required - Purpose: Name of the first/minimal configuration option
-
Example:
Essential,Basic,Minimal
-
Variable:
configurationTwoName -
Default:
Recommended - Purpose: Name of the second/standard configuration option
-
Example:
Standard,Professional,Business
-
Variable:
scriptLog -
Default:
/var/log/org.churchofjesuschrist.log - Purpose: Defines where the script writes log entries
-
Example:
/var/log/setup-your-mac.log
-
Variable:
debugMode -
Default:
verbose -
Options:
-
verbose- Detailed logging with line numbers -
true- Basic debug output with sleep delays -
false- Standard operation mode
-
- Purpose: Controls logging verbosity and debugging features
-
Variable:
welcomeDialog -
Default:
userInput -
Options:
-
userInput- Full user input form with customizable fields -
video- Video-based welcome with minimal input -
messageOnly- Simple message dialog -
false- Skip welcome dialog entirely
-
- Purpose: Determines the type of welcome screen presented to users
-
Variable:
completionActionOption -
Default:
Restart Attended -
Options:
-
wait- Wait for user action -
sleep(with seconds) - Wait specified time then continue -
Shut Down- Immediate shutdown -
Shut Down Attended- User-prompted shutdown -
Shut Down Confirm- Confirmation dialog for shutdown -
Restart- Immediate restart -
Restart Attended- User-prompted restart -
Restart Confirm- Confirmation dialog for restart -
Log Out- Immediate logout -
Log Out Attended- User-prompted logout -
Log Out Confirm- Confirmation dialog for logout
-
-
Variable:
requiredMinimumBuild -
Default:
disabled - Purpose: Enforces minimum macOS build requirements
-
Examples:
-
23F- macOS 14.5 (Sonoma) -
22G- macOS 13.6 (Ventura) -
21H- macOS 12.7 (Monterey)
-
-
Variable:
presetConfiguration - Purpose: Automatically selects configuration without user input
-
Options:
- Name of configuration (e.g., "Required", "Recommended", "Complete")
- Must match
configurationOneName,configurationTwoName, orconfigurationThreeName
-
Variable:
webhookURL - Purpose: Microsoft Teams or Slack notifications for completion/failure
-
Examples:
- Teams:
https://outlook.office.com/webhook/your-webhook-url - Slack:
https://hooks.slack.com/services/your-webhook-url
- Teams:
- Purpose: Extended configuration options for special deployments
- Uses: Client identification, custom branding paths, environment-specific settings
Essential customization settings built into the script for branding and user experience.
Configure support contact information displayed throughout the setup process:
# Basic support information
supportTeamName="IT Support Team"
supportTeamPhone="+1 (555) 123-4567"
supportTeamEmail="it-support@company.com"
supportTeamHours="Monday through Friday, 8 a.m. to 5 p.m."
# Web resources
supportTeamChat="chat.company.com"
supportTeamWebsite="support.company.com"
supportKB="KB123456"Control which fields appear in the Welcome dialog:
# Enable/disable user input fields
promptForUsername="true" # Show username field
promptForRealName="true" # Show full name field
promptForEmail="true" # Show email field
promptForComputerName="true" # Show computer name field
promptForAssetTag="true" # Show asset tag field
promptForRoom="true" # Show room field
promptForBuilding="true" # Show building dropdown
promptForDepartment="true" # Show department dropdown
promptForPosition="true" # Show position field
promptForConfiguration="true" # Show configuration dropdown
# Auto-populate fields
prefillUsername="true" # Use current username
prefillRealname="true" # Use current user's full name
prefillEmail="true" # Construct email from username + domain
prefillComputerName="true" # Use current computer name
# Email configuration
emailEnding="@company.com"Configure dropdown lists for organizational structure:
# Buildings list
buildingsListRaw="Headquarters,Branch Office North,Branch Office South,Remote Office"
# Departments list
departmentListRaw="Information Technology,Sales,Marketing,Finance,Human Resources,Operations"
# Positions list (can be dropdown or free text)
positionListRaw="Manager,Director,Analyst,Specialist,Coordinator"
# Set to empty string "" for free text inputDefine the available setup configurations:
# Configuration 1
configurationOneName="Essential"
configurationOneDescription="Critical business applications only"
configurationOneSize="25" # Size in Gibibits for time estimation
# Configuration 2
configurationTwoName="Standard"
configurationTwoDescription="Business apps plus productivity suite"
configurationTwoSize="74"
# Configuration 3
configurationThreeName="Complete"
configurationThreeDescription="Full application suite with extras"
configurationThreeSize="149"Advanced branding, behavior modification, and organizational integration features.
# Remote banner image
brandingBanner="https://company.com/images/setup-banner.jpg"
# Local banner image
brandingBanner="/Library/Application Support/Company/banner.png"
# Banner text overlay
brandingBannerDisplayText="true" # Show text overlay
brandingBannerDisplayText="false" # Hide text overlay# Light mode icon
brandingIconLight="https://company.com/icons/logo-light.png"
# Or local file path
brandingIconLight="/Library/Application Support/Company/logo-light.png"
# Dark mode icon
brandingIconDark="https://company.com/icons/logo-dark.png"
# Or local file path
brandingIconDark="/Library/Application Support/Company/logo-dark.png"Banner Images:
- Dimensions: 1200x300px recommended
- Format: PNG, JPG, or HEIC
- Size: Under 2MB for performance
- Aspect Ratio: 4:1 ratio works best
Icons:
- Dimensions: 512x512px recommended
- Format: PNG with transparency
- Size: Under 500KB
- Style: Clean, recognizable at small sizes
User Input Dialog (Recommended):
welcomeDialog="userInput"- Full user input form
- Organizational data collection
- Asset tag assignment
- Configuration selection
- Network quality testing
Video Dialog:
welcomeDialog="video"- Video-based welcome message
- Minimal user input
- Company introduction
- Simplified setup process
Message Only Dialog:
welcomeDialog="messageOnly"- Simple text message
- Minimal user interaction
- Quick setup start
No Welcome Dialog:
welcomeDialog="false"- Skip welcome entirely
- Direct to main setup
- Automated scenarios
Setup Your Mac uses JSON-based configuration files that define:
- Policy Execution Order: Sequence of Jamf Pro policies
- User Interface Elements: Dialog appearance and branding
- Validation Methods: How to verify successful installations
- Progress Indicators: Real-time feedback to users
{
"trigger": "install-office",
"path": "/Applications/Microsoft Word.app",
"displayName": "Microsoft Office",
"description": "Office productivity suite",
"validation": "Local",
"estimatedInstallTime": "300"
}{
"trigger": "install-adobe-creative",
"path": "/Applications/Adobe Photoshop 2024/Adobe Photoshop 2024.app",
"displayName": "Adobe Creative Suite",
"description": "Creative design and editing applications",
"validation": "Remote",
"validationScript": "/usr/local/bin/validate-adobe.sh",
"estimatedInstallTime": "900",
"icon": "https://cdn.company.com/icons/adobe.png"
}# Convert GB to Gibibits: GB * 7.451
configurationOneSize="25" # ~3.4 GB total
configurationTwoSize="74" # ~10 GB total
configurationThreeSize="149" # ~20 GB total# Correction coefficient for estimation accuracy
correctionCoefficient="1.15" # Add 15% to estimates for safety
# Installation time buffers
configurationOneInstallBuffer="300" # 5 minutes additional
configurationTwoInstallBuffer="600" # 10 minutes additional
configurationThreeInstallBuffer="1200" # 20 minutes additional# Enable/disable network testing
configurationDownloadEstimation="true" # Test network quality
configurationDownloadEstimation="false" # Skip network testing
# Correction coefficient for variable connections
correctionCoefficient="1.25" # 25% buffer for home networkscompletionActionOption="Restart" # Immediate restart
completionActionOption="Restart Attended" # User-prompted restart
completionActionOption="Restart Confirm" # Confirmation dialog# Custom script execution
completionActionOption="/usr/local/bin/post-setup-script.sh"
# Launch specific application
completionActionOption="open '/Applications/Self Service.app'"
# Wait periods
completionActionOption="sleep 300" # Wait 5 minutes
completionActionOption="wait" # Wait for user actionwebhookURL="https://outlook.office.com/webhook/your-webhook-url"webhookURL="https://hooks.slack.com/services/your-webhook-url"# Store webhook URL securely
webhookURL=$(security find-generic-password -s "sym-webhook" -w)
# Validate webhook before using
if curl -s --max-time 10 "${webhookURL}" > /dev/null; then
webHookMessage "success"
fiReal-world deployment scenarios and complete configurations for different organization types.
# Jamf Pro Parameters
scriptLog="/var/log/company-setup.log"
debugMode="false"
welcomeDialog="userInput"
completionActionOption="Restart Attended"
webhookURL="https://hooks.slack.com/services/YOUR/SLACK/WEBHOOK"# Basic information only
promptForUsername="true"
prefillUsername="true"
promptForRealName="true"
prefillRealname="true"
promptForEmail="true"
prefillEmail="true"
emailEnding="@smallbusiness.com"
# Skip complex organizational fields
promptForAssetTag="false"
promptForRoom="false"
promptForBuilding="false"
promptForDepartment="false"
promptForPosition="false"
promptForConfiguration="true"configurationOneName="Standard"
configurationOneDescription="All business applications"
configurationOneSize="45"
# Hide other configurations
configurationTwoName="Standard"
configurationTwoDescription="All business applications"
configurationTwoSize="45"
configurationThreeName="Standard"
configurationThreeDescription="All business applications"
configurationThreeSize="45"[
{
"trigger": "install-office365",
"path": "/Applications/Microsoft Word.app",
"displayName": "Microsoft 365",
"description": "Office productivity suite"
},
{
"trigger": "install-chrome",
"path": "/Applications/Google Chrome.app",
"displayName": "Google Chrome",
"description": "Web browser"
},
{
"trigger": "install-zoom",
"path": "/Applications/zoom.us.app",
"displayName": "Zoom",
"description": "Video conferencing"
},
{
"trigger": "install-security",
"path": "/Applications/CrowdStrike Falcon.app",
"displayName": "Security Software",
"description": "Endpoint protection"
}
]# Comprehensive user data collection
promptForUsername="true"
prefillUsername="true"
promptForRealName="true"
prefillRealname="true"
promptForEmail="true"
prefillEmail="true"
emailEnding="@enterprise.com"
promptForComputerName="true"
prefillComputerName="false" # Let users customize
promptForAssetTag="true"
promptForRoom="true"
promptForBuilding="true"
promptForDepartment="true"
promptForPosition="true"
promptForConfiguration="true"buildingsListRaw="Headquarters NY,Boston Office,Chicago Office,Austin Office,London Office,Tokyo Office,Remote Worker"
departmentListRaw="Engineering,Product Management,Sales,Marketing,Customer Success,Finance,Legal,Human Resources,Information Technology,Operations,Executive"
positionListRaw="Individual Contributor,Senior Individual Contributor,Team Lead,Manager,Senior Manager,Director,Senior Director,Vice President,Executive"configurationOneName="Essential"
configurationOneDescription="Core business applications"
configurationOneSize="35"
configurationTwoName="Professional"
configurationTwoDescription="Business apps plus development tools"
configurationTwoSize="75"
configurationThreeName="Power User"
configurationThreeDescription="Complete suite with creative tools"
configurationThreeSize="120"supportTeamName="Global IT Service Desk"
supportTeamPhone="+1 (800) 555-HELP"
supportTeamEmail="servicedesk@enterprise.com"
supportTeamChat="teams.enterprise.com/it-support"
supportTeamWebsite="servicedesk.enterprise.com"
supportKB="KB789456"
supportTeamHours="24/7 Global Support"# Enhanced security requirements
requiredMinimumBuild="23F" # Latest security updates required
completionActionOption="Restart Confirm" # Ensure proper restart
# Comprehensive user tracking for compliance
promptForUsername="true"
prefillUsername="true"
promptForRealName="true"
prefillRealname="true"
promptForEmail="true"
prefillEmail="true"
emailEnding="@hospital.org"
promptForAssetTag="true" # Required for compliance
promptForBuilding="true"
promptForDepartment="true"
promptForPosition="true"
promptForConfiguration="true"buildingsListRaw="Main Hospital,Outpatient Clinic,Emergency Department,Surgery Center,Administrative Building,Research Facility"
departmentListRaw="Emergency Medicine,Surgery,Cardiology,Radiology,Laboratory,Pharmacy,Nursing,Administration,Information Technology,Compliance"
positionListRaw="Physician,Nurse,Technician,Administrative Staff,IT Staff,Compliance Officer,Research Staff"brandingBanner="/Library/Application Support/Hospital/hipaa-compliance-banner.png"
supportTeamName="IT Security & Compliance"
supportTeamPhone="+1 (555) 555-HELP"
supportTeamEmail="itsecurity@hospital.org"
supportKB="HIPAA-COMPLIANCE-001"# Educational user input
promptForUsername="true"
prefillUsername="true"
promptForRealName="true"
prefillRealname="true"
promptForEmail="true"
prefillEmail="true"
emailEnding="@university.edu"
promptForBuilding="true"
promptForDepartment="true"
promptForPosition="true"
promptForConfiguration="true"
# Skip corporate fields
promptForAssetTag="false"
promptForRoom="false"
promptForComputerName="false"buildingsListRaw="Library,Student Center,Engineering Building,Business School,Liberal Arts,Science Complex,Administration,Residence Hall A,Residence Hall B"
departmentListRaw="Computer Science,Engineering,Business Administration,Liberal Arts,Natural Sciences,Education,Medicine,Law,Student Services,IT Services,Facilities"
positionListRaw="Undergraduate Student,Graduate Student,Faculty,Adjunct Faculty,Research Staff,Administrative Staff,IT Staff"configurationOneName="Student"
configurationOneDescription="Essential applications for students"
configurationOneSize="25"
configurationTwoName="Faculty"
configurationTwoDescription="Teaching and research applications"
configurationTwoSize="50"
configurationThreeName="Research"
configurationThreeDescription="Advanced research and analysis tools"
configurationThreeSize="85"# Network-aware configuration
configurationDownloadEstimation="true"
correctionCoefficient="1.25" # Account for variable home internet
# Simplified for remote setup
promptForUsername="true"
prefillUsername="true"
promptForRealName="true"
prefillRealname="true"
promptForEmail="true"
prefillEmail="true"
emailEnding="@remotecompany.com"
promptForBuilding="false" # Not applicable
promptForDepartment="true"
promptForPosition="true"
promptForConfiguration="true"
# Skip physical location fields
promptForRoom="false"
promptForAssetTag="false"# Use regions instead of buildings
buildingsListRaw="North America,Europe,Asia Pacific,Remote - Other"
departmentListRaw="Engineering,Product,Sales,Marketing,Customer Success,Operations,Finance,Human Resources"
positionListRaw="Individual Contributor,Senior Individual Contributor,Team Lead,Manager,Director,VP"supportTeamName="Remote IT Support"
supportTeamPhone="+1 (888) 555-REMOTE"
supportTeamEmail="remote-support@company.com"
supportTeamChat="slack.company.com/channels/it-support"
supportTeamWebsite="help.company.com"
supportTeamHours="Extended hours: 6 a.m. to 10 p.m. PT"# Variables set per client deployment
clientName="${11}" # Use Parameter 11 for client identifier
brandingBanner="https://msp.com/client-assets/${clientName}/banner.png"
brandingIconLight="https://msp.com/client-assets/${clientName}/logo-light.png"
brandingIconDark="https://msp.com/client-assets/${clientName}/logo-dark.png"
emailEnding="@${clientName}.com"supportTeamName="Managed IT Services"
supportTeamPhone="+1 (800) 555-MSP1"
supportTeamEmail="support@msp.com"
supportTeamWebsite="portal.msp.com"
supportTeamHours="24/7 Technical Support"
# Client-specific webhook
webhookURL="https://msp.com/webhooks/${clientName}/notifications"# Client-specific data loaded from external source
buildingsListRaw=$(curl -s "https://msp.com/api/clients/${clientName}/buildings")
departmentListRaw=$(curl -s "https://msp.com/api/clients/${clientName}/departments")configurationOneName="Essential MSP"
configurationOneDescription="Core managed services applications"
configurationOneSize="30"
configurationTwoName="Business MSP"
configurationTwoDescription="Business productivity with managed services"
configurationTwoSize="55"
configurationThreeName="Premium MSP"
configurationThreeDescription="Complete suite with premium support"
configurationThreeSize="85"Examples of advanced customizations for specific organizational needs.
# Different configurations based on department selection
if [[ "${selectedDepartment}" == "Engineering" ]]; then
presetConfiguration="Developer"
elif [[ "${selectedDepartment}" == "Sales" ]]; then
presetConfiguration="Business"
elif [[ "${selectedDepartment}" == "Creative" ]]; then
presetConfiguration="Design"
else
presetConfiguration="Standard"
fi# Different policies based on building location
if [[ "${selectedBuilding}" == "Secure Facility" ]]; then
# Enhanced security policies
presetConfiguration="HighSecurity"
elif [[ "${selectedBuilding}" == "Research Lab" ]]; then
# Research-specific applications
presetConfiguration="Research"
fi# Different access based on position
case "${selectedPosition}" in
"Executive"|"VP"|"Director")
presetConfiguration="Executive"
;;
"Manager"|"Team Lead")
presetConfiguration="Management"
;;
"Individual Contributor")
presetConfiguration="Standard"
;;
*)
presetConfiguration="Basic"
;;
esac# Enhanced audit requirements
requiredMinimumBuild="23F" # Latest security patches
acPowerCheck="required" # Must be connected to power
webhookURL="https://compliance.bank.com/webhook/sox-notifications"
# Comprehensive tracking for audit purposes
promptForAssetTag="true" # Required for asset tracking# HIPAA-specific requirements
brandingBanner="/Library/Application Support/Hospital/hipaa-banner.png"
supportTeamName="IT Security & Compliance"
supportKB="HIPAA-COMPLIANCE-001"
# Enhanced security messaging
configurationOneName="HIPAA Workstation"
configurationOneDescription="HIPAA-compliant clinical applications"Best practices for testing your Setup Your Mac configuration before deployment.
# Enable debug mode for testing
debugMode="verbose"
# Use test webhook for notifications
webhookURL="https://hooks.slack.com/services/TEST/WEBHOOK/URL"
# Test with minimal policies first
# Verify all custom modifications work- Different macOS versions: Test on Monterey, Ventura, Sonoma
- Various Mac models: Intel and Apple Silicon
- Network conditions: Fast, slow, intermittent connections
- User scenarios: New employee, existing employee, power user
- Error conditions: Network failure, policy failure, user cancellation
#!/bin/bash
# Basic configuration validation script
# Test 1: Validate JSON syntax
echo "Testing configuration JSON syntax..."
if echo "${policyJSON}" | jq . >/dev/null 2>&1; then
echo "✅ JSON syntax valid"
else
echo "❌ JSON syntax invalid"
exit 1
fi
# Test 2: Verify required variables
echo "Testing required variables..."
required_vars=("supportTeamName" "supportTeamEmail" "emailEnding")
for var in "${required_vars[@]}"; do
if [[ -n "${!var}" ]]; then
echo "✅ $var is set"
else
echo "❌ $var is not set"
exit 1
fi
done
# Test 3: Validate webhook URL
if [[ -n "${webhookURL}" ]]; then
if curl -s --max-time 10 "${webhookURL}" >/dev/null; then
echo "✅ Webhook URL accessible"
else
echo "⚠️ Webhook URL not accessible"
fi
fi
echo "Configuration validation complete!"- Development Environment: Test with IT team
- Pilot Group: Deploy to 5-10 volunteer users
- Department Rollout: Deploy by department
- Organization-wide: Full deployment after validation
- Developer Reference - Functions, troubleshooting, and technical details
- Best Practices - Security, performance, and operational guidelines
- Setup Your Mac Overview - Main documentation with technical architecture and implementation details
- Policy Validation Methods - Local vs Remote validation strategies
- SYM-Helper Application - Visual configuration tool
- Before You Begin - Prerequisites and requirements
- Jamf Pro Policy Pre-work - Essential Jamf Pro setup steps
- Deployment Methods - Different approaches for deploying Setup Your Mac