├── .envrc ├── .github ├── banner.jpg └── bmc-button.png ├── .gitignore ├── LICENSE ├── README.md ├── archetypes └── default.md ├── assets ├── config │ ├── generator.js │ ├── postcss.config.js │ └── tailwind.config.js ├── css │ └── syntax.css ├── js │ └── dark-mode.js └── sass │ ├── _blend.sass │ ├── _position.sass │ ├── _tailwindcss.sass │ ├── _text.sass │ ├── _theme.sass │ ├── _variables.scss │ ├── fonts │ ├── _all.sass │ ├── charter.sass │ └── spectral.sass │ └── styles.sass ├── exampleSite ├── .gitignore ├── LICENSE ├── README.md ├── archetypes │ └── default.md ├── assets │ ├── js │ │ └── console.js │ └── style │ │ ├── style.css │ │ └── theme.sass ├── config.toml ├── content │ ├── en │ │ ├── about │ │ │ └── index.md │ │ ├── blog │ │ │ ├── _index.md │ │ │ └── krabby_patty.md │ │ └── home │ │ │ ├── contact.md │ │ │ ├── experience.md │ │ │ ├── hero.md │ │ │ ├── index.md │ │ │ ├── posts.md │ │ │ └── skills.md │ └── fr │ │ ├── about │ │ └── index.md │ │ ├── blog │ │ ├── _index.md │ │ └── krabby_patty.md │ │ └── home │ │ ├── contact.md │ │ ├── experience.md │ │ ├── hero.md │ │ ├── index.md │ │ ├── posts.md │ │ └── skills.md ├── netlify.toml ├── package-lock.json ├── package.json ├── resources │ └── _gen │ │ └── assets │ │ └── sass │ │ ├── sass │ │ ├── styles.sass_d536e9f722854ec696a0bd459525def6.content │ │ └── styles.sass_d536e9f722854ec696a0bd459525def6.json │ │ └── style │ │ ├── theme.sass_cbdc4778711e418b9c89192b90b1ca19.content │ │ └── theme.sass_cbdc4778711e418b9c89192b90b1ca19.json ├── setup.sh ├── static │ ├── icons │ │ ├── chicken.svg │ │ ├── heat.svg │ │ ├── precision.svg │ │ └── presentation.svg │ └── img │ │ ├── default_banner.webp │ │ ├── krabby_patty.webp │ │ ├── krusty_krab.webp │ │ ├── portrait.jpg │ │ ├── portrait.webp │ │ └── spongebob-krusty-cook.webp └── update.sh ├── flake.lock ├── flake.nix ├── go.mod ├── i18n ├── de.toml ├── en.toml ├── es.toml ├── fr.toml └── it.toml ├── images ├── screenshot.png ├── screenshot_dark.png ├── tn.png └── tn_dark.png ├── layouts ├── 404.html ├── _default │ ├── _markup │ │ ├── render-image.html │ │ └── render-link.html │ ├── baseof.html │ ├── list.html │ └── single.html ├── blog │ ├── list.html │ └── single.html ├── index.html ├── partials │ ├── button.html │ ├── card.html │ ├── contact_icons.html │ ├── dev │ │ ├── parameters.html │ │ └── size-indicator.html │ ├── footer.html │ ├── head │ │ ├── css.html │ │ ├── js.html │ │ ├── metadata.html │ │ ├── open_graph.html │ │ └── twitter.html │ ├── header.html │ ├── icon.html │ ├── taxonomy_list.html │ └── widgets │ │ ├── bars.html │ │ ├── blank.html │ │ ├── contact_form.html │ │ ├── hero.html │ │ ├── pages.html │ │ └── timeline.html └── taxonomy │ └── list.html ├── netlify.toml ├── package-lock.json ├── package.json ├── static ├── favicon.ico ├── favicon.png ├── fonts │ ├── charter │ │ ├── bold.woff │ │ ├── bold_italic.woff │ │ ├── italic.woff │ │ ├── license.txt │ │ └── regular.woff │ └── spectral │ │ ├── OFL.txt │ │ ├── bold.woff2 │ │ ├── bold_italic.woff2 │ │ ├── extra_bold.woff2 │ │ ├── extra_bold_italic.woff2 │ │ ├── extra_light.woff2 │ │ ├── extra_light_italic.woff2 │ │ ├── italic.woff2 │ │ ├── light.woff2 │ │ ├── light_italic.woff2 │ │ ├── medium.woff2 │ │ ├── medium_italic.woff2 │ │ ├── regular.woff2 │ │ └── semi_bold_italic.woff2 └── icons │ ├── email.svg │ ├── facebook.svg │ ├── github.svg │ ├── medium.svg │ ├── stack-overflow.svg │ ├── tag.svg │ ├── top_arrow.svg │ └── twitter.svg └── theme.toml /.envrc: -------------------------------------------------------------------------------- 1 | use flake 2 | -------------------------------------------------------------------------------- /.github/banner.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/negrel/hugo-theme-pico/ef7057b8650cd6d71c35c7212332340ecc01af13/.github/banner.jpg -------------------------------------------------------------------------------- /.github/bmc-button.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/negrel/hugo-theme-pico/ef7057b8650cd6d71c35c7212332340ecc01af13/.github/bmc-button.png -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules/ 2 | **/public/ 3 | **/themes/* 4 | .direnv/ 5 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2020 Alexandre NEGREL 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy of 6 | this software and associated documentation files (the "Software"), to deal in 7 | the Software without restriction, including without limitation the rights to 8 | use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of 9 | the Software, and to permit persons to whom the Software is furnished to do so, 10 | subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS 17 | FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR 18 | COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER 19 | IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN 20 | CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 21 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # :black_circle: Pico 2 |

3 | 4 | Netlify Status 5 | 6 | 7 | 8 | 9 | 10 |

11 | 12 | This theme aims to be minimalist, readable, responsive, light and beautiful. Inspired by **Medium** and **The New York Times**, Pico try to provide the best experience for the reader while having an awesome design. It can be configured as a single page, or as a full-featured site with multiple sections. It is multilingual, responsive, and includes a light and *dark theme*. 13 | 14 | You can check the [**example site**](https://sponge-bob.netlify.app/). 15 | ![pico example screenshot](https://github.com/negrel/hugo-theme-pico/raw/master/.github/banner.jpg) 16 | 17 | Features : 18 | - Multilingual - supports side-by-side content in different language versions 19 | - Syntax highlighting ("one dark" theme) 20 | - Styled Markdown throughout, including post titles 21 | - Customizable pages with widget or [TailwindCSS](https://tailwindcss.com/) 22 | - Straightforward customization via config.toml 23 | - Projects and Blog sections 24 | - Light, CSS bundle is purged and minified thanks to PostCSS 25 | - Light & Dark theme 26 | 27 | Developer-friendly : 28 | - Sass files included with instant compiling to CSS thanks to Hugo Pipes and PostCSS 29 | - [TailwindCSS](https://tailwindcss.com/) for rapidly building custom design 30 | 31 | ## Preview the theme 32 | Pico ships with an fully configured example site. For a quick preview: 33 | 34 | ``` 35 | cd themes/pico/exampleSite/ 36 | hugo server --themesDir ../.. 37 | ``` 38 | 39 | Then visit `http://localhost:1313/` in your browser to view the example site. 40 | 41 | ## Getting started 42 | 43 | ### Requirements 44 | - Extended version of [Hugo](https://gohugo.io/getting-started/installing/) (latest version recommended) 45 | Some [NPM](https://npmjs.org) packages : 46 | - [postcss-cli](https://www.npmjs.com/package/postcss-cli) 47 | - [postcss-import](https://www.npmjs.com/package/postcss-import) 48 | - [autoprefixer](https://www.npmjs.com/package/autoprefixer) 49 | - [@fullhuman/postcss-purgecss](https://www.npmjs.com/package/@fullhuman/postcss-purgecss) 50 | - [tailwindcss](https://www.npmjs.com/package/tailwindcss) 51 | 52 | Learn how to install and use npm [here](https://www.npmjs.com/get-npm). 53 | 54 | ### Get the theme 55 | 56 | ``` 57 | # Clone the repository 58 | git clone https://github.com/negrel/hugo-theme-pico.git pico 59 | 60 | # Copy the example site 61 | mkdir my_website 62 | cp -r pico/exampleSite/* my_website 63 | 64 | # You can delete the cloned repository 65 | rm -rf pico 66 | 67 | # Navigate to your website 68 | cd my_website 69 | 70 | # Install the node modules and the theme via the script 71 | ./setup.sh 72 | 73 | # OR manually 74 | # Installing node modules 75 | npm install 76 | 77 | # Adding the theme as a submodule (better maintenance than a clone) 78 | # NOTE: my_website/ must be a git repository 79 | git submodule add -f https://github.com/negrel/hugo-theme-pico.git ./themes/pico 80 | 81 | # Start the dev server 82 | hugo server 83 | ``` 84 | 85 | Your website is running :smile:, you can start editing content files. 86 | 87 | ### Multilingual 88 | Pico currently ships with support for 5 languages (fr, en, it, es, de). Contributions for other language translations are welcome. 89 | To create a new language translation, add the .toml file to the i18n/ folder. See the existing files for the necessary fields. 90 | See the [hugo documentation](https://gohugo.io/content-management/multilingual/) for more details. 91 | 92 | ### Menu 93 | Pico contains a default menu. If you want to override this, you can do so by editing the menu.main in config.toml. 94 | 95 | ### Google Analytics 96 | Set googleAnalytics in config.toml to activate Hugo's internal [Google Analytics template](https://gohugo.io/templates/internal/#google-analytics). 97 | 98 | ### Contributing 99 | If you want to contribute to Pico to add a feature or improve the code contact me at [negrel.dev@protonmail.com](mailto:negrel.dev@protonmail.com), open an [issue](https://github.com/negrel/pico-hugo-theme/issues) or make a [pull request](https://github.com/negrel/pico-hugo-theme/pulls). 100 | 101 | ## :stars: Show your support 102 | Please give a :star: if this project helped you! 103 | 104 | [![buy me a coffee](.github/bmc-button.png)](https://www.buymeacoffee.com/negrel) 105 | 106 | #### :scroll: License 107 | MIT © [Alexandre Negrel](https://www.negrel.dev) 108 | 109 | 110 | [![FOSSA Status](https://app.fossa.com/api/projects/git%2Bgithub.com%2Fnegrel%2Fhugo-theme-pico.svg?type=large)](https://app.fossa.com/projects/git%2Bgithub.com%2Fnegrel%2Fhugo-theme-pico?ref=badge_large) 111 | -------------------------------------------------------------------------------- /archetypes/default.md: -------------------------------------------------------------------------------- 1 | --- 2 | author: 3 | title: {{ replace .Name "-" " " | title }} 4 | date: {{ .Date }} 5 | --- -------------------------------------------------------------------------------- /assets/config/generator.js: -------------------------------------------------------------------------------- 1 | const units = [1, 2, 3, 4, 5, 6, 8, 10, 12, 14, 16, 20, 24, 32, 40, 48, 56, 64]; 2 | 3 | module.exports = (obj, { 4 | std, 5 | negative, 6 | percentage, 7 | vh, 8 | vw 9 | }) => { 10 | if (std) { 11 | for (const unit of units) { 12 | obj[`${unit}`] = `${unit * 0.25}rem`; 13 | } 14 | } 15 | 16 | if (negative) { 17 | for (const unit of units) { 18 | obj[`-${unit}`] = `${-unit * 0.25}rem`; 19 | } 20 | } 21 | 22 | if (percentage) { 23 | for (let i = 2; i <= 6; i++) { 24 | for (let j = 1; j < i; j++) { 25 | obj[`${j}/${i}`] = `${(j / i) * 100}%`; 26 | } 27 | } 28 | 29 | for (let j = 1; j < 12; j++) { 30 | obj[`${j}/${12}`] = `${(j / 12) * 100}%`; 31 | } 32 | } 33 | 34 | if (vh) { 35 | for (let i = 2; i <= 6; i++) { 36 | for (let j = 1; j < i; j++) { 37 | obj[`vh-${j}/${i}`] = `${(j / i) * 100}vh`; 38 | } 39 | } 40 | 41 | for (let j = 1; j < 12; j++) { 42 | obj[`vh-${j}/${12}`] = `${(j / 12) * 100}vh`; 43 | } 44 | } 45 | 46 | if (vw) { 47 | for (let i = 2; i <= 6; i++) { 48 | for (let j = 1; j < i; j++) { 49 | obj[`vw-${j}/${i}`] = `${(j / i) * 100}vw`; 50 | } 51 | } 52 | 53 | for (let j = 1; j < 12; j++) { 54 | obj[`vw-${j}/${12}`] = `${(j / 12) * 100}vw`; 55 | } 56 | } 57 | 58 | return obj; 59 | }; 60 | -------------------------------------------------------------------------------- /assets/config/postcss.config.js: -------------------------------------------------------------------------------- 1 | const path = require('path') 2 | 3 | const themeDir = path.join(__dirname, '..', '..') 4 | 5 | module.exports = { 6 | plugins: [ 7 | require('postcss-import'), 8 | require('tailwindcss')(path.join(themeDir, 'assets', 'config', 'tailwind.config.js')), 9 | require('autoprefixer'), 10 | ] 11 | } 12 | -------------------------------------------------------------------------------- /assets/config/tailwind.config.js: -------------------------------------------------------------------------------- 1 | const generator = require('./generator') 2 | 3 | const inset = generator({ 4 | 0: '0rem', 5 | full: '100%' 6 | }, { 7 | std: true, 8 | negative: true, 9 | percentage: true 10 | }) 11 | const maxWidth = generator({ 12 | 0: '0rem', 13 | screen: '100vw' 14 | }, { 15 | std: true, 16 | percentage: true, 17 | vw: true 18 | }) 19 | const maxHeight = generator({ 20 | 0: '0rem', 21 | screen: '100vw' 22 | }, { 23 | std: true, 24 | percentage: true, 25 | vh: true 26 | }) 27 | 28 | module.exports = { 29 | darkMode: 'class', 30 | content: { 31 | relative: true, 32 | files: ['../../layouts/*.html', '../../layouts/**/*.html'] 33 | }, 34 | theme: { 35 | inset, 36 | extend: { 37 | maxWidth: ({ theme }) => ({ 38 | ...maxWidth, 39 | ...theme('spacing') 40 | }), 41 | maxHeight: ({ theme }) => ({ 42 | ...maxHeight, 43 | ...theme('spacing') 44 | }), 45 | fontFamily: { 46 | serif: ['Spectral', 'Georgia', 'Cambria', 'Times New Roman', 'Times', 'serif'], 47 | charter: ['charter', 'Georgia', 'Cambria', 'Times New Roman', 'Times', 'serif'] 48 | }, 49 | colors: { 50 | // material color => grey 51 | // tailwindcss grey => gray 52 | grey: { 53 | 100: '#f5f5f5', 54 | 200: '#eeeeee', 55 | 300: '#e0e0e0', 56 | 400: '#bdbdbd', 57 | 500: '#9e9e9e', 58 | 600: '#757575', 59 | 700: '#616161', 60 | 800: '#424242', 61 | 900: '#212121' 62 | }, 63 | green: { 64 | apple: '#E8F3EC', 65 | 100: '#f0fff4', 66 | 200: '#c6f6d5', 67 | 300: '#9ae6b4', 68 | 400: '#68d391', 69 | 500: '#48bb78', 70 | 600: '#38a169', 71 | 700: '#2f855a', 72 | 800: '#276749', 73 | 900: '#22543d' 74 | }, 75 | primary: 'var(--color-primary)', 76 | 'primary-dark': 'var(--color-primary-dark)', 77 | 'primary-light': 'var(--color-primary-light)', 78 | 79 | secondary: 'var(--color-secondary)', 80 | 'secondary-dark': 'var(--color-secondary-dark)', 81 | 'secondary-light': 'var(--color-secondary-light)', 82 | 83 | accent: 'var(--color-accent)', 84 | 'accent-dark': 'var(--color-accent-dark)', 85 | 'accent-light': 'var(--color-accent-light)' 86 | } 87 | }, 88 | boxShadow: { 89 | xs: '0 0 0 1px rgba(0, 0, 0, 0.05)', 90 | sm: '0 1px 2px 0 rgba(0, 0, 0, 0.05)', 91 | DEFAULT: '0 1px 3px 0 rgba(0, 0, 0, 0.1), 0 1px 2px 0 rgba(0, 0, 0, 0.06)', 92 | md: '0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06)', 93 | lg: '0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -2px rgba(0, 0, 0, 0.05)', 94 | xl: '0 20px 25px -5px rgba(0, 0, 0, 0.1), 0 10px 10px -5px rgba(0, 0, 0, 0.04)', 95 | '2xl': '0 25px 50px -12px rgba(0, 0, 0, 0.25)', 96 | // Custom shadow 97 | 1: '0 1px 3px rgba(0,0,0,0.2), 0 1px 1px rgba(0,0,0,0.14), 0 2px 1px -1px rgba(0,0,0,0.12)', 98 | 2: '0 1px 5px rgba(0,0,0,0.2), 0 2px 2px rgba(0,0,0,0.14), 0 3px 1px -2px rgba(0,0,0,0.12)', 99 | 3: '0 1px 8px rgba(0,0,0,0.2), 0 3px 4px rgba(0,0,0,0.14), 0 3px 3px -2px rgba(0,0,0,0.12)', 100 | 4: '0 2px 4px -1px rgba(0,0,0,0.2), 0 4px 5px rgba(0,0,0,0.14), 0 1px 10px rgba(0,0,0,0.12)', 101 | 5: '0 3px 5px -1px rgba(0,0,0,0.2), 0 5px 8px rgba(0,0,0,0.14), 0 1px 14px rgba(0,0,0,0.12)', 102 | 6: '0 3px 5px -1px rgba(0,0,0,0.2), 0 6px 10px rgba(0,0,0,0.14), 0 1px 18px rgba(0,0,0,0.12)', 103 | 7: '0 4px 5px -2px rgba(0,0,0,0.2), 0 7px 10px 1px rgba(0,0,0,0.14), 0 2px 16px 1px rgba(0,0,0,0.12)', 104 | 8: '0 5px 5px -3px rgba(0,0,0,0.2), 0 8px 10px 1px rgba(0,0,0,0.14), 0 3px 14px 2px rgba(0,0,0,0.12)', 105 | 9: '0 5px 6px -3px rgba(0,0,0,0.2), 0 9px 12px 1px rgba(0,0,0,0.14), 0 3px 16px 2px rgba(0,0,0,0.12)', 106 | 10: '0 6px 6px -3px rgba(0,0,0,0.2), 0 10px 14px 1px rgba(0,0,0,0.14), 0 4px 18px 3px rgba(0,0,0,0.12)', 107 | 11: '0 6px 7px -4px rgba(0,0,0,0.2), 0 11px 15px 1px rgba(0,0,0,0.14), 0 4px 20px 3px rgba(0,0,0,0.12)', 108 | 12: '0 7px 8px -4px rgba(0,0,0,0.2), 0 12px 17px 2px rgba(0,0,0,0.14), 0 5px 22px 4px rgba(0,0,0,0.12)', 109 | 13: '0 7px 8px -4px rgba(0,0,0,0.2), 0 13px 19px 2px rgba(0,0,0,0.14), 0 5px 24px 4px rgba(0,0,0,0.12)', 110 | 14: '0 7px 9px -4px rgba(0,0,0,0.2), 0 14px 21px 2px rgba(0,0,0,0.14), 0 5px 26px 4px rgba(0,0,0,0.12)', 111 | 15: '0 8px 9px -5px rgba(0,0,0,0.2), 0 15px 22px 2px rgba(0,0,0,0.14), 0 6px 28px 5px rgba(0,0,0,0.12)', 112 | 16: '0 8px 10px -5px rgba(0,0,0,0.2), 0 16px 24px 2px rgba(0,0,0,0.14), 0 6px 30px 5px rgba(0,0,0,0.12)', 113 | soft: '0 30px 60px -10px rgba(0,0,0,.22), 0 18px 36px -18px rgba(0,0,0,.25)' 114 | } 115 | }, 116 | plugins: [] 117 | } 118 | -------------------------------------------------------------------------------- /assets/css/syntax.css: -------------------------------------------------------------------------------- 1 | .chroma { 2 | margin-top: 1rem; 3 | margin-bottom: 1rem; 4 | padding: 1rem; 5 | overflow-x: auto; 6 | } 7 | 8 | .chroma { 9 | scrollbar-width: thin; 10 | scrollbar-color: #8893ad #282C34; 11 | } 12 | 13 | /* width */ 14 | 15 | .chroma::-webkit-scrollbar { 16 | width: 2px; 17 | } 18 | 19 | /* Track */ 20 | 21 | .chroma::-webkit-scrollbar-track { 22 | background: #282C34; 23 | } 24 | 25 | /* Handle */ 26 | 27 | .chroma::-webkit-scrollbar-thumb { 28 | background: #586072; 29 | border-radius: 10000px; 30 | border: 3px solid #282C34; 31 | } 32 | 33 | /* Handle on hover */ 34 | 35 | .chroma::-webkit-scrollbar-thumb:hover { 36 | background: #8893ad; 37 | } 38 | 39 | .chroma, 40 | .chroma code, 41 | .post-content > .highlight { 42 | background: #282C34; 43 | border-radius: 4px; 44 | -webkit-font-smoothing: subpixel-antialiased; 45 | width: 100%; 46 | color: white; 47 | } 48 | 49 | .highlight .c { 50 | color: #5B6370; 51 | font-style: italic; 52 | } 53 | 54 | .highlight .err { 55 | color: #960050; 56 | background-color: #1e0010; 57 | } 58 | 59 | .highlight .k { 60 | color: #C776DF; 61 | font-weight: bold; 62 | } 63 | 64 | .highlight .o { 65 | font-weight: bold; 66 | } 67 | 68 | .highlight .cm { 69 | color: #5B6370; 70 | font-style: italic; 71 | } 72 | 73 | .highlight .cp { 74 | color: #5B6370; 75 | font-weight: bold; 76 | } 77 | 78 | .highlight .c1 { 79 | color: #5B6370; 80 | font-style: italic; 81 | } 82 | 83 | .highlight .cs { 84 | color: #5B6370; 85 | font-weight: bold; 86 | font-style: italic; 87 | } 88 | 89 | .highlight .gd { 90 | color: #000; 91 | background-color: #fdd; 92 | } 93 | 94 | .highlight .gd .x { 95 | color: #000; 96 | background-color: #faa; 97 | } 98 | 99 | .highlight .ge { 100 | font-style: italic; 101 | } 102 | 103 | .highlight .gr { 104 | color: #a00; 105 | } 106 | 107 | .highlight .gh { 108 | color: #5B6370; 109 | } 110 | 111 | .highlight .gi { 112 | color: #a6e22e; 113 | background-color: #dfd; 114 | } 115 | 116 | .highlight .gi .x { 117 | color: #a6e22e; 118 | background-color: #afa; 119 | } 120 | 121 | .highlight .go { 122 | color: #888; 123 | } 124 | 125 | .highlight .gp { 126 | color: #555; 127 | } 128 | 129 | .highlight .gs { 130 | font-weight: bold; 131 | } 132 | 133 | .highlight .gu { 134 | color: #aaa; 135 | } 136 | 137 | .highlight .gt { 138 | color: #a00; 139 | } 140 | 141 | .highlight .kc { 142 | font-weight: bold; 143 | } 144 | 145 | .highlight .kd { 146 | color: #C776DF; 147 | font-weight: bold; 148 | } 149 | 150 | .highlight .kp { 151 | font-weight: bold; 152 | } 153 | 154 | .highlight .kr { 155 | font-weight: bold; 156 | } 157 | 158 | .highlight .kt { 159 | color: #458; 160 | font-weight: bold; 161 | } 162 | 163 | .highlight .m { 164 | color: #4FB6C3; 165 | } 166 | 167 | .highlight .s { 168 | color: #A2BD40; 169 | } 170 | 171 | .highlight .na { 172 | color: #E2964A; 173 | } 174 | 175 | .highlight .nb { 176 | color: #4FB6C3; 177 | } 178 | 179 | .highlight .nc { 180 | color: #E2964A; 181 | font-weight: bold; 182 | } 183 | 184 | .highlight .nd { 185 | color: #4FB6BE; 186 | } 187 | 188 | .highlight .no { 189 | color: #4FB6BE; 190 | } 191 | 192 | .highlight .ni { 193 | color: #E2964A; 194 | } 195 | 196 | .highlight .ne { 197 | color: #900; 198 | font-weight: bold; 199 | } 200 | 201 | .highlight .nf { 202 | color: #52A5EB; 203 | font-weight: bold; 204 | } 205 | 206 | .highlight .nn { 207 | color: #555; 208 | } 209 | 210 | .highlight .nt { 211 | color: #DE5442; 212 | } 213 | 214 | .highlight .nv { 215 | color: #DE5442; 216 | } 217 | 218 | .highlight .ow { 219 | font-weight: bold; 220 | } 221 | 222 | .highlight .w { 223 | color: #bbb; 224 | } 225 | 226 | .highlight .mf { 227 | color: #4FB6C3; 228 | } 229 | 230 | .highlight .mh { 231 | color: #4FB6C3; 232 | } 233 | 234 | .highlight .mi { 235 | color: #4FB6C3; 236 | } 237 | 238 | .highlight .mo { 239 | color: #4FB6C3; 240 | } 241 | 242 | .highlight .sb { 243 | color: #A2BD40; 244 | } 245 | 246 | .highlight .sc { 247 | color: #A2BD40; 248 | } 249 | 250 | .highlight .sd { 251 | color: #5B6370; 252 | } 253 | 254 | .highlight .s2 { 255 | color: #A2BD40; 256 | } 257 | 258 | .highlight .se { 259 | color: #A2BD40; 260 | } 261 | 262 | .highlight .sh { 263 | color: #A2BD40; 264 | } 265 | 266 | .highlight .si { 267 | color: #A2BD40; 268 | } 269 | 270 | .highlight .sx { 271 | color: #A2BD40; 272 | } 273 | 274 | .highlight .sr { 275 | color: #009926; 276 | } 277 | 278 | .highlight .s1 { 279 | color: #A2BD40; 280 | } 281 | 282 | .highlight .ss { 283 | color: #990073; 284 | } 285 | 286 | .highlight .bp { 287 | color: #999; 288 | } 289 | 290 | .highlight .vc { 291 | color: #008080; 292 | } 293 | 294 | .highlight .vg { 295 | color: #008080; 296 | } 297 | 298 | .highlight .vi { 299 | color: #008080; 300 | } 301 | 302 | .highlight .il { 303 | color: #4FB6C3; 304 | } 305 | 306 | .post-content > .highlight { 307 | line-height: 1; 308 | overflow-x: scroll; 309 | padding: 10px; 310 | } 311 | 312 | .post-content > .highlight pre { 313 | margin: 0; 314 | white-space: pre; 315 | } 316 | 317 | .post-content > .highlight .lineno { 318 | border-right: solid 1px #3C4049; 319 | padding-left: 10px; 320 | padding-right: 10px; 321 | text-align: right; 322 | } 323 | 324 | .post-content > .highlight span { 325 | display: inline-block; 326 | padding: 0.3em 0; 327 | } 328 | 329 | .highlighttable .linenos { 330 | border-right: solid 1px #3C4049; 331 | padding-left: 10px; 332 | padding-right: 10px; 333 | text-align: right; 334 | width: 3em; 335 | } 336 | 337 | .highlighttable .code .highlight { 338 | padding-left: 10px; 339 | } 340 | 341 | .highlighttable .code .highlight pre { 342 | white-space: pre; 343 | } -------------------------------------------------------------------------------- /assets/js/dark-mode.js: -------------------------------------------------------------------------------- 1 | if (localStorage.theme === 'dark' || (!('theme' in localStorage) && window.matchMedia('(prefers-color-scheme: dark)').matches)) { 2 | document.documentElement.classList.add('dark') 3 | } else { 4 | document.documentElement.classList.remove('dark') 5 | } 6 | -------------------------------------------------------------------------------- /assets/sass/_blend.sass: -------------------------------------------------------------------------------- 1 | .blend-diff 2 | mix-blend-mode: difference 3 | 4 | .blend-luminosity 5 | mix-blend-mode: luminosity 6 | 7 | .no-blend 8 | mix-blend-mode: initial 9 | -------------------------------------------------------------------------------- /assets/sass/_position.sass: -------------------------------------------------------------------------------- 1 | // Position class are generated by the position generator 2 | 3 | @layer utilities 4 | .absolute-center 5 | @apply absolute 6 | @apply top-1/2 7 | @apply left-1/2 8 | transform: translate(-50%, -50%) 9 | -------------------------------------------------------------------------------- /assets/sass/_tailwindcss.sass: -------------------------------------------------------------------------------- 1 | // Tailwind base - put variables under: tailwind.config.js 2 | //@import "node_modules/tailwindcss/base.css" 3 | // Tailwind component classes registered by plugins 4 | //@import "node_modules/tailwindcss/components.css" 5 | // Tailwind's utility classes - generated based on config file 6 | //@import "node_modules/tailwindcss/utilities.css" 7 | 8 | @tailwind base 9 | @tailwind components 10 | @tailwind utilities 11 | @tailwind variants 12 | -------------------------------------------------------------------------------- /assets/sass/_text.sass: -------------------------------------------------------------------------------- 1 | .overflow-ellipsis 2 | text-overflow: ellipsis 3 | white-space: nowrap 4 | max-width: 100% 5 | overflow: hidden 6 | -------------------------------------------------------------------------------- /assets/sass/_theme.sass: -------------------------------------------------------------------------------- 1 | * 2 | @apply no-blend 3 | 4 | *:focus-visible 5 | @apply outline outline-accent outline-2 6 | 7 | html 8 | @apply relative 9 | scroll-behavior: smooth 10 | 11 | @media (prefers-reduced-motion: reduce) 12 | html 13 | scroll-behavior: auto 14 | 15 | *::selection 16 | @apply bg-accent-light 17 | 18 | h1 19 | @apply text-3xl font-serif my-6 tracking-tight 20 | 21 | h2 22 | @apply text-xl font-bold my-3 23 | 24 | h3 25 | @apply text-lg my-2 26 | 27 | hr 28 | @apply border-t border-grey-300 29 | 30 | a 31 | @apply underline 32 | 33 | a, a:hover 34 | color: inherit 35 | 36 | p 37 | @apply font-sans mt-4 38 | 39 | ul 40 | list-style: initial 41 | @apply pl-6 ml-8 42 | 43 | code 44 | @apply bg-grey-100 p-1 rounded-md 45 | 46 | blockquote 47 | @apply border-l-8 pl-4 48 | 49 | input, textarea, button 50 | @apply p-2 mb-4 rounded-md 51 | 52 | input:not([type='checkbox']):not([type='button']):not([type='submit']):not([type='reset']):not([type='color']):not([type='file']):not([type='hidden']):not([type='image']):not([type='radio']), textarea 53 | @apply w-full border-2 54 | 55 | input[type='submit'], input[type='reset'] 56 | @apply cursor-pointer px-2 57 | -------------------------------------------------------------------------------- /assets/sass/_variables.scss: -------------------------------------------------------------------------------- 1 | * { 2 | transition: all .5s; 3 | } 4 | 5 | :root { 6 | --color-primary: #212121; 7 | --color-primary-dark: #000000; 8 | --color-primary-light: #484848; 9 | 10 | --color-secondary: #e9ecef; 11 | --color-secondary-dark: #ced4da; 12 | --color-secondary-light: #f8f9fa; 13 | 14 | --color-accent: #48bb78; 15 | --color-accent-dark: #43a76c; 16 | --color-accent-light: #7deea7; 17 | } 18 | 19 | .dark * { 20 | --color-primary: #dee2e6; 21 | --color-primary-dark: #adb5bd; 22 | --color-primary-light: #e9ecef; 23 | 24 | --color-secondary: #161616; 25 | --color-secondary-dark: #000000; 26 | --color-secondary-light: #303030; 27 | 28 | --color-accent: #9e44ae; 29 | --color-accent-dark: #6d0e7e; 30 | --color-accent-light: #d174e0; 31 | } 32 | -------------------------------------------------------------------------------- /assets/sass/fonts/_all.sass: -------------------------------------------------------------------------------- 1 | @import "charter" 2 | @import "spectral" 3 | -------------------------------------------------------------------------------- /assets/sass/fonts/charter.sass: -------------------------------------------------------------------------------- 1 | // Charter 2 | @font-face 3 | font-family: 'charter' 4 | src: url('../fonts/charter/bold_italic.woff') format('woff') 5 | font-weight: bold 6 | font-style: italic 7 | font-display: swap 8 | 9 | @font-face 10 | font-family: 'charter' 11 | src: url('../fonts/charter/bold.woff') format('woff') 12 | font-weight: bold 13 | font-style: normal 14 | font-display: swap 15 | 16 | @font-face 17 | font-family: 'charter' 18 | src: url('../fonts/charter/italic.woff') format('woff') 19 | font-weight: normal 20 | font-style: italic 21 | font-display: swap 22 | 23 | @font-face 24 | font-family: 'charter' 25 | src: url('../fonts/charter/regular.woff') format('woff') 26 | font-weight: normal 27 | font-style: normal 28 | font-display: swap 29 | -------------------------------------------------------------------------------- /assets/sass/fonts/spectral.sass: -------------------------------------------------------------------------------- 1 | @font-face 2 | font-family: 'Spectral' 3 | font-style: italic 4 | font-weight: 200 5 | font-display: swap 6 | src: url(../fonts/spectral/extra_light_italic.woff2) format('woff2') 7 | 8 | 9 | @font-face 10 | font-family: 'Spectral' 11 | font-style: italic 12 | font-weight: 300 13 | font-display: swap 14 | src: url(../fonts/spectral/light_italic.woff2) format('woff2') 15 | 16 | 17 | @font-face 18 | font-family: 'Spectral' 19 | font-style: italic 20 | font-weight: 400 21 | font-display: swap 22 | src: url(../fonts/spectral/italic.woff2) format('woff2') 23 | 24 | 25 | @font-face 26 | font-family: 'Spectral' 27 | font-style: italic 28 | font-weight: 500 29 | font-display: swap 30 | src: url(../fonts/spectral/medium_italic.woff2) format('woff2') 31 | 32 | 33 | @font-face 34 | font-family: 'Spectral' 35 | font-style: italic 36 | font-weight: 600 37 | font-display: swap 38 | src: url(../fonts/spectral/semi_bold_italic.woff2) format('woff2') 39 | 40 | 41 | @font-face 42 | font-family: 'Spectral' 43 | font-style: italic 44 | font-weight: 700 45 | font-display: swap 46 | src: url(../fonts/spectral/bold_italic.woff2) format('woff2') 47 | 48 | 49 | @font-face 50 | font-family: 'Spectral' 51 | font-style: italic 52 | font-weight: 800 53 | font-display: swap 54 | src: url(../fonts/spectral/extra_bold_italic.woff2) format('woff2') 55 | 56 | 57 | @font-face 58 | font-family: 'Spectral' 59 | font-style: normal 60 | font-weight: 200 61 | font-display: swap 62 | src: url(../fonts/spectral/extra_light.woff2) format('woff2') 63 | 64 | 65 | @font-face 66 | font-family: 'Spectral' 67 | font-style: normal 68 | font-weight: 300 69 | font-display: swap 70 | src: url(../fonts/spectral/light.woff2) format('woff2') 71 | 72 | 73 | @font-face 74 | font-family: 'Spectral' 75 | font-style: normal 76 | font-weight: 400 77 | font-display: swap 78 | src: url(../fonts/spectral/regular.woff2) format('woff2') 79 | 80 | 81 | @font-face 82 | font-family: 'Spectral' 83 | font-style: normal 84 | font-weight: 500 85 | font-display: swap 86 | src: url(../fonts/spectral/medium.woff2) format('woff2') 87 | 88 | 89 | @font-face 90 | font-family: 'Spectral' 91 | font-style: normal 92 | font-weight: 600 93 | font-display: swap 94 | src: url(../fonts/spectral/semi_bold.woff2) format('woff2') 95 | 96 | 97 | @font-face 98 | font-family: 'Spectral' 99 | font-style: normal 100 | font-weight: 700 101 | font-display: swap 102 | src: url(../fonts/spectral/bold.woff2) format('woff2') 103 | 104 | 105 | @font-face 106 | font-family: 'Spectral' 107 | font-style: normal 108 | font-weight: 800 109 | font-display: swap 110 | src: url(../fonts/spectral/extra_bold.woff2) format('woff2') 111 | 112 | -------------------------------------------------------------------------------- /assets/sass/styles.sass: -------------------------------------------------------------------------------- 1 | // Theme variables 2 | @import "_variables.scss" 3 | 4 | // Fonts 5 | @import "fonts/_all.sass" 6 | 7 | @import "_tailwindcss.sass" 8 | 9 | // Blend mode helper 10 | @import "_blend.sass" 11 | 12 | // Text helper 13 | @import "_text.sass" 14 | 15 | // Positioning helper 16 | @import "_position.sass" 17 | 18 | // Global theme 19 | @import "_theme.sass" 20 | -------------------------------------------------------------------------------- /exampleSite/.gitignore: -------------------------------------------------------------------------------- 1 | .hugo_build.lock 2 | resources/ -------------------------------------------------------------------------------- /exampleSite/LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2020 Alexandre NEGREL 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy of 6 | this software and associated documentation files (the "Software"), to deal in 7 | the Software without restriction, including without limitation the rights to 8 | use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of 9 | the Software, and to permit persons to whom the Software is furnished to do so, 10 | subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS 17 | FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR 18 | COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER 19 | IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN 20 | CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 21 | -------------------------------------------------------------------------------- /exampleSite/README.md: -------------------------------------------------------------------------------- 1 | # Hugo example site for [Pico](https://github.com/negrel/hugo-theme-pico/) theme 2 | 3 | See [instructions](https://github.com/negrel/hugo-theme-pico/) -------------------------------------------------------------------------------- /exampleSite/archetypes/default.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "{{ replace .Name "-" " " | title }}" 3 | date: {{ .Date }} 4 | draft: true 5 | --- 6 | 7 | -------------------------------------------------------------------------------- /exampleSite/assets/js/console.js: -------------------------------------------------------------------------------- 1 | console.log(` 2 | 3 | 8 888888888o 8 8888 ,o888888o. ,o888888o. 4 | 8 8888 \`88. 8 8888 8888 \`88. . 8888 \`88. 5 | 8 8888 \`88 8 8888 ,8 8888 \`8. ,8 8888 \`8b 6 | 8 8888 ,88 8 8888 88 8888 88 8888 \`8b 7 | 8 8888. ,88' 8 8888 88 8888 88 8888 88 8 | 8 888888888P' 8 8888 88 8888 88 8888 88 9 | 8 8888 8 8888 88 8888 88 8888 ,8P 10 | 8 8888 8 8888 \`8 8888 .8' \`8 8888 ,8P 11 | 8 8888 8 8888 8888 ,88' \` 8888 ,88' 12 | 8 8888 8 8888 \`8888888P' \`8888888P' 13 | 14 | `); -------------------------------------------------------------------------------- /exampleSite/assets/style/style.css: -------------------------------------------------------------------------------- 1 | /* Example css file */ 2 | 3 | /* body { 4 | background-color: white!important; 5 | } */ -------------------------------------------------------------------------------- /exampleSite/assets/style/theme.sass: -------------------------------------------------------------------------------- 1 | html 2 | background-color: white 3 | 4 | .blog-content h1, 5 | .blog-content h2, 6 | .blog-content h3, 7 | .blog-content h4, 8 | .blog-content h5, 9 | .blog-content h6 10 | margin-top: 2rem 11 | 12 | .blog-content ul 13 | margin-left: .75rem 14 | 15 | .blog-content li > p 16 | margin-top: 0.5rem -------------------------------------------------------------------------------- /exampleSite/config.toml: -------------------------------------------------------------------------------- 1 | # Use an empty string if you have multiple domain linking to your website 2 | # This string is used to generate the absolute URL for your assets. 3 | #baseURL = 'https://example.com/' 4 | defaultContentLanguage = 'en' 5 | # Emoji in markdown files 6 | enableEmoji = true 7 | languageCode = 'en-us' 8 | # Number of blog post per page 9 | paginate = 10 10 | theme = 'pico' 11 | # Title of the website is used for the meta tag title 12 | # and the square icon (not the favicon) 13 | title = 'Pico' 14 | 15 | [params] 16 | customCSS = [ 17 | "style/style.css", 18 | "style/theme.sass", 19 | ] # Path relative to assets folder 20 | customJS = ["js/console.js"] # Path relative to assets folder 21 | # Homepage description 22 | # For blog page description you can overwrite it 23 | # in the front matter 24 | description = "Boilerplate website" 25 | email = "mail@example.com" 26 | favicon = '/favicon.ico' 27 | # Dark mode support 28 | # Supported value are : 29 | # - off 30 | # - always 31 | # If commented the theme will use the browser theme. 32 | # darkMode = 'always' 33 | 34 | # Social parameters for contact_icons widget 35 | [[params.social]] 36 | alt = "email icon" 37 | icon = "/icons/email.svg" 38 | name = "email" 39 | url = "mailto:mail@example.com" 40 | 41 | [[params.social]] 42 | alt = "github icon" 43 | blank = true 44 | icon = "/icons/github.svg" 45 | name = "github" 46 | url = "https://github.com/" 47 | 48 | [[params.social]] 49 | alt = "medium icon" 50 | blank = true 51 | icon = "/icons/medium.svg" 52 | name = "medium" 53 | url = "https://medium.com/" 54 | 55 | [[params.social]] 56 | alt = "stack-overflow icon" 57 | blank = true 58 | icon = "/icons/stack-overflow.svg" 59 | name = "stack-overflow" 60 | url = "https://stackoverflow.com/" 61 | 62 | [[params.social]] 63 | alt = "twitter icon" 64 | blank = true 65 | icon = "/icons/twitter.svg" 66 | name = "twitter" 67 | url = "https://twitter.com/" 68 | 69 | [[params.social]] 70 | alt = "facebook icon" 71 | blank = true 72 | icon = "/icons/facebook.svg" 73 | name = "facebook" 74 | url = "https://facebook.com/" 75 | 76 | # Navigation bar 77 | [menu] 78 | 79 | [[menu.main]] 80 | identifier = "home" # identifier is use for translations 81 | pre = "" # pre is inserted before the translation (icons, image, etc) 82 | url = "/" 83 | weight = 10 84 | 85 | [[menu.main]] 86 | identifier = "blog" # identifier is use for translations 87 | pre = "" # pre is inserted before the translation (icons, image, etc) 88 | url = "/blog/" 89 | weight = 20 90 | 91 | [[menu.main]] 92 | identifier = "contact" # identifier is use for translations 93 | pre = "" # pre is inserted before the translation (icons, image, etc) 94 | url = "/#contact" 95 | weight = 30 96 | 97 | # Syntax highlighting 98 | [markup.highlight] 99 | guessSyntax = true 100 | lineNumbersInTable = true 101 | noClasses = false # Set to false to use the Pico default theme. 102 | tabWidth = 2 103 | 104 | [taxonomies] 105 | category = "categories" 106 | tag = "tags" 107 | 108 | # Translation 109 | # English, French and Italian are supported but you can contribute 110 | # by adding translation to i18n/ folder. 111 | [languages.en] 112 | contentDir = 'content/en' 113 | languageCode = 'en' 114 | languageName = 'English' 115 | weight = 0 116 | 117 | [languages.fr] 118 | contentDir = 'content/fr' 119 | languageCode = 'fr' 120 | languageName = 'Français' 121 | weight = 2 122 | 123 | # Uncomment the following lines to add an italian translation. 124 | # [languages.it] 125 | # contentDir = 'content/it' 126 | # languageCode = 'it' 127 | # languageName = 'Italiano' 128 | # weight = 3 129 | 130 | # Uncomment the following lines to add an spanish translation. 131 | # [languages.es] 132 | # contentDir = 'content/es' 133 | # languageCode = 'es' 134 | # languageName = 'Español' 135 | # weight = 4 136 | 137 | # Uncomment the following lines to add a German translation. 138 | # [languages.de] 139 | # contentDir = 'content/de' 140 | # languageCode = 'de' 141 | # languageName = 'Deutsch' 142 | # weight = 5 143 | -------------------------------------------------------------------------------- /exampleSite/content/en/about/index.md: -------------------------------------------------------------------------------- 1 | +++ 2 | title = "About me" 3 | 4 | type = "blog" 5 | +++ 6 | 7 | I'm a **sea sponge** who works as a fry cook at the **Krusty Krab**: 8 | ![](/img/krusty_krab.webp) 9 | 10 | The Krusty Krabe is a fast food restaurant known for it's signature burger: 11 | 12 | ![*The Krabby Patty*](/img/krabby_patty.webp) 13 | 14 | Try to make one yourself and you will be as happy as I am. 15 | ![My first Krabby Patty](/img/spongebob-krusty-cook.webp) 16 | 17 | You can take a look at the recipe [here](/blog/krabby_patty/). -------------------------------------------------------------------------------- /exampleSite/content/en/blog/_index.md: -------------------------------------------------------------------------------- 1 | +++ 2 | title = "Get smarter about what matters to you." 3 | # Default banner 4 | [cascade] 5 | banner = "img/default_banner.webp" 6 | +++ -------------------------------------------------------------------------------- /exampleSite/content/en/blog/krabby_patty.md: -------------------------------------------------------------------------------- 1 | +++ 2 | title = "Krabby Patty recipe" 3 | subtitle = "How the best burger of all time is made." 4 | tags = ['recipe'] 5 | date = 2020-06-25 6 | 7 | # For description meta tag 8 | description = "Recipe of the legendary Krabby Patty." 9 | 10 | # Comment next line and the default banner wil be used. 11 | banner = 'img/krabby_patty.webp' 12 | 13 | +++ 14 | 15 | ## Ingredients: 16 | 17 | For 4 people : 18 | - Lots of love 19 | - 2 cans of crab meat 20 | - 1 lightly beaten egg 21 | - 1/2 lemon juice 22 | - Breadcrumbs 23 | - 1 tomato 24 | - Hamburger bread 25 | - Pickles 26 | - 1 onion 27 | - 4 salad leaves 28 | - Frying oil 29 | - Salt pepper 30 | 31 | For the sauce: 32 | - Worcestershire sauce 33 | - Ketchup 34 | - Mustard 35 | 36 | ## Steps : 37 | 38 | - In a bowl, beat 1 egg then add the crabmeat, breadcrumbs, lemon juice, salt and pepper. Mix until you get a homogeneous consistency. 39 | 40 | - Then form crab pâté steaks and brown them in a pan with a drizzle of frying oil for 4 to 5 minutes on each side. 41 | 42 | - Meanwhile, make the sauce. Combine Worcestershire sauce with mustard and ketchup. Taste then change the seasoning if necessary. 43 | 44 | - Reserve the crab pâté steaks on a paper towel and then brown the burger buns for a few minutes. 45 | 46 | - Cut the tomato into slices, mince the onion and cut the pickles into pieces. 47 | 48 | - Place the crab pâté steaks on each burger bun, then add a salad leaf, a few tomato slices, onions and pickles. 49 | 50 | - Add the sauce and cover with burger bread before tasting these delicious Krabby Krab! 51 | 52 | -------------------------------------------------------------------------------- /exampleSite/content/en/home/contact.md: -------------------------------------------------------------------------------- 1 | +++ 2 | widget = "contact_form" 3 | title = "Contact me" 4 | 5 | # Uncomment the following line and widget will NOT be displayed 6 | # hidden = true 7 | 8 | # Uncomments the following line for 9 | # standard forms. 10 | # 11 | # Form handler 12 | # action = "/contact_handler.php" 13 | # Form submit method 14 | # method = "GET" # Default is POST 15 | 16 | # For Netlify form 17 | # 18 | netlify = true 19 | 20 | # Add a contact via email button if your email 21 | # is configured in the config file of your website. 22 | useEmail = true 23 | 24 | # Form inputs 25 | [[inputs]] 26 | label = "Your name" 27 | # Input type 28 | type = "text" 29 | # minimum input length 30 | minlength = "3" 31 | # maxlength = "25" 32 | name = "name" 33 | # pattern matching 34 | pattern = "[a-zA-Z]+" 35 | placeholder = "Name" 36 | # The input is required to submit the form 37 | # required = true 38 | 39 | [[inputs]] 40 | label = "Your email" 41 | type = "email" 42 | name = "email" 43 | # pattern = "" 44 | placeholder = "Email" 45 | required = true 46 | 47 | # Textarea works same as input but doesn't support pattern matching 48 | [[inputs]] 49 | label = "Your message (minimum 10 characters)" 50 | type = "textarea" 51 | # pattern is not supported on textarea 52 | name = "message" 53 | placeholder = "Your message..." 54 | required = true 55 | 56 | +++ 57 | 58 | Need help to open a fast-food ? 59 | Let’s talk about it ! 60 | -------------------------------------------------------------------------------- /exampleSite/content/en/home/experience.md: -------------------------------------------------------------------------------- 1 | +++ 2 | widget = "timeline" 3 | weight = 30 # Order that this section will appear. 4 | 5 | # Uncomment the following line and widget will NOT be displayed 6 | # hidden = true 7 | 8 | # Widget title 9 | title = "Experience" 10 | # Widget subtitle 11 | subtitle = "What lead me to acquire experience." 12 | 13 | date_format = "Jan 2006" # Date format https://gohugo.io/functions/dateformat/#readout 14 | 15 | [[period]] 16 | title = "Chief cook" 17 | subtitle = "Krusty krab" 18 | location = "Bikini Bottom" 19 | date_start = "2017-01-01" 20 | date_end = "" 21 | description = "Chief cook of the biggest restaurant of Bikini Bottom." 22 | 23 | [[period]] 24 | title = "Trainee cook" 25 | subtitle = "Krusty krab" 26 | location = "California" 27 | date_start = "2016-01-01" 28 | date_end = "2016-12-31" 29 | description = "I learned the basics of cooking, the passion and the secrets of a good burger." 30 | +++ -------------------------------------------------------------------------------- /exampleSite/content/en/home/hero.md: -------------------------------------------------------------------------------- 1 | +++ 2 | widget = "hero" 3 | # Order that this section will appear. 4 | weight = 10 5 | 6 | # Uncomment the following line and widget will NOT be displayed 7 | # hidden = true 8 | 9 | # Hero image (optional). Enter filename of an image in the `static/` folder. 10 | hero_media = "/img/portrait.jpg" 11 | 12 | # Buttons 13 | # Add as much button as you want 14 | [[btn]] 15 | # The url of the button 16 | url = "/about" 17 | # The text of the button 18 | label = "Know more" 19 | # Primary color 20 | primary = true 21 | 22 | [[btn]] 23 | url = "#contact" 24 | label = 'Contact me' 25 | 26 | +++ 27 | 28 | # A theme to **express** your ideas. 29 | 30 | Pico is a minimalist, readable, responsive, light and beautiful Hugo theme. 31 | 32 | -------------------------------------------------------------------------------- /exampleSite/content/en/home/index.md: -------------------------------------------------------------------------------- 1 | +++ 2 | # Homepage 3 | headless = true # Homepage is headless, other widget pages are not. 4 | +++ 5 | -------------------------------------------------------------------------------- /exampleSite/content/en/home/posts.md: -------------------------------------------------------------------------------- 1 | +++ 2 | # A Recent Blog Posts section created with the Pages widget. 3 | # This section displays recent blog posts from `content/post/`. 4 | 5 | # Uncomment the following line and widget will NOT be displayed 6 | # hidden = true 7 | 8 | widget = "pages" # See https://sourcethemes.com/academic/docs/page-builder/ 9 | weight = 50 # Order that this section will appear. 10 | 11 | title = "Recent Posts" 12 | subtitle = "Read about my latest projects" 13 | 14 | [content] 15 | # Page type to display. E.g. post, talk, or publication. 16 | page_type = "blog" 17 | 18 | # Choose how much pages you would like to display 19 | count = 5 20 | 21 | [content.filters] 22 | tag = "recipe" 23 | category = "" 24 | publication_type = "" 25 | exclude_featured = false 26 | +++ 27 | 28 | :disappointed: There are no posts at the moment. :disappointed: -------------------------------------------------------------------------------- /exampleSite/content/en/home/skills.md: -------------------------------------------------------------------------------- 1 | +++ 2 | # A Skills section created with the Featurette widget. 3 | widget = "bars" # See https://sourcethemes.com/academic/docs/page-builder/ 4 | weight = 20 # Order that this section will appear. 5 | 6 | # Uncomment the following line and widget will NOT be displayed 7 | # hidden = true 8 | 9 | title = "Skills" 10 | subtitle = "I am really good at the following technical skills" 11 | 12 | [[bar]] 13 | icon = "/icons/precision.svg" 14 | name = "Precision" 15 | percent = "95%" 16 | 17 | [[bar]] 18 | icon = "/icons/heat.svg" 19 | name = "Heat Control" 20 | percent = "90%" 21 | 22 | 23 | [[bar]] 24 | icon = "/icons/chicken.svg" 25 | name = "Quality of Food" 26 | percent = "87%" 27 | 28 | 29 | [[bar]] 30 | icon = "/icons/presentation.svg" 31 | name = "Presentation" 32 | percent = "75%" 33 | 34 | +++ 35 | -------------------------------------------------------------------------------- /exampleSite/content/fr/about/index.md: -------------------------------------------------------------------------------- 1 | +++ 2 | title = "À propos" 3 | 4 | type = "blog" 5 | +++ 6 | 7 | Je suis une **éponge de mer** qui travaille comme cuisinier au ** Krusty Krab **: 8 | ![](/img/krusty_krab.webp) 9 | 10 | Le Krusty Krabe est un restaurant de restauration rapide connu pour son burger signature: 11 | ![*Le Krabby Patty*](/img/krabby_patty.webp) 12 | 13 | Essayez d'en faire un vous-même et vous serez aussi heureux que moi. 14 | ![Ma première Krabby Patty](/img/spongebob-krusty-cook.webp) 15 | 16 | Vous pouvez jeter un œil à la recette [ici](/blog/krabby_patty/). -------------------------------------------------------------------------------- /exampleSite/content/fr/blog/_index.md: -------------------------------------------------------------------------------- 1 | +++ 2 | title = "Cultivez-vous sur ce qui compte pour vous." 3 | # Default banner 4 | [cascade] 5 | banner = "img/default_banner.webp" 6 | +++ -------------------------------------------------------------------------------- /exampleSite/content/fr/blog/krabby_patty.md: -------------------------------------------------------------------------------- 1 | +++ 2 | title = "Recette du Krabby Patty" 3 | subtitle = "Comment le meilleur burger de tout les temps est fait." 4 | tags = ['recipe'] 5 | date = 2020-06-25 6 | 7 | # For description meta tag 8 | description = "Recette du légendaire Krabby Patty." 9 | 10 | # Comment next line and the default banner wil be used. 11 | banner = 'img/krabby_patty.webp' 12 | 13 | +++ 14 | 15 | ## Ingrédients : 16 | 17 | Pour 4 personnes : 18 | - Beaucoup d'amour 19 | - 2 boîtes de chair de crabe 20 | - 1 œuf légèrement battu 21 | - Jus de 1/2 citron 22 | - Chapelure 23 | - 1 tomate 24 | - Pain à hamburger 25 | - Cornichons 26 | - 1 Oignon 27 | - 4 feuilles de salade 28 | - Huile de friture 29 | - Sel & poivre 30 | 31 | Pour la sauce : 32 | - Sauce Worcestershire 33 | - Ketchup 34 | - Moutarde 35 | 36 | ## Les étapes : 37 | 38 | - Dans un saladier, battre 1 œuf puis ajouter la chair de crabe, la chapelure, le jus de citron, le sel et le poivre. Mélanger jusqu’à obtenir une consistance homogène. 39 | 40 | - Former ensuite des steaks de pâté de crabe puis les faire dorer dans une poêle avec un filet d’huile de friture pendant 4 à 5 minutes sur chaque face. 41 | 42 | - Entre-temps, réaliser la sauce. Mélanger la sauce Worcestershire avec la moutarde et le ketchup. Goûter puis modifier l’assaisonnement si besoin. 43 | 44 | - Réserver les steaks de pâté de crabe sur un papier absorbant puis faire colorer quelques minutes les pains à burger. 45 | 46 | - Détailler la tomate en rondelles, émincer l’oignon et couper les cornichons en morceaux. 47 | 48 | - Dresser les steaks de pâté de crabe sur chaque pain à burger puis ajouter une feuille de salade, quelques rondelles de tomate, des oignons et des cornichons. 49 | 50 | - Agrémenter le tout de sauce et recouvrir de pain à burger avant de déguster ces délicieux krabby Krab ! 51 | 52 | -------------------------------------------------------------------------------- /exampleSite/content/fr/home/contact.md: -------------------------------------------------------------------------------- 1 | +++ 2 | widget = "contact_form" 3 | title = "Me Contacter" 4 | 5 | # Uncomment the following line and widget will NOT be displayed 6 | # hidden = true 7 | 8 | # Uncomments the following line for 9 | # standard forms. 10 | # 11 | # Form handler 12 | # action = "/contact_handler.php" 13 | # Form submit method 14 | # method = "GET" # Default is POST 15 | 16 | # For Netlify form 17 | # 18 | netlify = true 19 | 20 | # Add a contact via email button if your email 21 | # is configured in the config file of your website. 22 | useEmail = true 23 | 24 | # Form inputs 25 | [[inputs]] 26 | label = "Votre nom" 27 | # Input type 28 | type = "text" 29 | # minimum input length 30 | minlength = "3" 31 | # maxlength = "25" 32 | name = "name" 33 | # pattern matching 34 | pattern = "[a-zA-Z]" 35 | placeholder = "Nom" 36 | # The input is required to submit the form 37 | # required = true 38 | 39 | [[inputs]] 40 | label = "Votre email" 41 | type = "email" 42 | name = "email" 43 | # pattern = "" 44 | placeholder = "Email" 45 | required = true 46 | 47 | # Textarea works same as input but doesn't support pattern matching 48 | [[inputs]] 49 | label = "Votre message (minimum 10 lettres)" 50 | type = "textarea" 51 | minlength = "10" 52 | name = "message" 53 | placeholder = "Votre message..." 54 | required = true 55 | 56 | +++ 57 | 58 | Besoin d'aide pour ouvrir un fast-food ? 59 | Parlons-en ! 60 | -------------------------------------------------------------------------------- /exampleSite/content/fr/home/experience.md: -------------------------------------------------------------------------------- 1 | +++ 2 | widget = "timeline" 3 | weight = 30 # Order that this section will appear. 4 | 5 | # Uncomment the following line and widget will NOT be displayed 6 | # hidden = true 7 | 8 | # Widget title 9 | title = "Expérience" 10 | # Widget subtitle 11 | subtitle = "Ce qui m'a mené à acquérir de l'expérience" 12 | 13 | date_format = "02.01.2006" # Date format https://gohugo.io/functions/dateformat/#readout 14 | 15 | [[period]] 16 | title = "Cuisinier en chef" 17 | subtitle = "Krusty Krab" 18 | location = "Bikini Bottom" 19 | date_start = "2017-01-01" 20 | date_end = "" 21 | description = "Cuisinier en chef du plus grand restaurant de Bikini Bottom." 22 | 23 | [[period]] 24 | title = "Stagiaire cuisinier" 25 | subtitle = "Krusty Krab" 26 | location = "France" 27 | date_start = "2016-01-01" 28 | date_end = "2016-12-31" 29 | description = "J'ai appris les bases de la cuisine, la passion et les secrets d'un bon burger" 30 | 31 | +++ -------------------------------------------------------------------------------- /exampleSite/content/fr/home/hero.md: -------------------------------------------------------------------------------- 1 | +++ 2 | widget = "hero" 3 | # Order that this section will appear. 4 | weight = 10 5 | 6 | # Uncomment the following line and widget will NOT be displayed 7 | # hidden = true 8 | 9 | # Hero image (optional). Enter filename of an image in the `static/` folder. 10 | hero_media = "/img/portrait.jpg" 11 | 12 | # Buttons 13 | # Add as much button as you want 14 | [[btn]] 15 | # The url of the button 16 | url = "/about" 17 | # The text of the button 18 | label = "En savoir plus" 19 | # Primary color 20 | primary = true 21 | 22 | [[btn]] 23 | url = "#contact" 24 | label = 'Me contacter' 25 | 26 | +++ 27 | 28 | # Un thème pour **exprimer** vos idées. 29 | 30 | Pico est un thème qui se veut minimaliste, responsive, clair et léger. -------------------------------------------------------------------------------- /exampleSite/content/fr/home/index.md: -------------------------------------------------------------------------------- 1 | +++ 2 | # Homepage 3 | headless = true # Homepage is headless, other widget pages are not. 4 | +++ 5 | -------------------------------------------------------------------------------- /exampleSite/content/fr/home/posts.md: -------------------------------------------------------------------------------- 1 | +++ 2 | # A Recent Blog Posts section created with the Pages widget. 3 | # This section displays recent blog posts from `content/post/`. 4 | 5 | # Uncomment the following line and widget will NOT be displayed 6 | # hidden = true 7 | 8 | widget = "pages" # See https://sourcethemes.com/academic/docs/page-builder/ 9 | weight = 50 # Order that this section will appear. 10 | 11 | title = "Mes postes récents" 12 | subtitle = "Lisez à propos de mes derniers projets" 13 | 14 | [content] 15 | # Page type to display. E.g. post, talk, or publication. 16 | page_type = "blog" 17 | 18 | # Choose how much pages you would like to display 19 | count = 5 20 | 21 | [content.filters] 22 | tag = "recipe" 23 | category = "" 24 | publication_type = "" 25 | exclude_featured = false 26 | +++ 27 | 28 | :disappointed: Il n'y a aucun post pour le moment. :disappointed: -------------------------------------------------------------------------------- /exampleSite/content/fr/home/skills.md: -------------------------------------------------------------------------------- 1 | +++ 2 | # A Skills section created with the Featurette widget. 3 | widget = "bars" # See https://sourcethemes.com/academic/docs/page-builder/ 4 | weight = 20 # Order that this section will appear. 5 | 6 | # Uncomment the following line and widget will NOT be displayed 7 | # hidden = true 8 | 9 | title = "Compétences" 10 | subtitle = "Je maitrise les compétences techniques suivantes :" 11 | 12 | [[bar]] 13 | icon = "/icons/precision.svg" 14 | name = "Précision" 15 | percent = "95%" 16 | 17 | [[bar]] 18 | icon = "/icons/heat.svg" 19 | name = "Contrôle de la cuisson" 20 | percent = "90%" 21 | 22 | 23 | [[bar]] 24 | icon = "/icons/chicken.svg" 25 | name = "Qualité des produits" 26 | percent = "87%" 27 | 28 | 29 | [[bar]] 30 | icon = "/icons/presentation.svg" 31 | name = "Présentation" 32 | percent = "75%" 33 | 34 | +++ 35 | -------------------------------------------------------------------------------- /exampleSite/netlify.toml: -------------------------------------------------------------------------------- 1 | [build] 2 | command = "hugo --gc" 3 | publish = "public/" 4 | 5 | [context.production.environment] 6 | HUGO_ENABLEGITINFO = "true" 7 | HUGO_ENV = "production" 8 | HUGO_VERSION = "0.79.0" 9 | NODE_VERSION = "v12.19.0" 10 | 11 | [context.split1] 12 | command = "hugo --gc --enableGitInfo" 13 | 14 | [context.split1.environment] 15 | HUGO_ENV = "production" 16 | HUGO_VERSION = "0.73.0" 17 | 18 | [context.deploy-preview] 19 | command = "hugo --gc --buildFuture -b $DEPLOY_PRIME_URL" 20 | 21 | [context.deploy-preview.environment] 22 | HUGO_VERSION = "0.73.0" 23 | 24 | [context.branch-deploy] 25 | command = "hugo --gc -b $DEPLOY_PRIME_URL" 26 | 27 | [context.branch-deploy.environment] 28 | HUGO_VERSION = "0.73.0" 29 | 30 | [context.next.environment] 31 | HUGO_ENABLEGITINFO = "true" 32 | -------------------------------------------------------------------------------- /exampleSite/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "pico-theme", 3 | "version": "0.0.1", 4 | "description": "Hugo theme with Tailwindcss", 5 | "repository": "https://github.com/negrel/hugo-theme-pico", 6 | "author": "Alexandre Negrel", 7 | "license": "MIT", 8 | "scripts": { 9 | "build": "hugo --gc", 10 | "dev": "hugo server ." 11 | }, 12 | "dependencies": { 13 | "autoprefixer": "^10.4.13", 14 | "postcss": "^8.4.20", 15 | "postcss-cli": "^10.1.0", 16 | "postcss-import": "^15.1.0", 17 | "tailwindcss": "^3.2.4" 18 | }, 19 | "browserslist": [ 20 | "last 1 version", 21 | "> 1%", 22 | "maintained node versions", 23 | "not dead" 24 | ] 25 | } 26 | -------------------------------------------------------------------------------- /exampleSite/resources/_gen/assets/sass/sass/styles.sass_d536e9f722854ec696a0bd459525def6.json: -------------------------------------------------------------------------------- 1 | {"Target":"css/main.css","MediaType":"text/css","Data":{}} -------------------------------------------------------------------------------- /exampleSite/resources/_gen/assets/sass/style/theme.sass_cbdc4778711e418b9c89192b90b1ca19.content: -------------------------------------------------------------------------------- 1 | html{background-color:#fff}.blog-content h1,.blog-content h2,.blog-content h3,.blog-content h4,.blog-content h5,.blog-content h6{margin-top:2rem}.blog-content ul{margin-left:.75rem}.blog-content li>p{margin-top:.5rem} -------------------------------------------------------------------------------- /exampleSite/resources/_gen/assets/sass/style/theme.sass_cbdc4778711e418b9c89192b90b1ca19.json: -------------------------------------------------------------------------------- 1 | {"Target":"css/main.min.1b6695ede8a03de873124c10b957342b.css","MediaType":"text/css","Data":{"Integrity":"md5-G2aV7eigPehzEkwQuVc0Kw=="}} -------------------------------------------------------------------------------- /exampleSite/setup.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | echo "Installing node modules : " 4 | echo "npm install" 5 | npm install 6 | 7 | echo "Init git repository : " 8 | echo "git init" 9 | git init 10 | 11 | echo "Installing Pico theme : " 12 | echo "git submodule add https://github.com/negrel/hugo-theme-pico.git ./themes/pico" 13 | git submodule add -f https://github.com/negrel/hugo-theme-pico.git ./themes/pico 14 | 15 | ./update.sh 16 | 17 | hugo --gc --minify -------------------------------------------------------------------------------- /exampleSite/static/icons/chicken.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /exampleSite/static/icons/heat.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Heat temprature 5 | Created with Sketch. 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | AomAm . 47 | 48 | 49 | 50 | 51 | 52 | -------------------------------------------------------------------------------- /exampleSite/static/icons/precision.svg: -------------------------------------------------------------------------------- 1 | Graphiqa Stock -------------------------------------------------------------------------------- /exampleSite/static/img/default_banner.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/negrel/hugo-theme-pico/ef7057b8650cd6d71c35c7212332340ecc01af13/exampleSite/static/img/default_banner.webp -------------------------------------------------------------------------------- /exampleSite/static/img/krabby_patty.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/negrel/hugo-theme-pico/ef7057b8650cd6d71c35c7212332340ecc01af13/exampleSite/static/img/krabby_patty.webp -------------------------------------------------------------------------------- /exampleSite/static/img/krusty_krab.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/negrel/hugo-theme-pico/ef7057b8650cd6d71c35c7212332340ecc01af13/exampleSite/static/img/krusty_krab.webp -------------------------------------------------------------------------------- /exampleSite/static/img/portrait.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/negrel/hugo-theme-pico/ef7057b8650cd6d71c35c7212332340ecc01af13/exampleSite/static/img/portrait.jpg -------------------------------------------------------------------------------- /exampleSite/static/img/portrait.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/negrel/hugo-theme-pico/ef7057b8650cd6d71c35c7212332340ecc01af13/exampleSite/static/img/portrait.webp -------------------------------------------------------------------------------- /exampleSite/static/img/spongebob-krusty-cook.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/negrel/hugo-theme-pico/ef7057b8650cd6d71c35c7212332340ecc01af13/exampleSite/static/img/spongebob-krusty-cook.webp -------------------------------------------------------------------------------- /exampleSite/update.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | echo "Updating Pico submodule : " 4 | echo "git submodule foreach git pull origin master" 5 | git submodule foreach git pull origin master 6 | 7 | # Check npm & npx installation 8 | no_npm=false; 9 | if ! npm="$(type -p "npm")" || [ -z $npm ]; then 10 | no_npm=true; 11 | fi 12 | no_npx=false; 13 | if ! npx="$(type -p "npx")" || [ -z $npx ]; then 14 | no_npw=true; 15 | fi 16 | 17 | # Update node module 18 | if [ "$no_npx" = false ] && [ "$no_npm" = false ] && [ -f "package.json" ]; then 19 | echo "Updating node modules : " 20 | echo "npx npm-check-updates -u && npm install" 21 | npx npm-check-updates -u --packageFile package.json && npm install 22 | fi 23 | 24 | 25 | no_postcss_cli=true; 26 | if [ "$no_npm" = false ]; then 27 | npm ls postcss-cli > /dev/null 28 | 29 | if [ $? = 0 ]; then 30 | no_postcss_cli=false 31 | fi 32 | fi 33 | 34 | 35 | if [ "$no_postcss_cli" = true ]; then 36 | echo "Updating theme resources : " 37 | echo "cp -r ./themes/pico/exampleSite/resources ." 38 | cp -r ./themes/pico/exampleSite/resources . 39 | fi 40 | 41 | script_path="./themes/pico/exampleSite/update.sh" 42 | if [ -f "$script_path" ]; then 43 | echo "Updating update.sh : " 44 | echo "cp \"$script_path\" ." 45 | cmp --silent "./update.sh" "$script_path" || cp "$script_path" . 46 | fi 47 | -------------------------------------------------------------------------------- /flake.lock: -------------------------------------------------------------------------------- 1 | { 2 | "nodes": { 3 | "flake-utils": { 4 | "inputs": { 5 | "systems": "systems" 6 | }, 7 | "locked": { 8 | "lastModified": 1689068808, 9 | "narHash": "sha256-6ixXo3wt24N/melDWjq70UuHQLxGV8jZvooRanIHXw0=", 10 | "owner": "numtide", 11 | "repo": "flake-utils", 12 | "rev": "919d646de7be200f3bf08cb76ae1f09402b6f9b4", 13 | "type": "github" 14 | }, 15 | "original": { 16 | "owner": "numtide", 17 | "repo": "flake-utils", 18 | "type": "github" 19 | } 20 | }, 21 | "nixpkgs": { 22 | "locked": { 23 | "lastModified": 1689138773, 24 | "narHash": "sha256-NEcJPQfwc1jNDI/ITvieJW2Y+IWdGIYCFHLJl5PGx3o=", 25 | "owner": "NixOS", 26 | "repo": "nixpkgs", 27 | "rev": "bf57c599729771cd23054a18c0f3a391ae85e193", 28 | "type": "github" 29 | }, 30 | "original": { 31 | "id": "nixpkgs", 32 | "type": "indirect" 33 | } 34 | }, 35 | "root": { 36 | "inputs": { 37 | "flake-utils": "flake-utils", 38 | "nixpkgs": "nixpkgs" 39 | } 40 | }, 41 | "systems": { 42 | "locked": { 43 | "lastModified": 1681028828, 44 | "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", 45 | "owner": "nix-systems", 46 | "repo": "default", 47 | "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", 48 | "type": "github" 49 | }, 50 | "original": { 51 | "owner": "nix-systems", 52 | "repo": "default", 53 | "type": "github" 54 | } 55 | } 56 | }, 57 | "root": "root", 58 | "version": 7 59 | } 60 | -------------------------------------------------------------------------------- /flake.nix: -------------------------------------------------------------------------------- 1 | { 2 | description = ""; 3 | 4 | inputs = { 5 | flake-utils.url = "github:numtide/flake-utils"; 6 | }; 7 | 8 | outputs = { self, nixpkgs, flake-utils, ... }@inputs: 9 | let 10 | outputsWithoutSystem = { }; 11 | outputsWithSystem = flake-utils.lib.eachDefaultSystem 12 | (system: 13 | let 14 | pkgs = import nixpkgs { 15 | inherit system; 16 | }; 17 | lib = pkgs.lib; 18 | in 19 | { 20 | devShells = { 21 | default = pkgs.mkShell { 22 | buildInputs = with pkgs; [ hugo nodejs ]; 23 | }; 24 | }; 25 | }); 26 | in 27 | outputsWithSystem // outputsWithoutSystem; 28 | } 29 | -------------------------------------------------------------------------------- /go.mod: -------------------------------------------------------------------------------- 1 | module github.com/negrel/hugo-theme-pico 2 | 3 | go 1.19 4 | -------------------------------------------------------------------------------- /i18n/de.toml: -------------------------------------------------------------------------------- 1 | [tagged_in] 2 | other = "Eingetragen in" 3 | 4 | [other_tags] 5 | other = "Andere Tags" 6 | 7 | [read_more] 8 | other = "Mehr lesen" 9 | 10 | [name] 11 | other = "Name" 12 | 13 | [your_message] 14 | other = "Ihre Nachricht" 15 | 16 | [cancel] 17 | other = "Abbrechen" 18 | 19 | [submit] 20 | other = "Absenden" 21 | 22 | [previous] 23 | other = "Vorherige" 24 | 25 | [next] 26 | other = "Nächste" 27 | 28 | [back] 29 | other = "Zurück" 30 | 31 | [contact] 32 | other = "Kontakt" 33 | 34 | [contact_email] 35 | other = "Kontakt via E-Mail" 36 | 37 | [latest_post] 38 | other = "Letzter Beitrag" 39 | 40 | [reading_time] 41 | other = "{{ .ReadingTime }} min read" 42 | 43 | [home] 44 | other = "Startseite" 45 | 46 | [about] 47 | other = "Über" 48 | 49 | [blog] 50 | other = "Blog" 51 | 52 | [present] 53 | other = "Aktuell" 54 | 55 | [required_fields] 56 | other = "Benötigte Felder" 57 | -------------------------------------------------------------------------------- /i18n/en.toml: -------------------------------------------------------------------------------- 1 | [tagged_in] 2 | other = "Tagged in" 3 | 4 | [other_tags] 5 | other = "Other tags" 6 | 7 | [read_more] 8 | other = "Read more" 9 | 10 | [name] 11 | other = "Name" 12 | 13 | [your_message] 14 | other = "Your message" 15 | 16 | [cancel] 17 | other = "Cancel" 18 | 19 | [submit] 20 | other = "Submit" 21 | 22 | [previous] 23 | other = "Previous" 24 | 25 | [next] 26 | other = "Next" 27 | 28 | [back] 29 | other = "Back" 30 | 31 | [contact] 32 | other = "Contact" 33 | 34 | [contact_email] 35 | other = "Contact via email" 36 | 37 | [latest_post] 38 | other = "Latest post" 39 | 40 | [reading_time] 41 | other = "{{ .ReadingTime }} min read" 42 | 43 | [home] 44 | other = "Home" 45 | 46 | [about] 47 | other = "About" 48 | 49 | [blog] 50 | other = "Blog" 51 | 52 | [present] 53 | other = "Present" 54 | 55 | [required_fields] 56 | other = "Required fields" 57 | -------------------------------------------------------------------------------- /i18n/es.toml: -------------------------------------------------------------------------------- 1 | [tagged_in] 2 | other = "Etiquetado en" 3 | 4 | [other_tags] 5 | other = "Otras etiquetas" 6 | 7 | [read_more] 8 | other = "Leer más" 9 | 10 | [name] 11 | other = "Nombre" 12 | 13 | [your_message] 14 | other = "Tu mensaje" 15 | 16 | [cancel] 17 | other = "Cancelar" 18 | 19 | [submit] 20 | other = "Enviar" 21 | 22 | [previous] 23 | other = "Anterior" 24 | 25 | [next] 26 | other = "Siguiente" 27 | 28 | [back] 29 | other = "Atras" 30 | 31 | [contact] 32 | other = "Contacto" 33 | 34 | [contact_email] 35 | other = "Contactar por email" 36 | 37 | [latest_post] 38 | other = "Última publicación" 39 | 40 | [reading_time] 41 | other = "{{ .ReadingTime }} minutos de lectura" 42 | 43 | [home] 44 | other = "Inicio" 45 | 46 | [about] 47 | other = "Sobre mí" 48 | 49 | [blog] 50 | other = "Blog" 51 | 52 | [present] 53 | other = "Hoy" 54 | 55 | [required_fields] 56 | other = "Campos requeridos" 57 | -------------------------------------------------------------------------------- /i18n/fr.toml: -------------------------------------------------------------------------------- 1 | [tagged_in] 2 | other = "Marqués dans" 3 | 4 | [other_tags] 5 | other = "Autre tags" 6 | 7 | [read_more] 8 | other = "Lire plus" 9 | 10 | [name] 11 | other = "Nom" 12 | 13 | [your_message] 14 | other = "Votre message" 15 | 16 | [cancel] 17 | other = "Annuler" 18 | 19 | [submit] 20 | other = "Envoyer" 21 | 22 | [previous] 23 | other = "Précédent" 24 | 25 | [next] 26 | other = "Suivant" 27 | 28 | [back] 29 | other = "Retour" 30 | 31 | [contact] 32 | other = "Contact" 33 | 34 | [contact_email] 35 | other = "Contacter via email" 36 | 37 | [latest_post] 38 | other = "Dernier poste" 39 | 40 | [reading_time] 41 | other = "{{ .ReadingTime }} min de lecture" 42 | 43 | [home] 44 | other = "Accueil" 45 | 46 | [about] 47 | other = "À propos" 48 | 49 | [blog] 50 | other = "Blog" 51 | 52 | [present] 53 | other = "Aujourd'hui" 54 | 55 | [required_fields] 56 | other = "Champs obligatoires" 57 | -------------------------------------------------------------------------------- /i18n/it.toml: -------------------------------------------------------------------------------- 1 | [tagged_in] 2 | other = "Presenti in" 3 | 4 | [other_tags] 5 | other = "Altri tag" 6 | 7 | [read_more] 8 | other = "Altro" 9 | 10 | [name] 11 | other = "Nome" 12 | 13 | [your_message] 14 | other = "Il tuo messaggio" 15 | 16 | [cancel] 17 | other = "Cancella" 18 | 19 | [submit] 20 | other = "Invia" 21 | 22 | [previous] 23 | other = "Precedente" 24 | 25 | [gallery] 26 | other = "Galleria" 27 | 28 | [next] 29 | other = "Avanti" 30 | 31 | [back] 32 | other = "Indietro" 33 | 34 | [contact] 35 | other = "Contatti" 36 | 37 | [contact_email] 38 | other = "Contatto via email" 39 | 40 | [latest_post] 41 | other = "Ultimo post" 42 | 43 | [reading_time] 44 | other = "{{ .ReadingTime }} min di lettura" 45 | 46 | [home] 47 | other = "Home" 48 | 49 | [about] 50 | other = "Chi sono" 51 | 52 | [events] 53 | other = "Eventi" 54 | 55 | [posts] 56 | other = "Post" 57 | 58 | [present] 59 | other = "Presente" 60 | 61 | [required_fields] 62 | other = "Campi richiesti" 63 | -------------------------------------------------------------------------------- /images/screenshot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/negrel/hugo-theme-pico/ef7057b8650cd6d71c35c7212332340ecc01af13/images/screenshot.png -------------------------------------------------------------------------------- /images/screenshot_dark.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/negrel/hugo-theme-pico/ef7057b8650cd6d71c35c7212332340ecc01af13/images/screenshot_dark.png -------------------------------------------------------------------------------- /images/tn.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/negrel/hugo-theme-pico/ef7057b8650cd6d71c35c7212332340ecc01af13/images/tn.png -------------------------------------------------------------------------------- /images/tn_dark.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/negrel/hugo-theme-pico/ef7057b8650cd6d71c35c7212332340ecc01af13/images/tn_dark.png -------------------------------------------------------------------------------- /layouts/404.html: -------------------------------------------------------------------------------- 1 | {{ define "main" }} 2 |
3 |
4 |

