diff --git a/.gitignore b/.gitignore index 809eda0..d298be1 100644 --- a/.gitignore +++ b/.gitignore @@ -1,25 +1 @@ -# Created by .ignore support plugin (hsz.mobi) -### Haskell template -dist -dist-* -cabal-dev -*.o -*.hi -*.chi -*.chs.h -*.dyn_o -*.dyn_hi -.hpc -.hsenv -.cabal-sandbox/ -cabal.sandbox.config -*.prof -*.aux -*.hp -*.eventlog -.stack-work/ -cabal.project.local -.HTF/ - -*.iml -.idea/ +public/ \ No newline at end of file diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml new file mode 100644 index 0000000..36f853c --- /dev/null +++ b/.gitlab-ci.yml @@ -0,0 +1,37 @@ +stages: + - build + - deploy + +build-website: + image: sothr.com/hugo:0.4.0 + stage: build + script: + - hugo --theme pure --destination /output --baseURL https://sothr.com + - TARGET=$PWD + - tar -czvf website.tgz -C /output/ . + only: + - master + tags: + - linux + artifacts: + paths: + - website.tgz + +deploy-website: + image: sothr.com/deploy:ubuntu + stage: deploy + variables: + TARGET_DIRECTORY: "/srv/www/sothr.com" + script: + - eval `ssh-agent -s` + - ssh-add <(echo "$SSH_DEPLOY_KEY") + - mkdir -p ~/.ssh + - ssh-keyscan -p $DEPLOY_PORT sothr.com >> ~/.ssh/known_hosts + - mkdir /tmp/deploy + - tar -xvf website.tgz -C /tmp/deploy + - rsync -avz --delete-delay -e "ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -p $DEPLOY_PORT" --progress /tmp/deploy/* $DEPLOY_USER@$DEPLOY_HOST:$TARGET_DIRECTORY + only: + - master + tags: + - docker + environment: production diff --git a/LICENSE b/LICENSE deleted file mode 100644 index e616ce7..0000000 --- a/LICENSE +++ /dev/null @@ -1,30 +0,0 @@ -Copyright Drew Short (c) 2017 - -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - - * Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials provided - with the distribution. - - * Neither the name of Author name here nor the names of other - contributors may be used to endorse or promote products derived - from this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. \ No newline at end of file diff --git a/README.md b/README.md deleted file mode 100644 index 9f55af8..0000000 --- a/README.md +++ /dev/null @@ -1,3 +0,0 @@ -# sothr-dot-com - -add description of sothr-dot-com here \ No newline at end of file diff --git a/Setup.hs b/Setup.hs deleted file mode 100644 index 9a994af..0000000 --- a/Setup.hs +++ /dev/null @@ -1,2 +0,0 @@ -import Distribution.Simple -main = defaultMain diff --git a/app/Main.hs b/app/Main.hs deleted file mode 100644 index 10421fb..0000000 --- a/app/Main.hs +++ /dev/null @@ -1,6 +0,0 @@ -module Main where - -import Data.String.Strip - -main :: IO () -main = interact strip diff --git a/archetypes/default.md b/archetypes/default.md new file mode 100644 index 0000000..00e77bd --- /dev/null +++ b/archetypes/default.md @@ -0,0 +1,6 @@ +--- +title: "{{ replace .Name "-" " " | title }}" +date: {{ .Date }} +draft: true +--- + diff --git a/archetypes/portfolio.md b/archetypes/portfolio.md new file mode 100644 index 0000000..4f18bdd --- /dev/null +++ b/archetypes/portfolio.md @@ -0,0 +1,6 @@ +--- +title: "{{ replace .Name "-" " " | title }}" +date: {{ .Date }} +draft: true +category: "ChangeMe" +--- diff --git a/config.toml b/config.toml new file mode 100644 index 0000000..865ee23 --- /dev/null +++ b/config.toml @@ -0,0 +1,27 @@ +baseURL = "https://sothr.com/" +languageCode = "en-us" +title = "Sothr" +theme = "pure" + +[params] +CopyrightHolder = "Drew Short" +CopyrightYear = "2014" +[params.links] +[params.links.resume] +weight = 10 +title = "Résumé" +url = "https://sothr.com/resume/" +[params.links.gitlab] +weight = 2 +title = "GitLab" +image = "assets/img/gitlab.svg" +url = "https://gitlab.com/WarrickSothr" +[params.links.github] +weight = 1 +title = "GitHub" +image = "assets/img/github.png" +url = "https://github.com/warricksothr/" +[params.links.linkedin] +title = "LinkedIn" +image = "assets/img/linkedin.png" +url = "https://www.linkedin.com/in/drew-short-5188033a/" \ No newline at end of file diff --git a/content/_index.md b/content/_index.md new file mode 100644 index 0000000..6c2e432 --- /dev/null +++ b/content/_index.md @@ -0,0 +1,13 @@ +--- +draft: false +type: "homepage" +--- +Welcome to my personal landing page. + +I'm a backend and middlware software engineer with a strong focus on the JVM and the surrounding ecosystem. I've spent the last few years working on a suite of services for the healthcare platform at [Optum, Inc.](https://www.optum.com/) I have 7+ years of experience with Java, the Spring Framework and the myriad of libraries that facilitate SOA and Microservice applications. + +In my personal projects I often steer clear of the JVM as I work with it on a daily basis during the work week. My tools of choice outside of work are [Python](https://www.python.org/) and [Rust](https://www.rust-lang.org/), with a sprinkling of [Go](https://golang.org/) and the occasional foray into [Common Lisp](https://en.wikipedia.org/wiki/Common_Lisp) or [Racket](https://racket-lang.org/). A lot of my personal projects end up on my internally deployed [GitLab](https://about.gitlab.com/) instance and I find the integrated CI suite to be particularly useful. In fact, this site is built on that system and deployed automatically when changes are made to the underlying git repository. + +This site is hosted on a small [Digital Ocean](https://www.digitalocean.com/) droplet that I personally manage. While the majority of my personal projects that run as services are hosted as docker containers on my homelab server or on a mediocre dedicated server I rent from [nocix.net](https://www.nocix.net/). + +I don't spend much time writing, but when I do feel the itch I'll often drop a piece of content at my old [blog](http://blog.sothr.com) or at the new NullOctet [blog](https://blog.nulloctet.com) \ No newline at end of file diff --git a/content/about/_index.md b/content/about/_index.md new file mode 100644 index 0000000..62f3aee --- /dev/null +++ b/content/about/_index.md @@ -0,0 +1,11 @@ +--- +title: "About" +draft: false +type: "navLink" +weight: 1 +--- +[**sothr.com**](https://sothr.com) is in it's 3rd iteration, rewritten using the static site generator [Hugo](https://gohugo.io/) from the previous Refinery CMS branch. I don't update the site often enough to require a CMS style site, and I am no longer comfortable with the additional attack surface of such an application for a simple personal landing page. I've developed a custom Hugo theme based on [Pure.css](https://purecss.io/) which I find to be a refreshingly small css only layout library. + +The second edition was built on [Refinery CMS](https://refinerycms.com/) and was birthed from my rediscovery of the ruby language while automating processes at Cargill. I was growing tired of maintaining a hand written HTML5 site, and regularly updating my personal project lists wasn't doing anything good for my frustrations around the state of HTML5, CSS3 and Javascript. This version did inherit the look of the original site, through my thankfully forward looking design choice of using mostly stock bootstrap as the primary css library. + +The very first edition of the site was a custom amalgamation of burdening web technologies with Javascript at the core. I spun out the core components and called it [Web-App-Seed](https://github.com/warricksothr/Web-App-Seed), though this specific set of tools never saw much use and the site built with them was overly complicated. It did however have one meaningful impact on my designs, the use of CSS libraries like [bootstrap](https://getbootstrap.com/docs/3.4/) to help with page layout. \ No newline at end of file diff --git a/content/portfolio/_index.md b/content/portfolio/_index.md new file mode 100644 index 0000000..c2c6453 --- /dev/null +++ b/content/portfolio/_index.md @@ -0,0 +1,7 @@ +--- +title: "Portfolio" +draft: false +type: "navLink" +weight: 10 +--- +The following are projects of mine that I've collected and written about \ No newline at end of file diff --git a/content/portfolio/sothr-dot-com-website.md b/content/portfolio/sothr-dot-com-website.md new file mode 100644 index 0000000..878276b --- /dev/null +++ b/content/portfolio/sothr-dot-com-website.md @@ -0,0 +1,6 @@ +--- +title: "Sothr.com Website" +date: 2019-02-09T02:47:12-06:00 +draft: true +category: "Personal Project" +--- \ No newline at end of file diff --git a/content/portfolio/visual-resume.md b/content/portfolio/visual-resume.md new file mode 100644 index 0000000..b82ee30 --- /dev/null +++ b/content/portfolio/visual-resume.md @@ -0,0 +1,6 @@ +--- +title: "Visual Resume" +date: 2019-02-09T04:01:13-06:00 +draft: true +category: "Personal Project" +--- \ No newline at end of file diff --git a/sothr-dot-com.cabal b/sothr-dot-com.cabal deleted file mode 100644 index 64950b0..0000000 --- a/sothr-dot-com.cabal +++ /dev/null @@ -1,43 +0,0 @@ -name: sothr-dot-com -version: 0.1.0.0 --- synopsis: --- description: -homepage: https://github.com/githubuser/sothr-dot-com#readme -license: BSD3 -license-file: LICENSE -author: Author name here -maintainer: example@example.com -copyright: 2017 Author name here -category: Web -build-type: Simple -extra-source-files: README.md -cabal-version: >=1.10 - -library - hs-source-dirs: src - exposed-modules: Data.String.Strip - build-depends: base >= 4.7 && < 5 - default-language: Haskell2010 - -executable sothr-dot-com - hs-source-dirs: app - main-is: Main.hs - ghc-options: -threaded -rtsopts -with-rtsopts=-N - build-depends: base - , sothr-dot-com - default-language: Haskell2010 - -test-suite sothr-dot-com-test - type: exitcode-stdio-1.0 - hs-source-dirs: test - main-is: Spec.hs - build-depends: base - , sothr-dot-com - , hspec - , QuickCheck - ghc-options: -threaded -rtsopts -with-rtsopts=-N - default-language: Haskell2010 - -source-repository head - type: git - location: https://github.com/githubuser/sothr-dot-com diff --git a/src/Data/String/Strip.hs b/src/Data/String/Strip.hs deleted file mode 100644 index a8d5273..0000000 --- a/src/Data/String/Strip.hs +++ /dev/null @@ -1,6 +0,0 @@ -module Data.String.Strip (strip) where - -import Data.Char - -strip :: String -> String -strip = dropWhile isSpace . reverse . dropWhile isSpace . reverse diff --git a/static/assets/img/github.png b/static/assets/img/github.png new file mode 100644 index 0000000..8a72cef Binary files /dev/null and b/static/assets/img/github.png differ diff --git a/static/assets/img/gitlab.svg b/static/assets/img/gitlab.svg new file mode 100644 index 0000000..81ac6e9 --- /dev/null +++ b/static/assets/img/gitlab.svg @@ -0,0 +1,37 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/static/assets/img/linkedin.png b/static/assets/img/linkedin.png new file mode 100644 index 0000000..acdf24c Binary files /dev/null and b/static/assets/img/linkedin.png differ diff --git a/test/Data/String/StripSpec.hs b/test/Data/String/StripSpec.hs deleted file mode 100644 index 3ecb689..0000000 --- a/test/Data/String/StripSpec.hs +++ /dev/null @@ -1,19 +0,0 @@ -module Data.String.StripSpec (main, spec) where - -import Test.Hspec -import Test.QuickCheck - -import Data.String.Strip - --- `main` is here so that this module can be run from GHCi on its own. It is --- not needed for automatic spec discovery. -main :: IO () -main = hspec spec - -spec :: Spec -spec = do - describe "strip" $ do - it "removes leading and trailing whitespace" $ do - strip "\t foo bar\n" `shouldBe` "foo bar" - it "is idempotent" $ property $ - \str -> strip str === strip (strip str) diff --git a/test/Spec.hs b/test/Spec.hs deleted file mode 100644 index a824f8c..0000000 --- a/test/Spec.hs +++ /dev/null @@ -1 +0,0 @@ -{-# OPTIONS_GHC -F -pgmF hspec-discover #-} diff --git a/themes/pure/LICENSE b/themes/pure/LICENSE new file mode 100644 index 0000000..46fe619 --- /dev/null +++ b/themes/pure/LICENSE @@ -0,0 +1,20 @@ +The MIT License (MIT) + +Copyright (c) 2019 YOUR_NAME_HERE + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of +the Software, and to permit persons to whom the Software is furnished to do so, +subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR +COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/themes/pure/archetypes/default.md b/themes/pure/archetypes/default.md new file mode 100644 index 0000000..ac36e06 --- /dev/null +++ b/themes/pure/archetypes/default.md @@ -0,0 +1,2 @@ ++++ ++++ diff --git a/themes/pure/layouts/404.html b/themes/pure/layouts/404.html new file mode 100644 index 0000000..6c298de --- /dev/null +++ b/themes/pure/layouts/404.html @@ -0,0 +1,5 @@ +{{ define "main" }} +

