Migrate docs to VitePress
5
.github/workflows/deploy-docs.yml
vendored
@ -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
@ -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
|
||||
|
||||
30
docs/.vitepress/config.mts
Normal 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' }]],
|
||||
})
|
||||
50
docs/.vitepress/theme/Footer.vue
Normal 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>
|
||||
12
docs/.vitepress/theme/Layout.vue
Normal 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>
|
||||
20
docs/.vitepress/theme/custom.css
Normal 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;
|
||||
}
|
||||
}
|
||||
16
docs/.vitepress/theme/index.ts
Normal 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
|
||||
148
docs/.vitepress/theme/style.css
Normal 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;
|
||||
}
|
||||
@ -1,3 +0,0 @@
|
||||
module.exports = {
|
||||
presets: [require.resolve('@docusaurus/core/lib/babel/preset')],
|
||||
};
|
||||
@ -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.")
|
||||
}
|
||||
}
|
||||
@ -1 +0,0 @@
|
||||
label: Contributor Guide
|
||||
@ -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.
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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.
|
||||
|
||||
@ -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
|
||||
|
||||
28
docs/docs/contributor-guide/sidebar.ts
Normal 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',
|
||||
},
|
||||
]
|
||||
@ -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).
|
||||
|
||||
@ -1 +0,0 @@
|
||||
label: Developer Guide
|
||||
@ -1,2 +0,0 @@
|
||||
label: External APIs
|
||||
position: 2
|
||||
@ -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.
|
||||
|
||||
@ -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
|
||||
@ -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
|
||||
|
||||
@ -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
|
||||
|
||||
|
||||
@ -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.
|
||||
5
docs/docs/developer-guide/plugins/get-started.md
Normal file
@ -0,0 +1,5 @@
|
||||
# Get Started
|
||||
|
||||
First, create a new project in Android Studio.
|
||||
|
||||
## Get the plugin SDK
|
||||
@ -0,0 +1 @@
|
||||
# File Search
|
||||
@ -0,0 +1 @@
|
||||
# Search provider
|
||||
56
docs/docs/developer-guide/sidebar.ts
Normal 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',
|
||||
},
|
||||
],
|
||||
},
|
||||
]
|
||||
@ -1,2 +0,0 @@
|
||||
label: User Guide
|
||||
position: 0
|
||||
@ -1,4 +0,0 @@
|
||||
label: Concepts
|
||||
link:
|
||||
type: generated-index
|
||||
title: Concepts
|
||||
@ -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
|
||||
|
||||
@ -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
|
||||
@ -1,4 +0,0 @@
|
||||
label: Customization
|
||||
link:
|
||||
type: generated-index
|
||||
title: Customization
|
||||
@ -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.
|
||||
@ -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
|
||||
|
||||
@ -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:
|
||||
|
||||

|
||||
|
||||
:::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
|
||||
|
||||
|
||||
@ -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.
|
||||
|
||||
|
||||
@ -1,4 +0,0 @@
|
||||
label: Integrations
|
||||
link:
|
||||
type: generated-index
|
||||
title: Integrations
|
||||
@ -1,4 +0,0 @@
|
||||
label: Search
|
||||
link:
|
||||
type: generated-index
|
||||
title: Search
|
||||
@ -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.
|
||||
118
docs/docs/user-guide/sidebar.ts
Normal 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',
|
||||
},
|
||||
],
|
||||
},
|
||||
]
|
||||
@ -1,4 +0,0 @@
|
||||
label: Troubleshooting
|
||||
link:
|
||||
type: generated-index
|
||||
title: Troubleshooting and Debugging
|
||||
15
docs/docs/user-guide/troubleshooting/crashreporter.md
Normal 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.
|
||||
@ -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.
|
||||
@ -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.
|
||||
@ -1,4 +0,0 @@
|
||||
label: Widgets
|
||||
link:
|
||||
type: generated-index
|
||||
title: Widgets
|
||||
@ -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.
|
||||
@ -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.
|
||||
|
||||
@ -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.
|
||||
@ -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.
|
||||
@ -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
@ -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>
|
||||
@ -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
@ -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"
|
||||
}
|
||||
}
|
||||
|
||||
@ -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.
|
||||
|
Before Width: | Height: | Size: 62 KiB After Width: | Height: | Size: 62 KiB |
|
Before Width: | Height: | Size: 103 KiB After Width: | Height: | Size: 103 KiB |
|
Before Width: | Height: | Size: 108 KiB After Width: | Height: | Size: 108 KiB |
|
Before Width: | Height: | Size: 2.0 MiB After Width: | Height: | Size: 2.0 MiB |
BIN
docs/public/img/ic_launcher.png
Normal file
|
After Width: | Height: | Size: 62 KiB |
|
Before Width: | Height: | Size: 126 KiB After Width: | Height: | Size: 126 KiB |
|
Before Width: | Height: | Size: 126 KiB After Width: | Height: | Size: 126 KiB |
|
Before Width: | Height: | Size: 110 KiB After Width: | Height: | Size: 110 KiB |
|
Before Width: | Height: | Size: 123 KiB After Width: | Height: | Size: 123 KiB |
|
Before Width: | Height: | Size: 2.5 MiB After Width: | Height: | Size: 2.5 MiB |
|
Before Width: | Height: | Size: 838 KiB After Width: | Height: | Size: 838 KiB |
|
Before Width: | Height: | Size: 587 KiB After Width: | Height: | Size: 587 KiB |
|
Before Width: | Height: | Size: 494 KiB After Width: | Height: | Size: 494 KiB |
|
Before Width: | Height: | Size: 888 KiB After Width: | Height: | Size: 888 KiB |
|
Before Width: | Height: | Size: 628 KiB After Width: | Height: | Size: 628 KiB |
|
Before Width: | Height: | Size: 16 KiB After Width: | Height: | Size: 16 KiB |
|
Before Width: | Height: | Size: 82 KiB After Width: | Height: | Size: 82 KiB |
|
Before Width: | Height: | Size: 43 KiB After Width: | Height: | Size: 43 KiB |