Go Home

5 |
6 |
7 | {{ end }} -------------------------------------------------------------------------------- /layouts/_default/_markup/render-image.html: -------------------------------------------------------------------------------- 1 | {{ .Text }} 3 | 4 | {{ with .Text }} 5 |
6 | {{ . | safeHTML }} 7 |
8 | {{ end }} -------------------------------------------------------------------------------- /layouts/_default/_markup/render-link.html: -------------------------------------------------------------------------------- 1 | {{/* Avoid overflow-x with word break */}} 2 | {{/* Useful for long URL */}} 3 | {{ $lineBreak := "" }} 4 | {{ if gt (len .Text) 48 }} 5 | {{ $lineBreak = "break-words" }} 6 | {{ end }} 7 | 8 | 11 | {{ .Text | safeHTML }} 12 | -------------------------------------------------------------------------------- /layouts/_default/baseof.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | {{ partial "head/metadata.html" . }} 6 | {{ partial "head/js.html" . }} 7 | {{ partial "head/css.html" . }} 8 | 9 | 10 | 11 | {{/* class dark to prevent purge css from purging it */}} 12 |
13 | 14 | {{- partial "dev/size-indicator.html" . -}} 15 | {{- partial "header.html" . -}} 16 | 17 | {{ $mainClass := "" }} 18 | {{ if .IsHome }} 19 | {{ $mainClass = "lg:max-w-5xl xl:max-w-6xl 2xl:max-w-screen-xl" }} 20 | {{ end }} 21 | 22 |
23 | {{- block "main" . }}{{- end }} 24 |
25 | 26 |
27 | {{- partial "footer.html" . -}} 28 | {{/* {{- partial "dev/parameters.html" . -}} */}} 29 |
30 | 31 | 32 | -------------------------------------------------------------------------------- /layouts/_default/list.html: -------------------------------------------------------------------------------- 1 | {{ define "main" }} 2 | {{ range .Pages }} 3 |
4 |