Page not found

+ + I'm sorry, but the requested page wasn’t found on the server. +{{ end }} \ No newline at end of file diff --git a/themes/pure/layouts/_default/baseof.html b/themes/pure/layouts/_default/baseof.html new file mode 100644 index 0000000..bae72d1 --- /dev/null +++ b/themes/pure/layouts/_default/baseof.html @@ -0,0 +1,19 @@ + + + {{- partial "head.html" . -}} + + +
+
+
+ {{- block "main" . }}{{- end }} +
+
+
+ + + diff --git a/themes/pure/layouts/_default/list.html b/themes/pure/layouts/_default/list.html new file mode 100644 index 0000000..b9e6fba --- /dev/null +++ b/themes/pure/layouts/_default/list.html @@ -0,0 +1,42 @@ +{{ define "main" }} +

{{.Title}}

+
+ + {{.Content}} +
+ {{ $has_categories := gt (len (first 1 (where .Pages ".Params.category" "ne" nil))) 0 }} + {{ $has_without_categories := gt (len (first 1 (where .Pages ".Params.category" "eq" nil))) 0 }} + + {{ if $has_categories }} + {{ range .Pages.GroupByParam "Category" }} +
+
+ {{ if .Key }} +

{{ .Key }}

+ {{ end }} + {{ range .Pages }} +
+ +
+ {{ end }} +
+
+ {{ end }} + {{ end }} + {{ if and $has_categories $has_without_categories }} +
+
+

