Repository: mpsq/arewewaylandyet Branch: master Commit: 0bd8456ebda6 Files: 33 Total size: 29.9 KB Directory structure: gitextract_iy1hlo00/ ├── .eslintrc.js ├── .github/ │ ├── pull_request_template.md │ └── workflows/ │ ├── hugo-ci.yml │ └── typescript-ci.yml ├── .gitignore ├── .ignore ├── CODEOWNERS ├── LICENSE.md ├── README.md ├── archetypes/ │ └── default.md ├── config.toml ├── content/ │ └── .gitkeep ├── husky.config.js ├── layouts/ │ ├── 404.html │ ├── _default/ │ │ └── baseof.html │ ├── index.html │ ├── partials/ │ │ ├── footer.html │ │ ├── head.html │ │ ├── header.html │ │ └── title.html │ └── robots.txt ├── lint-staged.config.js ├── netlify.toml ├── package.json ├── prettier.config.js ├── src/ │ ├── css/ │ │ ├── main.css │ │ └── normalize.css │ └── scripts/ │ ├── theme-preload.ts │ ├── theme-switcher.ts │ └── theme-utils.ts ├── static/ │ ├── _headers │ └── img/ │ └── site.webmanifest └── tsconfig.json ================================================ FILE CONTENTS ================================================ ================================================ FILE: .eslintrc.js ================================================ const path = require("path") module.exports = { env: { browser: true, es6: true, }, extends: [ "standard-with-typescript", "plugin:prettier/recommended", "prettier", "prettier/@typescript-eslint", "prettier/babel", "prettier/standard", ], parser: "@typescript-eslint/parser", parserOptions: { ecmaFeatures: {}, ecmaVersion: 2018, project: path.resolve(__dirname, "./tsconfig.json"), tsconfigRootDir: __dirname, sourceType: "module", }, plugins: ["@typescript-eslint", "babel", "prettier", "standard"], rules: { "@typescript-eslint/consistent-type-definitions": ["error", "type"], "@typescript-eslint/no-explicit-any": "off", "quote-props": ["error", "as-needed"], "object-shorthand": ["error", "always"], "no-console": ["warn", { allow: ["warn", "error", "info"] }], }, } ================================================ FILE: .github/pull_request_template.md ================================================ ## Description Short description of the changes: ## Checklist I have: - [ ] 🤳 made sure that what I am adding is an app for end users, not a developer tool / library (no "wl-clipboard-rs") - [ ] 🔗 checked that the link I am using refers to the root of the project (example, https://mpv.io) or GitHub repo **if the first is not available** - [ ] 🤓 checked BOTH the name and the casing of the project(s) I am adding ("GNOME Terminal" and not "gnome-terminal", "bemenu" and not "Bemenu", etc.) - [ ] 💣 checked that I am using spaces for indentation and that my levels are correct (**no tabs!**) - [ ] ✋ checked that my section has the correct casing ("My section", and not "My Section") - [ ] 📝 checked that the projects and / or the section are alphabetically sorted ("Clipboard manager" then "Color picker", "bemenu" then "Fuzzel") ================================================ FILE: .github/workflows/hugo-ci.yml ================================================ name: Hugo CI on: [push] jobs: check: runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 - name: Setup Hugo uses: peaceiris/actions-hugo@v2 - name: Test build run: hugo ================================================ FILE: .github/workflows/typescript-ci.yml ================================================ name: TypeScript CI on: [push] jobs: check: runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 - name: Setup NodeJS uses: actions/setup-node@v1 with: node-version: 12.x - name: Install dependencies run: npm install - name: Linting run: npm run ci:lint env: CI: true - name: Type checking run: npm run ci:type-check env: CI: true ================================================ FILE: .gitignore ================================================ node_modules /.log /public /resources ================================================ FILE: .ignore ================================================ package-lock.json ================================================ FILE: CODEOWNERS ================================================ * @mpsq ================================================ FILE: LICENSE.md ================================================ The MIT License Copyright (c) 2020 Méril P. 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. ================================================ FILE: README.md ================================================ # [Are we Wayland yet?](https://arewewaylandyet.com) I think so... This is an opinionated answer, if you disagree or if you think something is missing, I would love to hear about it, please open an issue or a pull request. # Discussion I posted this website on the [Arch Linux subreddit](https://www.reddit.com/r/archlinux/). The post has many interesting comments and valuable links, it is worth [having a look](https://www.reddit.com/r/archlinux/comments/jm8743/are_we_wayland_yet/). # How to build ## Prerequisites - [Hugo](https://github.com/gohugoio/hugo) 0.78+ - [NodeJS](https://nodejs.org) 12 with `npm` or `yarn` ## Steps 1. Get the code ```bash git clone git@github.com:mpsq/arewewaylandyet.git cd arewewaylandyet ``` 2. Install dependencies ```bash npm install # yarn will work too ``` 3. Run the development server ```bash hugo server -D ``` The server should be accessible at http://localhost:1313. ================================================ FILE: archetypes/default.md ================================================ --- title: "{{ replace .Name "-" " " | title }}" date: {{ .Date }} draft: true --- ================================================ FILE: config.toml ================================================ baseURL = "https://arewewaylandyet.com/" languageCode = "en-us" title = "Are we Wayland yet?" disableKinds = ["taxonomy", "taxonomyTerm"] enableRobotsTXT = true assetDir = "src" [sitemap] changefreq = "monthly" filename = "sitemap.xml" priority = 0.5 [build] noJSConfigInAssets = true ================================================ FILE: content/.gitkeep ================================================ ================================================ FILE: husky.config.js ================================================ module.exports = { hooks: { "pre-commit": "lint-staged", }, } ================================================ FILE: layouts/404.html ================================================ {{ define "main"}}
{{ partial "title" . }}