5 | {{ . }} 6 |

7 | {{ .Content }} 8 |
9 | {{ end }} 10 | {{ end }} -------------------------------------------------------------------------------- /layouts/_default/single.html: -------------------------------------------------------------------------------- 1 | {{ define "main" }} 2 |
3 |

{{ .Title }}

4 | {{ .Content }} 5 |
6 | {{ end }} -------------------------------------------------------------------------------- /layouts/blog/list.html: -------------------------------------------------------------------------------- 1 | {{ define "main" }} 2 |

3 | {{ .Title }} 4 |

5 |
6 | {{ $tags := .Site.Taxonomies.tags }} 7 | {{ partial "taxonomy_list" $tags }} 8 |
9 | 10 |
11 | {{ $paginator := .Paginate (where .Pages "Type" "blog") }} 12 | {{ range $paginator.Pages }} 13 |
14 | {{ partial "card.html" . }} 15 |
16 | {{ end }} 17 | 18 |
19 | 20 | {{/* Pagination */}} 21 | {{ if or ($paginator.HasPrev) ($paginator.HasNext) }} 22 |
23 | {{ end }} 24 | 25 |
26 | {{ with $paginator.Prev }} 27 |
28 | 29 | 30 | 31 | 32 | {{ i18n "previous" | title }} 33 | 34 |
35 | {{ end }} 36 | 37 | {{ if and ($paginator.HasPrev) ($paginator.HasNext) }} 38 | | 39 | {{ end }} 40 | 41 | {{ with $paginator.Next }} 42 |
43 | 44 | {{ i18n "next" | title }} 45 | 46 | 47 | 48 | 49 |
50 | {{ end }} 51 |
52 | 53 | {{ end }} -------------------------------------------------------------------------------- /layouts/blog/single.html: -------------------------------------------------------------------------------- 1 | {{ define "main" }} 2 | 4 |

