# Zzo theme for Hugo [English](https://github.com/zzossig/hugo-theme-zzo/blob/master/README.md) | ํ•œ๊ตญ์–ด ๐Ÿ”ฅ๐Ÿ”ฅ๐Ÿ”ฅ zzo theme์„ ์—…๋ฐ์ดํŠธํ•œ ํ›„ `config.toml` ํŒŒ์ผ์—์„œ page ๋ณ€์ˆ˜๋ฅผ ์‚ญ์ œํ•ด์ฃผ์„ธ์š” ```diff [outputs] page = ["HTML", "SearchIndex"] ``` ๊ฒ€์ƒ‰ ๊ด€๋ จ ์ธ๋ฑ์Šค ์ƒ์„ฑ์œ„์น˜๋ฅผ ๋ณ€๊ฒฝํ–ˆ์Šต๋‹ˆ๋‹ค ๐Ÿ”ฅ๐Ÿ”ฅ๐Ÿ”ฅ ํด๋ฆญํ•ด ์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. Zzo theme์€ ๋งŽ์€ ๊ธฐ๋Šฅ์„ ์ง€์›ํ•˜๊ณ ์žˆ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๊ธฐ์ˆ  ๋ธ”๋กœ๊ทธ๋ฅผ ์šด์˜ํ•˜๊ธฐ์— ์ตœ์ ํ™” ๋˜์–ด์žˆ์Šต๋‹ˆ๋‹ค!(์ ์–ด๋„ ์ œ์ƒ๊ฐ์—”...) Zzo theme์„ ์ด์šฉํ•  ์‹œ ๊ฐ€์žฅ ๋งค๋ ฅ์ ์ธ ํฌ์ธํŠธ ํ•œ๊ฐ€์ง€๋Š”, ํ•œ๊ธ€๋กœ ์ €์™€ ์†Œํ†ตํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์ ? ์ž…๋‹ˆ๋‹ค. ## Documentation ์˜๋ฌธ๋ฒ„์ „ ๋„ํ๋จผํŠธ [https://zzo-docs.vercel.app/zzo](https://zzo-docs.vercel.app/zzo) ## Table of contents * [๊ธฐ๋Šฅ](#features) * [์ตœ์†Œ ํœด๊ณ  ๋ฒ„์ „](#minimum-hugo-version) * [์„ค์น˜](#installation) * [์—…๋ฐ์ดํŠธ](#updating) * [์˜ˆ์ œ ์‚ฌ์ดํŠธ ๋Œ๋ฆฌ๊ธฐ](#run-example-site) * [์„ค์ •](#configuration) * [๊ฐค๋Ÿฌ๋ฆฌ](#gallery) * [์ปจํƒ ํŽ˜์ด์ง€](#contact-page) * [ํ† ํฌ ํŽ˜์ด์ง€](#talks-page) * [์‡ผ์ผ€์ด์Šค ํŽ˜์ด์ง€](#showcase-page) * [๋‹ค๊ตญ์–ด](#multi-language) * [์ €์ž](#author) * [Favicon](#favicon) * [์ปค์Šคํ„ฐ๋งˆ์ด์ง•](#customizing) * [์™ธ๋ถ€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์‚ฌ์šฉ](#external-library) * [Shortcodes](#shortcodes) ## Features * ๋‹ค์–‘ํ•œ ์Šคํ‚จ ์ง€์›(dark, light, solarized, ...) * ๋ชจ๋ฐ”์ผ ๋ฉ”๋‰ด * ์ตœ์‹  HTML5, CSS ๊ธฐ์ˆ  ์ด์šฉ * ์‹ฌํ”Œํ•œ ๋ธ”๋กœ๊ทธ * ๊ฒ€์ƒ‰ ์—”์ง„ ์ตœ์ ํ™” (SEO) * ๋‹ค๊ตญ์–ด ์ง€์› (i18n) * ๋ฐ˜์‘ํ˜• ๋””์ž์ธ * RSS feed ์ง€์› * ๊ฒ€์ƒ‰ (์ง€์› ์˜ˆ์ •) * ๊ฐค๋Ÿฌ๋ฆฌ ์ง€์› * ์ฝ”๋“œ ํ•˜์ด๋ผ์ดํŠธ * ํ† ํฌ ํŽ˜์ด์ง€ * ์‡ผ์ผ€์ด์Šค ํŽ˜์ด์ง€ ## Minimum Hugo version ์ตœ์†Œ ์š”๊ตฌ Hugo ๋ฒ„์ „์€ 0.60.0 ์ž…๋‹ˆ๋‹ค. ## Installation ์šฐ์„  ์„ค์ • ํŒŒ์ผ์„ ๋งŒ๋“œ์…”์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์„ค์ •ํŒŒ์ผ์ด ์—†๊ฑฐ๋‚˜ ์„ค์ •๊ฐ’์ด ์ž˜๋ชป ๋  ๊ฒฝ์šฐ, ์‹คํ–‰์ด ์•ˆ๋˜์‹ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. [์„ค์ •](#configuration) ๋งํฌ๋ฅผ ์ฐธ์กฐํ•˜์—ฌ ์„ค์ •ํŒŒ์ผ์„ ๋งŒ๋“ค์–ด์ฃผ์„ธ์š”. ์„ค์ • ํŒŒ์ผ์„ ๋‹ค ๋งŒ๋“œ์…จ์œผ๋ฉด, theme ํด๋”์— zzo ํด๋”๋ฅผ ๋งŒ๋“ค๊ณ , ๊ทธ๊ณณ์— ์ด ๋ ˆํฌ์ง€ํ† ๋ฆฌ๋ฅผ ๋‹ค์šด๋กœ๋“œ ํ•˜์‹  ํŒŒ์ผ์„ ๋ณต์‚ฌ ๋ถ™์—ฌ๋„ฃ๊ธฐ ํ•˜์‹œ๋ฉด ๋ฉ๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ํŒŒ์ผ์„ ๋ณต์‚ฌ ๋ถ™์—ฌ๋„ฃ๊ธฐ ํ•˜์‹œ๋ฉด, ๋‚˜์ค‘์— ์ œ๊ฐ€ ์—ฌ๋Ÿฌ๊ฐ€์ง€ ๋ฒ„๊ทธ๋‚˜ ์ด์Šˆ๋ฅผ ์—…๋ฐ์ดํŠธ ํ–ˆ์„ ๋•Œ, ๋‹˜์ด ๋งŒ๋“œ์‹  ๋ธ”๋กœ๊ทธ๋ฅผ ์ตœ์‹  Zzo theme์œผ๋กœ ์—…๋ฐ์ดํŠธ ํ•˜๊ณ  ์‹ถ์œผ์‹œ๋ฉด ํ•ด๋‹น Zzo theme์„ ์ง€์šฐ๊ณ  ๋‹ค์‹œ ๋‹ค์šด๋กœ๋“œ ํ•œ ๋‹ค์Œ, ๋ณต๋ถ™ํ•˜์‹œ๋ฉด ๋˜๊ฒ ์Šต๋‹ˆ๋‹ค. ```bash $ git clone https://github.com/zzossig/hugo-theme-zzo.git themes/zzo ``` ๊นƒํ—™์„ ์ด์šฉํ•˜์—ฌ ๋ธ”๋กœ๊ทธ๋ฅผ ๊ด€๋ฆฌํ•˜์‹ ๋‹ค๋ฉด, ์„ญ๋ชจ๋“ˆ์„ ์‚ฌ์šฉํ•˜์—ฌ Zzo theme์„ ์‰ฝ๊ฒŒ ์ตœ์‹ ๋ฒ„์ „์œผ๋กœ ์œ ์ง€ํ•˜์‹ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฃจํŠธ ํด๋”์—์„œ ๋‹ค์Œ ์ฝ”๋“œ๋ฅผ ์ž…๋ ฅํ•ด์ฃผ์‹œ๋ฉด submodule๋กœ์จ Zzo theme์ด ์„ค์น˜๋ฉ๋‹ˆ๋‹ค: ```bash git submodule add https://github.com/zzossig/hugo-theme-zzo.git themes/zzo ``` ## Updating From the root of your site: ```bash git submodule update --remote --merge ``` ## Run example site From the root of themes/zzo/exampleSite: ```bash hugo server --themesDir ../.. ``` ## Configuration 0. ์ €๊ฐ™์€ ๊ฒฝ์šฐ, ๋””๋ ‰ํ† ๋ฆฌ ํ•˜๋‚˜๋ฅผ ๋งŒ๋“ค๊ณ  ๊ทธ๊ณณ์— ๋‹ค์Œ๊ณผ๊ฐ™์ด ์‚ฌ์ดํŠธ๋ฅผ ๋งŒ๋“ญ๋‹ˆ๋‹ค. ```bash hugo new site . ``` 1. 0๋ฒˆ ๋‹จ๊ณ„์—์„œ ๋งŒ๋“œ์‹  ๋””๋ ‰ํ† ๋ฆฌ๋กœ ๋“ค์–ด๊ฐ€์ฃผ์„ธ์š”. config.toml ํŒŒ์ผ์ด ๋ณด์ด์‹ ๋‹ค๋ฉด, ๊ณผ๊ฐํ•˜๊ฒŒ ์ง€์›Œ์ฃผ์„ธ์š”. ์•„๋ž˜ ๋‹จ๊ณ„๋“ค์€ ์ œ๊ฐ€ ์‚ฌ์šฉํ•˜๋Š” config ํŒŒ์ผ๋“ค์ž…๋‹ˆ๋‹ค. ๋ชจ๋‘ ๊ทธ๋ƒฅ ๋ณต์‚ฌ, ๋ถ™์—ฌ๋„ฃ๊ธฐ ํ•ด์„œ ํŒŒ์ผ์„ ๋งŒ๋“œ์‹œ๋ฉด ๋˜๋Š”๋ฐ, ๊ท€์ฐฎ์œผ์‹  ๋ถ„๋“ค์€ exampleSite ํด๋”์— ์žˆ๋Š” config ํด๋”๋ฅผ ๋ฃจํŠธ ๋””๋ ‰ํ† ๋ฆฌ์— ๊ทธ๋ƒฅ ๋ณต์‚ฌ ๋ถ™์—ฌ๋„ฃ๊ธฐ ํ•˜์…”๋„ ๋ฉ๋‹ˆ๋‹ค. ์•„๋ž˜๋Š” ์„ค์ • ํŒŒ์ผ ๊ตฌ์กฐ๊ตฌ์š”. _defaultํด๋”์˜ _(์–ธ๋”์Šค์ฝ”์–ด) ๋บด๋จน์ง€ ๋งˆ์„ธ์š”! ```bash root โ”œโ”€โ”€ config โ”‚ย ย  โ”œโ”€โ”€ _default โ”‚ย ย  โ”‚ย ย  โ”œโ”€โ”€ config.toml โ”‚ย ย  โ”‚ย ย  โ”œโ”€โ”€ languages.toml โ”‚ย ย  โ”‚ย ย  โ”œโ”€โ”€ menus.en.toml โ”‚ย ย  โ”‚ย ย  โ”œโ”€โ”€ params.toml ``` 2. config.toml ```bash baseURL = "http://example.org/" # The URL of your site. title = "Hugo Zzo Theme" # Title of your site theme = "zzo" # Name of Zzo theme folder in `themes/`. defaultContentLanguage = "en" # Default language to use (if you setup multilingual) defaultContentLanguageInSubdir = true # baseURL/en/, baseURL/kr/ ... hasCJKLanguage = true # Set `true` for Chinese/Japanese/Korean languages. summaryLength = 70 # The length of a post description on a list page. buildFuture = true # if true, we can use future date for talks page copyright = "ยฉ{year}, All Rights Reserved" # copyright symbol: $copy; current year: {year} timeout = 10000 enableEmoji = true paginate = 13 # Number of items per page in paginated lists. rssLimit = 100 enableGitInfo = false # When true, the modified date will appear on a summary and single page. Since GitHub info needs to be fetched, this feature will slow down to build depending on a page number you have googleAnalytics = "" [markup] [markup.goldmark] [markup.goldmark.renderer] hardWraps = true unsafe = true xHTML = true [markup.highlight] codeFences = true lineNos = true lineNumbersInTable = true noClasses = false [markup.tableOfContents] endLevel = 3 ordered = false startLevel = 2 [outputs] home = ["HTML", "RSS", "JSON"] [taxonomies] category = "categories" tag = "tags" series = "series" ``` 3. languages.toml ```bash [en] title = "Hugo Zzo Theme" languageName = "English" weight = 1 [ko] title = "Hugo Zzo Theme" languageName = "ํ•œ๊ตญ์–ด" weight = 2 ``` 4. menus.en.toml You shoud make your own menu. ```bash [[main]] identifier = "about" name = "about" url = "about" weight = 1 [[main]] identifier = "archive" name = "archive" url = "archive" weight = 2 [[main]] identifier = "gallery" name = "gallery" url = "gallery" weight = 3 [[main]] parent = "gallery" name = "cartoon" url = "gallery/cartoon" [[main]] parent = "gallery" name = "photo" url = "gallery/photo" [[main]] identifier = "posts" name = "posts" url = "posts" weight = 4 [[main]] identifier = "notes" name = "notes" url = "notes" weight = 5 ... ``` 5. params.toml ```bash logoText = "Zzo" # Logo text that appears in the site navigation bar. logoType = "short" # long, short -> short: squre shape includes logo text, long: rectangle shape not includes logo text logo = true # Logo that appears in the site navigation bar. description = "The Zzo theme for Hugo example site." # for SEO custom_css = [] # custom_css = ["scss/custom.scss"] and then make file at root/assets/scss/custom.scss custom_js = [] # custom_js = ["js/custom.js"] and then make file at root/assets/js/custom.js useFaviconGenerator = false # https://www.favicon-generator.org/ languagedir = "ltr" # ltr / rtl themeOptions = ["dark", "light", "hacker", "solarized", "kimbie"] # select options for site color theme notAllowedTypesInHome = ["contact", "talks", "about", "showcase"] # not allowed page types in home page. type can be set in front matter or default to folder name. notAllowedTypesInHomeSidebar = ["about", "archive", "showcase"] # not allowed page types in home page sidebar(recent post titles). notAllowedTypesInArchive = ["about", "talks", "showcase"] # not allowed page types in archive page notAllowedTypesInHomeFeed = ["about", "archive", "contact", "talks", "showcase", "publication", "presentation", "resume", "gallery"] enablePinnedPosts = true # show pinned posts first in the main view viewportSize = "normal" # widest, wider, wide, normal, narrow enableUiAnimation = true hideSingleContentsWhenJSDisabled = false minItemsToShowInTagCloud = 1 # Minimum items to show in tag cloud # appbar enableAppbarSearchIcon = false enableAppbarLangIcon = false # header homeHeaderType = "text" # text, img, slide, typewriter hideHomeHeaderWhenMobile = false # menu showMobileMenuTerms = ["tags", "categories", "series"] # navbar enableThemeChange = true # site color theme # search enableSearch = true # site search with fuse enableSearchHighlight = true # when true, search keyword will be highlighted searchContent = true # include content to search index searchDistance = 100 # fuse option: distance searchThreshold = 0.4 # 0.0: exact match, 1.0: any match # body enableBreadcrumb = true # breadcrumb for list, single page enableGoToTop = true # scroll to top enableWhoami = true # at the end of single page summaryShape = "classic" # card, classic, compact archiveGroupByDate = "2006" # "2006-01": group by month, "2006": group by year archivePaginate = 13 # items per page paginateWindow = 1 # setting it to 1 gives 7 buttons, 2 gives 9, etc. If set 1: [1 ... 4 5 6 ... 356] [1 2 3 4 5 ... 356] etc talksPaginate = 8 # items per page talksGroupByDate = "2006" # "2006-01": group by month, "2006": group by year # whoami: usage - home page sidebar, single page bottom of post. all values can be empty myname = "zzossig" email = "zzossig@gmail.com" whoami = "Web Developer" bioImageUrl = "" # image url like "http//..." or "images/anyfoldername/mybioimage.jpg" If not set, we find a avatar image in root/static/images/whoami/avatar.(png|jpg|svg) useGravatar = false # we use this option highest priority location = "Seoul, Korea" organization = "Hugo" link = "https://github.com/zzossig/hugo-theme-zzo" # sidebar enableBio = true # in home page sidebar enableBioImage = true # in home page sidebar enableSidebar = true # Set to false to create the full width of the content. enableSidebarTags = true # if you want to use tags. enableSidebarSeries = true enableSidebarCategories = true enableHomeSidebarTitles = true enableListSidebarTitles = true enableToc = true # single page table of contents, you can replace this param to toc(toc = true) hideToc = false # Hide or Show toc tocPosition = "inner" # inner, outer tocFolding = false enableTocSwitch = true # single page table of contents visibility switch itemsPerCategory = 5 # maximum number of posts shown in the sidebar. sidebarPosition = "right" # bio, profile component layout position tocLevels = ["h2", "h3", "h4"] # minimum h2, maximum h4 in your article enableSidebarPostsByOrder = false # another lists in the sidebar # footer showPoweredBy = true # show footer text: Powered by Hugo and Zzo theme showFeedLinks = true # RSS Feed showSocialLinks = true # email, facebook, twitter ... enableLangChange = true # show button at bottom left of footer. # service googleTagManager = "" # GTM-XXXXXX baiduAnalytics = "" # alternative of google analytics enableBusuanzi = false # if set true, total page view, total unique visitors show up in the footer. busuanziSiteUV = true # unique visitors (total number of visitors) busuanziSitePV = true # site total page view count busuanziPagePV = true # post view count # rss updatePeriod = "" # Possible values: 'hourly', 'daily', 'weekly', 'monthly', or 'yearly'. updateFrequency = "" fullContents = false # comment enableComment = true disqus_shortname = "" commento = false [gitment] # Gitment is a comment system based on GitHub issues. see https://github.com/imsun/gitment owner = "" # Your GitHub ID repo = "" # The repo to store comments clientId = "" # Your client ID clientSecret = "" # Your client secret [utterances] # https://utteranc.es/ owner = "" # Your GitHub ID repo = "" # The repo to store comments message = "" # Optional link = "" # Optional [gitalk] # Gitalk is a comment system based on GitHub issues. see https://github.com/gitalk/gitalk owner = "" # Your GitHub ID repo = "" # The repo to store comments clientId = "" # Your client ID clientSecret = "" # Your client secret # Valine. # You can get your appid and appkey from https://leancloud.cn # more info please open https://valine.js.org [valine] enable = false appId = 'ไฝ ็š„appId' appKey = 'ไฝ ็š„appKey' notify = false # mail notifier , https://github.com/xCss/Valine/wiki verify = false # Verification code avatar = 'mm' placeholder = '่ฏด็‚นไป€ไนˆๅง...' visitor = false [changyan] changyanAppid = "" # Changyan app id # ็•…่จ€ changyanAppkey = "" # Changyan app key [livere] livereUID = "" # LiveRe UID # ๆฅๅฟ…ๅŠ› # Isso: https://posativ.org/isso/ [isso] enable = false scriptSrc = "" # "https://isso.example.com/js/embed.min.js" dataAttrs = "" # "data-isso='https://isso.example.com' data-isso-require-author='true'" [socialOptions] # if set, social icons will show up. email = "mailto:your@email.com" phone = "" facebook = "http://example.org/" twitter = "http://example.org/" github = "https://github.com/zzossig/hugo-theme-zzo" stack-overflow = "" instagram = "" google-plus = "" youtube = "" medium = "" tumblr = "" linkedin = "" pinterest = "" stack-exchange = "" telegram = "" steam = "" weibo = "" douban = "" csdn = "" gitlab = "" mastodon = "" jianshu = "" zhihu = "" signal = "" whatsapp = "" matrix = "" xmpp = "" dev-to = "" gitea = "" google-scholar = "" twitch = "" [donationOptions] enable = false # if set, the donation button will show up on the single page. alipay = "" # Alipay QR Code image (example path: images/donation/alipay-qrcode.png) and put your file at root/static/images/donation/ wechat = "" # Wechat pay QR Code image (example path: same as above) paypal = "" # Paypal URL patreon = "" # Patreon URL bitcoin = "" # example path: images/donation/bitcoin-code-image.png [copyrightOptions] enableCopyrightLink = false # if set, you can add copyright link copyrightLink = "" copyrightLinkImage = "" copyrightLinkText = "" # possible share name: "facebook","twitter", "reddit", "linkedin", "tumblr", "weibo", "douban", "line", "whatsapp", "telegram" [[share]] name = "facebook" username = "" [[share]] name = "twitter" [[footerLinks]] name = "" link = "" [[footerLinks]] name = "" link = "" ``` ## Gallery ๊ฐค๋Ÿฌ๋ฆฌ๋Š” ๋‘๊ฐ€์ง€ ๋ชจ๋‘๊ฐ€ ์กด์žฌํ•ด์š”. ํ•˜๋‚˜์”ฉ ์˜ฌ๋ฆฌ๊ฑฐ๋‚˜ ํ•œ๋ฒˆ์— ์˜ฌ๋ฆฌ๊ฑฐ๋‚˜. ```bash content/gallery/anygalleryname/index.md --- title: "{{ replace .Name "-" " " | title }}" date: {{ .Date }} description: type: gallery mode: one-by-one # at-once or one-by-one tags: - series: - categories: - images: # when mode is one-by-one, images front-matter variable works - image: image1.jpg # image path: static/gallery/anygalleryname/image1.jpg caption: caption1 - image: image2.jpg # image path: static/gallery/anygalleryname/image2.jpg caption: caption2 ... --- ``` ๊ฐค๋Ÿฌ๋ฆฌ๋ฅผ ๋งŒ๋“œ์‹œ๋ ค๋ฉด ์šฐ์„  type์„ ๊ฐค๋Ÿฌ๋ฆฌ๋กœ ํ•˜์…”์•ผ ํ•˜๊ตฌ์š”, mode๋ฅผ one-by-one์œผ๋กœ ํ•˜์‹œ๋ฉด images์— ์ด๋ฏธ์ง€๋ฅผ ์œ„์™€ ๊ฐ™์ด ํ•˜๋‚˜์”ฉ ์ž…๋ ฅํ•ด์ฃผ์…”์•ผ ํ•ด์š”. ๊ทธ๋Ÿผ ์ด๋ฏธ์ง€๊ฐ€ ์œ„์— ์ ํžŒ ์ˆœ์„œ๋Œ€๋กœ ๋‚˜ํƒ€๋‚ ๊ฑฐ์—์š”. mode๋ฅผ at-once๋กœ ํ•˜์‹œ๋ฉด, static ํด๋”์— ์žˆ๋Š” ์ด๋ฏธ์ง€๋ฅผ ์ „๋ถ€ ๋ถˆ๋Ÿฌ์˜ฌ๊ฑฐ์—์š”. ์˜ˆ๋ฅผ๋“ค์–ด ์œ„์˜ ์ฝ”๋“œ์—์„œ mode๋ฅผ at-once๋กœ ํ–ˆ๋‹ค๋ฉด, static/gallery/anygalleryname ํด๋”์— ์žˆ๋Š” ์ด๋ฏธ์ง€๋ฅผ ์ „๋ถ€ ์ฝ์–ด ๊ฐค๋Ÿฌ๋ฆฌ ํŽ˜์ด์ง€์— ๋‚˜ํƒ€๋‚  ๊ฑฐ์—์š”. 1. Make a gallery folder under the content folder ```bash root โ”œโ”€โ”€ content โ”‚ย ย  โ”œโ”€โ”€ gallery ``` 2. Make a sub folder under the gallery folder ```bash root โ”œโ”€โ”€ content โ”‚ย ย  โ”œโ”€โ”€ gallery โ”‚ย ย  โ”‚ย ย  โ”œโ”€โ”€ anygalleryname ``` 3. Make a index.md file under the sub folder using this command ```bash hugo new --kind gallery gallery/anygalleryname/index.md ``` 4. Put your images in static folder ```bash root โ”œโ”€โ”€ static โ”‚ย ย  โ”œโ”€โ”€ gallery โ”‚ย ย  โ”‚ย ย  โ”œโ”€โ”€ anygalleryname โ”‚ย ย  โ”‚ย ย  โ”‚ โ”œโ”€โ”€ ...your images here ``` ## Contact Page ํ˜„์žฌ ์ด์šฉ ๊ฐ€๋Šฅํ•œ ์„œ๋น„์Šค: [formspree]. ๋‹ค๋ฅธ ์„œ๋น„์Šค๋ฅผ ์ด์šฉํ•˜๊ณ  ์‹ถ์œผ์‹œ๋ฉด ์ƒˆ ์ด์Šˆ๋ฅผ ๋งŒ๋“ค์–ด์ฃผ์„ธ์š”. ์„œ๋น„์Šค ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ๋นˆ๊ฐ’์œผ๋กœ ์„ค์ •ํ•˜๋ฉด ๋งˆํฌ๋‹ค์šด์œผ๋กœ ํ•ด๋‹น ํŽ˜์ด์ง€๋ฅผ ์ฑ„์šธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. 1. ํŒŒ์ผ์„ ๋‹ค์Œ ๊ฒฝ๋กœ์— ๋งŒ๋“ค์–ด์ค๋‹ˆ๋‹ค. root/content/contact/index.md ```yaml --- title: "Contact" date: 2019-12-17T23:58:33+09:00 description: Contact page type: contact service: formspree formId: "your@email.com" --- This is contact page. ``` 2. ์ปจํƒํŠธ ๋ฉ”๋‰ด๋ฅผ ๋‹ค์Œ ๊ฒฝ๋กœ์— ์ถ”๊ฐ€ํ•ด์ค๋‹ˆ๋‹ค. root/config/_default/menus.en.toml. ```toml ... [[main]] identifier = "contact" name = "contact" url = "contact" weight = 6 ``` ## Talks Page Talks ํŽ˜์ด์ง€๋Š” ์•„์นด์ด๋ธŒ ํŽ˜์ด์ง€์™€ ์œ ์‚ฌํ•œ UI์˜ ํŽ˜์ด์ง€์ž…๋‹ˆ๋‹ค. ๋น„๋””์˜ค, ํ”ผํ‹ฐ ๋“ฑ๋“ฑ์˜ ๋งํฌ๋ฅผ ๋ชจ์•„์„œ ๋ณด์—ฌ์ฃผ๋Š” ์šฉ๋„๋กœ ์”๋‹ˆ๋‹ค. Talks ํŽ˜์ด์ง€๋ฅผ ์ถ”๊ฐ€ํ•˜๋ ค๋ฉด ์•„๋ž˜์˜ ์ˆœ์„œ๋Œ€๋กœ ๋”ฐ๋ผํ•ด์ฃผ์„ธ์š”. 1. ํŒŒ์ผ์„ root/content/talks/_index.md. ๊ฒฝ๋กœ์— ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋งŒ๋“ญ๋‹ˆ๋‹ค. ```yaml --- title: "Talks" date: 2019-12-30T11:14:14+09:00 description: Talks Page titleWrap: wrap # wrap, nowrap --- ``` 2. ๋˜ ๋‹ค๋ฅธ ํŒŒ์ผ์„ ๋งŒ๋“ค์–ด ์ค๋‹ˆ๋‹ค. ์ด๊ณณ์— ๋‚ด์šฉ์„ ๋„ฃ์–ด์ฃผ์„ธ์š”. root/content/talks/myLinks.md ```yaml --- title: "My Awesome links" date: 2019-12-31T00:04:50+09:00 publishDate: 2019-12-31 description: tags: - series: - categories: - --- ``` 3. ๋งˆ์ง€๋ง‰์œผ๋กœ ๋ฉ”๋‰ด๋งŒ ๋‹ค์Œ ๊ณผ ๊ฐ™์ด ๋งŒ๋“ค์–ด ์ฃผ๋ฉด ๋ฉ๋‹ˆ๋‹ค. root/config/_default/menus.en.toml file ```toml [[main]] identifier = "talks" name = "talks" url = "talks" weight = 6 ``` 4. ์ถ”๊ฐ€์ ์œผ๋กœ, date๋ฅผ ๋ฏธ๋ž˜์˜ ๋‚ ์งœ๋ฅผ ์“ฐ๊ณ  ์‹ถ์œผ์‹œ๋ฉด ๋‹ค์Œ ๋‹จ๊ณ„๋ฅผ ๋”ฐ๋ผ์„œ ํ•ด์ฃผ์„ธ์š”. - ๋‹ค์Œ ๊ฒฝ๋กœ์˜ ์„ค์ •ํŒŒ์ผ(root/config/_default/config.toml)์—์„œ `buildFuture`๋ฅผ ์ถ”๊ฐ€ํ•ด์ฃผ์„ธ์š”. ```toml ... buildFuture = true ... ``` - talksํด๋”์˜ ๋งˆํฌ๋‹ค์šด ํŒŒ์ผ์— `publishDate`๋ฅผ ์ถ”๊ฐ€ํ•ด์ฃผ์„ธ์š”. root/content/talks/myLinks.md ```yaml --- title: date: publishDate: 2020-02-20 ... --- ... ``` ## Showcase Page Showcase ํŽ˜์ด์ง€๋Š” ํ”„๋กœ์ ํŠธ๋ฅผ ์ „์‹œํ•˜๋Š” ํŽ˜์ด์ง€ ์ž…๋‹ˆ๋‹ค. ํŽ˜์ด์ง€๋ฅผ ๋งŒ๋“œ์‹œ๋ ค๋ฉด ์•„๋ž˜ ๋‹จ๊ณ„๋ฅผ ์ง„ํ–‰ํ•ด์ฃผ์„ธ์š”. 1. ๋‹ค์Œ ๊ฒฝ๋กœ์— ํŒŒ์ผ์„ ๋งŒ๋“ญ๋‹ˆ๋‹ค. `root/content/showcase/_index.md`. ```yaml --- title: "Showcase overview" # For SEO date: 2020-01-19T15:43:38+09:00 description: My portfolio, repos, works overview page # For SEO enableBio: true # Set to false if you want to hide the bio component. --- ``` 2. ๋‹ค์Œ ๊ฒฝ๋กœ์— ์นดํ…Œ๊ณ ๋ฆฌ ํด๋”์™€ ํŒŒ์ผ์„ ๋งŒ๋“ญ๋‹ˆ๋‹ค. `root/content/showcase/hugo/_index.md` file. (์ €์˜ ๊ฒฝ์šฐ, hugo๊ฐ€ ์นดํ…Œ๊ณ ๋ฆฌ ํด๋”์ž…๋‹ˆ๋‹ค.) ```yaml --- title: "Hugo" # section name date: 2020-01-19T21:04:11+09:00 description: Hugo theme collection # For SEO category: theme # meta info appeared on a card bottom side. category in category enableBio: true --- ``` 3. ํ”„๋กœ์ ํŠธ๋‹น ํ•œ๊ฐœ์˜ mdํŒŒ์ผ์„ ๋งŒ๋“ค์–ด ์ฃผ์„ธ์š”. `root/content/showcase/hugo/my-awesome-project.md` ```yaml --- title: "My Awesome Project" # apperared on a card component date: 2020-01-19T21:13:42+09:00 description: Hello world! This is my awesome project! # apperared on a card component weight: 1 # card ordering link: https://github.com/zzossig/hugo-theme-zzo repo: https://github.com/zzossig/hugo-theme-zzo pinned: true # appreared on a overview page. thumb: feature3/css3.png # relative path in static/images --- ``` 4. ๋งˆ์ง€๋ง‰์œผ๋กœ, ๋ฉ”๋‰ด๋ฅผ ๋“ฑ๋กํ•ด์ฃผ์„ธ์š”. `root/config/_default/menus.en.toml` ```toml [[main]] identifier = "showcase" name = "Showcase" url = "showcase" weight = 7 ``` ## Multi Language Zzo theme์˜ ๊ธฐ๋ณธ ์–ธ์–ด๋Š” ์˜์–ด์ž…๋‹ˆ๋‹ค. ํ•œ๊ตญ์–ด๋กœ ๋ฐ”๊พธ์‹œ๋ ค๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์ด ํ•ด์ฃผ์„ธ์š”. 1. ์šฐ์„  ๋ฉ”๋‰ดํŒŒ์ผ์„ ๋งŒ๋“ญ๋‹ˆ๋‹ค. ```bash root โ”œโ”€โ”€ config โ”‚ย ย  โ”œโ”€โ”€ _default โ”‚ย ย  โ”‚ย ย  โ”œโ”€โ”€ ... โ”‚ย ย  โ”‚ย ย  โ”œโ”€โ”€ menus.ko.toml ``` ```bash config/_default/menus.ko.toml [[main]] identifier = "about" name = "about" url = "/about/" weight = 1 [[main]] identifier = "archive" name = "archive" url = "/archive/" weight = 2 ... ``` 2. content ํด๋”์— ๋งˆํฌ๋‹ค์šด ํŒŒ์ผ์„ ์ž‘์„ฑํ•˜์‹ค ๋•Œ, ํ™•์žฅ์ž ์•ž์— ko๋ฅผ ๋ถ™์—ฌ์ฃผ์„ธ์š”! ```bash hugo new about/index.ko.md hugo new posts/markdown-syntax.ko.md ... ``` 3. i18n ํŒŒ์ผ์„ ๋งŒ๋“ญ๋‹ˆ๋‹ค. ```bash i18n/ko.toml [search-placeholder] other = "๊ฒ€์ƒ‰..." [summary-dateformat] other = "2006๋…„ 01์›” 02์ผ" [tags] other = "ํƒœ๊ทธ" ... ``` 4. ์„ค์ • ํŒŒ์ผ์— ๊ธฐ๋ณธ์–ธ์–ด ํ•ญ๋ชฉ ๊ฐ’์„ ๋ณ€๊ฒฝํ•ด์ค๋‹ˆ๋‹ค. ```bash defaultContentLanguage = "ko" defaultContentLanguageInSubdir = true hasCJKLanguage = true ``` ## Customizing ๊ธฐ๋ณธ์ ์œผ๋กœ theme ํด๋”์•ˆ์— ์žˆ๋Š” ๋‚ด์šฉ์€ ์•ˆ๊ฑด๋“œ์‹œ๋Š”๊ฒŒ ์ข‹์ง€๋งŒ, ๊ฑด๋“œ์‹ ๋‹ค๋ฉด ๋‚˜์ค‘์— theme์„ ์—…๋ฐ์ดํŠธ ํ•˜๋Š”๊ฒŒ ๋ณต์žกํ•ด ์งˆ ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ํ˜„์žฌ ์ƒํƒœ๋กœ ๋ณ„๋กœ ์—…๋ฐ์ดํŠธ๊ฐ€ ํ•„์š” ์—†๋‹ค๊ณ  ๋Š๋ผ์‹ ๋‹ค๋ฉด theme์— ์žˆ๋Š” ํŒŒ์ผ์„ ๋งˆ์Œ๋Œ€๋กœ ๊ณ ์น˜์…”๋„ ๋ฉ๋‹ˆ๋‹ค. ๊ทธ๊ฒŒ ์•„๋‹ˆ๋ผ๋ฉด ์•„๋ž˜์— ์žˆ๋Š” ๋ฐฉ์‹์œผ๋กœ ์ปค์Šคํ„ฐ๋งˆ์ด์ง• ํ•˜์‹œ๊ธฐ๋ฅผ ์ถ”์ฒœ๋“œ๋ฆฝ๋‹ˆ๋‹ค. ์ถ”๊ฐ€๋กœ, custom css๋‚˜ custom js๋ฅผ ์•„๋ž˜์˜ ๋ฐฉ์‹๋Œ€๋กœ ์ด์šฉํ•˜์‹œ๋ฉด, ํŽ˜์ด์ง€ ๋กœ๋“œ ์†๋„๊ฐ€ ์•ฝ๊ฐ„ ๋” ๋Š๋ ค์ง€๋Š” ๊ฒƒ์„ ๋ฐœ๊ฒฌํ–ˆ์Šต๋‹ˆ๋‹ค. ### custom css 1. config ํด๋”์˜ params.toml ํŒŒ์ผ์— ์•„๋ž˜์™€๊ฐ™์ด ์ปค์Šคํ…€ ์Šคํƒ€์ผ ํŒŒ์ผ์„ ๋ช…์‹œํ•ด์ฃผ์„ธ์š”. ```bash config/_default/params.toml ... custom_css = ["css/custom.css", "scss/custom.scss", ...] ... ``` 2. ์œ„ ์„ค์ •ํŒŒ์ผ์— ๋ช…์‹œํ•œ ๋Œ€๋กœ ์‹ค์ œ ํŒŒ์ผ์„ ๋งŒ๋“ค์–ด ์ฃผ์„ธ์š”. ```bash assets/scss/custom.scss assets/css/custom.css ``` 3. ๋งŒ์•ฝ ํŠน์ • ์ƒ‰์ƒ์„ ๋ณ€๊ฒฝํ•˜๊ณ  ์‹ถ์œผ์‹œ๋ฉด, ์œ„์— ๋งŒ๋“  ์ปค์Šคํ…€ ์Šคํƒ€์ผ ํŒŒ์ผ์— ํ•ด๋‹น ๋ถ€๋ถ„์˜ ์Šคํƒ€์ผ์„ ์˜ค๋ฒ„๋ผ์ด๋“œ ํ•ด์ค˜์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ๋“ค์–ด backdrop ์ƒ‰์ƒ์„ ๋ณ€๊ฒฝํ•˜๊ณ ์ž ํ•˜์‹œ๋ฉด, ๋‹ค์Œ๊ณผ ๊ฐ™์ด ํ•ด์ฃผ์…”์•ผ ํ•ฉ๋‹ˆ๋‹ค. ```css assets/scss/custom.scss or assets/css/custom.css ... #body { background-color: red !important; } ... ``` ### custom js 1. config ํด๋”์˜ params.toml ํŒŒ์ผ์— ์•„๋ž˜์™€๊ฐ™์ด ์ปค์Šคํ…€ ํŒŒ์ผ์„ ๋ช…์‹œํ•ด์ฃผ์„ธ์š”. ```bash config/_default/params.toml ... custom_js = ["js/custom.js", ...] ... ``` 2. ์‹ค์ œ ํŒŒ์ผ์„ ์ƒ์„ฑํ•ด ์ฃผ์‹œ๊ตฌ์š”. ```bash assets/js/custom.js ``` ### custom syntax highlighting 1. root/data ํด๋”์— skin.tomlํŒŒ์ผ์„ ๋งŒ๋“ค์–ด์ฃผ์„ธ์š”. theme_dark_chroma, theme_light_chroma, ... ํŒŒ๋ผ๋ฏธํ„ฐ์˜ ํ•ญ๋ชฉ์˜ ๊ฐ’์„ ์›ํ•˜์‹œ๋Š” ์ฝ”๋“œ ํ•˜์ด๋ผ์ดํŠธ ํ…Œ๋งˆ๊ฐ’์œผ๋กœ ๋ณ€๊ฒฝํ•ด์ฃผ์„ธ์š”. [์ด ๋งํฌ](https://xyproto.github.io/splash/docs/all.html)๋ฅผ ์ฐธ์กฐํ•ด์„œ ๊ฐ’์„ ๋ณ€๊ฒฝํ•˜์‹œ๋ฉด ๋ฉ๋‹ˆ๋‹ค. ๋งŒ์•ฝ theme_[xxxx]_chroma ๊ฐ’์— - ๋‚˜ _ ๊ฐ™์€ ํŠน์ˆ˜๋ฌธ์ž๊ฐ€ ์žˆ๋‹ค๋ฉด ์ง€์›Œ์ฃผ์„ธ์š”. ์˜ˆ๋ฅผ๋“ค์–ด, solarized-dark256 ๊ฐ’์„ ์ž…๋ ฅํ•˜์‹œ๋ ค๋ฉด, ๋‹ค์Œ๊ณผ ๊ฐ™์ด ํ•ด์ฃผ์„ธ์š”. ``` root/data/skin.toml theme_dark_chroma = "solarizeddark256" ``` 2. ํŠน์ • ์ƒ‰์ƒ์„ ๋ณ€๊ฒฝํ•˜๊ณ  ์‹ถ์œผ์‹œ๋‹ค๋ฉด, [[custom-css](#custom-css)]์—์„œ ๋งŒ๋“  ํŒŒ์ผ์— chroma class๋ฅผ ์˜ค๋ฒ„๋ผ์ด๋“œ ํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค. ์ž˜ ๋ชจ๋ฅด๊ฒ ์œผ๋ฉด ๋ฌธ์˜์ฃผ์„ธ์š”! ``` root/assets/scss/custom.scss .chroma { background-color: #123456 !important; } ``` ### custom header ํ™ˆํŽ˜์ด์ง€์—์„œ ํ—ค๋” ๋ถ€๋ถ„์— 4๊ฐ€์ง€ ์ข…๋ฅ˜์˜ ํ—ค๋”๋ฅผ ์ž…ํž ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์Šฌ๋ผ์ด๋”, ์ด๋ฏธ์ง€, ํ…์ŠคํŠธ, ๊ทธ๋ฆฌ๊ณ  ์•„๋ฌด๊ฒƒ๋„ ์ž…๋ ฅ ์•ˆํ•˜์‹œ๋ฉด ๋นˆ๊ณต๊ฐ„์ด ๋ฉ๋‹ˆ๋‹ค. 1. config/_default/params.toml ์„ค์ •ํŒŒ์ผ์— homeHeaderType ๊ฐ’์„ ๋ณ€๊ฒฝํ•ด์ฃผ์„ธ์š”. ๊ฐ€๋Šฅํ•œ ๊ฐ’์€ slide, img, text, typewriter์ž…๋‹ˆ๋‹ค. 2. root/content/_index.md์— _index.md ํŒŒ์ผ์„ ๋งŒ๋“ค์–ด์ฃผ์„ธ์š” ๊ทธ๋ฆฌ๊ณ  ์•„๋ž˜ ๋‚ด์šฉ์„ ๋ณต๋ถ™ํ•ด์ฃผ์„ธ์š”. 3. ๋ณ€์ˆ˜์˜ ์ด๋ฆ„๋งŒ์œผ๋กœ ์˜๋ฏธ๊ฐ€ ์ „๋‹ฌ๋œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๊ฐ’์„ ํ•˜๋‚˜์”ฉ ๋ณ€๊ฒฝํ•ด๋ณด๋ฉด์„œ ์›ํ•˜์‹œ๋Š” ๋Œ€๋กœ ์ปค์Šคํ„ฐ๋งˆ์ด์ง• ํ•ด์ฃผ์„ธ์š”. ```yaml --- header: - type: text height: 200 paddingX: 50 paddingY: 0 align: center title: - HUGO subtitle: - The worldโ€™s fastest framework for building websites titleColor: # #123456, red titleShadow: false titleFontSize: 44 subtitleColor: # #123456, red subtitleCursive: false subtitleFontSize: 16 spaceBetweenTitleSubtitle: 20 - type: img imageSrc: images/header/background.jpg # your image file path: root/static/images/header/background.jpg imageSize: cover # auto|length|cover|contain|initial|inherit imageRepeat: no-repeat # repeat|repeat-x|repeat-y|no-repeat|initial|inherit imagePosition: center # x% y%| xpos ypos| left top| center bottom| ... height: 235 paddingX: 50 paddingY: 0 align: center title: - subtitle: - titleColor: titleShadow: false titleFontSize: 44 subtitleColor: subtitleCursive: false subtitleFontSize: 16 spaceBetweenTitleSubtitle: 20 - type: slide height: 235 options: startSlide: 0 auto: 5000 # auto slide delay 5000ms(5sec) draggable: true # slide draggable autoRestart: true # restart after drag finished continuous: true # last to first disableScroll: true stopPropagation: true slide: - paddingX: 50 paddingY: 0 align: left imageSrc: images/header/background.jpg imageSize: cover imageRepeat: no-repeat imagePosition: center title: - header title1 subtitle: - header subtitle1 titleFontSize: 44 subtitleFontSize: 16 spaceBetweenTitleSubtitle: 20 - paddingX: 50 paddingY: 0 align: center imageSrc: images/header/background.jpg imageSize: cover imageRepeat: no-repeat imagePosition: center title: - header title2 subtitle: - header subtitle2 titleFontSize: 44 subtitleFontSize: 16 spaceBetweenTitleSubtitle: 20 - paddingX: 50 paddingY: 0 align: right imageSrc: images/header/background.jpg imageSize: cover imageRepeat: no-repeat imagePosition: center title: - header title3 subtitle: - header subtitle3 titleFontSize: 44 subtitleFontSize: 16 spaceBetweenTitleSubtitle: 20 --- ``` ### custom grid 1. ํด๋”์— grid.toml ํŒŒ์ผ์„ ๋งŒ๋“ค์–ด์ฃผ์„ธ์š”. (data/grid.toml) 2. themes/zzo/data/grid.toml ํŒŒ์ผ์— ์žˆ๋Š” ๋‚ด์šฉ์„ ์œ„์—์„œ ๋งŒ๋“  ํŒŒ์ผ์— ๋ณต๋ถ™ํ•ด์ฃผ์„ธ์š”. 3. ์›ํ•˜์‹œ๋Š” ๋Œ€๋กœ ๊ฐ’์„ ๋ณ€๊ฒฝํ•ด์ฃผ์„ธ์š”. 4. ๋ณ€๊ฒฝ ํ›„, ํœด๊ณ ๋ฅผ ์žฌ์‹œ์ž‘ ํ•ด์ฃผ์„ธ์š”. ```toml data/grid.toml example grid_max_width = "960" grid_max_unit = "px" # "px", "\"%\"" Using% is limited to using full width. grid_main_main_width = "5" grid_main_main_unit = "fr" # "fr", "px" grid_main_side_width = "2" grid_main_side_unit = "fr" # "fr", "px" grid_column_gap_width = "32" grid_column_gap_unit = "px" # "px" grid_navbar_height = "50px" # "px" grid_row_gap = "0" ``` ### custom font 1. ์ปค์Šคํ…€ css ํŒŒ์ผ์„ ๋งŒ๋“ค์–ด์ฃผ์„ธ์š”. ```bash config/_default/params.toml ... custom_css = ["css/font.css"] ... ``` 2. font.css ํŒŒ์ผ์—, font-face๋ฅผ ์•„๋ž˜์™€ ๊ฐ™์ด ๋งŒ๋“ค์–ด์ฃผ์„ธ์š”. ```css @font-face { font-family: 'Montserrat'; src: url('../fonts/montserrat-black.woff2') format('woff2'), url('../fonts/montserrat-black.woff') format('woff'); font-weight: 900; font-style: normal; } @font-face { font-family: 'Merriweather'; src: url('../fonts/merriweather-regular.woff2') format('woff2'), url('../fonts/merriweather-regular.woff') format('woff'); font-weight: 400; font-style: normal; } ``` 3. root/static/fonts/myfont.xxx ํฐํŠธ ํŒŒ์ผ์„ static ํด๋”์— ๋„ฃ์–ด์ฃผ์„ธ์š”. (If your url in step2 is ('../fonts/myfont.xxx')). 4. root/data/font.toml ์— font.toml ํŒŒ์ผ์„ ๋งŒ๋“ค์–ด์ฃผ์„ธ์š”. ๊ทธ๋ฆฌ๊ณ  ์•„๋ž˜์™€ ๊ฐ™์ด ๋‚ด์šฉ์„ ์ž…๋ ฅํ•ด์ฃผ์„ธ์š”. ```toml title_font = "\"Montserrat\", sans-serif" content_font = "\"Merriweather\", serif" ``` 5. ๋‹ค๋ฅธ ๋ฐฉ์‹ root/layouts/partials/head/custom-head.html ๊ฒฝ๋กœ์— ํŒŒ์ผ์„ ๋งŒ๋“œ์‹œ๊ณ  ํฐํŠธ๋ฅผ ๊ทธ๊ณณ์—์„œ ๋กœ๋“œํ•ด์ฃผ์„ธ์š”. ```html ``` ### custom copyright footer์˜ ์ €์ž‘๊ถŒ ํ…์ŠคํŠธ์— ๋งํฌ๋ฅผ ๋„ฃ๊ณ  ์‹ถ์œผ๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ปค์Šคํ„ฐ๋งˆ์ด์ง• ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค. 1. ์„ค์ • ํŒŒ์ผ์ธ config.toml ์—์„œ copyright ํŒŒ๋ผ๋ฏธํ„ฐ ๊ฐ’์„ ์„ค์ •ํ•ด์ฃผ์„ธ์š”. ```toml ... copyright = This is my {} copyright text ... ``` {} ๋กœ ์“ฐ์—ฌ์ง„ ๋ถ€๋ถ„์ด ๋งํฌ๊ฐ€ ๋“ค์–ด๊ฐˆ ๋ถ€๋ถ„์ž…๋‹ˆ๋‹ค. 2. ์„ค์ • ํŒŒ์ผ์ธ params.toml ์—์„œ copyrightOptions ํŒŒ๋ผ๋ฏธํ„ฐ ๊ฐ’์„ ์„ค์ •ํ•ด์ฃผ์„ธ์š”. ```toml ... [copyrightOptions] enableCopyrightLink = false copyrightLink = "https://..." copyrightLinkImage = "https://..." copyrightLinkText = "copyright link text" ``` ### custom favicon root/static ํด๋”์— ํŒŒ๋น„์ฝ˜์„ ๋„ฃ์–ด์„œ ํ…Œ๋งˆ์˜ favicon์„ overriding ํ•˜์‹œ๋ฉด ๋ฉ๋‹ˆ๋‹ค. ## Author ํฌ์ŠคํŠธ์˜ ์ €์ž์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ front matter๋ฅผ ํ†ตํ•ด์„œ ๋ช…์‹œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ```yaml --- title: ... author: # author name authorEmoji: ๐Ÿค– # emoji for subtitle, summary meta data authorImage: "/images/whoami/avatar.jpg" # image path in the static folder authorImageUrl: "" # your image url. We use `authorImageUrl` first. If not set, we use `authorImage`. authorDesc: # author description socialOptions: # override params.toml file socialOptions email: "" facebook: "" ... --- ``` ## Favicon `favicon.ico`๋ผ๋Š” ํŒŒ์ผ์„ ๋ฃจํŠธ ๋””๋ ‰ํ† ๋ฆฌ์˜ static ํด๋”์— ๋„ฃ์–ด์ฃผ์„ธ์š”. ํŒŒ์ผ ์ด๋ฆ„๊ณผ ํ™•์žฅ์ž๊ฐ€ ์ •ํ™•ํžˆ `favicon.ico`์—ฌ์•ผ ํ•ฉ๋‹ˆ๋‹ค. ### Using favicon-genarator ๋ชจ๋ฐ”์ผ ํ™˜๊ฒฝ์„ ๊ณ ๋ คํ•˜์‹ ๋‹ค๋ฉด [favicon-generator](https://www.favicon-generator.org/) ์‚ฌ์ดํŠธ์—์„œ ํŒŒ๋น„์ฝ˜์„ ๋งŒ๋“ค์–ด์ฃผ์„ธ์š”. - ์œ„์˜ ์‚ฌ์ดํŠธ์—์„œ ํŒŒ๋น„์ฝ˜์„ ๋งŒ๋“ค์–ด์ฃผ์„ธ์š”. - `root/static/favicon`๊ฒฝ๋กœ์— ํด๋”๋ฅผ ๋งŒ๋“ค์–ด์ฃผ์„ธ์š”. - ํ•ด๋‹น ํด๋”์— ํŒŒ๋น„์ฝ˜์„ ํ’€์–ด์ฃผ์„ธ์š”. - params.toml ํŒŒ์ผ์— `useFaviconGenerator`์˜ ๊ฐ’์„ `true`๋กœ ๋ฐ”๊ฟ”์ฃผ์„ธ์š”. ## External Library ํ˜„์žฌ ์ง€์›ํ•˜๋Š” ์™ธ๋ถ€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋Š” Katex, MathJax, Mermaid, Flowchart.js, chart.js, viz-graph, wavedrom, js-sequence-diagram ์ž…๋‹ˆ๋‹ค. front-matter์— ๊ฐ’์„ ๋„ฃ์–ด์ฃผ์‹œ๋ฉด ํ•ด๋‹น ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ๋กœ๋“œ๋ฉ๋‹ˆ๋‹ค. ```bash --- title: "{{ replace .Name "-" " " | title }}" date: {{ .Date }} ... libraries: - katex - mathjax - chart - flowchartjs - msc - katex - mermaid - viz - wavedrom --- ``` ## Shortcodes ### alert ```bash {{< alert theme="warning" >}} # warning, success, info, danger **this** is a text {{< /alert >}} ``` ### expand ```bash {{< expand "Expand me" >}}Some Markdown Contents{{< /expand >}} ``` ### img ```bash // path: static/images/whoami/avatar.jpg {{< img src="/images/whoami/avatar.jpg" title="Image4" caption="Image description" alt="image alt" width="50px" height="50px">}} ``` ### notice ```bash {{< notice success >}} # success, info, warning, error success {{< /notice >}} ``` ### color ```bash {{< color "#0000ff" >}}*text*{{< /color >}} ``` ### box ```bash {{< box >}} Some contents {{< /box >}} ``` ### boxmd ```bash {{< boxmd >}} Some markdown contents {{< /boxmd >}} ``` ### code / codes => ์ฝ”๋“œ๋ฅผ ์—ฌ๋Ÿฌ ๋ฒ„์ „์œผ๋กœ ์ œ๊ณตํ•  ๋•Œ ์“ฐ์„ธ์š”. ๋“ค์—ฌ์“ฐ๊ธฐ ์ž˜๋ชปํ•˜๋ฉด ์ด์ƒํ•˜๊ฒŒ ๋‚˜์™€์š”. ````` {{< codes java javascript >}} {{< code >}} ```java System.out.println('Hello World!'); ``` {{< /code >}} {{< code >}} ```javascript console.log('Hello World!'); ``` {{< /code >}} {{< /codes >}} ````` ### tab / tabs => ์—ฌ๋Ÿฌ ๋ฒ„์ „์˜ ๋ทฐ๋ฅผ ์ œ๊ณตํ•  ๋•Œ ์“ฐ์„ธ์š” ํƒญ์„ ๋งŒ๋“ค ๋•Œ, ๊ฐ ํƒญ๋งˆ๋‹ค ์•ˆ์˜ ๋‚ด์šฉ์— ๋”ฐ๋ผ ๊ณ ์œ  ์•„์ด๋””๋ฅผ ๋ถ€์—ฌํ•˜๊ธฐ ๋•Œ๋ฌธ์—, Tab ์•ˆ์— ์žˆ๋Š” ๋‚ด์šฉ์ด ์„œ๋กœ ๋‹ฌ๋ผ์•ผํ•ฉ๋‹ˆ๋‹ค. ````` {{< tabs Windows MacOS Ubuntu >}} {{< tab >}} ### Windows section ```javascript console.log('Hello World!'); ``` {{< /tab >}} {{< tab >}} ### MacOS section Hello world! {{< /tab >}} {{< tab >}} ### Ubuntu section Great! {{< /tab >}} {{< /tabs >}} `````