Full Code of mpsq/arewewaylandyet for AI

master 0bd8456ebda6 cached
33 files
29.9 KB
10.0k tokens
1 symbols
1 requests
Download .txt
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"}}
<main aria-role="main">
	{{ partial "title" . }}
  <h2 class="title--answer">
    404
  </h2>
  <h2 class="title--not-found weight--400">
    If you want to know if Wayland is ready, check <a href="/">this page</a> instead.
  </h2>
</main>
{{ end }}


================================================
FILE: layouts/_default/baseof.html
================================================
<!DOCTYPE html>
<html lang="en">
	{{ partial "head" . }}
	<body>
		{{ partial "header" . }}
		{{ block "main" . }}{{ end }}
		{{ partial "footer" . }}
	</body>
</html>


================================================
FILE: layouts/index.html
================================================
{{ define "main" }}
<main aria-role="main">

	{{ partial "title" . }}

  <h2 class="title--answer">Mostly...</h2>

  <section class="section">
    <p class="section__title">OK, but where is my:</p>
    <ul class="section__list">
      <li class="list__item--ok">
        Application launcher:
        <a href="https://github.com/Kirottu/anyrun">Anyrun</a>,
        <a href="https://github.com/Cloudef/bemenu">bemenu</a>,
        <a href="https://codeberg.org/dnkl/fuzzel">Fuzzel</a>,
        <a href="https://code.rocketnine.space/tslocum/gmenu">gmenu</a>,
        <a href="https://github.com/nwg-piotr/nwg-launchers">nwg-launchers</a>,
        <a href="https://github.com/oknozor/onagre">Onagre</a>,
        <a href="https://github.com/lbonn/rofi">Rofi (lbonn's fork)</a>,
        <a href="https://github.com/philj56/tofi">Tofi</a>,
        <a href="https://ulauncher.io">Ulauncher</a>,
        <a href="https://sr.ht/~adnano/wmenu/">wmenu</a>,
        <a href="https://hg.sr.ht/~scoopta/wofi">Wofi</a>,
        <a href="https://github.com/l4l/yofi">yofi</a>
      </li>
      <li class="list__item--ok">
        Clipboard manager:
        <a href="https://github.com/sentriz/cliphist">cliphist</a>,
        <a href="https://github.com/yory8/clipman">Clipman</a>,
        <a href="https://github.com/bugaevc/wl-clipboard">wl-clipboard</a>
      </li>
      <li class="list__item--ok">
        Color picker:
        <a href="https://github.com/nwg-piotr/azote">Azote</a>,
        <a href="https://gitlab.gnome.org/World/gcolor3">gcolor3</a>,
        <a href="https://github.com/emersion/grim">grim</a>,
        <a href="https://github.com/hyprwm/hyprpicker">hyprpicker</a>
      </li>
      <li class="list__item--ok">
        Compiz support:
        <a href="https://github.com/WayfireWM/wayfire">Wayfire</a>
      </li>
      <li class="list__item--ok">
        Desktop environment:
        <a href="https://www.enlightenment.org">Enlightenment (experimental)</a>,
        <a href="https://www.gnome.org/">GNOME</a>,
        <a href="https://kde.org/plasma-desktop">KDE Plasma</a>,
        <a href="https://mate-desktop.org">MATE Desktop (partial)</a>
      </li>
      <li class="list__item--ok">
        Dock:
        <a href="https://sr.ht/~leon_plickat/LavaLauncher/">LavaLauncher</a>,
        <a href="https://github.com/nwg-piotr/nwg-dock">nwg-dock</a>
      </li>
      <li class="list__item--ok">
        Document viewer:
        <a href="https://git.pwmt.org/pwmt/zathura">zathura</a>
      </li>
      <li class="list__item--ok">
        Email client (GUI):
        <a href="https://help.gnome.org/users/evolution/stable/">Evolution</a>,
        <a href="https://www.thunderbird.net/en-US/">Thunderbird</a>
      </li>
      <li class="list__item--ok">
        File manager:
        <a href="https://github.com/linuxmint/nemo">Nemo</a>,
        <a href="https://github.com/lxde/pcmanfm">PCManFM</a>
      </li>
      <li class="list__item--ok">
        Gamma & day/night adjustment tool:
        <a href="https://gitlab.com/chinstrap/gammastep">Gammastep</a>,
        <a href="https://sr.ht/~kennylevinsen/wlsunset/">wlsunset</a>
      </li>
      <li class="list__item--ok">
        Image editor:
        <a href="https://gimp.org/">GIMP</a>,
        <a href="https://inkscape.org/">Inkscape</a>
      </li>
      <li class="list__item--ok">
        Image viewer:
        <a href="https://sr.ht/~exec64/imv/">imv</a>,
        <a href="https://nomacs.org/">nomacs</a>,
        <a href="https://github.com/artemsen/swayimg">swayimg</a>
      </li>
      <li class="list__item--ok">
        Keyboard remapper:
        <a href="https://github.com/snyball/Hawck">Hawck</a>,
        <a href="https://github.com/sezanzeb/input-remapper">input-remapper</a>,
        <a href="https://gitlab.com/interception/linux/tools">Interception Tools</a>,
        <a href="https://github.com/samvel1024/kbct">kbct</a>,
        <a href="https://github.com/rvaiya/keyd">keyd</a>,
        <a href="https://github.com/kmonad/kmonad">KMonad</a>,
        <a href="https://github.com/k0kubun/xremap">xremap</a>
      </li>
      <li class="list__item--ok">
        Login manager:
        <a href="https://sr.ht/~kennylevinsen/greetd/">greetd</a>,
        <a href="https://github.com/max-moser/lightdm-elephant-greeter">LightDM Elephant Greeter</a>,
        <a href="https://gitlab.com/marcusbritanicus/QtGreet">QtGreet</a>
      </li>
      <li class="list__item--ok">
        Network transparency:
        <a href="https://gitlab.freedesktop.org/mstoeckl/waypipe">Waypipe</a>
      </li>
      <li class="list__item--ok">
        Notification daemon:
        <a href="https://dunst-project.org">Dunst</a>,
        <a href="https://codeberg.org/dnkl/fnott">Fnott</a>,
        <a href="https://github.com/emersion/mako">mako</a>,
        <a href="https://github.com/ErikReider/SwayNotificationCenter">SwayNotificationCenter</a>
      </li>
      <li class="list__item--ok">
        Output/display configuration tool:
        <a href="https://sr.ht/~emersion/kanshi">kanshi</a>,
        <a href="https://github.com/nwg-piotr/nwg-displays">nwg-displays</a>,
        <a href="https://github.com/xyproto/wallutils">Wallutils</a>,
        <a href="https://github.com/artizirk/wdisplays">wdisplays</a>,
        <a href="https://sr.ht/~leon_plickat/wlopm">wlopm</a>,
        <a href="https://sr.ht/~emersion/wlr-randr">wlr-randr</a>
      </li>
      <li class="list__item--ok">
        Power menu:
        <a href="https://github.com/ArtsyMacaw/wlogout">wlogout</a>
      </li>
      <li class="list__item--ok">
        Remote desktop utility:
        <a href="https://www.freerdp.com/">FreeRDP</a>,
        <a href="https://github.com/any1/wayvnc">wayvnc</a>
      </li>
      <li class="list__item--ok">
        Screen lock tool:
        <a href="https://github.com/jovanlanik/gtklock">gtklock</a>,
        <a href="https://github.com/swaywm/swaylock">swaylock</a>,
        <a href="https://github.com/ifreund/waylock">Waylock</a>
      </li>
      <li class="list__item--ok">
        Screen recording tool:
        <a href="https://github.com/xlmnxp/blue-recorder">Blue Recorder</a>,
        <a href="https://github.com/SeaDve/Kooha">Kooha</a>,
        <a href="https://obsproject.com">OBS Studio</a>,
        <a href="https://github.com/ammen99/wf-recorder">wf-recorder</a>
      </li>
      <li class="list__item--ok">
        Screen sharing:
        <a href="https://github.com/emersion/xdg-desktop-portal-wlr">xdg-desktop-portal-wlr</a>
      </li>
      <li class="list__item--ok">
        Screenshot tool:
        <a href="https://flameshot.org/">Flameshot</a>,
        <a href="https://github.com/emersion/grim">grim</a>/<a href="https://github.com/emersion/slurp">slurp</a>,
        <a href="https://git.sr.ht/~whynothugo/shotman">Shotman</a>,
        <a href="https://github.com/jtheoof/swappy">swappy</a>
      </li>
      <li class="list__item--ok">
        Stacking compositor:
        <a href="https://hikari.acmelabs.space">hikari</a>,
        <a href="https://github.com/johanmalm/labwc">Labwc</a>,
        <a href="https://github.com/lirios/shell">Liri shell</a>
      </li>
      <li class="list__item--ok">
        Status bar:
        <a href="https://github.com/hcsubser/hybridbar">Hybridbar</a>,
        <a href="https://github.com/nwg-piotr/nwg-panel">nwg-panel</a>,
        <a href="https://github.com/Alexays/Waybar">Waybar</a>,
        <a href="https://gitlab.com/dnkl/yambar">Yambar</a>
      </li>
      <li class="list__item--ok">
        System monitoring widget:
        <a href="https://sr.ht/~kennylevinsen/wldash/">wldash</a>
      </li>
      <li class="list__item--ok">
        Terminal:
        <a href="https://github.com/alacritty/alacritty">Alacritty</a>,
        <a href="https://codeberg.org/dnkl/foot/">foot</a>,
        <a href="https://github.com/Keruspe/Germinal">Germinal</a>,
        <a href="https://sw.kovidgoyal.net/kitty/">kitty</a>,
        <a href="https://github.com/realh/roxterm">ROXTerm</a>,
        <a href="https://launchpad.net/sakura">Sakura</a>,
        <a href="https://terminator-gtk3.readthedocs.io/en/latest/">Terminator</a>,
        <a href="https://gnunn1.github.io/tilix-web/">Tilix</a>,
        <a href="https://wezfurlong.org/wezterm/">WezTerm</a>
      </li>
      <li class="list__item--ok">
        Tiling compositor:
        <a href="https://github.com/djpohly/dwl">dwl</a>,
        <a href="https://github.com/hyprwm/Hyprland">Hyprland</a>,
        <a href="https://www.qtile.org">Qtile</a>,
        <a href="https://github.com/ifreund/river">river</a>,
        <a href="https://github.com/swaywm/sway">Sway</a>,
        <a href="https://github.com/michaelforney/velox">velox</a>,
        <a href="https://github.com/inclement/vivarium">vivarium</a>
      </li>
      <li class="list__item--ok">
        User input simulating tool:
        <a href="https://gitlab.freedesktop.org/libinput/libei">libei</a>,
        <a href="https://github.com/atx/wtype">wtype</a>,
        <a href="https://github.com/ReimuNotMoe/ydotool">ydotool</a>
      </li>
      <li class="list__item--ok">
        Video player:
        <a href="https://github.com/Rafostar/clapper">Clapper</a>,
        <a href="https://mpv.io">mpv</a>
      </li>
      <li class="list__item--ok">
        Wallpaper manager:
        <a href="https://github.com/nwg-piotr/azote">Azote</a>,
        <a href="https://github.com/hyprwm/hyprpaper">hyprpaper</a>,
        <a href="https://github.com/GhostNaN/mpvpaper">MPVPaper</a>,
        <a href="https://github.com/vilhalmer/oguri">oguri</a>,
        <a href="https://github.com/swaywm/swaybg">swaybg</a>,
        <a href="https://github.com/Horus645/swww">swww</a>,
        <a href="https://github.com/xyproto/wallutils">Wallutils</a>,
        <a href="https://github.com/danyspin97/wpaperd">wpaperd</a>
      </li>
      <li class="list__item--ok">
        Web browser:
        <a href="https://www.chromium.org/">Chromium</a>,
        <a href="https://www.mozilla.org/firefox/">Firefox</a>,
        <a href="https://nyxt.atlas.engineer">Nyxt</a>,
        <a href="https://www.opera.com/">Opera</a>,
        <a href="https://qutebrowser.org/">qutebrowser</a>
      </li>
    </ul>
  </section>

  <section class="section">
    <p class="section__title">Missing:</p>
    <ul class="section__list">
      <li class="list__item--ko">
        Color management and HDR:
        <a href="https://gitlab.freedesktop.org/wayland/wayland-protocols/-/merge_requests/14">Protocol in development</a>
      </li>
      <li class="list__item--ko">
        Displaylink driver for:
        <a href="https://github.com/swaywm/sway">Sway</a>/<a href="https://gitlab.freedesktop.org/wlroots/wlroots">wlroots:</a>
        <a href="https://gitlab.freedesktop.org/wlroots/wlroots/-/issues/1823">Issue on gitlab with a possible patch</a>
      </li>
    </ul>
  </section>

  <section class="section">
    <p class="section__title">
      That's great, but you did not mention
      <span class="accent--nvidia">nvidia</span>...
    </p>
    <ul class="section__list">
      <li class="list__item--kinda">
        With limitations/caveats it runs, on
        <a href="https://wiki.gnome.org/Initiatives/Wayland/NVIDIA">GNOME</a>
      </li>
      <li class="list__item--kinda">
        With limitations/caveats it runs, on
        <a href="https://community.kde.org/Plasma/Wayland/Nvidia">KDE</a>
      </li>
      <li class="list__item--kinda">
        When using the nouveau driver, it runs on
        <a href="https://github.com/swaywm/sway">Sway</a>/<a href="https://gitlab.freedesktop.org/wlroots/wlroots">wlroots</a>
      </li>
    </ul>
  </section>
</main>
{{ end }}


================================================
FILE: layouts/partials/footer.html
================================================
<footer class="notes">
  Powered simply by plain HTML/CSS ❤️
  <br />
  This list is by no means exhaustive.
  If something is missing or wrong, please create a PR/issue on the <a href="https://github.com/mpsq/arewewaylandyet">repository</a>.
  <br />
  <span class="notes__date">
    Last updated: {{ now.Format "2 January 2006" }}
  <span>
</footer>


================================================
FILE: layouts/partials/head.html
================================================
<head>
  <meta charset="utf-8">

  <meta name="description" content="Mostly...">
  <meta name="viewport" content="width=device-width, initial-scale=1">

  <link rel="apple-touch-icon" sizes="114x114" href="img/apple-touch-icon.png">
  <link rel="icon" type="image/png" sizes="32x32" href="img/favicon-32x32.png">
  <link rel="icon" type="image/png" sizes="16x16" href="img/favicon-16x16.png">
  <link rel="manifest" href="img/site.webmanifest">
  <link rel="shortcut icon" href="img/favicon.ico">
  <meta name="theme-color" content="#ffffff">

  <base href="{{ .Site.BaseURL }}">
  <title> {{ .Title }} </title>
  <link rel="canonical" href="{{ .Permalink }}">

  {{ $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 }}

  <link rel="stylesheet" href="{{ $normalizeStyles.RelPermalink }}" integrity="{{ $normalizeStyles.Data.Integrity }}">
  <link rel="stylesheet" href="{{ $mainStyles.RelPermalink }}" integrity="{{ $mainStyles.Data.Integrity }}">
  <script type="text/javascript" src="{{ $themePreload.RelPermalink }}" integrity="{{ $themePreload.Data.Integrity }}"></script>
  <script async type="text/javascript" src="{{ $themeSwitcher.RelPermalink }}" integrity="{{ $themeSwitcher.Data.Integrity }}"></script>
</head>


================================================
FILE: layouts/partials/header.html
================================================
<button id="dark-mode" class="btn btn--dark-mode" type="button">
  Dark mode
</button>


================================================
FILE: layouts/partials/title.html
================================================
<h1 class="title--question">
  Are we
  <a class="accent--wayland wayland" href="https://wayland.freedesktop.org/">Wayland</a>
  yet?
</h1>


================================================
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/"]
}
Download .txt
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
Download .txt
SYMBOL INDEX (1 symbols across 1 files)