5 | {{ .Title }} 6 |

7 | {{ with .Params.subtitle }} 8 |

10 | {{ . }} 11 |

12 | {{ end }} 13 |
14 | {{ .Content }} 15 |
16 | {{/* Previous / Next section */}} 17 | {{ if or (.PrevInSection) (.NextInSection) }} 18 |
19 | {{ end }} 20 | 21 |
22 | {{ if .PrevInSection }} 23 |
24 | 25 | 26 | 27 | 28 | {{ .PrevInSection.Title }} 29 | 30 |
31 | {{ end }} 32 | 33 | {{ if .NextInSection }} 34 |
36 | 37 | {{ .NextInSection.Title }} 38 | 39 | 40 | 41 | 42 |
43 | {{ end }} 44 |
45 | 46 |
47 | {{ partial "contact_icons.html" . }} 48 |
49 | 50 | {{ end }} 51 | -------------------------------------------------------------------------------- /layouts/index.html: -------------------------------------------------------------------------------- 1 | {{ define "main" }} 2 | {{ with .Site.GetPage "/home"}} 3 | 4 | {{ $lastIndex := (sub (len (.Resources.ByType "page")) 1) }} 5 | {{ range $index, $st := .Resources.ByType "page" }} 6 | 7 | {{ if ne $st.Params.hidden true }} 8 | {{ $widget := or $st.Params.widget "blank" }} 9 | {{ $widget_path := printf "widgets/%s.html" $widget}} 10 | {{ partial $widget_path $st }} 11 | {{ if ne $widget "blank" }} 12 | 13 | {{ $lastSeparatorClass := "" }} 14 | {{ if eq $index $lastIndex }} 15 | {{ $lastSeparatorClass = "mb-12" }} 16 | {{ end }} 17 |
18 | {{ end }} 19 | {{ end }} 20 | {{ end }} 21 | 22 | {{ partial "contact_icons.html" . }} 23 |
24 | 25 | {{ end }} 26 | 27 | {{ end }} 28 | -------------------------------------------------------------------------------- /layouts/partials/button.html: -------------------------------------------------------------------------------- 1 | {{ $el := "button" }} 2 | {{ if isset . "el" }} 3 | {{ $el = .el }} 4 | {{ end }} 5 | 6 | {{ $defaultClass := "px-4 py-2 mx-2 rounded-sm text-center"}} 7 | {{ $attrs := merge .attrs (dict "class" (printf "%s %s" $defaultClass .attrs.class)) }} 8 | 9 | {{ $btnAttrs := "" }} 10 | {{ range $attrName, $attrValue := $attrs }} 11 | {{ $btnAttrs = printf "%s %s='%s'" $btnAttrs $attrName $attrValue }} 12 | {{ end }} 13 | 14 | {{ safeHTML (printf "<%v %v>" $el $btnAttrs) }} 15 | {{ .content }} 16 | {{ safeHTML (printf "" $el) }} 17 | -------------------------------------------------------------------------------- /layouts/partials/card.html: -------------------------------------------------------------------------------- 1 | 2 |
3 | {{/* A span is used instead a div for accessibility, tag can't wrap div elements */}} 4 | 5 | {{ with .Params.banner }} 6 |
7 |
8 | {{ end }} 9 |
10 |

