mirror of
https://github.com/zoriya/astal.git
synced 2025-12-06 06:06:10 +00:00
docs: migrate to vitepress
vitepress feels a bit more polished and clean
This commit is contained in:
1
.gitattributes
vendored
1
.gitattributes
vendored
@@ -1,3 +1,4 @@
|
|||||||
*.mjs linguist-language=TypeScript
|
*.mjs linguist-language=TypeScript
|
||||||
*.js linguist-language=TypeScript
|
*.js linguist-language=TypeScript
|
||||||
|
*.vue linguist-vendored
|
||||||
*.h linguist-vendored
|
*.h linguist-vendored
|
||||||
|
|||||||
37
.github/workflows/pages.yml
vendored
37
.github/workflows/pages.yml
vendored
@@ -1,8 +1,9 @@
|
|||||||
name: Deploy to GitHub Pages
|
name: Deploy VitePress site to Pages
|
||||||
|
|
||||||
on:
|
on:
|
||||||
push:
|
push:
|
||||||
branches: [main]
|
branches: [main]
|
||||||
|
workflow_dispatch:
|
||||||
|
|
||||||
permissions:
|
permissions:
|
||||||
contents: read
|
contents: read
|
||||||
@@ -10,22 +11,42 @@ permissions:
|
|||||||
id-token: write
|
id-token: write
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
build:
|
vitepress:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout your repository using git
|
- name: Checkout
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@v4
|
||||||
- name: Install, build, and upload your site
|
|
||||||
uses: withastro/action@v2
|
|
||||||
with:
|
with:
|
||||||
path: ./docs
|
fetch-depth: 0 # Not needed if lastUpdated is not enabled
|
||||||
|
|
||||||
|
- name: Setup Node
|
||||||
|
uses: actions/setup-node@v4
|
||||||
|
with:
|
||||||
|
node-version: 20
|
||||||
|
|
||||||
|
- name: Setup Pages
|
||||||
|
uses: actions/configure-pages@v4
|
||||||
|
|
||||||
|
- name: Install dependencies
|
||||||
|
run: npm ci
|
||||||
|
working-directory: docs
|
||||||
|
|
||||||
|
- name: Build with VitePress
|
||||||
|
run: npm run build
|
||||||
|
working-directory: docs
|
||||||
|
|
||||||
|
- name: Upload artifact
|
||||||
|
uses: actions/upload-pages-artifact@v3
|
||||||
|
with:
|
||||||
|
path: docs/dist
|
||||||
|
|
||||||
deploy:
|
deploy:
|
||||||
needs: build
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
environment:
|
environment:
|
||||||
name: github-pages
|
name: github-pages
|
||||||
url: ${{ steps.deployment.outputs.page_url }}
|
url: ${{ steps.deployment.outputs.page_url }}
|
||||||
|
needs: vitepress
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
name: Deploy
|
||||||
steps:
|
steps:
|
||||||
- name: Deploy to GitHub Pages
|
- name: Deploy to GitHub Pages
|
||||||
id: deployment
|
id: deployment
|
||||||
|
|||||||
2
docs/.gitignore
vendored
2
docs/.gitignore
vendored
@@ -1,7 +1,7 @@
|
|||||||
dist/
|
dist/
|
||||||
result/
|
result/
|
||||||
|
.vitepress/cache/
|
||||||
|
|
||||||
.astro/
|
|
||||||
node_modules/
|
node_modules/
|
||||||
|
|
||||||
npm-debug.log*
|
npm-debug.log*
|
||||||
|
|||||||
1
docs/.vitepress/config.ts
Normal file
1
docs/.vitepress/config.ts
Normal file
@@ -0,0 +1 @@
|
|||||||
|
export { default as default } from "../vitepress.config"
|
||||||
4
docs/.vitepress/theme/index.ts
Normal file
4
docs/.vitepress/theme/index.ts
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
import DefaultTheme from 'vitepress/theme'
|
||||||
|
import '../../vitepress.theme.css'
|
||||||
|
|
||||||
|
export default DefaultTheme
|
||||||
@@ -1,8 +1,7 @@
|
|||||||
# Astal Docs
|
# Astal Docs
|
||||||
|
|
||||||
[](https://starlight.astro.build)
|
This directory contains the Astal documentation and Library references.
|
||||||
|
Hosted at [aylur.github.io/astal](https://aylur.github.io/astal/) and [aylur.github.io/libastal](https://aylur.github.io/libastal/)
|
||||||
This directory contains the Astal documentation website. Hosted at [aylur.github.io/astal](https://aylur.github.io/astal/)
|
|
||||||
|
|
||||||
## Commands
|
## Commands
|
||||||
|
|
||||||
|
|||||||
@@ -1,9 +1,4 @@
|
|||||||
---
|
# CLI and App
|
||||||
title: CLI and App
|
|
||||||
description: Reference of the singleton App instance
|
|
||||||
sidebar:
|
|
||||||
order: 3
|
|
||||||
---
|
|
||||||
|
|
||||||
`App` is a singleton **instance** of [Astal.Application](/astal/reference/class.Application.html).
|
`App` is a singleton **instance** of [Astal.Application](/astal/reference/class.Application.html).
|
||||||
|
|
||||||
@@ -13,8 +8,9 @@ import { App } from "astal"
|
|||||||
|
|
||||||
## Entry point
|
## Entry point
|
||||||
|
|
||||||
```tsx
|
:::code-group
|
||||||
// app.ts
|
|
||||||
|
```ts [app.ts]
|
||||||
App.start({
|
App.start({
|
||||||
main() {
|
main() {
|
||||||
// setup anything
|
// setup anything
|
||||||
@@ -23,7 +19,9 @@ App.start({
|
|||||||
})
|
})
|
||||||
```
|
```
|
||||||
|
|
||||||
:::caution
|
:::
|
||||||
|
|
||||||
|
:::warning
|
||||||
You can not instantiate widgets outside of the main function.
|
You can not instantiate widgets outside of the main function.
|
||||||
:::
|
:::
|
||||||
|
|
||||||
@@ -32,7 +30,6 @@ You can not instantiate widgets outside of the main function.
|
|||||||
You can run multiple instance by defining a unique instance name.
|
You can run multiple instance by defining a unique instance name.
|
||||||
|
|
||||||
```tsx
|
```tsx
|
||||||
// app.ts
|
|
||||||
App.start({
|
App.start({
|
||||||
instanceName: "my-instance", // defaults to "astal"
|
instanceName: "my-instance", // defaults to "astal"
|
||||||
main() {},
|
main() {},
|
||||||
@@ -44,7 +41,6 @@ App.start({
|
|||||||
If you want to interact with an instance from the cli, you can do so by sending a message.
|
If you want to interact with an instance from the cli, you can do so by sending a message.
|
||||||
|
|
||||||
```ts
|
```ts
|
||||||
// app.ts
|
|
||||||
App.start({
|
App.start({
|
||||||
main() {},
|
main() {},
|
||||||
requestHandler(request: string, res: (response: any) => void) {
|
requestHandler(request: string, res: (response: any) => void) {
|
||||||
@@ -70,7 +66,6 @@ If you want to run arbitrary JavaScript from cli, you can use `App.eval`.
|
|||||||
It will evaluate the passed string as the body of an `async` function.
|
It will evaluate the passed string as the body of an `async` function.
|
||||||
|
|
||||||
```ts
|
```ts
|
||||||
// app.ts
|
|
||||||
App.start({
|
App.start({
|
||||||
main() {},
|
main() {},
|
||||||
requestHandler(js: string, res) {
|
requestHandler(js: string, res) {
|
||||||
@@ -107,8 +102,9 @@ The first time you run your bundled script the `main` function gets executed.
|
|||||||
While that instance is running any subsequent execution of the script will call
|
While that instance is running any subsequent execution of the script will call
|
||||||
the `client` function.
|
the `client` function.
|
||||||
|
|
||||||
```ts
|
:::code-group
|
||||||
// main.ts
|
|
||||||
|
```ts [main.ts]
|
||||||
App.start({
|
App.start({
|
||||||
// main instance
|
// main instance
|
||||||
main(...args: Array<string>) {
|
main(...args: Array<string>) {
|
||||||
@@ -127,3 +123,5 @@ App.start({
|
|||||||
},
|
},
|
||||||
})
|
})
|
||||||
```
|
```
|
||||||
|
|
||||||
|
:::
|
||||||
@@ -1,7 +1,4 @@
|
|||||||
---
|
# Frequently asked question, common issues, tips and tricks
|
||||||
title: FAQ
|
|
||||||
description: Frequently asked question, common issues, tips and tricks
|
|
||||||
---
|
|
||||||
|
|
||||||
## Monitor id does not match compositor
|
## Monitor id does not match compositor
|
||||||
|
|
||||||
@@ -39,7 +36,7 @@ const HOME = exec("echo $HOME") // does not work
|
|||||||
shell environment, so the above example just passes `$HOME` as a string literal
|
shell environment, so the above example just passes `$HOME` as a string literal
|
||||||
to the `echo` program.
|
to the `echo` program.
|
||||||
|
|
||||||
:::caution[Please don't do this]
|
:::danger Please don't do this
|
||||||
You could pass it to bash, but that is a horrible approach.
|
You could pass it to bash, but that is a horrible approach.
|
||||||
|
|
||||||
```tsx
|
```tsx
|
||||||
@@ -74,7 +71,7 @@ App.start({
|
|||||||
})
|
})
|
||||||
```
|
```
|
||||||
|
|
||||||
:::note
|
:::info
|
||||||
If there is a name clash with an icon from your current icon pack
|
If there is a name clash with an icon from your current icon pack
|
||||||
the icon pack will take precedence
|
the icon pack will take precedence
|
||||||
:::
|
:::
|
||||||
@@ -1,34 +1,26 @@
|
|||||||
---
|
# First Widgets
|
||||||
title: First Widgets
|
|
||||||
description: Getting started with creating widgets
|
|
||||||
sidebar:
|
|
||||||
order: 0
|
|
||||||
---
|
|
||||||
|
|
||||||
import { FileTree } from "@astrojs/starlight/components"
|
|
||||||
import { Tabs, TabItem } from "@astrojs/starlight/components"
|
|
||||||
|
|
||||||
AGS is the predecessor of Astal, which was written purely in TypeScript and so only supported
|
AGS is the predecessor of Astal, which was written purely in TypeScript and so only supported
|
||||||
JavaScript/TypeScript. Now it serves as a scaffolding tool for Astal projects in TypeScript.
|
JavaScript/TypeScript. Now it serves as a scaffolding tool for Astal projects in TypeScript.
|
||||||
While what made AGS what it is, is now part of the Astal project, for simplicity we will
|
While what made AGS what it is, is now part of the Astal project, for simplicity we will
|
||||||
refer to the Astal TypeScript lib as AGS.
|
refer to the Astal TypeScript lib as AGS.
|
||||||
|
|
||||||
## JavaScript
|
:::tip
|
||||||
|
|
||||||
If you are not familiar with the JavaScript syntax [MDN](https://developer.mozilla.org/en-US/)
|
If you are not familiar with the JavaScript syntax [MDN](https://developer.mozilla.org/en-US/)
|
||||||
and [javascript.info](https://javascript.info/) have great references.
|
and [javascript.info](https://javascript.info/) have great references.
|
||||||
|
:::
|
||||||
|
|
||||||
## Getting Started
|
## Getting Started
|
||||||
|
|
||||||
Start by initializing a project
|
Start by initializing a project
|
||||||
|
|
||||||
```bash
|
```sh
|
||||||
ags --init
|
ags --init
|
||||||
```
|
```
|
||||||
|
|
||||||
then run `ags` in the terminal
|
then run `ags` in the terminal
|
||||||
|
|
||||||
```bash
|
```sh
|
||||||
ags
|
ags
|
||||||
```
|
```
|
||||||
|
|
||||||
@@ -40,39 +32,27 @@ it will bundle everything into a single javascript file which then GJS can execu
|
|||||||
The bundler used is [esbuild](https://esbuild.github.io/).
|
The bundler used is [esbuild](https://esbuild.github.io/).
|
||||||
:::
|
:::
|
||||||
|
|
||||||
The generated project structure is the following:
|
|
||||||
|
|
||||||
<FileTree>
|
|
||||||
|
|
||||||
- @girs/ generated types with [ts-for-gir](https://github.com/gjsify/ts-for-gir)
|
|
||||||
- widget
|
|
||||||
- Bar.tsx
|
|
||||||
- app.ts entry point of our app
|
|
||||||
- style.css
|
|
||||||
- env.d.ts informs the LSP about the environment
|
|
||||||
- tsconfig.json configuration of the LSP
|
|
||||||
|
|
||||||
</FileTree>
|
|
||||||
|
|
||||||
## Root of every shell component: Window
|
## Root of every shell component: Window
|
||||||
|
|
||||||
Astal apps are composed of widgets. A widget is a piece of UI that has its own logic and style.
|
Astal apps are composed of widgets. A widget is a piece of UI that has its own logic and style.
|
||||||
A widget can be as small as a button or an entire bar.
|
A widget can be as small as a button or an entire bar.
|
||||||
The top level widget is always a [Window]() which will hold all widgets.
|
The top level widget is always a [Window]() which will hold all widgets.
|
||||||
|
|
||||||
```tsx
|
::: code-group
|
||||||
// widget/Bar.tsx
|
|
||||||
|
```tsx [widget/Bar.tsx]
|
||||||
function Bar(monitor = 0) {
|
function Bar(monitor = 0) {
|
||||||
return (
|
return <window className="Bar" monitor={monitor}>
|
||||||
<window className="Bar" monitor={monitor}>
|
|
||||||
<box>Content of the widget</box>
|
<box>Content of the widget</box>
|
||||||
</window>
|
</window>
|
||||||
)
|
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
```tsx
|
:::
|
||||||
// app.ts
|
|
||||||
|
::: code-group
|
||||||
|
|
||||||
|
```ts [app.ts]
|
||||||
import Bar from "./widget/Bar"
|
import Bar from "./widget/Bar"
|
||||||
|
|
||||||
App.start({
|
App.start({
|
||||||
@@ -83,24 +63,24 @@ App.start({
|
|||||||
})
|
})
|
||||||
```
|
```
|
||||||
|
|
||||||
|
:::
|
||||||
|
|
||||||
## Creating and nesting widgets
|
## Creating and nesting widgets
|
||||||
|
|
||||||
Widgets are JavaScript functions which return Gtk widgets,
|
Widgets are JavaScript functions which return Gtk widgets,
|
||||||
either by using JSX or using a widget constructor.
|
either by using JSX or using a widget constructor.
|
||||||
|
|
||||||
<Tabs>
|
:::code-group
|
||||||
<TabItem label="markup">
|
|
||||||
|
|
||||||
```tsx
|
```tsx [MyButton.tsx]
|
||||||
function MyButton(): JSX.Element {
|
function MyButton(): JSX.Element {
|
||||||
return <button onClicked="echo hello">Clicke Me!</button>
|
return <button onClicked="echo hello">
|
||||||
|
Clicke Me!
|
||||||
|
</button>
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
</TabItem>
|
```ts [MyButton.ts]
|
||||||
<TabItem label="constructor functions">
|
|
||||||
|
|
||||||
```tsx
|
|
||||||
import { Widget } from "astal"
|
import { Widget } from "astal"
|
||||||
|
|
||||||
function MyButton(): Widget.Button {
|
function MyButton(): Widget.Button {
|
||||||
@@ -111,10 +91,9 @@ function MyButton(): Widget.Button {
|
|||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
</TabItem>
|
:::
|
||||||
</Tabs>
|
|
||||||
|
|
||||||
:::note
|
:::info
|
||||||
The only difference between the two is the return type.
|
The only difference between the two is the return type.
|
||||||
Using markup the return type is always `Gtk.Widget` (globally available as `JSX.Element`),
|
Using markup the return type is always `Gtk.Widget` (globally available as `JSX.Element`),
|
||||||
while using constructors the return type is the type of the widget.
|
while using constructors the return type is the type of the widget.
|
||||||
@@ -125,14 +104,12 @@ Now that you have declared `MyButton`, you can nest it into another component.
|
|||||||
|
|
||||||
```tsx
|
```tsx
|
||||||
function MyBar() {
|
function MyBar() {
|
||||||
return (
|
return <window>
|
||||||
<window>
|
|
||||||
<box>
|
<box>
|
||||||
Click The button
|
Click The button
|
||||||
<MyButton />
|
<MyButton />
|
||||||
</box>
|
</box>
|
||||||
</window>
|
</window>
|
||||||
)
|
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
@@ -198,7 +175,7 @@ function MyWidget() {
|
|||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
:::note
|
:::info
|
||||||
As you can guess from the above snippet, [falsy](https://developer.mozilla.org/en-US/docs/Glossary/Falsy) values are not rendered.
|
As you can guess from the above snippet, [falsy](https://developer.mozilla.org/en-US/docs/Glossary/Falsy) values are not rendered.
|
||||||
:::
|
:::
|
||||||
|
|
||||||
@@ -244,7 +221,7 @@ function MyButton() {
|
|||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
:::note
|
:::info
|
||||||
Attributes prefixed with `on` will connect to a `signal` of the widget.
|
Attributes prefixed with `on` will connect to a `signal` of the widget.
|
||||||
Their types are not generated, but written by hand, which means not all of them are typed.
|
Their types are not generated, but written by hand, which means not all of them are typed.
|
||||||
Refer to the Gtk and Astal docs to have a full list of them.
|
Refer to the Gtk and Astal docs to have a full list of them.
|
||||||
@@ -268,22 +245,18 @@ function MyWidget({ myprop, child, children }: Props) {
|
|||||||
|
|
||||||
```tsx
|
```tsx
|
||||||
// child prop of MyWidget is the box
|
// child prop of MyWidget is the box
|
||||||
return (
|
return <MyWidget myprop="hello">
|
||||||
<MyWidget myprop="hello">
|
|
||||||
<box />
|
<box />
|
||||||
</MyWidget>
|
</MyWidget>
|
||||||
)
|
|
||||||
```
|
```
|
||||||
|
|
||||||
```tsx
|
```tsx
|
||||||
// children prop of MyWidget is [box, box, box]
|
// children prop of MyWidget is [box, box, box]
|
||||||
return (
|
return <MyWidget myprop="hello">
|
||||||
<MyWidget myprop="hello">
|
|
||||||
<box />
|
<box />
|
||||||
<box />
|
<box />
|
||||||
<box />
|
<box />
|
||||||
</MyWidget>
|
</MyWidget>
|
||||||
)
|
|
||||||
```
|
```
|
||||||
|
|
||||||
## State management
|
## State management
|
||||||
@@ -317,7 +290,7 @@ function Counter() {
|
|||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
:::note
|
:::info
|
||||||
Bindings have an `.as()` method which lets you transform the assigned value.
|
Bindings have an `.as()` method which lets you transform the assigned value.
|
||||||
In the case of a Label, its label property expects a string, so it needs to be
|
In the case of a Label, its label property expects a string, so it needs to be
|
||||||
turned to a string first.
|
turned to a string first.
|
||||||
@@ -330,13 +303,11 @@ turned to a string first.
|
|||||||
const v = Variable(0)
|
const v = Variable(0)
|
||||||
const transform = (v) => v.toString()
|
const transform = (v) => v.toString()
|
||||||
|
|
||||||
// these two are equivalent
|
return <box>
|
||||||
return (
|
{/* these two are equivalent */}
|
||||||
<box>
|
|
||||||
<label label={bind(v).as(transform)} />
|
<label label={bind(v).as(transform)} />
|
||||||
<label label={v(transform)} />
|
<label label={v(transform)} />
|
||||||
</box>
|
</box>
|
||||||
)
|
|
||||||
```
|
```
|
||||||
|
|
||||||
:::
|
:::
|
||||||
@@ -378,14 +349,14 @@ return <box>
|
|||||||
<box>
|
<box>
|
||||||
```
|
```
|
||||||
|
|
||||||
:::caution
|
:::warning
|
||||||
Only bind children of the `box` widget. Gtk does not cleanup widgets by default,
|
Only bind children of the `box` widget. Gtk does not cleanup widgets by default,
|
||||||
they have to be explicitly destroyed. The box widget is a special container that
|
they have to be explicitly destroyed. The box widget is a special container that
|
||||||
will implicitly call `.destroy()` on its removed child widgets.
|
will implicitly call `.destroy()` on its removed child widgets.
|
||||||
You can disable this behavior by setting the `noImplicityDestroy` property.
|
You can disable this behavior by setting the `noImplicityDestroy` property.
|
||||||
:::
|
:::
|
||||||
|
|
||||||
:::note
|
:::info
|
||||||
The above example destroys and recreates every widget in the list everytime
|
The above example destroys and recreates every widget in the list everytime
|
||||||
the value of the `Variable` changes. There might be cases where you would
|
the value of the `Variable` changes. There might be cases where you would
|
||||||
want to handle child creation yourself, because you don't want to lose the
|
want to handle child creation yourself, because you don't want to lose the
|
||||||
@@ -416,7 +387,7 @@ return <MyContainer>
|
|||||||
</MyContainer>
|
</MyContainer>
|
||||||
```
|
```
|
||||||
|
|
||||||
:::note
|
:::info
|
||||||
You can pass the followings as children:
|
You can pass the followings as children:
|
||||||
|
|
||||||
- widgets
|
- widgets
|
||||||
@@ -424,6 +395,6 @@ You can pass the followings as children:
|
|||||||
- bindings of widgets,
|
- bindings of widgets,
|
||||||
- bindings of deeply nested arrays of widgets
|
- bindings of deeply nested arrays of widgets
|
||||||
|
|
||||||
falsy values are not rendered and anything not from this list
|
[falsy](https://developer.mozilla.org/en-US/docs/Glossary/Falsy) values are not rendered and anything not from this list
|
||||||
will be coerced into a string and rendered as a label
|
will be coerced into a string and rendered as a label
|
||||||
:::
|
:::
|
||||||
@@ -11,7 +11,7 @@ Since the widget toolkit is **GTK3** theming is done with **CSS**.
|
|||||||
- [GTK CSS Overview wiki](https://docs.gtk.org/gtk3/css-overview.html)
|
- [GTK CSS Overview wiki](https://docs.gtk.org/gtk3/css-overview.html)
|
||||||
- [GTK CSS Properties Overview wiki](https://docs.gtk.org/gtk3/css-properties.html)
|
- [GTK CSS Properties Overview wiki](https://docs.gtk.org/gtk3/css-properties.html)
|
||||||
|
|
||||||
:::caution[GTK is not the web]
|
:::warning GTK is not the web
|
||||||
While most features are implemented in GTK,
|
While most features are implemented in GTK,
|
||||||
you can't assume anything that works on the web will work with GTK.
|
you can't assume anything that works on the web will work with GTK.
|
||||||
Refer to the [GTK docs](https://docs.gtk.org/gtk3/css-overview.html)
|
Refer to the [GTK docs](https://docs.gtk.org/gtk3/css-overview.html)
|
||||||
@@ -25,14 +25,15 @@ To make them more custom, you can apply stylesheets to them.
|
|||||||
|
|
||||||
You can pass a path to a file or css as a string in `App.start`
|
You can pass a path to a file or css as a string in `App.start`
|
||||||
|
|
||||||
```tsx
|
:::code-group
|
||||||
|
|
||||||
|
```ts [app.ts]
|
||||||
const inlineCss = `
|
const inlineCss = `
|
||||||
window {
|
window {
|
||||||
background-color: transparent;
|
background-color: transparent;
|
||||||
}
|
}
|
||||||
`
|
`
|
||||||
|
|
||||||
// app.ts
|
|
||||||
App.start({
|
App.start({
|
||||||
css: "/home/username/.config/ags/style.css",
|
css: "/home/username/.config/ags/style.css",
|
||||||
css: `${SRC}/style.css'`,
|
css: `${SRC}/style.css'`,
|
||||||
@@ -40,21 +41,23 @@ App.start({
|
|||||||
})
|
})
|
||||||
```
|
```
|
||||||
|
|
||||||
:::note
|
:::
|
||||||
|
|
||||||
|
:::info
|
||||||
The global `SRC` will point to the directory `app.ts` is in.
|
The global `SRC` will point to the directory `app.ts` is in.
|
||||||
You can pass a relative path, but its resolution will be relative to the current working directory.
|
You can pass a relative path, but its resolution will be relative to the current working directory.
|
||||||
:::
|
:::
|
||||||
|
|
||||||
## Css Property on Widgets
|
## Css Property on Widgets
|
||||||
|
|
||||||
```tsx
|
```ts
|
||||||
Widget.Label({
|
Widget.Label({
|
||||||
css: "color: blue; padding: 1em;",
|
css: "color: blue; padding: 1em;",
|
||||||
label: "hello",
|
label: "hello",
|
||||||
})
|
})
|
||||||
```
|
```
|
||||||
|
|
||||||
:::note
|
:::info
|
||||||
The `css` property of a widget will not cascade to its children.
|
The `css` property of a widget will not cascade to its children.
|
||||||
:::
|
:::
|
||||||
|
|
||||||
@@ -62,11 +65,11 @@ The `css` property of a widget will not cascade to its children.
|
|||||||
|
|
||||||
You can apply additional styles at runtime.
|
You can apply additional styles at runtime.
|
||||||
|
|
||||||
```tsx
|
```ts
|
||||||
App.apply_css("/path/to/file.css")
|
App.apply_css("/path/to/file.css")
|
||||||
```
|
```
|
||||||
|
|
||||||
```tsx
|
```ts
|
||||||
App.apply_css(`
|
App.apply_css(`
|
||||||
window {
|
window {
|
||||||
background-color: transparent;
|
background-color: transparent;
|
||||||
@@ -74,11 +77,11 @@ window {
|
|||||||
`)
|
`)
|
||||||
```
|
```
|
||||||
|
|
||||||
```tsx
|
```ts
|
||||||
App.reset_css() // reset if need
|
App.reset_css() // reset if need
|
||||||
```
|
```
|
||||||
|
|
||||||
:::caution
|
:::warning
|
||||||
`App.apply_css` will apply on top of other stylesheets applied before.
|
`App.apply_css` will apply on top of other stylesheets applied before.
|
||||||
You can reset stylesheets with `App.resetCss`
|
You can reset stylesheets with `App.resetCss`
|
||||||
:::
|
:::
|
||||||
@@ -88,15 +91,16 @@ You can reset stylesheets with `App.resetCss`
|
|||||||
If you are not sure about the widget hierarchy or any CSS selector,
|
If you are not sure about the widget hierarchy or any CSS selector,
|
||||||
you can use the [GTK inspector](https://wiki.gnome.org/Projects/GTK/Inspector)
|
you can use the [GTK inspector](https://wiki.gnome.org/Projects/GTK/Inspector)
|
||||||
|
|
||||||
```bash
|
```sh
|
||||||
# to bring up the inspector run
|
# to bring up the inspector run
|
||||||
ags --inspector
|
ags --inspector
|
||||||
```
|
```
|
||||||
|
|
||||||
## Using pre-processors like SCSS
|
## Using pre-processors like SCSS
|
||||||
|
|
||||||
```tsx
|
:::code-group
|
||||||
// app.ts
|
|
||||||
|
```ts [app.ts]
|
||||||
// main scss file
|
// main scss file
|
||||||
const scss = `${SRC}/style.scss`
|
const scss = `${SRC}/style.scss`
|
||||||
|
|
||||||
@@ -111,3 +115,5 @@ App.config({
|
|||||||
main() {},
|
main() {},
|
||||||
})
|
})
|
||||||
```
|
```
|
||||||
|
|
||||||
|
:::
|
||||||
@@ -1,9 +1,4 @@
|
|||||||
---
|
# Utilities
|
||||||
title: Utilities
|
|
||||||
description: Reference of bultin utility functions
|
|
||||||
sidebar:
|
|
||||||
order: 5
|
|
||||||
---
|
|
||||||
|
|
||||||
## File functions
|
## File functions
|
||||||
|
|
||||||
@@ -163,7 +158,7 @@ execAsync(["bash", "-c", "/path/to/script.sh"])
|
|||||||
.catch((err) => console.error(err))
|
.catch((err) => console.error(err))
|
||||||
```
|
```
|
||||||
|
|
||||||
:::caution
|
:::warning
|
||||||
`subprocess`, `exec`, and `execAsync` executes the passed executable as is.
|
`subprocess`, `exec`, and `execAsync` executes the passed executable as is.
|
||||||
They are **not** executed in a shell environment,
|
They are **not** executed in a shell environment,
|
||||||
they do **not** expand env variables like `$HOME`,
|
they do **not** expand env variables like `$HOME`,
|
||||||
@@ -1,9 +1,4 @@
|
|||||||
---
|
# Variable
|
||||||
title: Variable
|
|
||||||
description: Reference of the builtin Variable type
|
|
||||||
sidebar:
|
|
||||||
order: 6
|
|
||||||
---
|
|
||||||
|
|
||||||
```js
|
```js
|
||||||
import { Variable } from "astal"
|
import { Variable } from "astal"
|
||||||
@@ -35,7 +30,7 @@ Widget.Label({
|
|||||||
})
|
})
|
||||||
```
|
```
|
||||||
|
|
||||||
:::caution
|
:::warning
|
||||||
Make sure to make the transform functions pure. The `.get()` function can be called
|
Make sure to make the transform functions pure. The `.get()` function can be called
|
||||||
anytime by `astal` especially when `deriving`, so make sure there are no sideeffects.
|
anytime by `astal` especially when `deriving`, so make sure there are no sideeffects.
|
||||||
:::
|
:::
|
||||||
@@ -69,7 +64,7 @@ Using `.poll` and `.watch` we can start subprocess and capture their
|
|||||||
output in `Variables`. They can poll and watch at the same time, but they
|
output in `Variables`. They can poll and watch at the same time, but they
|
||||||
can only poll/watch one subprocess.
|
can only poll/watch one subprocess.
|
||||||
|
|
||||||
:::caution
|
:::warning
|
||||||
The command parameter is passed to [execAsync](/astal/ags/utilities/#executing-external-commands-and-scripts)
|
The command parameter is passed to [execAsync](/astal/ags/utilities/#executing-external-commands-and-scripts)
|
||||||
which means they are **not** executed in a shell environment,
|
which means they are **not** executed in a shell environment,
|
||||||
they do **not** expand env variables like `$HOME`,
|
they do **not** expand env variables like `$HOME`,
|
||||||
@@ -127,7 +122,7 @@ This will stop the interval and force exit the subprocess and disconnect gobject
|
|||||||
myVar.drop()
|
myVar.drop()
|
||||||
```
|
```
|
||||||
|
|
||||||
:::caution
|
:::warning
|
||||||
Don't forget to drop them when they are defined inside widgets
|
Don't forget to drop them when they are defined inside widgets
|
||||||
with either `.poll`, `.watch` or `.observe`
|
with either `.poll`, `.watch` or `.observe`
|
||||||
|
|
||||||
@@ -1,9 +1,4 @@
|
|||||||
---
|
# Widget
|
||||||
title: Widget
|
|
||||||
description: Reference of the builtin and gtk widgets
|
|
||||||
sidebar:
|
|
||||||
order: 4
|
|
||||||
---
|
|
||||||
|
|
||||||
## AGS widget properties
|
## AGS widget properties
|
||||||
|
|
||||||
@@ -143,7 +138,7 @@ function MyWidget() {
|
|||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
:::note
|
:::info
|
||||||
Signal properties have to be annotated manually for TypeScript.
|
Signal properties have to be annotated manually for TypeScript.
|
||||||
You can reference [Gtk3](https://gjs-docs.gnome.org/gtk30~3.0/)
|
You can reference [Gtk3](https://gjs-docs.gnome.org/gtk30~3.0/)
|
||||||
and [Astal](/astal/reference#classes) for available signals.
|
and [Astal](/astal/reference#classes) for available signals.
|
||||||
@@ -1,44 +0,0 @@
|
|||||||
import { defineConfig } from "astro/config"
|
|
||||||
import starlight from "@astrojs/starlight"
|
|
||||||
|
|
||||||
export default defineConfig({
|
|
||||||
site: "https://aylur.github.io",
|
|
||||||
base: "astal",
|
|
||||||
integrations: [
|
|
||||||
starlight({
|
|
||||||
title: "Astal",
|
|
||||||
editLink: {
|
|
||||||
baseUrl: "https://github.com/Aylur/Astal/tree/main/docs",
|
|
||||||
},
|
|
||||||
social: {
|
|
||||||
github: "https://github.com/Aylur/Astal",
|
|
||||||
discord: "https://discord.gg/CXQpHwDuhY",
|
|
||||||
},
|
|
||||||
customCss: ["./src/style.css"],
|
|
||||||
favicon: "./favicon.ico",
|
|
||||||
sidebar: [
|
|
||||||
{ label: "Getting Started", autogenerate: { directory: "/getting-started" } },
|
|
||||||
{ label: "AGS", autogenerate: { directory: "/ags" } },
|
|
||||||
{
|
|
||||||
label: "Libraries",
|
|
||||||
items: [
|
|
||||||
"libraries/references",
|
|
||||||
{ label: "Astal", link: "/reference" },
|
|
||||||
{ label: "Apps", link: "/reference/apps" },
|
|
||||||
{ label: "Auth", link: "/reference/auth" },
|
|
||||||
{ label: "Battery", link: "/reference/battery" },
|
|
||||||
{ label: "Bluetooth", link: "/reference/bluetooth" },
|
|
||||||
{ label: "Hyprland", link: "/reference/hyprland" },
|
|
||||||
{ label: "Mpris", link: "/reference/mpris" },
|
|
||||||
{ label: "Network", link: "/reference/network" },
|
|
||||||
{ label: "Notifd", link: "/reference/notifd" },
|
|
||||||
{ label: "PowerProfiles", link: "/reference/powerprofiles" },
|
|
||||||
{ label: "River", link: "/reference/river" },
|
|
||||||
{ label: "Tray", link: "/reference/tray" },
|
|
||||||
{ label: "WirePlumber", link: "/reference/wireplumber" },
|
|
||||||
],
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}),
|
|
||||||
],
|
|
||||||
})
|
|
||||||
@@ -1,40 +1,28 @@
|
|||||||
---
|
# Installation
|
||||||
title: Installation
|
|
||||||
description: How to install Astal
|
|
||||||
sidebar:
|
|
||||||
order: 1
|
|
||||||
---
|
|
||||||
|
|
||||||
import { Tabs, TabItem } from "@astrojs/starlight/components"
|
|
||||||
|
|
||||||
## Nix
|
## Nix
|
||||||
|
|
||||||
maintainer: [@Aylur](https://github.com/Aylur)
|
maintainer: [@Aylur](https://github.com/Aylur)
|
||||||
|
|
||||||
Read more about it on the [nix page](../nix)
|
Read more about it on the [nix page](./nix)
|
||||||
|
|
||||||
## Arch
|
## Arch
|
||||||
|
|
||||||
maintainer: [@kotontrion](https://github.com/kotontrion)
|
maintainer: [@kotontrion](https://github.com/kotontrion)
|
||||||
|
|
||||||
<Tabs>
|
:::code-group
|
||||||
<TabItem label="Core Library">
|
|
||||||
|
|
||||||
```bash
|
```sh [Core Library]
|
||||||
yay -S libastal-git
|
yay -S libastal-git
|
||||||
```
|
```
|
||||||
|
|
||||||
</TabItem>
|
```sh [Every Library]
|
||||||
<TabItem label="Every Library">
|
|
||||||
|
|
||||||
```bash
|
|
||||||
yay -S libastal-meta
|
yay -S libastal-meta
|
||||||
```
|
```
|
||||||
|
|
||||||
</TabItem>
|
:::
|
||||||
</Tabs>
|
|
||||||
|
|
||||||
## Bulding core from source
|
## Bulding libastal from source
|
||||||
|
|
||||||
1. Clone the repo
|
1. Clone the repo
|
||||||
|
|
||||||
@@ -45,43 +33,29 @@ cd astal/core
|
|||||||
|
|
||||||
2. Install the following dependencies
|
2. Install the following dependencies
|
||||||
|
|
||||||
<Tabs>
|
:::code-group
|
||||||
<TabItem label="Fedora">
|
|
||||||
|
|
||||||
```bash
|
```sh [Fedora]
|
||||||
sudo dnf install meson gcc valac gtk3-devel gtk-layer-shell-devel
|
sudo dnf install meson gcc valac gtk3-devel gtk-layer-shell-devel
|
||||||
```
|
```
|
||||||
|
|
||||||
</TabItem>
|
```sh [Arch]
|
||||||
<TabItem label="Arch">
|
|
||||||
|
|
||||||
```bash
|
|
||||||
sudo pacman -Syu meson vala gtk3 gtk-layer-shell gobject-introspection
|
sudo pacman -Syu meson vala gtk3 gtk-layer-shell gobject-introspection
|
||||||
```
|
```
|
||||||
|
|
||||||
</TabItem>
|
```sh [Alpine]
|
||||||
<TabItem label="Alpine">
|
|
||||||
|
|
||||||
```bash
|
|
||||||
sudo apk add meson g++ vala gtk+3.0-dev gtk-layer-shell-dev gobject-introspection-dev
|
sudo apk add meson g++ vala gtk+3.0-dev gtk-layer-shell-dev gobject-introspection-dev
|
||||||
```
|
```
|
||||||
|
|
||||||
</TabItem>
|
```sh [Ubuntu]
|
||||||
<TabItem label="Ubuntu">
|
|
||||||
|
|
||||||
```bash
|
|
||||||
sudo apt install meson valac libgtk3-dev libgtk-layer-shell-dev gobject-introspection
|
sudo apt install meson valac libgtk3-dev libgtk-layer-shell-dev gobject-introspection
|
||||||
```
|
```
|
||||||
|
|
||||||
</TabItem>
|
```bash [openSUSE]
|
||||||
<TabItem label="openSUSE">
|
|
||||||
|
|
||||||
```bash
|
|
||||||
sudo zypper install gcc meson vala gtk3-devel gtk-layer-shell-devel gobject-introspection-devel
|
sudo zypper install gcc meson vala gtk3-devel gtk-layer-shell-devel gobject-introspection-devel
|
||||||
```
|
```
|
||||||
|
|
||||||
</TabItem>
|
:::
|
||||||
</Tabs>
|
|
||||||
|
|
||||||
3. Build and install with `meson`
|
3. Build and install with `meson`
|
||||||
|
|
||||||
@@ -90,10 +64,10 @@ meson setup build
|
|||||||
meson install -C build
|
meson install -C build
|
||||||
```
|
```
|
||||||
|
|
||||||
:::note
|
:::info
|
||||||
Most distros recommend manual installs in `/usr/local`,
|
Most distros recommend manual installs in `/usr/local`,
|
||||||
which is what `meson` defaults to. If you want to install to `/usr`
|
which is what `meson` defaults to. If you want to install to `/usr`
|
||||||
instead which most package managers do, you set the `prefix` option:
|
instead which most package managers do, set the `prefix` option:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
meson setup --prefix /usr build
|
meson setup --prefix /usr build
|
||||||
@@ -1,15 +1,10 @@
|
|||||||
---
|
# Introduction
|
||||||
title: Introduction
|
|
||||||
description: What is Astal?
|
|
||||||
sidebar:
|
|
||||||
order: 0
|
|
||||||
---
|
|
||||||
|
|
||||||
## What is Astal?
|
## What is Astal?
|
||||||
|
|
||||||
Astal (_meaning "desk"_) is a bundle of libraries built using [GLib](https://docs.gtk.org/glib/) in Vala and C.
|
Astal (_meaning "desk"_) is a bundle of libraries built using [GLib](https://docs.gtk.org/glib/) in Vala and C.
|
||||||
The core library [libastal](/astal/reference) has some Gtk widgets that come packaged,
|
The core library [libastal](https://aylur.github.io/libastal) has some Gtk widgets that come packaged,
|
||||||
the most important one is the [Window](/astal/reference/class.Window.html) which is the main toplevel component using [gtk-layer-shell](https://github.com/wmww/gtk-layer-shell).
|
the most important one is the [Window](https://aylur.github.io/libastal/class.Window.html) which is the main toplevel component using [gtk-layer-shell](https://github.com/wmww/gtk-layer-shell).
|
||||||
This is what allows us to use Gtk as shell components on Wayland.
|
This is what allows us to use Gtk as shell components on Wayland.
|
||||||
libastal also comes with some utility functions such as running external processes,
|
libastal also comes with some utility functions such as running external processes,
|
||||||
reading, writing and monitoring files.
|
reading, writing and monitoring files.
|
||||||
1
docs/getting-started/nix.md
Normal file
1
docs/getting-started/nix.md
Normal file
@@ -0,0 +1 @@
|
|||||||
|
# Nix
|
||||||
@@ -1,9 +1,4 @@
|
|||||||
---
|
# Supported Languages
|
||||||
title: Supported Languages
|
|
||||||
description: Choosing a language to get started
|
|
||||||
banner:
|
|
||||||
content: 🚧 Examples are in the works. 🚧
|
|
||||||
---
|
|
||||||
|
|
||||||
## JavaScript
|
## JavaScript
|
||||||
|
|
||||||
@@ -11,7 +6,7 @@ The main intended usage of Astal is in TypeScript with [AGS](/astal/ags/first-wi
|
|||||||
It supports JSX and has a state management solution similar to web frameworks.
|
It supports JSX and has a state management solution similar to web frameworks.
|
||||||
Only a minimal knowledge of JavaScript's syntax is needed to get started.
|
Only a minimal knowledge of JavaScript's syntax is needed to get started.
|
||||||
|
|
||||||
:::tip
|
:::info
|
||||||
The runtime is [GJS](https://gitlab.gnome.org/GNOME/gjs) and **not** nodejs
|
The runtime is [GJS](https://gitlab.gnome.org/GNOME/gjs) and **not** nodejs
|
||||||
:::
|
:::
|
||||||
|
|
||||||
@@ -35,7 +30,7 @@ Examples:
|
|||||||
There is a WIP [library for python](), to make it behave similar to the above two
|
There is a WIP [library for python](), to make it behave similar to the above two
|
||||||
but I don't plan on finishing it, because I'm not a fan of python.
|
but I don't plan on finishing it, because I'm not a fan of python.
|
||||||
If you are interested in picking it up, feel free to open a PR.
|
If you are interested in picking it up, feel free to open a PR.
|
||||||
Nonetheless you can still use python the OOP way [pygobject]() intended it.
|
Nonetheless you can still use python the OOP way [pygobject](https://pygobject.gnome.org/tutorials/gobject/subclassing.html) intended it.
|
||||||
|
|
||||||
Examples:
|
Examples:
|
||||||
|
|
||||||
72
docs/index.md
Normal file
72
docs/index.md
Normal file
@@ -0,0 +1,72 @@
|
|||||||
|
---
|
||||||
|
layout: home
|
||||||
|
pageClass: home-page
|
||||||
|
|
||||||
|
hero:
|
||||||
|
name: "Astal"
|
||||||
|
text: "Library and Framework for building Desktop Shells"
|
||||||
|
tagline: "The best way to make <i>beautiful</i> <b>and</b> <i>functional</i> wayland widgets!"
|
||||||
|
image: /front-image.png
|
||||||
|
actions:
|
||||||
|
- theme: brand
|
||||||
|
text: What is Astal?
|
||||||
|
link: /getting-started/introduction
|
||||||
|
- theme: alt
|
||||||
|
text: Get Started
|
||||||
|
link: /getting-started/installation
|
||||||
|
- theme: alt
|
||||||
|
text: References
|
||||||
|
link: /libraries/references
|
||||||
|
|
||||||
|
features:
|
||||||
|
- title: Use Your Preferred Language
|
||||||
|
details: The main focus of Astal is TypeScript using JSX. But you can use the libraries in any language that supports <a href="https://en.wikipedia.org/wiki/List_of_language_bindings_for_GTK">Gobject Introspection</a>.
|
||||||
|
- title: No bash scripts needed
|
||||||
|
details: Includes modules to work with Network, Bluetooth, Battery, Audio and more.
|
||||||
|
- title: Use any Gtk widget
|
||||||
|
details: With Astal you work with Gtk directly. You are not limited to only a set of them.
|
||||||
|
---
|
||||||
|
<script setup>
|
||||||
|
import Showcases from './showcases/Showcases.vue'
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<Showcases />
|
||||||
|
|
||||||
|
<!--TODO: add feature icons-->
|
||||||
|
<!--TODO: add icons for buttons https://github.com/vuejs/vitepress/pull/3795-->
|
||||||
|
|
||||||
|
<style>
|
||||||
|
:root {
|
||||||
|
--vp-home-hero-name-color: transparent;
|
||||||
|
--vp-home-hero-name-background: -webkit-linear-gradient(120deg, var(--vp-c-brand-1), var(--vp-c-brand-3));
|
||||||
|
}
|
||||||
|
|
||||||
|
:root {
|
||||||
|
--overlay-gradient: color-mix(in srgb, var(--vp-c-brand-1), transparent 55%);
|
||||||
|
}
|
||||||
|
|
||||||
|
.dark {
|
||||||
|
--overlay-gradient: color-mix(in srgb, var(--vp-c-brand-1), transparent 85%);
|
||||||
|
}
|
||||||
|
|
||||||
|
.home-page {
|
||||||
|
background:
|
||||||
|
linear-gradient(215deg, var(--overlay-gradient), transparent 40%),
|
||||||
|
radial-gradient(var(--overlay-gradient), transparent 40%) no-repeat -60vw -40vh / 105vw 200vh,
|
||||||
|
radial-gradient(var(--overlay-gradient), transparent 65%) no-repeat 50% calc(100% + 20rem) / 60rem 30rem;
|
||||||
|
|
||||||
|
.VPFeature a {
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
|
||||||
|
.VPNavBar {
|
||||||
|
background-color: transparent !important;
|
||||||
|
-webkit-backdrop-filter: blur(16px);
|
||||||
|
backdrop-filter: blur(16px);
|
||||||
|
|
||||||
|
div.divider {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style>
|
||||||
44
docs/libraries/references.md
Normal file
44
docs/libraries/references.md
Normal file
@@ -0,0 +1,44 @@
|
|||||||
|
# References
|
||||||
|
|
||||||
|
The references of the libraries are annotated for the C language.
|
||||||
|
Reading their documentation will vary depending on the language they are used in.
|
||||||
|
|
||||||
|
<!--TODO: list some examples on how to read docs,-->
|
||||||
|
<!--for example the difference between C enums and gjs enums-->
|
||||||
|
|
||||||
|
## Additional references
|
||||||
|
|
||||||
|
### GJS
|
||||||
|
|
||||||
|
- [gjs-docs.gnome.org](https://gjs-docs.gnome.org/): Library references annotated for GJS
|
||||||
|
- [gjs.guide](https://gjs.guide/): GJS and GObject guide
|
||||||
|
|
||||||
|
### Python
|
||||||
|
|
||||||
|
- [pgi-docs](https://lazka.github.io/pgi-docs/): Library references annotated for Python
|
||||||
|
- [pygobject.gnome.org](https://pygobject.gnome.org/): PyGObject reference and guide
|
||||||
|
|
||||||
|
### Lua
|
||||||
|
|
||||||
|
- [lua-lgi docs](https://github.com/lgi-devs/lgi/tree/master/docs): GObject bindings guide for Lua
|
||||||
|
|
||||||
|
### Vala
|
||||||
|
|
||||||
|
- [vala.dev](https://vala.dev/): Guide for the Vala language
|
||||||
|
- [valadoc.org](https://valadoc.org/): Library references annotated for Vala
|
||||||
|
|
||||||
|
## Astal Libraries
|
||||||
|
|
||||||
|
- [Astal](https://aylur.github.io/libastal): libastal the core library, which has the widgets and utilites
|
||||||
|
- [Apps](https://aylur.github.io/libastal/apps): Library and cli tool for querying applications
|
||||||
|
- [Auth](https://aylur.github.io/libastal/auth): Authentication library using PAM
|
||||||
|
- [Battery](https://aylur.github.io/libastal/battery): DBus proxy library for upower daemon
|
||||||
|
- [Bluetooth](https://aylur.github.io/libastal/bluetooth): Library to control bluez over dbus
|
||||||
|
- [Hyprland](https://aylur.github.io/libastal/hyprland): Library and cli tool for Hyprland IPC socket
|
||||||
|
- [Mpris](https://aylur.github.io/libastal/mpris): Library and cli tool for controlling media players
|
||||||
|
- [Network](https://aylur.github.io/libastal/network): NetworkManager wrapper library
|
||||||
|
- [Notifd](https://aylur.github.io/libastal/notifd): A notification daemon library and cli tool
|
||||||
|
- [PowerProfiles](https://aylur.github.io/libastal/powerprofiles): Library and cli to control upowerd powerprofiles
|
||||||
|
- [River](https://aylur.github.io/libastal/river): Library and cli tool for getting status information of the river wayland compositor
|
||||||
|
- [Tray](https://aylur.github.io/libastal/tray): A systemtray library and cli tool
|
||||||
|
- [WirePlumber](https://aylur.github.io/libastal/wireplumber): A library for audio control using wireplumber
|
||||||
7782
docs/package-lock.json
generated
7782
docs/package-lock.json
generated
File diff suppressed because it is too large
Load Diff
@@ -1,19 +1,15 @@
|
|||||||
{
|
{
|
||||||
"name": "docs",
|
"name": "docs",
|
||||||
"type": "module",
|
"type": "module",
|
||||||
"version": "0.0.1",
|
"devDependencies": {
|
||||||
"scripts": {
|
"vitepress": "^1.3.4",
|
||||||
"dev": "astro dev",
|
"vitepress-plugin-auto-sidebar": "^1.2.0",
|
||||||
"start": "astro dev",
|
"vue": "^3.4.38"
|
||||||
"build": "astro check && astro build",
|
|
||||||
"preview": "astro preview",
|
|
||||||
"astro": "astro"
|
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"scripts": {
|
||||||
"@astrojs/check": "^0.9.3",
|
"dev": "vitepress dev",
|
||||||
"@astrojs/starlight": "^0.26.1",
|
"build": "vitepress build",
|
||||||
"astro": "^4.10.2",
|
"preview": "vitepress preview",
|
||||||
"sharp": "^0.32.5",
|
"vitepress": "vitepress"
|
||||||
"typescript": "^5.5.4"
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,6 +0,0 @@
|
|||||||
/** @type {import("prettier").Config} */
|
|
||||||
export default {
|
|
||||||
tabWidth: 4,
|
|
||||||
semi: false,
|
|
||||||
singleQuote: false,
|
|
||||||
};
|
|
||||||
BIN
docs/public/vitepress-logo-large.webp
Normal file
BIN
docs/public/vitepress-logo-large.webp
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 33 KiB |
40
docs/showcases/Showcase.vue
vendored
Normal file
40
docs/showcases/Showcase.vue
vendored
Normal file
@@ -0,0 +1,40 @@
|
|||||||
|
<script setup>
|
||||||
|
import { defineProps } from 'vue';
|
||||||
|
|
||||||
|
const props = defineProps({
|
||||||
|
src: { type: String, required: true },
|
||||||
|
author: { type: String, required: true },
|
||||||
|
url: { type: String, required: true }
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<template>
|
||||||
|
<figure>
|
||||||
|
<a :href="url">
|
||||||
|
<img :src="src" :alt="author" />
|
||||||
|
</a>
|
||||||
|
<figcaption>
|
||||||
|
<span>Author: {{ author }}</span>
|
||||||
|
</figcaption>
|
||||||
|
</figure>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<style scoped>
|
||||||
|
img {
|
||||||
|
border-radius: 4px;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* same as VPFeature */
|
||||||
|
figure {
|
||||||
|
padding: 0.8rem;
|
||||||
|
padding-bottom: 0;
|
||||||
|
border-radius: 12px;
|
||||||
|
background-color: var(--vp-c-bg-soft);
|
||||||
|
}
|
||||||
|
|
||||||
|
figcaption {
|
||||||
|
text-align: center;
|
||||||
|
padding-top: .4em;
|
||||||
|
padding-bottom: .6em;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
45
docs/showcases/Showcases.vue
vendored
Normal file
45
docs/showcases/Showcases.vue
vendored
Normal file
@@ -0,0 +1,45 @@
|
|||||||
|
<script setup lang="ts">
|
||||||
|
import showcases from './showcases'
|
||||||
|
import Showcase from './Showcase.vue'
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<template>
|
||||||
|
<div class="Showcases">
|
||||||
|
<template v-for="(showcase, index) in showcases" :key="index">
|
||||||
|
<div v-if="Array.isArray(showcase)" class="row">
|
||||||
|
<div v-for="(elem, elemIndex) in showcase" :key="elemIndex" class="item"
|
||||||
|
:class="`grid-${showcase.length}`">
|
||||||
|
<Showcase v-bind="elem" />
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<Showcase v-else v-bind="showcase" />
|
||||||
|
</template>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<style scoped>
|
||||||
|
.Showcases {
|
||||||
|
margin-top: 24px;
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
gap: 24px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.row {
|
||||||
|
display: flex;
|
||||||
|
gap: 24px;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* TODO: responsiveness on mobile */
|
||||||
|
.item.grid-2 {
|
||||||
|
width: calc(100% / 2);
|
||||||
|
}
|
||||||
|
|
||||||
|
.item.grid-3 {
|
||||||
|
width: calc(100% / 3);
|
||||||
|
}
|
||||||
|
|
||||||
|
.item.grid-4 {
|
||||||
|
width: calc(100% / 4);
|
||||||
|
}
|
||||||
|
</style>
|
||||||
@@ -4,10 +4,12 @@ type Showcase = {
|
|||||||
url: string
|
url: string
|
||||||
}
|
}
|
||||||
|
|
||||||
type Grid<T> =
|
type Grid<T> = T
|
||||||
| [T, T]
|
| [T, T]
|
||||||
|
| [T, T, T]
|
||||||
| [T, T, T, T]
|
| [T, T, T, T]
|
||||||
|
|
||||||
export const showcases: Array<Showcase | Grid<Showcase>> = [
|
export default [
|
||||||
{ author: "Aylur", src: "/astal/showcase/aylur1.png", url: "https://github.com/Aylur/dotfiles" },
|
{ author: "Aylur", src: "/astal/showcase/aylur1.png", url: "https://github.com/Aylur/dotfiles" },
|
||||||
]
|
// add more showcases here
|
||||||
|
] satisfies Array<Grid<Showcase>>
|
||||||
Binary file not shown.
|
Before Width: | Height: | Size: 135 KiB |
@@ -1,37 +0,0 @@
|
|||||||
---
|
|
||||||
interface Props {
|
|
||||||
src: string
|
|
||||||
author: string
|
|
||||||
url: string
|
|
||||||
}
|
|
||||||
|
|
||||||
const { src, author, url } = Astro.props
|
|
||||||
---
|
|
||||||
|
|
||||||
<figure>
|
|
||||||
<a href={url}>
|
|
||||||
<img src={src} alt={author}>
|
|
||||||
</a>
|
|
||||||
<figcaption>
|
|
||||||
<span>Author: {author}</span>
|
|
||||||
</figcaption>
|
|
||||||
</figure>
|
|
||||||
|
|
||||||
<style>
|
|
||||||
img {
|
|
||||||
border-radius: calc(var(--card-radius) - 8px);
|
|
||||||
}
|
|
||||||
|
|
||||||
figure {
|
|
||||||
padding: .8rem;
|
|
||||||
padding-bottom: 0;
|
|
||||||
border-radius: var(--card-radius);
|
|
||||||
background-color: color-mix(in srgb, var(--sl-color-black), var(--sl-color-white) 2%);
|
|
||||||
border: 1px solid var(--sl-color-gray-6);
|
|
||||||
}
|
|
||||||
|
|
||||||
figcaption {
|
|
||||||
text-align: center;
|
|
||||||
margin: 0;
|
|
||||||
}
|
|
||||||
</style>
|
|
||||||
@@ -1,6 +0,0 @@
|
|||||||
import { defineCollection } from 'astro:content';
|
|
||||||
import { docsSchema } from '@astrojs/starlight/schema';
|
|
||||||
|
|
||||||
export const collections = {
|
|
||||||
docs: defineCollection({ schema: docsSchema() }),
|
|
||||||
};
|
|
||||||
@@ -1,8 +0,0 @@
|
|||||||
---
|
|
||||||
title: Nix
|
|
||||||
description: Usage with the Nix package manager
|
|
||||||
sidebar:
|
|
||||||
hidden: true
|
|
||||||
---
|
|
||||||
|
|
||||||
## Nix
|
|
||||||
@@ -1,67 +0,0 @@
|
|||||||
---
|
|
||||||
title: Build Your Own Desktop Shell
|
|
||||||
description: The best way to make beautiful and functional widgets on wayland
|
|
||||||
template: splash
|
|
||||||
banner:
|
|
||||||
content: 🚧 The library and this documentation is still under development. 🚧
|
|
||||||
hero:
|
|
||||||
tagline: The best way to make <i>beautiful</i> <b>and</b> <i>functional</i> wayland widgets!
|
|
||||||
image:
|
|
||||||
file: ../../assets/front-image.png
|
|
||||||
actions:
|
|
||||||
- text: Get Started
|
|
||||||
link: /astal/getting-started/introduction/
|
|
||||||
icon: right-arrow
|
|
||||||
variant: primary
|
|
||||||
- text: Reference
|
|
||||||
link: /astal/libraries/references
|
|
||||||
icon: open-book
|
|
||||||
variant: secondary
|
|
||||||
- text: View on GitHub
|
|
||||||
link: https://github.com/Aylur/Astal
|
|
||||||
icon: github
|
|
||||||
variant: minimal
|
|
||||||
---
|
|
||||||
|
|
||||||
import { Card, CardGrid } from "@astrojs/starlight/components"
|
|
||||||
import { showcases } from "../showcases.ts"
|
|
||||||
import Showcase from "../../components/Showcase.astro"
|
|
||||||
|
|
||||||
<CardGrid>
|
|
||||||
<Card title="Use your preferred language" icon="seti:json">
|
|
||||||
The main focus of Astal is TypeScript using JSX. But you can use the
|
|
||||||
libraries in any language that supports [Gobject
|
|
||||||
Introspection](https://en.wikipedia.org/wiki/List_of_language_bindings_for_GTK).
|
|
||||||
</Card>
|
|
||||||
<Card title="No bash scripts needed" icon="pencil">
|
|
||||||
Includes modules to work with Network, Bluetooth, Battery, Audio and
|
|
||||||
more. See the list of included [Libraries](/astal/libraries/overview).
|
|
||||||
</Card>
|
|
||||||
<Card title="Use any Gtk widget" icon="puzzle">
|
|
||||||
With Astal you work with Gtk directly. You are not limited to only a set
|
|
||||||
of them. See the list of [Widgets](/astal/libraries/widgets) that come
|
|
||||||
bundled.
|
|
||||||
</Card>
|
|
||||||
<Card title="Examples" icon="open-book">
|
|
||||||
Have a look at some simple and not simple [examples](./config/examples).
|
|
||||||
In [TypeScript](https://github.com/Aylur/Astal/tree/main/examples/ts),
|
|
||||||
[Lua](https://github.com/Aylur/Astal/tree/main/examples/lua),
|
|
||||||
[Python](https://github.com/Aylur/Astal/tree/main/examples/python).
|
|
||||||
</Card>
|
|
||||||
</CardGrid>
|
|
||||||
|
|
||||||
## Showcases
|
|
||||||
|
|
||||||
<div class="showcases">
|
|
||||||
{showcases.map((showcase) =>
|
|
||||||
Array.isArray(showcase) ? (
|
|
||||||
<CardGrid>
|
|
||||||
{showcase.map((elem) => (
|
|
||||||
<Showcase {...elem} />
|
|
||||||
))}
|
|
||||||
</CardGrid>
|
|
||||||
) : (
|
|
||||||
<Showcase {...showcase} />
|
|
||||||
),
|
|
||||||
)}
|
|
||||||
</div>
|
|
||||||
@@ -1,49 +0,0 @@
|
|||||||
---
|
|
||||||
title: References
|
|
||||||
description: References of libraries
|
|
||||||
sidebar:
|
|
||||||
order: 0
|
|
||||||
---
|
|
||||||
|
|
||||||
The references of the libraries are annotated for the C language.
|
|
||||||
Reading their documentation will vary depending on the language they are used in.
|
|
||||||
|
|
||||||
TODO: list some examples on how to read docs,
|
|
||||||
for example the difference between C enums and gjs enums
|
|
||||||
|
|
||||||
## Additional references
|
|
||||||
|
|
||||||
### GJS
|
|
||||||
|
|
||||||
- [gjs-docs.gnome.org](https://gjs-docs.gnome.org/): Library references annotated for GJS
|
|
||||||
- [gjs.guide](https://gjs.guide/): GJS and GObject guide
|
|
||||||
|
|
||||||
### Python
|
|
||||||
|
|
||||||
- [pgi-docs](https://lazka.github.io/pgi-docs/): Library references annotated for Python
|
|
||||||
- [pygobject.gnome.org](https://pygobject.gnome.org/): PyGObject reference and guide
|
|
||||||
|
|
||||||
### Lua
|
|
||||||
|
|
||||||
- [lua-lgi docs](https://github.com/lgi-devs/lgi/tree/master/docs): GObject bindings guide for Lua
|
|
||||||
|
|
||||||
### Vala
|
|
||||||
|
|
||||||
- [vala.dev](https://vala.dev/): Guide for the Vala language
|
|
||||||
- [valadoc.org](https://valadoc.org/): Library references annotated for Vala
|
|
||||||
|
|
||||||
## Astal Libraries
|
|
||||||
|
|
||||||
- [Astal](/reference): libastal the core library, which has the widgets and utilites
|
|
||||||
- [Apps](/reference/apps): Library and cli tool for querying applications
|
|
||||||
- [Auth](/reference/auth): Authentication library using PAM
|
|
||||||
- [Battery](/reference/battery): DBus proxy library for upower daemon
|
|
||||||
- [Bluetooth](/reference/bluetooth): Library to control bluez over dbus
|
|
||||||
- [Hyprland](/reference/hyprland): Library and cli tool for Hyprland IPC socket
|
|
||||||
- [Mpris](/reference/mpris): Library and cli tool for controlling media players
|
|
||||||
- [Network](/reference/network): NetworkManager wrapper library
|
|
||||||
- [Notifd](/reference/notifd): A notification daemon library and cli tool
|
|
||||||
- [PowerProfiles](/reference/powerprofiles): Library and cli to control upowerd powerprofiles
|
|
||||||
- [River](/reference/river): Library and cli tool for getting status information of the river wayland compositor
|
|
||||||
- [Tray](/reference/tray): A systemtray library and cli tool
|
|
||||||
- [WirePlumber](/reference/wireplumber): A library for audio control using wireplumber
|
|
||||||
2
docs/src/env.d.ts
vendored
2
docs/src/env.d.ts
vendored
@@ -1,2 +0,0 @@
|
|||||||
/// <reference path="../.astro/types.d.ts" />
|
|
||||||
/// <reference types="astro/client" />
|
|
||||||
@@ -1,72 +0,0 @@
|
|||||||
/* Dark mode colors. */
|
|
||||||
:root {
|
|
||||||
--sl-color-accent-low: #10243e;
|
|
||||||
--sl-color-accent: #3584e4;
|
|
||||||
--sl-color-accent-high: #99c1f1;
|
|
||||||
--sl-color-white: #ffffff;
|
|
||||||
--sl-color-gray-1: #eeeeee;
|
|
||||||
--sl-color-gray-2: #c2c2c2;
|
|
||||||
--sl-color-gray-3: #8b8b8b;
|
|
||||||
--sl-color-gray-4: #585858;
|
|
||||||
--sl-color-gray-5: #383838;
|
|
||||||
--sl-color-gray-6: #272727;
|
|
||||||
--sl-color-black: #171718;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Light mode colors. */
|
|
||||||
:root[data-theme='light'] {
|
|
||||||
--sl-color-accent-low: #c5d9f2;
|
|
||||||
--sl-color-accent: #156ac7;
|
|
||||||
--sl-color-accent-high: #11325b;
|
|
||||||
--sl-color-white: #181818;
|
|
||||||
--sl-color-gray-1: #272727;
|
|
||||||
--sl-color-gray-2: #383838;
|
|
||||||
--sl-color-gray-3: #585858;
|
|
||||||
--sl-color-gray-4: #8b8b8b;
|
|
||||||
--sl-color-gray-5: #c2c2c2;
|
|
||||||
--sl-color-gray-6: #eeeeee;
|
|
||||||
--sl-color-gray-7: #f6f6f6;
|
|
||||||
--sl-color-black: #ffffff;
|
|
||||||
}
|
|
||||||
|
|
||||||
:root {
|
|
||||||
--card-radius: 7px;
|
|
||||||
}
|
|
||||||
|
|
||||||
article.card {
|
|
||||||
border-radius: var(--card-radius);
|
|
||||||
background-color: color-mix(in srgb, var(--sl-color-black), var(--sl-color-white) 2%);
|
|
||||||
border-color: var(--sl-color-gray-6);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* landing page gradient */
|
|
||||||
:root {
|
|
||||||
--overlay-gradient: color-mix(in srgb, var(--sl-color-accent), transparent 85%);
|
|
||||||
}
|
|
||||||
|
|
||||||
:root[data-theme='light'] {
|
|
||||||
--overlay-gradient: color-mix(in srgb, var(--sl-color-accent), transparent 55%);
|
|
||||||
}
|
|
||||||
|
|
||||||
[data-has-hero] .page {
|
|
||||||
background:
|
|
||||||
linear-gradient(215deg, var(--overlay-gradient), transparent 40%),
|
|
||||||
radial-gradient(var(--overlay-gradient), transparent 40%) no-repeat -60vw -40vh / 105vw 200vh,
|
|
||||||
radial-gradient(var(--overlay-gradient), transparent 65%) no-repeat 50% calc(100% + 20rem) / 60rem 30rem;
|
|
||||||
}
|
|
||||||
|
|
||||||
[data-has-hero] header {
|
|
||||||
border-bottom: 1px solid transparent;
|
|
||||||
background-color: transparent;
|
|
||||||
-webkit-backdrop-filter: blur(16px);
|
|
||||||
backdrop-filter: blur(16px);
|
|
||||||
}
|
|
||||||
|
|
||||||
[data-has-hero] .hero>img {
|
|
||||||
filter: drop-shadow(0 0 3rem var(--overlay-gradient));
|
|
||||||
}
|
|
||||||
|
|
||||||
div.showcases {
|
|
||||||
display: flex;
|
|
||||||
flex-direction: column;
|
|
||||||
}
|
|
||||||
@@ -1,10 +0,0 @@
|
|||||||
{
|
|
||||||
"extends": "astro/tsconfigs/strict",
|
|
||||||
"compilerOptions": {
|
|
||||||
"paths": {
|
|
||||||
"@/*": [
|
|
||||||
"./src/*"
|
|
||||||
]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
103
docs/vitepress.config.ts
Normal file
103
docs/vitepress.config.ts
Normal file
@@ -0,0 +1,103 @@
|
|||||||
|
import { defineConfig } from 'vitepress'
|
||||||
|
|
||||||
|
function reference(lib = "") {
|
||||||
|
return `https://aylur.github.io/libastal${lib}`
|
||||||
|
}
|
||||||
|
|
||||||
|
function github(url = "") {
|
||||||
|
return `https://github.com/aylur/astal${url}`
|
||||||
|
}
|
||||||
|
|
||||||
|
export default defineConfig({
|
||||||
|
title: "Astal",
|
||||||
|
description: "Documentation website of the Astal project",
|
||||||
|
|
||||||
|
outDir: "./dist",
|
||||||
|
base: "/astal/",
|
||||||
|
cleanUrls: true,
|
||||||
|
|
||||||
|
lastUpdated: true,
|
||||||
|
ignoreDeadLinks: true, // FIXME:
|
||||||
|
|
||||||
|
head: [
|
||||||
|
['link', { rel: 'icon', href: '/astal/favicon.ico' }],
|
||||||
|
],
|
||||||
|
|
||||||
|
themeConfig: {
|
||||||
|
// logo: "",
|
||||||
|
//
|
||||||
|
|
||||||
|
nav: [{
|
||||||
|
text: '0.1.0',
|
||||||
|
items: [
|
||||||
|
{ text: 'Contributing', link: github("/blob/main/CONTRIBUTING.md") },
|
||||||
|
{ text: 'Changelog', link: github("/blob/main/CHANGELOG.md") },
|
||||||
|
],
|
||||||
|
}],
|
||||||
|
|
||||||
|
sidebar: [
|
||||||
|
{
|
||||||
|
text: 'Getting Started',
|
||||||
|
base: "/getting-started",
|
||||||
|
collapsed: false,
|
||||||
|
items: [
|
||||||
|
{ text: 'Introduction', link: '/introduction' },
|
||||||
|
{ text: 'Installation', link: '/installation' },
|
||||||
|
{ text: 'Supported Languages', link: '/supported-languages' },
|
||||||
|
],
|
||||||
|
},
|
||||||
|
{
|
||||||
|
text: 'AGS',
|
||||||
|
base: "/ags",
|
||||||
|
collapsed: false,
|
||||||
|
items: [
|
||||||
|
{ text: 'First Widgets', link: '/first-widgets' },
|
||||||
|
{ text: 'Theming', link: '/theming' },
|
||||||
|
{ text: 'CLI and App', link: '/cli-app' },
|
||||||
|
{ text: 'Widget', link: '/widget' },
|
||||||
|
{ text: 'Utilities', link: '/utilities' },
|
||||||
|
{ text: 'Variable', link: '/variable' },
|
||||||
|
{ text: 'FAQ', link: '/faq' },
|
||||||
|
],
|
||||||
|
},
|
||||||
|
{
|
||||||
|
text: 'Libraries',
|
||||||
|
collapsed: true,
|
||||||
|
items: [
|
||||||
|
{ text: 'References', link: '/libraries/references' },
|
||||||
|
{ text: "Astal", link: reference("") },
|
||||||
|
{ text: "Apps", link: reference("/apps") },
|
||||||
|
{ text: "Auth", link: reference("/auth") },
|
||||||
|
{ text: "Battery", link: reference("/battery") },
|
||||||
|
{ text: "Bluetooth", link: reference("/bluetooth") },
|
||||||
|
{ text: "Hyprland", link: reference("/hyprland") },
|
||||||
|
{ text: "Mpris", link: reference("/mpris") },
|
||||||
|
{ text: "Network", link: reference("/network") },
|
||||||
|
{ text: "Notifd", link: reference("/notifd") },
|
||||||
|
{ text: "PowerProfiles", link: reference("/powerprofiles") },
|
||||||
|
{ text: "River", link: reference("/river") },
|
||||||
|
{ text: "Tray", link: reference("/tray") },
|
||||||
|
{ text: "WirePlumber", link: reference("/wireplumber") },
|
||||||
|
],
|
||||||
|
},
|
||||||
|
],
|
||||||
|
|
||||||
|
socialLinks: [
|
||||||
|
{ icon: 'github', link: github() },
|
||||||
|
{ icon: 'discord', link: '"https://discord.gg/CXQpHwDuhY"' },
|
||||||
|
],
|
||||||
|
|
||||||
|
editLink: {
|
||||||
|
pattern: github("edit/main/docs/:path"),
|
||||||
|
text: 'Edit this page on GitHub',
|
||||||
|
},
|
||||||
|
|
||||||
|
lastUpdated: {
|
||||||
|
text: 'Last updated',
|
||||||
|
},
|
||||||
|
|
||||||
|
search: {
|
||||||
|
provider: "local",
|
||||||
|
}
|
||||||
|
},
|
||||||
|
})
|
||||||
126
docs/vitepress.theme.css
Normal file
126
docs/vitepress.theme.css
Normal file
@@ -0,0 +1,126 @@
|
|||||||
|
/**
|
||||||
|
* https://github.com/vuejs/vitepress/blob/main/src/client/theme-default/styles/vars.css
|
||||||
|
*/
|
||||||
|
|
||||||
|
.VPNavBar .VPNavBarTitle span {
|
||||||
|
font-size: 1.4em;
|
||||||
|
font-weight: bold;
|
||||||
|
background: linear-gradient(120deg, var(--vp-c-brand-3), var(--vp-c-brand-1));
|
||||||
|
-webkit-background-clip: text;
|
||||||
|
-webkit-text-fill-color: transparent;
|
||||||
|
background-clip: text;
|
||||||
|
color: transparent;
|
||||||
|
}
|
||||||
|
|
||||||
|
:root {
|
||||||
|
--vp-c-gray-1: #dddde3;
|
||||||
|
--vp-c-gray-2: #e4e4e9;
|
||||||
|
--vp-c-gray-3: #ebebef;
|
||||||
|
--vp-c-gray-soft: rgba(142, 150, 170, 0.14);
|
||||||
|
|
||||||
|
--vp-c-indigo-1: #3451b2;
|
||||||
|
--vp-c-indigo-2: #3a5ccc;
|
||||||
|
--vp-c-indigo-3: #5672cd;
|
||||||
|
--vp-c-indigo-soft: rgba(100, 108, 255, 0.14);
|
||||||
|
|
||||||
|
--vp-c-purple-1: #6f42c1;
|
||||||
|
--vp-c-purple-2: #7e4cc9;
|
||||||
|
--vp-c-purple-3: #8e5cd9;
|
||||||
|
--vp-c-purple-soft: rgba(159, 122, 234, 0.14);
|
||||||
|
|
||||||
|
--vp-c-green-1: #18794e;
|
||||||
|
--vp-c-green-2: #299764;
|
||||||
|
--vp-c-green-3: #30a46c;
|
||||||
|
--vp-c-green-soft: rgba(16, 185, 129, 0.14);
|
||||||
|
|
||||||
|
--vp-c-yellow-1: #915930;
|
||||||
|
--vp-c-yellow-2: #946300;
|
||||||
|
--vp-c-yellow-3: #9f6a00;
|
||||||
|
--vp-c-yellow-soft: rgba(234, 179, 8, 0.14);
|
||||||
|
|
||||||
|
--vp-c-red-1: #b8272c;
|
||||||
|
--vp-c-red-2: #d5393e;
|
||||||
|
--vp-c-red-3: #e0575b;
|
||||||
|
--vp-c-red-soft: rgba(244, 63, 94, 0.14);
|
||||||
|
|
||||||
|
--vp-c-sponsor: #db2777;
|
||||||
|
}
|
||||||
|
|
||||||
|
.dark {
|
||||||
|
--vp-c-gray-1: #515c67;
|
||||||
|
--vp-c-gray-2: #414853;
|
||||||
|
--vp-c-gray-3: #32363f;
|
||||||
|
--vp-c-gray-soft: rgba(101, 117, 133, 0.16);
|
||||||
|
|
||||||
|
--vp-c-indigo-1: #a8b1ff;
|
||||||
|
--vp-c-indigo-2: #5c73e7;
|
||||||
|
--vp-c-indigo-3: #3e63dd;
|
||||||
|
--vp-c-indigo-soft: rgba(100, 108, 255, 0.16);
|
||||||
|
|
||||||
|
--vp-c-purple-1: #c8abfa;
|
||||||
|
--vp-c-purple-2: #a879e6;
|
||||||
|
--vp-c-purple-3: #8e5cd9;
|
||||||
|
--vp-c-purple-soft: rgba(159, 122, 234, 0.16);
|
||||||
|
|
||||||
|
--vp-c-green-1: #3dd68c;
|
||||||
|
--vp-c-green-2: #30a46c;
|
||||||
|
--vp-c-green-3: #298459;
|
||||||
|
--vp-c-green-soft: rgba(16, 185, 129, 0.16);
|
||||||
|
|
||||||
|
--vp-c-yellow-1: #f9b44e;
|
||||||
|
--vp-c-yellow-2: #da8b17;
|
||||||
|
--vp-c-yellow-3: #a46a0a;
|
||||||
|
--vp-c-yellow-soft: rgba(234, 179, 8, 0.16);
|
||||||
|
|
||||||
|
--vp-c-red-1: #f66f81;
|
||||||
|
--vp-c-red-2: #f14158;
|
||||||
|
--vp-c-red-3: #b62a3c;
|
||||||
|
--vp-c-red-soft: rgba(244, 63, 94, 0.16);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ---------- *
|
||||||
|
* Background *
|
||||||
|
* ---------- */
|
||||||
|
|
||||||
|
:root {
|
||||||
|
--vp-c-bg: #ffffff;
|
||||||
|
--vp-c-bg-alt: #f6f6f7;
|
||||||
|
--vp-c-bg-elv: #ffffff;
|
||||||
|
--vp-c-bg-soft: #f6f6f7;
|
||||||
|
}
|
||||||
|
|
||||||
|
.dark {
|
||||||
|
--vp-c-bg: #1b1b1b;
|
||||||
|
--vp-c-bg-alt: #161617;
|
||||||
|
--vp-c-bg-elv: #202122;
|
||||||
|
--vp-c-bg-soft: #202122;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Borders */
|
||||||
|
:root {
|
||||||
|
--vp-c-border: #c2c2c4;
|
||||||
|
--vp-c-divider: #e2e2e3;
|
||||||
|
--vp-c-gutter: #e2e2e3;
|
||||||
|
}
|
||||||
|
|
||||||
|
.dark {
|
||||||
|
--vp-c-border: #3c3d3e;
|
||||||
|
--vp-c-divider: #2e2e2e;
|
||||||
|
--vp-c-gutter: #000000;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ---- *
|
||||||
|
* Text *
|
||||||
|
* ---- */
|
||||||
|
|
||||||
|
:root {
|
||||||
|
--vp-c-text-1: rgba(60, 60, 67);
|
||||||
|
--vp-c-text-2: rgba(60, 60, 67, 0.78);
|
||||||
|
--vp-c-text-3: rgba(60, 60, 67, 0.56);
|
||||||
|
}
|
||||||
|
|
||||||
|
.dark {
|
||||||
|
--vp-c-text-1: rgba(255, 255, 245, 0.86);
|
||||||
|
--vp-c-text-2: rgba(235, 235, 245, 0.6);
|
||||||
|
--vp-c-text-3: rgba(235, 235, 245, 0.38);
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user