Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
85 commits
Select commit Hold shift + click to select a range
85acb54
chore: add tmporary dir
ry2x Aug 14, 2026
5c1b358
refactor: migrate app launcher widgets to tsx
ry2x Aug 14, 2026
0892111
refactor: build circular progress overlay with jsx
ry2x Aug 14, 2026
d566af4
refactor: simplify app launcher lifecycle
ry2x Aug 14, 2026
342dc91
refactor: centralize app search deduplication
ry2x Aug 15, 2026
390ca88
refac: use interface
ry2x Aug 15, 2026
46190c1
refactor: move bar hyprland state into stores
ry2x Aug 15, 2026
ea0c874
refactor: move bar volume state into audio store
ry2x Aug 15, 2026
aadec1e
refactor: simplify bar tray lifecycle
ry2x Aug 15, 2026
eb04a17
refactor: update bar widget monitor props
ry2x Aug 15, 2026
9010b48
refactor: move bar background lifecycle into store
ry2x Aug 15, 2026
5f12802
refactor: simplify bar window composition
ry2x Aug 15, 2026
03c9a8c
refactor: type lucide icon props
ry2x Aug 15, 2026
9065125
refactor: move animated list lifecycle into store
ry2x Aug 15, 2026
fad89e9
refactor: encapsulate circular progress animation
ry2x Aug 15, 2026
5e29adc
refactor: encapsulate notification image resources
ry2x Aug 15, 2026
4f0fd4f
refactor: move notification popup lifecycle into store
ry2x Aug 15, 2026
2b1e993
refactor: scope clock update lifecycle
ry2x Aug 15, 2026
af11608
refactor: centralize notification dnd state
ry2x Aug 15, 2026
8980b7e
refactor: simplify date weather profile card
ry2x Aug 15, 2026
a3264c8
refactor: scope weather data lifecycle
ry2x Aug 15, 2026
85e017c
refactor: extract world clock formatting
ry2x Aug 15, 2026
b34c006
refactor: split weather forecast item
ry2x Aug 15, 2026
ba17b44
refactor: split world clock row
ry2x Aug 15, 2026
3e8e208
refactor: move date weather popup lifecycle into store
ry2x Aug 15, 2026
398590a
refactor: split power menu main view
ry2x Aug 15, 2026
dd66592
refactor: split power menu confirmation view
ry2x Aug 15, 2026
89c356b
refactor: centralize power menu state
ry2x Aug 15, 2026
7a23afe
refactor: simplify power menu window
ry2x Aug 15, 2026
f4a898c
refactor: encapsulate wallpaper card state
ry2x Aug 15, 2026
b81d681
refactor: encapsulate wallpaper cover flow
ry2x Aug 15, 2026
75a3c75
refactor: separate wallpaper thumbnail lifecycle
ry2x Aug 15, 2026
8613b1a
refactor: add wallpaper selector state
ry2x Aug 15, 2026
cbbac16
refactor: simplify wallpaper selector window
ry2x Aug 15, 2026
b4b4182
refactor: scope update polling lifecycle
ry2x Aug 15, 2026
57da789
refactor: use ags timer for brightness updates
ry2x Aug 15, 2026
c0970ad
refactor: simplify control center system metrics
ry2x Aug 15, 2026
39e5961
refactor: simplify control center volume slider
ry2x Aug 15, 2026
a426e04
refactor: centralize screen capture actions
ry2x Aug 15, 2026
cf6c966
refactor: split screen capture controls
ry2x Aug 15, 2026
2c5e016
refactor: simplify network toggle commands
ry2x Aug 15, 2026
34c8588
refactor: split quick toggle buttons
ry2x Aug 15, 2026
90df426
refactor: group quick toggle widgets
ry2x Aug 15, 2026
8a3a556
fix: initialize stack children before selection
ry2x Aug 15, 2026
e5a9e66
refactor: split connectivity shared widgets
ry2x Aug 15, 2026
5603a0a
refactor: scope bluetooth page lifecycle
ry2x Aug 15, 2026
f8f09e3
refactor: split bluetooth page widgets
ry2x Aug 15, 2026
b0079ff
refactor: scope wifi page lifecycle
ry2x Aug 15, 2026
4798284
refactor: split wifi page widgets
ry2x Aug 15, 2026
0d37411
refactor: scope wifi password dialog state
ry2x Aug 15, 2026
69ac54e
refactor: simplify wifi password dialog
ry2x Aug 15, 2026
1d46d64
refactor: declare connectivity overlays in jsx
ry2x Aug 15, 2026
430c570
refactor: scope sound page lifecycle
ry2x Aug 15, 2026
bccbb60
refactor: split sound page controls
ry2x Aug 15, 2026
2f55d77
refactor: scope media player lifecycle
ry2x Aug 15, 2026
25bbba4
refactor: split media player card
ry2x Aug 15, 2026
dc57f93
refactor: centralize cava lifecycle
ry2x Aug 15, 2026
241ee39
refactor: scope control center lifecycle
ry2x Aug 15, 2026
4ec4c90
refactor: split control center content
ry2x Aug 15, 2026
6c5032e
refactor: simplify control center window
ry2x Aug 15, 2026
92d436f
refactor: organize ipc handlers
ry2x Aug 15, 2026
e328909
refactor: share click catcher widget
ry2x Aug 15, 2026
fbaf729
refactor: group screen capture widgets
ry2x Aug 15, 2026
09dc63f
refactor: initialize gtk widget properties
ry2x Aug 15, 2026
711986b
refactor: move bar styles to scss
ry2x Aug 15, 2026
4ea1593
refactor: move date weather styles to scss
ry2x Aug 15, 2026
2b1bf70
refactor: move control center styles to scss
ry2x Aug 15, 2026
00e09a2
perf: minify production assets with esbuild
ry2x Aug 15, 2026
93bb5cf
refactor: group stores by domain
ry2x Aug 15, 2026
82340d5
refactor: split application store responsibilities
ry2x Aug 15, 2026
dee1ba8
refactor: decouple launcher background reload
ry2x Aug 15, 2026
5644536
refactor: move stylesheet lifecycle into shell store
ry2x Aug 15, 2026
4e9e275
fix: isolate side panel state by monitor
ry2x Aug 15, 2026
676a6a8
fix: handle notification replacement lifecycle
ry2x Aug 15, 2026
9fa4bf3
fix: track bluetooth operations and device state
ry2x Aug 15, 2026
2678977
fix: serialize system resource operations
ry2x Aug 15, 2026
9cdb3ca
fix: cancel wallpaper thumbnail workers
ry2x Aug 15, 2026
1496554
fix: clean up capture and media tasks
ry2x Aug 15, 2026
812d374
refactor: keep library utilities stateless
ry2x Aug 15, 2026
d3dbc71
fix: preserve gtk css declaration terminators
ry2x Aug 15, 2026
d5475e2
fix: initialize control center stack after children
ry2x Aug 15, 2026
2760094
fix: handle recorder diagnostics correctly
ry2x Aug 15, 2026
4c2f98b
refactor: split wallpaper cover flow
ry2x Aug 15, 2026
de5d578
refactor: split brightness controll
ry2x Aug 15, 2026
8a4e032
chore: document pre-commit checks
ry2x Aug 15, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -16,3 +16,5 @@ oneshot/style.css
oneshot/**/build/