{{ .Title | emojify }}

11 | 12 | {{ dateFormat "02/01/2006" .Date }} · {{ i18n "reading_time" . }} 13 | 14 |
15 |
16 | {{ with .Params.subtitle }} 17 | {{ . }} 18 | {{ else }} 19 | {{ substr .Plain 0 256 }} 20 | {{ end }} 21 | {{ i18n "read_more" }}... 22 |
23 |
24 |
25 | 26 | -------------------------------------------------------------------------------- /layouts/partials/contact_icons.html: -------------------------------------------------------------------------------- 1 |
2 | {{ range .Site.Params.social }} 3 | 6 | {{ .alt }} 7 | 8 | {{ end }} 9 |
-------------------------------------------------------------------------------- /layouts/partials/dev/parameters.html: -------------------------------------------------------------------------------- 1 | {{ if .Site.IsServer }} 2 |
3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 |
Hugo Variables for the current page.
VariableValue
.Name{{ printf "%#v" .Name }}
.Title{{ printf "%#v" .Title }}
.Kind{{ printf "%#v" .Kind }}
.Type{{ printf "%#v" .Type }}
.IsPage{{ printf "%#v" .IsPage }}
.IsHome{{ printf "%#v" .IsHome }}
.Next{{ printf "%v" .Next }}
.Prev{{ printf "%v" .Prev }}
.Params 47 | 48 | {{ range $k,$v := .Params }} 49 | 50 | 51 | 52 | 53 | {{ end }} 54 |
{{ printf "%#v:" $k }}{{ printf "%#v" $v }}
55 |
.Section{{ printf "%#v" .Section }}
.CurrentSection{{ printf "%v" .CurrentSection }}
.Pages 68 | {{ printf "%v" .Pages }} 69 | 70 | {{- range $k,$v := .Pages }} 71 | 72 | 73 | 74 | 75 | {{ end -}} 76 |
{{ printf "%#v:" $k }}{{ printf "%v" $v }}
77 |
.Resources{{ printf "%v" .Resources }}
.File{{ if .File }}{{ printf "%v" .File }}{{ else}}""{{ end }}
.File.Dir{{ if .File }}{{ printf "%#v" .File.Dir }}{{ else}}""{{ end }}
93 |
94 | {{ end }} -------------------------------------------------------------------------------- /layouts/partials/dev/size-indicator.html: -------------------------------------------------------------------------------- 1 | {{ if .Site.IsServer }} 2 |
3 | all 4 | 5 | 6 | 7 | 8 |
9 | {{ end }} -------------------------------------------------------------------------------- /layouts/partials/footer.html: -------------------------------------------------------------------------------- 1 | 16 | -------------------------------------------------------------------------------- /layouts/partials/head/css.html: -------------------------------------------------------------------------------- 1 | {{ $bundleRaw := resources.Get "sass/styles.sass" }} 2 | {{ $postCSSOpts := (dict "config" "./assets/config/postcss.config.js") }} 3 | {{ $cssOpts := (dict "targetPath" "css/main.css" ) }} 4 | 5 | {{ if .Site.IsServer }} 6 | {{ $bundle := $bundleRaw | toCSS $cssOpts | postCSS $postCSSOpts }} 7 | 8 | {{ else }} 9 | {{ $bundle := $bundleRaw | toCSS $cssOpts | postCSS $postCSSOpts | minify | fingerprint "md5" | resources.PostProcess }} 10 | 12 | {{ end }} 13 | 14 | {{/* Blog post page syntax highlighting */}} 15 | {{ if eq .Type "blog" }} 16 | {{ $syntax := resources.Get "css/syntax.css" }} 17 | {{ $syntax = $syntax | resources.Minify | fingerprint "md5" }} 18 | 20 | {{ end }} 21 | 22 | {{/* Custom CSS & SASS */}} 23 | {{ range .Site.Params.customCSS -}} 24 | {{ $style := resources.Get . }} 25 | {{ $css := $style }} 26 | 27 | {{ if or (strings.HasSuffix $style.Name "sass") (strings.HasSuffix $style.Name "scss")}} 28 | {{ $customCSSopt := (dict "targetPath" "css/main.css" "outputStyle" "compressed" "enableSourceMap" false) }} 29 | {{ if site.IsServer }} 30 | {{ $customCSSopt = (dict "targetPath" "css/main.css" "outputStyle" "expanded" "enableSourceMap" true) }} 31 | {{ end }} 32 | {{ $css = $css | toCSS $customCSSopt }} 33 | {{ end }} 34 | 35 | {{ $css = $css | minify | fingerprint "md5" | resources.PostProcess }} 36 | 38 | {{ end }} 39 | -------------------------------------------------------------------------------- /layouts/partials/head/js.html: -------------------------------------------------------------------------------- 1 | {{/* Google Analytics */}} 2 | {{ template "_internal/google_analytics.html" . }} 3 | 4 | {{ $js_bundle := slice }} 5 | {{ range site.Params.customJS }} 6 | {{ $script := resources.Get . }} 7 | {{ $js_bundle = $js_bundle | append $script }} 8 | {{ end }} 9 | 10 | {{/* Default option for dark mode is to use the browser theme */}} 11 | {{ if eq (isset .Site.Params "darkmode") false }} 12 | {{ $js_bundle = $js_bundle | append (resources.Get "js/dark-mode.js") }} 13 | {{ end }} 14 | 15 | {{ if gt (len $js_bundle) 0 }} 16 | 17 | {{ $js_bundle = $js_bundle | resources.Concat "js/pico.min.js" | fingerprint "md5" }} 18 | 19 | 20 | {{ end }} -------------------------------------------------------------------------------- /layouts/partials/head/metadata.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | {{ with .Description }} 4 | 5 | {{ else }} 6 | 7 | {{ with $.Site.Params.description }} 8 | 9 | {{ end }} 10 | 11 | {{ end }} 12 | 13 | {{ .Site.Title }} 14 | {{ if (and (ne .Title .Site.Title) (ne (len .Title) 0)) }} - {{ .Title }} {{ end }} 15 | 16 | {{ with .OutputFormats.Get "RSS" }} 17 | 18 | {{ end }} 19 | 20 | {{ with $.Site.Params.favicon }} 21 | 22 | {{ else }} 23 | 24 | {{ end }} -------------------------------------------------------------------------------- /layouts/partials/head/open_graph.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /layouts/partials/head/twitter.html: -------------------------------------------------------------------------------- 1 | 2 | {{ if ne .IsHome }} 3 | 4 | 5 | {{ end }} 6 | {{ if .Site.twitter }} 7 | 8 | 9 | {{ end }} 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /layouts/partials/header.html: -------------------------------------------------------------------------------- 1 | {{ $page := . }} 2 | 3 |
4 | {{/* Pico responsive icon (square and text) */}} 5 |
6 | 7 |