404

If you want to know if Wayland is ready, check this page instead.

{{ end }} ================================================ FILE: layouts/_default/baseof.html ================================================ {{ partial "head" . }} {{ partial "header" . }} {{ block "main" . }}{{ end }} {{ partial "footer" . }} ================================================ FILE: layouts/index.html ================================================ {{ define "main" }}
{{ partial "title" . }}

Mostly...

OK, but where is my:

Missing:

That's great, but you did not mention nvidia...

{{ end }} ================================================ FILE: layouts/partials/footer.html ================================================ ================================================ FILE: layouts/partials/head.html ================================================ {{ .Title }} {{ $normalizeStyles := resources.Get "css/normalize.css" }} {{ $mainStyles := resources.Get "css/main.css" }} {{ $themePreload := resources.Get "scripts/theme-preload.ts" | js.Build }} {{ $themeSwitcher := resources.Get "scripts/theme-switcher.ts" | js.Build }} {{ if eq (getenv "HUGO_ENV") "production" }} {{ $normalizeStyles = $normalizeStyles | resources.Minify | resources.Fingerprint "sha512" }} {{ $mainStyles = $mainStyles | resources.Minify | resources.Fingerprint "sha512" }} {{ $themePreload = $themePreload | resources.Minify | resources.Fingerprint "sha512" }} {{ $themeSwitcher = $themeSwitcher | resources.Minify | resources.Fingerprint "sha512" }} {{ end }} ================================================ FILE: layouts/partials/header.html ================================================ ================================================ FILE: layouts/partials/title.html ================================================

Are we Wayland yet?

