Migrate docs to VitePress

This commit is contained in:
MM20 2024-02-05 01:02:32 +01:00
parent 6c4e068fac
commit 78b0822e34
No known key found for this signature in database
GPG Key ID: 0B61A8F2DEAFA389
112 changed files with 2011 additions and 23088 deletions

View File

@ -38,13 +38,12 @@ jobs:
node-version: ${{ matrix.node-version }}
- run: npm ci
working-directory: docs
- run: npm run build --if-present
- run: npm run docs:build
working-directory: docs
- name: Upload artifact
uses: actions/upload-pages-artifact@v1
with:
# Upload entire repository
path: 'docs/build'
path: 'docs/dist'
- name: Deploy to GitHub Pages
id: deployment
uses: actions/deploy-pages@v1

24
docs/.gitignore vendored
View File

@ -1,20 +1,4 @@
# 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*
node_modules
dist
.vitepress/cache
.vitepress/build

View File

@ -0,0 +1,30 @@
import { defineConfig } from 'vitepress'
import { UserGuideSidebar } from '../docs/user-guide/sidebar.ts'
import { DeveloperGuideSidebar } from '../docs/developer-guide/sidebar.ts'
import { ContributorGuideSidebar } from '../docs/contributor-guide/sidebar.ts'
// https://vitepress.dev/reference/site-config
export default defineConfig({
title: 'Kvaesitso',
description: 'A search-focused, free and open source launcher for Android',
themeConfig: {
logo: '/icon.png',
// https://vitepress.dev/reference/default-theme-config
nav: [
{ text: 'User Guide', link: '/docs/user-guide/' },
{ text: 'Developer Guide', link: '/docs/developer-guide/' },
{ text: 'Contributor Guide', link: '/docs/contributor-guide/' },
],
sidebar: {
'/docs/user-guide/': UserGuideSidebar,
'/docs/developer-guide/': DeveloperGuideSidebar,
'/docs/contributor-guide/': ContributorGuideSidebar,
},
socialLinks: [
{ icon: 'github', link: 'https://github.com/MM2-0/Kvaesitso' },
],
},
head: [['link', { rel: 'icon', href: '/icon.png' }]],
})

View File

@ -0,0 +1,50 @@
<template>
<div class="layout-footer">
<div class="link-columns">
<div class="column">
<h4>Documentation</h4>
<a href="/docs/user-guide">User Guide</a>
<a href="/docs/developer-guide">Developer Guide</a>
<a href="/docs/contributor-guide">Contributor Guide</a>
</div>
<div class="column">
<h4>Legal</h4>
<a href="/privacy-policy">Privacy Policy</a>
<a href="/license">License</a>
</div>
<div class="column">
<h4>Links</h4>
<a href="https://github.com/MM2-0/Kvaesitso">Github</a>
<a href="https://t.me/Kvaesitso">Telegram</a>
</div>
</div>
<p class="copyright">
Copyright © 2024 MM2-0 and the Kvaesitso contributors. Built with
VitePress.
</p>
</div>
</template>
<style lang="scss">
.layout-footer {
border-top: 1px solid var(--vp-c-divider);
padding: 2rem 2rem 4rem;
max-width: 1100px;
margin: 0 auto;
.link-columns {
display: grid;
grid-template-columns: repeat(auto-fit, 200px);
.column {
display: flex;
flex-direction: column;
h4 {
font-weight: 600;
}
}
}
.copyright {
margin-top: 2rem;
font-size: 0.8em;
color: var(--vp-c-text);
}
}
</style>

View File

@ -0,0 +1,12 @@
<script setup>
import DefaultTheme from 'vitepress/theme'
import Footer from './Footer.vue'
const { Layout } = DefaultTheme
</script>
<template>
<Layout>
<template #doc-bottom><Footer /></template>
</Layout>
</template>

View File

@ -0,0 +1,20 @@
.material-symbols-rounded {
vertical-align: text-top;
font-size: 20px !important;
font-variation-settings: 'FILL' 0, 'wght' 500, 'GRAD' 0, 'opsz' 20;
}
.home-screenshots {
display: grid;
max-width: 1200px;
margin: 4rem auto;
gap: 2rem;
grid-template-columns: repeat(auto-fit, 320px);
align-items: center;
justify-content: center;
justify-items: center;
img {
width: 320px;
border-radius: 16px;
}
}

View File

@ -0,0 +1,16 @@
// https://vitepress.dev/guide/custom-theme
import { h } from 'vue'
import type { Theme } from 'vitepress'
import DefaultTheme from 'vitepress/theme'
import './style.css'
import './custom.css'
import 'material-symbols'
import Layout from './Layout.vue'
export default {
extends: DefaultTheme,
Layout: Layout,
enhanceApp({ app, router, siteData }) {
// ...
},
} satisfies Theme

View File

@ -0,0 +1,148 @@
/**
* Customize default theme styling by overriding CSS variables:
* https://github.com/vuejs/vitepress/blob/main/src/client/theme-default/styles/vars.css
*/
/**
* Colors
*
* Each colors have exact same color scale system with 3 levels of solid
* colors with different brightness, and 1 soft color.
*
* - `XXX-1`: The most solid color used mainly for colored text. It must
* satisfy the contrast ratio against when used on top of `XXX-soft`.
*
* - `XXX-2`: The color used mainly for hover state of the button.
*
* - `XXX-3`: The color for solid background, such as bg color of the button.
* It must satisfy the contrast ratio with pure white (#ffffff) text on
* top of it.
*
* - `XXX-soft`: The color used for subtle background such as custom container
* or badges. It must satisfy the contrast ratio when putting `XXX-1` colors
* on top of it.
*
* The soft color must be semi transparent alpha channel. This is crucial
* because it allows adding multiple "soft" colors on top of each other
* to create a accent, such as when having inline code block inside
* custom containers.
*
* - `default`: The color used purely for subtle indication without any
* special meanings attched to it such as bg color for menu hover state.
*
* - `brand`: Used for primary brand colors, such as link text, button with
* brand theme, etc.
*
* - `tip`: Used to indicate useful information. The default theme uses the
* brand color for this by default.
*
* - `warning`: Used to indicate warning to the users. Used in custom
* container, badges, etc.
*
* - `danger`: Used to show error, or dangerous message to the users. Used
* in custom container, badges, etc.
* -------------------------------------------------------------------------- */
:root {
--vp-c-default-1: var(--vp-c-gray-1);
--vp-c-default-2: var(--vp-c-gray-2);
--vp-c-default-3: var(--vp-c-gray-3);
--vp-c-default-soft: var(--vp-c-gray-soft);
--vp-c-brand-1: #04327d;
--vp-c-brand-2: #5596ed;
--vp-c-brand-3: #04327d;
--vp-c-brand-soft: #d5e3ff;
--vp-c-tip-1: var(--vp-c-brand-1);
--vp-c-tip-2: var(--vp-c-brand-2);
--vp-c-tip-3: var(--vp-c-brand-3);
--vp-c-tip-soft: var(--vp-c-brand-soft);
--vp-c-warning-1: var(--vp-c-yellow-1);
--vp-c-warning-2: var(--vp-c-yellow-2);
--vp-c-warning-3: var(--vp-c-yellow-3);
--vp-c-warning-soft: var(--vp-c-yellow-soft);
--vp-c-danger-1: var(--vp-c-red-1);
--vp-c-danger-2: var(--vp-c-red-2);
--vp-c-danger-3: var(--vp-c-red-3);
--vp-c-danger-soft: var(--vp-c-red-soft);
}
/**
* Component: Button
* -------------------------------------------------------------------------- */
:root {
--vp-button-brand-border: transparent;
--vp-button-brand-text: var(--vp-c-white);
--vp-button-brand-bg: var(--vp-c-brand-3);
--vp-button-brand-hover-border: transparent;
--vp-button-brand-hover-text: var(--vp-c-white);
--vp-button-brand-hover-bg: var(--vp-c-brand-2);
--vp-button-brand-active-border: transparent;
--vp-button-brand-active-text: var(--vp-c-white);
--vp-button-brand-active-bg: var(--vp-c-brand-1);
}
/**
* Component: Home
* -------------------------------------------------------------------------- */
:root {
--vp-home-hero-name-color: transparent;
--vp-home-hero-name-background: -webkit-linear-gradient(
120deg,
#5596ed 30%,
#04327d
);
--vp-home-hero-image-background-image: transparent;
--vp-home-hero-image-filter: blur(44px);
}
@media (min-width: 640px) {
:root {
--vp-home-hero-image-filter: blur(56px);
}
}
@media (min-width: 960px) {
:root {
--vp-home-hero-image-filter: blur(68px);
}
}
/**
* Component: Custom Block
* -------------------------------------------------------------------------- */
:root {
--vp-custom-block-tip-border: transparent;
--vp-custom-block-tip-text: var(--vp-c-text-1);
--vp-custom-block-tip-bg: var(--vp-c-brand-soft);
--vp-custom-block-tip-code-bg: var(--vp-c-brand-soft);
}
/**
* Component: Algolia
* -------------------------------------------------------------------------- */
.DocSearch {
--docsearch-primary-color: var(--vp-c-brand-1) !important;
}
.dark {
--vp-home-hero-name-background: -webkit-linear-gradient(
120deg,
#96c8ea 30%,
#96c8ea
);
--vp-c-brand-1: #9bcdef;
--vp-c-brand-2: #5596ed;
--vp-c-brand-3: #9bcdef;
--vp-c-brand-soft: #d5e3ff;
--vp-button-brand-text: #00344b;
}

