docs: add docusaurus website (#597)

credits: @kapobajza
This commit is contained in:
Alex Pasmantier 2025-07-07 16:51:35 +02:00 committed by alexandre pasmantier
parent e797aba7c1
commit e5654fcdde
47 changed files with 12882 additions and 80 deletions

View File

@ -1,14 +1,11 @@
name: changelog
permissions:
contents: write
on:
push:
tags:
- '[v]?[0-9]+.[0-9]+.[0-9]+'
workflow_dispatch:
jobs:
changelog:
name: Generate changelog
@ -21,7 +18,6 @@ jobs:
uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Generate changelog
uses: orhun/git-cliff-action@v4
with:
@ -30,12 +26,13 @@ jobs:
env:
OUTPUT: CHANGELOG.md
GITHUB_REPO: ${{ github.repository }}
- name: Copy changelog to docs
run: |
cp CHANGELOG.md 'docs/02-Developers/03-patch-notes.md
- name: Extract branch name
shell: bash
run: echo "branch=${GITHUB_HEAD_REF:-${GITHUB_REF#refs/heads/}}" >> $GITHUB_OUTPUT
id: extract_branch
- name: Create PR
uses: peter-evans/create-pull-request@v7
with:

37
.github/workflows/deploy-docs.yml vendored Normal file
View File

@ -0,0 +1,37 @@
name: deploy docs
on:
push:
paths-ignore:
- "README.md"
branches:
- main
workflow_dispatch:
jobs:
deploy:
name: Build Docusaurus to gh-pages
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v3
- name: Setup node env
uses: actions/setup-node@v3
with:
node-version-file: "website/.nvmrc"
- name: Install pnpm
uses: pnpm/action-setup@v4
with:
version: 10
run_install: false
- name: Install dependencies
run: pnpm install --frozen-lockfile
working-directory: website
- name: Build website
run: pnpm run build
working-directory: website
- name: Deploy to GitHub Pages
uses: peaceiris/actions-gh-pages@v3
with:
github_token: ${{ secrets.GITHUB_TOKEN }}
publish_dir: website/build
user_name: github-actions[bot]
user_email: github-actions[bot]@users.noreply.github.com

View File

@ -1,47 +0,0 @@
# Simple workflow for deploying static content to GitHub Pages
name: Deploy static content to Pages
on:
# Allows you to run this workflow manually from the Actions tab
workflow_dispatch:
# Runs when the publishing of the Linux .deb file is successfully completed in the CD workflow.
# So that it can be installed through apt
workflow_run:
workflows: ["CD"]
branches: [main]
types:
- completed
# Sets permissions of the GITHUB_TOKEN to allow deployment to GitHub Pages
permissions:
contents: read
pages: write
id-token: write
# Allow only one concurrent deployment, skipping runs queued between the run in-progress and latest queued.
# However, do NOT cancel in-progress runs as we want to allow these production deployments to complete.
concurrency:
group: "pages"
cancel-in-progress: false
jobs:
# Single deploy job since we're just deploying
deploy:
environment:
name: github-pages
url: ${{ steps.deployment.outputs.page_url }}
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Setup Pages
uses: actions/configure-pages@v5
- name: Upload artifact
uses: actions/upload-pages-artifact@v3
with:
# Upload entire repository
path: "."
- name: Deploy to GitHub Pages
id: deployment
uses: actions/deploy-pages@v4

24
.github/workflows/test-deploy-docs.yml vendored Normal file
View File

@ -0,0 +1,24 @@
name: Test docs deployment
on:
pull_request:
branches:
- main
# Review gh actions docs if you want to further define triggers, paths, etc
# https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#on
jobs:
test-deploy:
name: Test deployment
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
- uses: actions/setup-node@v4
with:
node-version: 18
- name: Install dependencies
run: pnpm install --frozen-lockfile
working-directory: website
- name: Build website
run: pnpm run build
working-directory: website

View File

@ -177,10 +177,22 @@ All notable changes to this project will be documented in this file.
### 📚 Documentation
- [825e974](https://github.com/alexpasmantier/television/commit/825e97436360f3cbb5b40d4053c10c435352e6c9) *(cable)* Update channel documentation (auto) by @github-actions[bot] in [#594](https://github.com/alexpasmantier/television/pull/594)
- [185f789](https://github.com/alexpasmantier/television/commit/185f7890ac27ca1580231c2f24fe6a696fd3f322) *(cable)* Update channel documentation (auto) by @github-actions[bot]
- [8bdebd3](https://github.com/alexpasmantier/television/commit/8bdebd382ef9fe1f8ac74106b91cbdfdd308ef27) *(channels)* Autogenerate channel documentation + CI action by @alexpasmantier
- [6015809](https://github.com/alexpasmantier/television/commit/601580953a11b4c1061c97c5417ffeacd154354d) *(tests)* Simple documentation for the `PtyTester` by @alexpasmantier
- [7bbf538](https://github.com/alexpasmantier/television/commit/7bbf5388984ea4a9afa4daad695add4c258c0fb1) *(utils)* Add documentation for string formatting logic by @alexpasmantier in [#517](https://github.com/alexpasmantier/television/pull/517)
- [a9badbc](https://github.com/alexpasmantier/television/commit/a9badbc088f332add3396a8f835b5dd1f06aa2f8) *(uncategorized)* Add docusaurus website by @alexpasmantier
- [e797aba](https://github.com/alexpasmantier/television/commit/e797aba7c1e5fbdc6afabac69d2bbcb32767bf80) *(uncategorized)* Reorganize docs by @alexpasmantier
- [106004d](https://github.com/alexpasmantier/television/commit/106004de948327f248c14f8eebdc40b54af58a4c) *(uncategorized)* Architecture by @alexpasmantier
- [1d33c93](https://github.com/alexpasmantier/television/commit/1d33c9391039f703b3b9848784ab58d3f5372a7d) *(uncategorized)* Add readme banner by @alexpasmantier
- [3ac6c76](https://github.com/alexpasmantier/television/commit/3ac6c762335dd239a72556e36368858e97a13691) *(uncategorized)* Update readme by @alexpasmantier
@ -235,6 +247,8 @@ All notable changes to this project will be documented in this file.
### ⚙️ Miscellaneous Tasks
- [f58e46c](https://github.com/alexpasmantier/television/commit/f58e46c40aca9a31003c2120bcd6772643d38bbb) *(changelog)* Update changelog (auto) by @github-actions[bot] in [#591](https://github.com/alexpasmantier/television/pull/591)
- [d106ada](https://github.com/alexpasmantier/television/commit/d106adafc0a8f4d17bc4235e3bc439487db4a0b4) *(changelog)* Update changelog (auto) by @github-actions[bot] in [#513](https://github.com/alexpasmantier/television/pull/513)
- [64c599e](https://github.com/alexpasmantier/television/commit/64c599ef103d18e852d1070c6b313800646f1940) *(changelog)* Update changelog (auto) by @github-actions[bot] in [#491](https://github.com/alexpasmantier/television/pull/491)

View File

@ -17,7 +17,7 @@ Default keybindings are as follows:
| <kbd>Ctrl</kbd> + <kbd>o</kbd> | Toggle the preview panel |
| <kbd>Esc</kbd> | Quit the application |
These keybindings are all configurable via tv's configuration file (see [Configuration](Configuration-file)).
These keybindings are all configurable via tv's configuration file (see [Configuration](./configuration)).
# Keybindings Guide

View File

@ -575,7 +575,7 @@ Television uses a layered configuration system where each layer can override the
Television features support dual-state control: **enabled/disabled** and **visible/not visible**.
> **📖 For more details on the ui feature documentation**, see [`ui-features.md`](ui-features.md).
> **📖 For more details on the ui feature documentation**, see [`ui-features.md`](../02-Developers/02-ui-features.md).
#### Quick Feature Overview

View File

@ -19,4 +19,4 @@ Here is a list of terminal emulators that have currently been tested with `telev
| Warp | macOS | ✅ |
| Hyper | macOS | ✅ |
If you're able to test the application with a configuration not yet listed above, we'd love to [hear from your experience](./CONTRIBUTING) 🙏
If you're able to test the application with a configuration not yet listed above, we'd love to [hear from your experience](https://github.com/alexpasmantier/television/blob/main/CONTRIBUTING.md) 🙏

View File

@ -2,11 +2,11 @@
.el .ds Aq '
.TH television 1 "television 0.11.9"
.SH NAME
television \- A cross\-platform, fast and extensible general purpose fuzzy finder TUI.
television \- Cross\-platform, fast and extensible general purpose fuzzy finder TUI.
.SH SYNOPSIS
\fBtelevision\fR [\fB\-\-preview\-offset\fR] [\fB\-\-no\-preview\fR] [\fB\-\-hide\-preview\fR] [\fB\-\-show\-preview\fR] [\fB\-\-no\-status\-bar\fR] [\fB\-\-hide\-status\-bar\fR] [\fB\-\-show\-status\-bar\fR] [\fB\-\-no\-remote\fR] [\fB\-\-hide\-remote\fR] [\fB\-\-show\-remote\fR] [\fB\-\-no\-help\-panel\fR] [\fB\-\-hide\-help\-panel\fR] [\fB\-\-show\-help\-panel\fR] [\fB\-t\fR|\fB\-\-tick\-rate\fR] [\fB\-\-watch\fR] [\fB\-k\fR|\fB\-\-keybindings\fR] [\fB\-i\fR|\fB\-\-input\fR] [\fB\-\-input\-header\fR] [\fB\-\-preview\-header\fR] [\fB\-\-preview\-footer\fR] [\fB\-\-source\-command\fR] [\fB\-\-source\-display\fR] [\fB\-\-source\-output\fR] [\fB\-p\fR|\fB\-\-preview\-command\fR] [\fB\-\-layout\fR] [\fB\-\-autocomplete\-prompt\fR] [\fB\-\-exact\fR] [\fB\-\-select\-1\fR] [\fB\-\-take\-1\fR] [\fB\-\-take\-1\-fast\fR] [\fB\-\-ui\-scale\fR] [\fB\-\-preview\-size\fR] [\fB\-\-height\fR] [\fB\-\-width\fR] [\fB\-\-inline\fR] [\fB\-\-config\-file\fR] [\fB\-\-cable\-dir\fR] [\fB\-h\fR|\fB\-\-help\fR] [\fB\-\-global\-history\fR] [\fB\-V\fR|\fB\-\-version\fR] [\fICHANNEL\fR] [\fIPATH\fR] [\fIsubcommands\fR]
\fBtelevision\fR [\fB\-\-preview\-offset\fR] [\fB\-\-no\-preview\fR] [\fB\-\-hide\-preview\fR] [\fB\-\-show\-preview\fR] [\fB\-\-no\-status\-bar\fR] [\fB\-\-hide\-status\-bar\fR] [\fB\-\-show\-status\-bar\fR] [\fB\-t\fR|\fB\-\-tick\-rate\fR] [\fB\-\-watch\fR] [\fB\-k\fR|\fB\-\-keybindings\fR] [\fB\-i\fR|\fB\-\-input\fR] [\fB\-\-input\-header\fR] [\fB\-\-preview\-header\fR] [\fB\-\-preview\-footer\fR] [\fB\-\-source\-command\fR] [\fB\-\-source\-display\fR] [\fB\-\-source\-output\fR] [\fB\-\-source\-delimiter\fR] [\fB\-p\fR|\fB\-\-preview\-command\fR] [\fB\-\-layout\fR] [\fB\-\-autocomplete\-prompt\fR] [\fB\-\-exact\fR] [\fB\-\-select\-1\fR] [\fB\-\-take\-1\fR] [\fB\-\-take\-1\-fast\fR] [\fB\-\-no\-remote\fR] [\fB\-\-hide\-remote\fR] [\fB\-\-show\-remote\fR] [\fB\-\-no\-help\-panel\fR] [\fB\-\-hide\-help\-panel\fR] [\fB\-\-show\-help\-panel\fR] [\fB\-\-ui\-scale\fR] [\fB\-\-preview\-size\fR] [\fB\-\-config\-file\fR] [\fB\-\-cable\-dir\fR] [\fB\-\-global\-history\fR] [\fB\-\-height\fR] [\fB\-\-width\fR] [\fB\-\-inline\fR] [\fB\-h\fR|\fB\-\-help\fR] [\fB\-V\fR|\fB\-\-version\fR] [\fICHANNEL\fR] [\fIPATH\fR] [\fIsubcommands\fR]
.SH DESCRIPTION
A cross\-platform, fast and extensible general purpose fuzzy finder TUI.
Cross\-platform, fast and extensible general purpose fuzzy finder TUI.
.SH OPTIONS
.TP
\fB\-\-preview\-offset\fR=\fISTRING\fR
@ -146,6 +146,12 @@ When no channel is specified: This flag requires \-\-source\-command to be set.
The template is used to format the final output when an entry is selected.
Example: "{}" (output the full entry)
.TP
\fB\-\-source\-delimiter\fR=\fISTRING\fR
The delimiter byte to use for splitting the source\*(Aqs command output into entries.
This can be useful when the source command outputs multiline entries and you want to
rely on another delimiter to split the entries such a null byte or a custom character.
.TP
\fB\-p\fR, \fB\-\-preview\-command\fR=\fISTRING\fR
Preview command to use for the current channel.
@ -276,6 +282,24 @@ Percentage of the screen to allocate to the preview panel (1\-99).
When a channel is specified: This overrides any `preview_size` defined in configuration files or channel prototypes.
When no channel is specified: This flag requires \-\-preview\-command to be set.
.TP
\fB\-\-config\-file\fR=\fIPATH\fR
Provide a custom configuration file to use.
This flag works identically in both channel mode and ad\-hoc mode.
.TP
\fB\-\-cable\-dir\fR=\fIPATH\fR
Provide a custom cable directory to use.
This flag works identically in both channel mode and ad\-hoc mode.
.TP
\fB\-\-global\-history\fR
Use global history instead of channel\-specific history.
This flag only works in channel mode.
When enabled, history navigation will show entries from all channels.
When disabled (default), history navigation is scoped to the current channel.
.TP
\fB\-\-height\fR=\fIINTEGER\fR
Height in lines for non\-fullscreen mode.
@ -298,24 +322,6 @@ When enabled, the picker will be displayed as an inline interface that uses
all available empty space at the bottom of the terminal. If there is insufficient
space to meet the minimum height the terminal will scroll.
.TP
\fB\-\-config\-file\fR=\fIPATH\fR
Provide a custom configuration file to use.
This flag works identically in both channel mode and ad\-hoc mode.
.TP
\fB\-\-cable\-dir\fR=\fIPATH\fR
Provide a custom cable directory to use.
This flag works identically in both channel mode and ad\-hoc mode.
.TP
\fB\-\-global\-history\fR
Enable global history for the current session.
This flag only works in channel mode.
When enabled, history navigation will show entries from all channels.
When disabled (default), history navigation is scoped to the current channel.
.TP
\fB\-h\fR, \fB\-\-help\fR
Print help (see a summary with \*(Aq\-h\*(Aq)
.TP

View File

@ -3,8 +3,7 @@ from toml import load as load_toml, dumps
CABLE_DIR = Path("./cable")
DOCS_DIR = Path("./docs")
DOCS_CABLE_DIR = DOCS_DIR.joinpath("community_channels")
DOCS_DIR = Path("./docs/01-Users")
def generate_cable_docs(os_name: str) -> str:
@ -52,7 +51,7 @@ def generate_cable_docs(os_name: str) -> str:
if __name__ == "__main__":
for os_name in ("unix", "windows"):
docs_content = generate_cable_docs(os_name)
docs_file = DOCS_CABLE_DIR.joinpath(f"{os_name}.md")
docs_file = DOCS_DIR.joinpath(f"10-community-channels-{os_name}.md")
# write the new docs
with open(docs_file, "w+", encoding="utf-8") as f:
f.write(docs_content)

20
website/.gitignore vendored Normal file
View File

@ -0,0 +1,20 @@
# Dependencies
/node_modules
# Production
/build
# Generated files
.docusaurus
.cache-loader
# Misc
.DS_Store
.env.local
.env.development.local
.env.test.local
.env.production.local
npm-debug.log*
yarn-debug.log*
yarn-error.log*

1
website/.nvmrc Normal file
View File

@ -0,0 +1 @@
v23.11.0

41
website/README.md Normal file
View File

@ -0,0 +1,41 @@
# Website
This website is built using [Docusaurus](https://docusaurus.io/), a modern static website generator.
## Installation
```bash
pnpm
```
## Local Development
```bash
pnpm start
```
This command starts a local development server and opens up a browser window. Most changes are reflected live without having to restart the server.
## Build
```bash
pnpm build
```
This command generates static content into the `build` directory and can be served using any static contents hosting service.
## Deployment
Using SSH:
```bash
USE_SSH=true pnpm deploy
```
Not using SSH:
```bash
GIT_USER=<Your GitHub username> pnpm deploy
```
If you are using GitHub pages for hosting, this command is a convenient way to build the website and push to the `gh-pages` branch.

View File

@ -0,0 +1,133 @@
import { themes as prismThemes } from "prism-react-renderer";
import type { Config } from "@docusaurus/types";
import type * as Preset from "@docusaurus/preset-classic";
// This runs in Node.js - Don't use client-side code here (browser APIs, JSX...)
const config: Config = {
title: "Television",
tagline: "The cross-platform, fast and extensible fuzzy finder.",
favicon: "img/tv-icon-150.png",
// Future flags, see https://docusaurus.io/docs/api/docusaurus-config#future
future: {
v4: true, // Improve compatibility with the upcoming Docusaurus v4
},
// Set the production url of your site here
url: "https://alexpasmantier.github.io",
// Set the /<baseUrl>/ pathname under which your site is served
// For GitHub pages deployment, it is often '/<projectName>/'
baseUrl: process.env.NODE_ENV === "production" ? "/television/" : "/",
// GitHub pages deployment config.
// If you aren't using GitHub pages, you don't need these.
organizationName: "alexpasmantier", // Usually your GitHub org/user name.
projectName: "television", // Usually your repo name.
deploymentBranch: "gh-pages",
onBrokenLinks: "throw",
onBrokenMarkdownLinks: "warn",
// Even if you don't use internationalization, you can use this field to set
// useful metadata like html lang. For example, if your site is Chinese, you
// may want to replace "en" with "zh-Hans".
i18n: {
defaultLocale: "en",
locales: ["en"],
},
presets: [
[
"classic",
{
docs: {
path: "../docs",
routeBasePath: "docs",
sidebarPath: "./sidebars.ts",
// editUrl:
// "https://github.com/facebook/docusaurus/tree/main/packages/create-docusaurus/templates/shared/",
},
blog: {
showReadingTime: true,
feedOptions: {
type: ["rss", "atom"],
xslt: true,
},
// Please change this to your repo.
// Remove this to remove the "edit this page" links.
// editUrl:
// "https://github.com/facebook/docusaurus/tree/main/packages/create-docusaurus/templates/shared/",
// Useful options to enforce blogging best practices
onInlineTags: "warn",
onInlineAuthors: "warn",
onUntruncatedBlogPosts: "warn",
},
theme: {
customCss: "./src/css/custom.css",
},
} satisfies Preset.Options,
],
],
themeConfig: {
// Replace with your project's social card
image: "img/tv-social.png",
colorMode: {
defaultMode: "dark",
disableSwitch: true,
},
docs: {
sidebar: {
hideable: true,
},
},
navbar: {
title: "Television",
logo: {
alt: "Television Logo",
src: "img/tv-icon-80.png",
},
items: [
{
type: "docSidebar",
position: "left",
label: "docs",
sidebarId: "docSidebar",
},
{
href: "https://github.com/alexpasmantier/television/releases",
label: "releases",
position: "left",
},
{
href: "https://crates.io/crates/television",
label: "crates.io",
position: "left",
},
{
href: "https://github.com/alexpasmantier/television",
label: "GitHub",
position: "right",
},
],
},
footer: {
copyright: `Copyright © ${new Date().getFullYear()} alexpasmantier`,
},
prism: {
theme: prismThemes.github,
darkTheme: prismThemes.dracula,
additionalLanguages: ["bash", "json", "yaml", "toml", "diff"],
},
} satisfies Preset.ThemeConfig,
themes: ["@docusaurus/theme-mermaid"],
// In order for Mermaid code blocks in Markdown to work,
// you also need to enable the Remark plugin with this option
markdown: {
mermaid: true,
},
};
export default config;

49
website/package.json Normal file
View File

@ -0,0 +1,49 @@
{
"name": "television-website",
"version": "0.1.0",
"private": true,
"scripts": {
"docusaurus": "docusaurus",
"start": "docusaurus start",
"build": "docusaurus build",
"swizzle": "docusaurus swizzle",
"deploy": "docusaurus deploy",
"clear": "docusaurus clear",
"serve": "docusaurus serve",
"write-translations": "docusaurus write-translations",
"write-heading-ids": "docusaurus write-heading-ids",
"typecheck": "tsc"
},
"dependencies": {
"@docusaurus/core": "3.8.1",
"@docusaurus/preset-classic": "3.8.1",
"@docusaurus/theme-mermaid": "^3.8.1",
"@mdx-js/react": "^3.0.0",
"clsx": "^2.0.0",
"prism-react-renderer": "^2.3.0",
"react": "^19.0.0",
"react-dom": "^19.0.0"
},
"devDependencies": {
"@docusaurus/module-type-aliases": "3.8.1",
"@docusaurus/tsconfig": "3.8.1",
"@docusaurus/types": "3.8.1",
"typescript": "~5.6.2"
},
"browserslist": {
"production": [
">0.5%",
"not dead",
"not op_mini all"
],
"development": [
"last 3 chrome version",
"last 3 firefox version",
"last 5 safari version"
]
},
"engines": {
"node": ">=18.0"
},
"packageManager": "pnpm@10.12.4"
}

12027
website/pnpm-lock.yaml generated Normal file

File diff suppressed because it is too large Load Diff

33
website/sidebars.ts Normal file
View File

@ -0,0 +1,33 @@
import type { SidebarsConfig } from "@docusaurus/plugin-content-docs";
// This runs in Node.js - Don't use client-side code here (browser APIs, JSX...)
/**
* Creating a sidebar enables you to:
- create an ordered group of docs
- render a sidebar for each doc of that group
- provide next/previous navigation
The sidebars can be generated from the filesystem, or explicitly defined here.
Create as many sidebars as you want.
*/
const sidebars: SidebarsConfig = {
// By default, Docusaurus generates a sidebar from the docs folder structure
docSidebar: [{ type: "autogenerated", dirName: "." }],
// But you can create a sidebar manually
/*
tutorialSidebar: [
'intro',
'hello',
{
type: 'category',
label: 'Tutorial',
items: ['tutorial-basics/create-a-document'],
},
],
*/
};
export default sidebars;

View File

@ -0,0 +1,73 @@
import type { ReactNode } from "react";
import clsx from "clsx";
import Heading from "@theme/Heading";
import styles from "./styles.module.css";
type FeatureItem = {
title: string;
Svg: React.ComponentType<React.ComponentProps<"svg">>;
description: ReactNode;
};
const FeatureList: FeatureItem[] = [
{
title: "Integrates with your shell",
Svg: require("@site/static/img/integrate_icon.svg").default,
description: (
<>
Television integrates with your shell and lets you quickly search
through any kind of data source (files, git repositories, environment
variables, docker images, you name it) using a fuzzy matching algorithm
and is designed to be extensible.
</>
),
},
{
title: "Insipred by great tools",
Svg: require("@site/static/img/inspired_icon.svg").default,
description: (
<>
It is inspired by the neovim{" "}
<a href="https://github.com/nvim-telescope/telescope.nvim">telescope</a>{" "}
plugin and leverages{" "}
<a href="https://github.com/tokio-rs/tokio">tokio</a> and the{" "}
<a href="https://github.com/helix-editor/nucleo">nucleo</a> matcher used
by the <a href="https://github.com/helix-editor/helix">helix</a> editor
to ensure optimal performance.
</>
),
},
];
function Feature({ title, Svg, description }: FeatureItem) {
return (
<div className={clsx("col col--6", styles.featureItem)}>
<div className="text--center">
<Svg className={styles.featureSvg} role="img" />
</div>
<div
className={clsx(
"text--center padding-horiz--md",
styles.titleContainer
)}
>
<Heading as="h3">{title}</Heading>
<p>{description}</p>
</div>
</div>
);
}
export default function HomepageFeatures(): ReactNode {
return (
<section className={styles.features}>
<div className="container">
<div className="row">
{FeatureList.map((props, idx) => (
<Feature key={idx} {...props} />
))}
</div>
</div>
</section>
);
}

View File

@ -0,0 +1,26 @@
.features {
display: flex;
align-items: center;
padding: 2rem 0;
width: 100%;
}
.featureSvg {
height: 120px;
width: 120px;
}
html[data-theme='dark'] .featureSvg {
filter: invert(1);
}
.titleContainer {
max-width: 500px;
text-align: center;
}
.featureItem {
display: flex;
flex-direction: column;
align-items: center;
}

View File

@ -0,0 +1,12 @@
import React from "react";
import TabItem from "@theme/TabItem";
import { TabItemProps } from "@docusaurus/theme-common/internal";
import clsx from "clsx";
import styles from "./styles.module.css";
export default function InstallationTabItem({
className,
...props
}: TabItemProps) {
return <TabItem {...props} className={clsx(className, styles.item)} />;
}

View File

@ -0,0 +1,3 @@
.item {
white-space: nowrap;
}

View File

@ -0,0 +1,9 @@
import React from "react";
import Tabs from "@theme/Tabs";
import { TabsProps } from "@docusaurus/theme-common/internal";
import styles from "./styles.module.css";
import clsx from "clsx";
export default function InstallationTabs({ className, ...props }: TabsProps) {
return <Tabs {...props} className={clsx(styles.container, className)} />;
}

View File

@ -0,0 +1,3 @@
.container :global(.tabs__item) {
white-space: nowrap;
}

152
website/src/css/custom.css Normal file
View File

@ -0,0 +1,152 @@
/**
* Any CSS included here will be global. The classic template
* bundles Infima by default. Infima is a CSS framework designed to
* work well for content-centric websites.
*/
@font-face {
font-family: "Doto";
src: url("/fonts/Doto.ttf");
}
@font-face {
font-family: "Ubuntu Mono";
src: url("/fonts/UbuntuMono-Regular.ttf");
}
/* You can override the default Infima variables here. */
:root {
--ifm-color-primary: #aeaed1;
--ifm-color-primary-dark: #9696c3;
--ifm-color-primary-darker: #8989bc;
--ifm-color-primary-darkest: #6565a7;
--ifm-color-primary-light: #c6c6df;
--ifm-color-primary-lighter: #d3d3e6;
--ifm-color-primary-lightest: #f7f7fb;
--ifm-background-color: #241f31;
--ifm-font-family-base: "Ubuntu Mono", monospace;
--ifm-font-color-base: #aeaed1;
--ifm-font-color-secondary: #545c8c;
--ifm-font-size-base: 1.1rem;
--ifm-code-font-size: 95%;
--docusaurus-highlighted-code-line-bg: rgba(0, 0, 0, 0.05);
--ifm-heading-font-family: "Doto", sans-serif;
--ifm-heading-color: var(--ifm-color-primary-darkest);
--ifm-menu-color-active: var(--ifm-color-primary-lightest);
--ifm-menu-color-background-active: var(--ifm-color-primary-darkest);
--ifm-toc-link-color: var(--ifm-color-primary-dark);
}
/* For readability concerns, you should choose a lighter palette in dark mode. */
[data-theme='dark'] {}
.navbar {
background-color: var(--ifm-background-color);
border-bottom: 3px solid var(--ifm-color-primary-darkest);
font-family: "Doto", sans-serif;
font-size: 1.5rem;
font-optical-sizing: auto;
font-weight: 800;
font-style: normal;
font-variation-settings:
"ROND" 0;
}
.navbar__logo {
margin-left: 1rem;
}
.navbar__title {
color: var(--ifm-color-primary-darkest);
margin-right: 2rem;
margin-left: 0.5rem;
}
.navbar__item {
color: var(--ifm-color-primary-lightest);
font-size: 1.3rem;
font-weight: 400;
}
.navbar__item:hover {
color: var(--ifm-color-primary-darker);
text-decoration: none;
}
.hero {
background-color: var(--ifm-background-color);
margin-bottom: 4rem;
}
.hero__title {
color: var(--ifm-font-color-base);
margin-bottom: 0;
font-family: "Doto", sans-serif;
font-size: 3rem;
font-optical-sizing: auto;
font-weight: 800;
font-style: normal;
font-variation-settings:
"ROND" 0;
}
.hero__subtitle {
color: var(--ifm-font-color-secondary);
font-family: "Ubuntu Mono", monospace;
font-weight: 400;
font-style: italic;
font-size: 1.3rem;
margin-bottom: 6rem;
margin-top: 0rem;
}
.footer {
background-color: var(--ifm-background-color);
color: var(--ifm-font-color-base);
border-top: 3px solid var(--ifm-color-primary-darkest);
}
.button-mainpage {
border: 1px solid var(--ifm-color-primary-darker);
outline: none;
background-color: var(--ifm-background-color);
padding: 10px 20px;
margin: auto;
font-weight: 800;
font-family: "Doto", sans-serif;
font-size: 1.2rem;
color: var(--ifm-font-color-base);
border-radius: 6px;
transition: all ease 0.1s;
box-shadow: 0px 5px 0px 0px var(--ifm-color-primary-darker);
}
.button-mainpage:hover {
text-decoration: none;
background-color: var(--ifm-font-color-base);
color: var(--ifm-background-color);
}
.button-mainpage:active {
box-shadow: 0px 0px 0px 0px var(--ifm-font-color-base);
transform: translateY(5px);
}
nav.menu {
border-right: 1px solid var(--ifm-color-primary-darkest);
padding-right: 1rem;
font-family: "Doto", sans-serif;
font-weight: 400;
}
.table-of-contents__left-border {
border-left: 1px solid var(--ifm-color-primary-darkest);
font-family: "Ubuntu Mono", monospace;
}
.theme-doc-markdown a {
color: var(--ifm-color-primary-darker)
}

View File

@ -0,0 +1,82 @@
/**
* CSS files with the .module.css suffix will be treated as CSS modules
* and scoped locally.
*/
.heroBanner {
padding: 4rem 0;
text-align: center;
position: relative;
overflow: hidden;
}
.heroContent {
display: flex;
align-items: stretch;
justify-content: center;
gap: 2rem;
flex-wrap: wrap; /* Allows stacking on small screens */
margin-top: 2rem;
}
.heroImage {
flex: 0 0 auto;
max-width: 70%;
}
.heroImageImg {
width: 100%;
height: auto;
display: block;
}
.heroAbout {
position: relative;
display: flex;
flex-direction: column;
justify-content: space-between;
flex: 1 1 0;
max-width: 65%;
min-width: 350px;
color: var(--ifm-color-primary);
font-family: "Ubuntu Mono", monospace;
font-weight: 100;
font-size: 1rem;
text-align: left;
line-height: 1.5;
margin: 0;
margin-top: 1rem;
padding-bottom: 1.6rem;
}
.heroAbout a {
color: var(--ifm-color-primary-darker);
font-weight: 600;
}
@media screen and (max-width: 996px) {
.heroBanner {
padding: 2rem;
}
.heroAbout {
padding-bottom: 0;
}
.buttons {
position: static;
margin-top: 1rem;
justify-content: center;
}
}
.buttons {
width: 100%;
}
.buttons a {
width: 100%;
max-width: 350px;
text-align: center;
display: block;
}

View File

@ -0,0 +1,71 @@
import type { ReactNode } from "react";
import clsx from "clsx";
import Link from "@docusaurus/Link";
import useDocusaurusContext from "@docusaurus/useDocusaurusContext";
import Layout from "@theme/Layout";
import Heading from "@theme/Heading";
import styles from "./index.module.css";
import HomepageFeatures from "../components/HomepageFeatures";
function HomepageHeader() {
const { siteConfig } = useDocusaurusContext();
return (
<header className={clsx("hero hero--primary", styles.heroBanner)}>
<div className="container">
<Heading as="h1" className="hero__title">
{siteConfig.title}
</Heading>
<p className="hero__subtitle">{siteConfig.tagline}</p>
<div className={styles.heroContent}>
<div className={styles.heroImage}>
<img
src={require("@site/static/img/tv-transparent.png").default}
alt="Television"
className={styles.heroImageImg}
/>
</div>
<div className={styles.heroAbout}>
<div>
<p>
Television is a cross-platform, fast and extensible fuzzy finder
for the terminal.
</p>
<p>
It integrates with your shell and lets you quickly search
through any kind of data source (files, git repositories,
environment variables, docker images, you name it) using a fuzzy
matching algorithm and is designed to be extensible.
</p>
<p>
It is inspired by the neovim{" "}
<a href="https://github.com/nvim-telescope/telescope.nvim">
telescope
</a>{" "}
plugin and leverages{" "}
<a href="https://github.com/tokio-rs/tokio">tokio</a> and the
nucleo matcher used by{" "}
<a href="https://helix-editor.com/">helix</a> to ensure optimal
performance.
</p>
</div>
<div className={styles.buttons}>
<Link className="button-mainpage" to="/docs/Users/installation">
Getting Started
</Link>
</div>
</div>
</div>
</div>
</header>
);
}
export default function Home(): ReactNode {
return (
<Layout description="Description will go into a meta tag in <head />">
<HomepageHeader />
<main>{/* <HomepageFeatures /> */}</main>
</Layout>
);
}

View File

@ -0,0 +1,7 @@
---
title: Markdown page example
---
# Markdown page example
You don't need React to write simple standalone pages.

0
website/static/.nojekyll Normal file
View File

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 7.1 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 14 KiB

View File

@ -0,0 +1,10 @@
<svg width="100" height="82" viewBox="0 0 100 82" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M86 12H14C7.37258 12 2 17.3726 2 24V64C2 70.6274 7.37258 76 14 76H86C92.6274 76 98 70.6274 98 64V24C98 17.3726 92.6274 12 86 12Z" fill="#A2765A" stroke="#CA9471" stroke-width="4"/>
<path d="M80 24H20C16.6863 24 14 26.6863 14 30V58C14 61.3137 16.6863 64 20 64H80C83.3137 64 86 61.3137 86 58V30C86 26.6863 83.3137 24 80 24Z" fill="#020202" stroke="#2A2A2A" stroke-width="2"/>
<path d="M59 74H41C39.3431 74 38 75.3431 38 77V79C38 80.6569 39.3431 82 41 82H59C60.6569 82 62 80.6569 62 79V77C62 75.3431 60.6569 74 59 74Z" fill="#AFAFAF"/>
<path d="M94 78C96.2091 78 98 76.2091 98 74C98 71.7909 96.2091 70 94 70C91.7909 70 90 71.7909 90 74C90 76.2091 91.7909 78 94 78Z" fill="#AFAFAF"/>
<path d="M6 78C8.20914 78 10 76.2091 10 74C10 71.7909 8.20914 70 6 70C3.79086 70 2 71.7909 2 74C2 76.2091 3.79086 78 6 78Z" fill="#AFAFAF"/>
<path d="M52 0H48V18H52V0Z" fill="#444444"/>
<path d="M41.7588 1L38 2.36808L42.1042 13.6444L45.863 12.2763L41.7588 1Z" fill="#444444"/>
<path d="M62.863 2.36808L59.1042 1L55 12.2763L58.7588 13.6444L62.863 2.36808Z" fill="#444444"/>
</svg>

After

Width:  |  Height:  |  Size: 1.1 KiB

View File

@ -0,0 +1,10 @@
<svg width="100" height="82" viewBox="0 0 100 82" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M86 12H14C7.37258 12 2 17.3726 2 24V64C2 70.6274 7.37258 76 14 76H86C92.6274 76 98 70.6274 98 64V24C98 17.3726 92.6274 12 86 12Z" fill="#A2765A" stroke="#CA9471" stroke-width="4"/>
<path d="M80 24H20C16.6863 24 14 26.6863 14 30V58C14 61.3137 16.6863 64 20 64H80C83.3137 64 86 61.3137 86 58V30C86 26.6863 83.3137 24 80 24Z" fill="#020202" stroke="#2A2A2A" stroke-width="2"/>
<path d="M59 74H41C39.3431 74 38 75.3431 38 77V79C38 80.6569 39.3431 82 41 82H59C60.6569 82 62 80.6569 62 79V77C62 75.3431 60.6569 74 59 74Z" fill="white"/>
<path d="M94 78C96.2091 78 98 76.2091 98 74C98 71.7909 96.2091 70 94 70C91.7909 70 90 71.7909 90 74C90 76.2091 91.7909 78 94 78Z" fill="white"/>
<path d="M6 78C8.20914 78 10 76.2091 10 74C10 71.7909 8.20914 70 6 70C3.79086 70 2 71.7909 2 74C2 76.2091 3.79086 78 6 78Z" fill="white"/>
<path d="M52 0H48V18H52V0Z" fill="white"/>
<path d="M41.7588 1L38 2.36808L42.1042 13.6444L45.863 12.2763L41.7588 1Z" fill="white"/>
<path d="M62.863 2.36808L59.1042 1L55 12.2763L58.7588 13.6444L62.863 2.36808Z" fill="white"/>
</svg>

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 349 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 76 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 124 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 339 KiB

8
website/tsconfig.json Normal file
View File

@ -0,0 +1,8 @@
{
// This file is not used in compilation. It is here just for a nice editor experience.
"extends": "@docusaurus/tsconfig",
"compilerOptions": {
"baseUrl": "."
},
"exclude": [".docusaurus", "build"]
}