debug/results/

JSX*
15 changes: 13 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -120,12 +120,23 @@ pnpm check
pnpm build
```

Running `pnpm run tsc` will throw errors in the following 2 files:
The minimum checks to run before creating a commit are:

```sh
pnpm check
pnpm build
git diff --check
```

`pnpm check` runs Prettier's check mode, ESLint, Knip, and the project type check.
Use `pnpm format` to apply formatting before running the checks again.

`pnpm check` ignores the following 2 known upstream type errors:

> `../../../usr/share/ags/js/lib/gtk4/app.ts:288`
> `../../../usr/share/ags/js/node_modules/gnim/dist/jsx/state.ts:715`

You can safely ignore these errors.
Use `pnpm run tsc` when you need the raw TypeScript output, including those upstream errors.

## Why AGS was chosen and its memory consumption

Expand Down
4 changes: 2 additions & 2 deletions knip.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"$schema": "https://unpkg.com/knip@6/schema.json",
"tags": ["-lintignore"],
"entry": ["src/app.ts"],
"ignoreDependencies": ["gi", "system"],
"entry": ["src/app.ts", "scripts/build-js.mjs"],
"ignoreDependencies": ["cairo", "gi", "system"],
"ignoreBinaries": ["ags"]
}
6 changes: 5 additions & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
"@eslint/js": "^10.0.1",
"@trivago/prettier-plugin-sort-imports": "^6.0.2",
"@types/node": "^26.2.0",
"esbuild": "0.25.10",
"eslint": "^10.5.0",
"eslint-config-prettier": "^10.1.8",
"knip": "^6.32.0",
Expand All @@ -18,14 +19,17 @@
"generate-type": "ags types -d .",
"lint": "eslint .",
"format": "prettier --write \"./**/*.{js,ts,tsx,json,css,scss,md,html}\" \"./*.{js,ts,tsx,json}\"",
"format:check": "prettier --check \"./**/*.{js,ts,tsx,json,css,scss,md,html}\" \"./*.{js,ts,tsx,json}\"",
"tsc": "tsc --noEmit",
"typecheck": "bash scripts/typecheck.sh",
"knip": "knip",
"check": "pnpm lint && pnpm knip && pnpm tsc",
"check": "pnpm format:check && pnpm lint && pnpm knip && pnpm typecheck",
"build": "./scripts/build.sh",
"dev": "./scripts/dev.sh",
"deploy:user": "./scripts/deploy-user.sh"
},
"name": "rystal-shell",
"packageManager": "pnpm@11.9.0",
"license": "GPL-3.0-or-later",
"private": true
}
271 changes: 271 additions & 0 deletions pnpm-lock.yaml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 2 additions & 0 deletions pnpm-workspace.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
allowBuilds:
esbuild: true
15 changes: 15 additions & 0 deletions scripts/build-js.mjs
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
import { build } from 'esbuild';

await build({
entryPoints: ['src/app.ts'],
outfile: 'dist/app.js',
bundle: true,
external: ['gi://*', 'resource://*', 'cairo', 'console', 'system'],
format: 'esm',
keepNames: false,
minify: true,
platform: 'neutral',
sourcemap: false,
target: 'es2022',
tsconfig: 'tsconfig.json',
});
Loading