5 Ways to Make Your Mac’s Desktop Better with GeekTool

5 Ways to Make Your Mac’s Desktop Better with GeekTool

Tutorial Details
  • Topics: GeekTool, Command Line
  • Difficulty: Advanced
  • Estimated Completion Time: 60 Minutes

GeekTool is an amazing free app that is a bit like Dashboard for the super nerdy. It allows you to place functional widgets, called “Geeklets,” right on top of your desktop, so you can always see them. Implementation can be a little tricky though so this tutorial will walk you through five different ways to use Geeklets to enhance your desktop experience.

GeekTool
What we’re building today

Getting Started with GeekTool

GeekTool is hands down one of the most useful Mac desktop enhancements that you’ll ever come across. Unfortunately though, the barrier to entry here is pretty high. Whereas Dashboard widgets require merely a drag and drop to implement, Geeklets often require writing custom code.

GeekTool is just friendly enough that both hardcore coders and complete newbies can get something out of it.

If this sounds way too complicated, don’t worry, it’s only moderately complicated. In fact, GeekTool is just friendly enough that both hardcore coders and complete newbies can get something out of it.

To begin, download GeekTool from the Mac App Store. It used to be served up as a Preference Pane, but they’ve changed the format slightly to get it into the App Store.

Here’s the main window:

GeekTool
The Primary GeekTool Window

This is a deceptively simple interface that hides a ton of possibilities. As you can see in the main window on the left, there are three types of Geeklets: File, Image and Shell.

Most of the fun stuff that you can pull off comes from the shell type. If you’re familiar with Terminal, then you’ll likely be able to pull of some cool stuff right from the start. If not, I’ll walk you through some simple scripts below.

Initiating a Geeklet

To create a new Geeklet, simply drag one of the three icons (File, Image or Shell) onto your desktop. This will bring up a blank rectangle with a white outline and a long dark window containing the various options for that Geeklet.

GeekTool
A new empty Geeklet

There are a ton of options in here, but rather than going through them one by one like a boring textbook, we’ll just address each setting as it arises below. In the mean time, let’s skip straight to the good stuff and get you going with some cool Geeklets.


1. The Date

The first thing we’re going to do is put the date on our desktop. Sounds easy enough right? To do so, we’re going to have to write a script. Don’t freak out, it’s really simple, I promise.

To perform its magic, GeekTool accepts shell scripts. The most common place that you see these performed is in Terminal. To see how this works, crack open Terminal, type the word “date” and hit return.

Terminal
A new empty Geeklet

The output should look something like what I received in the image above, which tells me the current day of the week as well as the month, day of the month, time, timezone, and year.

Congratulations! You just wrote a shell script. Pretty easy right? Now let’s jump over to GeekTool and enter the same line of code into the Command field in a Shell Geeklet.

Terminal
Type “date” into the Command field.

Now when we look at our Geeklet on the desktop, it contains some text. This is the exact same output that we saw in Terminal before.

Terminal
A new empty Geeklet

This is not quite what I want though. The format that I’m looking for looks like this: Monday, Oct. 1. So how do we pull that off?

Manipulating the Date

It turns out there are a whole range of ways to manipulate the output that we’re getting from the script. To do this, we add a new snippet after the word “date”.

Terminal
Different Date Commands in Terminal

See how that works? Here’s a larger list that should come in handy.

  • date ‘+%A’ – Monday
  • date ‘+%a’ – Mon
  • date ‘+%B’ – October
  • date ‘+%b’ – Oct
  • date ‘+%m’ – 10 (month number)
  • date ‘+%D’ – 10/01/12
  • date ‘+%d’ – 01 (day of month with zero)
  • date ‘+%e’ – 1 (day of month without zero)
  • date ‘+%Y’ – 2012 (year with four digits)
  • date ‘+%y’ – 12 (year with two digits)

Putting It All Together

Now that we can see how to get all the pieces that we need, we can easily toss them all together into a single script. Copy and paste the following code into the Command field.

date '+%A, %b. %d'

As you can see, I used the long form weekday format followed by a comma, a space, the short form month, a period, a space and finally the day of the month. Once you insert this code, your result should automatically update.

In the Properties window, click on the button near the bottom that says “Click here to set font & color” and customize the text to your liking. I’m keeping things pretty simple so I went with white, 13pt Lucida Grande.

