├── .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 |
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 | 
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 | [](https://www.buymeacoffee.com/negrel)
105 |
106 | #### :scroll: License
107 | MIT © [Alexandre Negrel](https://www.negrel.dev)
108 |
109 |
110 | [](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 | 
9 |
10 | The Krusty Krabe is a fast food restaurant known for it's signature burger:
11 |
12 | 
13 |
14 | Try to make one yourself and you will be as happy as I am.
15 | 
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 | 
9 |
10 | Le Krusty Krabe est un restaurant de restauration rapide connu pour son burger signature:
11 | 
12 |
13 | Essayez d'en faire un vous-même et vous serez aussi heureux que moi.
14 | 
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 |
6 |
7 | {{ end }}
--------------------------------------------------------------------------------
/layouts/_default/_markup/render-image.html:
--------------------------------------------------------------------------------
1 |
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 |
35 | {{ end }}
36 |
37 | {{ if and ($paginator.HasPrev) ($paginator.HasNext) }}
38 |
|
39 | {{ end }}
40 |
41 | {{ with $paginator.Next }}
42 |
50 | {{ end }}
51 |
52 |
53 | {{ end }}
--------------------------------------------------------------------------------
/layouts/blog/single.html:
--------------------------------------------------------------------------------
1 | {{ define "main" }}
2 | ←{{ i18n "back" |
3 | title}}
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 |
31 | {{ end }}
32 |
33 | {{ if .NextInSection }}
34 |
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 "%v>" $el) }}
17 |
--------------------------------------------------------------------------------
/layouts/partials/card.html:
--------------------------------------------------------------------------------
1 |
2 |
25 |
26 |
--------------------------------------------------------------------------------
/layouts/partials/contact_icons.html:
--------------------------------------------------------------------------------
1 |
2 | {{ range .Site.Params.social }}
3 |
6 |
7 |
8 | {{ end }}
9 |
--------------------------------------------------------------------------------
/layouts/partials/dev/parameters.html:
--------------------------------------------------------------------------------
1 | {{ if .Site.IsServer }}
2 |
94 | {{ end }}
--------------------------------------------------------------------------------
/layouts/partials/dev/size-indicator.html:
--------------------------------------------------------------------------------
1 | {{ if .Site.IsServer }}
2 |
3 | all
4 | sm
5 | md
6 | lg
7 | xl
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 |
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 |
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 |
15 | {{ end }}
16 |
{{ .name }}
17 |
18 |
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 |
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 |
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 |
--------------------------------------------------------------------------------