View File

@ -1,3 +0,0 @@
module.exports = {
presets: [require.resolve('@docusaurus/core/lib/babel/preset')],
};

View File

@ -1,131 +0,0 @@
/**
* Copyright 2016 Jake Wharton
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
task projectDependencyGraph {
doLast {
def dot = new File(rootProject.rootDir, "docs/static/img/dependency-graph.dot")
dot.parentFile.mkdirs()
dot.delete()
dot << 'digraph {\n'
dot << " graph [label=\"${rootProject.name}\\n \",labelloc=t,fontsize=30,ranksep=1.4];\n"
dot << ' node [style=filled, fillcolor="#bbbbbb"];\n'
dot << ' rankdir=TB;\n'
def rootProjects = []
def queue = [rootProject]
while (!queue.isEmpty()) {
def project = queue.remove(0)
rootProjects.add(project)
queue.addAll(project.childProjects.values())
}
def projects = new LinkedHashSet<Project>()
def dependencies = new LinkedHashMap<Tuple2<Project, Project>, List<String>>()
def multiplatformProjects = []
def jsProjects = []
def androidProjects = []
def javaProjects = []
queue = [rootProject]
while (!queue.isEmpty()) {
def project = queue.remove(0)
queue.addAll(project.childProjects.values())
if (project.plugins.hasPlugin('org.jetbrains.kotlin.multiplatform')) {
multiplatformProjects.add(project)
}
if (project.plugins.hasPlugin('org.jetbrains.kotlin.js')) {
jsProjects.add(project)
}
if (project.plugins.hasPlugin('com.android.library') || project.plugins.hasPlugin('com.android.application')) {
androidProjects.add(project)
}
if (project.plugins.hasPlugin('java-library') || project.plugins.hasPlugin('java')) {
javaProjects.add(project)
}
project.configurations.all { config ->
config.dependencies
.withType(ProjectDependency)
.collect { it.dependencyProject }
.each { dependency ->
projects.add(project)
projects.add(dependency)
rootProjects.remove(dependency)
def graphKey = new Tuple2<Project, Project>(project, dependency)
def traits = dependencies.computeIfAbsent(graphKey) { new ArrayList<String>() }
if (config.name.toLowerCase().endsWith('implementation')) {
traits.add('style=dotted')
}
}
}
}
projects = projects.sort { it.path }
dot << '\n # Projects\n\n'
for (project in projects) {
def traits = []
if (rootProjects.contains(project)) {
traits.add('shape=box')
}
if (project.getPath().startsWith(":core")) {
traits.add('fillcolor="#94c1ff"')
} else if (project.getPath().startsWith(":app")) {
traits.add('fillcolor="#baffc9"')
} else if (project.getPath().startsWith(":data")) {
traits.add('fillcolor="#fff694"')
} else if (project.getPath().startsWith(":services")) {
traits.add('fillcolor="#ff9498"')
} else if (project.getPath().startsWith(":libs")) {
traits.add('fillcolor="#ad94ff"')
}
dot << " \"${project.path}\" [${traits.join(", ")}];\n"
}
dot << '\n {rank = same;'
for (project in projects) {
if (rootProjects.contains(project)) {
dot << " \"${project.path}\";"
}
}
dot << '}\n'
dot << '\n # Dependencies\n\n'
dependencies.forEach { key, traits ->
dot << " \"${key.first.path}\" -> \"${key.second.path}\""
if (!traits.isEmpty()) {
dot << " [${traits.join(", ")}]"
}
dot << '\n'
}
dot << '}\n'
def p = 'dot -Tpng -O dependency-graph.dot'.execute([], dot.parentFile)
p.waitFor()
if (p.exitValue() != 0) {
throw new RuntimeException(p.errorStream.text)
}
println("Project module dependency graph created.")
}
}

View File

@ -1 +0,0 @@
label: Contributor Guide

View File

@ -1,9 +1,5 @@
---
sidebar_position: 2
---
# Feature Requests
If you have an idea for a new feature, just create a new issue. Please be as descriptive as possible, this will greatly enhance your chances of not simply being ignored.
Approved requests will be marked with the <span class="badge badge--info">enhancement</span> label. However this does not give any information about how soon the feature will be implemented.
Approved requests will be marked with the <Badge type="info">[enhancement](https://github.com/MM2-0/Kvaesitso/labels/enhancement)</Badge> label. However this does not give any information about how soon the feature will be implemented.

View File

@ -18,9 +18,10 @@ There are two components: i18n and units:
Each unit has a `unit_[name]` and a `unit_[name]_symbol` resource. `unit_[name]_symbol` is the
symbol that is used in the search query. For SI units, this should typically be the SI symbol (m, s, kg and so on),
but other, non-SI units may need their symbols to be translated (for example, nautical miles or horse powers).
:::caution
For technical reasons, these symbols may not contain spaces.
:::
> [!CAUTION]
> For technical reasons, these symbols may not contain spaces.
`unit_[name]` is the full name of the unit that is used in the unit converter results. It's a plural resource, for different quantities of that unit.
## Icons and other resources

View File

@ -4,4 +4,4 @@ sidebar_position: 0
# Get Involved
You want to get involved and support the development? Whether you are a developer or not this guide is what you are looking for.
You want to get involved and support the development? Whether you can code or not, there are a lot of ways you can support the development.

View File

@ -1,9 +1,3 @@
---
sidebar_position: 0
---
import BugReportRoundedIcon from '@mui/icons-material/BugReportRounded'
# Report Bugs
The easiest way to get involved is to report bugs on the [issue tracker](https://github.com/MM2-0/Kvaesitso/issues). Before you open a new issue, please make sure you have searched for existing issues to avoid duplications and that you are running the latest release version of the launcher.
@ -19,7 +13,7 @@ Please include all relevant information such as:
When the launcher crashes, a crash report is automatically generated. You can find these crash reports at Settings > Debug > Crash Reporter.
Use the <BugReportRoundedIcon/> icon in the top right corner to open an new issue with that report. Make sure to fill in additional information before submitting, such as steps to reproduce (if possible) or what you were trying to do when the launcher crashed.
Use the <span class="material-symbols-rounded">bug_report</span> icon in the top right corner to open an new issue with that report. Make sure to fill in additional information before submitting, such as steps to reproduce (if possible) or what you were trying to do when the launcher crashed.
## Logs

View File

@ -0,0 +1,28 @@
import type { DefaultTheme } from 'vitepress/types/default-theme'
export const ContributorGuideSidebar: DefaultTheme.SidebarItem[] = [
{
text: 'Get Involved',
link: '/docs/contributor-guide/',
},
{
text: 'Bug Reports',
link: '/docs/contributor-guide/report-bugs',
},
{
text: 'Feature Requests',
link: '/docs/contributor-guide/feature-requests',
},
{
text: 'Translations and i18n',
link: '/docs/contributor-guide/i18n',
},
{
text: 'Pull Requests',
link: '/docs/contributor-guide/pull-requests',
},
{
text: 'Donate',
link: '/docs/contributor-guide/sponsor',
},
]

View File

@ -1,7 +1,3 @@
---
sidebar_position: 1000
---
# Sponsor
# Donate
If you like my work and you want to support the project financially, you can sponsor me on [GitHub sponsors](https://github.com/sponsors/MM2-0).

View File

@ -1 +0,0 @@
label: Developer Guide

View File

@ -1,2 +0,0 @@
label: External APIs
position: 2

View File

@ -2,6 +2,5 @@
Kvaesitso integrates with a number of external APIs. Most of them require some sort of authentication, like an API key. These API keys are not part of the GitHub repository. If you want to build Kvaesitso from source with all features enabled, follow the steps in this chapter.
:::info
Kvaesitso is still buildable even without these steps, but some features will be disabled in the resulting APK. If all you need is a debug build for testing purposes, you can probably skip this chapter.
:::
> [!INFO]
> Kvaesitso is still buildable even without these steps, but some features will be disabled in the resulting APK. If all you need is a debug build for testing purposes, you can probably skip this chapter.

View File

@ -1,30 +0,0 @@
# Microsoft Graph Services
Microsoft Graph Services are used for OneDrive search. To enable OneDrive integration in your builds, follow these steps:
1. Go to the [Microsoft Azure Portal](https://portal.azure.com)
1. Create a new project.
1. Search for App Registrations
1. Add a new registration
1. Supported account types: Accounts in any organizational directory and personal Microsoft accounts
1. Add an authentication platform
1. Go to Authentication
1. Add a platform > Android
1. Enter the debug package name (de.mm20.launcher2.debug) and the signature hash of your debug key
1. You can use the following command to generate the signature hash:
`keytool -exportcert -alias androiddebugkey -keystore ~/.android/debug.keystore | openssl sha1 -binary | openssl base64`
1. Click Configure > Done
1. In the newly created Android section, click on Add URI
1. Add package name (de.mm20.launcher2.release) and signature hash of your release key
1. Download the client details
1. In the debug client row, click on View
1. Copy the JSON below MSAL Configuration to `ms-services/src/debug/res/raw/msal_auth_config.json` (you'll need to create this file first)
1. Repeat the previous step for the release config
1. Add the required scopes
1. Go to API permissions
1. Add a permission
1. Select Microsoft Graph > Delegated permissions
1. Tick the following scopes:
- Files.Read.All
- User.Read
1. Click Add permissions

View File

@ -43,6 +43,8 @@ Bright Sky is an API that converts data published by the Deutscher Wetterdienst
to work with JSON format. The API is free to use and requires no additional configuration, however
it only provides weather data for locations in Germany.
---
[^1]:
These weather providers do not provide any means of geocoding or location lookup. Instead, the
Android Geocoder API is used to lookup locations (in fixed location mode) and location names (in

View File

@ -107,10 +107,9 @@ To your `appfilter.xml` file, add the following:
`prefix` is the prefix of the icon drawables. You need to provide one drawable for each day of the
month (`calendar_1`, `calendar_2`, etc. up to `calendar_31`).
:::note
Single digit days must not be zero-padded (e.g. `calendar_1` is correct but `calendar_01` is not).
Make sure that all 31 drawables are present, or the launcher will reject the icon.
:::
> [!NOTE]
> Single digit days must not be zero-padded (e.g. `calendar_1` is correct but `calendar_01` is not).
> Make sure that all 31 drawables are present, or the launcher will reject the icon.
#### Clock icons
@ -136,9 +135,8 @@ The icon itself must be either a `LayerDrawable`, or an `AdaptiveIconDrawable` w
a `LayerDrawable`
as its foreground layer.
:::note
Some launchers only support `AdaptiveIconDrawable`s, so you should prefer that if possible.
:::
> [!NOTE]
> Some launchers only support `AdaptiveIconDrawable`s, so you should prefer that if possible.
The entry in the `appfilter.xml` file tells the launcher which layer
corresponds to which clock hand. If your icon does not have all three clock hands, you can omit the
@ -188,41 +186,38 @@ must follow these rules:
above, the hour hand is offset by 300°, the minute hand by 60° and the second hand by 180°. This
means that the clock shows 10:10:30 in its default state.
- To let the launcher know which time the clock shows in its default state, you can use
the `defaultHour`, `defaultMinute` and `defaultSecond` attributes in the `appfilter.xml` entry.
the `defaultHour`, `defaultMinute` and `defaultSecond` attributes in the `appfilter.xml` entry.
:::note
> [!NOTE]
>
> `defaultHour`, `defaultMinute` and `defaultSecond` are independent from each other. If you
> set `defaultHour` to 10, then it is expected that the hour hand drawable is rotated by exactly 300°,
> regardless of the positions of the minute and second hands even if that means that the clock shows
> an impossible time.
`defaultHour`, `defaultMinute` and `defaultSecond` are independent from each other. If you
set `defaultHour` to 10, then it is expected that the hour hand drawable is rotated by exactly 300°,
regardless of the positions of the minute and second hands even if that means that the clock shows
an impossible time.
:::
:::info
**Why these numbers?**
Launchers use the `android:level` attribute to
animate the clock hands. A drawable's level is a number
between 0 and 10000 that influences how the drawable is drawn. For `RotateDrawable`s, the level
attribute is used to set the rotation angle. Each level corresponds
to 1/10000 of the angle between `android:fromDegrees` and `android:toDegrees`.
For the second hand, it is expected
that [10 levels are equal to 1 second](https://cs.android.com/android/platform/superproject/+/refs/heads/master:frameworks/libs/systemui/iconloaderlib/src/com/android/launcher3/icons/ClockDrawableWrapper.java;drc=7346c436e5a11ce08f6a80dcfeb8ef941ca30176;l=84).
which means that 600 levels correspond to a full rotation. But since a drawable has 10000 levels,
the total angle must be `360/600 * 10000 = 6000` degrees.
For the minute layer, one level is equal to one minute so 60 levels are equal to a full rotation.
This means that the total angle must be `360/60 * 10000 = 60000` degrees.
For the hour layer, one level is also equal to one minute, so there are `12 * 60 = 720` levels in a
full rotation. `360/720 * 10000 = 5000` degrees.
Technically, you could also use other kinds of drawables that support the `android:level`
attribute (such as a `LevelListDrawable`), as long as you follow the rules above.
:::
> [!INFO]
>
> **Why these numbers?**
>
> Launchers use the `android:level` attribute to
> animate the clock hands. A drawable's level is a number
> between 0 and 10000 that influences how the drawable is drawn. For `RotateDrawable`s, the level
> attribute is used to set the rotation angle. Each level corresponds
> to 1/10000 of the angle between `android:fromDegrees` and `android:toDegrees`.
>
> For the second hand, it is expected
> that [10 levels are equal to 1 second](https://cs.android.com/android/platform/superproject/+/refs/heads/master:frameworks/libs/systemui/iconloaderlib/src/com/android/launcher3/icons/ClockDrawableWrapper.java;drc=7346c436e5a11ce08f6a80dcfeb8ef941ca30176;l=84).
> which means that 600 levels correspond to a full rotation. But since a drawable has 10000 levels,
> the total angle must be `360/600 * 10000 = 6000` degrees.
>
> For the minute layer, one level is equal to one minute so 60 levels are equal to a full rotation.
> This means that the total angle must be `360/60 * 10000 = 60000` degrees.
>
> For the hour layer, one level is also equal to one minute, so there are `12 * 60 = 720` levels in a
> full rotation. `360/720 * 10000 = 5000` degrees.
>
> Technically, you could also use other kinds of drawables that support the `android:level`
> attribute (such as a `LevelListDrawable`), as long as you follow the rules above.
### Themed icons

View File

@ -1,5 +1,6 @@
label: Integrations
label: Plugins
position: 4
link:
type: generated-index
title: Integrations
title: Plugins
description: In this chapter you will learn how external apps can integrate with Kvaesitso.

View File

@ -0,0 +1,5 @@
# Get Started
First, create a new project in Android Studio.
## Get the plugin SDK

View File

@ -0,0 +1 @@
# File Search

View File

@ -0,0 +1 @@
# Search provider

View File

@ -0,0 +1,56 @@
import type { DefaultTheme } from 'vitepress/types/default-theme'
export const DeveloperGuideSidebar: DefaultTheme.SidebarItem[] = [
{
text: 'Developer Guide',
link: '/docs/developer-guide/',
},
{
text: 'Setup',
link: '/docs/developer-guide/setup',
},
{
text: 'External APIs',
link: '/docs/developer-guide/external-apis/',
items: [
{
text: 'Currency Exchange Rates',
link: '/docs/developer-guide/external-apis/exchange-rates',
},
{
text: 'Google Cloud Services',
link: '/docs/developer-guide/external-apis/google',
},
{
text: 'Weather Services',
link: '/docs/developer-guide/external-apis/weather',
},
{
text: 'Wikipedia',
link: '/docs/developer-guide/external-apis/wikipedia',
},
],
},
{
text: 'Project Structure',
items: [
{
text: 'Modules',
link: '/docs/developer-guide/project-structure/modules',
},
{
text: 'Libraries',
link: '/docs/developer-guide/project-structure/libraries',
},
],
},
{
text: 'Integrations',
items: [
{
text: 'Icon Packs',
link: '/docs/developer-guide/integrations/icon-packs',
},
],
},
]

View File

@ -1,2 +0,0 @@
label: User Guide
position: 0

View File

@ -1,4 +0,0 @@
label: Concepts
link:
type: generated-index
title: Concepts

View File

@ -1,5 +1,3 @@
import StarBorderRoundedIcon from '@mui/icons-material/StarBorderRounded'
# Favorites
Favorites allow even faster access to selected items.
@ -12,7 +10,7 @@ Favorites consist of:
## Pin apps to favorites
You can pin any app and any search result to favorites by long pressing it and selecting the <StarBorderRoundedIcon /> icon. Remove items by pressing the same icon again.
You can pin any app and any search result to favorites by long pressing it and selecting the <span class="material-symbols-rounded">star_border</span> icon. Remove items by pressing the same icon again.
Some apps allow the creation of home screen shortcuts. These shortcuts will also appear in the favorites section.
@ -24,9 +22,8 @@ Favorites can appear in three different places:
- In the [favorites widget](/docs/user-guide/widgets/favorites-widget) (not enabled by default)
- In the [clock widget](/docs/user-guide/widgets/clock#dynamic-components) (not enabled by default)
:::info
If you have the calendar widget enabled, pinned calendar events will not appear in any of the above places. Instead, they will appear in the calendar widget.
:::
> [!INFO]
> If you have the calendar widget enabled, pinned calendar events will not appear in any of the above places. Instead, they will appear in the calendar widget.
## Customization

View File

@ -1,9 +1,3 @@
import EditRoundedIcon from '@mui/icons-material/EditRounded'
import AddRoundedIcon from '@mui/icons-material/AddRounded'
import MoreVertRoundedIcon from '@mui/icons-material/MoreVertRounded'
import DeleteRoundedIcon from '@mui/icons-material/DeleteRounded'
import CopyRoundedIcon from '@mui/icons-material/ContentCopyRounded'
# Tags
Tags are a way to organize apps and other items.
@ -15,7 +9,7 @@ Tags are a way to organize apps and other items.
There are three ways to create tags and assign them to items:
1. Long-press any search result and select “Customize” (or the <EditRoundedIcon /> icon) in the menu.
1. Long-press any search result and select “Customize” (or the <span class="material-symbols-rounded">edit</span> icon) in the menu.
2. Type a comma-separated list of tags into the tags input field.
OR
@ -29,7 +23,7 @@ OR
1. Go to Settings > Search > Tags
2. On this screen, you can:
- Create a new tag by tapping on the <AddRoundedIcon /> in the bottom right corner
- Create a new tag by tapping on the <span class="material-symbols-rounded">add</span> in the bottom right corner
- Quickly assign multiple apps to a tag:
- Tap on a tag
- In the dialog sheet, tap on “x items selected”
@ -37,10 +31,10 @@ OR
- Rename a tag:
- Tap on a tag and change the name in the dialog sheet
- Delete a tag:
- Tap on the <MoreVertRoundedIcon /> icon and select <DeleteRoundedIcon /> Delete
- Tap on the <span class="material-symbols-rounded">more_vert</span> icon and select <span class="material-symbols-rounded">delete</span> Delete
- Duplicate a tag:
- Tap on the <MoreVertRoundedIcon /> and select <CopyRoundedIcon /> Duplicate
- Tap on the <span class="material-symbols-rounded">more_vert</span> and select <span class="material-symbols-rounded">content_copy</span> Duplicate
- Merge two tags:
- Tap on one of the two tags you want to merge
- Change the name of that tag to the name of the other tag
- The contents of the two tags will be merged
- The contents of the two tags will be merged

View File

@ -1,4 +0,0 @@
label: Customization
link:
type: generated-index
title: Customization

View File

@ -1,12 +1,3 @@
import AddIcon from '@mui/icons-material/AddRounded'
import EditIcon from '@mui/icons-material/EditRounded'
import MoreVertIcon from '@mui/icons-material/MoreVertRounded'
import ContentCopyIcon from '@mui/icons-material/ContentCopyRounded'
import AutoFixHighIcon from '@mui/icons-material/AutoFixHighRounded'
import LightModeIcon from '@mui/icons-material/LightModeRounded'
import DarkModeIcon from '@mui/icons-material/DarkModeRounded'
import PaletteIcon from '@mui/icons-material/PaletteRounded'
# Color Schemes
Color schemes can be managed at settings > appearance > color schemes.
@ -26,18 +17,16 @@ A high contrast theme using only black and white.
## Custom color schemes
Customize the launchers color scheme to your likings. You can have as many color schemes as you want.
Create a new color scheme by clicking the <AddIcon/> button in the bottom right corner, or by
selecting <MoreVertIcon /> > <ContentCopyIcon /> **Duplicate** on an existing color scheme.
You can then edit a color scheme by selecting <MoreVertIcon /> > <EditIcon /> **Edit**.
Create a new color scheme by clicking the <span class="material-symbols-rounded">add</span> button in the bottom right corner, or by
selecting <span class="material-symbols-rounded">more_vert</span> > <span class="material-symbols-rounded">content_copy</span> **Duplicate** on an existing color scheme.
You can then edit a color scheme by selecting <span class="material-symbols-rounded">more_vert</span> > <span class="material-symbols-rounded">edit</span> **Edit**.
Kvaesitso uses the Material Design 3 system for its user interface. The color schemes are therefore
based on the Material Design 3 color system.
:::info
For a detailed explanation of the color system, see https://m3.material.io/styles/color/the-color-system
:::
> [!INFO]
> For a detailed explanation of the color system, see https://m3.material.io/styles/color/the-color-system
### Key colors
@ -45,8 +34,8 @@ A color scheme is defined by a set of key colors. These key colors are not used
they are used to generate the rest of the color scheme. The key colors are:
- **Primary**: mainly used for interactive key components, like buttons, switches and input
fields. Also used for [themed icons](/docs/user-guide/customization/themed-icons/) and as elevation overlay color (cards, dialogs and other elevated
surfaces will have a slight tint of this color)
fields. Also used for [themed icons](/docs/user-guide/customization/themed-icons) and as elevation overlay color (cards, dialogs and other elevated
surfaces will have a slight tint of this color)
- **Secondary**: used for less prominent components, such as chips, badges and some (non interactive) headlines
- **Tertiary**: not used anywhere at the moment, reserved for future use
- **Neutral**: used as background for cards, dialogs, settings, and other surfaces. Also used for text and some icons
@ -60,7 +49,7 @@ usually based on the wallpaper.
Material Design 3 comes with an algorithm to generate an entire key color palette based on a single
seed color (this is what the system uses to generate an entire color palette based on a single
wallpaper key color). To make use of this algorithm, each key color (except primary) has
a <AutoFixHighIcon /> **From primary** button, which generates a new color based on the currently
a <span class="material-symbols-rounded">auto_fix_high</span> **From primary** button, which generates a new color based on the currently
selected primary color.
### Scheme colors
@ -68,27 +57,25 @@ selected primary color.
Scheme colors are colors that are derived from the key colors and that are used for actual UI
components.
:::info
To derive these colors, Material 3 uses a color model called HCT (Hue, Chroma, Tone). In its core,
it is similar to the probably more commonly known HSL (Hue, Saturation, Lightness) color model, but it
better reflects how humans perceive colors. For more information, read https://material.io/blog/science-of-color-design
Each scheme color is generated from a specific key color by changing the key color's tone.
:::
> [!INFO]
> To derive these colors, Material 3 uses a color model called HCT (Hue, Chroma, Tone). In its core,
> it is similar to the probably more commonly known HSL (Hue, Saturation, Lightness) color model, but it
> better reflects how humans perceive colors. For more information, read https://material.io/blog/science-of-color-design
>
> Each scheme color is generated from a specific key color by changing the key color's tone.
To learn how the different scheme colors are used in components, refer to the
[Material 3 Design docs](https://m3.material.io/styles/color/the-color-system/color-roles).
Examples are shown in the color scheme editor. Keep in mind, that not all scheme colors are currently
used by Kvaesitso.
:::tip
Long press a color to display its name.
:::
> [!TIP]
> Long press a color to display its name.
For each scheme color, there is one variant for light mode, and one for dark mode. To toggle between
light and dark mode variants, use the <LightModeIcon /> and <DarkModeIcon /> buttons in the top right corner
light and dark mode variants, use the <span class="material-symbols-rounded">light_mode</span> and <span class="material-symbols-rounded">dark_mode</span> buttons in the top right corner
of each section.
For each scheme color, you can either select a custom color, or you can derive a color from a key color.
To derive a color from a key color, select <PaletteIcon /> **Palette**, and then select the key color
To derive a color from a key color, select <span class="material-symbols-rounded">palette</span> **Palette**, and then select the key color
to derive from. You can then adjust the tone of the derived color by dragging the **T** slider.

View File

@ -1,8 +1,6 @@
import EditRoundedIcon from '@mui/icons-material/EditRounded'
# Per-Item Customization
Apps and other search results can be customized individually. Long-press an item and select Customize (or the <EditRoundedIcon /> icon) in the menu.
Apps and other search results can be customized individually. Long-press an item and select Customize (or the <span class="material-symbols-rounded">edit</span> icon) in the menu.
## Custom labels

View File

@ -7,13 +7,10 @@ Themed Icons is a feature that adapt app icons to the launcher's color scheme:
Themed icons can be enabled for supported apps in Settings > Grid & icons > Themed Icons.
:::note
If you are an app developer, you can support themed icons by adding a `<monochrome>` drawable to
your app icon. For more information refer to
[the official documentation](https://developer.android.com/develop/ui/views/launch/icon_design_adaptive#add_your_adaptive_icon_to_your_app).
:::
> [!NOTE]
> If you are an app developer, you can support themed icons by adding a `<monochrome>` drawable to
> your app icon. For more information refer to
> [the official documentation](https://developer.android.com/develop/ui/views/launch/icon_design_adaptive#add_your_adaptive_icon_to_your_app).
While themed icons were originally introduced in Android 13, support has been backported to Android
8.0-12.
@ -30,21 +27,19 @@ that pack using the toggle button that appears in the icon pack preference:
![Themed icon pack](/img/themed-icon-pack.png)
:::note
If you are an icon pack developer, you can indicate that your icon pack supports themed icons by
adding
the following intent filter:
```xml
<intent-filter>
<action android:name="app.lawnchair.icons.THEMED_ICON" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
```
:::
> [!NOTE]
> If you are an icon pack developer, you can indicate that your icon pack supports themed icons by
> adding
> the following intent filter:
>
> ```xml
> <intent-filter>
>
> <action android:name="app.lawnchair.icons.THEMED_ICON" />
> <category android:name="android.intent.category.DEFAULT" />
>
> </intent-filter>
> ```
## Auto generated themed icons

View File

@ -6,13 +6,13 @@ sidebar_position: 2
## How do I get app icons on the home screen?
There are two options:
There are two options:
1. Go to Settings > Home screen > Clock and enable "Favorites". This will display the first row of pinned items
as part of the clock widget.
as part of the clock widget.
2. Scroll down to the end of the widgets list, select "Edit widgets" > "Add widget" > "Favorites" to add
the favorites widget to the home screen.
the favorites widget to the home screen.
## Can I remove / customize the clock?
@ -22,4 +22,3 @@ style. There is also an "empty style" that will remove the clock entirely.
## The toggle to grant notification access is disabled
Please refer to the [Restricted Settings on Android 13+](/docs/user-guide/troubleshooting/restricted-settings) page.

View File

@ -1,4 +0,0 @@
label: Integrations
link:
type: generated-index
title: Integrations

View File

@ -1,4 +0,0 @@
label: Search
link:
type: generated-index
title: Search

View File

@ -1,11 +1,9 @@
import AddRoundedIcon from '@mui/icons-material/AddRounded'
# Quick Actions
Quick actions are shown below the search terms. They are shortcuts that pass your search term to another app to do _something_ with it.
There are four kinds of actions: built-in actions, web search actions, app search actions and custom intents.
Quick actions can be customized at settings > search > quick actions. Click the <AddRoundedIcon /> icon to create a new action. Long-press and drag actions to reorder them.
Quick actions can be customized at settings > search > quick actions. Click the <span class="material-symbols-rounded">add</span> icon to create a new action. Long-press and drag actions to reorder them.
## Built-in
@ -24,7 +22,7 @@ Built-in actions can be enabled or disabled using the switches. There are curren
Web search actions are shortcuts to perform a search on a website, e.g. to search on Google.
To create a new web search action, click the <AddRoundedIcon /> button in the bottom right corner and select _Search on a website_.
To create a new web search action, click the <span class="material-symbols-rounded">add</span> button in the bottom right corner and select _Search on a website_.
In the next step, enter the URL of the website, e.g. "google.com" and press continue. The launcher will try to fetch the search specification from the website and proceed to the last step.
@ -45,11 +43,11 @@ In the last step, you can customize the web search action. Depending on whether
- Open the website you wish to add in a browser
- Use the website's search field to search for anything
- Look at the browser's URL bar. Find the search term you just searched for in the URL
:::info
Spaces and special characters might be encoded. Don't worry about it, the launcher will handle the encoding for you.
If you can't find the search term anywhere, try to disable Javascript and try again. If that still doesn't work, then that website cannot be used.
:::
> [!INFO]
> Spaces and special characters might be encoded. Don't worry about it, the launcher will handle the encoding for you.
>
> If you can't find the search term anywhere, try to disable Javascript and try again. If that still doesn't work, then that website cannot be used.
- Replace the search term in the URL with `${1}`. Copy the URL and paste it into the URL template field.
@ -63,15 +61,14 @@ In the last step, you can customize the web search action. Depending on whether
## App search
:::info
App search actions are an experimental feature. Some actions might not work as expected.
:::
> [!INFO]
> App search actions are an experimental feature. Some actions might not work as expected.
App search actions allow you to directly launch an apps search screen for apps that support it. To create a new web search action, click the <AddRoundedIcon /> button in the bottom right corner and select _Search in an app_. A list of apps will appear. Pick an app to search.
App search actions allow you to directly launch an apps search screen for apps that support it. To create a new web search action, click the <span class="material-symbols-rounded">add</span> button in the bottom right corner and select _Search in an app_. A list of apps will appear. Pick an app to search.
### Advanced settings
You probably won't need this but if you know what you're doing, you can use this to pass extra data to the search intent. First, select a data type and a key and click the <AddRoundedIcon /> button to add a new extra. A new text field (or switch in case of a boolean extra) will appear where you can change the extra's value.
You probably won't need this but if you know what you're doing, you can use this to pass extra data to the search intent. First, select a data type and a key and click the <span class="material-symbols-rounded">add</span> button to add a new extra. A new text field (or switch in case of a boolean extra) will appear where you can change the extra's value.
## Custom intent
@ -79,4 +76,4 @@ If you are an Android developer, you probably know what an [Intent](https://deve
### Advanced settings
**Extras**: here you can add custom extras that are passed along with the intent. First, select a data type and a key and click the <AddRoundedIcon /> button to add a new extra. A new text field (or switch in case of a boolean extra) will appear where you can change the extra's value.
**Extras**: here you can add custom extras that are passed along with the intent. First, select a data type and a key and click the <span class="material-symbols-rounded">add</span> button to add a new extra. A new text field (or switch in case of a boolean extra) will appear where you can change the extra's value.

View File

@ -0,0 +1,118 @@
import type { DefaultTheme } from 'vitepress/types/default-theme'
export const UserGuideSidebar: DefaultTheme.SidebarItem[] = [
{
text: 'Get Started',
link: '/docs/user-guide/',
},
{
text: 'Frequently Asked Questions',
link: '/docs/user-guide/faq',
},
{
text: 'Concepts',
items: [
{
text: 'Favorites',
link: '/docs/user-guide/concepts/favorites',
},
{
text: 'Tags',
link: '/docs/user-guide/concepts/tags',
},
],
},
{
text: 'Customization',
items: [
{
text: 'Color Schemes',
link: '/docs/user-guide/customization/color-schemes',
},
{
text: 'Per-item Customization',
link: '/docs/user-guide/customization/per-item-customization',
},
{
text: 'Themed Icons',
link: '/docs/user-guide/customization/themed-icons',
},
],
},
{
text: 'Integrations',
items: [
{
text: 'Media Control',
link: '/docs/user-guide/integrations/mediacontrol',
},
{
text: 'Weather',
link: '/docs/user-guide/integrations/weather',
},
],
},
{
text: 'Search',
items: [
{
text: 'Calculator',
link: '/docs/user-guide/search/calculator',
},
{
text: 'Unit Converter',
link: '/docs/user-guide/search/unit-converter',
},
{
text: 'Quick Actions',
link: '/docs/user-guide/search/quickactions',
},
],
},
{
text: 'Widgets',
items: [
{
text: 'Calendar Widget',
link: '/docs/user-guide/widgets/calendar-widget',
},
{
text: 'Clock Widget',
link: '/docs/user-guide/widgets/clock',
},
{
text: 'Favorites Widget',
link: '/docs/user-guide/widgets/favorites-widget',
},
{
text: 'Music Widget',
link: '/docs/user-guide/widgets/music-widget',
},
{
text: 'Notes Widget',
link: '/docs/user-guide/widgets/notes-widget',
},
{
text: 'Weather Widget',
link: '/docs/user-guide/widgets/weather-widget',
},
],
},
{
text: 'Troubleshooting',
items: [
{
text: 'Crash Reporter',
link: '/docs/user-guide/troubleshooting/crashreporter',
},
{
text: 'Reccuring Permission Requests',
link: '/docs/user-guide/troubleshooting/granted-permissions',
},
{
text: 'Restricted Settings on Android 13+',
link: '/docs/user-guide/troubleshooting/restricted-settings',
},
],
},
]

View File

@ -1,4 +0,0 @@
label: Troubleshooting
link:
type: generated-index
title: Troubleshooting and Debugging

View File

@ -0,0 +1,15 @@
# Crash Reporter
When the launcher crashes, a notification is posted. When you tap on that notification, the crash reporter screen opens. You can also navigate to that screen like this: Settings > Debug > Crash reporter.
The crash reporter lists crashes and exceptions.
## Crashes
Crashes are marked with the <span class="material-symbols-rounded">error</span> icon. Crashes are unexpected errors that were not handled by launcher. They are often a consequence of bugs and should therefore be reported. You can click the <span class="material-symbols-rounded">bug_report</span> icon in the top right corner to create a new issue on GitHub. Make sure to fill in additional information like steps to reproduce (if possible) or what you were trying to do that lead to the crash.
[Read more about reporting bugs](/docs/contributor-guide/report-bugs).
## Exceptions
Exceptions are marked with the <span class="material-symbols-rounded">warning</span> icon. Exceptions are errors that were handled by the launcher. They can sometimes be helpful to locate bugs and other sources of errors, but as long as you don't notice anything strange, you can safely ignore them and do not need to report them. It is expected that some exceptions will occur while the launcher is running. For example, the most common source of exceptions is network timeouts due to the device being offline.

View File

@ -1,19 +0,0 @@
import ErrorRoundedIcon from '@mui/icons-material/ErrorRounded'
import BugReportRoundedIcon from '@mui/icons-material/BugReportRounded'
import WarningRoundedIcon from '@mui/icons-material/WarningRounded'
# Crash Reporter
When the launcher crashes, a notification is posted. When you tap on that notification, the crash reporter screen opens. You can also navigate to that screen like this: Settings > Debug > Crash reporter.
The crash reporter lists crashes and exceptions.
## Crashes
Crashes are marked with the <ErrorRoundedIcon/> icon. Crashes are unexpected errors that were not handled by launcher. They are often a consequence of bugs and should therefore be reported. You can click the <BugReportRoundedIcon/> icon in the top right corner to create a new issue on GitHub. Make sure to fill in additional information like steps to reproduce (if possible) or what you were trying to do that lead to the crash.
[Read more about reporting bugs](/docs/contributor-guide/report-bugs).
## Exceptions
Exceptions are marked with the <WarningRoundedIcon/> icon. Exceptions are errors that were handled by the launcher. They can sometimes be helpful to locate bugs and other sources of errors, but as long as you don't notice anything strange, you can safely ignore them and do not need to report them. It is expected that some exceptions will occur while the launcher is running. For example, the most common source of exceptions is network timeouts due to the device being offline.

View File

@ -1,5 +1,3 @@
import MoreVertRoundedIcon from '@mui/icons-material/MoreVertRounded'
# Restricted Settings on Android 13+
Starting with Android 13, some settings are restricted for sideloaded apps and extra steps are required to enable them.
@ -23,11 +21,10 @@ The notification access permission is used to display notification badges, and t
<img src="/img/notification-access-3.png" width="300"/>
5. Tap on the 3-dot-menu (<MoreVertRoundedIcon/>) in the top-right corner.
5. Tap on the 3-dot-menu (<span class="material-symbols-rounded">more_vert</span>) in the top-right corner.
:::info
This menu only shows up if you have tried to enable a restricted setting before. **Step 2 is crucial for this to work.**
:::
> [!INFO]
> This menu only shows up if you have tried to enable a restricted setting before. **Step 2 is crucial for this to work.**
6. Tap on “Allow restricted settings”
@ -53,15 +50,13 @@ The accessibility service is used to perform certain gesture actions, like turni
<img src="/img/notification-access-3.png" width="300"/>
5. Tap on the 3-dot-menu (<span class="material-symbols-rounded">more_vert</span>) in the top-right corner.
5. Tap on the 3-dot-menu (<MoreVertRoundedIcon/>) in the top-right corner.
:::info
This menu only shows up if you have tried to enable a restricted setting before. **Step 2 is crucial for this to work.**
:::
> [!INFO]
> This menu only shows up if you have tried to enable a restricted setting before. **Step 2 is crucial for this to work.**
6. Tap on “Allow restricted settings”
<img src="/img/notification-access-4.png" width="300"/>
7. Go back to the accessibility screen. Kvaesitso is no longer disabled, and you can enable it.
7. Go back to the accessibility screen. Kvaesitso is no longer disabled, and you can enable it.

View File

@ -1,4 +0,0 @@
label: Widgets
link:
type: generated-index
title: Widgets

View File

@ -1,9 +1,7 @@
import TuneRoundedIcon from '@mui/icons-material/TuneRounded'
# Calendar Widget
Display calendar events and appointments for the next seven days. In the widget settings, you can
choose which calendars to display: Tap 'Edit widgets', then tap the <TuneRoundedIcon /> icon for the
choose which calendars to display: Tap 'Edit widgets', then tap the <span class="material-symbols-rounded">tune</span> icon for the
calendar widget. There is also an option to hide all-day events.
## My calendars don't show up!
@ -12,6 +10,7 @@ Calendar apps need to use the Android calendar provider APIs to store their cale
to make them accessible for other apps (like this widget).
The calendar provider framework consists of two parts:
- calendar providers that serve as a backend to store and sync calendar data
- calendar apps that provide a user interface to view and modify calendar data
@ -37,6 +36,7 @@ this widget cannot display Proton Calendar events. As a workaround, if you are o
plan, you can [share your calendar via link](https://proton.me/support/share-calendar-via-link) and
then sync that calendar link using [ICSx⁵](https://f-droid.org/de/packages/at.bitfire.icsdroid/). However,
this solution has some drawbacks:
- The synced calendar is read-only, if you need to make changes, you need to do that in the Proton Calendar app
- The calendar widget will not open the event in the Proton Calendar app, but in the default calendar app
- You effectively bypass Proton's privacy features
@ -62,4 +62,4 @@ Simple Calendar settings, and enabling 'CalDAV sync'. There you can select your
To migrate your existing Simple Calendar calendars to the new calendar provider, select
'Export events to an .ics file', then clear them from Simple Calendar (settings > Delete all events and tasks)
and reimport them ('Import events from an .ics file'). Make sure to select the right calendar
and that 'Ignore event types in the file, always use the default one' is ticked.
and that 'Ignore event types in the file, always use the default one' is ticked.

View File

@ -1,3 +1,3 @@
# Favorites Widget
A widget that displays your [favorites](/docs/user-guide/concepts/favorites). This mirrors the favorites grid that is shown above the app grid but brings them to the widget page. This widget is not enabled by default.
A widget that displays your [favorites](/docs/user-guide/concepts/favorites). This mirrors the favorites grid that is shown above the app grid but brings them to the widget page.

View File

@ -1,5 +1,3 @@
import MoreVertRoundedIcon from '@mui/icons-material/MoreVertRounded'
# Notes Widget
The notes widget allows you to write down quick notes on your home screen. It is not enabled by
@ -12,6 +10,7 @@ and selecting "Add widget" > "Notes".
The notes widget consists of a text field that you can use to write down notes. Basic markdown
syntax is supported:
<details>
- `**Bold**`
@ -36,14 +35,14 @@ syntax is supported:
### Export notes
Notes can be exported as markdown files. To do so, tap the <MoreVertRoundedIcon /> icon in the bottom right corner and select "Save".
Notes can be exported as markdown files. To do so, tap the <span class="material-symbols-rounded">more_vert</span> icon in the bottom right corner and select "Save".
### Add notes
A new instance of the notes widget can be added by tapping the <MoreVertRoundedIcon /> in an existing notes widget and selecting "New note".
A new instance of the notes widget can be added by tapping the <span class="material-symbols-rounded">more_vert</span> in an existing notes widget and selecting "New note".
### Dismiss notes
Notes can be dismissed by tapping the <MoreVertRoundedIcon /> icon in the bottom right corner and
Notes can be dismissed by tapping the <span class="material-symbols-rounded">more_vert</span> icon in the bottom right corner and
selecting "Dismiss". If you dismiss a note, the widget will be removed, unless it is the last instance
of a note widget. In this case the note widget's content will be cleared instead.

View File

@ -1,14 +1,12 @@
import TuneRoundedIcon from '@mui/icons-material/TuneRounded'
# Weather Widget
A widget that displays current and future weather data.
## Configuration
The weather widget can be configured by tapping "Edit widgets" and then selecting the <TuneRoundedIcon /> icon
The weather widget can be configured by tapping "Edit widgets" and then selecting the <span class="material-symbols-rounded">tune</span> icon
on the weather widget.
- **Compact mode**: If enabled, the widget will only display the current weather data. Forecast data will be hidden.
- **Weather integration settings**: A shortcut to [Settings > Integrations > Weather](/docs/user-guide/integrations/weather). This is where you can configure
which weather provider to use and which location to get weather data for.
which weather provider to use and which location to get weather data for.

View File

@ -1,143 +0,0 @@
// @ts-check
// Note: type annotations allow type checking and IDEs autocompletion
const lightCodeTheme = require('prism-react-renderer/themes/github')
const darkCodeTheme = require('prism-react-renderer/themes/dracula')
/** @type {import('@docusaurus/types').Config} */
const config = {
title: 'Kvaesitso',
tagline: 'A search-focused, free and open source launcher for Android',
url: 'https://kvaesitso.mm20.de',
baseUrl: '/',
onBrokenLinks: 'throw',
onBrokenMarkdownLinks: 'warn',
favicon: 'img/ic_launcher.png',
// GitHub pages deployment config.
// If you aren't using GitHub pages, you don't need these.
organizationName: 'MM2-0', // Usually your GitHub org/user name.
projectName: 'Kvaesitso', // Usually your repo name.
// Even if you don't use internalization, 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',
/** @type {import('@docusaurus/preset-classic').Options} */
({
docs: {
sidebarPath: require.resolve('./sidebars.js'),
editUrl:
'https://github.com/MM2-0/Kvaesitso/tree/main/docs/',
},
blog: false,
theme: {
customCss: require.resolve('./src/css/custom.css'),
},
}),
],
],
themeConfig:
/** @type {import('@docusaurus/preset-classic').ThemeConfig} */
({
navbar: {
title: 'Kvaesitso',
logo: {
alt: 'App Icon',
src: 'img/ic_launcher.png',
},
items: [
{
type: 'doc',
docId: 'user-guide/index',
position: 'left',
label: 'User Guide',
},
{
type: 'doc',
docId: 'developer-guide/index',
position: 'left',
label: 'Developer Guide',
},
{
type: 'doc',
docId: 'contributor-guide/index',
position: 'left',
label: 'Contributor Guide',
},
{
href: 'https://github.com/MM2-0/Kvaesitso',
label: 'GitHub',
position: 'right',
},
],
},
footer: {
style: 'dark',
links: [
{
title: 'Documentation',
items: [
{
label: 'User guide',
to: '/docs/user-guide',
},
{
label: 'Developer guide',
to: '/docs/developer-guide',
},
{
label: 'Contributor guide',
to: '/docs/contributor-guide',
},
],
},
{
title: 'Legal',
items: [
{
label: 'Privacy policy',
to: '/privacy-policy',
},
{
label: 'License',
href: '/license',
},
],
},
{
title: 'Links',
items: [
{
label: 'GitHub',
href: 'https://github.com/MM2-0/Kvaesitso',
},
{
label: 'Telegram',
href: 'https://t.me/Kvaesitso',
},
],
},
],
copyright: `Copyright © ${new Date().getFullYear()} MM2-0 and the Kvaesitso contributors. Built with Docusaurus.`,
},
prism: {
theme: lightCodeTheme,
darkTheme: darkCodeTheme,
},
colorMode: {
respectPrefersColorScheme: true
},
}),
}
module.exports = config