GeekTool
Use simple controls to set the typeface, color and size of the text.

Tip: The default color for a Geeklet’s text is black, so if your desktop is black, you won’t see anything. It’s good to test things out on a lighter color background.

Finishing Up

To finish up our date Geeklet up, resize the containment box so that it’s just a little larger than the text. This will make it easier to select different Geeklets as we add more. Finally, set a refresh rate. Without this, the date will never update. You can choose whatever value that you wish, just understand that the faster the refresh, the more work your computer is doing to keep up.

GeekTool
Resize the container and set a refresh rate.

2. The Time

With all of that great knowledge that we gleaned from the previous step, adding the time to our desktop should be a cinch. In fact, we use the same exact process as before, only this time we’ll need to pick from the pool of date snippets that relate to the time:

  • date ‘+%T’ – 14:03:05
  • date ‘+%X’ – 02:03:05 PM
  • date ‘+%Z’ – MST (Time Zone)
  • date ‘+%p’ – PM
  • date ‘+%l’ – 2 (hour, 12 hour clock, no zero)
  • date ‘+%k’ – 2 (hour, 24 hour clock, no zero)
  • date ‘+%I’ – 02 (hour, 12 hour clock, with zero)
  • date ‘+%H’ – 02 (hour, 24 hour clock, no zero)
  • date ‘+%M’ – 03 (minute)
  • date ‘+%S’ – 05 (second)

All I really want for this is the hour and minute. I’ll use the twelve hour clock with no zeros and no AM/PM. I’m not usually in such a poor mental state that I can’t figure out if it’s morning, afternoon or evening.

With this in mind, drag out a new Shell Geeklet and toss in the following code:

date +"%l:%M"

This should give you a basic time stamp. Now set it to 48pt type and position it under the previous Geeklet. You’ll have to set the refresh rate to be fairly fast on this one so the time stays accurate. I set it to ten seconds but if you really need to the second accuracy, you’ll have to refresh every second.

GeekTool
Make the time larger and set in under the date.

Click on your desktop or hide GeekTool and you’ll see the result of these two scripts. So far so good, let’s move onto the weather!

GeekTool
Make the time larger and set in under the date.

3. The Weather

This is where things get complicated. Grabbing information from the web involves complex grep commands and a thorough knowledge of the required syntax. Unfortunately, if you want weather on your desktop, this is what it takes.

There are tons of GeekTool users out there who have already built almost anything that you could want.

A complete grep rundown is outside of the scope of this article though, so let’s just take the easy way out! There are tons of GeekTool users out there who have already built almost anything that you could want. It’s important to know how to install third party Geeklets, so that’s the process we’ll go through this time around.

There are a million weather Geeklets out there, go download this one by ObiJuan2080 to get started. After you download the file, throw it into a “Geeklets” folder inside of your “Documents” folder so you don’t lose it, then give it a double click.

GeekTool
Double-click the Geeklet to install it

As it launches, you should see a little window pop up that shows you the code that you’re about to run and asks your permission to proceed. Click the “YES” button.

GeekTool
Click “YES” to run the Geeklet

This should cause a new Geeklet to pop up your desktop, likely with the same text styling that we used in the previous step. The only thing that you need to do to the command is find the chunk of code that says “p=10009″ and replace that number with your U.S. zip code.

GeekTool
The weather Geeklet in action

To finish off this step, resize the weather so the text matches the date and place it under the time. Your little group should look something like this:

GeekTool
Our progress so far

4. Reminders

When faced with a difficult task in the last step, we cheated a little bit. Installing third party Geeklets is a big part of the GeekTool experience though, so I’ll allow it. This time though, we’re on our own.

I want something fully custom: Mountain Lion Reminders on my desktop. Now, I know that getting at system data points like this is super easy using AppleScript, so we’ll actually grab the data with that and then use the output for our Geeklet.

Warning: this is some pretty advanced stuff! You may want to brush up on AppleScript first.

The Reminders Dictionary

The first thing that we need to do is learn how to talk to Reminders using AppleScript. To do this, open Script Editor, go to File>Open Dictionary and locate the Reminders dictionary.

AppleScript
The Reminders AppleScript Dictionary

Browsing through here, I get the gist of the basic syntax. There are “lists” which contain “Reminders” that might or might not be “completed” and are identified by their “name”. This verbiage is actually all I need to know to get going on a script.