FILE: src/scripts/theme-switcher.ts
  function switchTheme (line 5) | function switchTheme(): void {
Condensed preview — 33 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (34K chars).
[
  {
    "path": ".eslintrc.js",
    "chars": 865,
    "preview": "const path = require(\"path\")\n\nmodule.exports = {\n  env: {\n    browser: true,\n    es6: true,\n  },\n  extends: [\n    \"stand"
  },
  {
    "path": ".github/pull_request_template.md",
    "chars": 835,
    "preview": "## Description\n\nShort description of the changes:\n\n## Checklist\n\nI have:\n\n- [ ] 🤳 made sure that what I am adding is an "
  },
  {
    "path": ".github/workflows/hugo-ci.yml",
    "chars": 216,
    "preview": "name: Hugo CI\n\non: [push]\n\njobs:\n  check:\n\n    runs-on: ubuntu-latest\n\n    steps:\n    - uses: actions/checkout@v2\n\n    -"
  },
  {
    "path": ".github/workflows/typescript-ci.yml",
    "chars": 440,
    "preview": "name: TypeScript CI\n\non: [push]\n\njobs:\n  check:\n\n    runs-on: ubuntu-latest\n\n    steps:\n    - uses: actions/checkout@v2\n"
  },
  {
    "path": ".gitignore",
    "chars": 37,
    "preview": "node_modules\n/.log\n/public\n/resources"
  },
  {
    "path": ".ignore",
    "chars": 17,
    "preview": "package-lock.json"
  },
  {
    "path": "CODEOWNERS",
    "chars": 8,
    "preview": "* @mpsq\n"
  },
  {
    "path": "LICENSE.md",
    "chars": 1069,
    "preview": "The MIT License\n\nCopyright (c) 2020 Méril P.\n\nPermission is hereby granted, free of charge, to any person obtaining a co"
  },
  {
    "path": "README.md",
    "chars": 926,
    "preview": "# [Are we Wayland yet?](https://arewewaylandyet.com)\n\nI think so... This is an opinionated answer, if you disagree or if"
  },
  {
    "path": "archetypes/default.md",
    "chars": 84,
    "preview": "---\ntitle: \"{{ replace .Name \"-\" \" \" | title }}\"\ndate: {{ .Date }}\ndraft: true\n---\n\n"
  },
  {
    "path": "config.toml",
    "chars": 297,
    "preview": "baseURL = \"https://arewewaylandyet.com/\"\nlanguageCode = \"en-us\"\ntitle = \"Are we Wayland yet?\"\n\ndisableKinds = [\"taxonomy"
  },
  {
    "path": "content/.gitkeep",
    "chars": 0,
    "preview": ""
  },
  {
    "path": "husky.config.js",
    "chars": 70,
    "preview": "module.exports = {\n  hooks: {\n    \"pre-commit\": \"lint-staged\",\n  },\n}\n"
  },
  {
    "path": "layouts/404.html",
    "chars": 269,
    "preview": "{{ define \"main\"}}\n<main aria-role=\"main\">\n\t{{ partial \"title\" . }}\n  <h2 class=\"title--answer\">\n    404\n  </h2>\n  <h2 c"
  },
  {
    "path": "layouts/_default/baseof.html",
    "chars": 168,
    "preview": "<!DOCTYPE html>\n<html lang=\"en\">\n\t{{ partial \"head\" . }}\n\t<body>\n\t\t{{ partial \"header\" . }}\n\t\t{{ block \"main\" . }}{{ end"
  },
  {
    "path": "layouts/index.html",
    "chars": 11718,
    "preview": "{{ define \"main\" }}\n<main aria-role=\"main\">\n\n\t{{ partial \"title\" . }}\n\n  <h2 class=\"title--answer\">Mostly...</h2>\n\n  <se"
  },
  {
    "path": "layouts/partials/footer.html",
    "chars": 352,
    "preview": "<footer class=\"notes\">\n  Powered simply by plain HTML/CSS ❤️\n  <br />\n  This list is by no means exhaustive.\n  If someth"
  },
  {
    "path": "layouts/partials/head.html",
    "chars": 1867,
    "preview": "<head>\n  <meta charset=\"utf-8\">\n\n  <meta name=\"description\" content=\"Mostly...\">\n  <meta name=\"viewport\" content=\"width="
  },
  {
    "path": "layouts/partials/header.html",
    "chars": 87,
    "preview": "<button id=\"dark-mode\" class=\"btn btn--dark-mode\" type=\"button\">\n  Dark mode\n</button>\n"
  },
  {
    "path": "layouts/partials/title.html",
    "chars": 140,
    "preview": "<h1 class=\"title--question\">\n  Are we\n  <a class=\"accent--wayland wayland\" href=\"https://wayland.freedesktop.org/\">Wayla"
  },
  {
    "path": "layouts/robots.txt",
    "chars": 118,
    "preview": "User-agent: *\n\nAllow: /sitemap.xml\nSitemap: https://arewewaylandyet.com/sitemap.xml\nHost: https://arewewaylandyet.com\n"
  },
  {
    "path": "lint-staged.config.js",
    "chars": 77,
    "preview": "module.exports = {\n  \"*.ts\": [\"npm run ci:lint\", \"npm run ci:type-check\"],\n}\n"
  },
  {
    "path": "netlify.toml",
    "chars": 236,
    "preview": "[build]\nbase = \"/\"\ncommand = \"hugo --gc --minify\"\npublish = \"public\"\n\n[context.production.environment]\nHUGO_VERSION = \"0"
  },
  {
    "path": "package.json",
    "chars": 1160,
    "preview": "{\n  \"name\": \"arewewaylandyet.get\",\n  \"version\": \"0.0.1\",\n  \"license\": \"MIT\",\n  \"scripts\": {\n    \"ci:lint\": \"eslint 'src/"
  },
  {
    "path": "prettier.config.js",
    "chars": 407,
    "preview": "module.exports = {\n  arrowParens: \"always\",\n  endOfLine: \"auto\",\n  proseWrap: \"always\",\n  trailingComma: \"all\",\n  semi: "
  },
  {
    "path": "src/css/main.css",
    "chars": 3170,
    "preview": ":root {\n  --palette-black: #222222;\n  --palette-gray: #666666;\n  --palette-light-gray: #666666;\n  --palette-green: #4caf"
  },
  {
    "path": "src/css/normalize.css",
    "chars": 1731,
    "preview": "/*! normalize.css v8.0.1 | MIT License | github.com/necolas/normalize.css */\nhtml {\n  line-height: 1.15;\n  -webkit-text-"
  },
  {
    "path": "src/scripts/theme-preload.ts",
    "chars": 377,
    "preview": "import themeUtils from \"./theme-utils\"\n\ndocument.addEventListener(\"DOMContentLoaded\", function () {\n  const theme = loca"
  },
  {
    "path": "src/scripts/theme-switcher.ts",
    "chars": 272,
    "preview": "import themeUtils from \"./theme-utils\"\n\nconst btn = document.getElementById(\"dark-mode\")\n\nfunction switchTheme(): void {"
  },
  {
    "path": "src/scripts/theme-utils.ts",
    "chars": 420,
    "preview": "const _theme = { dark: [\"Light\", \"dark\"], light: [\"Dark\", \"light\"] }\n\nconst set = (dark: boolean): void => {\n  const [co"
  },
  {
    "path": "static/_headers",
    "chars": 1973,
    "preview": "/\n  Report-To: {\"group\":\"rui\",\"max_age\":31536000,\"endpoints\":[{\"url\":\"https://mpsq.report-uri.com/a/d/g\"}],\"include_subd"
  },
  {
    "path": "static/img/site.webmanifest",
    "chars": 286,
    "preview": "{\n    \"name\": \"\",\n    \"short_name\": \"\",\n    \"icons\": [\n        {\n            \"src\": \"android-chrome-96x96.png\",\n        "
  },
  {
    "path": "tsconfig.json",
    "chars": 875,
    "preview": "{\n  \"compilerOptions\": {\n    \"allowJs\": false,\n    \"target\": \"es5\",\n    \"module\": \"esnext\",\n    \"lib\": [\"esnext\", \"DOM\"]"
  }
]

About this extraction

This page contains the full source code of the mpsq/arewewaylandyet GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 33 files (29.9 KB), approximately 10.0k tokens, and a symbol index with 1 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.

Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.

Copied to clipboard!