8 | {{ .Site.Title }} 9 |

10 | 11 |
12 | {{ partial "icon" . }} 13 |
14 |
15 | {{ if .IsTranslated }} 16 |
17 | {{ range .Translations }} 18 | 19 | 20 | {{ .Language | upper }} 21 | 22 | 23 | {{ end }} 24 |
25 | {{ end }} 26 |
27 | 28 | 36 |
37 | -------------------------------------------------------------------------------- /layouts/partials/icon.html: -------------------------------------------------------------------------------- 1 |
2 |

3 | {{ slicestr .Site.Title 0 1}} 4 |

5 |
6 | -------------------------------------------------------------------------------- /layouts/partials/taxonomy_list.html: -------------------------------------------------------------------------------- 1 | {{ range $name, $value_ := . }} 2 | 3 |
5 | tag icon 7 | {{ $name | upper }} 8 |
9 |
10 | {{ end }} -------------------------------------------------------------------------------- /layouts/partials/widgets/bars.html: -------------------------------------------------------------------------------- 1 |
2 |
3 |

4 | {{ .Title }} 5 |

6 | {{ with .Params.subtitle}} 7 |

{{ . }}

8 | {{ end }} 9 |
10 |
11 | {{ range .Params.bar }} 12 |
13 | {{ if .icon }} 14 | {{ .name }} icon 15 | {{ end }} 16 |

