{"id":1025,"date":"2016-04-06T17:11:26","date_gmt":"2016-04-06T14:11:26","guid":{"rendered":"http:\/\/www.systemcodegeeks.com\/?p=1025"},"modified":"2016-04-03T15:10:50","modified_gmt":"2016-04-03T12:10:50","slug":"managing-dotfiles-ansible","status":"publish","type":"post","link":"https:\/\/www.systemcodegeeks.com\/shell-scripting\/zsh\/managing-dotfiles-ansible\/","title":{"rendered":"Managing Dotfiles With Ansible"},"content":{"rendered":"<p>Yesterday I posted about <a href=\"http:\/\/blog.james-carr.org\/2016\/03\/29\/managing-your-macbook-with-ansible\/\">managing our local configuration with Ansible<\/a> and today I\u2019m going to continue this path by putting my zsh configuration under configuration management.<\/p>\n<h2>Installing ZSH and oh-my-zsh<\/h2>\n<p>First up let\u2019s install our preferred shell and customizations. For me this is <a href=\"http:\/\/www.zsh.org\/\">zsh<\/a> and <a href=\"http:\/\/ohmyz.sh\/\">oh-my-zsh<\/a>. Up front I know that this is going to probably be a multi-step process so I\u2019m going to create a local role to bundle up the tasks and templates we\u2019ll be using. I create a new directory named <code>roles<\/code>and add it to the <code>roles_path<\/code> in our <code>ansible.cfg<\/code>. This new directory with our new role will look like the following.<\/p>\n<pre class=\"brush:bash\">$ tree roles          \r\nroles\r\n\u2514\u2500\u2500 jamescarr.dotfiles\r\n    \u2514\u2500\u2500 tasks\r\n        \u2514\u2500\u2500 main.yaml\r\n<\/pre>\n<p>For our initial set of tasks we\u2019ll install zsh via homebrew, configure zsh as the current user\u2019s shell and install oh-my-zsh.<\/p>\n<pre class=\"brush:bash\">---\r\n- name: Install ZSH\r\n  homebrew:\r\n    name: zsh\r\n    state: latest\r\n\r\n- name: Change current user shell\r\n  user:\r\n    name: \"{{ ansible_ssh_user }}\"\r\n    shell: \/bin\/zsh\r\n  become: yes\r\n\r\n- name: Fetch oh-my-zsh\r\n  get_url:\r\n    url: https:\/\/raw.githubusercontent.com\/robbyrussell\/oh-my-zsh\/master\/tools\/install.sh\r\n    dest: \/tmp\/install-oh-my-zsh.sh\r\n    mode: 0755\r\n\r\n- name: Install oh-my-zsh\r\n  command: zsh \/tmp\/install-oh-my-zsh.sh\r\n<\/pre>\n<p>You can see this change in its entirety <a href=\"https:\/\/github.com\/jamescarr\/ansible-mac-demo\/commit\/dd095b8a6ca46a4887cc2e372ad00280f2af390b\">here<\/a>. Next up we\u2019ll add a template for our zshrc that we can customize to our liking. To start we\u2019ll grab the <a href=\"https:\/\/github.com\/robbyrussell\/oh-my-zsh\/blob\/master\/templates\/zshrc.zsh-template\">zshrc template<\/a> from the oh-my-zsh git repository and save it to <code>jamescarr.dotfiles\/templates\/zshrc.j2<\/code>.<\/p>\n<p>A good first piece of literal text to template out is the zsh theme and the plugins loaded up. We\u2019ll define these with default variables under <code>jamescarr.dotfiles\/defaults\/main.yaml<\/code>.<\/p>\n<pre class=\"brush:bash\">---\r\nzsh_theme: robbyrussell\r\n\r\noh_my_zsh_plugins:\r\n  - git\r\n<\/pre>\n<pre class=\"brush:bash\">- name: Backup existing zshrc if it exists\r\n  copy:\r\n    src: \"\/Users\/{{ ansible_ssh_user }}\/.zshrc\"\r\n    dest: \"\/Users\/{{ ansible_ssh_user }}\/.zshrc-backup.{{ ansible_date_time.epoch }}\"\r\n\r\n- name: Render zshrc\r\n  template:\r\n    src: zshrc.j2\r\n    dest: \"\/Users\/{{ ansible_ssh_user }}\/.zshrc\"\r\n<\/pre>\n<pre class=\"brush:bash\">ZSH_THEME=\"{{ zsh_theme }}\"\r\n\r\n...\r\n\r\nplugins=({{ oh_my_zsh_plugins|join(' ') }})\r\n<\/pre>\n<p>You\u2019ll notice here we\u2019ll also be polite by backing up the existing zshrc file if it is present. A good benefit with this example is that we can now switch up the different pieces of our .zshrc configuration from our playbook by overriding the default variables.<\/p>\n<pre class=\"brush:bash\">  roles:\r\n    - role: geerlingguy.homebrew\r\n    - role: jamescarr.dotfiles\r\n      zsh_theme: bureau\r\n      oh_my_zsh_plugins:\r\n        - git\r\n        - osx\r\n<\/pre>\n<p>You can find everything up to this point at this <a href=\"https:\/\/github.com\/jamescarr\/ansible-mac-demo\/tree\/538db7efd4bb5598cfd3850e7d5dea41c5b3b4e8\">referenced commit in jamescarr\/ansible-mac-demo<\/a>.<\/p>\n<h2>Up Next<\/h2>\n<p>Obviously a topic like zsh customizations is a rather large undertaking deserving of its own post so tomorrow I\u2019ll share some of my personal zsh functions and aliases that I find extremely useful to start off with.<\/p>\n<p>Well did you find the useful? Did you run into any problems following along? Please let me know in the comments below!<\/p>\n<div class=\"attribution\">\n<table>\n<tbody>\n<tr>\n<td><span class=\"reference\">Reference: <\/span><\/td>\n<td><a href=\"http:\/\/blog.james-carr.org\/2016\/03\/30\/managing-dotfiles-with-ansible\/\">Managing Dotfiles With Ansibleetting<\/a> from our <a href=\"http:\/\/www.systemcodegeeks.com\/join-us\/scg\/\">SCG partner<\/a>\u00a0<span data-sheets-value=\"[null,2,&quot;James Carr&quot;]\" data-sheets-userformat=\"[null,null,4224,null,null,null,null,null,null,null,2,null,null,null,null,&quot;arial,sans,sans-serif&quot;]\">James Carr<\/span> at the <a href=\"http:\/\/blog.james-carr.org\/\">Rants and Musings of an Agile Developer<\/a> blog.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>Yesterday I posted about managing our local configuration with Ansible and today I\u2019m going to continue this path by putting my zsh configuration under configuration management. Installing ZSH and oh-my-zsh First up let\u2019s install our preferred shell and customizations. For me this is zsh and oh-my-zsh. Up front I know that this is going to &hellip;<\/p>\n","protected":false},"author":22,"featured_media":203,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[21],"tags":[68],"class_list":["post-1025","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-zsh","tag-ansible"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v26.5 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Managing Dotfiles With Ansible - System Code Geeks - 2026<\/title>\n<meta name=\"description\" content=\"Yesterday I posted about managing our local configuration with Ansible and today I\u2019m going to continue this path by putting my zsh configuration under\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.systemcodegeeks.com\/shell-scripting\/zsh\/managing-dotfiles-ansible\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Managing Dotfiles With Ansible - System Code Geeks - 2026\" \/>\n<meta property=\"og:description\" content=\"Yesterday I posted about managing our local configuration with Ansible and today I\u2019m going to continue this path by putting my zsh configuration under\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.systemcodegeeks.com\/shell-scripting\/zsh\/managing-dotfiles-ansible\/\" \/>\n<meta property=\"og:site_name\" content=\"System Code Geeks\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/systemcodegeeks\" \/>\n<meta property=\"article:published_time\" content=\"2016-04-06T14:11:26+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.systemcodegeeks.com\/wp-content\/uploads\/2016\/01\/zsh-logo.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"150\" \/>\n\t<meta property=\"og:image:height\" content=\"150\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"James Carr\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@systemcodegeeks\" \/>\n<meta name=\"twitter:site\" content=\"@systemcodegeeks\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"James Carr\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"3 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.systemcodegeeks.com\/shell-scripting\/zsh\/managing-dotfiles-ansible\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.systemcodegeeks.com\/shell-scripting\/zsh\/managing-dotfiles-ansible\/\"},\"author\":{\"name\":\"James Carr\",\"@id\":\"https:\/\/www.systemcodegeeks.com\/#\/schema\/person\/9504aaff478a805b152e506abe45ece4\"},\"headline\":\"Managing Dotfiles With Ansible\",\"datePublished\":\"2016-04-06T14:11:26+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.systemcodegeeks.com\/shell-scripting\/zsh\/managing-dotfiles-ansible\/\"},\"wordCount\":350,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/www.systemcodegeeks.com\/#organization\"},\"image\":{\"@id\":\"https:\/\/www.systemcodegeeks.com\/shell-scripting\/zsh\/managing-dotfiles-ansible\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.systemcodegeeks.com\/wp-content\/uploads\/2016\/01\/zsh-logo.jpg\",\"keywords\":[\"Ansible\"],\"articleSection\":[\"ZSH\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.systemcodegeeks.com\/shell-scripting\/zsh\/managing-dotfiles-ansible\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.systemcodegeeks.com\/shell-scripting\/zsh\/managing-dotfiles-ansible\/\",\"url\":\"https:\/\/www.systemcodegeeks.com\/shell-scripting\/zsh\/managing-dotfiles-ansible\/\",\"name\":\"Managing Dotfiles With Ansible - System Code Geeks - 2026\",\"isPartOf\":{\"@id\":\"https:\/\/www.systemcodegeeks.com\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.systemcodegeeks.com\/shell-scripting\/zsh\/managing-dotfiles-ansible\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.systemcodegeeks.com\/shell-scripting\/zsh\/managing-dotfiles-ansible\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.systemcodegeeks.com\/wp-content\/uploads\/2016\/01\/zsh-logo.jpg\",\"datePublished\":\"2016-04-06T14:11:26+00:00\",\"description\":\"Yesterday I posted about managing our local configuration with Ansible and today I\u2019m going to continue this path by putting my zsh configuration under\",\"breadcrumb\":{\"@id\":\"https:\/\/www.systemcodegeeks.com\/shell-scripting\/zsh\/managing-dotfiles-ansible\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.systemcodegeeks.com\/shell-scripting\/zsh\/managing-dotfiles-ansible\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.systemcodegeeks.com\/shell-scripting\/zsh\/managing-dotfiles-ansible\/#primaryimage\",\"url\":\"https:\/\/www.systemcodegeeks.com\/wp-content\/uploads\/2016\/01\/zsh-logo.jpg\",\"contentUrl\":\"https:\/\/www.systemcodegeeks.com\/wp-content\/uploads\/2016\/01\/zsh-logo.jpg\",\"width\":150,\"height\":150},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.systemcodegeeks.com\/shell-scripting\/zsh\/managing-dotfiles-ansible\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.systemcodegeeks.com\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Shell Scripting\",\"item\":\"https:\/\/www.systemcodegeeks.com\/category\/shell-scripting\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"ZSH\",\"item\":\"https:\/\/www.systemcodegeeks.com\/category\/shell-scripting\/zsh\/\"},{\"@type\":\"ListItem\",\"position\":4,\"name\":\"Managing Dotfiles With Ansible\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.systemcodegeeks.com\/#website\",\"url\":\"https:\/\/www.systemcodegeeks.com\/\",\"name\":\"System Code Geeks\",\"description\":\"Operating System Developers Resource Center\",\"publisher\":{\"@id\":\"https:\/\/www.systemcodegeeks.com\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.systemcodegeeks.com\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/www.systemcodegeeks.com\/#organization\",\"name\":\"Exelixis Media P.C.\",\"url\":\"https:\/\/www.systemcodegeeks.com\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.systemcodegeeks.com\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/www.systemcodegeeks.com\/wp-content\/uploads\/2022\/06\/exelixis-logo.png\",\"contentUrl\":\"https:\/\/www.systemcodegeeks.com\/wp-content\/uploads\/2022\/06\/exelixis-logo.png\",\"width\":864,\"height\":246,\"caption\":\"Exelixis Media P.C.\"},\"image\":{\"@id\":\"https:\/\/www.systemcodegeeks.com\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.facebook.com\/systemcodegeeks\",\"https:\/\/x.com\/systemcodegeeks\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.systemcodegeeks.com\/#\/schema\/person\/9504aaff478a805b152e506abe45ece4\",\"name\":\"James Carr\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.systemcodegeeks.com\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/751c55f22a64fa5ac630c3bddaf1a4f4e11c442aaa9fc308004564cdca64b900?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/751c55f22a64fa5ac630c3bddaf1a4f4e11c442aaa9fc308004564cdca64b900?s=96&d=mm&r=g\",\"caption\":\"James Carr\"},\"sameAs\":[\"http:\/\/blog.james-carr.org\/\"],\"url\":\"https:\/\/www.systemcodegeeks.com\/author\/james-carr\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Managing Dotfiles With Ansible - System Code Geeks - 2026","description":"Yesterday I posted about managing our local configuration with Ansible and today I\u2019m going to continue this path by putting my zsh configuration under","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.systemcodegeeks.com\/shell-scripting\/zsh\/managing-dotfiles-ansible\/","og_locale":"en_US","og_type":"article","og_title":"Managing Dotfiles With Ansible - System Code Geeks - 2026","og_description":"Yesterday I posted about managing our local configuration with Ansible and today I\u2019m going to continue this path by putting my zsh configuration under","og_url":"https:\/\/www.systemcodegeeks.com\/shell-scripting\/zsh\/managing-dotfiles-ansible\/","og_site_name":"System Code Geeks","article_publisher":"https:\/\/www.facebook.com\/systemcodegeeks","article_published_time":"2016-04-06T14:11:26+00:00","og_image":[{"width":150,"height":150,"url":"https:\/\/www.systemcodegeeks.com\/wp-content\/uploads\/2016\/01\/zsh-logo.jpg","type":"image\/jpeg"}],"author":"James Carr","twitter_card":"summary_large_image","twitter_creator":"@systemcodegeeks","twitter_site":"@systemcodegeeks","twitter_misc":{"Written by":"James Carr","Est. reading time":"3 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.systemcodegeeks.com\/shell-scripting\/zsh\/managing-dotfiles-ansible\/#article","isPartOf":{"@id":"https:\/\/www.systemcodegeeks.com\/shell-scripting\/zsh\/managing-dotfiles-ansible\/"},"author":{"name":"James Carr","@id":"https:\/\/www.systemcodegeeks.com\/#\/schema\/person\/9504aaff478a805b152e506abe45ece4"},"headline":"Managing Dotfiles With Ansible","datePublished":"2016-04-06T14:11:26+00:00","mainEntityOfPage":{"@id":"https:\/\/www.systemcodegeeks.com\/shell-scripting\/zsh\/managing-dotfiles-ansible\/"},"wordCount":350,"commentCount":0,"publisher":{"@id":"https:\/\/www.systemcodegeeks.com\/#organization"},"image":{"@id":"https:\/\/www.systemcodegeeks.com\/shell-scripting\/zsh\/managing-dotfiles-ansible\/#primaryimage"},"thumbnailUrl":"https:\/\/www.systemcodegeeks.com\/wp-content\/uploads\/2016\/01\/zsh-logo.jpg","keywords":["Ansible"],"articleSection":["ZSH"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.systemcodegeeks.com\/shell-scripting\/zsh\/managing-dotfiles-ansible\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.systemcodegeeks.com\/shell-scripting\/zsh\/managing-dotfiles-ansible\/","url":"https:\/\/www.systemcodegeeks.com\/shell-scripting\/zsh\/managing-dotfiles-ansible\/","name":"Managing Dotfiles With Ansible - System Code Geeks - 2026","isPartOf":{"@id":"https:\/\/www.systemcodegeeks.com\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.systemcodegeeks.com\/shell-scripting\/zsh\/managing-dotfiles-ansible\/#primaryimage"},"image":{"@id":"https:\/\/www.systemcodegeeks.com\/shell-scripting\/zsh\/managing-dotfiles-ansible\/#primaryimage"},"thumbnailUrl":"https:\/\/www.systemcodegeeks.com\/wp-content\/uploads\/2016\/01\/zsh-logo.jpg","datePublished":"2016-04-06T14:11:26+00:00","description":"Yesterday I posted about managing our local configuration with Ansible and today I\u2019m going to continue this path by putting my zsh configuration under","breadcrumb":{"@id":"https:\/\/www.systemcodegeeks.com\/shell-scripting\/zsh\/managing-dotfiles-ansible\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.systemcodegeeks.com\/shell-scripting\/zsh\/managing-dotfiles-ansible\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.systemcodegeeks.com\/shell-scripting\/zsh\/managing-dotfiles-ansible\/#primaryimage","url":"https:\/\/www.systemcodegeeks.com\/wp-content\/uploads\/2016\/01\/zsh-logo.jpg","contentUrl":"https:\/\/www.systemcodegeeks.com\/wp-content\/uploads\/2016\/01\/zsh-logo.jpg","width":150,"height":150},{"@type":"BreadcrumbList","@id":"https:\/\/www.systemcodegeeks.com\/shell-scripting\/zsh\/managing-dotfiles-ansible\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.systemcodegeeks.com\/"},{"@type":"ListItem","position":2,"name":"Shell Scripting","item":"https:\/\/www.systemcodegeeks.com\/category\/shell-scripting\/"},{"@type":"ListItem","position":3,"name":"ZSH","item":"https:\/\/www.systemcodegeeks.com\/category\/shell-scripting\/zsh\/"},{"@type":"ListItem","position":4,"name":"Managing Dotfiles With Ansible"}]},{"@type":"WebSite","@id":"https:\/\/www.systemcodegeeks.com\/#website","url":"https:\/\/www.systemcodegeeks.com\/","name":"System Code Geeks","description":"Operating System Developers Resource Center","publisher":{"@id":"https:\/\/www.systemcodegeeks.com\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.systemcodegeeks.com\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/www.systemcodegeeks.com\/#organization","name":"Exelixis Media P.C.","url":"https:\/\/www.systemcodegeeks.com\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.systemcodegeeks.com\/#\/schema\/logo\/image\/","url":"https:\/\/www.systemcodegeeks.com\/wp-content\/uploads\/2022\/06\/exelixis-logo.png","contentUrl":"https:\/\/www.systemcodegeeks.com\/wp-content\/uploads\/2022\/06\/exelixis-logo.png","width":864,"height":246,"caption":"Exelixis Media P.C."},"image":{"@id":"https:\/\/www.systemcodegeeks.com\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/systemcodegeeks","https:\/\/x.com\/systemcodegeeks"]},{"@type":"Person","@id":"https:\/\/www.systemcodegeeks.com\/#\/schema\/person\/9504aaff478a805b152e506abe45ece4","name":"James Carr","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.systemcodegeeks.com\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/751c55f22a64fa5ac630c3bddaf1a4f4e11c442aaa9fc308004564cdca64b900?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/751c55f22a64fa5ac630c3bddaf1a4f4e11c442aaa9fc308004564cdca64b900?s=96&d=mm&r=g","caption":"James Carr"},"sameAs":["http:\/\/blog.james-carr.org\/"],"url":"https:\/\/www.systemcodegeeks.com\/author\/james-carr\/"}]}},"_links":{"self":[{"href":"https:\/\/www.systemcodegeeks.com\/wp-json\/wp\/v2\/posts\/1025","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.systemcodegeeks.com\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.systemcodegeeks.com\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.systemcodegeeks.com\/wp-json\/wp\/v2\/users\/22"}],"replies":[{"embeddable":true,"href":"https:\/\/www.systemcodegeeks.com\/wp-json\/wp\/v2\/comments?post=1025"}],"version-history":[{"count":0,"href":"https:\/\/www.systemcodegeeks.com\/wp-json\/wp\/v2\/posts\/1025\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.systemcodegeeks.com\/wp-json\/wp\/v2\/media\/203"}],"wp:attachment":[{"href":"https:\/\/www.systemcodegeeks.com\/wp-json\/wp\/v2\/media?parent=1025"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.systemcodegeeks.com\/wp-json\/wp\/v2\/categories?post=1025"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.systemcodegeeks.com\/wp-json\/wp\/v2\/tags?post=1025"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}