Use new template for the website

This commit is contained in:
Zhuohan Li 2023-11-14 12:12:47 -08:00
parent 6a9337597c
commit f54ea7342e
87 changed files with 2529 additions and 997 deletions

55
.gitignore vendored
View File

@ -1,43 +1,22 @@
# Ignore docs files
_gh_pages
_site
.ruby-version
.sass-cache
.jekyll-cache
# Files generated by Jekyll
_site/
.sass-cache/
.jekyll-cache/
.jekyll-metadata
# Numerous always-ignore extensions
*.diff
*.err
*.orig
*.log
*.rej
*.swo
*.swp
*.zip
*.vi
*~
# Files generated by Bundler
.bundle/
vendor/
Gemfile.lock
# OS or Editor folders
# Gems
*.gem
# Files generated by OS
.DS_Store
.DS_Store?
._*
.Spotlight-V100
.Trashes
ehthumbs.db
Thumbs.db
.cache
.project
.settings
.tmproj
*.esproj
nbproject
*.sublime-project
*.sublime-workspace
.idea
# Komodo
*.komodoproject
.komodotools
# grunt-html-validation
validation-status.json
validation-report.json
# Folders to ignore
node_modules

View File

@ -1,10 +1,24 @@
---
layout: default
title: "404: Page not found"
permalink: 404.html
layout: base
---
<div class="page">
<h1 class="page-title">404: Page not found</h1>
<p class="lead">Sorry, we've misplaced that URL or it's pointing to something that doesn't exist. <a href="{{ site.baseurl }}/">Head back home</a> to try finding it again.</p>
<style type="text/css" media="screen">
.container {
margin: 10px auto;
max-width: 600px;
text-align: center;
}
h1 {
margin: 30px 0;
font-size: 4em;
line-height: 1;
letter-spacing: -1px;
}
</style>
<div class="container">
<h1>404</h1>
<p><strong>Page not found :(</strong></p>
<p>The requested page could not be found.</p>
</div>

74
CODE_OF_CONDUCT.md Normal file
View File

@ -0,0 +1,74 @@
# Contributor Covenant Code of Conduct
## Our Pledge
In the interest of fostering an open and welcoming environment, we as
contributors and maintainers pledge to making participation in our project and
our community a harassment-free experience for everyone, regardless of age, body
size, disability, ethnicity, gender identity and expression, level of experience,
nationality, personal appearance, race, religion, or sexual identity and
orientation.
## Our Standards
Examples of behavior that contributes to creating a positive environment
include:
* Using welcoming and inclusive language
* Being respectful of differing viewpoints and experiences
* Gracefully accepting constructive criticism
* Focusing on what is best for the community
* Showing empathy towards other community members
Examples of unacceptable behavior by participants include:
* The use of sexualized language or imagery and unwelcome sexual attention or
advances
* Trolling, insulting/derogatory comments, and personal or political attacks
* Public or private harassment
* Publishing others' private information, such as a physical or electronic
address, without explicit permission
* Other conduct which could reasonably be considered inappropriate in a
professional setting
## Our Responsibilities
Project maintainers are responsible for clarifying the standards of acceptable
behavior and are expected to take appropriate and fair corrective action in
response to any instances of unacceptable behavior.
Project maintainers have the right and responsibility to remove, edit, or
reject comments, commits, code, wiki edits, issues, and other contributions
that are not aligned to this Code of Conduct, or to ban temporarily or
permanently any contributor for other behaviors that they deem inappropriate,
threatening, offensive, or harmful.
## Scope
This Code of Conduct applies both within project spaces and in public spaces
when an individual is representing the project or its community. Examples of
representing a project or community include using an official project e-mail
address, posting via an official social media account, or acting as an appointed
representative at an online or offline event. Representation of a project may be
further defined and clarified by project maintainers.
## Enforcement
Instances of abusive, harassing, or otherwise unacceptable behavior may be
reported by contacting the project team at parkrmoore@gmail.com. All
complaints will be reviewed and investigated and will result in a response that
is deemed necessary and appropriate to the circumstances. The project team is
obligated to maintain confidentiality with regard to the reporter of an incident.
Further details of specific enforcement policies may be posted separately.
Project maintainers who do not follow or enforce the Code of Conduct in good
faith may face temporary or permanent repercussions as determined by other
members of the project's leadership.
## Attribution
This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4,
available at [http://contributor-covenant.org/version/1/4][version]
[homepage]: http://contributor-covenant.org
[version]: http://contributor-covenant.org/version/1/4/

11
Gemfile
View File

@ -1,6 +1,7 @@
source "https://rubygems.org"
# frozen_string_literal: true
gem "jekyll"
gem "jekyll-gist"
gem "jekyll-paginate"
gem "jekyll-seo-tag"
source "https://rubygems.org"
gemspec
gem "jekyll", ENV["JEKYLL_VERSION"] if ENV["JEKYLL_VERSION"]
gem "kramdown-parser-gfm" if ENV["JEKYLL_VERSION"] == "~> 3.9"

View File

@ -1,7 +1,15 @@
PATH
remote: .
specs:
minima (3.0.0.dev)
jekyll (>= 3.5, < 5.0)
jekyll-feed (~> 0.9)
jekyll-seo-tag (~> 2.1)
GEM
remote: https://rubygems.org/
specs:
addressable (2.8.4)
addressable (2.8.5)
public_suffix (>= 2.0.2, < 6.0)
colorator (1.1.0)
concurrent-ruby (1.2.2)
@ -9,13 +17,9 @@ GEM
eventmachine (>= 0.12.9)
http_parser.rb (~> 0)
eventmachine (1.2.7)
faraday (2.7.7)
faraday-net_http (>= 2.0, < 3.1)
ruby2_keywords (>= 0.0.4)
faraday-net_http (3.0.2)
ffi (1.15.5)
ffi (1.16.3)
forwardable-extended (2.6.0)
google-protobuf (3.23.3-x86_64-darwin)
google-protobuf (3.25.0-x86_64-darwin)
http_parser.rb (0.8.0)
i18n (1.14.1)
concurrent-ruby (~> 1.0)
@ -35,9 +39,8 @@ GEM
safe_yaml (~> 1.0)
terminal-table (>= 1.8, < 4.0)
webrick (~> 1.7)
jekyll-gist (1.5.0)
octokit (~> 4.2)
jekyll-paginate (1.1.0)
jekyll-feed (0.17.0)
jekyll (>= 3.7, < 5.0)
jekyll-sass-converter (3.0.0)
sass-embedded (~> 1.54)
jekyll-seo-tag (2.8.0)
@ -53,37 +56,28 @@ GEM
rb-fsevent (~> 0.10, >= 0.10.3)
rb-inotify (~> 0.9, >= 0.9.10)
mercenary (0.4.0)
octokit (4.25.1)
faraday (>= 1, < 3)
sawyer (~> 0.9)
pathutil (0.16.2)
forwardable-extended (~> 2.6)
public_suffix (5.0.1)
public_suffix (5.0.3)
rb-fsevent (0.11.2)
rb-inotify (0.10.1)
ffi (~> 1.0)
rexml (3.2.5)
rouge (4.1.2)
ruby2_keywords (0.0.5)
rexml (3.2.6)
rouge (4.2.0)
safe_yaml (1.0.5)
sass-embedded (1.63.4-x86_64-darwin)
sass-embedded (1.69.5-x86_64-darwin)
google-protobuf (~> 3.23)
sawyer (0.9.2)
addressable (>= 2.3.5)
faraday (>= 0.17.3, < 3)
terminal-table (3.0.2)
unicode-display_width (>= 1.1.1, < 3)
unicode-display_width (2.4.2)
unicode-display_width (2.5.0)
webrick (1.8.1)
PLATFORMS
x86_64-darwin-22
DEPENDENCIES
jekyll
jekyll-gist
jekyll-paginate
jekyll-seo-tag
bundler
minima!
BUNDLED WITH
2.4.14
2.4.22

262
History.markdown Normal file
View File

@ -0,0 +1,262 @@
## HEAD
### Documentation
* Forward port v2.5.1 release (#399)
* Docs: remove Google+ (#373)
* Update README section on adding favicons to site (#438)
* Fix custom-styles.scss name in README (#610)
* Improve the msg to enable disqus in README (#627)
* Make docs consistent with code (#657)
* Highlight that the base branch is v3 (#719)
### Minor Enhancements
* Add Keybase to social links (#400)
* Solarized skins (#404)
* Add a placeholder of favicons (#433)
* fix: make page.list_title optional (#303)
* Add stackoverflow to social media list (#443)
* Add social support for dev.to (#410)
* Add GitLab to social (#352)
* Support mutiple authors on post layout (#348)
* Re-implement site footer markup and styles (#448)
* Support pagination through posts in home layout (#450)
* Show the last modified date of posts (#432)
* Set margins of hr to improve readability (#461)
* Export a variable to let users to custom the font family of code (#462)
* Set margin-bottom of pagination (#458)
* Adjust margins of headings to make sections clear (#467)
* Rename favicons.html to custom-head.html (#468)
* Remove RSS icon from the social media list (#470)
* Improve the readablility of blockquotes (#481)
* Extract more color rules into skins (#452)
* Introduce &#34;Dark Minima&#34; skin (#335)
* Reduce spacing in the three largest headers (#538)
* Add `auto` skin which honors the `prefers-color-scheme` media query (#634)
* Add google scholar. (#673)
* Add `x` social icon (#756)
### Major Enhancements
* Allow skins to be defined and customized easily (#336)
* Drop support for scalar &#39;author&#39; configuration (#384)
* Place skins in `minima/skins` to clarify purpose (#479)
* Add adaptive skin: `solarized` (#594)
* Generate social iconsheet during build (#686)
* Rename `default` layout to `base` (#690)
### Bug Fixes
* Add missing rel=me attributes to social links (#386)
* Set the border radius of highlight (#426)
* Removed unnecessary whitespace-controls (#390)
* fix: overflow auto for tables (#296)
* Add `overflow-wrap: break-word` to body tag (#321)
* Use &#34;rem&#34; unit in relative-font-size mixin (#436)
* Assign static value to variable outside forloop (#437)
* Add font-size styles for elements h5 and h6 (#441)
* Stop prefixing CSS calc with `-webkit-` (#445)
* Improve readability of post titles with diacritics (#449)
* Fix a bug of incorrect parsing of page.modified_date (#455)
* Specify the font size of the root element (#485)
* Fix script used for Google Analytics (#596)
* Open social links in new tabs (#625)
* change base-font-family sequence (#654)
* Fix responsiveness of social SVG sprites (#677)
* Improve &#34;Subscribe&#34; link in footer (#698)
* Fix deprecation warnings from Dart Sass (#700)
* Fix reference to base layout in `404.html` (#713)
### Development Fixes
* Ignore .jekyll-cache (#439)
* Clean up and optimize .gitignore (#475)
* [chore] Normalize Travis CI builds (#480)
* chore(deps): bump Ruby version (#510)
* Conditionally load GFM-parser gem in CI builds (#535)
* Improve CI workflow configuration (#609)
* Migrate from TravisCI to GitHub Actions (#633)
* Build and deploy demo site via GH Action workflow (#636)
* Improve readability of config file (#703)
* Trigger demo-site build manually (#714)
## 2.5.1
### Minor Enhancements
* Allow use and testing with Jekyll 4.x (#398)
### Bug Fixes
* Footer overlapping issue (Support Microsoft Explorer 11) (#248)
* Update multiline config comment. (#346)
### Development Fixes
* remove deprecated `sudo: false` in .travis.yml (#347)
## 2.5.0
### Bug Fixes
* Add `jekyll-feed` plugin in config (#228)
### Minor Enhancements
* Stick footer for short posts (#223)
* Consolidate trigger SVG paths (#148)
## 2.4.1
### Bug Fixes
* Reintroduce removed social includes for backwards compatibility (#217)
## 2.4.0
### Minor Enhancements
* Add better system fonts (#205)
* Remove whitespace due to Liquid tags in generated HTML (#202)
* Adding Mastodon to the social networks (#198)
### Bug Fixes
* social icons should resolve baseurl properly (#201)
* fix: styling main element in IE 11 (#199)
### Documentation
* Improve thw wording in index.md (#175)
* Update config description comment (#203)
## 2.3.0
* Add option to show excerpts on the homepage (#90)
* Handle RSS feed with jekyll-feed (#183)
* Test build with Ruby 2.4 on CI (#184)
* Document how to customize navigation links (#192)
## 2.2.1
* Revert social_sites hash for retrocompatibility (#190)
## 2.2.0
### Minor Enhancements
* handling content outside of posts (#88)
* Add default table styles (#144)
* Add `jekyll-seo-tag` dependency (#139)
* Add Microformats markup (#160)
* Add more social links (#141)
### Documentation
* Docs: clarification about page title (#142)
## 2.1.1 / 2017-04-13
### Minor Enhancements
* Close #55: Improve mobile user experience (#62)
* Remove incomplete status from spec summary (#63)
* Use date_format if set in configuration (#70)
* Corrected misspelled word (#72)
* Scale headings relative to base-font-size (#78)
* Remove 2.0 post-install message (#82)
* Fixes #115 - Only include the nav tag if there are pages to be displayed in the menu (#116)
* Fixes #80, #106. Make the hamburger work with pure CSS. (#111)
* add `header_pages` config to link only specific files in header (#52)
* More easily customizable CSS (#117)
* Use relative size for fonts and line-height (#103)
* Add 404 page from jekyll `master` (#121)
### Development Fixes
* Remove duplicate .sass-cache (#71)
* Demo minima on GitHub Pages (#76)
* Remove the Rakefile (#118)
### Documentation
* Update README with theme content description (#91)
* Update default local URL (#120)
## 2.1.0 / 2016-11-15
### Minor Enhancements
* Update gemspec to require at least Jekyll 3.3 (#59)
* Use `absolute_url` filter for disqus (#66)
* replace `example/index.html` with `example/index.md` (#58)
### Development Fixes
* Example should require Jekyll 3.3 (#61)
## 2.0.0 / 2016-10-06
### Minor Enhancements
* priority to site.url when site.github.url is available (#46)
* Move contents of the index.html page to the 'home' layout (#48)
* Use new `absolute_url` and `relative_url` filters in minima (#57)
### Development Fixes
* Use standardized tab size of 2 spaces (#44)
### Major Enhancements
* move `css/` directory from jekyll into `assets/` (#43)
### Bug Fixes
* Fix html proofer errors (#49)
* Update gem regex to include new `assets` directory (#54)
## 1.2.0 / 2016-09-12
### Minor Enhancements
* Look to site.url when available (#35)
### Documentation
* Move instruction for CSS in install section (#37)
## 1.1.0 / 2016-09-07
### Major Enhancements
* Add support to Disqus (#21)
* Google analytics support (#26)
* Look for `site.github.url` if it exists (#25)
### Minor Enhancements
* Fixed Flash Of Unstyled SVG (#12)
* Added "author" in footer instead of double title (#22)
### Documentation
* Document how to link to the theme styles (#18)
* Update Example to resemble Default site (#24)
### Development Enhancements
* Use upstream gemspec file matcher (#9)
* Fix gemspec regex (#31)
* Add Travis and a basic smoke test (#33)
## 1.0.1 / 2016-07-28
* include `_layouts`, `_includes`, and `_sass` dir in gem (#6)
## 1.0.0 / 2016-07-27
* default layout: html `lang` attribute should allow user customization (#3)
* Use `normalize_whitespace` filter for meta description (#4)
* Fix repo's URL in contributing (#5)

View File

@ -1,9 +0,0 @@
# Released under MIT License
Copyright (c) 2013 Mark Otto.
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

21
LICENSE.txt Normal file
View File

@ -0,0 +1,21 @@
The MIT License (MIT)
Copyright (c) 2016-present Parker Moore and the minima contributors
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.

394
README.md
View File

@ -1,92 +1,374 @@
# Poole
<div align="center">
<p><em><strong>Disclaimer:</strong> The information here may vary depending on the version you're using.<br/>
Please refer to the <code>README.md</code> bundled within the theme-gem for information specific to your version or by pointing
your browser to the Git tag corresponding to your version. e.g. https://github.com/jekyll/minima/blob/v2.5.0/README.md.<br/>
Running <code>bundle show minima</code> will provide you with the local path to your current theme version.</em></p>
<img src="/readme_banner.svg"/>
<p>It's Jekyll's default (and first) theme. It's what you get when you run <code>jekyll new</code>.</p>
<p><a href="https://jekyll.github.io/minima/">Theme preview</a></p>
<p><img src="/screenshot.png"/></p>
</div>
*The Strange Case of Dr. Jekyll and Mr. Hyde* tells the story of a lawyer investigating the connection of two persons, Dr. Henry Jekyll and Mr. Edward Hyde. Chief among the novel's supporting cast is a man by the name of Mr. Poole, Dr. Jekyll's loyal butler.
## Installation
-----
Add this line to your Jekyll site's Gemfile:
Poole is the butler for [Jekyll](http://jekyllrb.com), the static site generator. It's designed and developed by [@mdo](https://twitter.com/mdo) to provide a clear and concise foundational setup for any Jekyll site. It does so by furnishing a full vanilla Jekyll install with example templates, pages, posts, and styles.
```ruby
gem "minima"
```
![Poole](https://f.cloud.github.com/assets/98681/1834359/71ae4048-73db-11e3-9a3c-df38eb170537.png)
And then execute:
See Poole in action with [the demo site](https://demo.getpoole.com).
There are currently two official themes built on Poole:
* [Hyde](https://hyde.getpoole.com)
* [Lanyon](https://lanyon.getpoole.com)
Individual theme feedback and bug reports should be submitted to the theme's individual repository.
$ bundle
## Contents
## Contents At-A-Glance
- [Usage](#usage)
- [Development](#development)
- [Author](#author)
- [License](#license)
Minima has been scaffolded by the `jekyll new-theme` command and therefore has all the necessary files and directories to have a new Jekyll site up and running with zero-configuration.
### Layouts
Refers to files within the `_layouts` directory, that define the markup for your theme.
- `base.html` &mdash; The base layout that lays the foundation for subsequent layouts. The derived layouts inject their
contents into this file at the line that says ` {{ content }} ` and are linked to this file via
[FrontMatter](https://jekyllrb.com/docs/frontmatter/) declaration `layout: base`.
- `home.html` &mdash; The layout for your landing-page / home-page / index-page. [[More Info.](#home-layout)]
- `page.html` &mdash; The layout for your documents that contain FrontMatter, but are not posts.
- `post.html` &mdash; The layout for your posts.
#### Base Layout
From Minima v3 onwards, the base layout is named **`base.html`** instead of `default.html` to avoid confusing new users into
assuming that name holds special status.
Users migrating from older versions with customized `_layouts/default.html` are advised to rename their copy to
`_layouts/base.html`. Migrating users with additional customized layouts may either update front matter references to former
`default.html` layout or create a new `default.html` layout referencing the current `base.html`, whichever route being the
easiest:
```
---
# new `_layouts/default.html` for backwards-compatibility when multiple
# layouts have been customized.
layout: base
---
{{ content }}
```
#### Home Layout
`home.html` is a flexible HTML layout for the site's landing-page / home-page / index-page. <br/>
##### *Main Heading and Content-injection*
From Minima v2.2 onwards, the *home* layout will inject all content from your `index.md` / `index.html` **before** the **`Posts`** heading. This will allow you to include non-posts related content to be published on the landing page under a dedicated heading. *We recommended that you title this section with a Heading2 (`##`)*.
Usually the `site.title` itself would suffice as the implicit 'main-title' for a landing-page. But, if your landing-page would like a heading to be explicitly displayed, then simply define a `title` variable in the document's front matter and it will be rendered with an `<h1>` tag.
##### *Post Listing*
This section is optional from Minima v2.2 onwards.<br/>
It will be automatically included only when your site contains one or more valid posts or drafts (if the site is configured to `show_drafts`).
The title for this section is `Posts` by default and rendered with an `<h2>` tag. You can customize this heading by defining a `list_title` variable in the document's front matter.
### Includes
Refers to snippets of code within the `_includes` directory that can be inserted in multiple layouts (and another include-file as well) within the same theme-gem.
- `disqus_comments.html` &mdash; Code to markup disqus comment box.
- `footer.html` &mdash; Defines the site's footer section.
- `google-analytics.html` &mdash; Inserts Google Analytics module (active only in production environment).
- `head.html` &mdash; Code-block that defines the `<head></head>` in *default* layout.
- `custom-head.html` &mdash; Placeholder to allow users to add more metadata to `<head />`.
- `header.html` &mdash; Defines the site's main header section. By default, pages with a defined `title` attribute will have links displayed here.
- `social.html` &mdash; Renders social-media icons based on the `minima:social_links` data in the config file.
- `social-item.html` &mdash; Template to render individual list-item containing graphic link to configured social-profile.
- `social-links/*.svg` &mdash; SVG markup components of supported social-icons.
### Sass
Refers to `.scss` files within the `_sass` directory that define the theme's styles.
- `minima/skins/classic.scss` &mdash; The "classic" skin of the theme. *Used by default.*
- `minima/initialize.scss` &mdash; A component that defines the theme's *skin-agnostic* variable defaults and sass partials.
It imports the following components (in the following order):
- `minima/custom-variables.scss` &mdash; A hook that allows overriding variable defaults and mixins. (*Note: Cannot override styles*)
- `minima/_base.scss` &mdash; Sass partial for resets and defines base styles for various HTML elements.
- `minima/_layout.scss` &mdash; Sass partial that defines the visual style for various layouts.
- `minima/custom-styles.scss` &mdash; A hook that allows overriding styles defined above. (*Note: Cannot override variables*)
Refer the [skins](#skins) section for more details.
### Assets
Refers to various asset files within the `assets` directory.
- `assets/css/style.scss` &mdash; Imports sass files from within the `_sass` directory and gets processed into the theme's
stylesheet: `assets/css/styles.css`.
- `assets/minima-social-icons.html` &mdash; Imports enabled social-media icon graphic and gets processed into a composite SVG file.
Refer [section on social networks](#social-networks) for its usage.
### Plugins
Minima comes with [`jekyll-seo-tag`](https://github.com/jekyll/jekyll-seo-tag) plugin preinstalled to make sure your website gets the most useful meta tags. See [usage](https://github.com/jekyll/jekyll-seo-tag#usage) to know how to set it up.
## Usage
### 1. Install dependencies
Have the following line in your config file:
Poole is built on Jekyll and uses its built-in SCSS compiler to generate our CSS. Before getting started, you'll need to install the Jekyll gem and related dependencies:
```bash
$ gem install jekyll jekyll-gist jekyll-sitemap jekyll-seo-tag
```yaml
theme: minima
```
**Windows users:** Windows users have a bit more work to do, but luckily [@juthilo](https://github.com/juthilo) has your back with his [Run Jekyll on Windows](https://github.com/juthilo/run-jekyll-on-windows) guide.
**Need syntax highlighting?** Poole includes support for Pygments or Rouge, so install your gem of choice to make use of the built-in styling. Read more about this in the [Jekyll docs](https://jekyllrb.com/docs/liquid/tags/#code-snippet-highlighting).
### Customizing templates
### 2a. Quick start
To override the default structure and style of minima, simply create the concerned directory at the root of your site, copy the file you wish to customize to that directory, and then edit the file.
e.g., to override the [`_includes/head.html `](_includes/head.html) file to specify a custom style path, create an `_includes` directory, copy `_includes/head.html` from minima gem folder to `<yoursite>/_includes` and start editing that file.
To help anyone with any level of familiarity with Jekyll quickly get started, Poole includes everything you need for a basic Jekyll site. To that end, just download Poole and start up Jekyll.
The site's default CSS has now moved to a new place within the gem itself, [`assets/css/style.scss`](assets/css/style.scss).
### 2b. Roll your own Jekyll site
In Minima 3.0, if you only need to customize the colors of the theme, refer to the subsequent section on skins. To have your
*CSS overrides* in sync with upstream changes released in future versions, you can collect all your overrides for the Sass
variables and mixins inside a sass file placed at `_sass/minima/custom-variables.scss` and all other overrides inside a sass file
placed at path `_sass/minima/custom-styles.scss`.
Folks wishing to use Jekyll's templates and styles can do so with a little bit of manual labor. Download Poole and then copy what you need (likely `_layouts/`, `*.html` files, `atom.xml` for RSS, and `assets/` for CSS, JS, etc.).
You need not maintain entire partial(s) at the site's source just to override a few styles. However, your stylesheet's primary
source (`assets/css/style.scss`) should contain the following:
### 3. Running locally
- Front matter dashes at the very beginning (can be empty).
- Directive to import a skin.
- Directive to import the base styles (automatically loads overrides when available).
To see your Jekyll site with Poole applied, start a Jekyll server. In Terminal, from `/poole` (or whatever your Jekyll site's root directory is named):
Therefore, your `assets/css/style.scss` should contain the following at minimum:
```bash
$ jekyll serve
```sass
---
---
@import
"minima/skins/{{ site.minima.skin | default: 'classic' }}",
"minima/initialize";
```
Open <http://localhost:4000> in your browser, and voilà.
#### Skins
### 4. Serving it up
Minima 3.0 supports defining and switching between multiple color-palettes (or *skins*).
If you host your code on GitHub, you can use [GitHub Pages](https://pages.github.com) to host your project.
```
.
├── minima.scss
└── minima
└── _syntax-highlighting.scss
```
1. Fork this repo and switch to the `gh-pages` branch.
1. If you're [using a custom domain name](https://help.github.com/articles/setting-up-a-custom-domain-with-github-pages), modify the `CNAME` file to point to your new domain.
2. If you're not using a custom domain name, **modify the `baseurl` in `_config.yml`** to point to your GitHub Pages URL. Example: for a repo at `github.com/username/poole`, use `http://username.github.io/poole/`. **Be sure to include the trailing slash.**
3. Done! Head to your GitHub Pages URL or custom domain.
No matter your production or hosting setup, be sure to verify the `baseurl` option file and `CNAME` settings. Not applying this correctly can mean broken styles on your site.
A skin is a Sass file placed in the directory `_sass/minima/skins` and it defines the variable defaults related to the "color"
aspect of the theme. It also embeds the Sass rules related to syntax-highlighting since that is primarily related to color and
has to be adjusted in harmony with the current skin.
The default color palette for Minima is defined within `_sass/minima/skins/classic.scss`. To switch to another available skin,
simply declare it in the site's config file. For example, to activate `_sass/minima/skins/dark.scss` as the skin, the setting
would be:
```yaml
minima:
skin: dark
```
As part of the migration to support skins, some existing Sass variables have been retired and some **have been redefined** as
summarized in the following table:
Minima 2.0 | Minima 3.0
--------------- | ----------
`$brand-color` | `$link-base-color`
`$grey-*` | `$brand-*`
`$orange-color` | *has been removed*
##### Available skins
Skin setting | Description
--------------- | -----------
classic | Default, light color scheme.
dark | Dark variant of the classic skin.
auto | *Adaptive skin* based on the default classic and dark skins.
solarized | *Adaptive skin* for [solarized](https://github.com/solarized) color scheme skins.
solarized-light | Light variant of solarized color scheme.
solarized-dark | Dark variant of solarized color scheme.
*:bulb: Adaptive skins switch between the "light" and "dark" variants based on the user's operating system setting or browser setting
(via CSS Media Query [prefers-color-scheme](https://developer.mozilla.org/en-US/docs/Web/CSS/@media/prefers-color-scheme)).*
### Customize navigation links
This allows you to set which pages you want to appear in the navigation area and configure order of the links.
For instance, to only link to the `about` and the `portfolio` page, add the following to your `_config.yml`:
```yaml
header_pages:
- about.md
- portfolio.md
```
### Change default date format
You can change the default date format by specifying `site.minima.date_format`
in `_config.yml`.
```
# Minima date format
# refer to http://shopify.github.io/liquid/filters/date/ if you want to customize this
minima:
date_format: "%b %-d, %Y"
```
### Extending the `<head />`
You can *add* custom metadata to the `<head />` of your layouts by creating a file `_includes/custom-head.html` in your source directory. For example, to add favicons:
1. Head over to [https://realfavicongenerator.net/](https://realfavicongenerator.net/) to add your own favicons.
2. [Customize](#customization) default `_includes/custom-head.html` in your source directory and insert the given code snippet.
### Enabling comments (via Disqus)
Optionally, if you have a Disqus account, you can tell Jekyll to use it to show a comments section below each post.
:warning: `url`, e.g. `https://example.com`, must be set in you config file for Disqus to work.
To enable it, after setting the url field, you also need to add the following lines to your Jekyll site:
```yaml
disqus:
shortname: my_disqus_shortname
```
You can find out more about Disqus' shortnames [here](https://help.disqus.com/installation/whats-a-shortname).
Comments are enabled by default and will only appear in production, i.e., `JEKYLL_ENV=production`
If you don't want to display comments for a particular post you can disable them by adding `comments: false` to that post's YAML Front Matter.
### Author Metadata
From `Minima-3.0` onwards, `site.author` is expected to be a mapping of attributes instead of a simple scalar value:
```yaml
author:
name: John Smith
email: "john.smith@foobar.com"
```
To migrate existing metadata, update your config file and any reference to the object in your layouts and includes as summarized below:
Minima 2.x | Minima 3.0
------------- | -------------------
`site.author` | `site.author.name`
`site.email` | `site.author.email`
### Social networks
You can add links to the accounts you have on other sites, with respective icon as an SVG graphic, via the config file.
From `Minima-3.0` onwards, the social media data is sourced from config key `minima.social_links`. It is a list of key-value pairs, each entry
corresponding to a link rendered in the footer. For example, to render links to Jekyll GitHub repository and twitter account, one should have:
```yaml
minima:
social_links:
- { platform: github, user_url: "https://github.com/jekyll/jekyll" }
- { platform: twitter, user_url: "https://twitter.com/jekyllrb" }
```
Apart from the necessary keys illustrated above, `title` may also be defined to render a custom link-title. By default, the title is the same
as `platform`. The `platform` key corresponds to the SVG id of the sprite in the composite file at URL `/assets/minima-social-icons.svg`.
The theme ships with an icon for `rss` and icons of select social-media platforms:
- `devto`
- `dribbble`
- `facebook`
- `flickr`
- `github`
- `google_scholar`
- `instagram`
- `keybase`
- `linkedin`
- `microdotblog`
- `pinterest`
- `stackoverflow`
- `telegram`
- `twitter`
- `youtube`
To render a link to a platform not listed above, one should first create a file at path `_includes/social-icons/<PLATFORM>.svg` comprised of
graphic markup **without the top-level `<svg></svg>`**. The icon is expected to be centered within a viewbox of `"0 0 16 16"`. Then, make an
entry under key `minima.social_links`.
For example, to render a link to an account of user `john.doe` at platform `deviantart.com`, the steps to follow would be:
- Get DeviantArt logo in SVG format.
- Using a text-editor, open the downloaded file to inspect if the `viewBox` attribute is defined on the `<svg>` element and is set
as `"0 0 16 16" (or similar "square" dimension)`.
- If the `viewBox` attribute is non-square or undefined, the graphic *may optionally need* to be edited in a vector graphic editor such as
*Inkscape* or *Adobe Illustrator* for properly aligned render on page.
- Edit the SVG file in text-editor to delete everything **except** what is contained between `<svg></svg>` and save it into the Jekyll
project at path `_includes/social-icons/deviantart.svg`.
- Finally, edit the Jekyll config file to enable loading of new icon graphic with:
```yaml
minima:
social_links:
- platform: deviantart # same as SVG filename.
user_url: "https://www.deviantart.com/john.doe" # URL of profile page.
title: My profile at DeviantArt.com # Optional. Text displayed on hovering over link.
```
**Notes:**
- The list of social-links is declarative. List-items are rendered in the order declared in the downstream configuration file and not merged
with entries from upstream config file(s) such as theme-config-file or prior local config files.
- The `user_url` is rendered as given without handling any special characters within.
### Enabling Google Analytics
To enable Google Analytics, add the following lines to your Jekyll site:
```yaml
google_analytics: UA-NNNNNNNN-N
```
Google Analytics will only appear in production, i.e., `JEKYLL_ENV=production`
### Enabling Excerpts on the Home Page
To display post-excerpts on the Home Page, simply add the following to your `_config.yml`:
```yaml
show_excerpts: true
```
## Contributing
Bug reports and pull requests are welcome on GitHub at https://github.com/jekyll/minima. This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the [Contributor Covenant](http://contributor-covenant.org) code of conduct.
## Development
Poole has two branches, but only one is used for active development.
- `master` for development. **All pull requests should be to submitted against `master`.**
- `gh-pages` for our hosted site, which includes our analytics tracking code. **Please avoid using this branch.**
CSS is handled via Jeykll's built-in Sass compiler. Source Sass files are located in `_sass/`, included into `styles.scss`, and compile to `styles.css`.
## Author
**Mark Otto**
- <https://github.com/mdo>
- <https://twitter.com/mdo>
To set up your environment to develop this theme, run `script/bootstrap`.
To test your theme, run `script/server` (or `bundle exec jekyll serve`) and open your browser at `http://localhost:4000`. This starts a Jekyll server using your theme and the contents. As you make modifications, your site will regenerate and you should see the changes in the browser after a refresh.
## License
Open sourced under the [MIT license](LICENSE.md).
<3
The theme is available as open source under the terms of the [MIT License](http://opensource.org/licenses/MIT).

View File

@ -1,41 +1,58 @@
# Setup
title: ""
tagline: ""
url: https://vllm.ai
paginate: 1
baseurl: ""
permalink: pretty
title: vLLM Blog
author:
name: © 2023. vLLM Team. All rights reserved.
email: https://github.com/vllm-project/vllm
google_analytics: G-9C5R3JR3QS
# The `>` after `description:` means to ignore line-breaks until next key.
# If you want to omit the line-break after the end of text, use `>-` instead.
# description: >
# Write an awesome description for your new site here. You can edit this line
# in _config.yml. It will appear in your document head meta (for Google search
# results) and in your feed.xml site description.
# Build settings
theme: minima
# Gems
plugins:
- jekyll-gist
- jekyll-paginate
- jekyll-feed
- jekyll-seo-tag
# Optimize Jekyll
exclude:
- .editorconfig
- .git
- .jekyll-cache
- Gemfile
- Gemfile.lock
- LICENSE.md
- README.md
# Theme-specific settings
sass:
sass_dir: _sass
style: :compressed
minima:
# Minima date format.
# Refer to https://shopify.github.io/liquid/filters/date/ if you want to customize this.
#
# date_format: "%b %-d, %Y"
# Options
# Generate social links in footer.
#
# social_links:
# - { platform: devto, user_url: "https://dev.to/jekyll" }
# - { platform: dribbble, user_url: "https://dribbble.com/jekyll" }
# - { platform: facebook, user_url: "https://www.facebook.com/jekyll" }
# - { platform: flickr, user_url: "https://www.flickr.com/photos/jekyll" }
# - { platform: github, user_url: "https://github.com/jekyll/minima" }
# - { platform: google_scholar, user_url: "https://scholar.google.com/citations?user=qc6CJjYAAAAJ" }
# - { platform: instagram, user_url: "https://www.instagram.com/jekyll" }
# - { platform: keybase, user_url: "https://keybase.io/jekyll" }
# - { platform: linkedin, user_url: "https://www.linkedin.com/in/jekyll" }
# - { platform: microdotblog, user_url: "https://micro.blog/jekyll" }
# - { platform: pinterest, user_url: "https://www.pinterest.com/jekyll" }
# - { platform: stackoverflow, user_url: "https://stackoverflow.com/users/1234567/jekyll" }
# - { platform: telegram, user_url: "https://t.me/jekyll" }
# - { platform: twitter, user_url: "https://twitter.com/jekyllrb" }
# - { platform: x, user_url: "https://x.com/jekyllrb" }
# - { platform: youtube, user_url: "https://www.youtube.com/jekyll" }
# Replace this value and uncomment to enable Google Analytics tracking
# ga_analytics: UA-000000-0
# If you want to link only specific pages in your header, uncomment this and add the path to the pages in
# order as they should show up.
#
# header_pages:
# - about.md
# Specify the author for blog posts
author:
name: vLLM Team
url: https://github.com/vllm-project/vllm
email: vllm.proj@gmail.com
# Custom vars
version: 3.0.0
# Set to `true` to show excerpts on the homepage.
#
# show_excerpts: false

View File

@ -0,0 +1,6 @@
{% comment %}
Placeholder to allow defining custom head, in principle, you can add anything here, e.g. favicons:
1. Head over to https://realfavicongenerator.net/ to add your own favicons.
2. Customize default _includes/custom-head.html in your source directory and insert the given code snippet.
{% endcomment %}

View File

@ -0,0 +1,20 @@
{%- if page.comments != false and jekyll.environment == "production" -%}
<div id="disqus_thread"></div>
<script>
var disqus_config = function () {
this.page.url = '{{ page.url | absolute_url }}';
this.page.identifier = '{{ page.url | absolute_url }}';
};
(function() {
var d = document, s = d.createElement('script');
s.src = 'https://{{ site.disqus.shortname }}.disqus.com/embed.js';
s.setAttribute('data-timestamp', +new Date());
(d.head || d.body).appendChild(s);
})();
</script>
<noscript>Please enable JavaScript to view the <a href="https://disqus.com/?ref_noscript" rel="nofollow">comments powered by Disqus.</a></noscript>
{%- endif -%}

View File

@ -1,5 +0,0 @@
<div id="html" markdown="0">
<p align="center" markdown="0">
<img alt="vLLM" src="assets/figures/perf_a100_n1_light.png" width=55%>
</p>
</div>

37
_includes/footer.html Normal file
View File

@ -0,0 +1,37 @@
<footer class="site-footer h-card">
<data class="u-url" href="{{ "/" | relative_url }}"></data>
<div class="wrapper">
<div class="footer-col-wrapper">
<div class="footer-col">
<!-- <p class="feed-subscribe">
<a href="{{ site.feed.path | default: 'feed.xml' | absolute_url }}">
<svg class="svg-icon orange">
<use xlink:href="{{ 'assets/minima-social-icons.svg#rss' | relative_url }}"></use>
</svg><span>Subscribe</span>
</a>
</p> -->
{%- if site.author %}
<ul class="contact-list">
{% if site.author.name -%}
<li class="p-name">{{ site.author.name | escape }}</li>
{% endif -%}
{% if site.author.email -%}
<li><a class="u-email" href="mailto:{{ site.author.email }}">{{ site.author.email }}</a></li>
{%- endif %}
</ul>
{%- endif %}
</div>
<div class="footer-col">
<p>{{ site.description | escape }}</p>
</div>
</div>
<div class="social-links">
{%- include social.html -%}
</div>
</div>
</footer>

View File

@ -0,0 +1,9 @@
<script async src="https://www.googletagmanager.com/gtag/js?id={{ site.google_analytics }}"></script>
<script>
window['ga-disable-{{ site.google_analytics }}'] = window.doNotTrack === "1" || navigator.doNotTrack === "1" || navigator.doNotTrack === "yes" || navigator.msDoNotTrack === "1";
window.dataLayer = window.dataLayer || [];
function gtag(){window.dataLayer.push(arguments);}
gtag('js', new Date());
gtag('config', '{{ site.google_analytics }}');
</script>

View File

@ -1,17 +1,14 @@
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="twitter:image" content="https://vllm.ai/assets/logos/vllm-logo-text-light.png">
<meta name="twitter:image:alt" content={vLLM}>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
{%- seo -%}
<link rel="stylesheet" href="{{ "/assets/css/style.css" | relative_url }}">
{%- feed_meta -%}
{%- if jekyll.environment == 'production' and site.google_analytics -%}
{%- include google-analytics.html -%}
{%- endif -%}
<title>
{{ page.title }}
</title>
<link rel="stylesheet" href="{{ 'styles.css' | relative_url }}">
<link rel="apple-touch-icon-precomposed" sizes="144x144" href="{{ '/assets/apple-touch-icon-precomposed.png' | relative_url }}">
<link rel="shortcut icon" href="{{ '/assets/favicon.ico' | relative_url }}">
<link rel="alternate" type="application/atom+xml" title="{{ site.title }}" href="{{ 'atom.xml' | relative_url }}">
{% seo title=false %}
{%- include custom-head.html -%}
</head>

31
_includes/header.html Normal file
View File

@ -0,0 +1,31 @@
<header class="site-header">
<div class="wrapper">
{%- assign default_paths = site.pages | map: "path" -%}
{%- assign page_paths = site.header_pages | default: default_paths -%}
{%- assign titles_size = site.pages | map: 'title' | join: '' | size -%}
<a class="site-title" rel="author" href="{{ "/" | relative_url }}">{{ site.title | escape }}</a>
{%- if titles_size > 0 -%}
<nav class="site-nav">
<input type="checkbox" id="nav-trigger" class="nav-trigger" />
<label for="nav-trigger">
<span class="menu-icon">
<svg viewBox="0 0 18 15" width="18px" height="15px">
<path d="M18,1.484c0,0.82-0.665,1.484-1.484,1.484H1.484C0.665,2.969,0,2.304,0,1.484l0,0C0,0.665,0.665,0,1.484,0 h15.032C17.335,0,18,0.665,18,1.484L18,1.484z M18,7.516C18,8.335,17.335,9,16.516,9H1.484C0.665,9,0,8.335,0,7.516l0,0 c0-0.82,0.665-1.484,1.484-1.484h15.032C17.335,6.031,18,6.696,18,7.516L18,7.516z M18,13.516C18,14.335,17.335,15,16.516,15H1.484 C0.665,15,0,14.335,0,13.516l0,0c0-0.82,0.665-1.483,1.484-1.483h15.032C17.335,12.031,18,12.695,18,13.516L18,13.516z"/>
</svg>
</span>
</label>
<div class="trigger">
{%- for path in page_paths -%}
{%- assign my_page = site.pages | where: "path", path | first -%}
{%- if my_page.title -%}
<a class="page-link" href="{{ my_page.url | relative_url }}">{{ my_page.title | escape }}</a>
{%- endif -%}
{%- endfor -%}
</div>
</nav>
{%- endif -%}
</div>
</header>

View File

@ -0,0 +1 @@
<path d="M4.548,6.415C4.419,6.318,4.29,6.271,4.161,6.271h-0.58v3.471h0.58c0.129,0,0.258-0.049,0.387-0.145 C4.677,9.5,4.742,9.355,4.742,9.163V6.85C4.741,6.656,4.676,6.511,4.548,6.415z M13.981,0.559H2.016 c-0.804,0-1.457,0.65-1.458,1.455v11.973c0.002,0.805,0.655,1.455,1.458,1.455h11.968c0.805,0,1.457-0.65,1.459-1.455V2.014 C15.438,1.209,14.786,0.559,13.981,0.559z M5.68,9.169c0,0.625-0.386,1.572-1.605,1.569H2.532V5.242h1.573 c1.179,0,1.573,0.945,1.574,1.57V9.169z M9.024,6.225h-1.77V7.5h1.082v0.982H7.255v1.275h1.771v0.982H6.959 c-0.371,0.009-0.679-0.283-0.688-0.654V5.931c-0.008-0.37,0.285-0.679,0.655-0.688h2.099V6.225z M12.47,10.055 c-0.438,1.021-1.226,0.817-1.576,0l-1.28-4.812h1.081l0.988,3.778l0.981-3.778h1.082L12.47,10.055z"/>

View File

@ -0,0 +1 @@
<path d="M8 16c-4.41 0-8-3.59-8-8s3.59-8 8-8 8 3.59 8 8-3.59 8-8 8zm6.747-6.905c-.234-.074-2.115-.635-4.257-.292.894 2.456 1.258 4.456 1.328 4.872 1.533-1.037 2.624-2.68 2.93-4.58zM10.67 14.3c-.102-.6-.5-2.688-1.46-5.18l-.044.014C5.312 10.477 3.93 13.15 3.806 13.4c1.158.905 2.614 1.444 4.194 1.444.947 0 1.85-.194 2.67-.543zm-7.747-1.72c.155-.266 2.03-3.37 5.555-4.51.09-.03.18-.056.27-.08-.173-.39-.36-.778-.555-1.16-3.413 1.02-6.723.977-7.023.97l-.003.208c0 1.755.665 3.358 1.756 4.57zM1.31 6.61c.307.005 3.122.017 6.318-.832-1.132-2.012-2.353-3.705-2.533-3.952-1.912.902-3.34 2.664-3.784 4.785zM6.4 1.368c.188.253 1.43 1.943 2.548 4 2.43-.91 3.46-2.293 3.582-2.468C11.323 1.827 9.736 1.176 8 1.176c-.55 0-1.087.066-1.6.19zm6.89 2.322c-.145.194-1.29 1.662-3.816 2.694.16.325.31.656.453.99.05.117.1.235.147.352 2.274-.286 4.533.172 4.758.22-.015-1.613-.59-3.094-1.543-4.257z"/>

View File

@ -0,0 +1 @@
<path d="M15.117 0H.883C.395 0 0 .395 0 .883v14.234c0 .488.395.883.883.883h7.663V9.804H6.46V7.39h2.086V5.607c0-2.066 1.262-3.19 3.106-3.19.883 0 1.642.064 1.863.094v2.16h-1.28c-1 0-1.195.48-1.195 1.18v1.54h2.39l-.31 2.42h-2.08V16h4.077c.488 0 .883-.395.883-.883V.883C16 .395 15.605 0 15.117 0"/>

View File

@ -0,0 +1 @@
<path d="M0 8c0 2.05 1.662 3.71 3.71 3.71 2.05 0 3.713-1.66 3.713-3.71S5.76 4.29 3.71 4.29C1.663 4.29 0 5.95 0 8zm8.577 0c0 2.05 1.662 3.71 3.712 3.71C14.33 11.71 16 10.05 16 8s-1.662-3.71-3.71-3.71c-2.05 0-3.713 1.66-3.713 3.71z"/>

View File

@ -0,0 +1 @@
<path d="M8 0C3.58 0 0 3.582 0 8c0 3.535 2.292 6.533 5.47 7.59.4.075.547-.172.547-.385 0-.19-.007-.693-.01-1.36-2.226.483-2.695-1.073-2.695-1.073-.364-.924-.89-1.17-.89-1.17-.725-.496.056-.486.056-.486.803.056 1.225.824 1.225.824.714 1.223 1.873.87 2.33.665.072-.517.278-.87.507-1.07-1.777-.2-3.644-.888-3.644-3.953 0-.873.31-1.587.823-2.147-.09-.202-.36-1.015.07-2.117 0 0 .67-.215 2.2.82.64-.178 1.32-.266 2-.27.68.004 1.36.092 2 .27 1.52-1.035 2.19-.82 2.19-.82.43 1.102.16 1.915.08 2.117.51.56.82 1.274.82 2.147 0 3.073-1.87 3.75-3.65 3.947.28.24.54.73.54 1.48 0 1.07-.01 1.93-.01 2.19 0 .21.14.46.55.38C13.71 14.53 16 11.53 16 8c0-4.418-3.582-8-8-8"/>

View File

@ -0,0 +1 @@
<path d="M1.07,6.337L8,15.219L0.405,9.706C0.3,9.63,0.227,9.529,0.186,9.404c-0.041-0.125-0.041-0.25,0-0.372L1.07,6.337z M5.112,6.337h5.775L8,15.219L5.112,6.337z M3.38,0.982l1.732,5.355H1.07l1.732-5.355c0.047-0.134,0.143-0.201,0.289-0.201 S3.333,0.848,3.38,0.982z M14.93,6.337l0.884,2.695c0.041,0.123,0.041,0.247,0,0.372S15.7,9.63,15.595,9.706L8,15.219L14.93,6.337z M14.93,6.337h-4.042l1.733-5.355c0.046-0.134,0.143-0.201,0.288-0.201c0.146,0,0.243,0.067,0.289,0.201L14.93,6.337z"/>

View File

@ -0,0 +1 @@
<circle opacity="0.7" cx="8.036" cy="11.08" r="4.3"/><path opacity="0.75" d="M0.585,6.505l7.42-5.885L8.03,6.582 C5.305,6.632,4.139,8.729,3.913,9.13L0.585,6.505z"/><path d="M15.415,6.509l-7.42-5.886L7.97,6.585c2.725,0.05,3.891,2.147,4.117,2.548L15.415,6.509z"/>

View File

@ -0,0 +1 @@
<path d="M8 0C5.827 0 5.555.01 4.702.048 3.85.088 3.27.222 2.76.42c-.526.204-.973.478-1.417.923-.445.444-.72.89-.923 1.417-.198.51-.333 1.09-.372 1.942C.008 5.555 0 5.827 0 8s.01 2.445.048 3.298c.04.852.174 1.433.372 1.942.204.526.478.973.923 1.417.444.445.89.72 1.417.923.51.198 1.09.333 1.942.372.853.04 1.125.048 3.298.048s2.445-.01 3.298-.048c.852-.04 1.433-.174 1.942-.372.526-.204.973-.478 1.417-.923.445-.444.72-.89.923-1.417.198-.51.333-1.09.372-1.942.04-.853.048-1.125.048-3.298s-.01-2.445-.048-3.298c-.04-.852-.174-1.433-.372-1.942-.204-.526-.478-.973-.923-1.417-.444-.445-.89-.72-1.417-.923-.51-.198-1.09-.333-1.942-.372C10.445.008 10.173 0 8 0zm0 1.44c2.136 0 2.39.01 3.233.048.78.036 1.203.166 1.485.276.374.145.64.318.92.598.28.28.453.546.598.92.11.282.24.705.276 1.485.038.844.047 1.097.047 3.233s-.01 2.39-.05 3.233c-.04.78-.17 1.203-.28 1.485-.15.374-.32.64-.6.92-.28.28-.55.453-.92.598-.28.11-.71.24-1.49.276-.85.038-1.1.047-3.24.047s-2.39-.01-3.24-.05c-.78-.04-1.21-.17-1.49-.28-.38-.15-.64-.32-.92-.6-.28-.28-.46-.55-.6-.92-.11-.28-.24-.71-.28-1.49-.03-.84-.04-1.1-.04-3.23s.01-2.39.04-3.24c.04-.78.17-1.21.28-1.49.14-.38.32-.64.6-.92.28-.28.54-.46.92-.6.28-.11.7-.24 1.48-.28.85-.03 1.1-.04 3.24-.04zm0 2.452c-2.27 0-4.108 1.84-4.108 4.108 0 2.27 1.84 4.108 4.108 4.108 2.27 0 4.108-1.84 4.108-4.108 0-2.27-1.84-4.108-4.108-4.108zm0 6.775c-1.473 0-2.667-1.194-2.667-2.667 0-1.473 1.194-2.667 2.667-2.667 1.473 0 2.667 1.194 2.667 2.667 0 1.473-1.194 2.667-2.667 2.667zm5.23-6.937c0 .53-.43.96-.96.96s-.96-.43-.96-.96.43-.96.96-.96.96.43.96.96z"/>

View File

@ -0,0 +1,4 @@
<path d="M10.34,13.58c-0.298,0-0.54,0.242-0.54,0.54s0.242,0.54,0.54,0.54c0.298,0,0.54-0.242,0.54-0.54S10.638,13.58,10.34,13.58 L10.34,13.58z M6.38,13.58c-0.298,0-0.54,0.242-0.54,0.54s0.242,0.54,0.54,0.54c0.298,0,0.54-0.242,0.54-0.54 S6.678,13.58,6.38,13.58z"/>
<path fill="none" stroke="#000000" stroke-width="0.72" stroke-linecap="round" stroke-miterlimit="10" d="M1.58,13.22 c0.104,0.771,0.344,1.497,0.688,2.16 M5.93,3.86H4.31c-0.149,0-0.27-0.121-0.27-0.27V1.97c0-0.149,0.121-0.27,0.27-0.27h1.62 c0.149,0,0.27,0.121,0.27,0.27v1.08"/>
<path d="M8.18,7.46c-1.489,0-2.7-1.211-2.7-2.7c0-2.471,2.012-4.329,2.098-4.407c0.125-0.113,0.309-0.125,0.447-0.029 s0.191,0.273,0.129,0.429C8,1.142,7.861,1.791,8.002,1.999C8.015,2.018,8.044,2.06,8.18,2.06c1.489,0,2.7,1.211,2.7,2.7 C10.88,6.249,9.669,7.46,8.18,7.46z"/>
<path d="M15.178,11.759c-0.174-2.216-1.372-4.173-3.196-5.341c-0.015-0.009-0.029-0.02-0.044-0.029 c-0.121-0.076-0.245-0.147-0.371-0.217c-0.044-0.024-0.088-0.049-0.133-0.073c-0.029-0.016-0.061-0.029-0.09-0.043 c-0.228,0.551-0.594,1.03-1.056,1.394l1.206,1.207c0.141,0.141,0.141,0.368,0,0.509c-0.07,0.07-0.162,0.105-0.254,0.105 s-0.185-0.035-0.255-0.105l-0.301-0.301l-0.65,0.651C9.963,9.585,9.871,9.62,9.779,9.62c-0.092,0-0.184-0.035-0.254-0.105 c-0.141-0.141-0.141-0.369,0-0.509l0.651-0.651L9.8,7.979L9.334,8.445c-0.07,0.07-0.162,0.105-0.254,0.105S8.896,8.516,8.826,8.445 C8.74,8.36,8.714,8.245,8.73,8.135C8.552,8.164,8.368,8.18,8.18,8.18c-1.452,0-2.692-0.911-3.188-2.19 C2.318,7.245,0.8,10.089,0.8,13.94v1.08l0.648-0.864c0.669-0.893,1.483-1.789,2.256-2.502c-0.19,0.508-0.318,1.016-0.381,1.521 l-0.113,0.905l0.701-0.585c0.021-0.017,2.087-1.716,4.449-1.716c1.159,0,1.792,0.107,2.352,0.202 c0.479,0.081,0.931,0.157,1.609,0.157c1.115,0,1.727-0.57,1.993-1.254c0.071,0.304,0.121,0.614,0.146,0.931 c0.013,0.167,0.021,0.334,0.021,0.504c0,1.015-0.238,1.987-0.709,2.895c-0.092,0.176-0.022,0.394,0.154,0.485 c0.053,0.027,0.109,0.04,0.165,0.04c0.13,0,0.256-0.07,0.32-0.194c0.523-1.01,0.789-2.095,0.789-3.226 C15.2,12.132,15.192,11.944,15.178,11.759z"/>

View File

@ -0,0 +1 @@
<path d="M13.632 13.635h-2.37V9.922c0-.886-.018-2.025-1.234-2.025-1.235 0-1.424.964-1.424 1.96v3.778h-2.37V6H8.51v1.04h.03c.318-.6 1.092-1.233 2.247-1.233 2.4 0 2.845 1.58 2.845 3.637v4.188zM3.558 4.955c-.762 0-1.376-.617-1.376-1.377 0-.758.614-1.375 1.376-1.375.76 0 1.376.617 1.376 1.375 0 .76-.617 1.377-1.376 1.377zm1.188 8.68H2.37V6h2.376v7.635zM14.816 0H1.18C.528 0 0 .516 0 1.153v13.694C0 15.484.528 16 1.18 16h13.635c.652 0 1.185-.516 1.185-1.153V1.153C16 .516 15.467 0 14.815 0z"/>

View File

@ -0,0 +1 @@
<path d="M15.195,5.352c0-3.347-2.193-4.328-2.193-4.328c-1.104-0.508-3.004-0.721-4.977-0.737H7.977 c-1.973,0.016-3.87,0.229-4.976,0.737c0,0-2.193,0.981-2.193,4.328c0,0.766-0.015,1.683,0.009,2.654c0.08,3.272,0.6,6.499,3.626,7.3 c1.396,0.369,2.594,0.446,3.559,0.394c1.75-0.097,2.732-0.624,2.732-0.624l-0.058-1.27c0,0-1.25,0.395-2.655,0.346 c-1.391-0.047-2.86-0.149-3.085-1.857c-0.021-0.15-0.031-0.312-0.031-0.479c0,0,1.365,0.334,3.096,0.413 c1.059,0.049,2.051-0.062,3.059-0.182c1.934-0.231,3.616-1.422,3.828-2.51C15.224,7.821,15.195,5.352,15.195,5.352z M12.609,9.664 h-1.606V5.73c0-0.83-0.349-1.25-1.047-1.25c-0.772,0-1.158,0.5-1.158,1.486V8.12H7.202V5.966c0-0.987-0.387-1.486-1.158-1.486 c-0.698,0-1.046,0.421-1.046,1.25v3.933H3.391V5.611c0-0.829,0.211-1.487,0.634-1.974c0.437-0.487,1.009-0.736,1.719-0.736 c0.822,0,1.444,0.315,1.855,0.947L8,4.519l0.4-0.67c0.412-0.632,1.033-0.947,1.855-0.947c0.71,0,1.282,0.25,1.72,0.736 c0.423,0.487,0.635,1.145,0.635,1.974V9.664z"/>

View File

@ -0,0 +1 @@
<path d="M13.778,12.215c-0.102,0.218-0.171,0.385-0.212,0.498c-0.143,0.399-0.188,0.719-0.202,0.922 c-0.068,1.015,0.388,1.615,0.496,1.776c0.16,0.239,0.227,0.373,0.195,0.404c-0.059,0.104-0.241,0.104-0.546,0 c-0.457-0.157-1.72-0.647-2.196-1.338c-0.191-0.28-0.313-0.398-0.389-0.44C10.021,14.372,9.034,14.556,8,14.556 c-4.33,0-7.84-3.234-7.84-7.224c0-3.99,3.51-7.225,7.84-7.225s7.84,3.234,7.84,7.225C15.84,9.214,15.059,10.929,13.778,12.215z M7.944,9.692c1.542,0.999,2.38,1.439,2.513,1.322c0.133-0.117-0.027-1.051-0.479-2.799c1.436-1.092,2.114-1.753,2.033-1.981 c-0.082-0.229-1.018-0.365-2.81-0.408C8.607,4.13,8.188,3.28,7.944,3.28c-0.244,0-0.663,0.85-1.256,2.546 c-1.795,0.053-2.731,0.188-2.81,0.408c-0.078,0.219,0.6,0.88,2.033,1.981c-0.491,1.689-0.65,2.622-0.48,2.799 C5.602,11.19,6.44,10.75,7.944,9.692z"/>

View File

@ -0,0 +1 @@
<path d="M8 0C3.582 0 0 3.582 0 8c0 3.39 2.108 6.285 5.084 7.45-.07-.633-.133-1.604.028-2.295.146-.625.938-3.977.938-3.977s-.24-.48-.24-1.188c0-1.11.646-1.943 1.448-1.943.683 0 1.012.513 1.012 1.127 0 .687-.436 1.713-.662 2.664-.19.797.4 1.445 1.185 1.445 1.42 0 2.514-1.498 2.514-3.662 0-1.91-1.376-3.25-3.342-3.25-2.276 0-3.61 1.71-3.61 3.47 0 .69.263 1.43.593 1.83.066.08.075.15.057.23-.06.25-.196.8-.223.91-.035.15-.115.18-.268.11C3.516 10.46 2.89 9 2.89 7.82c0-2.52 1.834-4.84 5.287-4.84 2.774 0 4.932 1.98 4.932 4.62 0 2.76-1.74 4.98-4.16 4.98-.81 0-1.57-.42-1.84-.92l-.5 1.9c-.18.698-.67 1.57-1 2.1.75.23 1.54.357 2.37.357 4.41 0 8-3.58 8-8s-3.59-8-8-8z"/>

View File

@ -0,0 +1 @@
<path d="M12.8 16C12.8 8.978 7.022 3.2 0 3.2V0c8.777 0 16 7.223 16 16h-3.2zM2.194 11.61c1.21 0 2.195.985 2.195 2.196 0 1.21-.99 2.194-2.2 2.194C.98 16 0 15.017 0 13.806c0-1.21.983-2.195 2.194-2.195zM10.606 16h-3.11c0-4.113-3.383-7.497-7.496-7.497v-3.11c5.818 0 10.606 4.79 10.606 10.607z"/>

View File

@ -0,0 +1 @@
<path d="M12.566,14.12v-4.08h1.359v5.44H1.686v-5.44h1.36v4.08H12.566z M10.336,0.52L9.269,1.315l3.978,5.358l1.068-0.803 L10.336,0.52z M4.406,12.76h6.8V11.4h-6.8V12.76z M12.158,7.945L7.03,3.675l0.851-1.02l5.128,4.271L12.158,7.945z M5.357,6.646 l6.053,2.815l0.558-1.21L5.916,5.437L5.357,6.64V6.646z M11.227,10.91L4.494,9.774l0.272-1.306l6.549,1.306L11.227,10.91z"/>

View File

@ -0,0 +1 @@
<path d="M10.563,11.596l1.286-6.063c0.053-0.256,0.022-0.44-0.092-0.551c-0.113-0.111-0.264-0.131-0.45-0.061l-7.56,2.914 C3.579,7.897,3.463,7.971,3.402,8.052C3.34,8.134,3.333,8.211,3.38,8.284s0.14,0.13,0.28,0.171l1.934,0.604l4.489-2.826 c0.123-0.082,0.216-0.099,0.28-0.053c0.041,0.029,0.029,0.073-0.035,0.131L6.696,9.592l-0.14,1.996c0.134,0,0.265-0.064,0.394-0.193 l0.945-0.91l1.96,1.444C10.229,12.139,10.465,12.027,10.563,11.596z M15.84,8c0,1.062-0.207,2.077-0.621,3.045 c-0.414,0.969-0.972,1.803-1.671,2.503c-0.7,0.699-1.534,1.257-2.503,1.671C10.077,15.633,9.062,15.84,8,15.84 s-2.077-0.207-3.045-0.621c-0.969-0.414-1.803-0.972-2.502-1.671c-0.7-0.7-1.257-1.534-1.671-2.503C0.367,10.077,0.16,9.062,0.16,8 s0.207-2.077,0.621-3.045c0.414-0.969,0.971-1.803,1.671-2.502c0.7-0.7,1.534-1.257,2.502-1.671C5.923,0.367,6.938,0.16,8,0.16 s2.077,0.207,3.045,0.621c0.969,0.414,1.803,0.971,2.503,1.671c0.699,0.7,1.257,1.534,1.671,2.502C15.633,5.923,15.84,6.938,15.84,8 z"/>

View File

@ -0,0 +1 @@
<path d="M16 3.038c-.59.26-1.22.437-1.885.517.677-.407 1.198-1.05 1.443-1.816-.634.37-1.337.64-2.085.79-.598-.64-1.45-1.04-2.396-1.04-1.812 0-3.282 1.47-3.282 3.28 0 .26.03.51.085.75-2.728-.13-5.147-1.44-6.766-3.42C.83 2.58.67 3.14.67 3.75c0 1.14.58 2.143 1.46 2.732-.538-.017-1.045-.165-1.487-.41v.04c0 1.59 1.13 2.918 2.633 3.22-.276.074-.566.114-.865.114-.21 0-.41-.02-.61-.058.42 1.304 1.63 2.253 3.07 2.28-1.12.88-2.54 1.404-4.07 1.404-.26 0-.52-.015-.78-.045 1.46.93 3.18 1.474 5.04 1.474 6.04 0 9.34-5 9.34-9.33 0-.14 0-.28-.01-.42.64-.46 1.2-1.04 1.64-1.7z"/>

View File

@ -0,0 +1,3 @@
<path
d="M 9.5237333,6.7756869 15.481067,0 h -1.4112 L 8.8949333,5.8820316 4.7648,0 H 0 L 6.2469333,8.8955204 0,16 H 1.4112 L 6.8725333,9.7870441 11.2352,16 H 16 M 1.9205333,1.0412656 h 2.168 L 14.0688,15.009892 h -2.168533"
style="stroke-width:0.0533111" />

View File

@ -0,0 +1 @@
<path d="M0 7.345c0-1.294.16-2.59.16-2.59s.156-1.1.636-1.587c.608-.637 1.408-.617 1.764-.684C3.84 2.36 8 2.324 8 2.324s3.362.004 5.6.166c.314.038.996.04 1.604.678.48.486.636 1.588.636 1.588S16 6.05 16 7.346v1.258c0 1.296-.16 2.59-.16 2.59s-.156 1.102-.636 1.588c-.608.638-1.29.64-1.604.678-2.238.162-5.6.166-5.6.166s-4.16-.037-5.44-.16c-.356-.067-1.156-.047-1.764-.684-.48-.487-.636-1.587-.636-1.587S0 9.9 0 8.605v-1.26zm6.348 2.73V5.58l4.323 2.255-4.32 2.24z"/>

View File

@ -0,0 +1,7 @@
<li>{% assign entry = include.item %}
<a {% unless entry.platform == 'rss' %}rel="me" {% endunless %}href="{{ entry.user_url }}" target="_blank" title="{{ entry.title | default: entry.platform }}">
<svg class="svg-icon grey">
<use xlink:href="{{ '/assets/minima-social-icons.svg#' | append: entry.platform | relative_url }}"></use>
</svg>
</a>
</li>

5
_includes/social.html Normal file
View File

@ -0,0 +1,5 @@
<ul class="social-media-list">
{%- for entry in site.minima.social_links -%}
{%- include social-item.html item = entry -%}
{%- endfor -%}
</ul>

View File

@ -0,0 +1,3 @@
<symbol id="{{ include.key }}" fill-rule="evenodd" clip-rule="evenodd" stroke-linejoin="round" stroke-miterlimit="1.414" viewBox="0 0 16 16">
{%- include social-icons/{{ include.key }}.svg -%}
</symbol>

20
_layouts/base.html Normal file
View File

@ -0,0 +1,20 @@
<!DOCTYPE html>
<html lang="{{ page.lang | default: site.lang | default: "en" }}">
{%- include head.html -%}
<body>
{%- include header.html -%}
<main class="page-content" aria-label="Content">
<div class="wrapper">
{{ content }}
</div>
</main>
{%- include footer.html -%}
</body>
</html>

View File

@ -1,33 +0,0 @@
<!doctype html>
<html lang="en">
{% include head.html %}
<body>
<div class="container content">
<br>
<br>
<main>
{{ content }}
</main>
<footer class="footer">
<small>
&copy; <time datetime="{{ site.time | date_to_xmlschema }}">{{ site.time | date: '%Y' }}</time>. vLLM Team. All rights reserved.
</small>
</footer>
</div>
{% if site.ga_analytics %}
<script>
(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
})(window,document,'script','https://www.google-analytics.com/analytics.js','ga');
ga('create', '{{ site.ga_analytics }}', 'auto');
ga('send', 'pageview');
</script>
{% endif %}
</body>
</html>

61
_layouts/home.html Normal file
View File

@ -0,0 +1,61 @@
---
layout: base
---
<div class="home">
{%- if page.title -%}
<h1 class="page-heading">{{ page.title }}</h1>
{%- endif -%}
{{ content }}
{% if site.paginate %}
{% assign posts = paginator.posts %}
{% else %}
{% assign posts = site.posts %}
{% endif %}
{%- if posts.size > 0 -%}
{%- if page.list_title -%}
<h2 class="post-list-heading">{{ page.list_title }}</h2>
{%- endif -%}
<ul class="post-list">
{%- assign date_format = site.minima.date_format | default: "%b %-d, %Y" -%}
{%- for post in posts -%}
<li>
<span class="post-meta">{{ post.date | date: date_format }}</span>
<h3>
<a class="post-link" href="{{ post.url | relative_url }}">
{{ post.title | escape }}
</a>
</h3>
{%- if site.show_excerpts -%}
{{ post.excerpt }}
{%- endif -%}
</li>
{%- endfor -%}
</ul>
{% if site.paginate %}
<div class="pager">
<ul class="pagination">
{%- if paginator.previous_page %}
<li><a href="{{ paginator.previous_page_path | relative_url }}" class="previous-page">{{ paginator.previous_page }}</a></li>
{%- else %}
<li><div class="pager-edge"></div></li>
{%- endif %}
<li><div class="current-page">{{ paginator.page }}</div></li>
{%- if paginator.next_page %}
<li><a href="{{ paginator.next_page_path | relative_url }}" class="next-page">{{ paginator.next_page }}</a></li>
{%- else %}
<li><div class="pager-edge"></div></li>
{%- endif %}
</ul>
</div>
{%- endif %}
{%- endif -%}
</div>

View File

@ -1,8 +1,14 @@
---
layout: default
layout: base
---
<article class="post">
<header class="post-header">
<h1 class="post-title">{{ page.title | escape }}</h1>
</header>
<div class="post-content">
{{ content }}
</div>
<article class="page">
<h1 class="page-title">{{ page.title }}</h1>
{{ content }}
</article>

View File

@ -1,25 +1,40 @@
---
layout: default
layout: base
---
<article class="post h-entry" itemscope itemtype="http://schema.org/BlogPosting">
{%- if page.extra -%}
{{ page.extra }}
{%- endif -%}
<header class="post-header">
<h1 class="post-title p-name" itemprop="name headline">{{ page.title | escape }}</h1>
<p class="post-meta">
{%- assign date_format = site.minima.date_format | default: "%b %-d, %Y" -%}
<time class="dt-published" datetime="{{ page.date | date_to_xmlschema }}" itemprop="datePublished">
{{ page.date | date: date_format }}
</time>
{%- if page.modified_date -%}
~
{%- assign mdate = page.modified_date | date_to_xmlschema -%}
<time class="dt-modified" datetime="{{ mdate }}" itemprop="dateModified">
{{ mdate | date: date_format }}
</time>
{%- endif -%}
{%- if page.author -%}
• {% for author in page.author %}
<span itemprop="author" itemscope itemtype="http://schema.org/Person">
<span class="p-author h-card" itemprop="name">{{ author }}</span></span>
{%- if forloop.last == false %}, {% endif -%}
{% endfor %}
{%- endif -%}</p>
</header>
<article class="post">
<h1 class="post-title">{{ page.title }}</h1>
<time datetime="{{ page.date | date_to_xmlschema }}" class="post-date">{{ page.date | date_to_string }}</time>
{{ content }}
<div class="post-content e-content" itemprop="articleBody">
{{ content }}
</div>
{%- if site.disqus.shortname -%}
{%- include disqus_comments.html -%}
{%- endif -%}
<a class="u-url" href="{{ page.url | relative_url }}" hidden></a>
</article>
{% if site.related_posts != empty %}
<aside class="related">
<h3>Related posts</h3>
<ul class="related-posts">
{% for post in site.related_posts limit:3 %}
<li>
<a href="{{ site.baseurl }}{{ post.url }}">
{{ post.title }}
<small><time datetime="{{ post.date | date_to_xmlschema }}">{{ post.date | date_to_string }}</time></small>
</a>
</li>
{% endfor %}
</ul>
</aside>
{% endif %}

View File

@ -1,52 +1,42 @@
---
layout: post
title: "vLLM: Easy, Fast, and Cheap LLM Serving with PagedAttention"
author: "Woosuk Kwon*, Zhuohan Li*, Siyuan Zhuang, Ying Sheng, Lianmin Zheng, Cody Yu, Joey Gonzalez, Hao Zhang, and Ion Stoica (* Equal Contribution)"
extra: "<br><p align=\"center\"><picture><img src=\"/assets/logos/vllm-logo-text-light.png\" width=\"65%\"></picture></p><br>"
---
<p align="center">
<picture>
<img src="assets/logos/vllm-logo-text-light.png" width="65%">
</picture>
</p>
# *vLLM:* Easy, Fast, and Cheap LLM Serving with PagedAttention
*By Woosuk Kwon\*, Zhuohan Li\*, Siyuan Zhuang, Ying Sheng, Lianmin Zheng, Cody Yu, Joey Gonzalez, Hao Zhang, and Ion Stoica (\* Equal Contribution). June 20th, 2023*
<p align="left">
<p align="center" style="margin-top:-15px">
<a href="https://github.com/vllm-project/vllm"><b>GitHub</b></a> | <a href="https://vllm.readthedocs.io/en/latest/"><b>Documentation</b></a> | <a href="https://arxiv.org/pdf/2309.06180.pdf"><b>Paper</b></a>
</p>
---
LLMs promise to fundamentally change how we use AI across all industries. However, actually serving these models is challenging and can be surprisingly slow even on expensive hardware. Today we are excited to introduce vLLM, an open-source library for fast LLM inference and serving. vLLM utilizes **PagedAttention**, our new attention algorithm that effectively manages attention keys and values. vLLM equipped with PagedAttention redefines the new state of the art in LLM serving: it delivers up to 24x higher throughput than HuggingFace Transformers, without requiring any model architecture changes.
vLLM has been developed at UC Berkeley and deployed at [Chatbot Arena and Vicuna Demo](https://chat.lmsys.org) for the past two months. It is the core technology that makes LLM serving affordable even for a small research team like LMSYS with limited compute resources. Try out vLLM now with a single command at our [GitHub repository](https://github.com/vllm-project/vllm).
## Beyond State-of-the-art Performance
### Beyond State-of-the-art Performance
We compare the throughput of vLLM with [HuggingFace Transformers (HF)](https://huggingface.co/docs/transformers/main_classes/text_generation), the most popular LLM library and [HuggingFace Text Generation Inference (TGI)](https://github.com/huggingface/text-generation-inference), the previous state of the art. We evaluate in two settings: LLaMA-7B on an NVIDIA A10G GPU and LLaMA-13B on an NVIDIA A100 GPU (40GB). We sample the requests input/output lengths from the ShareGPT dataset. In our experiments, vLLM achieves up to **24x** higher throughput compared to HF and up to **3.5x** higher throughput than TGI.
<p align="center">
<picture>
<img src="assets/figures/perf_a100_n1_light.png" width="45%">
<img src="/assets/figures/perf_a100_n1_light.png" width="45%">
</picture><picture>
<img src="assets/figures/perf_a10g_n1_light.png" width="45%">
<img src="/assets/figures/perf_a10g_n1_light.png" width="45%">
</picture><br>
Serving throughput when each request asks for <em> one output completion</em>. vLLM achieves 14x - 24x higher throughput than HF and 2.2x - 2.5x higher throughput than TGI.
</p>
<p align="center">
<picture>
<img src="assets/figures/perf_a100_n3_light.png" width="45%">
<img src="/assets/figures/perf_a100_n3_light.png" width="45%">
</picture><picture>
<img src="assets/figures/perf_a10g_n3_light.png" width="45%">
<img src="/assets/figures/perf_a10g_n3_light.png" width="45%">
</picture>
<br>Serving throughput when each request asks for <em>three parallel output completions</em>. vLLM achieves 8.5x - 15x higher throughput than HF and 3.3x - 3.5x higher throughput than TGI.
</p>
## The Secret Sauce: PagedAttention
### The Secret Sauce: PagedAttention
In vLLM, we identify that the performance of LLM serving is bottlenecked by memory. In the autoregressive decoding process, all the input tokens to the LLM produce their attention key and value tensors, and these tensors are kept in GPU memory to generate next tokens. These cached key and value tensors are often referred to as KV cache. The KV cache is
- *Large:* Takes up to 1.7GB for a single sequence in LLaMA-13B.
@ -57,7 +47,7 @@ To address this problem, we introduce **PagedAttention**, an attention algorithm
<p align="center">
<picture>
<img src="assets/figures/annimation0.gif" width="80%">
<img src="/assets/figures/annimation0.gif" width="80%">
</picture>
<br>
<em>PagedAttention:</em> KV Cache are partitioned into blocks. Blocks do not need to be contiguous in memory space.
@ -67,7 +57,7 @@ Because the blocks do not need to be contiguous in memory, we can manage the key
<p align="center">
<picture>
<img src="assets/figures/annimation1.gif" width="100%">
<img src="/assets/figures/annimation1.gif" width="100%">
</picture>
<br>
Example generation process for a request with PagedAttention.
@ -79,7 +69,7 @@ PagedAttention has another key advantage: efficient memory sharing. For example,
<p align="center">
<picture>
<img src="assets/figures/annimation2.gif" width="80%">
<img src="/assets/figures/annimation2.gif" width="80%">
</picture>
<br>
Example of parallel sampling.
@ -89,7 +79,7 @@ PagedAttention naturally enables memory sharing through its block table. Similar
<p align="center">
<picture>
<img src="assets/figures/annimation3.gif" width="100%">
<img src="/assets/figures/annimation3.gif" width="100%">
</picture>
<br>
Example generation process for a request that samples multiple outputs.
@ -99,7 +89,7 @@ PageAttentions memory sharing greatly reduces the memory overhead of complex
PagedAttention is the core technology behind vLLM, our LLM inference and serving engine that supports a variety of models with high performance and an easy-to-use interface. For more technical details about vLLM and PagedAttention, check out our [GitHub repo](https://github.com/vllm-project/vllm) and stay tuned for our paper.
## The Silent Hero Behind LMSYS Vicuna and Chatbot Arena
### The Silent Hero Behind LMSYS Vicuna and Chatbot Arena
This April, [LMSYS](https://lmsys.org) developed the popular Vicuna chatbot models and made them publicly available. Since then, Vicuna has been served in [Chatbot Arena](https://arena.lmsys.org/) for millions of users. Initially, LMSYS FastChat adopted a HF Transformers based [serving backend](https://github.com/lm-sys/FastChat/blob/main/fastchat/serve/model_worker.py) to serve the chat demo. As the demo became more popular, the peak traffic ramped up several times, making the HF backend a significant bottleneck. The LMSYS and vLLM team have worked together and soon developed the FastChat-vLLM integration to use vLLM [as the new backend](https://github.com/lm-sys/FastChat/blob/main/fastchat/serve/vllm_worker.py) in order to support the growing demands (up to 5x more traffic). In an early [internal micro-benchmark](https://github.com/lm-sys/FastChat/blob/main/fastchat/serve/test_throughput.py) by LMSYS, the vLLM serving backend can **achieve up to 30x higher throughput than an initial HF backend.**
@ -107,7 +97,7 @@ Since mid-April, the most popular models such as Vicuna, Koala, and LLaMA, have
<p align="center">
<picture>
<img src="assets/figures/lmsys_traffic.png" width="100%">
<img src="/assets/figures/lmsys_traffic.png" width="100%">
</picture>
<br>
Requests served by FastChat-vLLM integration in the Chatbot Arena between April to May. Indeed, more than half of the requests to Chatbot Arena use vLLM as the inference backend.
@ -115,7 +105,7 @@ Requests served by FastChat-vLLM integration in the Chatbot Arena between April
This utilization of vLLM has also significantly reduced operational costs. With vLLM, LMSYS was able to cut the number of GPUs used for serving the above traffic by 50%. vLLM has been handling an average of 30K requests daily and a peak of 60K, which is a clear demonstration of vLLMs robustness.
## Get started with vLLM
### Get started with vLLM
Install vLLM with the following command (check out our [installation guide](https://vllm.readthedocs.io/en/latest/getting_started/installation.html) for more):
@ -158,4 +148,4 @@ For more ways to use vLLM, please check out the [quickstart guide](https://vllm.
-----
*Blog written by Woosuk Kwon and Zhuohan Li (UC Berkeley). Special thanks to Hao Zhang for the integration of vLLM and FastChat and for writing the corresponding section. We thank the entire teamSiyuan Zhuang, Ying Sheng, Lianmin Zheng (UC Berkeley), Cody Yu (Independent Researcher), Joey Gonzalez (UC Berkeley), Hao Zhang (UC Berkeley & UCSD), and Ion Stoica (UC Berkeley).*
*Blog written by Woosuk Kwon and Zhuohan Li (UC Berkeley). Special thanks to Hao Zhang for the integration of vLLM and FastChat and for writing the corresponding section. We thank the entire teamSiyuan Zhuang, Ying Sheng, Lianmin Zheng (UC Berkeley), Cody Yu (Independent Researcher), Joey Gonzalez (UC Berkeley), Hao Zhang (UC Berkeley & UCSD), and Ion Stoica (UC Berkeley).*

View File

@ -0,0 +1,67 @@
---
layout: post
title: "Notes on vLLM v.s. DeepSpeed"
author: "vLLM Team"
---
---
**TL;DR:**
- vLLM is as fast as DeepSpeed in common scenarios and faster than Deepspeed when outputs are long.
- DeepSpeed only outperforms vLLM in long prompt, short output use cases due to its Dynamic SplitFuse optimization. This optimization is on vLLMs roadmap.
- vLLMs mission is to build the fastest and easiest-to-use open-source LLM inference and serving engine. It is Apache 2.0 and community-owned with broad model and optimization support.
---
Recently, the DeepSpeed team published [a blog](https://github.com/microsoft/DeepSpeed/tree/master/blogs/deepspeed-fastgen) claiming 2x throughput improvement over vLLM by utilizing the Dynamic Splitfuse technique. We are happy to see the technology advancements from the open-source community. In this blog, we clarify the workloads that benefit from the Dynamic SplitFuse enhancement, which are quite narrow. For most workloads, vLLM is on par with or faster than DeepSpeed MII.
In this post, we will discuss the difference between the two systems, share our benchmarks, and discuss future steps.
### Performance Benchmark
In terms of performance optimization, we believe there are 2 key differences between vLLM and DeepSpeed:
DeepSpeed uses a conservative/suboptimal memory allocation scheme, which wastes memory when output lengths are large.
DeepSpeed uses Dynamic SplitFuse scheduling which gives speedup only when prompt lengths are much greater than output lengths.
Consequently, DeepSpeed wins when the workload is consistently long prompt and short output. In other cases, vLLM wins.
#### Scenario 1: Long Prompt Length, Short Output
In this scenario, we expect DeepSpeed to perform well due to Dynamic SplitFuse. However, the benefit we observe is not as significant as 2x.
<p align="center">
<picture>
<img src="/assets/figures/notes-vllm-vs-deepspeed/s1.png" width="50%">
</picture>
</p>
#### Scenario 2: All other cases
In this scenario, we observe vLLM perform better or on par with DeepSpeed.
<p align="center">
<picture>
<img src="/assets/figures/notes-vllm-vs-deepspeed/s2.png" width="50%">
</picture>
</p>
### vLLMs Future: A True Community Project
We are committed to making vLLM the best open-source project incorporating the communitys best models, optimizations, and hardware. Coming out of UC Berkeley Sky Computing Lab, we are building vLLM truly in open source with the Apache 2.0 license.
The vLLM team prioritizes collaborations and we strive to keep the codebase with high quality code and easy to contribute. We are actively working on system performance; as well as new features like LoRA, Speculative Decoding, and better Quantization Support. Additionally, we are collaborating with hardware vendors like AMD, AWS Inferenetia, and Intel Habana to bring LLM to the broadest community.
Specifically for the Dynamic SplitFuse optimization, we are actively investigating the proper integration. If you have any questions and suggestions, please feel free to contact us on [GitHub](https://github.com/vllm-project/vllm). We also published the benchmark code [here](https://github.com/vllm-project/vllm/pull/1649).
### Appendix: Feature Comparison
DeepSpeed currently supports only basic functionalities. For example, it only supports 3 types of models and does not support popular features like stop strings and parallel sampling (beam search). We do expect the DeepSpeed open source are eager to catch up and we welcome the creative innovation in the market!
| | vLLM | DeepSpeed |
|----------------------------|:---------------------------------------:|:-----------------------------------------------:|
| Runtime | Python/PyTorch | Python/PyTorch |
| Model implementation | HuggingFace Transformers | Custom implementation + converter for HF models |
| Server frontend | Simple FastAPI server for demo purposes | Custom gRPC-based server |
| Scheduling | Continuous batching | Dynamic SplitFuse |
| Attention kernel | PagedAttention & FlashAttention | PagedAttention & FlashAttention |
| Custom kernels (for LLaMA) | Attention, RoPE, RMS, SILU | Attention, RoPE, RMS, SILU, Embedding |
| KV Cache allocation | Near-optimal | Suboptimal/conservative |
| Supported models | 16 different architectures | LLaMA, Mistral, OPT |
| Sampling methods | Random, parallel, beam search | Random |
| Stop criterion | Stop strings, stop tokens, EOS | EOS |

View File

@ -1,70 +0,0 @@
// Body resets
//
// Update the foundational and global aspects of the page.
* {
box-sizing: border-box;
}
body {
margin: 0;
font-family: var(--body-font);
font-size: var(--body-font-size);
line-height: var(--body-line-height);
color: var(--body-color);
background-color: var(--body-bg);
-webkit-text-size-adjust: 100%;
-ms-text-size-adjust: 100%;
}
// No `:visited` state is required by default (browsers will use `a`)
a {
color: var(--link-color);
// `:focus` is linked to `:hover` for basic accessibility
&:hover,
&:focus {
color: var(--link-hover-color);
}
strong {
color: inherit;
}
}
img {
// display: block;
max-width: 100%;
margin-bottom: var(--spacer);
border-radius: var(--border-radius);
}
table {
margin-bottom: 1rem;
width: 100%;
border: 0 solid var(--border-color);
border-collapse: collapse;
}
td,
th {
padding: .25rem .5rem;
border-color: inherit;
border-style: solid;
border-width: 0;
border-bottom-width: 1px;
}
th {
text-align: left;
}
thead th {
border-bottom-color: currentColor;
}
mark {
padding: .15rem;
background-color: var(--yellow-100);
border-radius: .125rem;
}

View File

@ -1,58 +0,0 @@
// Code
//
// Inline and block-level code snippets. Includes tweaks to syntax highlighted
// snippets from Pygments/Rouge and Gist embeds.
code,
pre {
font-family: var(--code-font);
}
code {
font-size: 85%;
}
pre {
display: block;
margin-top: 0;
margin-bottom: var(--spacer-3);
overflow: auto;
}
.highlight {
padding: var(--spacer);
margin-bottom: var(--spacer);
background-color: var(--code-bg);
border-radius: var(--border-radius);
pre {
margin-bottom: 0;
}
// Triple backticks (code fencing) doubles the .highlight elements
.highlight {
padding: 0;
}
}
.rouge-table {
margin-bottom: 0;
font-size: 100%;
&,
td,
th {
border: 0;
}
.gutter {
vertical-align: top;
user-select: none;
opacity: .25;
}
}
// Gist via GitHub Pages
.gist .markdown-body {
padding: 15px !important;
}

View File

@ -1,16 +0,0 @@
// Layout
//
// Styles for managing the structural hierarchy of the site.
.container {
max-width: 50rem;
padding-left: var(--spacer-2);
padding-right: var(--spacer-2);
margin-left: auto;
margin-right: auto;
}
footer {
margin-top: var(--spacer-3);
margin-bottom: var(--spacer-3);
}

View File

@ -1,23 +0,0 @@
// Masthead
//
// Super small header above the content for site name and short description.
.masthead {
padding-top: var(--spacer);
padding-bottom: var(--spacer);
margin-bottom: var(--spacer-3);
}
.masthead-title {
margin-bottom: 0;
a {
color: inherit;
text-decoration: none;
}
small {
font-weight: 400;
opacity: .5;
}
}

View File

@ -1,12 +0,0 @@
// Messages
//
// Show alert messages to users. You may add it to single elements like a `<p>`,
// or to a parent if there are multiple elements to show.
.message {
padding: var(--spacer);
margin-bottom: var(--spacer);
color: var(--gray-900);
background-color: var(--yellow-100);
border-radius: var(--border-radius);
}

View File

@ -1,52 +0,0 @@
// Pagination
//
// Super lightweight (HTML-wise) blog pagination. `span`s are provide for when
// there are no more previous or next posts to show.
.pagination {
display: flex;
margin: 0 -1.5rem var(--spacer);
color: var(--gray-500);
text-align: center;
}
// Pagination items can be `span`s or `a`s
.pagination-item {
display: block;
padding: var(--spacer);
text-decoration: none;
border: solid var(--border-color);
border-width: 1px 0;
&:first-child {
margin-bottom: -1px;
}
}
// Only provide a hover state for linked pagination items
a.pagination-item:hover {
background-color: var(--border-color);
}
@media (min-width: 30em) {
.pagination {
margin: var(--spacer-3) 0;
}
.pagination-item {
float: left;
width: 50%;
border-width: 1px;
&:first-child {
margin-bottom: 0;
border-top-left-radius: var(--border-radius);
border-bottom-left-radius: var(--border-radius);
}
&:last-child {
margin-left: -1px;
border-top-right-radius: var(--border-radius);
border-bottom-right-radius: var(--border-radius);
}
}
}

View File

@ -1,67 +0,0 @@
// Posts and pages
//
// Each post is wrapped in `.post` and is used on default and post layouts. Each
// page is wrapped in `.page` and is only used on the page layout.
.page,
.post {
margin-bottom: 4em;
li + li {
margin-top: .25rem;
}
}
// Blog post or page title
.page-title,
.post-title {
color: var(--heading-color);
}
.page-title,
.post-title {
margin-top: 0;
}
.post-title a {
color: inherit;
text-decoration: none;
&:hover,
&:focus {
text-decoration: underline;
}
}
// Meta data line below post title
.post-date {
display: block;
margin-top: -.5rem;
margin-bottom: var(--spacer);
color: var(--gray-600);
}
// Related posts
.related {
padding-top: var(--spacer-2);
padding-bottom: var(--spacer-2);
margin-bottom: var(--spacer-2);
border-top: 1px solid var(--border-color);
border-bottom: 1px solid var(--border-color);
}
.related-posts {
padding-left: 0;
list-style: none;
h3 {
margin-top: 0;
}
a {
text-decoration: none;
small {
color: var(--gray-600);
}
}
}

View File

@ -1,65 +0,0 @@
.highlight .hll { background-color: #ffc; }
.highlight .c { color: #999; } /* Comment */
.highlight .err { color: #a00; background-color: #faa } /* Error */
.highlight .k { color: #069; } /* Keyword */
.highlight .o { color: #555 } /* Operator */
.highlight .cm { color: #09f; font-style: italic } /* Comment.Multiline */
.highlight .cp { color: #099 } /* Comment.Preproc */
.highlight .c1 { color: #999; } /* Comment.Single */
.highlight .cs { color: #999; } /* Comment.Special */
.highlight .gd { background-color: #fcc; border: 1px solid #c00 } /* Generic.Deleted */
.highlight .ge { font-style: italic } /* Generic.Emph */
.highlight .gr { color: #f00 } /* Generic.Error */
.highlight .gh { color: #030; } /* Generic.Heading */
.highlight .gi { background-color: #cfc; border: 1px solid #0c0 } /* Generic.Inserted */
.highlight .go { color: #aaa } /* Generic.Output */
.highlight .gp { color: #009; } /* Generic.Prompt */
.highlight .gs { } /* Generic.Strong */
.highlight .gu { color: #030; } /* Generic.Subheading */
.highlight .gt { color: #9c6 } /* Generic.Traceback */
.highlight .kc { color: #069; } /* Keyword.Constant */
.highlight .kd { color: #069; } /* Keyword.Declaration */
.highlight .kn { color: #069; } /* Keyword.Namespace */
.highlight .kp { color: #069 } /* Keyword.Pseudo */
.highlight .kr { color: #069; } /* Keyword.Reserved */
.highlight .kt { color: #078; } /* Keyword.Type */
.highlight .m { color: #f60 } /* Literal.Number */
.highlight .s { color: #d44950 } /* Literal.String */
.highlight .na { color: #4f9fcf } /* Name.Attribute */
.highlight .nb { color: #366 } /* Name.Builtin */
.highlight .nc { color: #0a8; } /* Name.Class */
.highlight .no { color: #360 } /* Name.Constant */
.highlight .nd { color: #99f } /* Name.Decorator */
.highlight .ni { color: #999; } /* Name.Entity */
.highlight .ne { color: #c00; } /* Name.Exception */
.highlight .nf { color: #c0f } /* Name.Function */
.highlight .nl { color: #99f } /* Name.Label */
.highlight .nn { color: #0cf; } /* Name.Namespace */
.highlight .nt { color: #2f6f9f; } /* Name.Tag */
.highlight .nv { color: #033 } /* Name.Variable */
.highlight .ow { color: #000; } /* Operator.Word */
.highlight .w { color: #bbb } /* Text.Whitespace */
.highlight .mf { color: #f60 } /* Literal.Number.Float */
.highlight .mh { color: #f60 } /* Literal.Number.Hex */
.highlight .mi { color: #f60 } /* Literal.Number.Integer */
.highlight .mo { color: #f60 } /* Literal.Number.Oct */
.highlight .sb { color: #c30 } /* Literal.String.Backtick */
.highlight .sc { color: #c30 } /* Literal.String.Char */
.highlight .sd { color: #c30; font-style: italic } /* Literal.String.Doc */
.highlight .s2 { color: #c30 } /* Literal.String.Double */
.highlight .se { color: #c30; } /* Literal.String.Escape */
.highlight .sh { color: #c30 } /* Literal.String.Heredoc */
.highlight .si { color: #a00 } /* Literal.String.Interpol */
.highlight .sx { color: #c30 } /* Literal.String.Other */
.highlight .sr { color: #3aa } /* Literal.String.Regex */
.highlight .s1 { color: #c30 } /* Literal.String.Single */
.highlight .ss { color: #fc3 } /* Literal.String.Symbol */
.highlight .bp { color: #366 } /* Name.Builtin.Pseudo */
.highlight .vc { color: #033 } /* Name.Variable.Class */
.highlight .vg { color: #033 } /* Name.Variable.Global */
.highlight .vi { color: #033 } /* Name.Variable.Instance */
.highlight .il { color: #f60 } /* Literal.Number.Integer.Long */
.css .o,
.css .o + .nt,
.css .nt + .nt { color: #999; }

View File

@ -1,16 +0,0 @@
// Table of Contents
#markdown-toc {
padding: var(--spacer-2) var(--spacer-3);
margin-bottom: var(--spacer-2);
border: solid var(--border-color);
border-width: 1px 0;
&::before {
display: block;
margin-left: calc(var(--spacer-3) * -1);
content: "Contents";
font-size: 85%;
font-weight: 500;
}
}

View File

@ -1,117 +0,0 @@
// Typography
//
// Headings, body text, lists, and other misc typographic elements.
h1, h2, h3, h4, h5, h6 {
margin-bottom: .5rem;
font-weight: 600;
line-height: 1.25;
color: var(--heading-color);
}
h1 {
font-size: 2rem;
margin-bottom: 1rem;
}
h2 {
margin-top: 2rem;
margin-bottom: 1rem;
font-size: 1.5rem;
}
h3 {
margin-top: 1.5rem;
font-size: 1.25rem;
}
h4, h5, h6 {
margin-top: 1rem;
font-size: 1rem;
}
p {
margin-top: 0;
margin-bottom: 1rem;
}
ul, ol, dl {
margin-top: 0;
margin-bottom: 1rem;
}
dt {
font-weight: bold;
}
dd {
margin-bottom: .5rem;
}
hr {
position: relative;
margin: var(--spacer-2) 0;
border: 0;
border-top: 1px solid var(--border-color);
}
abbr {
font-size: 85%;
font-weight: bold;
color: var(--gray-600);
text-transform: uppercase;
&[title] {
cursor: help;
border-bottom: 1px dotted var(--border-color);
}
}
blockquote {
padding: .5rem 1rem;
margin: .8rem 0;
color: var(--gray-500);
border-left: .25rem solid var(--border-color);
p:last-child {
margin-bottom: 0;
}
@media (min-width: 30em) {
padding-right: 5rem;
padding-left: 1.25rem;
}
}
figure {
margin: 0;
}
// Markdown footnotes
//
// See the example content post for an example.
// Footnote number within body text
a[href^="#fn:"],
// Back to footnote link
a[href^="#fnref:"] {
display: inline-block;
margin-left: .1rem;
font-weight: bold;
}
// List of footnotes
.footnotes {
margin-top: 2rem;
font-size: 85%;
}
// Custom type
//
// Extend paragraphs with `.lead` for larger introductory text.
.lead {
font-size: 1.25rem;
font-weight: 300;
}

View File

@ -1,66 +0,0 @@
:root {
--gray-000: #f8f9fa;
--gray-100: #f1f3f5;
--gray-200: #e9ecef;
--gray-300: #dee2e6;
--gray-400: #ced4da;
--gray-500: #adb5bd;
--gray-600: #868e96;
--gray-700: #495057;
--gray-800: #343a40;
--gray-900: #212529;
--red: #fa5252;
--pink: #e64980;
--grape: #be4bdb;
--purple: #7950f2;
--indigo: #4c6ef5;
--blue: #228be6;
--cyan: #15aabf;
--teal: #12b886;
--green: #40c057;
--yellow: #fab005;
--orange: #fd7e14;
--blue-300: #74c0fc;
--blue-400: #4dabf7;
--yellow-100: #fff3bf;
--body-font: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";
--body-font-size: 18px;
--body-line-height: 1.5;
--body-color: var(--gray-700);
--body-bg: #fff;
--link-color: var(--blue);
--link-hover-color: #1c7ed6;
--heading-color: var(--gray-900);
--border-color: var(--gray-300);
--border-radius: .25rem;
--code-font: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;
--code-color: var(--grape);
--code-bg: var(--gray-000);
--spacer: 1rem;
--spacer-2: calc(var(--spacer) * 1.5);
--spacer-3: calc(var(--spacer) * 3);
}
// @media (prefers-color-scheme: dark) {
// :root {
// --body-color: var(--gray-300);
// --body-bg: var(--gray-800);
// --heading-color: #fff;
// --link-color: var(--blue-300);
// --link-hover-color: var(--blue-400);
// --border-color: rgba(255,255,255,.15);
// --code-bg: var(--gray-900);
// }
// }

281
_sass/minima/_base.scss Normal file
View File

@ -0,0 +1,281 @@
html {
font-size: $base-font-size;
}
/**
* Reset some basic elements
*/
body, h1, h2, h3, h4, h5, h6,
p, blockquote, pre, hr,
dl, dd, ol, ul, figure {
margin: 0;
padding: 0;
}
/**
* Basic styling
*/
body {
font: $base-font-weight #{$base-font-size}/#{$base-line-height} $base-font-family;
color: $text-color;
background-color: $background-color;
-webkit-text-size-adjust: 100%;
-webkit-font-feature-settings: "kern" 1;
-moz-font-feature-settings: "kern" 1;
-o-font-feature-settings: "kern" 1;
font-feature-settings: "kern" 1;
font-kerning: normal;
display: flex;
min-height: 100vh;
flex-direction: column;
overflow-wrap: break-word;
}
/**
* Set `margin-bottom` to maintain vertical rhythm
*/
h1, h2, h3, h4, h5, h6,
p, blockquote, pre,
ul, ol, dl, figure,
%vertical-rhythm {
margin-bottom: $spacing-unit * .5;
}
hr {
margin-top: $spacing-unit;
margin-bottom: $spacing-unit;
}
/**
* `main` element
*/
main {
display: block; /* Default value of `display` of `main` element is 'inline' in IE 11. */
}
/**
* Images
*/
img {
max-width: 100%;
vertical-align: middle;
}
/**
* Figures
*/
figure > img {
display: block;
}
figcaption {
font-size: $small-font-size;
}
/**
* Lists
*/
ul, ol {
margin-left: $spacing-unit;
}
li {
> ul,
> ol {
margin-bottom: 0;
}
}
/**
* Headings
*/
h1, h2, h3, h4, h5, h6 {
font-weight: $base-font-weight;
}
/**
* Links
*/
a {
color: $link-base-color;
text-decoration: none;
&:visited {
color: $link-visited-color;
}
&:hover {
color: $link-hover-color;
text-decoration: underline;
}
.social-media-list &:hover {
text-decoration: none;
.username {
text-decoration: underline;
}
}
}
/**
* Blockquotes
*/
blockquote {
color: $brand-color;
border-left: 4px solid $border-color-01;
padding-left: $spacing-unit * .5;
@include relative-font-size(1.125);
font-style: italic;
> :last-child {
margin-bottom: 0;
}
i, em {
font-style: normal;
}
}
/**
* Code formatting
*/
pre,
code {
font-family: $code-font-family;
font-size: 0.9375em;
border: 1px solid $border-color-01;
border-radius: 3px;
background-color: $code-background-color;
}
code {
padding: 1px 5px;
}
pre {
padding: 8px 12px;
overflow-x: auto;
> code {
border: 0;
padding-right: 0;
padding-left: 0;
}
}
.highlight {
border-radius: 3px;
background: $code-background-color;
@extend %vertical-rhythm;
.highlighter-rouge & {
background: $code-background-color;
}
}
/**
* Wrapper
*/
.wrapper {
max-width: calc(#{$content-width} - (#{$spacing-unit}));
margin-right: auto;
margin-left: auto;
padding-right: $spacing-unit * .5;
padding-left: $spacing-unit * .5;
@extend %clearfix;
@media screen and (min-width: $on-large) {
max-width: calc(#{$content-width} - (#{$spacing-unit} * 2));
padding-right: $spacing-unit;
padding-left: $spacing-unit;
}
}
/**
* Clearfix
*/
%clearfix:after {
content: "";
display: table;
clear: both;
}
/**
* Icons
*/
.orange {
color: #f66a0a;
}
.grey {
color: #828282;
}
.svg-icon {
width: 1.25em;
height: 1.25em;
display: inline-block;
fill: currentColor;
vertical-align: text-bottom;
}
/**
* Tables
*/
table {
margin-bottom: $spacing-unit;
width: 100%;
text-align: $table-text-align;
color: $table-text-color;
border-collapse: collapse;
border: 1px solid $table-border-color;
tr {
&:nth-child(even) {
background-color: $table-zebra-color;
}
}
th, td {
padding: ($spacing-unit * 33.3333333333 * .01) ($spacing-unit * .5);
}
th {
background-color: $table-header-bg-color;
border: 1px solid $table-header-border;
}
td {
border: 1px solid $table-border-color;
}
@include media-query($on-laptop) {
display: block;
overflow-x: auto;
-webkit-overflow-scrolling: touch;
-ms-overflow-style: -ms-autohiding-scrollbar;
}
}

341
_sass/minima/_layout.scss Normal file
View File

@ -0,0 +1,341 @@
/**
* Site header
*/
.site-header {
border-top: 5px solid $border-color-03;
border-bottom: 1px solid $border-color-01;
min-height: $spacing-unit * 1.865;
line-height: $base-line-height * $base-font-size * 2.25;
// Positioning context for the mobile navigation icon
position: relative;
}
.site-title {
@include relative-font-size(1.625);
font-weight: 300;
letter-spacing: -1px;
margin-bottom: 0;
float: left;
@include media-query($on-palm) {
padding-right: 45px;
}
&,
&:visited {
color: $site-title-color;
}
}
.site-nav {
position: absolute;
top: 9px;
right: $spacing-unit * .5;
background-color: $background-color;
border: 1px solid $border-color-01;
border-radius: 5px;
text-align: right;
.nav-trigger {
display: none;
}
.menu-icon {
float: right;
width: 36px;
height: 26px;
line-height: 0;
padding-top: 10px;
text-align: center;
> svg path {
fill: $border-color-03;
}
}
label[for="nav-trigger"] {
display: block;
float: right;
width: 36px;
height: 36px;
z-index: 2;
cursor: pointer;
}
input ~ .trigger {
clear: both;
display: none;
}
input:checked ~ .trigger {
display: block;
padding-bottom: 5px;
}
.page-link {
color: $text-color;
line-height: $base-line-height;
display: block;
padding: 5px 10px;
// Gaps between nav items, but not on the last one
&:not(:last-child) {
margin-right: 0;
}
margin-left: 20px;
}
@media screen and (min-width: $on-medium) {
position: static;
float: right;
border: none;
background-color: inherit;
label[for="nav-trigger"] {
display: none;
}
.menu-icon {
display: none;
}
input ~ .trigger {
display: block;
}
.page-link {
display: inline;
padding: 0;
&:not(:last-child) {
margin-right: 20px;
}
margin-left: auto;
}
}
}
/**
* Site footer
*/
.site-footer {
// border-top: 1px solid $border-color-01;
padding: $spacing-unit 0;
}
.footer-heading {
@include relative-font-size(1.125);
margin-bottom: $spacing-unit * .5;
}
.feed-subscribe .svg-icon {
padding: 5px 5px 2px 0
}
.contact-list,
.social-media-list {
list-style: none;
margin-left: 0;
}
.footer-col-wrapper,
.social-links {
@include relative-font-size(0.9375);
color: $brand-color;
}
.footer-col {
margin-bottom: $spacing-unit * .5;
}
.footer-col-1,
.footer-col-2 {
width: calc(50% - (#{$spacing-unit} / 2));
}
.footer-col-3 {
width: calc(100% - (#{$spacing-unit} / 2));
}
@media screen and (min-width: $on-large) {
.footer-col-1 {
width: calc(35% - (#{$spacing-unit} / 2));
}
.footer-col-2 {
width: calc(20% - (#{$spacing-unit} / 2));
}
.footer-col-3 {
width: calc(45% - (#{$spacing-unit} / 2));
}
}
@media screen and (min-width: $on-medium) {
.footer-col-wrapper {
display: flex
}
.footer-col {
width: calc(100% - (#{$spacing-unit} / 2));
padding: 0 ($spacing-unit * .5);
&:first-child {
padding-right: $spacing-unit * .5;
padding-left: 0;
}
&:last-child {
padding-right: 0;
padding-left: $spacing-unit * .5;
}
}
}
/**
* Page content
*/
.page-content {
padding: $spacing-unit 0;
flex: 1 0 auto;
}
.page-heading {
@include relative-font-size(2);
}
.post-list-heading {
@include relative-font-size(1.75);
}
.post-list {
margin-left: 0;
list-style: none;
> li {
margin-bottom: $spacing-unit;
}
}
.post-meta {
font-size: $small-font-size;
color: $brand-color;
}
.post-link {
display: block;
@include relative-font-size(1.5);
}
/**
* Posts
*/
.post-header {
margin-bottom: $spacing-unit;
}
.post-title,
.post-content h1 {
@include relative-font-size(2.625);
letter-spacing: -1px;
line-height: 1.15;
@media screen and (min-width: $on-large) {
@include relative-font-size(2.625);
}
}
.post-content {
margin-bottom: $spacing-unit;
h1, h2, h3, h4, h5, h6 { margin-top: $spacing-unit }
h2 {
@include relative-font-size(1.75);
@media screen and (min-width: $on-large) {
@include relative-font-size(2);
}
}
h3 {
@include relative-font-size(1.375);
@media screen and (min-width: $on-large) {
@include relative-font-size(1.625);
}
}
h4 {
@include relative-font-size(1.25);
}
h5 {
@include relative-font-size(1.125);
}
h6 {
@include relative-font-size(1.0625);
}
}
.social-media-list {
display: table;
margin: 0 auto;
li {
float: left;
margin: 5px 10px 5px 0;
&:last-of-type { margin-right: 0 }
a {
display: block;
padding: 10px 12px;
border: 1px solid $border-color-01;
&:hover { border-color: $border-color-02 }
}
}
}
/**
* Pagination navbar
*/
.pagination {
margin-bottom: $spacing-unit;
@extend .social-media-list;
li {
a, div {
min-width: 41px;
text-align: center;
box-sizing: border-box;
}
div {
display: block;
padding: $spacing-unit * .25;
border: 1px solid transparent;
&.pager-edge {
color: $border-color-01;
border: 1px dashed;
}
}
}
}
/**
* Grid helpers
*/
@media screen and (min-width: $on-large) {
.one-half {
width: calc(50% - (#{$spacing-unit} / 2));
}
}

View File

@ -0,0 +1,2 @@
// Placeholder to allow defining custom styles that override everything else.
// (Use `_sass/minima/custom-variables.scss` to override variable defaults)

View File

@ -0,0 +1 @@
// Placeholder to allow overriding predefined variables smoothly.

View File

@ -0,0 +1,50 @@
@charset "utf-8";
// Define defaults for each variable.
$base-font-family: -apple-system, system-ui, BlinkMacSystemFont, "Segoe UI", "Segoe UI Emoji", "Segoe UI Symbol", "Apple Color Emoji", Roboto, Helvetica, Arial, sans-serif !default;
$code-font-family: "Menlo", "Inconsolata", "Consolas", "Roboto Mono", "Ubuntu Mono", "Liberation Mono", "Courier New", monospace;
$base-font-size: 16px !default;
$base-font-weight: 400 !default;
$small-font-size: $base-font-size * 0.875 !default;
$base-line-height: 1.5 !default;
$spacing-unit: 30px !default;
$table-text-align: left !default;
// Width of the content area
$content-width: 800px !default;
$on-palm: 600px !default;
$on-laptop: 800px !default;
$on-medium: $on-palm !default;
$on-large: $on-laptop !default;
// Use media queries like this:
// @include media-query($on-palm) {
// .wrapper {
// padding-right: $spacing-unit / 2;
// padding-left: $spacing-unit / 2;
// }
// }
// Notice the following mixin uses max-width, in a deprecated, desktop-first
// approach, whereas media queries used elsewhere now use min-width.
@mixin media-query($device) {
@media screen and (max-width: $device) {
@content;
}
}
@mixin relative-font-size($ratio) {
font-size: #{$ratio}rem;
}
// Import pre-styling-overrides hook and style-partials.
@import
"minima/custom-variables", // Hook to override predefined variables.
"minima/base", // Defines element resets.
"minima/layout", // Defines structure and style based on CSS selectors.
"minima/custom-styles" // Hook to override existing styles.
;

View File

@ -0,0 +1,361 @@
@charset "utf-8";
// Default color scheme settings
// These are overridden in classic.css and dark.scss
$color-scheme-auto: true !default;
$color-scheme-dark: false !default;
// Light mode
// ----------
$lm-brand-color: #828282 !default;
$lm-brand-color-light: lighten($lm-brand-color, 40%) !default;
$lm-brand-color-dark: darken($lm-brand-color, 25%) !default;
$lm-site-title-color: $lm-brand-color-dark !default;
$lm-text-color: #111111 !default;
$lm-background-color: #fdfdfd !default;
$lm-code-background-color: #eeeeff !default;
$lm-link-base-color: #2a7ae2 !default;
$lm-link-visited-color: darken($lm-link-base-color, 15%) !default;
$lm-link-hover-color: $lm-text-color !default;
$lm-border-color-01: $lm-brand-color-light !default;
$lm-border-color-02: lighten($lm-brand-color, 35%) !default;
$lm-border-color-03: $lm-brand-color-dark !default;
$lm-table-text-color: lighten($lm-text-color, 18%) !default;
$lm-table-zebra-color: lighten($lm-brand-color, 46%) !default;
$lm-table-header-bg-color: lighten($lm-brand-color, 43%) !default;
$lm-table-header-border: lighten($lm-brand-color, 37%) !default;
$lm-table-border-color: $lm-border-color-01 !default;
// Syntax highlighting styles should be adjusted appropriately for every "skin"
// ----------------------------------------------------------------------------
@mixin lm-highlight {
.highlight {
.c { color: #998; font-style: italic } // Comment
.err { color: #a61717; background-color: #e3d2d2 } // Error
.k { font-weight: bold } // Keyword
.o { font-weight: bold } // Operator
.cm { color: #998; font-style: italic } // Comment.Multiline
.cp { color: #999; font-weight: bold } // Comment.Preproc
.c1 { color: #998; font-style: italic } // Comment.Single
.cs { color: #999; font-weight: bold; font-style: italic } // Comment.Special
.gd { color: #000; background-color: #fdd } // Generic.Deleted
.gd .x { color: #000; background-color: #faa } // Generic.Deleted.Specific
.ge { font-style: italic } // Generic.Emph
.gr { color: #a00 } // Generic.Error
.gh { color: #999 } // Generic.Heading
.gi { color: #000; background-color: #dfd } // Generic.Inserted
.gi .x { color: #000; background-color: #afa } // Generic.Inserted.Specific
.go { color: #888 } // Generic.Output
.gp { color: #555 } // Generic.Prompt
.gs { font-weight: bold } // Generic.Strong
.gu { color: #aaa } // Generic.Subheading
.gt { color: #a00 } // Generic.Traceback
.kc { font-weight: bold } // Keyword.Constant
.kd { font-weight: bold } // Keyword.Declaration
.kp { font-weight: bold } // Keyword.Pseudo
.kr { font-weight: bold } // Keyword.Reserved
.kt { color: #458; font-weight: bold } // Keyword.Type
.m { color: #099 } // Literal.Number
.s { color: #d14 } // Literal.String
.na { color: #008080 } // Name.Attribute
.nb { color: #0086B3 } // Name.Builtin
.nc { color: #458; font-weight: bold } // Name.Class
.no { color: #008080 } // Name.Constant
.ni { color: #800080 } // Name.Entity
.ne { color: #900; font-weight: bold } // Name.Exception
.nf { color: #900; font-weight: bold } // Name.Function
.nn { color: #555 } // Name.Namespace
.nt { color: #000080 } // Name.Tag
.nv { color: #008080 } // Name.Variable
.ow { font-weight: bold } // Operator.Word
.w { color: #bbb } // Text.Whitespace
.mf { color: #099 } // Literal.Number.Float
.mh { color: #099 } // Literal.Number.Hex
.mi { color: #099 } // Literal.Number.Integer
.mo { color: #099 } // Literal.Number.Oct
.sb { color: #d14 } // Literal.String.Backtick
.sc { color: #d14 } // Literal.String.Char
.sd { color: #d14 } // Literal.String.Doc
.s2 { color: #d14 } // Literal.String.Double
.se { color: #d14 } // Literal.String.Escape
.sh { color: #d14 } // Literal.String.Heredoc
.si { color: #d14 } // Literal.String.Interpol
.sx { color: #d14 } // Literal.String.Other
.sr { color: #009926 } // Literal.String.Regex
.s1 { color: #d14 } // Literal.String.Single
.ss { color: #990073 } // Literal.String.Symbol
.bp { color: #999 } // Name.Builtin.Pseudo
.vc { color: #008080 } // Name.Variable.Class
.vg { color: #008080 } // Name.Variable.Global
.vi { color: #008080 } // Name.Variable.Instance
.il { color: #099 } // Literal.Number.Integer.Long
}
}
// Dark mode
// ---------
$dm-brand-color: #999999 !default;
$dm-brand-color-light: lighten($dm-brand-color, 5%) !default;
$dm-brand-color-dark: darken($dm-brand-color, 35%) !default;
$dm-site-title-color: $dm-brand-color-light !default;
$dm-text-color: #bbbbbb !default;
$dm-background-color: #181818 !default;
$dm-code-background-color: #212121 !default;
$dm-link-base-color: #79b8ff !default;
$dm-link-visited-color: $dm-link-base-color !default;
$dm-link-hover-color: $dm-text-color !default;
$dm-border-color-01: $dm-brand-color-dark !default;
$dm-border-color-02: $dm-brand-color-light !default;
$dm-border-color-03: $dm-brand-color !default;
$dm-table-text-color: $dm-text-color !default;
$dm-table-zebra-color: lighten($dm-background-color, 4%) !default;
$dm-table-header-bg-color: lighten($dm-background-color, 10%) !default;
$dm-table-header-border: lighten($dm-background-color, 21%) !default;
$dm-table-border-color: $dm-border-color-01 !default;
// Syntax highlighting styles should be adjusted appropriately for every "skin"
// List of tokens: https://github.com/rouge-ruby/rouge/wiki/List-of-tokens
// Some colors come from Material Theme Darker:
// https://github.com/material-theme/vsc-material-theme/blob/master/scripts/generator/settings/specific/darker-hc.ts
// https://github.com/material-theme/vsc-material-theme/blob/master/scripts/generator/color-set.ts
// ----------------------------------------------------------------------------
@mixin dm-highlight {
.highlight {
.c { color: #545454; font-style: italic } // Comment
.err { color: #f07178; background-color: #e3d2d2 } // Error
.k { color: #89DDFF; font-weight: bold } // Keyword
.o { font-weight: bold } // Operator
.cm { color: #545454; font-style: italic } // Comment.Multiline
.cp { color: #545454; font-weight: bold } // Comment.Preproc
.c1 { color: #545454; font-style: italic } // Comment.Single
.cs { color: #545454; font-weight: bold; font-style: italic } // Comment.Special
.gd { color: #000; background-color: #fdd } // Generic.Deleted
.gd .x { color: #000; background-color: #faa } // Generic.Deleted.Specific
.ge { font-style: italic } // Generic.Emph
.gr { color: #f07178 } // Generic.Error
.gh { color: #999 } // Generic.Heading
.gi { color: #000; background-color: #dfd } // Generic.Inserted
.gi .x { color: #000; background-color: #afa } // Generic.Inserted.Specific
.go { color: #888 } // Generic.Output
.gp { color: #555 } // Generic.Prompt
.gs { font-weight: bold } // Generic.Strong
.gu { color: #aaa } // Generic.Subheading
.gt { color: #f07178 } // Generic.Traceback
.kc { font-weight: bold } // Keyword.Constant
.kd { font-weight: bold } // Keyword.Declaration
.kp { font-weight: bold } // Keyword.Pseudo
.kr { font-weight: bold } // Keyword.Reserved
.kt { color: #FFCB6B; font-weight: bold } // Keyword.Type
.m { color: #F78C6C } // Literal.Number
.s { color: #C3E88D } // Literal.String
.na { color: #008080 } // Name.Attribute
.nb { color: #EEFFFF } // Name.Builtin
.nc { color: #FFCB6B; font-weight: bold } // Name.Class
.no { color: #008080 } // Name.Constant
.ni { color: #800080 } // Name.Entity
.ne { color: #900; font-weight: bold } // Name.Exception
.nf { color: #82AAFF; font-weight: bold } // Name.Function
.nn { color: #555 } // Name.Namespace
.nt { color: #FFCB6B } // Name.Tag
.nv { color: #EEFFFF } // Name.Variable
.ow { font-weight: bold } // Operator.Word
.w { color: #EEFFFF } // Text.Whitespace
.mf { color: #F78C6C } // Literal.Number.Float
.mh { color: #F78C6C } // Literal.Number.Hex
.mi { color: #F78C6C } // Literal.Number.Integer
.mo { color: #F78C6C } // Literal.Number.Oct
.sb { color: #C3E88D } // Literal.String.Backtick
.sc { color: #C3E88D } // Literal.String.Char
.sd { color: #C3E88D } // Literal.String.Doc
.s2 { color: #C3E88D } // Literal.String.Double
.se { color: #EEFFFF } // Literal.String.Escape
.sh { color: #C3E88D } // Literal.String.Heredoc
.si { color: #C3E88D } // Literal.String.Interpol
.sx { color: #C3E88D } // Literal.String.Other
.sr { color: #C3E88D } // Literal.String.Regex
.s1 { color: #C3E88D } // Literal.String.Single
.ss { color: #C3E88D } // Literal.String.Symbol
.bp { color: #999 } // Name.Builtin.Pseudo
.vc { color: #FFCB6B } // Name.Variable.Class
.vg { color: #EEFFFF } // Name.Variable.Global
.vi { color: #EEFFFF } // Name.Variable.Instance
.il { color: #F78C6C } // Literal.Number.Integer.Long
}
}
// Mode selection
// --------------
// Classic skin (always light mode)
// Assign outside of the if construct to establish global variable scope
$brand-color: $lm-brand-color;
$brand-color-light: $lm-brand-color-light;
$brand-color-dark: $lm-brand-color-dark;
$site-title-color: $lm-site-title-color;
$text-color: $lm-text-color;
$background-color: $lm-background-color;
$code-background-color: $lm-code-background-color;
$link-base-color: $lm-link-base-color;
$link-visited-color: $lm-link-visited-color;
$link-hover-color: $lm-link-hover-color;
$border-color-01: $lm-border-color-01;
$border-color-02: $lm-border-color-02;
$border-color-03: $lm-border-color-03;
$table-text-color: $lm-table-text-color;
$table-zebra-color: $lm-table-zebra-color;
$table-header-bg-color: $lm-table-header-bg-color;
$table-header-border: $lm-table-header-border;
$table-border-color: $lm-table-border-color;
@if $color-scheme-auto {
// Auto mode
:root {
--minima-brand-color: #{$lm-brand-color};
--minima-brand-color-light: #{$lm-brand-color-light};
--minima-brand-color-dark: #{$lm-brand-color-dark};
--minima-site-title-color: #{$lm-site-title-color};
--minima-text-color: #{$lm-text-color};
--minima-background-color: #{$lm-background-color};
--minima-code-background-color: #{$lm-code-background-color};
--minima-link-base-color: #{$lm-link-base-color};
--minima-link-visited-color: #{$lm-link-visited-color};
--minima-link-hover-color: #{$lm-link-hover-color};
--minima-border-color-01: #{$lm-border-color-01};
--minima-border-color-02: #{$lm-border-color-02};
--minima-border-color-03: #{$lm-border-color-03};
--minima-table-text-color: #{$lm-table-text-color};
--minima-table-zebra-color: #{$lm-table-zebra-color};
--minima-table-header-bg-color: #{$lm-table-header-bg-color};
--minima-table-header-border: #{$lm-table-header-border};
--minima-table-border-color: #{$lm-table-border-color};
}
@include lm-highlight;
@media (prefers-color-scheme: dark) {
:root {
--minima-brand-color: #{$dm-brand-color};
--minima-brand-color-light: #{$dm-brand-color-light};
--minima-brand-color-dark: #{$dm-brand-color-dark};
--minima-site-title-color: #{$dm-site-title-color};
--minima-text-color: #{$dm-text-color};
--minima-background-color: #{$dm-background-color};
--minima-code-background-color: #{$dm-code-background-color};
--minima-link-base-color: #{$dm-link-base-color};
--minima-link-visited-color: #{$dm-link-visited-color};
--minima-link-hover-color: #{$dm-link-hover-color};
--minima-border-color-01: #{$dm-border-color-01};
--minima-border-color-02: #{$dm-border-color-02};
--minima-border-color-03: #{$dm-border-color-03};
--minima-table-text-color: #{$dm-table-text-color};
--minima-table-zebra-color: #{$dm-table-zebra-color};
--minima-table-header-bg-color: #{$dm-table-header-bg-color};
--minima-table-header-border: #{$dm-table-header-border};
--minima-table-border-color: #{$dm-table-border-color};
}
@include dm-highlight;
}
$brand-color: var(--minima-brand-color);
$brand-color-light: var(--minima-brand-color-light);
$brand-color-dark: var(--minima-brand-color-dark);
$site-title-color: var(--minima-site-title-color);
$text-color: var(--minima-text-color);
$background-color: var(--minima-background-color);
$code-background-color: var(--minima-code-background-color);
$link-base-color: var(--minima-link-base-color);
$link-visited-color: var(--minima-link-visited-color);
$link-hover-color: var(--minima-link-hover-color);
$border-color-01: var(--minima-border-color-01);
$border-color-02: var(--minima-border-color-02);
$border-color-03: var(--minima-border-color-03);
$table-text-color: var(--minima-table-text-color);
$table-zebra-color: var(--minima-table-zebra-color);
$table-header-bg-color: var(--minima-table-header-bg-color);
$table-header-border: var(--minima-table-header-border);
$table-border-color: var(--minima-table-border-color);
} @else if $color-scheme-dark {
// Dark skin (always dark mode)
$brand-color: $dm-brand-color;
$brand-color-light: $dm-brand-color-light;
$brand-color-dark: $dm-brand-color-dark;
$site-title-color: $dm-site-title-color;
$text-color: $dm-text-color;
$background-color: $dm-background-color;
$code-background-color: $dm-code-background-color;
$link-base-color: $dm-link-base-color;
$link-visited-color: $dm-link-visited-color;
$link-hover-color: $dm-link-hover-color;
$border-color-01: $dm-border-color-01;
$border-color-02: $dm-border-color-02;
$border-color-03: $dm-border-color-03;
$table-text-color: $dm-table-text-color;
$table-zebra-color: $dm-table-zebra-color;
$table-header-bg-color: $dm-table-header-bg-color;
$table-header-border: $dm-table-header-border;
$table-border-color: $dm-table-border-color;
@include dm-highlight;
} @else {
// Classic skin syntax highlighting
@include lm-highlight;
}

View File

@ -0,0 +1,5 @@
@charset "utf-8";
$color-scheme-auto: false;
$color-scheme-dark: false;
@import "minima/skins/auto";

View File

@ -0,0 +1,5 @@
@charset "utf-8";
$color-scheme-auto: false;
$color-scheme-dark: true;
@import "minima/skins/auto";

View File

@ -0,0 +1,5 @@
@charset "utf-8";
$sol-is-auto: false;
$sol-is-dark: true;
@import "minima/skins/solarized";

View File

@ -0,0 +1,4 @@
@charset "utf-8";
$sol-is-auto: false;
@import "minima/skins/solarized";

View File

@ -0,0 +1,201 @@
@charset "utf-8";
// Solarized skin
// ==============
// Created by Sander Voerman <mailto:sander@savoerman.nl> using the Solarized
// color scheme by Ethan Schoonover <https://ethanschoonover.com/solarized>.
// This style sheet implements three options for the minima.skin setting:
// "solarized-light" for light mode, "solarized-dark" for dark mode, and
// "solarized" for light or dark mode depending on user preference.
$sol-is-auto: true !default;
$sol-is-dark: false !default;
// Color scheme
// ------------
// The inline comments show the canonical L*a*b values for each color.
$sol-base03: #002b36; // 15 -12 -12
$sol-base02: #073642; // 20 -12 -12
$sol-base01: #586e75; // 45 -07 -07
$sol-base00: #657b83; // 50 -07 -07
$sol-base0: #839496; // 60 -06 -03
$sol-base1: #93a1a1; // 65 -05 -02
$sol-base2: #eee8d5; // 92 -00 10
$sol-base3: #fdf6e3; // 97 00 10
$sol-yellow: #b58900; // 60 10 65
$sol-orange: #cb4b16; // 50 50 55
$sol-red: #dc322f; // 50 65 45
$sol-magenta: #d33682; // 50 65 -05
$sol-violet: #6c71c4; // 50 15 -45
$sol-blue: #268bd2; // 55 -10 -45
$sol-cyan: #2aa198; // 60 -35 -05
$sol-green: #859900; // 60 -20 65
// Mixed colors
// ------------
// While not part of the original Solarized base tones, these derived tones
// are meant to replicate the visual style of the classic skin. They should
// not be used in cases where sufficiently contrasting colors are needed.
$sol-light-mix1: mix($sol-base1, $sol-base3);
$sol-light-mix2: mix($sol-blue, $sol-base00);
$sol-light-mix3: mix($sol-base2, $sol-base3);
$sol-dark-mix1: mix($sol-base01, $sol-base03);
$sol-dark-mix2: mix($sol-blue, $sol-base0);
$sol-dark-mix3: mix($sol-base02, $sol-base03);
// Mode selection
// --------------
$sol-mono3: $sol-base3;
$sol-mono2: $sol-base2;
$sol-mono1: $sol-base1;
$sol-mono00: $sol-base00;
$sol-mono01: $sol-base01;
$sol-mix1: $sol-light-mix1;
$sol-mix2: $sol-light-mix2;
$sol-mix3: $sol-light-mix3;
@if $sol-is-dark {
$sol-mono3: $sol-base03;
$sol-mono2: $sol-base02;
$sol-mono1: $sol-base01;
$sol-mono00: $sol-base0;
$sol-mono01: $sol-base1;
$sol-mix1: $sol-dark-mix1;
$sol-mix2: $sol-dark-mix2;
$sol-mix3: $sol-dark-mix3;
}
@if $sol-is-auto {
:root {
--solarized-mono3: #{$sol-base3};
--solarized-mono2: #{$sol-base2};
--solarized-mono1: #{$sol-base1};
--solarized-mono00: #{$sol-base00};
--solarized-mono01: #{$sol-base01};
--solarized-mix1: #{$sol-light-mix1};
--solarized-mix2: #{$sol-light-mix2};
--solarized-mix3: #{$sol-light-mix3};
}
@media (prefers-color-scheme: dark) {
:root {
--solarized-mono3: #{$sol-base03};
--solarized-mono2: #{$sol-base02};
--solarized-mono1: #{$sol-base01};
--solarized-mono00: #{$sol-base0};
--solarized-mono01: #{$sol-base1};
--solarized-mix1: #{$sol-dark-mix1};
--solarized-mix2: #{$sol-dark-mix2};
--solarized-mix3: #{$sol-dark-mix3};
}
}
$sol-mono3: var(--solarized-mono3);
$sol-mono2: var(--solarized-mono2);
$sol-mono1: var(--solarized-mono1);
$sol-mono00: var(--solarized-mono00);
$sol-mono01: var(--solarized-mono01);
$sol-mix1: var(--solarized-mix1);
$sol-mix2: var(--solarized-mix2);
$sol-mix3: var(--solarized-mix3);
}
// Minima color variables
// ----------------------
$brand-color: $sol-mono1 !default;
$brand-color-light: $sol-mix1 !default;
$brand-color-dark: $sol-mono00 !default;
$site-title-color: $sol-mono00 !default;
$text-color: $sol-mono01 !default;
$background-color: $sol-mono3 !default;
$code-background-color: $sol-mono2 !default;
$link-base-color: $sol-blue !default;
$link-visited-color: $sol-mix2 !default;
$link-hover-color: $sol-mono00 !default;
$border-color-01: $brand-color-light !default;
$border-color-02: $sol-mono1 !default;
$border-color-03: $sol-mono00 !default;
$table-text-color: $sol-mono00 !default;
$table-zebra-color: $sol-mix3 !default;
$table-header-bg-color: $sol-mono2 !default;
$table-header-border: $sol-mono1 !default;
$table-border-color: $sol-mono1 !default;
// Syntax highlighting styles
// --------------------------
.highlight {
.c { color: $sol-mono1; font-style: italic } // Comment
.err { color: $sol-red } // Error
.k { color: $sol-mono01; font-weight: bold } // Keyword
.o { color: $sol-mono01; font-weight: bold } // Operator
.cm { color: $sol-mono1; font-style: italic } // Comment.Multiline
.cp { color: $sol-mono1; font-weight: bold } // Comment.Preproc
.c1 { color: $sol-mono1; font-style: italic } // Comment.Single
.cs { color: $sol-mono1; font-weight: bold; font-style: italic } // Comment.Special
.gd { color: $sol-red } // Generic.Deleted
.gd .x { color: $sol-red } // Generic.Deleted.Specific
.ge { color: $sol-mono00; font-style: italic } // Generic.Emph
.gr { color: $sol-red } // Generic.Error
.gh { color: $sol-mono1 } // Generic.Heading
.gi { color: $sol-green } // Generic.Inserted
.gi .x { color: $sol-green } // Generic.Inserted.Specific
.go { color: $sol-mono00 } // Generic.Output
.gp { color: $sol-mono00 } // Generic.Prompt
.gs { color: $sol-mono01; font-weight: bold } // Generic.Strong
.gu { color: $sol-mono1 } // Generic.Subheading
.gt { color: $sol-red } // Generic.Traceback
.kc { color: $sol-mono01; font-weight: bold } // Keyword.Constant
.kd { color: $sol-mono01; font-weight: bold } // Keyword.Declaration
.kp { color: $sol-mono01; font-weight: bold } // Keyword.Pseudo
.kr { color: $sol-mono01; font-weight: bold } // Keyword.Reserved
.kt { color: $sol-violet; font-weight: bold } // Keyword.Type
.m { color: $sol-cyan } // Literal.Number
.s { color: $sol-magenta } // Literal.String
.na { color: $sol-cyan } // Name.Attribute
.nb { color: $sol-blue } // Name.Builtin
.nc { color: $sol-violet; font-weight: bold } // Name.Class
.no { color: $sol-cyan } // Name.Constant
.ni { color: $sol-violet } // Name.Entity
.ne { color: $sol-violet; font-weight: bold } // Name.Exception
.nf { color: $sol-blue; font-weight: bold } // Name.Function
.nn { color: $sol-mono00 } // Name.Namespace
.nt { color: $sol-blue } // Name.Tag
.nv { color: $sol-cyan } // Name.Variable
.ow { color: $sol-mono01; font-weight: bold } // Operator.Word
.w { color: $sol-mono1 } // Text.Whitespace
.mf { color: $sol-cyan } // Literal.Number.Float
.mh { color: $sol-cyan } // Literal.Number.Hex
.mi { color: $sol-cyan } // Literal.Number.Integer
.mo { color: $sol-cyan } // Literal.Number.Oct
.sb { color: $sol-magenta } // Literal.String.Backtick
.sc { color: $sol-magenta } // Literal.String.Char
.sd { color: $sol-magenta } // Literal.String.Doc
.s2 { color: $sol-magenta } // Literal.String.Double
.se { color: $sol-magenta } // Literal.String.Escape
.sh { color: $sol-magenta } // Literal.String.Heredoc
.si { color: $sol-magenta } // Literal.String.Interpol
.sx { color: $sol-magenta } // Literal.String.Other
.sr { color: $sol-green } // Literal.String.Regex
.s1 { color: $sol-magenta } // Literal.String.Single
.ss { color: $sol-magenta } // Literal.String.Symbol
.bp { color: $sol-mono1 } // Name.Builtin.Pseudo
.vc { color: $sol-cyan } // Name.Variable.Class
.vg { color: $sol-cyan } // Name.Variable.Global
.vi { color: $sol-cyan } // Name.Variable.Instance
.il { color: $sol-cyan } // Literal.Number.Integer.Long
}

View File

@ -1,29 +1,18 @@
---
<!-- ---
layout: page
title: About
---
permalink: /about/
--- -->
<p class="message">
Hey there! This page is included as an example. Feel free to customize it for your own use upon downloading. Carry on!
</p>
This is the base Jekyll theme. You can find out more info about customizing your Jekyll theme, as well as basic Jekyll usage documentation at [jekyllrb.com](https://jekyllrb.com/)
In the novel, *The Strange Case of Dr. Jekyll and Mr. Hyde*, Mr. Poole is Dr. Jekyll's virtuous and loyal butler. Similarly, Poole is an upstanding and effective butler that helps you build Jekyll themes. It's made by [@mdo](https://twitter.com/mdo).
You can find the source code for Minima at GitHub:
[jekyll][jekyll-organization] /
[minima](https://github.com/jekyll/minima)
There are currently two themes built on Poole:
You can find the source code for Jekyll at GitHub:
[jekyll][jekyll-organization] /
[jekyll](https://github.com/jekyll/jekyll)
- [Hyde](https://hyde.getpoole.com)
- [Lanyon](https://lanyon.getpoole.com)
Learn more and contribute on [GitHub](https://github.com/poole).
## Setup
Some fun facts about the setup of this project include:
- Built for [Jekyll](https://jekyllrb.com)
- Developed on GitHub and hosted for free on [GitHub Pages](https://pages.github.com)
- Coded with [Atom](https://atom.io), an amazing open source code editor
Have questions or suggestions? Feel free to [open an issue on GitHub](https://github.com/poole/poole/issues/new) or [ask me on Twitter](https://twitter.com/mdo).
Thanks for reading!
[jekyll-organization]: https://github.com/jekyll

View File

@ -1,18 +0,0 @@
---
layout: default
title: Archive
---
# Archive
Browse all posts by month and year.
{% assign postsByYearMonth = site.posts | group_by_exp: "post", "post.date | date: '%B %Y'" %}
{% for yearMonth in postsByYearMonth %}
<h2>{{ yearMonth.name }}</h2>
<ul>
{% for post in yearMonth.items %}
<li><a href="{{ post.url }}">{{ post.title }}</a></li>
{% endfor %}
</ul>
{% endfor %}

7
assets/css/style.scss Normal file
View File

@ -0,0 +1,7 @@
---
# Only the main Sass file needs front matter (the dashes are enough)
---
@import
"minima/skins/{{ site.minima.skin | default: 'classic' }}",
"minima/initialize";

Binary file not shown.

After

Width:  |  Height:  |  Size: 39 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 34 KiB

View File

@ -0,0 +1,18 @@
---
permalink: /assets/minima-social-icons.svg
---
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
{% comment %}
Iterate through {{ site.minima.social_links }} and render platform related SVG-symbol
unless the platform is "rss" because we need the "rss" symbol for the `Subscribe` link
in the footer and therefore inject the "rss" icon outside the iteration loop.
{% endcomment %}
{% for entry in site.minima.social_links %}
{%- assign symbol_id = entry.platform -%}
{%- unless symbol_id == "rss" -%}
{%- include svg_symbol.html key = symbol_id -%}
{% endunless %}
{%- endfor -%}
{%- include svg_symbol.html key = "rss" -%}
</svg>

View File

@ -1,28 +0,0 @@
---
layout: null
---
<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
<title>{{ site.title }}</title>
<link href="{{ '/atom.xml' | relative_url }}" rel="self"/>
<link href="{{ site.url }}{{ site.baseurl }}/"/>
<updated>{{ site.time | date_to_xmlschema }}</updated>
<id>{{ site.url }}</id>
<author>
<name>{{ site.author.name }}</name>
<email>{{ site.author.email }}</email>
</author>
{% for post in site.posts %}
<entry>
<title>{{ post.title | xml_escape }}</title>
<link href="{{ site.url }}{{ site.baseurl }}{{ post.url }}"/>
<updated>{{ post.date | date_to_xmlschema }}</updated>
<id>{{ site.url }}{{ post.id }}</id>
<content type="html">{{ post.content | xml_escape }}</content>
</entry>
{% endfor %}
</feed>

Binary file not shown.

View File

@ -1,23 +0,0 @@
---
layout: default
title: "vLLM: Easy, Fast, and Cheap LLM Serving with PagedAttention"
---
{% for post in paginator.posts %}
<article class="post">
{{ post.content }}
</article>
{% endfor %}
<!-- <div class="pagination">
{% if paginator.next_page %}
<a class="pagination-item older" href="{{ paginator.next_page_path | relative_url }}">Older</a>
{% else %}
<span class="pagination-item older">Older</span>
{% endif %}
{% if paginator.previous_page %}
<a class="pagination-item newer" href="{{ paginator.previous_page_path | prepend: relative_url }}">Newer</a>
{% else %}
<span class="pagination-item newer">Newer</span>
{% endif %}
</div> -->

9
index.md Normal file
View File

@ -0,0 +1,9 @@
---
#
# By default, content added below the "---" mark will appear in the home page
# between the top bar and the list of recent posts.
# To change the home page layout, edit the _layouts/home.html file.
# See: https://jekyllrb.com/docs/themes/#overriding-theme-defaults
#
layout: home
---

24
minima.gemspec Normal file
View File

@ -0,0 +1,24 @@
# frozen_string_literal: true
Gem::Specification.new do |spec|
spec.name = "minima"
spec.version = "3.0.0.dev"
spec.authors = ["Joel Glovier"]
spec.email = ["jglovier@github.com"]
spec.summary = "A beautiful, minimal theme for Jekyll."
spec.homepage = "https://github.com/jekyll/minima"
spec.license = "MIT"
spec.metadata["plugin_type"] = "theme"
spec.files = `git ls-files -z`.split("\x0").select do |f|
f.match(%r!^(assets|_(includes|layouts|sass)/|(LICENSE|README)((\.(txt|md|markdown)|$)))!i)
end
spec.add_runtime_dependency "jekyll", ">= 3.5", "< 5.0"
spec.add_runtime_dependency "jekyll-feed", "~> 0.9"
spec.add_runtime_dependency "jekyll-seo-tag", "~> 2.1"
spec.add_development_dependency "bundler"
end

View File

@ -1,19 +0,0 @@
# frozen_string_literal: true
Gem::Specification.new do |spec|
spec.name = "poole-for-jekyll"
spec.version = "3.0.0"
spec.authors = ["Mark Otto"]
spec.email = ["markdotto@gmail.com"]
spec.summary = "The Jekyll Butler. A no frills responsive Jekyll blog theme."
spec.homepage = "https://getpoole.com"
spec.license = "MIT"
spec.files = `git ls-files -z`.split("\x0").select { |f| f.match(%r!^(assets|_layouts|_includes|_sass|LICENSE|README)!i) }
spec.add_runtime_dependency "jekyll", "~> 4.0"
spec.add_development_dependency "bundler", "~> 1.16"
spec.add_development_dependency "rake", "~> 12.0"
end

1
readme_banner.svg Normal file

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 26 KiB

BIN
screenshot.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 94 KiB

6
script/bootstrap Executable file
View File

@ -0,0 +1,6 @@
#!/bin/sh
set -e
gem install bundler
bundle install

6
script/build Executable file
View File

@ -0,0 +1,6 @@
#!/bin/sh
set -e
echo "Building the example site..."
bundle exec jekyll build

15
script/cibuild Executable file
View File

@ -0,0 +1,15 @@
#!/bin/sh
set -e
script/build
if test -e "./_site/index.html";then
echo "It builds!"
rm -Rf _site
else
echo "Huh. That's odd. The example site doesn't seem to build."
exit 1
fi
gem build minima.gemspec

3
script/server Executable file
View File

@ -0,0 +1,3 @@
#!/bin/sh
bundle exec jekyll serve

View File

@ -1,47 +0,0 @@
---
# Use a comment to ensure Jekyll reads the file to be transformed into CSS later
# only main files contain this front matter, not partials.
---
//
// ___
// /\_ \
// _____ ___ ___\//\ \ __
// /\ '__`\ / __`\ / __`\\ \ \ /'__`\
// \ \ \_\ \/\ \_\ \/\ \_\ \\_\ \_/\ __/
// \ \ ,__/\ \____/\ \____//\____\ \____\
// \ \ \/ \/___/ \/___/ \/____/\/____/
// \ \_\
// \/_/
//
// Designed, built, and released under MIT license by @mdo. Learn more at
// https://github.com/poole/poole.
@import "variables";
@import "base";
@import "type";
@import "syntax";
@import "code";
@import "layout";
@import "masthead";
@import "posts";
@import "pagination";
@import "message";
@import "toc";
// Sass for creating the swatches
.colors {
display: grid;
grid-template-columns: max-content 1fr;
dt {
width: 3rem;
height: 3rem;
border-radius: var(--border-radius);
box-shadow: inset 0 0 0 1px rgba(255,255,255,.15);
}
dd {
margin-left: var(--spacer);
}
}