{{ .name }}

17 |
18 |
19 |
21 |
22 |
23 | {{ .percent }} 24 |
25 |
26 | {{ end }} 27 |
28 |
-------------------------------------------------------------------------------- /layouts/partials/widgets/blank.html: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/negrel/hugo-theme-pico/ef7057b8650cd6d71c35c7212332340ecc01af13/layouts/partials/widgets/blank.html -------------------------------------------------------------------------------- /layouts/partials/widgets/contact_form.html: -------------------------------------------------------------------------------- 1 |
2 |

3 | {{ .Title }} 4 |

5 |
6 | {{ .Content }} 7 |
8 | 9 |
11 | {{ range .Params.Inputs }} 12 | 13 | {{ $pattern := "" }} 14 | {{ with .pattern }} 15 | {{ $pattern = printf "pattern=%q" . | safeHTMLAttr}} 16 | {{ end }} 17 | 18 | {{ $minlength := "" }} 19 | {{ $maxlength := "" }} 20 | {{ with .minlength }} 21 | {{ $minlength = printf "minlength=%q" . | safeHTMLAttr}} 22 | {{ end }} 23 | {{ with .maxlength }} 24 | {{ $maxlength = printf "maxlength=%q" . | safeHTMLAttr}} 25 | {{ end }} 26 | 27 | 28 |
29 | {{ if .label }} 30 |
31 | 36 |
37 | {{ end }} 38 | {{ $class := "bg-secondary-light border-secondary" }} 39 | {{ if eq .type "textarea" }} 40 | 43 | {{ else }} 44 | {{ $type := .type | default "text" }} 45 | 49 | {{ end }} 50 |
51 | {{ end }} 52 | 53 | {{ if .Params.useEmail }} 54 | {{ with .Site.Params.email }} 55 | 56 | {{ i18n "contact_email" }} 57 | 58 | {{ end }} 59 | {{ end }} 60 | 61 |
62 | 63 | 64 |
65 |
66 |
67 | -------------------------------------------------------------------------------- /layouts/partials/widgets/hero.html: -------------------------------------------------------------------------------- 1 |
2 |
4 |
5 | {{ .Content }} 6 |
7 |
8 | {{ range .Params.btn }} 9 | {{ $class := "border border-accent hover:border-accent-dark transition duration-300 ease-in-out no-underline hover:bg-accent-dark hover:text-secondary dark:hover:text-primary dark:text-primary" }} 10 | {{ if .primary }} 11 | {{ $class = printf "%s %s" $class "bg-accent text-secondary"}} 12 | {{ end }} 13 | 14 | {{ $btnAttrs := dict "class" $class "href" (.url | relLangURL)}} 15 | {{ $btnOpt := dict "el" "a" "content" .label "attrs" $btnAttrs}} 16 | {{ partial "button" $btnOpt }} 17 | 18 | {{ end }} 19 |
20 |
21 | 22 | {{ with .Params.hero_media }} 23 |
25 | hero image 26 |
27 | {{ end }} 28 | 29 |
30 | -------------------------------------------------------------------------------- /layouts/partials/widgets/pages.html: -------------------------------------------------------------------------------- 1 |
2 |
3 |

4 | {{ .Title }} 5 |

6 | {{ with .Params.subtitle}} 7 |

{{ . }}

8 | {{ end }} 9 |
10 | 11 | {{ $items_type := .Params.content.page_type | default "post" }} 12 | {{ $items_count := .Params.content.count }} 13 | 14 | 15 |
16 | 17 | {{/* Filters */}} 18 | {{ $query := where site.RegularPages "Type" $items_type }} 19 | {{ $archive_page := site.GetPage "Section" $items_type }} 20 | 21 | {{ if .Params.content.filters.tag }} 22 | {{ $archive_page = site.GetPage (printf "tags/%s" .Params.content.filters.tag) }} 23 | {{ $query = $query | intersect $archive_page.Pages }} 24 | {{ end }} 25 | {{ if .Params.content.filters.category }} 26 | {{ $archive_page = site.GetPage (printf "categories/%s" .Params.content.filters.category) }} 27 | {{ $query = $query | intersect $archive_page.Pages }} 28 | {{ end }} 29 | 30 | 31 | {{ range first $items_count $query }} 32 |
33 | {{ partial "card.html" . }} 34 |
35 | {{ else }} 36 | {{ .Content }} 37 | {{ end }} 38 |
39 |
-------------------------------------------------------------------------------- /layouts/partials/widgets/timeline.html: -------------------------------------------------------------------------------- 1 | {{ $dateFormat := .Params.date_format | default "02.01.2006" }} 2 | 3 |
4 |
5 |

6 | {{ .Title }} 7 |

8 | {{ with .Params.subtitle}} 9 |

{{ . }}

10 | {{ end }} 11 |
12 | 13 |
14 | {{/* Timeline bar */}} 15 |
16 |
17 | {{ range $index, $period := .Params.period }} 18 | {{ $even := modBool $index 2 }} 19 | 20 | {{ $containerClass := "md:mr-auto pl-4 md:pl-0 md:pr-4"}} 21 | {{ $dateClass := "md:text-right font-light text-primary text-xl" }} 22 | 23 | {{ if $even }} 24 | {{ $containerClass = "md:ml-auto pl-4"}} 25 | {{ $dateClass = "font-light text-primary text-xl" }} 26 | {{ end }} 27 | 28 | 29 |
30 | 31 | {{ if eq $period.date_end "" }} 32 |
{{ i18n "present" }}
33 | {{ else }} 34 |
{{ $period.date_end | dateFormat $dateFormat }} 35 |
36 | {{ end }} 37 |
39 |

{{ .title | markdownify }}

40 | 41 | {{ with .location }} 42 | · {{ . }} 43 | {{ end }} 44 | 45 |

{{ .subtitle | markdownify }}

46 | 47 | {{ with .description }} 48 |
49 |

{{ . | markdownify }}

50 |
51 | {{ end }} 52 |
53 |
{{ $period.date_start | dateFormat $dateFormat }}
54 |
55 | 56 | {{ end }} 57 |
58 |
59 |
-------------------------------------------------------------------------------- /layouts/taxonomy/list.html: -------------------------------------------------------------------------------- 1 | {{ define "main" }} 2 |
3 |

4 | {{ i18n "tagged_in" | upper }} 5 |

6 |

7 | {{ .Name | upper }} 8 |

9 |
10 |
11 |

12 | {{ i18n "other_tags" }} 13 |