Others:

+
+
+ {{ end }} + {{ range where .Pages ".Params.category" "==" nil }} +
+
+ {{.Date.Format "2006-01-02"}} | {{.Title}} +
+
+ {{ end }} +{{ end }} \ No newline at end of file diff --git a/themes/pure/layouts/_default/single.html b/themes/pure/layouts/_default/single.html new file mode 100644 index 0000000..19ffb52 --- /dev/null +++ b/themes/pure/layouts/_default/single.html @@ -0,0 +1,5 @@ +{{ define "main" }} +

{{ .Title }}

+ + {{ .Content }} +{{ end }} \ No newline at end of file diff --git a/themes/pure/layouts/index.html b/themes/pure/layouts/index.html new file mode 100644 index 0000000..d8a51f1 --- /dev/null +++ b/themes/pure/layouts/index.html @@ -0,0 +1,6 @@ +{{ define "main" }} + {{ range where .Site.Pages "Type" "homepage" }} +

{{ .Title }}

+ {{ .Content }} + {{ end }} +{{ end }} \ No newline at end of file diff --git a/themes/pure/layouts/partials/footer.html b/themes/pure/layouts/partials/footer.html new file mode 100644 index 0000000..92ca081 --- /dev/null +++ b/themes/pure/layouts/partials/footer.html @@ -0,0 +1,5 @@ +
+
+ © {{ .Site.Params.CopyrightYear }} - Present   {{ .Site.Params.CopyrightHolder }}   ALL RIGHTS RESERVED. +
+
diff --git a/themes/pure/layouts/partials/head.html b/themes/pure/layouts/partials/head.html new file mode 100644 index 0000000..068a6b9 --- /dev/null +++ b/themes/pure/layouts/partials/head.html @@ -0,0 +1,42 @@ + + + + {{ with .Site.Params.description -}} + + {{- end }} + {{ .Hugo.Generator }} + + {{ if not .IsHome }}{{ .Title }} —{{ end }} {{ .Site.Title }} + + + + + + diff --git a/themes/pure/layouts/partials/header.html b/themes/pure/layouts/partials/header.html new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/themes/pure/layouts/partials/header.html @@ -0,0 +1 @@ + diff --git a/themes/pure/static/assets/css/style.css b/themes/pure/static/assets/css/style.css new file mode 100644 index 0000000..d10ce1c --- /dev/null +++ b/themes/pure/static/assets/css/style.css @@ -0,0 +1,64 @@ +nav { + overflow: hidden; + padding: 0px 0px; + background: #E7732F; + height: 2.2em; +} + +nav ul { + display: block; +} + +nav ul li { + display: block; + float: left; + padding-left: 1em; +} + +nav ul li a img { + padding: .1em .2em; + width: 1.9em; +} + +nav ul li a img:hover { + background: #ffffff; +} + +#container { + min-height: 100%; + position: relative; +} + +#body { + padding: 10px; + padding-bottom: 2em; /* Height of the footer */ +} + +#footer { + position: absolute; + bottom: 0; + width: 100%; + height: 2em; /* Height of the footer */ +} + +.float-left { + float: left; +} + +.float-right { + float: right; +} + +.text-align-right { + text-align: right; +} + +.pure-menu-link { + color: #000000; +} + +.pure-menu-active>.pure-menu-link, +.pure-menu-link:focus, +.pure-menu-link:hover { + background-color:#ffffff +} \ No newline at end of file diff --git a/themes/pure/static/assets/vendor/purecss/pure-min.css b/themes/pure/static/assets/vendor/purecss/pure-min.css new file mode 100644 index 0000000..e3ddfbf --- /dev/null +++ b/themes/pure/static/assets/vendor/purecss/pure-min.css @@ -0,0 +1,11 @@ +/*! +Pure v1.0.0 +Copyright 2013 Yahoo! +Licensed under the BSD License. +https://github.com/yahoo/pure/blob/master/LICENSE.md +*/ +/*! +normalize.css v^3.0 | MIT License | git.io/normalize +Copyright (c) Nicolas Gallagher and Jonathan Neal +*/ +/*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */.pure-button:focus,a:active,a:hover{outline:0}.pure-table,table{border-collapse:collapse;border-spacing:0}html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}body{margin:0}article,aside,details,figcaption,figure,footer,header,hgroup,main,menu,nav,section,summary{display:block}audio,canvas,progress,video{display:inline-block;vertical-align:baseline}audio:not([controls]){display:none;height:0}[hidden],template{display:none}a{background-color:transparent}abbr[title]{border-bottom:1px dotted}b,optgroup,strong{font-weight:700}dfn{font-style:italic}h1{font-size:2em;margin:.67em 0}mark{background:#ff0;color:#000}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}img{border:0}svg:not(:root){overflow:hidden}figure{margin:1em 40px}hr{box-sizing:content-box;height:0}pre,textarea{overflow:auto}code,kbd,pre,samp{font-family:monospace,monospace;font-size:1em}button,input,optgroup,select,textarea{color:inherit;font:inherit;margin:0}.pure-button,input{line-height:normal}button{overflow:visible}button,select{text-transform:none}button,html input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}input[type=checkbox],input[type=radio]{box-sizing:border-box;padding:0}input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{height:auto}input[type=search]{-webkit-appearance:textfield;box-sizing:content-box}.pure-button,.pure-form input:not([type]),.pure-menu{box-sizing:border-box}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}fieldset{border:1px solid silver;margin:0 2px;padding:.35em .625em .75em}legend,td,th{padding:0}legend{border:0}.hidden,[hidden]{display:none!important}.pure-img{max-width:100%;height:auto;display:block}.pure-g{letter-spacing:-.31em;text-rendering:optimizespeed;font-family:FreeSans,Arimo,"Droid Sans",Helvetica,Arial,sans-serif;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-flow:row wrap;-ms-flex-flow:row wrap;flex-flow:row wrap;-webkit-align-content:flex-start;-ms-flex-line-pack:start;align-content:flex-start}@media all and (-ms-high-contrast:none),(-ms-high-contrast:active){table .pure-g{display:block}}.opera-only :-o-prefocus,.pure-g{word-spacing:-.43em}.pure-u,.pure-u-1,.pure-u-1-1,.pure-u-1-12,.pure-u-1-2,.pure-u-1-24,.pure-u-1-3,.pure-u-1-4,.pure-u-1-5,.pure-u-1-6,.pure-u-1-8,.pure-u-10-24,.pure-u-11-12,.pure-u-11-24,.pure-u-12-24,.pure-u-13-24,.pure-u-14-24,.pure-u-15-24,.pure-u-16-24,.pure-u-17-24,.pure-u-18-24,.pure-u-19-24,.pure-u-2-24,.pure-u-2-3,.pure-u-2-5,.pure-u-20-24,.pure-u-21-24,.pure-u-22-24,.pure-u-23-24,.pure-u-24-24,.pure-u-3-24,.pure-u-3-4,.pure-u-3-5,.pure-u-3-8,.pure-u-4-24,.pure-u-4-5,.pure-u-5-12,.pure-u-5-24,.pure-u-5-5,.pure-u-5-6,.pure-u-5-8,.pure-u-6-24,.pure-u-7-12,.pure-u-7-24,.pure-u-7-8,.pure-u-8-24,.pure-u-9-24{letter-spacing:normal;word-spacing:normal;vertical-align:top;text-rendering:auto;display:inline-block;zoom:1}.pure-g [class*=pure-u]{font-family:sans-serif}.pure-u-1-24{width:4.1667%}.pure-u-1-12,.pure-u-2-24{width:8.3333%}.pure-u-1-8,.pure-u-3-24{width:12.5%}.pure-u-1-6,.pure-u-4-24{width:16.6667%}.pure-u-1-5{width:20%}.pure-u-5-24{width:20.8333%}.pure-u-1-4,.pure-u-6-24{width:25%}.pure-u-7-24{width:29.1667%}.pure-u-1-3,.pure-u-8-24{width:33.3333%}.pure-u-3-8,.pure-u-9-24{width:37.5%}.pure-u-2-5{width:40%}.pure-u-10-24,.pure-u-5-12{width:41.6667%}.pure-u-11-24{width:45.8333%}.pure-u-1-2,.pure-u-12-24{width:50%}.pure-u-13-24{width:54.1667%}.pure-u-14-24,.pure-u-7-12{width:58.3333%}.pure-u-3-5{width:60%}.pure-u-15-24,.pure-u-5-8{width:62.5%}.pure-u-16-24,.pure-u-2-3{width:66.6667%}.pure-u-17-24{width:70.8333%}.pure-u-18-24,.pure-u-3-4{width:75%}.pure-u-19-24{width:79.1667%}.pure-u-4-5{width:80%}.pure-u-20-24,.pure-u-5-6{width:83.3333%}.pure-u-21-24,.pure-u-7-8{width:87.5%}.pure-u-11-12,.pure-u-22-24{width:91.6667%}.pure-u-23-24{width:95.8333%}.pure-u-1,.pure-u-1-1,.pure-u-24-24,.pure-u-5-5{width:100%}.pure-button{display:inline-block;zoom:1;white-space:nowrap;vertical-align:middle;text-align:center;cursor:pointer;-webkit-user-drag:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.pure-button::-moz-focus-inner{padding:0;border:0}.pure-button-group{letter-spacing:-.31em;text-rendering:optimizespeed}.opera-only :-o-prefocus,.pure-button-group{word-spacing:-.43em}.pure-button{font-family:inherit;font-size:100%;padding:.5em 1em;color:#444;color:rgba(0,0,0,.8);border:1px solid #999;border:transparent;background-color:#E6E6E6;text-decoration:none;border-radius:2px}.pure-button-hover,.pure-button:focus,.pure-button:hover{filter:alpha(opacity=90);background-image:-webkit-linear-gradient(transparent,rgba(0,0,0,.05) 40%,rgba(0,0,0,.1));background-image:linear-gradient(transparent,rgba(0,0,0,.05) 40%,rgba(0,0,0,.1))}.pure-button-active,.pure-button:active{box-shadow:0 0 0 1px rgba(0,0,0,.15) inset,0 0 6px rgba(0,0,0,.2) inset;border-color:#000\9}.pure-button-disabled,.pure-button-disabled:active,.pure-button-disabled:focus,.pure-button-disabled:hover,.pure-button[disabled]{border:none;background-image:none;filter:alpha(opacity=40);opacity:.4;cursor:not-allowed;box-shadow:none;pointer-events:none}.pure-button-hidden{display:none}.pure-button-primary,.pure-button-selected,a.pure-button-primary,a.pure-button-selected{background-color:#0078e7;color:#fff}.pure-button-group .pure-button{letter-spacing:normal;word-spacing:normal;vertical-align:top;text-rendering:auto;margin:0;border-radius:0;border-right:1px solid #111;border-right:1px solid rgba(0,0,0,.2)}.pure-button-group .pure-button:first-child{border-top-left-radius:2px;border-bottom-left-radius:2px}.pure-button-group .pure-button:last-child{border-top-right-radius:2px;border-bottom-right-radius:2px;border-right:none}.pure-form input[type=password],.pure-form input[type=email],.pure-form input[type=url],.pure-form input[type=date],.pure-form input[type=month],.pure-form input[type=time],.pure-form input[type=datetime],.pure-form input[type=datetime-local],.pure-form input[type=week],.pure-form input[type=tel],.pure-form input[type=color],.pure-form input[type=number],.pure-form input[type=search],.pure-form input[type=text],.pure-form select,.pure-form textarea{padding:.5em .6em;display:inline-block;border:1px solid #ccc;box-shadow:inset 0 1px 3px #ddd;border-radius:4px;vertical-align:middle;box-sizing:border-box}.pure-form input:not([type]){padding:.5em .6em;display:inline-block;border:1px solid #ccc;box-shadow:inset 0 1px 3px #ddd;border-radius:4px}.pure-form input[type=color]{padding:.2em .5em}.pure-form input:not([type]):focus,.pure-form input[type=password]:focus,.pure-form input[type=email]:focus,.pure-form input[type=url]:focus,.pure-form input[type=date]:focus,.pure-form input[type=month]:focus,.pure-form input[type=time]:focus,.pure-form input[type=datetime]:focus,.pure-form input[type=datetime-local]:focus,.pure-form input[type=week]:focus,.pure-form input[type=tel]:focus,.pure-form input[type=color]:focus,.pure-form input[type=number]:focus,.pure-form input[type=search]:focus,.pure-form input[type=text]:focus,.pure-form select:focus,.pure-form textarea:focus{outline:0;border-color:#129FEA}.pure-form input[type=file]:focus,.pure-form input[type=checkbox]:focus,.pure-form input[type=radio]:focus{outline:#129FEA auto 1px}.pure-form .pure-checkbox,.pure-form .pure-radio{margin:.5em 0;display:block}.pure-form input:not([type])[disabled],.pure-form input[type=password][disabled],.pure-form input[type=email][disabled],.pure-form input[type=url][disabled],.pure-form input[type=date][disabled],.pure-form input[type=month][disabled],.pure-form input[type=time][disabled],.pure-form input[type=datetime][disabled],.pure-form input[type=datetime-local][disabled],.pure-form input[type=week][disabled],.pure-form input[type=tel][disabled],.pure-form input[type=color][disabled],.pure-form input[type=number][disabled],.pure-form input[type=search][disabled],.pure-form input[type=text][disabled],.pure-form select[disabled],.pure-form textarea[disabled]{cursor:not-allowed;background-color:#eaeded;color:#cad2d3}.pure-form input[readonly],.pure-form select[readonly],.pure-form textarea[readonly]{background-color:#eee;color:#777;border-color:#ccc}.pure-form input:focus:invalid,.pure-form select:focus:invalid,.pure-form textarea:focus:invalid{color:#b94a48;border-color:#e9322d}.pure-form input[type=file]:focus:invalid:focus,.pure-form input[type=checkbox]:focus:invalid:focus,.pure-form input[type=radio]:focus:invalid:focus{outline-color:#e9322d}.pure-form select{height:2.25em;border:1px solid #ccc;background-color:#fff}.pure-form select[multiple]{height:auto}.pure-form label{margin:.5em 0 .2em}.pure-form fieldset{margin:0;padding:.35em 0 .75em;border:0}.pure-form legend{display:block;width:100%;padding:.3em 0;margin-bottom:.3em;color:#333;border-bottom:1px solid #e5e5e5}.pure-form-stacked input:not([type]),.pure-form-stacked input[type=password],.pure-form-stacked input[type=email],.pure-form-stacked input[type=url],.pure-form-stacked input[type=date],.pure-form-stacked input[type=month],.pure-form-stacked input[type=time],.pure-form-stacked input[type=datetime],.pure-form-stacked input[type=datetime-local],.pure-form-stacked input[type=week],.pure-form-stacked input[type=tel],.pure-form-stacked input[type=color],.pure-form-stacked input[type=file],.pure-form-stacked input[type=number],.pure-form-stacked input[type=search],.pure-form-stacked input[type=text],.pure-form-stacked label,.pure-form-stacked select,.pure-form-stacked textarea{display:block;margin:.25em 0}.pure-form-aligned .pure-help-inline,.pure-form-aligned input,.pure-form-aligned select,.pure-form-aligned textarea,.pure-form-message-inline{display:inline-block;vertical-align:middle}.pure-form-aligned textarea{vertical-align:top}.pure-form-aligned .pure-control-group{margin-bottom:.5em}.pure-form-aligned .pure-control-group label{text-align:right;display:inline-block;vertical-align:middle;width:10em;margin:0 1em 0 0}.pure-form-aligned .pure-controls{margin:1.5em 0 0 11em}.pure-form .pure-input-rounded,.pure-form input.pure-input-rounded{border-radius:2em;padding:.5em 1em}.pure-form .pure-group fieldset{margin-bottom:10px}.pure-form .pure-group input,.pure-form .pure-group textarea{display:block;padding:10px;margin:0 0 -1px;border-radius:0;position:relative;top:-1px}.pure-form .pure-group input:focus,.pure-form .pure-group textarea:focus{z-index:3}.pure-form .pure-group input:first-child,.pure-form .pure-group textarea:first-child{top:1px;border-radius:4px 4px 0 0;margin:0}.pure-form .pure-group input:first-child:last-child,.pure-form .pure-group textarea:first-child:last-child{top:1px;border-radius:4px;margin:0}.pure-form .pure-group input:last-child,.pure-form .pure-group textarea:last-child{top:-2px;border-radius:0 0 4px 4px;margin:0}.pure-form .pure-group button{margin:.35em 0}.pure-form .pure-input-1{width:100%}.pure-form .pure-input-3-4{width:75%}.pure-form .pure-input-2-3{width:66%}.pure-form .pure-input-1-2{width:50%}.pure-form .pure-input-1-3{width:33%}.pure-form .pure-input-1-4{width:25%}.pure-form .pure-help-inline,.pure-form-message-inline{display:inline-block;padding-left:.3em;color:#666;vertical-align:middle;font-size:.875em}.pure-form-message{display:block;color:#666;font-size:.875em}@media only screen and (max-width :480px){.pure-form button[type=submit]{margin:.7em 0 0}.pure-form input:not([type]),.pure-form input[type=password],.pure-form input[type=email],.pure-form input[type=url],.pure-form input[type=date],.pure-form input[type=month],.pure-form input[type=time],.pure-form input[type=datetime],.pure-form input[type=datetime-local],.pure-form input[type=week],.pure-form input[type=tel],.pure-form input[type=color],.pure-form input[type=number],.pure-form input[type=search],.pure-form input[type=text],.pure-form label{margin-bottom:.3em;display:block}.pure-group input:not([type]),.pure-group input[type=password],.pure-group input[type=email],.pure-group input[type=url],.pure-group input[type=date],.pure-group input[type=month],.pure-group input[type=time],.pure-group input[type=datetime],.pure-group input[type=datetime-local],.pure-group input[type=week],.pure-group input[type=tel],.pure-group input[type=color],.pure-group input[type=number],.pure-group input[type=search],.pure-group input[type=text]{margin-bottom:0}.pure-form-aligned .pure-control-group label{margin-bottom:.3em;text-align:left;display:block;width:100%}.pure-form-aligned .pure-controls{margin:1.5em 0 0}.pure-form .pure-help-inline,.pure-form-message,.pure-form-message-inline{display:block;font-size:.75em;padding:.2em 0 .8em}}.pure-menu-fixed{position:fixed;left:0;top:0;z-index:3}.pure-menu-item,.pure-menu-list{position:relative}.pure-menu-list{list-style:none;margin:0;padding:0}.pure-menu-item{padding:0;margin:0;height:100%}.pure-menu-heading,.pure-menu-link{display:block;text-decoration:none;white-space:nowrap}.pure-menu-horizontal{width:100%;white-space:nowrap}.pure-menu-horizontal .pure-menu-list{display:inline-block}.pure-menu-horizontal .pure-menu-heading,.pure-menu-horizontal .pure-menu-item,.pure-menu-horizontal .pure-menu-separator{display:inline-block;zoom:1;vertical-align:middle}.pure-menu-item .pure-menu-item{display:block}.pure-menu-children{display:none;position:absolute;left:100%;top:0;margin:0;padding:0;z-index:3}.pure-menu-horizontal .pure-menu-children{left:0;top:auto;width:inherit}.pure-menu-active>.pure-menu-children,.pure-menu-allow-hover:hover>.pure-menu-children{display:block;position:absolute}.pure-menu-has-children>.pure-menu-link:after{padding-left:.5em;content:"\25B8";font-size:small}.pure-menu-horizontal .pure-menu-has-children>.pure-menu-link:after{content:"\25BE"}.pure-menu-scrollable{overflow-y:scroll;overflow-x:hidden}.pure-menu-scrollable .pure-menu-list{display:block}.pure-menu-horizontal.pure-menu-scrollable .pure-menu-list{display:inline-block}.pure-menu-horizontal.pure-menu-scrollable{white-space:nowrap;overflow-y:hidden;overflow-x:auto;-ms-overflow-style:none;-webkit-overflow-scrolling:touch;padding:.5em 0}.pure-menu-horizontal.pure-menu-scrollable::-webkit-scrollbar{display:none}.pure-menu-horizontal .pure-menu-children .pure-menu-separator,.pure-menu-separator{background-color:#ccc;height:1px;margin:.3em 0}.pure-menu-horizontal .pure-menu-separator{width:1px;height:1.3em;margin:0 .3em}.pure-menu-horizontal .pure-menu-children .pure-menu-separator{display:block;width:auto}.pure-menu-heading{text-transform:uppercase;color:#565d64}.pure-menu-link{color:#777}.pure-menu-children{background-color:#fff}.pure-menu-disabled,.pure-menu-heading,.pure-menu-link{padding:.5em 1em}.pure-menu-disabled{opacity:.5}.pure-menu-disabled .pure-menu-link:hover{background-color:transparent}.pure-menu-active>.pure-menu-link,.pure-menu-link:focus,.pure-menu-link:hover{background-color:#eee}.pure-menu-selected .pure-menu-link,.pure-menu-selected .pure-menu-link:visited{color:#000}.pure-table{empty-cells:show;border:1px solid #cbcbcb}.pure-table caption{color:#000;font:italic 85%/1 arial,sans-serif;padding:1em 0;text-align:center}.pure-table td,.pure-table th{border-left:1px solid #cbcbcb;border-width:0 0 0 1px;font-size:inherit;margin:0;overflow:visible;padding:.5em 1em}.pure-table td:first-child,.pure-table th:first-child{border-left-width:0}.pure-table thead{background-color:#e0e0e0;color:#000;text-align:left;vertical-align:bottom}.pure-table td{background-color:transparent}.pure-table-odd td,.pure-table-striped tr:nth-child(2n-1) td{background-color:#f2f2f2}.pure-table-bordered td{border-bottom:1px solid #cbcbcb}.pure-table-bordered tbody>tr:last-child>td{border-bottom-width:0}.pure-table-horizontal td,.pure-table-horizontal th{border-width:0 0 1px;border-bottom:1px solid #cbcbcb}.pure-table-horizontal tbody>tr:last-child>td{border-bottom-width:0} \ No newline at end of file diff --git a/themes/pure/theme.toml b/themes/pure/theme.toml new file mode 100644 index 0000000..ebd419e --- /dev/null +++ b/themes/pure/theme.toml @@ -0,0 +1,21 @@ +# theme.toml template for a Hugo theme +# See https://github.com/gohugoio/hugoThemes#themetoml for an example + +name = "Pure" +license = "MIT" +licenselink = "https://github.com/yourname/yourtheme/blob/master/LICENSE" +description = "" +homepage = "http://sothr.com/" +tags = [] +features = [] +min_version = "0.41" + +[author] + name = "Drew Short" + homepage = "https://sothr.com" + +# If porting an existing theme +[original] + name = "" + homepage = "" + repo = ""