================================================ FILE: layouts/robots.txt ================================================ User-agent: * Allow: /sitemap.xml Sitemap: https://arewewaylandyet.com/sitemap.xml Host: https://arewewaylandyet.com ================================================ FILE: lint-staged.config.js ================================================ module.exports = { "*.ts": ["npm run ci:lint", "npm run ci:type-check"], } ================================================ FILE: netlify.toml ================================================ [build] base = "/" command = "hugo --gc --minify" publish = "public" [context.production.environment] HUGO_VERSION = "0.78.0" HUGO_ENV = "production" [context.deploy-preview.environment] HUGO_VERSION = "0.78.0" HUGO_ENV = "production" ================================================ FILE: package.json ================================================ { "name": "arewewaylandyet.get", "version": "0.0.1", "license": "MIT", "scripts": { "ci:lint": "eslint 'src/**/*.ts' --max-warnings=0", "ci:type-check": "tsc --noEmit", "type-check:watch": "npm run ci:type-check -- --watch" }, "dependencies": { "typescript": "4.0.5" }, "devDependencies": { "@typescript-eslint/eslint-plugin": "4.6.1", "@typescript-eslint/parser": "4.6.1", "eslint": "7.13.0", "eslint-config-prettier": "6.15.0", "eslint-config-standard": "16.0.1", "eslint-config-standard-with-typescript": "19.0.1", "eslint-import-resolver-typescript": "2.3.0", "eslint-plugin-babel": "5.3.1", "eslint-plugin-import": "2.22.1", "eslint-plugin-node": "11.1.0", "eslint-plugin-prettier": "3.1.4", "eslint-plugin-promise": "4.2.1", "eslint-plugin-standard": "4.0.2", "husky": "4.3.0", "lint-staged": "10.5.1", "prettier": "2.1.2" }, "browserslist": { "production": [ ">0.2%", "not dead", "not op_mini all" ], "development": [ "last 1 chrome version", "last 1 firefox version", "last 1 safari version" ] } } ================================================ FILE: prettier.config.js ================================================ module.exports = { arrowParens: "always", endOfLine: "auto", proseWrap: "always", trailingComma: "all", semi: false, overrides: [ { files: "*.js", options: { parser: "babel", }, }, { files: "*.md", options: { parser: "mdx", }, }, { files: "*.ts", options: { parser: "typescript", }, }, ], } ================================================ FILE: src/css/main.css ================================================ :root { --palette-black: #222222; --palette-gray: #666666; --palette-light-gray: #666666; --palette-green: #4caf50; --palette-nvidia: #76b900; /* official color */ --palette-red: #f44336; --palette-wayland: #ffbc00; /* official color */ --palette-white: #fafafa; } [data-theme="dark"] { --palette-black: #fafafa; --palette-white: #222222; --palette-gray: #aaaaaa; --palette-light-gray: #efefef; } html { font-size: 16px; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"; color: var(--palette-black); background: var(--palette-white); } a { color: var(--palette-gray); } small { font-size: 0.6rem; } button { border: none; background: transparent; outline: none; } .title--question { margin-top: 6rem; font-size: 3rem; color: var(--palette-gray); } .title--answer { margin: 4rem 0; font-size: 7rem; } .title--not-found { margin: 4rem 0; } .weight--400 { font-weight: 400; } .btn { padding: 0.25rem 0.5rem; color: var(--palette-black); border: 2px solid transparent; } .btn:hover { cursor: pointer; color: var(--palette-white); background: var(--palette-black); } .btn:focus { outline: 2px dotted var(--palette-black); } .btn:active { border-color: var(--palette-wayland); } main { max-width: 800px; margin: 0 auto; padding: 0 1rem; } .btn--dark-mode { position: absolute; right: 1rem; top: 1rem; } .wayland { text-decoration: none; color: var(--palette-light-gray); } .wayland:hover { color: var(--palette-white); } .accent--wayland { padding: 0 8px; background: var(--palette-wayland); } .accent--nvidia { padding: 0 8px; background: var(--palette-nvidia); } .section { margin: 0 auto; margin-top: 3rem; } .section__title { font-size: 1.4rem; font-weight: bolder; } .section__list { margin-top: 2rem; padding: 0; font-size: 1.1rem; text-align: left; list-style-type: none; } .list__item--kinda, .list__item--ok, .list__item--ko { position: relative; margin: 0.75rem 0; padding-left: 20px; } .list__item--kinda:before, .list__item--ok:before { position: absolute; display: inline-block; left: 0.25rem; height: 8px; width: 4px; top: 4px; transform: rotate(45deg); content: " "; border-bottom: 3px solid var(--palette-green); border-right: 3px solid var(--palette-green); } .list__item--ko:before, .list__item--ko:after { position: absolute; left: 0.4rem; top: 4px; height: 12px; width: 3px; content: " "; background: var(--palette-red); } .list__item--ko:before { transform: rotate(45deg); } .list__item--ko:after { transform: rotate(-45deg); } .list__item--kinda:before { border-color: var(--palette-gray); } .notes { max-width: 800px; margin: 0 auto; margin-top: 3rem; padding: 1rem 0; padding-top: 2rem; line-height: 1.5; border-top: 1px solid var(--palette-black); font-size: 0.9rem; } .notes__date { color: var(--palette-gray); } @media (max-width: 812px) { h1 { margin-top: 4rem; } h2 { margin: 3rem 0; font-size: 5rem; } } ================================================ FILE: src/css/normalize.css ================================================ /*! normalize.css v8.0.1 | MIT License | github.com/necolas/normalize.css */ html { line-height: 1.15; -webkit-text-size-adjust: 100%; } body { margin: 0; } main { display: block; } h1 { font-size: 2em; margin: 0.67em 0; } hr { box-sizing: content-box; height: 0; overflow: visible; } pre { font-family: monospace, monospace; font-size: 1em; } a { background-color: transparent; } abbr[title] { border-bottom: none; text-decoration: underline; text-decoration: underline dotted; } b, strong { font-weight: bolder; } code, kbd, samp { font-family: monospace, monospace; font-size: 1em; } small { font-size: 80%; } sub, sup { font-size: 75%; line-height: 0; position: relative; vertical-align: baseline; } sub { bottom: -0.25em; } sup { top: -0.5em; } img { border-style: none; } button, input, optgroup, select, textarea { font-family: inherit; font-size: 100%; line-height: 1.15; margin: 0; } button, input { overflow: visible; } button, select { text-transform: none; } button, [type="button"], [type="reset"], [type="submit"] { -webkit-appearance: button; } button::-moz-focus-inner, [type="button"]::-moz-focus-inner, [type="reset"]::-moz-focus-inner, [type="submit"]::-moz-focus-inner { border-style: none; padding: 0; } fieldset { padding: 0.35em 0.75em 0.625em; } legend { box-sizing: border-box; color: inherit; display: table; max-width: 100%; padding: 0; white-space: normal; } textarea { overflow: auto; } [type="checkbox"], [type="radio"] { box-sizing: border-box; padding: 0; } details { display: block; } summary { display: list-item; } template { display: none; } [hidden] { display: none; } ================================================ FILE: src/scripts/theme-preload.ts ================================================ import themeUtils from "./theme-utils" document.addEventListener("DOMContentLoaded", function () { const theme = localStorage.getItem("theme") if ( window.matchMedia("(prefers-color-scheme: dark)").matches && (theme == null || theme === "dark") ) { themeUtils.set(true) return } if (theme != null) { themeUtils.set(/dark/gi.test(theme)) } }) ================================================ FILE: src/scripts/theme-switcher.ts ================================================ import themeUtils from "./theme-utils" const btn = document.getElementById("dark-mode") function switchTheme(): void { if (btn != null) { themeUtils.set(/dark/gi.test(btn.textContent ?? "")) } } if (btn != null) { btn.addEventListener("click", switchTheme) } ================================================ FILE: src/scripts/theme-utils.ts ================================================ const _theme = { dark: ["Light", "dark"], light: ["Dark", "light"] } const set = (dark: boolean): void => { const [content, theme] = dark ? _theme.dark : _theme.light const btn = document.getElementById("dark-mode") if (btn != null) { btn.textContent = `${content} mode` document.documentElement.setAttribute("data-theme", theme) localStorage.setItem("theme", theme) } } export default { set, } ================================================ FILE: static/_headers ================================================ / Report-To: {"group":"rui","max_age":31536000,"endpoints":[{"url":"https://mpsq.report-uri.com/a/d/g"}],"include_subdomains":false} Content-Security-Policy: default-src 'none'; style-src 'self'; script-src 'self'; img-src 'self' data:; connect-src 'self'; font-src 'self' https://fonts.gstatic.com data:; manifest-src 'self'; prefetch-src 'self'; media-src data:; worker-src 'self'; frame-ancestors 'none'; base-uri 'self'; form-action 'self'; report-uri https://mpsq.report-uri.com/r/d/csp/enforce; report-to rui; X-Frame-Options: DENY X-XSS-Protection: 1; mode=block X-Content-Type-Options: nosniff Referrer-Policy: strict-origin-when-cross-origin Permissions-Policy: camera=(), geolocation=(), microphone=() Strict-Transport-Security: max-age=15768000 Cache-Control: public, max-age=60 /* Report-To: {"group":"rui","max_age":31536000,"endpoints":[{"url":"https://mpsq.report-uri.com/a/d/g"}],"include_subdomains":false} Content-Security-Policy: default-src 'none'; style-src 'self'; script-src 'self'; img-src 'self' data:; connect-src 'self'; font-src 'self' https://fonts.gstatic.com data:; manifest-src 'self'; prefetch-src 'self'; media-src data:; worker-src 'self'; frame-ancestors 'none'; base-uri 'self'; form-action 'self'; report-uri https://mpsq.report-uri.com/r/d/csp/enforce; report-to rui; X-Frame-Options: DENY X-XSS-Protection: 1; mode=block X-Content-Type-Options: nosniff Referrer-Policy: strict-origin-when-cross-origin Permissions-Policy: camera=(), geolocation=(), microphone=() Strict-Transport-Security: max-age=15768000 Cache-Control: public, max-age=60 /*.html NEL: {"report_to":"report-uri","max_age":31536000,"include_subdomains":false} /*.*.js Cache-Control: public, max-age=31536000 /*.*.txt Cache-Control: public, max-age=31536000 /*.*.css Cache-Control: public, max-age=31536000 /img/* Cache-Control: public, max-age=172800 /manifest.webmanifest Cache-Control: public, max-age=172800 ================================================ FILE: static/img/site.webmanifest ================================================ { "name": "", "short_name": "", "icons": [ { "src": "android-chrome-96x96.png", "sizes": "96x96", "type": "image/png" } ], "theme_color": "#ffffff", "background_color": "#ffffff", "display": "standalone" } ================================================ FILE: tsconfig.json ================================================ { "compilerOptions": { "allowJs": false, "target": "es5", "module": "esnext", "lib": ["esnext", "DOM"], "declaration": true, "declarationMap": true, "strict": true, "strictNullChecks": true, "strictFunctionTypes": true, "strictBindCallApply": true, "strictPropertyInitialization": true, "noImplicitThis": true, "alwaysStrict": true, "noUnusedLocals": true, "noUnusedParameters": true, "noImplicitReturns": true, "noFallthroughCasesInSwitch": true, "moduleResolution": "node", "allowSyntheticDefaultImports": true, "esModuleInterop": true, "isolatedModules": true, "resolveJsonModule": true, "jsx": "react", "noEmit": true, "noImplicitAny": false, "skipLibCheck": true, "forceConsistentCasingInFileNames": true, "baseUrl": "./", }, "include": ["src/"] }