14 | {{/* All tags except the currently selected */}} 15 | {{ $otherTags := newScratch }} 16 | {{ range $tag, $value := .Site.Taxonomies.tags }} 17 | {{ $otherTags.Set $tag $value}} 18 | {{ end }} 19 | {{ $otherTags.Delete .Name }} 20 |
21 | {{ range $tag, $value := $otherTags.Values }} 22 | 23 |
24 | {{ $tag | upper}} 25 |
26 |
27 | {{ end }} 28 |
29 |
30 |
31 | 32 | {{/* We don't use float or absolute positioning because of the sticky "tagged_in" element */}} 33 |
34 | {{ range $index, $page := .Data.Pages }} 35 |
36 | {{ partial "card.html" $page }} 37 |
38 | {{ end }} 39 |
40 | {{ end }} -------------------------------------------------------------------------------- /netlify.toml: -------------------------------------------------------------------------------- 1 | [build] 2 | command = "cd exampleSite && hugo --gc -t repo --themesDir ../.. -b $URL" 3 | publish = "exampleSite/public/" 4 | 5 | [context.production.environment] 6 | HUGO_ENABLEGITINFO = "true" 7 | HUGO_ENV = "production" 8 | HUGO_VERSION = "0.111.3" 9 | NODE_VERSION = "v18.16.0" 10 | 11 | [context.split1] 12 | command = "hugo --gc --enableGitInfo" 13 | 14 | [context.split1.environment] 15 | HUGO_ENV = "production" 16 | HUGO_VERSION = "0.111.3" 17 | 18 | [context.deploy-preview] 19 | command = "hugo --gc --buildFuture -b $DEPLOY_PRIME_URL" 20 | 21 | [context.deploy-preview.environment] 22 | HUGO_VERSION = "0.111.3" 23 | 24 | [context.branch-deploy] 25 | command = "hugo --gc -b $DEPLOY_PRIME_URL" 26 | 27 | [context.branch-deploy.environment] 28 | HUGO_VERSION = "0.111.3" 29 | 30 | [context.next.environment] 31 | HUGO_ENABLEGITINFO = "true" 32 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "pico-theme", 3 | "version": "0.0.1", 4 | "description": "Hugo theme with Tailwindcss", 5 | "repository": "https://github.com/negrel/hugo-theme-pico", 6 | "author": "Alexandre Negrel", 7 | "license": "MIT", 8 | "scripts": { 9 | "build": "hugo --gc", 10 | "dev": "hugo server ." 11 | }, 12 | "dependencies": { 13 | "autoprefixer": "^10.4.13", 14 | "postcss": "^8.4.20", 15 | "postcss-cli": "^10.1.0", 16 | "postcss-import": "^15.1.0", 17 | "tailwindcss": "^3.2.4" 18 | }, 19 | "browserslist": [ 20 | "last 1 version", 21 | "> 1%", 22 | "maintained node versions", 23 | "not dead" 24 | ] 25 | } 26 | -------------------------------------------------------------------------------- /static/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/negrel/hugo-theme-pico/ef7057b8650cd6d71c35c7212332340ecc01af13/static/favicon.ico -------------------------------------------------------------------------------- /static/favicon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/negrel/hugo-theme-pico/ef7057b8650cd6d71c35c7212332340ecc01af13/static/favicon.png -------------------------------------------------------------------------------- /static/fonts/charter/bold.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/negrel/hugo-theme-pico/ef7057b8650cd6d71c35c7212332340ecc01af13/static/fonts/charter/bold.woff -------------------------------------------------------------------------------- /static/fonts/charter/bold_italic.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/negrel/hugo-theme-pico/ef7057b8650cd6d71c35c7212332340ecc01af13/static/fonts/charter/bold_italic.woff -------------------------------------------------------------------------------- /static/fonts/charter/italic.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/negrel/hugo-theme-pico/ef7057b8650cd6d71c35c7212332340ecc01af13/static/fonts/charter/italic.woff -------------------------------------------------------------------------------- /static/fonts/charter/license.txt: -------------------------------------------------------------------------------- 1 | This is a copy of the Charter fonts which Bitstream contributed to the X consortium. This is the original notice included with the fonts: 2 | 3 | (c) Copyright 1989-1992, Bitstream Inc., Cambridge, MA. You are hereby granted permission under all Bitstream propriety rights to use, copy, modify, sublicense, sell, and redistribute the 4 Bitstream Charter (r) Type 1 outline fonts and the 4 Courier Type 1 outline fonts for any purpose and without restriction; provided, that this notice is left intact on all copies of such fonts and that Bitstream's trademark is acknowledged as shown below on all unmodified copies of the 4 Charter Type 1 fonts. BITSTREAM CHARTER is a registered trademark of Bitstream Inc. -------------------------------------------------------------------------------- /static/fonts/charter/regular.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/negrel/hugo-theme-pico/ef7057b8650cd6d71c35c7212332340ecc01af13/static/fonts/charter/regular.woff -------------------------------------------------------------------------------- /static/fonts/spectral/OFL.txt: -------------------------------------------------------------------------------- 1 | Copyright 2017 The Spectral Project Authors (http://github.com/productiontype/spectral) 2 | 3 | This Font Software is licensed under the SIL Open Font License, Version 1.1. 4 | This license is copied below, and is also available with a FAQ at: 5 | http://scripts.sil.org/OFL 6 | 7 | 8 | ----------------------------------------------------------- 9 | SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 10 | ----------------------------------------------------------- 11 | 12 | PREAMBLE 13 | The goals of the Open Font License (OFL) are to stimulate worldwide 14 | development of collaborative font projects, to support the font creation 15 | efforts of academic and linguistic communities, and to provide a free and 16 | open framework in which fonts may be shared and improved in partnership 17 | with others. 18 | 19 | The OFL allows the licensed fonts to be used, studied, modified and 20 | redistributed freely as long as they are not sold by themselves. The 21 | fonts, including any derivative works, can be bundled, embedded, 22 | redistributed and/or sold with any software provided that any reserved 23 | names are not used by derivative works. The fonts and derivatives, 24 | however, cannot be released under any other type of license. The 25 | requirement for fonts to remain under this license does not apply 26 | to any document created using the fonts or their derivatives. 27 | 28 | DEFINITIONS 29 | "Font Software" refers to the set of files released by the Copyright 30 | Holder(s) under this license and clearly marked as such. This may 31 | include source files, build scripts and documentation. 32 | 33 | "Reserved Font Name" refers to any names specified as such after the 34 | copyright statement(s). 35 | 36 | "Original Version" refers to the collection of Font Software components as 37 | distributed by the Copyright Holder(s). 38 | 39 | "Modified Version" refers to any derivative made by adding to, deleting, 40 | or substituting -- in part or in whole -- any of the components of the 41 | Original Version, by changing formats or by porting the Font Software to a 42 | new environment. 43 | 44 | "Author" refers to any designer, engineer, programmer, technical 45 | writer or other person who contributed to the Font Software. 46 | 47 | PERMISSION & CONDITIONS 48 | Permission is hereby granted, free of charge, to any person obtaining 49 | a copy of the Font Software, to use, study, copy, merge, embed, modify, 50 | redistribute, and sell modified and unmodified copies of the Font 51 | Software, subject to the following conditions: 52 | 53 | 1) Neither the Font Software nor any of its individual components, 54 | in Original or Modified Versions, may be sold by itself. 55 | 56 | 2) Original or Modified Versions of the Font Software may be bundled, 57 | redistributed and/or sold with any software, provided that each copy 58 | contains the above copyright notice and this license. These can be 59 | included either as stand-alone text files, human-readable headers or 60 | in the appropriate machine-readable metadata fields within text or 61 | binary files as long as those fields can be easily viewed by the user. 62 | 63 | 3) No Modified Version of the Font Software may use the Reserved Font 64 | Name(s) unless explicit written permission is granted by the corresponding 65 | Copyright Holder. This restriction only applies to the primary font name as 66 | presented to the users. 67 | 68 | 4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font 69 | Software shall not be used to promote, endorse or advertise any 70 | Modified Version, except to acknowledge the contribution(s) of the 71 | Copyright Holder(s) and the Author(s) or with their explicit written 72 | permission. 73 | 74 | 5) The Font Software, modified or unmodified, in part or in whole, 75 | must be distributed entirely under this license, and must not be 76 | distributed under any other license. The requirement for fonts to 77 | remain under this license does not apply to any document created 78 | using the Font Software. 79 | 80 | TERMINATION 81 | This license becomes null and void if any of the above conditions are 82 | not met. 83 | 84 | DISCLAIMER 85 | THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 86 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF 87 | MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT 88 | OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE 89 | COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, 90 | INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL 91 | DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 92 | FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM 93 | OTHER DEALINGS IN THE FONT SOFTWARE. 94 | -------------------------------------------------------------------------------- /static/fonts/spectral/bold.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/negrel/hugo-theme-pico/ef7057b8650cd6d71c35c7212332340ecc01af13/static/fonts/spectral/bold.woff2 -------------------------------------------------------------------------------- /static/fonts/spectral/bold_italic.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/negrel/hugo-theme-pico/ef7057b8650cd6d71c35c7212332340ecc01af13/static/fonts/spectral/bold_italic.woff2 -------------------------------------------------------------------------------- /static/fonts/spectral/extra_bold.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/negrel/hugo-theme-pico/ef7057b8650cd6d71c35c7212332340ecc01af13/static/fonts/spectral/extra_bold.woff2 -------------------------------------------------------------------------------- /static/fonts/spectral/extra_bold_italic.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/negrel/hugo-theme-pico/ef7057b8650cd6d71c35c7212332340ecc01af13/static/fonts/spectral/extra_bold_italic.woff2 -------------------------------------------------------------------------------- /static/fonts/spectral/extra_light.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/negrel/hugo-theme-pico/ef7057b8650cd6d71c35c7212332340ecc01af13/static/fonts/spectral/extra_light.woff2 -------------------------------------------------------------------------------- /static/fonts/spectral/extra_light_italic.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/negrel/hugo-theme-pico/ef7057b8650cd6d71c35c7212332340ecc01af13/static/fonts/spectral/extra_light_italic.woff2 -------------------------------------------------------------------------------- /static/fonts/spectral/italic.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/negrel/hugo-theme-pico/ef7057b8650cd6d71c35c7212332340ecc01af13/static/fonts/spectral/italic.woff2 -------------------------------------------------------------------------------- /static/fonts/spectral/light.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/negrel/hugo-theme-pico/ef7057b8650cd6d71c35c7212332340ecc01af13/static/fonts/spectral/light.woff2 -------------------------------------------------------------------------------- /static/fonts/spectral/light_italic.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/negrel/hugo-theme-pico/ef7057b8650cd6d71c35c7212332340ecc01af13/static/fonts/spectral/light_italic.woff2 -------------------------------------------------------------------------------- /static/fonts/spectral/medium.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/negrel/hugo-theme-pico/ef7057b8650cd6d71c35c7212332340ecc01af13/static/fonts/spectral/medium.woff2 -------------------------------------------------------------------------------- /static/fonts/spectral/medium_italic.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/negrel/hugo-theme-pico/ef7057b8650cd6d71c35c7212332340ecc01af13/static/fonts/spectral/medium_italic.woff2 -------------------------------------------------------------------------------- /static/fonts/spectral/regular.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/negrel/hugo-theme-pico/ef7057b8650cd6d71c35c7212332340ecc01af13/static/fonts/spectral/regular.woff2 -------------------------------------------------------------------------------- /static/fonts/spectral/semi_bold_italic.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/negrel/hugo-theme-pico/ef7057b8650cd6d71c35c7212332340ecc01af13/static/fonts/spectral/semi_bold_italic.woff2 -------------------------------------------------------------------------------- /static/icons/email.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /static/icons/facebook.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /static/icons/github.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /static/icons/medium.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /static/icons/stack-overflow.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /static/icons/tag.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /static/icons/top_arrow.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | 110 | 111 | 112 | 113 | 114 | 115 | 116 | 117 | 118 | 119 | 120 | 121 | 122 | 123 | 124 | 125 | 126 | 127 | 128 | 129 | 130 | 131 | 132 | 133 | 134 | 135 | 136 | 137 | 138 | 139 | 140 | 141 | 142 | 143 | 144 | 145 | 146 | 147 | 148 | 149 | 150 | 151 | 152 | 153 | 154 | 155 | 156 | 157 | 158 | 159 | 160 | 161 | 162 | 163 | 164 | 165 | 166 | 167 | 168 | 169 | 170 | 171 | 172 | 173 | 174 | 175 | 176 | 177 | 178 | 179 | 180 | 181 | 182 | 183 | 184 | 185 | 186 | 187 | 188 | 189 | 190 | 191 | 192 | 193 | 194 | 195 | 196 | 197 | 198 | 199 | 200 | 201 | 202 | 203 | 204 | 205 | 206 | 207 | 208 | 209 | 210 | 211 | 212 | 213 | 214 | 215 | 216 | 217 | 218 | 219 | 220 | 221 | 222 | 223 | 224 | 225 | 226 | 227 | 228 | 229 | 230 | 231 | 232 | 233 | 234 | 235 | 236 | 237 | 238 | 239 | 240 | 241 | 242 | 243 | 244 | 245 | 246 | 247 | 248 | 249 | 250 | 251 | 252 | 253 | 254 | 255 | 256 | 257 | 258 | 259 | 260 | 261 | 262 | 263 | 264 | 265 | 266 | 267 | 268 | 269 | 270 | 271 | 272 | 273 | 274 | 275 | 276 | 277 | 278 | 279 | 280 | 281 | 282 | 283 | 284 | 285 | 286 | 287 | 288 | 289 | 290 | 291 | 292 | 293 | 294 | 295 | 296 | 297 | 298 | 299 | 300 | 301 | 302 | 303 | 304 | 305 | 306 | 307 | 308 | 309 | 310 | 311 | 312 | 313 | 314 | 315 | 316 | 317 | 318 | 319 | 320 | 321 | 322 | 323 | 324 | 325 | 326 | 327 | 328 | 329 | 330 | 331 | 332 | 333 | 334 | 335 | 336 | 337 | 338 | 339 | 340 | 341 | 342 | 343 | 344 | 345 | 346 | 347 | 348 | 349 | 350 | 351 | 352 | 353 | 354 | 355 | 356 | 357 | 358 | 359 | 360 | 361 | 362 | 363 | 364 | 365 | Devendra Karkar 366 | 367 | 368 | 369 | 370 | 371 | -------------------------------------------------------------------------------- /static/icons/twitter.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /theme.toml: -------------------------------------------------------------------------------- 1 | # theme.toml template for a Hugo theme 2 | # See https://github.com/gohugoio/hugoThemes#themetoml for an example 3 | 4 | description = "Pico is an elegent theme inspired by Medium & The New York Times." 5 | features = [ 6 | "multilingual", 7 | "responsive", 8 | "tailwindcss", 9 | "blog", 10 | "syntax highlighting", 11 | ] 12 | homepage = "https://sponge-bob.netlify.app/" 13 | license = "MIT" 14 | licenselink = "https://github.com/negrel/hugo-theme-pico/blob/master/LICENSE" 15 | min_version = "0.72" 16 | name = "Pico" 17 | tags = [ 18 | "blog", 19 | "light", 20 | "dark", 21 | "clean", 22 | "simple", 23 | "mobile", 24 | "fast", 25 | "onepage", 26 | "starter", 27 | "multilingual", 28 | "personal", 29 | "resume", 30 | "syntax highlighting", 31 | "white", 32 | ] 33 | 34 | [author] 35 | homepage = "https://github.com/negrel" 36 | name = "Alexandre NEGREL" 37 | --------------------------------------------------------------------------------