--- a
+++ b/.github/workflows/lint.yml
@@ -0,0 +1,54 @@
+name: Lint
+
+on:
+  schedule:
+    - cron: 00 00 * * 1
+  push:
+    branches: [main]
+  pull_request:
+    branches: [main]
+
+concurrency:
+  group: ${{ github.workflow }}-${{ github.ref }}
+  cancel-in-progress: true
+
+jobs:
+  lint:
+    name: Lint ${{ matrix.lint-kind }}
+    runs-on: ubuntu-latest
+    strategy:
+      fail-fast: false
+      matrix:
+        lint-kind: [code, docs]
+
+    steps:
+      - uses: actions/checkout@v3
+        with:
+          submodules: true
+      - name: Set up Python 3.10
+        uses: actions/setup-python@v4
+        with:
+          python-version: "3.10"
+
+      - name: Cache pre-commit
+        uses: actions/cache@v3
+        if: ${{ matrix.lint-kind == 'code' }}
+        with:
+          path: ~/.cache/pre-commit
+          key: pre-commit-${{ env.pythonLocation }}-${{ hashFiles('**/.pre-commit-config.yaml') }}
+
+      - name: Install dependencies
+        run: |
+          python -m pip install --upgrade pip
+          python -m pip install tox
+
+      - name: Install PyEnchant
+        if: ${{ matrix.lint-kind == 'docs' }}
+        run: |
+          sudo apt-get update -y
+          sudo apt-get install libenchant-2-dev
+          python -m pip install pyenchant
+
+      - name: Lint ${{ matrix.lint-kind }}
+        run: |
+          tox -e lint-${{ matrix.lint-kind }}