How to control order of startup items for users at login? I have seen a few applications with mixed reviews that will allow a user to change the order of startup items.  I would simply prefer the "bare metal" method and stick to using the shell or the Open Directory / netinfo editor to do this.  I realize that this isn't controlled via launchd so what is the mechanism and where is the preference location for app startup definition?  

I have found OS X's restore app/window process to be less than lackluster and I need to guarantee certain apps start first before others (such as ScreenRecycler as I need applications to open on the other display when they fire up).
If you're using a shell script to open applications, try something like this:

osascript -e 'launch app "ScreenRecycler"'
pgrep -qx Alfred||open -jga Alfred
sleep 10
pgrep -qx Mail||open -jga Mail
pgrep -qx Transmission||open -jga Transmission


You can run the script at login by for example saving the plist below as ~/Library/LaunchAgents/some.label.plist.

&lt;?xml version="1.0" encoding="UTF-8"?&gt;
&lt;!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"&gt;
&lt;plist version="1.0"&gt;
&lt;dict&gt;
  &lt;key&gt;Label&lt;/key&gt;
  &lt;string&gt;some.label&lt;/string&gt;
  &lt;key&gt;ProgramArguments&lt;/key&gt;
  &lt;array&gt;
    &lt;string&gt;bash&lt;/string&gt;
    &lt;string&gt;-c&lt;/string&gt;
    &lt;string&gt;osascript -e 'launch app "ScreenRecycler"'
pgrep -qx Alfred||open -jga Alfred
sleep 10
pgrep -qx Mail||open -jga Mail
pgrep -qx Transmission||open -jga Transmission&lt;/string&gt;
  &lt;/array&gt;
  &lt;key&gt;RunAtLoad&lt;/key&gt;
  &lt;true/&gt;
&lt;/dict&gt;
&lt;/plist&gt;


osascript -e 'launch app "AppName" and osascript -e 'activate app "AppName" are blocked until the application finishes opening. launch doesn't make an application frontmost but activate does. If an application like TextEdit or Mail is not running, launch and activate open a new visible default window. osascript -e 'tell app "TextEdit"' -e reopen -e activate -e end also reopens a default window if TextEdit is running but has no open windows.

open -jg usually opens an application hidden (-j) and without making it frontmost (-g). For some applications like TextEdit and Mail, it opens a new visible window if the application is running but has no open windows. To avoid that, check if the application is already running with for example pgrep. The -j option for open was added in 10.8 and it is only shown in the help message and not on the man page.

lsappinfo launch launchandhide=true nofront=true /Applications/TextEdit.app also always opens TextEdit hidden and without making it frontmost. lsappinfo was added in 10.9. I don't know how to use lsappinfo to wait until an application finishes opening.

The settings for login items are stored in ~/Library/Preferences/com.apple.loginitems.plist. You can add a login item with AppleScript:

osascript -e 'tell application "System Events" to make new login item at end with properties {path:"/Applications/TextEdit.app", name:"TextEdit", hidden:true}'

Some applications and processes are started up via property lists in ~/Library/LaunchAgents/, /Library/LaunchAgents/, or /Library/LaunchDaemons/. _com.apple.SMLoginItemBookmarks in /var/db/launchd.db/com.apple.launchd.peruser.$UID/overrides.plist is used to configure login items for helper applications used by sandboxed applications like ScreenFlow, DayOne, and TuneUp.

Since 10.7 there has been a relatively long delay before some login items or launchd jobs are started. I don't know any way to reduce it, but KeyRemap4MacBook's FAQ says it is caused by Resume:


  KeyRemap4MacBook does not work after boot on OS X 10.7. What should I do?
  
  "Resume" feature introduced by Lion delays launching apps at login.
  
  Until KeyRemap4MacBook.app is launched at login, the keyboard layout is not changed. Please wait a minute until menu of KeyRemap4MacBook is shown.