26
docs/index.md Normal file
View File

@ -0,0 +1,26 @@
---
# https://vitepress.dev/reference/default-theme-home-page
layout: home
hero:
name: 'Kvaesitso'
tagline: A search-focused, free and open source launcher for Android
image: /icon.png
actions:
- theme: brand
text: Get started
link: /docs/user-guide/
---
<script setup>
import Footer from '.vitepress/theme/Footer.vue'
</script>
<div class="home-screenshots">
<img src="/img/screenshot-1.png"></img>
<img src="/img/screenshot-2.png"></img>
<img src="/img/screenshot-3.png"></img>
<img src="/img/screenshot-4.png"></img>
<img src="/img/screenshot-5.png"></img>
<img src="/img/screenshot-6.png"></img>
</div>
<Footer></Footer>

View File

@ -1,6 +1,4 @@
# License
## GNU GENERAL PUBLIC LICENSE
# GNU GENERAL PUBLIC LICENSE
Version 3, 29 June 2007
@ -10,7 +8,7 @@ Copyright (C) 2007 Free Software Foundation, Inc.
Everyone is permitted to copy and distribute verbatim copies of this
license document, but changing it is not allowed.
### Preamble
## Preamble
The GNU General Public License is a free, copyleft license for
software and other kinds of works.
@ -75,9 +73,9 @@ assures that patents cannot be used to render the program non-free.
The precise terms and conditions for copying, distribution and
modification follow.
### TERMS AND CONDITIONS
## TERMS AND CONDITIONS
#### 0. Definitions.
### 0. Definitions.
"This License" refers to version 3 of the GNU General Public License.
@ -117,7 +115,7 @@ work under this License, and how to view a copy of this License. If
the interface presents a list of user commands or options, such as a
menu, a prominent item in the list meets this criterion.
#### 1. Source Code.
### 1. Source Code.
The "source code" for a work means the preferred form of the work for
making modifications to it. "Object code" means any non-source form of
@ -158,7 +156,7 @@ regenerate automatically from other parts of the Corresponding Source.
The Corresponding Source for a work in source code form is that same
work.
#### 2. Basic Permissions.
### 2. Basic Permissions.
All rights granted under this License are granted for the term of
copyright on the Program, and are irrevocable provided the stated
@ -183,7 +181,7 @@ Conveying under any other circumstances is permitted solely under the
conditions stated below. Sublicensing is not allowed; section 10 makes
it unnecessary.
#### 3. Protecting Users' Legal Rights From Anti-Circumvention Law.
### 3. Protecting Users' Legal Rights From Anti-Circumvention Law.
No covered work shall be deemed part of an effective technological
measure under any applicable law fulfilling obligations under article
@ -199,7 +197,7 @@ operation or modification of the work as a means of enforcing, against
the work's users, your or third parties' legal rights to forbid
circumvention of technological measures.
#### 4. Conveying Verbatim Copies.
### 4. Conveying Verbatim Copies.
You may convey verbatim copies of the Program's source code as you
receive it, in any medium, provided that you conspicuously and
@ -212,7 +210,7 @@ recipients a copy of this License along with the Program.
You may charge any price or no price for each copy that you convey,
and you may offer support or warranty protection for a fee.
#### 5. Conveying Modified Source Versions.
### 5. Conveying Modified Source Versions.
You may convey a work based on the Program, or the modifications to
produce it from the Program, in the form of source code under the
@ -247,7 +245,7 @@ beyond what the individual works permit. Inclusion of a covered work
in an aggregate does not cause this License to apply to the other
parts of the aggregate.
#### 6. Conveying Non-Source Forms.
### 6. Conveying Non-Source Forms.
You may convey a covered work in object code form under the terms of
sections 4 and 5, provided that you also convey the machine-readable
@ -343,7 +341,7 @@ documented (and with an implementation available to the public in
source code form), and must require no special password or key for
unpacking, reading or copying.
#### 7. Additional Terms.
### 7. Additional Terms.
"Additional permissions" are terms that supplement the terms of this
License by making exceptions from one or more of its conditions.
@ -402,7 +400,7 @@ Additional terms, permissive or non-permissive, may be stated in the
form of a separately written license, or stated as exceptions; the
above requirements apply either way.
#### 8. Termination.
### 8. Termination.
You may not propagate or modify a covered work except as expressly
provided under this License. Any attempt otherwise to propagate or
@ -430,7 +428,7 @@ this License. If your rights have been terminated and not permanently
reinstated, you do not qualify to receive new licenses for the same
material under section 10.
#### 9. Acceptance Not Required for Having Copies.
### 9. Acceptance Not Required for Having Copies.
You are not required to accept this License in order to receive or run
a copy of the Program. Ancillary propagation of a covered work
@ -441,7 +439,7 @@ modify any covered work. These actions infringe copyright if you do
not accept this License. Therefore, by modifying or propagating a
covered work, you indicate your acceptance of this License to do so.
#### 10. Automatic Licensing of Downstream Recipients.
### 10. Automatic Licensing of Downstream Recipients.
Each time you convey a covered work, the recipient automatically
receives a license from the original licensors, to run, modify and
@ -466,7 +464,7 @@ rights granted under this License, and you may not initiate litigation
any patent claim is infringed by making, using, selling, offering for
sale, or importing the Program or any portion of it.
#### 11. Patents.
### 11. Patents.
A "contributor" is a copyright holder who authorizes use under this
License of the Program or a work on which the Program is based. The
@ -535,7 +533,7 @@ Nothing in this License shall be construed as excluding or limiting
any implied license or other defenses to infringement that may
otherwise be available to you under applicable patent law.
#### 12. No Surrender of Others' Freedom.
### 12. No Surrender of Others' Freedom.
If conditions are imposed on you (whether by court order, agreement or
otherwise) that contradict the conditions of this License, they do not
@ -548,7 +546,7 @@ from those to whom you convey the Program, the only way you could
satisfy both those terms and this License would be to refrain entirely
from conveying the Program.
#### 13. Use with the GNU Affero General Public License.
### 13. Use with the GNU Affero General Public License.
Notwithstanding any other provision of this License, you have
permission to link or combine any covered work with a work licensed
@ -559,7 +557,7 @@ but the special requirements of the GNU Affero General Public License,
section 13, concerning interaction through a network will apply to the
combination as such.
#### 14. Revised Versions of this License.
### 14. Revised Versions of this License.
The Free Software Foundation may publish revised and/or new versions
of the GNU General Public License from time to time. Such new versions
@ -585,7 +583,7 @@ permissions. However, no additional obligations are imposed on any
author or copyright holder as a result of your choosing to follow a
later version.
#### 15. Disclaimer of Warranty.
### 15. Disclaimer of Warranty.
THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
@ -597,7 +595,7 @@ PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE
DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR
CORRECTION.
#### 16. Limitation of Liability.
### 16. Limitation of Liability.
IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR
@ -609,7 +607,7 @@ LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM
TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER
PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
#### 17. Interpretation of Sections 15 and 16.
### 17. Interpretation of Sections 15 and 16.
If the disclaimer of warranty and limitation of liability provided
above cannot be given local legal effect according to their terms,
@ -620,7 +618,7 @@ copy of the Program in return for a fee.
END OF TERMS AND CONDITIONS
### How to Apply These Terms to Your New Programs
## How to Apply These Terms to Your New Programs
If you develop a new program, and you want it to be of the greatest
possible use to the public, the best way to achieve this is to make it