Writing the Script

With the information that I just learned in mind, I set up two repeat blocks. The first goes through and grabs every reminder in the list “Reminders” (change this name if you have a different list in mind) that is not checked off and completed.

The second repeat block adds some formatting to the previous list so the output looks a little nicer. Then we return the formatted list.

set theList to {}
set theOutput to ""
--osascript /Users/MacBookPrime/Documents/Geeklets/TestScript.scpt
tell application "Reminders"
	repeat with i from 1 to (count of every reminder of list "Reminders")
		if reminder i of list "Reminders" is not completed then
			set theList to theList & name of reminder i of list "Reminders"
		end if
	end repeat
	repeat with i from 1 to (count of every item of theList)
		set theOutput to (theOutput & item i of theList as string) & linefeed & "---" & linefeed
	end repeat
	return theOutput
end tell

If we run this script inside of Script Editor, we can see it working. The “Result” tab should show you the non-completed items in your default todo list. Not bad!

Script Editor
Hit the Play button and watch the Result tab to see if the script worked.

Implementing the Script as a Geeklet

Once you’re finished coding, save out this script in your Geeklets folder. Now go back to GeekTool and drag out a new shell Geeklet. In the Command field, type “osascript” followed by a space and the path to wherever you place the script. Here’s what my command looks like:

osascript /Users/MacBookPrime/Documents/Geeklets/ReminderScript.scpt

Keep in mind that this is only an example, you’ll have to customize it to reflect your own file path. Don’t forget to replace my Home folder’s name with your own. Also be sure to set a refresh rate on this Geeklet so that it updates as you change the contents of your Reminders list.

After you’re finished with that, you’ll have a nice list of Reminders sitting on your desktop. Format it and toss it under the other Geeklets.

GeekTool
Looking good! Just a few finishing touches and we’ll be done.

5. Images & Text

At this point, we could be finished. We’ve got a nice stack of useful Geeklets going, there’s no need to overdo it. However, I’m sure that somewhere along the way, you’ll wonder about placing text and images into a Geeklet, so we should wrap this up by adding some finishing touches to our setup.

Text with Echo

The first thing that I’d like to do is add in a header at the top of our list of reminders to give them some context. We don’t want this header to do much, it just needs to be a simple line of text that says “Reminders” in bold letters.

To pull this off, we can use the “echo” command, which prints out a line of text. Pull out another Shell Geeklet and add the following code:

echo "Reminders"

This should give you the desired line of text to work with, format it up with a bold typeface that’s a little larger than the list items and toss it above the Reminders.

GeekTool
Use the echo command for plain text

Image Geeklets

If you want to add an image to your desktop, just drag out an “Image” Geeklet instead of a Shell Geeklet. These are super easy to work with. All you have to do is enter a URL or hit the “Set local path” button and point to the image that you want to display.

GeekTool
Image Geeklets display an image on your desktop

As you can see, I grabbed the icon for the Reminders app to further reinforce the idea that the list of items on my desktop comes from that app.

GeekTool
Our finished set of Geeklets

Tip: To grab the Reminders icon, hit Command-I on the app in Finder, then select the icon and hit Command-C. Then open Preview, hit Command-N and save as a PNG. You’ll probably want to resize the image as well.


What’s On Your Desktop?

The five methods outlined above should be enough to get off to a strong start with GeekTool. You now know how to write your own commands, install third party Geeklets, convert an AppleScript to a Geeklet and embed text or images on your desktop. You’re a regular GeekTool Pro!

If you use GeekTool regularly, snap a screenshot of your desktop and leave a link below with a description of your Geeklets so we can check it out.

