+
+ {% comment %}
+ 8< ============================= until here ==================
+ {% endcomment %} <--------- until this line
+ ```
+
+4. Edit `_config.yml` to customize certain site-wide variables, such as: `carpentry` (to tell your
+ participants the lesson program for your workshop), `curriculum` and `flavor` for the
+ curriculum taught in your workshop, and `title` (overall title for all pages).
+
+ Editing hints are embedded in `_config.yml`,
+ and full instructions are in [the customization instructions][customization].
+
+5. Edit the `schedule.html` file to edit the schedule for your upcoming workshop. This file is
+ located in the `_includes` directory, make sure to choose the one from the appropriate `dc` (Data
+ Carpentry workshop), `lc` (Library Carpentry), or `swc` (Software Carpentry) subdirectory.
+
+### Working locally
+
+> Note: you don't have to do this, if you have already updated your site using the web interface.
+
+
+If you are already familiar with Git, you can clone the repository to your desktop, edit `index.md`,
+`_config.yml`, and `schedule.html` following the instruction above there, and push your changes back to the repository.
+
+```shell
+git clone https://github.com/your_username/YYYY-MM-DD-site
+```
+
+In order to view your changes once you are done editing, if you have bundler installed (see the
+[installation instructions below](#installing-software)), you can preview your site locally with:
+
+```shell
+make serve
+```
+and go to to preview your site.
+
+Before pushing your changes to your repository, we recommend that you also check for any potential
+issues with your site by running:
+
+```shell
+make workshop-check
+```
+
+Once you are satisfied with the edits to your site, commit and push the changes to your repository.
+A few minutes later, you can go to the GitHub Pages URL for your workshop site and preview it. In the example above, this is `https://gvwilson.github.io/2016-12-01-oomza`. [The finished
+page should look something like this](fig/completed-page.png?raw=true).
+
+
+## Optional but Recommended Steps
+
+
+### Update your repository description and link your website
+
+At the top of your repository on GitHub you'll see
+
+~~~
+No description, website, or topics provided. — Edit
+~~~
+
+Click 'Edit' and add:
+
+1. A very brief description of your workshop in the "Description" box (e.g., "Oomza University workshop, Dec. 2016")
+
+2. The URL for your workshop in the "Website" box (e.g., `https://gvwilson.github.io/2016-12-01-oomza`)
+
+This will help people find your website if they come to your repository's home page. You may wish to check the box "Use Github pages link."
+
+### Update the content of the README file
+
+You can change the `README.md` file in your website's repository, which contains these instructions,
+so that it contains a short description of your workshop and a link to the workshop website.
+
+
+## Additional Notes
+
+**Note:**
+please do all of your work in your repository's `gh-pages` branch,
+since [GitHub automatically publishes that as a website][github-project-pages].
+
+**Note:**
+this template includes some files and directories that most workshops do not need,
+but which provide a standard place to put extra content if desired.
+See the [design notes][design] for more information about these.
+
+Further instructions are available in [the customization instructions][customization].
+This [FAQ][faq] includes a few extra tips (additions are always welcome)
+and these notes on [the background and design][design] of this template may help as well.
+
+
+## Creating Extra Pages
+
+In rare cases,
+you may want to add extra pages to your workshop website.
+You can do this by putting either Markdown or HTML pages in the website's root directory
+and styling them according to the instructions give in
+[the lesson template][lesson-example].
+
+
+## Installing Software
+
+If you want to set up Jekyll so that you can preview changes on your own machine before pushing them
+to GitHub, you must install the software described in the lesson example [setup
+instructions](https://carpentries.github.io/lesson-example/setup.html#jekyll-setup-for-lesson-development).
+
+## Setting Up a Separate Repository for Learners
+
+If you are teaching Git,
+you should create a separate repository for learners to use in that lesson.
+You should not have them use the workshop website repository because:
+
+* your workshop website repository contains many files that most learners don't need to see during
+ the lesson, and
+
+* you probably don't want to accidentally merge a damaging pull request from a novice Git user into
+ your workshop's website while you are using it to teach.
+
+You can call this repository whatever you like, and add whatever content you need to it.
+
+## Getting and Giving Help
+
+We are committed to offering a pleasant setup experience for our learners and organizers.
+If you find bugs in our instructions,
+or would like to suggest improvements,
+please [file an issue][issues]
+or [mail us][email].
+
+[email]: mailto:team@carpentries.org
+[customization]: https://carpentries.github.io/workshop-template/customization/index.html
+[dc-site]: https://datacarpentry.org
+[design]: https://carpentries.github.io/workshop-template/design/index.html
+[faq]: https://carpentries.github.io/workshop-template/faq/index.html
+[github-project-pages]: https://help.github.com/en/github/working-with-github-pages/creating-a-github-pages-site
+[issues]: https://github.com/carpentries/workshop-template/issues
+[lesson-example]: https://carpentries.github.io/lesson-example/
+[self-organized-workshop-form]: https://amy.carpentries.org/forms/self-organised/
+[swc-site]: https://software-carpentry.org
+[lc-site]: https://librarycarpentry.org
diff --git a/_config.yml b/_config.yml
new file mode 100644
index 0000000..046f370
--- /dev/null
+++ b/_config.yml
@@ -0,0 +1,156 @@
+#------------------------------------------------------------
+# Values for this workshop.
+#------------------------------------------------------------
+
+# More detailed instructions are available at:
+# https://carpentries.github.io/workshop-template/customization/index.html
+
+# Which carpentry is this ("swc", "dc", "lc", or "cp")?
+# swc: Software Carpentry
+# dc: Data Carpentry
+# lc: Library Carpentry
+# cp: Carpentries (to use for instructor training for instance)
+# incubator: for workshops teaching a lesson in The Carpentries Incubator
+# Note that for regular workshops, you should use:
+# https://github.com/carpentries/workshop-template
+# and for instructor training events you should use:
+# https://github.com/carpentries/training-template
+# When setting this field to "incubator", please uncomment the
+# incubator_lesson_site, incubator_pre_survey, and incubator_post_survey
+# lines further down this file and add the URL to the relevant lesson site.
+carpentry: "swc"
+
+# This option is currently only needed for
+# Data Carpentry and Software Carpentry workshops.
+# The value of the variable will be ignored for Library Carpentry
+# workshops.
+# Possible values are:
+# dc-astronomy: for Data Carpentry Astronomy
+# dc-ecology: for Data Carpentry Ecology
+# dc-genomics: for Data Carpentry Genomics
+# dc-socsci: for Data Carpentry Social Sciences
+# dc-geospatial: for Data Carpentry Geospatial
+# dc-image: for Data Carpentry Image Processing
+# swc-inflammation: for Software Carpentry based on the inflammation dataset
+# swc-gapminder: for Software Carpentry based on the Gapminder dataset
+curriculum: "FIXME"
+
+# If there is both an R and python official version of a curriculum
+# (as listed on https://software-carpentry.org/lessons/ and
+# https://datacarpentry.org/lessons/), change the
+# value of the variable below ("flavor") to get the schedule and installation
+# instructions updated accordingly (valid values are 'r' or 'python').
+# Note: this is only for Data Carpentry and SWC at this time.
+flavor: "FIXME"
+
+# If the workshop will be a lesson pilot (for a new official lesson or
+# a lesson in The Carpentries Incubator), set pilot to "true"
+pilot: false
+
+# Overall title for the Workshop.
+# This variable is used to (optionally) add a title in the "jumbotron"
+# (the grey box at the top of the page), and to the extra pages.
+# Most workshops don't use extra pages. More information about extra
+# pages are included in the README:
+# https://github.com/carpentries/workshop-template#creating-extra-pages
+title: "Workshop Title"
+
+#------------------------------------------------------------
+# Incubator workshop settings (only relevant for workshops teaching a lesson
+# in The Carpentries Incubator).
+#
+# For an Incubator workshop, uncomment the line below and add the URL of the lesson site.
+# incubator_lesson_site: "put the URL of the lesson being taught here"
+#
+# For an Incubator workshop, uncomment the line below and add the URL of your pre-workshop survey
+# incubator_pre_survey: "put the URL of your pre-workshop survey here"
+#
+# For an Incubator workshop, uncomment the line below and add the URL of your post-workshop survey
+# incubator_post_survey: "put the URL of your post-workshop survey here"
+#
+#------------------------------------------------------------
+
+#------------------------------------------------------------
+# Generic settings (should not need to change).
+#------------------------------------------------------------
+
+# This setting (kind) takes configurations from the styles
+# template. Please do not modify this. If you are teaching
+# a custom set of lessons or a single lesson, use a custom
+# schedule.
+kind: "workshop"
+
+# Magic to make URLs resolve both locally and on GitHub.
+# See https://help.github.com/articles/repository-metadata-on-github-pages/.
+# Please don't change it: / is correct.
+repository: /
+
+# Email address, no mailto:
+# (Don't change this -- the contact address for your workshop will be set
+# in the index.md file)
+email: "team@carpentries.org"
+
+# Sites.
+amy_site: "https://amy.carpentries.org"
+carpentries_github: "https://github.com/carpentries"
+carpentries_pages: "https://carpentries.github.io"
+carpentries_site: "https://carpentries.org/"
+dc_site: "https://datacarpentry.org"
+example_repo: "https://github.com/carpentries/lesson-example"
+example_site: "https://carpentries.github.io/lesson-example"
+incubator: "https://carpentries-incubator.org/"
+lc_site: "https://librarycarpentry.org/"
+swc_github: "https://github.com/swcarpentry"
+swc_pages: "https://swcarpentry.github.io"
+swc_site: "https://software-carpentry.org"
+template_repo: "https://github.com/carpentries/styles"
+training_site: "https://carpentries.github.io/instructor-training"
+workshop_repo: "https://github.com/carpentries/workshop-template"
+workshop_site: "https://carpentries.github.io/workshop-template"
+cc_by_human: "https://creativecommons.org/licenses/by/4.0/"
+
+# Surveys.
+pre_survey: "https://carpentries.typeform.com/to/wi32rS?slug="
+post_survey: "https://carpentries.typeform.com/to/UgVdRQ?slug="
+
+# Start time in minutes (0 to be clock-independent, 540 to show a start at 09:00 am).
+start_time: 0
+
+# Specify that things in the episodes collection should be output.
+collections:
+ episodes:
+ output: true
+ permalink: /:path/index.html
+ extras:
+ output: true
+ permalink: /:path/index.html
+
+# Set the default layout for things in the episodes collection.
+defaults:
+ - values:
+ root: .
+ layout: page
+ - scope:
+ path: ""
+ type: episodes
+ values:
+ root: ..
+ layout: episode
+ - scope:
+ path: ""
+ type: extras
+ values:
+ root: ..
+ layout: page
+
+# Files and directories that are not to be copied.
+exclude:
+ - Makefile
+ - bin/
+ - .Rproj.user/
+ - .vendor/
+ - vendor/
+ - .docker-vendor/
+
+# Turn on built-in syntax highlighting.
+highlighter: rouge
diff --git a/_episodes/.gitkeep b/_episodes/.gitkeep
new file mode 100644
index 0000000..e69de29
diff --git a/_episodes_rmd/.gitkeep b/_episodes_rmd/.gitkeep
new file mode 100644
index 0000000..e69de29
diff --git a/_episodes_rmd/data/.gitkeep b/_episodes_rmd/data/.gitkeep
new file mode 100644
index 0000000..e69de29
diff --git a/_extras/.gitkeep b/_extras/.gitkeep
new file mode 100644
index 0000000..e69de29
diff --git a/_extras/about.md b/_extras/about.md
new file mode 100644
index 0000000..aa7beea
--- /dev/null
+++ b/_extras/about.md
@@ -0,0 +1,6 @@
+---
+layout: page
+title: About
+permalink: /about/
+---
+{% include carpentries.html %}
diff --git a/_extras/customization.md b/_extras/customization.md
new file mode 100644
index 0000000..b4ae515
--- /dev/null
+++ b/_extras/customization.md
@@ -0,0 +1,327 @@
+---
+layout: page
+title: Customizing Your Workshop's Website
+permalink: /customization/index.html
+---
+
+## Table of Content
+
+* TOC
+{:toc}
+
+## Configuration File `_config.yml`
+
+You should edit the `_config.yml` configuration file in the root directory of your workshop to
+configure some site-wide variables and make the site function correctly:
+
+* `carpentry` - to tell us which carpentry workshop this is. Possible values are:
+ - `"swc"` for Software Carpentry workshops,
+ - `"dc"` for Data Carpentry workshops,
+ - `"lc"` for Library Carpentry workshops, and
+ - `"cp"` for general Carpentries events such as instructor trainings (for which you should use
+ as the website template).
+ - `"incubator"` for workshops teaching a lesson in The Carpentries Incubator.
+* `curriculum` - to tell us which curriculum is being taught.
+ At the moment, applicable to Software and Data Carpentry workshops only.
+ Possible values are:
+ - `"dc-astronomy"`, `"dc-ecology"`, `"dc-genomics"`, `"dc-socsci"`, `"dc-geospatial"`, or `"dc-image"` for Data Carpentry
+ workshops
+ - `"swc-inflammation"` or `"swc-gapminder"` for Software Carpentry workshops.
+* `flavor` - `"r"` or `"python"` depending on which lessons are being taught at the workshop
+ (currently only for Data Carpentry and Software Carpentry workshops).
+* `pilot` - set this to `true` if the workshop will be a lesson pilot
+ (of a new official lesson or a lesson in The Carpentries Incubator).
+* `title` - overall title for the workshop. If set (i.e., different from "Workshop Title" or empty),
+ it will appear in the "jumbotron" (the gray box at the top of the page). This variable is also
+ used for the title of the extra pages. The README contains [more information about extra pages](https://github.com/carpentries/workshop-template#creating-extra-pages).
+
+### Slug Validation
+
+For workshops teaching a core or mix and match curriculum, i.e.
+where `carpentry` is set to `swc`, `dc`, or `lc`, the website build
+will check that your repository name matches the Carpentries slug
+format - `YYYY-MM-DD-site[-online]`, e.g. `2024-05-07-oomza-online`.
+
+**If your repository name does not match this format, the build will
+fail, and will direct you to rename your workshop website repository
+to a valid slug.** You will then need to commit a change to the repo
+to rebuild the site, e.g. adding a space or other inconsequential
+change to the `README.md`.
+
+Workshop websites using `cp` or `incubator` will go through the same
+check, but the build will not fail if the repo name does not match
+the slug format. You will see a warning in the build output instead.
+
+### Incubator lessons
+
+For workshops teaching lessons in The Carpentries Incubator,
+i.e. where `carpentry` is set to `incubator`,
+you should uncomment the following three fields in
+`_config.yml`:
+
+* `incubator_lesson_site` - the URL of the lesson pages that will be taught at the workshop.
+* `incubator_pre_survey` - the URL of the pre-workshop survey you have prepared for the pilot workshop. (The standard Carpentries pre- and post-workshop surveys should not be used for Incubator workshops.)
+* `incubator_post_survey` - the URL of the post-workshop survey you have prepared for the pilot workshop.
+
+## Site URL
+
+GitHub Pages sites are formatted as `https://GITHUB_USERNAME.github.io/REPOSITORY_NAME`.
+For example, if the URL for your repository is `https://github.com/gvwilson/2015-07-01-oomza`,
+the URL for its website will be `http://gvwilson.github.io/2015-07-01-oomza`.
+
+You should not need to modify any of the other variable values in `_config.yml`.
+
+## Home Page (`index.md`): data in the YAML header
+
+Your workshop's home page lives in `index.md`,
+which must define the values below in its header.
+If your workshop is taught online, see the
+[online workshops section](#for-online-workshops) for customization
+options.
+
+* `layout` must be `workshop`.
+
+* `venue` is the short name of the institution or group hosting the
+ workshop, like "Euphoric State University". It should *not*
+ include the address or other details, since this value is
+ displayed in a table on websites (e.g.,
+ ). See section
+ below for value to use for online workshops.
+
+* `address` is the workshop's address (including details like the
+ room number). The address should be all on one line.
+ See section below for value to use for online workshops.
+
+* `country` must be a two-letter ISO-3166 code for the country in
+ which the workshop is going to take place, such as "fr" (for
+ France) or "nz" (for New Zealand) - see [ISO-3166 codes on Wikipedia](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2#Officially_assigned_code_elements)
+ for a complete list. See section below for value to use for
+ online workshops.
+
+* `language` is the language that will be used in the workshop.
+ It must be an [ISO 639-1 code](https://en.wikipedia.org/wiki/List_of_ISO_639-1_codes).
+ Note that two-letter codes mean different things for countries
+ and languages: "ar" is Arabic when used for a language, but
+ Argentina when used for a country.
+
+* `latitude` and `longitude` are the latitude and longitude of the workshop
+ site (so we can put a pin on our map). You can use
+ [LatLong.net](https://www.latlong.net/) to find these values.
+ See section below for value to use for online workshops.
+
+* `humandate` is the human-friendly start and end date for the
+ workshop. Please use three-letter month names and abbreviations
+ (e.g., `Jul` instead of `July`), since these values are displayed
+ in a table on our websites. (Strictly speaking this information
+ is redundant, since we require a machine-readable `startdate` and
+ `enddate`, but reliably translating those into human-readable
+ dates is an interesting challenge...)
+
+* `humantime` is the human-friendly start and end time for each day of
+ the workshop, e.g., "09:00 am - 4:00 pm" or "09:00-16:00". (We
+ recognize that we ought to allow different start or end times on
+ different days, but going down that path leads eventually to
+ embedding iCal date/time specifications in our headers, which in
+ turn leads to madness...)
+
+* `startdate` is the workshop's starting date in YYYY-MM-DD format,
+ such as `2015-07-01`. You must use four digits for the year and
+ two each for the month and day.
+
+* `enddate` is the workshop's ending date in the same format. If your
+ workshop is only one day long, the `enddate` field should be deleted.
+ If your workshop has a more complicated schedule (e.g., a half day a
+ week for four weeks), please delete the `enddate` field and only tell
+ us its start date.
+
+* `instructor` is a comma-separated list of instructor names. The
+ list must be enclosed in square brackets, and each name must be in
+ double quotes, as in `["Alan Turing","Grace Hopper"]`. Do not
+ include other information (such as the word "instructor") in these
+ values.
+
+* `helper` is a comma-separated list of helper names formatted in the
+ same way as the instructor names. If there are no helpers, use an
+ empty list `[]`.
+
+* `contact` is the contact email address to use for your workshop.
+ If you do not provide a contact email address, your website will
+ display the address for the workshop coordinators (who probably
+ won't be able to answer questions about the specific details of
+ your workshop).
+
+The header may optionally define the following:
+
+* `collaborative_notes` is the URL for the Etherpad for your workshop.
+ If you are not using an Etherpad, you can delete this line. You can
+ [create a carpentries etherpad here](https://pad.carpentries.org/).
+
+* `eventbrite` is the multi-digit Eventbrite registration key. If you
+ are using Eventbrite, the Carpentries Regional Coordinators will
+ give this to you. If you are using something else, you may delete
+ this line. Note: this value must be given as a string in double
+ quotes, rather than as a number.
+
+### For online workshops
+
+If the workshop is online, follow the same instructions as above with the
+following modifications:
+
+* `venue`: Use the name of the institution that organizes the workshop and do
+ not include a mention that it is an online workshop.
+* `address`: If you can safely share the URL for the videoconferencing, you may
+ list it here (it must start with `http` or `https`); if you cannot or prefer
+ to not share the videoconferencing information, use the value `online`.
+* `country`: Please use the country associated with the host institution for the
+ workshop.
+* `latitude` and `longitude`: if it makes sense, use the coordinates for the
+ host institution. If it does not, use `0` for both the latitude and the
+ longitude.
+
+By default, the Setup Instructions will list the installation instructions for the
+videoconferencing service Zoom.
+If you use a different videoconferencing service,
+you can edit the file in `_includes/install_instructions/videoconferencing.html`
+to include the relevant installation instructions.
+
+## Home Page: Schedule
+
+By default, the template displays the typical schedule for your workshop based on
+the values of the variables set in the `_config.yml`. If you need to make
+minor modifications to this schedule, you can edit the `schedule.html` file
+found in the sub-folder of the `_includes` folder that matches the type of
+workshop you will be teaching (`dc`, `lc`, or `swc`).
+
+If you wish to create your own custom schedule, an empty template is available in
+`_includes/custom-schedule.html`. In this file, we provide the structure for a
+4-day workshop as it is often used for online workshops. To use this custom
+schedule instead of the one provided by default in the template, delete the
+block of code found under the "Schedule" header in the `index.md` file and
+replace it with`{% raw %}{% include custom-schedule.html %}{% endraw %}`.
+
+The schedule is formatted using a table. If you would like to learn more about
+how to write tables in HTML, here is an [HTML table overview from
+Mozilla](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/table) and
+the [HTML tables chapter from w3schools](https://www.w3schools.com/html/html_tables.asp).
+
+For pilot workshops, some placeholder text including a link to the lesson homepage
+will be displayed instead of a schedule table.
+The lesson homepage will contain estimated timings for teaching the lesson.
+Use the approach described above for `_includes/custom-schedule.html`
+if you would like to create a schedule table to replace this text.
+
+## Home Page: Setup Instructions
+
+If you need assistance with customizing the setup instructions for your website,
+feel free to ask your questions in the Carpentries
+[Instructors Slack channel](https://carpentries.slack.com/archives/C08BVNU00)
+([join The Carpentries Slack workspace](https://slack-invite.carpentries.org/)).
+
+### Software Carpentry workshops
+
+#### Default settings
+
+For Software Carpentry workshops,
+setting the `flavor` variable in `_config.yml` to `r` or `python`
+will include the respective installation instructions for these tools.
+Additionally, by default, the installation instructions for
+a text editor, the Bash shell, and Git are included.
+
+#### If you need to remove tools
+
+If you need to remove any of the instructions for the default
+set of tools,
+you can delete lines that include these instructions in
+the `_includes/swc/setup.html` file.
+
+#### If you need to add tools
+
+If you need to add installation instructions for other tools,
+we provide installation instructions for SQL and OpenRefine.
+To make them appear on your workshop website,
+you can move the `{% raw %}{% include %}{% endraw %}` statements outside the comment
+block in `_includes/swc/setup.html`.
+
+If you need to add installation instructions for other tools,
+you will need to write your own. You can use installation instructions
+for other tools located in the `_includes/install_instructions/` folder
+as examples.
+
+### Data Carpentry workshops
+
+For Data Carpentry workshops,
+installation instructions live on the workshop overview page for each curriculum.
+Instead of including installation instructions in the workshop template,
+the workshop template includes links to these instructions.
+The correct link will be displyed
+when using the appropriate combination of values
+for the `curriculum` and `flavor` variables
+in the `_config.yml` file.
+
+### Library Carpentry workshops
+
+By default, Library Carpentry workshop websites
+include installation instructions for the Bash shell and Git.
+
+You may need to add installation instructions for additional tools
+you will be using during your workshop
+by editing the `_includes/lc/setup.html` file.
+You can either write your own instructions using the ones
+provided in `_includes/lc/setup.html` as an example,
+or, if you are using tools that already have installation instructions
+provided for Software Carpentry,
+you can add `{% raw %}{% include install_instructions/ %}{% endraw %}`
+where `` needs to be replaced by one of the files
+in the `_includes/install_instructions` folder.
+
+## Homepage: who can attend?
+
+If you want to specify who can attend the workshop you are advertising,
+there is a commented-out section in `index.md` that you can use to
+inform workshop website visitors of who can attend the event.
+You may want to specify that only members of your university,
+department, etc. can attend or that the event is open to the public.
+We don't provide templated text for this as each situation is different.
+We do provide a section, called "Who can attend?" for you to specify this
+information.
+
+To use it, move the {% raw %}{% endcomment %}{% endraw %} line above the
+`
` tag marking the beginning of this section and edit the paragraph
+to reflect the attendance policy for your workshop.
+
+## Updating the repository
+
+If for some reason,
+such as the installation instructions having become disconnected
+with the current lesson material,
+you need to get changes from this repository
+into the clone of it with your workshop page,
+please follow the steps bellow:
+
+1. Add the workshop-template repository as upstream:
+ ~~~
+ $ git remote add upstream https://github.com/carpentries/workshop-template.git
+ ~~~
+ {: .language-bash}
+
+2. Fetch the data from upstream repository (also know as the workshop-template
+ repository):
+ ~~~
+ $ git pull upstream
+ ~~~
+ {: .language-bash}
+
+3. Address possible merge conflicts, and
+ ~~~
+ $ git commit -a
+ ~~~
+ {: .language-bash}
+
+4. Push the changes to your repository on GitHub:
+ ~~~
+ $ git push origin gh-pages
+ ~~~
+ {: .language-bash}
+
+
+{% include links.md %}
diff --git a/_extras/design.md b/_extras/design.md
new file mode 100644
index 0000000..b7a378d
--- /dev/null
+++ b/_extras/design.md
@@ -0,0 +1,113 @@
+---
+layout: page
+title: Background and Design
+permalink: /design/
+---
+There are a few things you need to know in order to understand why we
+do things the way we do. Some of them are specific to GitHub, rather
+than Git itself.
+
+1. Git uses the term "clone" to mean "a copy of a repository".
+ GitHub uses the term "fork" to mean, "a copy of a GitHub-hosted
+ repo that is also hosted on GitHub", and the term "clone" to mean
+ "a copy of a GitHub-hosted repo that's located on someone else's
+ machine". In both cases, the duplicate has a remote called
+ `origin` that points to the original repo; other remotes can be
+ added manually.
+
+2. A user on GitHub can only have one fork of a particular repo.
+ This is a problem for us because an instructor may be involved in
+ several workshops, each of which has its own website repo. To avoid
+ this issue, we use the template functionality (you could also use the
+ `import.github.com` functionality).
+
+3. If a repository has a file called `README.md` in its root
+ directory, GitHub displays the contents of that file on the
+ repository's home page.
+
+4. If a repository has a branch called `gh-pages` (which stands for
+ "GitHub pages"), then GitHub uses the HTML and Markdown files in
+ that branch to create a website for the repository. If the
+ repository's URL is `http://github.com/darwin/finches`, the URL
+ for the website is `http://darwin.github.io/finches`.
+
+5. If an HTML or Markdown file has a header consisting of three
+ dashes, some data about the page, and three more dashes:
+
+ ```yaml
+ ---
+ key: value
+ other_key: other_value
+ ---
+ content of the page
+ ```
+
+ then GitHub doesn't just copy the file over verbatim. Instead, it
+ runs the file through a translator called [Jekyll][jekyll] that
+ looks for specially-formatted commands embedded in the file and
+ uses them to fill in the page.
+
+6. Commands can be embedded in the body of a page. One is
+ `{% raw %}{% include something.html %}{% endraw %}`, which tells
+ Jekyll to copy the contents of `something.html` into the file
+ being translated; this is used to create standard headers and
+ footers for pages. Another is `{% raw %}{{variable}}{% endraw %}`: when Jekyll sees
+ this, it replaces it with the value of `variable`. This is used
+ to insert things like a contact email address and the URL for our
+ Twitter account.
+
+7. Jekyll gets variables from two places: a file called `_config.yml`
+ located in the repo's root directory, and the header of each
+ individual page. Variables from `_config.yml` are put in an
+ object called `site`, and referred to as `site.variable`, so that
+ (for example) `{% raw %}{{site.swc_site}}{% endraw %}` in a page is replaced by the URL
+ of the main Software Carpentry web site ({{site.swc_site}}). Variables from the
+ page's header are put in an object called `page`, and referred to
+ as `page.variable`, so if a page's header defines a variable
+ called `venue`, `{% raw %}{{page.venue}}{% endraw %}` is replaced by "Euphoric State
+ University" (or whatever value the variable has).
+
+8. If a page uses `{% raw %}{% include something.html %}{% endraw %}`
+ to include a snippet of HTML, Jekyll looks in a directory called
+ `_includes` to find `something.html`. It always looks there, and
+ nowhere else, so anything we want people to be able to include in
+ their pages has to be stored in `_includes`.
+
+9. A repository can have another special directory called `_layouts`.
+ If a page like `index.html` has a variable called `layout`, and
+ that variable's value is `standard.html`, Jekyll loads the file
+ `_layouts/standard.html` and copies the content of `index.html`
+ into it, then expands the result. This is used to give the pages
+ in a site a uniform appearance.
+ We have created two layouts for workshop pages:
+
+ * `workshop.html` is used for workshops' home pages, and is the
+ layout for the `index.html` page in your repo's root directory.
+ That `index.html` page's header must define several variables as
+ specified in the the customization instructions in order for
+ your workshop to be included in our main website.
+
+ * `page.html` is used for any other pages you want to create.
+ **Note:** if you create extra pages, you *must* edit the values
+ in the top section of `_config.yml` as described in
+ [the lesson template documentation]({{ site.example_site }}).
+
+## Extra Directories
+
+This workshop template shares resources with the template used for
+Carpentry lessons. As a result, your workshop website's repository
+contains directories that most workshops don't need, but which can be
+used to store extra material when necessary:
+
+* `_extras/`: extra pages (like this one).
+* `_episodes/`: lesson episodes (which workshops usually don't have).
+* `_episodes_rmd/`: R Markdown lesson episodes (if any).
+* `code/`: for code samples.
+* `data/`: for data files.
+* `fig/`: for figures and other images.
+* `files/`: for miscellaneous files.
+
+For more information on these, please see [the documentation for the
+lesson template]({{ site.example_site }}).
+
+[jekyll]: https://jekyllrb.com/
diff --git a/_extras/faq.md b/_extras/faq.md
new file mode 100644
index 0000000..aaf8e23
--- /dev/null
+++ b/_extras/faq.md
@@ -0,0 +1,142 @@
+---
+layout: page
+title: FAQ
+permalink: /faq/index.html
+---
+
+## General
+
+*Where can I get help?*
+: Mail us at [{{site.email}}](mailto:{{site.email}}),
+ or join our [discussion list]({{site.swc_site}}/join/)
+ and ask for help there.
+
+*What if I can't wait?*
+: Run `make workshop-check` to run the workshop homepage checking program on `index.html`.
+
+*Where can I report problems or suggest improvements?*
+: Please file an issue against [{{site.workshop_repo}}](this repository)
+ or [mail us](mailto:{{site.email}}).
+
+*Why does the workshop repository have to be created by importing rather than forking?*
+: Because any particular user can only have one fork of a repository,
+ but instructors frequently need to work on several workshops at once.
+
+*Why do I have to be logged in before I start the import?*
+: It's a known issue with GitHub's importer.
+
+*Why does the workshop repository name have to follow the `YYYY-MM-DD-site` pattern?*
+: This makes it easy for coordinators to track workshops.
+ There are plans to move that coordination into [AMY][amy],
+ but until that happens this pattern makes it easy to sort workshops
+ by date without requiring an additional start-date column.
+ **Note: `YYYY-MM-DD` should be the start date of the workshop.**
+
+*Why use the `gh-pages` branch instead of `master`?*
+: Because [GitHub automatically publishes `gh-pages`][github-pages] as a website.
+
+*Why use Jekyll? Why not some other markup language and some other converter?*
+: Because it's the only tool supported by GitHub Pages.
+
+*Where should pages go if multiple workshops are running at a site simultaneously?*
+: Use subdirectories like `2015-07-01-esu/beginners`,
+ so that repository names always follow our four-part convention.
+
+*What if I want to add more values to `index.html`, like `address1` and `address2` for different rooms on different days?*
+: Go ahead,
+ but you *must* have the variables described in the customization instructions.
+
+*What is the "Windows installer"?*
+: We have built a small installation helper for Windows
+ that installs nano and SQLite, adds R to the path, and so on.
+ It is maintained in
+
+ which also has an up-to-date description of what it actually does.
+ The latest version is always available at
+ ,
+ and contributions are always welcome.
+
+## Debugging
+
+*Help, my website is not updating!*
+: Ensure that strings in the header of `index.html` are enclosed in quotations `"`.
+ Special characters such as `"&"` may render correctly on your local machine
+ but cause rendering to fail silently on GitHub.
+
+*Eventbrite registration isn't showing up on the workshop's home page.*
+: First check that you have something like:
+
+ ~~~
+ eventbrite: 1234567890AB
+ ~~~
+
+ in the YAML header of `index.html`.
+ If the YAML header is set properly you may be accessing
+ `file:///home/to/workshop/directory/_site/index.html` directly.
+ Instead,
+ please run
+
+ ~~~
+ $ make serve
+ ~~~
+
+ and look at `http://localhost:4000` in your browser
+ (or push your changes to GitHub and view your page there).
+
+*What do I do if I see a `invalid byte sequence in ...` error when I run `tools/check`?*
+: Your computer is telling you that it doesn't understand some of the characters you're using.
+ Declare your locale to be `en_US.UTF-8` in your shell:
+
+ ~~~
+ $ export LC_ALL=en_US.UTF-8
+ $ export LANG=en_US.UTF-8
+ ~~~
+
+*What do I do if I get a "can't convert nil into String" error?*
+: On some Linux distributions (e.g, Ubuntu 14.04), you may get this error:
+
+ ~~~
+ $ ./tools/preview
+ /usr/lib/ruby/1.9.1/rubygems/custom_require.rb:36:in `require': iconv will be deprecated in the future, use String#encode instead.
+ /usr/lib/ruby/1.9.1/time.rb:265:in `_parse': can't convert nil into String (TypeError)
+ from /usr/lib/ruby/1.9.1/time.rb:265:in `parse'
+ from /usr/bin/jekyll:95:in `block (2 levels) in '
+ from /usr/lib/ruby/1.9.1/optparse.rb:1391:in `call'
+ from /usr/lib/ruby/1.9.1/optparse.rb:1391:in `block in parse_in_order'
+ from /usr/lib/ruby/1.9.1/optparse.rb:1347:in `catch'
+ from /usr/lib/ruby/1.9.1/optparse.rb:1347:in `parse_in_order'
+ from /usr/lib/ruby/1.9.1/optparse.rb:1341:in `order!'
+ from /usr/lib/ruby/1.9.1/optparse.rb:1432:in `permute!'
+ from /usr/lib/ruby/1.9.1/optparse.rb:1453:in `parse!'
+ from /usr/bin/jekyll:137:in `'
+ ~~~
+
+ This occurs because you are using an old version of Jekyll located in `/usr/bin`.
+ Make sure that you have installed Jekyll using:
+
+ ~~~
+ $ gem install jekyll
+ ~~~
+
+ This installs Jekyll in `/usr/local/bin`,
+ so make sure this directory comes before `/usr/bin` in your `PATH` environment variable.
+ When your path is set correctly,
+ you should see:
+
+ ~~~
+ $ which jekyll
+ /usr/local/bin/jekyll
+ ~~~
+
+ You may also have to install the `nodejs` package to disable references to JavaScript,
+ which you can do using:
+
+ ~~~
+ $ sudo apt-get install nodejs
+ ~~~
+
+ For more information,
+ see .
+
+[amy]: https://github.com/swcarpentry/amy
+[github-pages]: https://help.github.com/articles/creating-project-pages-manually/
diff --git a/_extras/helpers.md b/_extras/helpers.md
new file mode 100644
index 0000000..e8ced14
--- /dev/null
+++ b/_extras/helpers.md
@@ -0,0 +1,12 @@
+---
+title: Information for Helpers
+---
+
+The role of Helpers is defined on the [Helper Checklist page](https://docs.carpentries.org/topic_folders/hosts_instructors/hosts_instructors_checklist.html#helper-checklist). Please review this information.
+
+The Carpentries aims to create an inclusive environment so the [Code of Conduct](https://docs.carpentries.org/topic_folders/policies/code-of-conduct.html) is very important.
+
+Please also familiarize yourself with the [key points](https://carpentries.github.io/instructor-training/reference.html) summary of the Carpentries Instructor training to get an idea of the values and strategies we aim to use in Carpentries workshops. Feel free to poke around the rest of the material if you wish, but those key points are what is important in how we work with the learners.
+
+We maintain a list of common issues that occur during installation as a reference that may be useful in preparation and the day of the workshop on the
+[Configuration Problems and Solutions wiki page]({{site.swc_github}}/workshop-template/wiki/Configuration-Problems-and-Solutions).
diff --git a/_extras/install_instructions.md b/_extras/install_instructions.md
new file mode 100644
index 0000000..7442ede
--- /dev/null
+++ b/_extras/install_instructions.md
@@ -0,0 +1,26 @@
+---
+layout: page
+title: Installation Instructions
+permalink: /install_instructions/index.html
+tools:
+ - editor
+ - git
+ - openrefine
+ - python
+ - r
+ - shell
+ - sql
+ - videoconferencing
+---
+
+{% comment %}
+To add a new set of installation instructions to this page:
+1. Add the instructions (in HTML) as a new file in the `_includes` folder
+2. Add the name of that file, without the .html extension,
+ to the `tools` array in the YAML front matter of this page
+ (i.e. between the --- above).
+{% endcomment %}
+
+{% for tool in page.tools %}
+{% include install_instructions/{{tool}}.html %}
+{% endfor %}
diff --git a/_includes/aio-script.md b/_includes/aio-script.md
new file mode 100644
index 0000000..d90e6d6
--- /dev/null
+++ b/_includes/aio-script.md
@@ -0,0 +1,25 @@
+{% comment %}
+As a maintainer, you don't need to edit this file.
+If you notice that something doesn't work, please
+open an issue: https://github.com/carpentries/styles/issues/new
+{% endcomment %}
+
+{% include manual_episode_order.html %}
+
+{% for lesson_episode in lesson_episodes %}
+
+{% if site.episode_order %}
+ {% assign e = site.episodes | where: "slug", lesson_episode | first %}
+{% else %}
+ {% assign e = lesson_episode %}
+{% endif %}
+
+
{{ e.title }}
+
+{% include episode_overview.html teaching_time=e.teaching exercise_time=e.exercises episode_questions=e.questions episode_objectives=e.objectives %}
+
+{{ e.content }}
+
+{% include episode_keypoints.html episode_keypoints=e.keypoints %}
+
+{% endfor %}
diff --git a/_includes/all_keypoints.html b/_includes/all_keypoints.html
new file mode 100644
index 0000000..f0abd25
--- /dev/null
+++ b/_includes/all_keypoints.html
@@ -0,0 +1,31 @@
+{% comment %}
+ Display key points of all episodes for reference.
+{% endcomment %}
+
+{% include base_path.html %}
+{% include manual_episode_order.html %}
+
+
diff --git a/_includes/base_path.html b/_includes/base_path.html
new file mode 100644
index 0000000..4f343af
--- /dev/null
+++ b/_includes/base_path.html
@@ -0,0 +1,41 @@
+{%- comment -%}
+When the website is built by GitHub Pages,
+'site.url' is set to 'https://username.github.io'
+'site.baseurl' is set to '/lesson-name'
+
+When we start a local server using `jekyll serve`,
+'site.url' is set to 'http://localhost:4000' and
+'site.baseurl' is empty.
+
+In both of the above cases we set 'relative_root_path' to 'site.baseurl'.
+
+When we build a website locally with `jekyll build`,
+both 'site.url' and 'site.baseurl' are empty.
+This case is handled by the last 'else' in the code below.
+The logic there follows the (adapted) instructions found at:
+ https://ricostacruz.com/til/relative-paths-in-jekyll
+
+ `page.url` gives the URL of the current page with a leading /:
+
+ - when the URL ends with an extension (e.g., /foo/bar.html),
+ we can get the 'depth' of the page by counting the number of
+ forward slashes ('/') and subtracting 1
+ - when the URL ends with a forward slash (e.g. /foo/bar/),
+ we can get the depth of the page by counting the number of /
+{%- endcomment -%}
+
+{% if site.url %}
+ {% assign relative_root_path = site.baseurl %}
+{% else %}
+ {% assign last_char = page.url | slice: -1 %}
+ {% if last_char == "/" %}
+ {% assign offset = 0 %}
+ {% else %}
+ {% assign offset = 1 %}
+ {% endif %}
+ {% assign depth = page.url | split: '/' | size | minus: offset %}
+ {% if depth <= 1 %}{% assign relative_root_path = '.' %}
+ {% elsif depth == 2 %}{% assign relative_root_path = '..' %}
+ {% else %}{% capture relative_root_path %}..{% for i in (3..depth) %}/..{% endfor %}{% endcapture %}
+ {% endif %}
+{% endif %}
diff --git a/_includes/carpentries.html b/_includes/carpentries.html
new file mode 100644
index 0000000..051bb09
--- /dev/null
+++ b/_includes/carpentries.html
@@ -0,0 +1,72 @@
+{% comment %}
+ General description of Software, Data, and Library Carpentry.
+{% endcomment %}
+
+{% include base_path.html %}
+
+
+
+
+
+
+
The Carpentries comprises
+ Software Carpentry, Data Carpentry, and Library Carpentry communities of Instructors, Trainers,
+ Maintainers, helpers, and supporters who share a mission to teach
+ foundational coding and data science skills to researchers and people
+ working in library- and information-related roles. In January,
+ 2018, The Carpentries was formed by the merger of Software Carpentry and
+ Data Carpentry. Library Carpentry became an official Carpentries Lesson Program
+ in November 2018.
+
+
+
While individual lessons and workshops continue to be run under each
+ lesson project, The Carpentries provide overall staffing and governance, as
+ well as support for assessment, instructor training and mentoring.
+ Memberships are joint, and the Carpentries project maintains a shared Code
+ of Conduct. The Carpentries is a fiscally sponsored project of Community
+ Initiatives, a registered 501(c)3 non-profit based in California, USA.
+
+
+
+
+
+
+
+
Since 1998, Software Carpentry has
+ been teaching researchers across all disciplines the foundational coding
+ skills they need to get more done in less time and with less pain. Its
+ volunteer instructors have run hundreds of events for thousands of learners
+ around the world. Now that all research involves some degree of
+ computational work, whether with big data, cloud computing, or simple task
+ automation, these skills are needed more than ever.
+
+
+
+
+
+
+
+
+
Data Carpentry develops and teaches
+ workshops on the fundamental data skills needed to conduct research. Its
+ target audience is researchers who have little to no prior computational
+ experience, and its lessons are domain specific, building on learners'
+ existing knowledge to enable them to quickly apply skills learned to their
+ own research. Data Carpentry workshops take researchers through the entire
+ data life cycle.
+
+
+
+
+
+
+
+
+
Library Carpentry develops lessons and
+ teaches workshops for and with people working in library- and
+ information-related roles. Its goal is to create an on-ramp to empower this
+ community to use software and data in their own work, as well as be
+ advocates for and train others in efficient, effective and reproducible data
+ and software practices.
+
+
diff --git a/_includes/check_transition_variables.html b/_includes/check_transition_variables.html
new file mode 100644
index 0000000..71d4826
--- /dev/null
+++ b/_includes/check_transition_variables.html
@@ -0,0 +1,22 @@
+{% assign date = include.need_transition_date %}
+
+{% if date == "true" %}
+{% unless site.transition_date_prebeta %}
+
+ you need to specify the variable transition_date_prebeta
+ in _config.yml.
+
diff --git a/_includes/dc/intro.html b/_includes/dc/intro.html
new file mode 100644
index 0000000..016707c
--- /dev/null
+++ b/_includes/dc/intro.html
@@ -0,0 +1,15 @@
+
+ Data Carpentry develops and teaches workshops on the fundamental data skills needed to conduct
+ research. Its target audience is researchers who have little to no prior computational experience,
+ and its lessons are domain specific, building on learners' existing knowledge to enable them to quickly
+ apply skills learned to their own research.
+ Participants will be encouraged to help one another
+ and to apply what they have learned to their own research problems.
+
+ Who:
+This lesson assumes you have a working knowledge of Python and some previous exposure to the Bash shell.
+ These requirements can be fulfilled by:
+ a) completing a Software Carpentry Python workshop or
+ b) completing a Data Carpentry Ecology workshop (with Python) and a Data Carpentry Genomics workshop or
+ c) independent exposure to both Python and the Bash shell.
+
+If you’re unsure whether you have enough experience to participate in this workshop, please read over
+ this detailed list,
+ which gives all of the functions, operators, and other concepts you will need to be familiar with.
+
+In addition, this lesson assumes that learners have some familiarity with astronomical concepts,
+ including reference frames, proper motion, color-magnitude diagrams, globular clusters, and isochrones.
+ Participants should bring their own laptops and plan to participate actively.
+
+ Who:
+This lesson assumes you have a working knowledge of Python and some previous exposure to the Bash shell.
+ These requirements can be fulfilled by:
+ a) completing a Software Carpentry Python workshop or
+ b) completing a Data Carpentry Ecology workshop (with Python) and a Data Carpentry Genomics workshop or
+ c) independent exposure to both Python and the Bash shell.
+
+If you’re unsure whether you have enough experience to participate in this workshop, please read over
+ this detailed list,
+ which gives all of the functions, operators, and other concepts you will need to be familiar with.
+
+ Who:
+ The course is aimed at graduate students and other researchers.
+
+ You don't need to have any previous knowledge of the tools
+ that will be presented at the workshop.
+
+
+
+{% endif %}
diff --git a/_includes/episode_break.html b/_includes/episode_break.html
new file mode 100644
index 0000000..36d2d2f
--- /dev/null
+++ b/_includes/episode_break.html
@@ -0,0 +1,15 @@
+{% comment %}
+ Display a break's timings in a box similar to a learning episode's.
+{% endcomment %}
+
diff --git a/_includes/episode_navbar.html b/_includes/episode_navbar.html
new file mode 100644
index 0000000..5abf86f
--- /dev/null
+++ b/_includes/episode_navbar.html
@@ -0,0 +1,42 @@
+{% comment %}
+For some reason, the relative_root_path seems out of scope in this file, so we
+need to re-assign it here
+{% endcomment %}
+
+{% include base_path.html %}
+
+{% comment %}
+ Navigation bar for an episode.
+{% endcomment %}
+
+{% include manual_episode_order.html %}
+{% comment %}
+ 'previous_episode' and 'next_episodes' are defined in 'manual_episode_order.html'.
+ These replace 'page.previous' and 'page.next' objects, correspondingly.
+{% endcomment %}
+
+
diff --git a/_includes/episode_overview.html b/_includes/episode_overview.html
new file mode 100644
index 0000000..169ab26
--- /dev/null
+++ b/_includes/episode_overview.html
@@ -0,0 +1,76 @@
+{% comment %}
+ Display episode's timings and learning objectives.
+
+ Regarding the `if page.*** == nil` below:
+ all-in-one page combines all episodes into one.
+ It, therefore, does not define its own objectives, exercises,
+ and questions, which 'normal' episodes define in the front matter.
+
+ To display episodes' teaching and exercise times, as well as episode
+ questions and objectives, we pass them as parameters to the Liquid's
+ `include` statement when we generate the page:
+
+ include episode_overview.html teaching_time=e.teaching ...
+
+ Here we obtain the information we need either from the episode itself or
+ from the parameters passed in.
+{% endcomment %}
+
+{% if page.teaching == nil %}
+{% assign teaching_time = include.teaching_time %}
+{% else %}
+{% assign teaching_time = page.teaching %}
+{% endif %}
+
+{% if page.exercises == nil %}
+{% assign exercise_time = include.exercise_time %}
+{% else %}
+{% assign exercise_time = page.exercises %}
+{% endif %}
+
+{% if page.questions == nil %}
+{% assign episode_questions = include.episode_questions %}
+{% else %}
+{% assign episode_questions = page.questions %}
+{% endif %}
+
+{% if page.objectives == nil %}
+{% assign episode_objectives = include.episode_objectives %}
+{% else %}
+{% assign episode_objectives = page.objectives %}
+{% endif %}
+
+
+
+
Overview
+
+
+
+ Teaching: {{ teaching_time }} min
+
+ Exercises: {{ exercise_time }} min
+
+
+ Questions
+
+ {% for question in episode_questions %}
+
{{ question|markdownify }}
+ {% endfor %}
+
+
+
+
+
+
+
+
+ Objectives
+
+ {% for objective in episode_objectives %}
+
{{ objective|markdownify }}
+ {% endfor %}
+
+
+
+
+
diff --git a/_includes/episode_title.html b/_includes/episode_title.html
new file mode 100644
index 0000000..d0abc65
--- /dev/null
+++ b/_includes/episode_title.html
@@ -0,0 +1,9 @@
+
+
+
+
+
{{ page.title }}
+
+
+
+
diff --git a/_includes/favicons.html b/_includes/favicons.html
new file mode 100644
index 0000000..8a50b4d
--- /dev/null
+++ b/_includes/favicons.html
@@ -0,0 +1,33 @@
+{% assign favicon_url = relative_root_path | append: '/assets/favicons/' | append: site.carpentry %}
+
+{% if site.carpentry == 'swc' %}
+{% assign carpentry = 'Software Carpentry' %}
+{% elsif site.carpentry == 'dc' %}
+{% assign carpentry = 'Data Carpentry' %}
+{% elsif site.carpentry == 'lc' %}
+{% assign carpentry = 'Library Carpentry' %}
+{% elsif site.carpentry == 'cp' %}
+{% assign carpentry = 'The Carpentries' %}
+{% endif %}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/_includes/gh_variables.html b/_includes/gh_variables.html
new file mode 100644
index 0000000..3fdae4a
--- /dev/null
+++ b/_includes/gh_variables.html
@@ -0,0 +1,45 @@
+{% comment %}
+When rendering websites locally, `site.github.url` doesn't get resolved properly
+unless a GitHub Personal Access Token is set up and available in the
+environment. This leads to warnings and errors when trying to serve the site
+locally. To work around this, we use the `jekyll.environment` variable which is
+set to `development` when rendering the site locally, and set to `production` on
+GitHub where `site.github.url` is defined.
+{% endcomment %}
+
+{% if jekyll.environment == "production" %}
+
+{% comment %}
+First, get the name of the repository
+{% endcomment %}
+{% assign repo_name = site.github.repository_name %}
+
+{% comment %}
+`site.github.public_repositories` contains comprehensive information for all public repositories for the organization. We use `where` to extract the part
+of the metadata that is relevant to the present repository.
+{% endcomment %}
+{% assign repo_info = site.github.public_repositories | where: "name", repo_name %}
+
+{% comment %}
+Now, we can extract the default branch for the repo
+{% endcomment %}
+{% assign default_branch = repo_info[0].default_branch %}
+
+{% comment %}
+Other variables requested by the template
+{% endcomment %}
+{% assign repo_url = site.github.repository_url %}
+{% assign search_domain_url = site.github.url %}
+{% assign project_title = site.github.project_title %}
+{% assign source_branch = site.github.source.branch %}
+
+{% elsif jekyll.environment == "development" %}
+
+{% assign repo_name = "" %}
+{% assign repo_url = "" %}
+{% assign default_branch = "" %}
+{% assign search_domain_url = "" %}
+{% assign project_title = "" %}
+{% assign source_branch = "" %}
+
+{% endif %}
diff --git a/_includes/github-ribbon.html b/_includes/github-ribbon.html
new file mode 100644
index 0000000..e6af081
--- /dev/null
+++ b/_includes/github-ribbon.html
@@ -0,0 +1 @@
+Find us on GitHub
diff --git a/_includes/install_instructions/editor.html b/_includes/install_instructions/editor.html
new file mode 100644
index 0000000..373c4a9
--- /dev/null
+++ b/_includes/install_instructions/editor.html
@@ -0,0 +1,51 @@
+
+
Text Editor
+
+
+ When you're writing code, it's nice to have a text editor that is
+ optimized for writing code, with features like automatic
+ color-coding of key words. The default text editor on macOS and
+ Linux is usually set to Vim, which is not famous for being
+ intuitive. If you accidentally find yourself stuck in it, hit
+ the Esc key, followed by :+Q+!
+ (colon, lower-case 'q', exclamation mark), then hitting Return to
+ return to the shell.
+
+ nano is a basic editor and the default that instructors use in the workshop.
+ It is installed along with Git.
+
+
+
+
+ nano is a basic editor and the default that instructors use in the workshop.
+ See the Git installation video tutorial
+ for an example on how to open nano.
+ It should be pre-installed.
+
+
Video Tutorial
+
+
+
+
+
+
+
+
+ nano is a basic editor and the default that instructors use in the workshop.
+ It should be pre-installed.
+
+
+
+
+
diff --git a/_includes/install_instructions/git.html b/_includes/install_instructions/git.html
new file mode 100644
index 0000000..9a4f2ac
--- /dev/null
+++ b/_includes/install_instructions/git.html
@@ -0,0 +1,76 @@
+{% comment %}
+Git Setup instructions rely on Shell instructions. If you don't include
+Shell instructions as part of your workshop website, make sure to adjust
+the text below accordingly.
+{% endcomment %}
+
+
Git
+
+ Git is a version control system that lets you track who made changes
+ to what when and has options for easily updating a shared or public
+ version of your code
+ on github.com. You will need a
+ supported
+ web browser.
+
+
+ You will need an account at github.com
+ for parts of the Git lesson. Basic GitHub accounts are free. We encourage
+ you to create a GitHub account if you don't have one already.
+ Please consider what personal information you'd like to reveal. For
+ example, you may want to review these
+ instructions
+ for keeping your email address private provided at GitHub.
+
+ Please open the Terminal app, type git --version and press
+ Enter/Return. If it's not installed already,
+ follow the instructions to Install the "command line
+ developer tools". Do not click "Get Xcode", because that will
+ take too long and is not necessary for our Git lesson.
+ After installing these tools, there won't be anything in your /Applications
+ folder, as they and Git are command line programs.
+ For older versions of OS X (10.5-10.8) use the
+ most recent available installer labelled "snow-leopard"
+ available here.
+ (Note: this project is no longer maintained.)
+ Because this installer is not signed by the developer, you may have to
+ right click (control click) on the .pkg file, click Open, and click
+ Open in the pop-up dialog. You can watch
+ a video tutorial about this case.
+
+
Video Tutorial
+
+
+
+
+
+
+
+
+ If Git is not already available on your machine you can try to
+ install it via your distro's package manager. For Debian/Ubuntu run
+ sudo apt-get install git and for Fedora run
+ sudo dnf install git.
+
+
+
+
+
diff --git a/_includes/install_instructions/openrefine.html b/_includes/install_instructions/openrefine.html
new file mode 100644
index 0000000..75daad1
--- /dev/null
+++ b/_includes/install_instructions/openrefine.html
@@ -0,0 +1,57 @@
+
+
OpenRefine
+
+ For this lesson you will need OpenRefine and a
+ web browser. Note: this is a Java program that runs on your machine (not in the cloud).
+ It runs inside a web browser, but no web connection is needed.
+
+ Check that you have either the Firefox or the Chrome browser installed and set as your default browser.
+ OpenRefine runs in your default browser.
+ It will not run correctly in Internet Explorer.
+
Unzip the downloaded file into the OpenRefine directory by right-clicking and selecting "Extract ...".
+
Go to your newly created OpenRefine directory.
+
Launch OpenRefine by clicking openrefine.exe (this will launch a command prompt window, but you can ignore that - just wait for OpenRefine to open in the browser).
+
If you are using a different browser, or if OpenRefine does not automatically open for you, point your browser at http://127.0.0.1:3333/ or http://localhost:3333 to use the program.
+
+
+
+
+
Check that you have either the Firefox or the Chrome browser installed and set as your default browser. OpenRefine runs in your default browser. It may not run correctly in Safari.
Unzip the downloaded file into the OpenRefine directory by double-clicking it.
+
Go to your newly created OpenRefine directory.
+
Launch OpenRefine by dragging the icon into the Applications folder.
+
Use Ctrl-click/Open ... to launch it.
+
If you are using a different browser, or if OpenRefine does not automatically open for you, point your browser at http://127.0.0.1:3333/ or http://localhost:3333 to use the program.
+
+
+
+
+
Check that you have either the Firefox or the Chrome browser installed and set as your default browser. OpenRefine runs in your default browser.
Unzip the downloaded file into the OpenRefine directory.
+
Go to your newly created OpenRefine directory.
+
Launch OpenRefine by entering ./refine into the terminal within the OpenRefine directory.
+
If you are using a different browser, or if OpenRefine does not automatically open for you, point your browser at http://127.0.0.1:3333/ or http://localhost:3333 to use the program.
+
+
+
+
+
diff --git a/_includes/install_instructions/python.html b/_includes/install_instructions/python.html
new file mode 100644
index 0000000..dd7e5e2
--- /dev/null
+++ b/_includes/install_instructions/python.html
@@ -0,0 +1,113 @@
+{% comment %}
+
+Remove the third paragraph if the workshop will teach Python
+using something other than the Jupyter Notebook. Details at
+
+https://jupyter-notebook.readthedocs.io/en/stable/notebook.html#browser-compatibility
+{% endcomment %}
+
+
Python
+
+
+ Python is a popular language for
+ research computing, and great for general-purpose programming as
+ well. Installing all of its research packages individually can be
+ a bit difficult, so we recommend
+ Anaconda,
+ an all-in-one installer.
+
+
+
+ Regardless of how you choose to install it,
+ please make sure you install Python version 3.x
+ (e.g., 3.6 is fine).
+
+
+ {% comment %}
+ Please remove or comment out this paragraph using
+ or {% comment %} and {% endcomment %}
+ if you do not plan to use Jupyter Notebook environment.
+ {% endcomment %}
+
+ We will teach Python using the Jupyter Notebook,
+ a programming environment that runs in a web browser (Jupyter Notebook will be installed by Anaconda). For this to work you will need a reasonably
+ up-to-date browser. The current versions of the Chrome, Safari and
+ Firefox browsers are all
+ supported
+ (some older browsers, including Internet Explorer version 9
+ and below, are not).
+
Download the Anaconda for Windows installer with Python 3. (If you are not sure which version to choose, you probably want the 64-bit Graphical Installer Anaconda3-...-Windows-x86_64.exe)
+
Install Python 3 by running the Anaconda Installer, using all of the defaults for installation except make sure to check Add Anaconda to my PATH environment variable.
Download the Anaconda Installer with Python 3 for Linux.
+ (The installation requires using the shell. If you aren't
+ comfortable doing the installation yourself
+ stop here and request help at the workshop.)
+
+
+ Open a terminal window and navigate to the directory where
+ the executable is downloaded (e.g., `cd ~/Downloads`).
+
+
+ Type
bash Anaconda3-
and then press
+ Tab to autocomplete the full file name. The name of
+ file you just downloaded should appear.
+
+
+ Press Enter
+ (or Return depending on your keyboard).
+ You will follow the text-only prompts.
+ To move through the text, press Spacebar.
+ Type yes and press enter to approve the license.
+ Press Enter (or Return)
+ to approve the default location
+ for the files.
+ Type yes and press
+ Enter (or Return)
+ to prepend Anaconda to your PATH
+ (this makes the Anaconda distribution the default Python).
+
+
+ Close the terminal window.
+
+
+
+
+
+
diff --git a/_includes/install_instructions/r.html b/_includes/install_instructions/r.html
new file mode 100644
index 0000000..3517050
--- /dev/null
+++ b/_includes/install_instructions/r.html
@@ -0,0 +1,67 @@
+
+
R
+
+
+ R is a programming language
+ that is especially powerful for data exploration, visualization, and
+ statistical analysis. To interact with R, we use
+ RStudio.
+
+ Install R by downloading and running
+ this .exe file
+ from CRAN.
+ Also, please install the
+ RStudio IDE.
+ Note that if you have separate user and admin accounts, you should run the
+ installers as administrator (right-click on .exe file and select "Run as
+ administrator" instead of double-clicking). Otherwise problems may occur later,
+ for example when installing R packages.
+
+ Instructions for R installation on various Linux platforms (debian,
+ fedora, redhat, and ubuntu) can be found at
+ . These will instruct you to
+ use your package manager (e.g. for Fedora run
+ sudo dnf install R and for Debian/Ubuntu, add a ppa
+ repository and then run sudo apt-get install r-base).
+ Also, please install the
+ RStudio IDE.
+
+
+
+
+
diff --git a/_includes/install_instructions/shell.html b/_includes/install_instructions/shell.html
new file mode 100644
index 0000000..534ff29
--- /dev/null
+++ b/_includes/install_instructions/shell.html
@@ -0,0 +1,162 @@
+
+
The Bash Shell
+
+ Bash is a commonly-used shell that gives you the power to do
+ tasks more quickly.
+
Run the installer and follow the steps below:
+
+ {% comment %} Git 2.29.1 Setup {% endcomment %}
+
+ Click on "Next" four times (two times if you've previously
+ installed Git). You don't need to change anything
+ in the Information, location, components, and start menu screens.
+
+
+
+ From the dropdown menu, "Choosing the default editor used by Git", select "Use the Nano editor by default" (NOTE: you will need to scroll up to find it) and click on "Next".
+
+
+ {% comment %} Adjusting the name of the initial branch in new repositories {% endcomment %}
+
+ On the page that says "Adjusting the name of the initial branch in new repositories", ensure that
+ "Let Git decide" is selected. This will ensure the highest level of compatibility for our lessons.
+ {% comment %}
+ This section also has "Override the default branch name for new repositories" and has a text box set
+ to "main". I'm not having people switch to this just yet because our git lesson still uses the old paradigm.
+ {% endcomment %}
+
+ Ensure that "Git from the command line and also from 3rd-party software" is selected and
+ click on "Next". (If you don't do this Git Bash will not work properly, requiring you to
+ remove the Git Bash installation, re-run the installer and to select the "Git from the
+ command line and also from 3rd-party software" option.)
+
+ Ensure that "Use the native Windows Secure Channel Library" is selected and click on "Next".
+
+ {% comment %} This should mean that people stuck behind corporate firewalls that do MITM attacks
+ with their own root CA are still able to access remote git repos. {% endcomment %}
+ {% comment %} Configuring the line ending conversions {% endcomment %}
+
+ Ensure that "Checkout Windows-style, commit Unix-style line endings" is selected and click on "Next".
+
+ {% comment %} Configuring the terminal emulator to use with Git Bash {% endcomment %}
+
+
+ Ensure that "Use Windows' default console window" is selected and click on "Next".
+
+
+ {% comment %} Installing {% endcomment %}
+ {% comment %} Completing the Git Setup Wizard {% endcomment %}
+ {% comment %} as of 2020-06-02, the Window will say "click Finish", but the button is labelled as "Next" {% endcomment %}
+
Click on "Finish" or "Next".
+
+
+
+ If your "HOME" environment variable is not set (or you don't know what this is):
+
+
Open command prompt (Open Start Menu then type cmd and press Enter)
+
+ Type the following line into the command prompt window exactly as shown:
+
setx HOME "%USERPROFILE%"
+
+
Press Enter, you should see SUCCESS: Specified value was saved.
+
Quit command prompt by typing exit then pressing Enter
+
+
+
+
This will provide you with both Git and Bash in the Git Bash program.
+
Video Tutorial
+
+
+
+
+
+
+
+
+ The default shell in Mac OS X Ventura and newer versions is Zsh, but
+ Bash is available in all versions, so no need to install anything.
+ You access Bash from the Terminal (found in
+ /Applications/Utilities).
+ See the Git installation video tutorial
+ for an example on how to open the Terminal.
+ You may want to keep Terminal in your dock for this workshop.
+
+
+ To see if your default shell is Bash type echo $SHELL
+ in Terminal and press the Return key. If the message
+ printed does not end with '/bash' then your default is something
+ else, you can change your current shell to Bash by typing
+ bash and then pressing Return. To check
+ your current shell type echo $0 and press Return.
+
+
+ To change your default shell to Bash type chsh -s /bin/bash and
+ press the Return key, then reboot for the change to take effect. To
+ change your default back to Zsh, type chsh -s /bin/zsh, press the
+ Return key and reboot. To check available shells, type
+ cat /etc/shells.
+
+
Video Tutorial
+
+
+
+
+
+
+
+
+ The default shell is usually Bash and there is usually no need to
+ install anything.
+
+
+ To see if your default shell is Bash type echo $SHELL
+ in Terminal and press the Return key. If the message
+ printed does not end with '/bash' then your default is something
+ else, you can change your current shell to Bash by typing
+ bash and then pressing Return. To check
+ your current shell type echo $0 and press Return.
+
+
+ To change your default shell to Bash type chsh -s /bin/bash and
+ press the Return key, then reboot for the change to take effect. To
+ change your default back to Zsh, type chsh -s /bin/zsh, press the
+ Return key and reboot. To check available shells, type
+ cat /etc/shells.
+
+
+
+
+
diff --git a/_includes/install_instructions/sql.html b/_includes/install_instructions/sql.html
new file mode 100644
index 0000000..365ee6e
--- /dev/null
+++ b/_includes/install_instructions/sql.html
@@ -0,0 +1,53 @@
+
+
SQLite
+
+
+ SQL is a specialized programming language used with databases. We
+ use a database manager called
+ SQLite in our lessons.
+
Copy the following curl -fsSL {{site.url}}{{site.baseurl}}/getsql.sh | bash
+
Paste it into the window that Git Bash opened. If you're unsure, ask an instructor for help
+
You should see something like 3.27.2 2019-02-25 16:06:06 ...
+
+
+
If you want to do this manually, download sqlite3, make a bin directory in the user's home directory, unzip sqlite3, move it into the bin directory, and then add the bin directory to the path.
If you installed Anaconda, it also has a copy of SQLite
+ without support to readline.
+ Instructors will provide a workaround for it if needed.
+
diff --git a/_includes/install_instructions/videoconferencing.html b/_includes/install_instructions/videoconferencing.html
new file mode 100644
index 0000000..f3ab050
--- /dev/null
+++ b/_includes/install_instructions/videoconferencing.html
@@ -0,0 +1,44 @@
+
+
Install the videoconferencing client
+
+{% comment %}
+Replace the paragraph below with the relevant installation instructions
+if you do not use Zoom
+{% endcomment %}
+
+ If you haven't used Zoom before, go to the
+ official website
+ to download and install the Zoom client for your computer.
+
+
+
+
Set up your workspace
+
+
+ Like other Carpentries workshops,
+ you will be learning by "coding along" with the Instructors.
+ To do this, you will need to have both the window for the tool
+ you will be learning about (a terminal, RStudio, your web browser, etc..)
+ and the window for the Zoom video conference client open.
+ In order to see both at once,
+ we recommend using one of the following set up options:
+
+
Two monitors: If you have two monitors,
+ plan to have the tool you are learning up on one monitor and
+ the video conferencing software on the other.
+
Two devices: If you don't have two monitors,
+ do you have another device (tablet, smartphone) with a medium to large
+ sized screen? If so, try using the smaller device as your video
+ conference connection and your larger device (laptop or desktop)
+ to follow along with the tool you will be learning about.
+
Divide your screen: If you only have one device
+ and one screen, practice having two windows
+ (the video conference program and one of the tools you will be using
+ at the workshop) open together.
+ How can you best fit both on your screen?
+ Will it work better for you to toggle between them
+ using a keyboard shortcut?
+ Try it out in advance to decide what will work best for you.
+
+ This blog post includes detailed information on how to set up your screen to follow along during the workshop.
+
diff --git a/_includes/javascript.html b/_includes/javascript.html
new file mode 100644
index 0000000..d507afe
--- /dev/null
+++ b/_includes/javascript.html
@@ -0,0 +1,101 @@
+{% comment %}
+ JavaScript used in lesson and workshop pages.
+{% endcomment %}
+
+
+
+
+
+{% if site.kind == "lesson" %}
+
+
+
+{% endif %}
+
+{% if page.math %}
+
+
+
+{% endif %}
+
+{%- comment -%}
+AnchorJS: A JavaScript utility for adding deep anchor links
+https://github.com/bryanbraun/anchorjs
+https://cdn.jsdelivr.net/npm/anchor-js/anchor.min.js
+{%- endcomment -%}
+
+
+
diff --git a/_includes/lc/intro.html b/_includes/lc/intro.html
new file mode 100644
index 0000000..b218f2b
--- /dev/null
+++ b/_includes/lc/intro.html
@@ -0,0 +1,19 @@
+
+ Library Carpentry
+ is made by people working in library- and information-related roles to help you:
+
+
+
automate repetitive, boring, error-prone tasks
+
create, maintain and analyze sustainable and reusable data
+
work effectively with IT and systems colleagues
+
better understand the use of software in research
+
and much more...
+
+
+
+ Library Carpentry introduces you to the fundamentals of computing
+ and provides you with a platform for further self-directed learning.
+ For more information on what we teach and why, please see our paper
+ "Library Carpentry: software skills training for library professionals".
+
+
diff --git a/_includes/lc/schedule.html b/_includes/lc/schedule.html
new file mode 100644
index 0000000..70df6e6
--- /dev/null
+++ b/_includes/lc/schedule.html
@@ -0,0 +1,27 @@
+
+ Bash is a commonly-used shell that gives you the power to do simple tasks
+ more quickly. Please find setup instructions in
+ the lesson.
+
+
+
+
+
OpenRefine
+
+ OpenRefine is a tool to clean up and organize messy data. Please find instructions to
+ install it and the data used in the lesson in the
+ lesson.
+
+
+
+
{% comment %} Start of 'Git' section. GitHub browser compatibility
+ is given at https://help.github.com/articles/supported-browsers/{% endcomment %}
+
Git
+
+ Git is a version control system that lets you track who made changes
+ to what when and has options for easily updating a shared or public
+ version of your code
+ on https://github.com.
+
+
+ Follow the instructions on
+ the lesson to
+ install Git on your system.
+
+
+ You will need an account at github.com
+ for parts of the Git lesson. Basic GitHub accounts are free. We encourage
+ you to create a GitHub account if you don't have one already.
+ Please consider what personal information you'd like to reveal. For
+ example, you may want to review these
+ instructions
+ for keeping your email address private provided at GitHub. You will
+ need a
+ supported
+ web browser.
+
+
diff --git a/_includes/lc/who.html b/_includes/lc/who.html
new file mode 100644
index 0000000..ecbf706
--- /dev/null
+++ b/_includes/lc/who.html
@@ -0,0 +1,8 @@
+
+ Who:
+ The course is for people working in library- and information-related roles.
+
+ You don't need to have any previous knowledge of the tools that
+ will be presented at the workshop.
+
+
diff --git a/_includes/lesson_footer.html b/_includes/lesson_footer.html
new file mode 100644
index 0000000..b74e448
--- /dev/null
+++ b/_includes/lesson_footer.html
@@ -0,0 +1,54 @@
+{% comment %}
+ Footer for lesson pages.
+{% endcomment %}
+
+{% include gh_variables.html %}
+
+
diff --git a/_includes/life_cycle.html b/_includes/life_cycle.html
new file mode 100644
index 0000000..4216253
--- /dev/null
+++ b/_includes/life_cycle.html
@@ -0,0 +1,93 @@
+
+{% if site.life_cycle == "pre-alpha" %}
+
+
+
+ This lesson is still being designed and assembled (Pre-Alpha version)
+
+
+
+
+{% elsif site.life_cycle == "alpha" %}
+
+
+
+ This lesson is in the early stages of development (Alpha version)
+
+
+
+
+{% elsif site.life_cycle == "beta" %}
+
+
+
+ This lesson is being piloted (Beta version)
+
+
+
+{% elsif site.life_cycle == "stable" %}
+
+{% comment %}
+We do not do anything special for lessons in stable
+{% endcomment %}
+
+
+{% comment %}
+Below we cover the 2 phases of lesson transition towards the Carpentries Workbench:
+Variables needed:
+ - transition_date_prebeta: the date of the prebeta stage
+ - transition_date_beta: the date of the beta stage
+ - transition_date_prerelease: the date of the prerelease stage
+
+- transition-step-1: We notify that there is a snapshot of the lesson available for testing, and that it will supersede this version.
+- transition-step-2 We indicate that this version of the lesson is a snapshot and a new version of the lesson is avaiable and will supersede this version at a given date.
+{% endcomment %}
+
+{% elsif site.life_cycle == "transition-step-1" %}
+{% include check_transition_variables.html need_transition_date = 'true' %}
+
+
+
+{% endif %}
diff --git a/_includes/manual_episode_order.html b/_includes/manual_episode_order.html
new file mode 100644
index 0000000..ccc3457
--- /dev/null
+++ b/_includes/manual_episode_order.html
@@ -0,0 +1,116 @@
+{% comment %}
+ This file enables manual episode ordering until
+ GitHub Pages switches to Jekyll that supports it
+ without any major hackery. Note, some logic will
+ be required even when this transition happens
+ but it will not be as involved as what we have to do
+ in this file.
+
+ To order lesson episodes or extras manually
+ (instead of the default alpha-numerical order),
+ create array variables 'episode_order' and
+ 'extras_order' in `_config.yml` like so:
+
+ episode_order:
+ - episodeA
+ - episodeB
+
+ extras_order:
+ - extraA
+ - extraB
+
+ Note that "Reference" page is currently always
+ added to "Extras" as the first item.
+
+ The main outcomes of the code in this file are:
+ - 'lesson_episodes' variable that replaces
+ 'site.episodes' variable when manual episode
+ order is defined.
+ - 'lesson_extras' variable that replaces
+ 'site.extras' variable when manual ordering of
+ files in '_extras' is used
+ - 'previous_episode' and 'next_episode' objects
+ that replace 'page.previous' and 'page.next' variables,
+ correspondingly, and that have such properties
+ as 'url' and 'title' and that are used in
+ 'episode_navbar.html'.
+
+ When episode order is specified manually, the 'lesson_episodes'
+ variable contains a list of episode names ("slugs", to be precise;
+ "slug" is the episode name without '.md'). Therefore, when we
+ iterate over 'lesson_episodes' (in navbar.html) ,
+ we have to check whether we use manual episode ordering and, if so,
+ find the corresponding episode object. This is what we do with the
+ following code in every loop over 'lesson_episodes':
+
+ {% if site.episode_order %}
+ {% assign episode = site.episodes | where: "slug", lesson_episode | first %}
+ {% else %}
+ {% assign episode = lesson_episode %}
+ {% endif %}
+{% endcomment %}
+
+{% comment %}
+Manual ordering of Episodes begins here
+{% endcomment %}
+
+{% if site.episode_order %}
+ {% assign lesson_episodes = site.episode_order %}
+{% else %}
+ {% assign lesson_episodes = site.episodes %}
+{% endif %}
+
+
+{% comment %}
+ If 'episode_order' is defined, we need to determine
+ - previous episode object ('previous_episode')
+ - and next episode object ('next_episode')
+{% endcomment %}
+
+
+{% if site.episode_order %}
+ {% for lesson_episode in lesson_episodes %}
+
+ {% comment %}
+ We iterate over the specified lesson episodes using
+ a 'for' loop because we can use
+ 'forloop.first', 'forloop.last', and 'forloop.index0'.
+ {% endcomment %}
+
+ {% unless lesson_episode == page.slug %} {% continue %} {% endunless %}
+
+ {% if forloop.first %}
+ {% assign previous_episode = nil %}
+ {% else %}
+ {% assign p_idx = forloop.index0 | minus: 1 %}
+ {% assign p_name = lesson_episodes[p_idx] %}
+ {% assign previous_episode = site.episodes | where: "slug", p_name | first %}
+ {% endif %}
+
+ {% if forloop.last == true %}
+ {% assign next_episode = nil %}
+ {% else %}
+ {% assign n_idx = forloop.index0 | plus: 1 %}
+ {% assign n_name = lesson_episodes[n_idx] %}
+ {% assign next_episode = site.episodes | where: "slug", n_name | first %}
+ {% endif %}
+ {% endfor %}
+{% else %}
+ {% assign previous_episode = page.previous %}
+ {% assign next_episode = page.next %}
+{% endif %}
+
+
+{% comment %}
+Manual ordering of Extras begins here
+{% endcomment %}
+
+{% if site.extras_order %}
+ {% assign lesson_extras = site.extras_order %}
+{% else %}
+ {% assign lesson_extras = site.extras %}
+{% endif %}
+
+{% comment %}
+ We do not need to determine "previous" or "next" extra.
+{% endcomment %}
diff --git a/_includes/navbar.html b/_includes/navbar.html
new file mode 100644
index 0000000..c1b1f56
--- /dev/null
+++ b/_includes/navbar.html
@@ -0,0 +1,115 @@
+{% comment %}
+ Lesson navigation bar.
+{% endcomment %}
+
+{% include gh_variables.html %}
+{% include manual_episode_order.html %}
+
+
diff --git a/_includes/swc/intro.html b/_includes/swc/intro.html
new file mode 100644
index 0000000..522dee1
--- /dev/null
+++ b/_includes/swc/intro.html
@@ -0,0 +1,18 @@
+
+ Software Carpentry
+ aims to help researchers get their work done
+ in less time and with less pain
+ by teaching them basic research computing skills.
+ This hands-on workshop will cover basic concepts and tools,
+ including program design, version control, data management,
+ and task automation.
+ Participants will be encouraged to help one another
+ and to apply what they have learned to their own research problems.
+
diff --git a/_includes/swc/setup.html b/_includes/swc/setup.html
new file mode 100644
index 0000000..f6eefa3
--- /dev/null
+++ b/_includes/swc/setup.html
@@ -0,0 +1,28 @@
+{% assign curricula = "swc-gapminder|swc-inflammation" | split: "|" %}
+{% unless curricula contains site.curriculum %}
+{% include warning-curriculum.html %}
+{% endunless %}
+
+{% include install_instructions/shell.html %}
+{% include install_instructions/git.html %}
+{% include install_instructions/editor.html %}
+
+{% if site.flavor == "r" %}
+{% include install_instructions/r.html %}
+{% elsif site.flavor == "python" %}
+{% include install_instructions/python.html %}
+{% elsif site.flavor == "FIXME" %}
+{% include install_instructions/r.html %}
+{% include install_instructions/python.html %}
+{% else %}
+{% include warning-flavor.html %}
+{% endif %}
+
+{% comment %}
+The following setup instructions are commented out because Carpentries workshops
+cover the these topics less frequently. Please uncomment the lines that
+correspond to the topics covered in your workshop.
+
+{% include install_instructions/sql.html %}
+{% include install_instructions/openrefine.html %}
+{% endcomment %}
diff --git a/_includes/swc/who.html b/_includes/swc/who.html
new file mode 100644
index 0000000..2d8e94a
--- /dev/null
+++ b/_includes/swc/who.html
@@ -0,0 +1,8 @@
+
+ Who:
+ The course is aimed at graduate students and other researchers.
+
+ You don't need to have any previous knowledge of the tools
+ that will be presented at the workshop.
+
+
diff --git a/_includes/warning-curriculum.html b/_includes/warning-curriculum.html
new file mode 100644
index 0000000..6f57d16
--- /dev/null
+++ b/_includes/warning-curriculum.html
@@ -0,0 +1,8 @@
+
+
+ Unrecognized value for variable curriculum set in
+ _config.yml. Currently the variable is set to:
+ {{ site.curriculum }}. Check the values of
+ carpentry and curriculum in the
+ _config.yml file.
+
diff --git a/_includes/warning-flavor.html b/_includes/warning-flavor.html
new file mode 100644
index 0000000..66309ba
--- /dev/null
+++ b/_includes/warning-flavor.html
@@ -0,0 +1,7 @@
+
+
+ Unrecognized value for variable flavor set in
+ _config.yml. Valid values are "r" and
+ "python", currently set to {{ site.flavor }}.
+
+
diff --git a/_includes/workshop_ad.html b/_includes/workshop_ad.html
new file mode 100644
index 0000000..be6aad4
--- /dev/null
+++ b/_includes/workshop_ad.html
@@ -0,0 +1,50 @@
+{% comment %}
+ Advertising box at the top of a workshop website home page.
+{% endcomment %}
+
+{% assign begin_address = page.address | slice: 0, 4 | downcase %}
+{% if page.address == "online" %}
+{% assign online = "true_private" %}
+{% elsif begin_address contains "http" %}
+{% assign online = "true_public" %}
+{% else %}
+{% assign online = "false" %}
+{% endif %}
+
+