23064
docs/package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@ -1,50 +1,15 @@
{
"name": "kvaesitso-website",
"version": "0.0.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": "^2.4.0",
"@docusaurus/preset-classic": "^2.4.0",
"@emotion/react": "^11.10.5",
"@emotion/styled": "^11.10.5",
"@mdx-js/react": "^1.6.22",
"@mui/icons-material": "^5.11.0",
"@mui/material": "^5.11.7",
"clsx": "^1.2.1",
"prism-react-renderer": "^1.3.5",
"react": "^17.0.2",
"react-dom": "^17.0.2"
"docs:dev": "vitepress dev .",
"docs:build": "vitepress build .",
"docs:preview": "vitepress preview ."
},
"devDependencies": {
"@docusaurus/module-type-aliases": "^2.2.0",
"@tsconfig/docusaurus": "^1.0.5",
"typescript": "^4.7.4"
"sass": "^1.70.0",
"vitepress": "^1.0.0-rc.41",
"vue": "^3.4.15"
},
"browserslist": {
"production": [
">0.5%",
"not dead",
"not op_mini all"
],
"development": [
"last 1 chrome version",
"last 1 firefox version",
"last 1 safari version"
]
},
"engines": {
"node": ">=16.14"
"dependencies": {
"material-symbols": "^0.14.7"
}
}