Josh Johnson is secondfret on Graphicriver
Note: Want to add some source code? Type <pre><code> before it and </code></pre> after it. Find out more
  • http://twitter.com/ritec Ri

    I’ve heard this tool utilizes a lot of computer resources, is this correct?

    • John

      I was wondering the same thing. Anybody know?

    • Bob Jonson

      It probably depends on how often you have your GeekLets refreshing.

    • http://www.mac.tutsplus.com/ Josh Johnson

      Definitely depends on how you use it. It can be very minimal, but it can also be fairly processor intensive. Keep an eye on it with Activity Monitor and if you find that it’s eating up too many resources, scale back your refresh times.

    • Jamie R

      Mine uses 0% cpu and 36.8mb ram. So it really is not an issue, though this was with date (86400s, only update once pr day. Have yet to see if it will work correctly with 1 day in seconds), time (60s, because of h:m formatting) and reminder (25s). I guess if you start to make it more advanced like people mention it will hog more cpu. Just set it to have some ok rates and it should be fine.

  • http://guiasapple.com/ SrTapir

    A simple one.

    Some basic Geeklets as: time, weather forecast and battery % (lower left) and a image (line) in the status bar and a point (image) over the apple in the status bar also.

    • envatojosh

      Very nice!

  • SteffenMoll

    Here’s a simple, but stylish example. Selfmade background too.
    Remaining battery power, uptime, and CPU.

    • http://www.mac.tutsplus.com/ Josh Johnson

      Love the type choice.

    • Maciej Kołek

      I want to have just the same ;) Share it with us! :D

  • Chenting

    great post,i love the geek tool but i not good designer.

  • Nick Pavlovits

    Great tutorial! I downloaded geektool a while back but could not figure out how to use it, thanks alot!

  • http://www.greenanysite.com/ Tal Ater

    Here’s my GeekTool powered desktop.

    Minimalistic, but still gives me a quick view of my todo.txt, and date/time just by spreading my fingers in the show desktop gesture.

    • http://twitter.com/rbgiuliani Ricardo B. Giuliani

      Great design! How did you place data behind images?

    • http://www.greenanysite.com/ Tal Ater

      I edited the wallpaper image in Photoshop, masking out the sky…
      Then I placed the wallpaper, and on top of it the text, and on the very top, the masked image.

  • http://www.yoannmoinet.com/ Yoann Moinet

    Wanted to share mine too.
    And for those who are worried with resources, NerdTool is what you need.

  • Dr. Ritalin

    One of the best tutorials for Mac I’ve read till now. Thank you.

  • http://twitter.com/x4mi Henrik Mortensen

    There is an easier way to get reminders working using http://hasseg.org/icalBuddy/
    Basically it lets your interact with calanders and reminders throught terminal commands.

  • DB

    Any one know how display a users home folder space available on geektool?. The Whole Disk space I can do, but want just home folder space used.

  • GFerris

    Fantastic intro! Quick question: for the date, is there anyway to get it to show in Chinese characters?

  • bmenasce

    i did a couple of small things like time, date, weather, network info, and some pictures, as well as my background changing every 5 seconds fading from one colour to the next, and a new dock. still some tweaks and rearranging to be done but its a work in progress

    • EliteLoler

      How do you change the toolbar color?

  • http://twitter.com/bit_jammer Francisco Calle

    Here is mine and the how to: http://bit.ly/Wu4O02

  • http://www.facebook.com/JJ.Adkisson JJ Adkisson

    It’s not working for me on 10.8.3 any fixes?

  • Guest

    This is my desktop. I masked the hill and did an overlay on the time. RSS feed from MacRumors.com and dictionary.reference.com and added weather geeklet on top. I kept it simple, didn’t want to flood it because i wanted to appreciate the landscape background.

  • Rony Canales

    This is my desktop. I kept it simple and clean. Didnt want it to be too distracting. I like to appreciate my backgrounds. I used the weather widget up on top. I masked the hill so that it can overlay on the time. I used a rss feed for mac rumors and dictionary.reference.com to pull the word of the day.

    • http://www.facebook.com/yoshijmc Joshua Carpentier

      This is awesome. Could you walk through how you built this?

      • Rony Canales

        This is where i found my geeklets.

        RSS Feed
        http://tinyurl.com/c3bn5p8

        Word of the Day
        http://tinyurl.com/ctokm93

        Date/Time Day
        http://tinyurl.com/cans5mj

        Weather
        http://tinyurl.com/3gvhes6

        Found a background, then i masked the hill on photoshop and saved it as a PNG to keep transparency.

        I saved the original background as my desktop wallpaper, added an image geeklet on geek tool, and inserted my transparent masked hill (you will need to stretch it to the size of your screen).I added the time geeklet and i placed my masked hill on top of my time geeklet.

        Everything else is just text formatting. I used helvetica neue as my font for everything.

        • Adam

          Have you got a link for the background?

  • Mr.Epic

    How Come I can’t Drag out the empty gray box??? DANG IT!