View File

@ -59,10 +59,6 @@ You can optionally enable Wikipedia search to show search results from Wikipedia
You can optionally connect Kvaesitso with your Google account and enable Google Drive™<sup>[^1]</sup> search. While you have this feature enabled, your search requests will be sent to Google servers. The [Google Drive terms of service](https://www.google.com/drive/terms-of-service/) and the [Google privacy policy](https://policies.google.com/privacy) apply.
### Microsoft
You can optionally connect Kvaesitso with your Microsoft account and enable OneDrive<sup>[^2]</sup> search. While you have this feature enabled, your search requests will be sent to Microsoft servers. The [Microsoft privacy policy](https://privacy.microsoft.com/privacy) applies.
### Nextcloud / Owncloud
You can optionally connect Kvaesitso with a Nextcloud<sup>[^3]</sup> or Owncloud<sup>[^4]</sup> account and enable Nextcloud / Owncloud search. While you have this feature enabled, your search requests will be sent to the selected Nextcloud or Owncloud server. Depending on which hosting provider you use, additional terms might apply.

View File

Before

Width:  |  Height:  |  Size: 62 KiB

After

Width:  |  Height:  |  Size: 62 KiB

View File

Before

Width:  |  Height:  |  Size: 103 KiB

After

Width:  |  Height:  |  Size: 103 KiB

View File

Before

Width:  |  Height:  |  Size: 108 KiB

After

Width:  |  Height:  |  Size: 108 KiB

View File

Before

Width:  |  Height:  |  Size: 2.0 MiB

After

Width:  |  Height:  |  Size: 2.0 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 62 KiB

View File

Before

Width:  |  Height:  |  Size: 126 KiB

After

Width:  |  Height:  |  Size: 126 KiB

View File

Before

Width:  |  Height:  |  Size: 126 KiB

After

Width:  |  Height:  |  Size: 126 KiB

View File

Before

Width:  |  Height:  |  Size: 110 KiB

After

Width:  |  Height:  |  Size: 110 KiB

View File

Before

Width:  |  Height:  |  Size: 123 KiB

After

Width:  |  Height:  |  Size: 123 KiB

View File

Before

Width:  |  Height:  |  Size: 2.5 MiB

After

Width:  |  Height:  |  Size: 2.5 MiB

View File

Before

Width:  |  Height:  |  Size: 838 KiB

After

Width:  |  Height:  |  Size: 838 KiB

View File

Before

Width:  |  Height:  |  Size: 587 KiB

After

Width:  |  Height:  |  Size: 587 KiB

View File

Before

Width:  |  Height:  |  Size: 494 KiB

After

Width:  |  Height:  |  Size: 494 KiB

View File

Before

Width:  |  Height:  |  Size: 888 KiB

After

Width:  |  Height:  |  Size: 888 KiB

View File

Before

Width:  |  Height:  |  Size: 628 KiB

After

Width:  |  Height:  |  Size: 628 KiB

View File

Before

Width:  |  Height:  |  Size: 16 KiB

After

Width:  |  Height:  |  Size: 16 KiB

View File

Before

Width:  |  Height:  |  Size: 82 KiB

After

Width:  |  Height:  |  Size: 82 KiB

View File

Before

Width:  |  Height:  |  Size: 43 KiB

After

Width:  |  Height:  |  Size: 43 KiB

Some files were not shown because too many files have changed in this diff Show More