Author SHA1 Message Date
AramJonghu 0ab8707d70 fix(ci): rust ci revert node container for checkout
C++ / fmt (pull_request) Successful in 18s
JS/TS / fmt & lint (pull_request) Successful in 18s
Python / fmt & lint (pull_request) Successful in 35s
C++ / build & lint (pull_request) Failing after 2m31s
Python / test & nuitka build (pull_request) Failing after 1m36s
Rust / clippy & fmt (pull_request) Failing after 59s
2026-10-30 23:23:07 +01:00
AramJonghu 516ec9dd54 chore(format): format files that were unformatted
JS/TS / fmt & lint (pull_request) Successful in 12s
Rust / clippy & fmt (pull_request) Failing after 43s
C++ / fmt (pull_request) Successful in 5s
Python / fmt & lint (pull_request) Successful in 42s
Python / test & nuitka build (pull_request) Failing after 1m34s
C++ / build & lint (pull_request) Failing after 2m17s
2026-10-30 22:57:48 +01:00
AramJonghu b279c5d664 fix(makefile): ruff fmt is now not just a check 2026-10-30 22:46:52 +01:00
AramJonghu 82c307de11 fix(Dockerfile): adds mpv dep
C++ / fmt (pull_request) Failing after 5s
JS/TS / fmt & lint (pull_request) Successful in 13s
C++ / build & lint (pull_request) Failing after 20s
Python / test & nuitka build (pull_request) Canceled after 24s
Python / fmt & lint (pull_request) Canceled after 26s
Rust / clippy & fmt (pull_request) Failing after 3s
2026-10-30 02:51:22 +01:00
AramJonghu 388482c620 ci(rust): fixes and optimizations
C++ / fmt (pull_request) Failing after 5s
C++ / build & lint (pull_request) Failing after 13s
JS/TS / fmt & lint (pull_request) Successful in 11s
Python / fmt & lint (pull_request) Successful in 26s
Rust / clippy & fmt (pull_request) Failing after 50s
Python / test & nuitka build (pull_request) Failing after 1m23s
- removes cargo check since the clippy step builds already
- image switched to rust:alpine
- less correctness during build for speedier compilation
2026-10-30 02:49:22 +01:00
AramJonghu ab4a662013 ci(cpp): introduce caching cmake and build + format optimization 2026-10-30 02:46:17 +01:00
AramJonghu fda39fc4c0 feat(makefile): adds a make formatter as task runner
C++ / fmt (pull_request) Failing after 6s
C++ / build & lint (pull_request) Failing after 10s
JS/TS / fmt & lint (pull_request) Successful in 14s
Python / fmt & lint (pull_request) Successful in 29s
Python / test & nuitka build (pull_request) Failing after 1m25s
Rust / build, clippy & fmt (pull_request) Failing after 4m49s
2026-10-30 02:22:57 +01:00
AramJonghu 9e97569467 fix(ci): cpp clang-tidy now properly reads non-build files only 2026-10-30 02:22:57 +01:00
AramJonghu 630b05ff2c feat(makefile): added no nuitka option for cpp-compile task 2026-10-30 02:22:57 +01:00
AramJonghu b86f865396 chore(gitignore): ordering known files and directories 2026-10-30 02:22:57 +01:00
AramJonghu 34585a639b chore(gitignore): nuitka compile files ignored and categorized 2026-10-30 02:22:57 +01:00
AramJonghu 163370354a fix(clang-tidy): make cpp-lint has proper clang-tidy check 2026-10-30 02:22:57 +01:00
AramJonghu 012d2777c2 chore(Dockerfile): add future dependencies 2026-10-30 02:22:57 +01:00
zachandAramJonghu 9c0b74ff66 Merge branch 'main' into feat/task-runner-ci 2026-10-30 02:22:57 +01:00
AramJonghu 24825250bb feat(makefile): added qmlformat + install -> compile in cpp step 2026-10-30 02:22:57 +01:00
AramJonghu 1364b5ed1a feat(makefile): C++, Python, and Rust checks included (incomplete) 2026-10-30 02:22:57 +01:00
AramJonghu ef4d849b4b feat(makefile): makefile build & install + progress on cpp and py 2026-10-30 02:22:57 +01:00
AramJonghu e12a047da2 format(clang): make cpp-fmt result 2026-10-30 02:22:57 +01:00
AramJonghu 5db2718b04 ci: rework Dockerfile image + buildx dep added 2026-10-30 02:22:57 +01:00
AramJonghu e50a28b877 refactor(workflows): combined steps where it makes sense 2026-10-30 02:22:57 +01:00
AramJonghu 0e23b18f72 fix(ci): missing dependency wayland-scanner 2026-10-30 02:22:57 +01:00
64 changed files with 303 additions and 394 deletions
+1 -1
View File
@@ -18,7 +18,7 @@ jobs:
uses: actions/checkout@v4
- name: Install Docker CLI
run: apk add --no-cache docker-cli
run: apk add --no-cache docker-cli docker-cli-buildx
- name: Login to registry
run: echo "${{ secrets.REGISTRY_TOKEN }}" | docker login git.aramjonghu.dev --username aramjonghu --password-stdin
+22 -21
View File
@@ -17,46 +17,47 @@ jobs:
run: |
find . \( -name '*.cpp' -o -name '*.h' -o -name '*.hpp' \) \
-not -path './build/*' \
-exec clang-format -i --style=file {} +
git diff --exit-code && echo "clang-format: passed"
-exec clang-format --dry-run -Werror --style=file {} +
build:
build & lint:
runs-on: alpine
container:
image: git.aramjonghu.dev/aramjonghu/zshell-ci:latest
steps:
- name: Checkout
uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Configure
run: cmake -B build -G Ninja -DENABLE_MODULES=plugin -DCMAKE_BUILD_TYPE=Release
- name: Build
run: ninja -C build
clang-tidy:
runs-on: alpine
container:
image: git.aramjonghu.dev/aramjonghu/zshell-ci:latest
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Cache CMake build
uses: actions/cache@v4
with:
fetch-depth: 0
path: build
key: cpp-build-${{ hashFiles('CMakeLists.txt', '**/CMakeLists.txt') }}
restore-keys: |
cpp-build-
- name: Cache ccache
uses: actions/cache@v4
with:
path: ~/.ccache
key: ccache-${{ runner.os }}-${{ github.sha }}
restore-keys: |
ccache-${{ runner.os }}-
- name: Configure
run: cmake -B build -G Ninja -DENABLE_MODULES=plugin -DCMAKE_BUILD_TYPE=Release
- name: Build
run: ninja -C build
env:
CMAKE_CXX_COMPILER_LAUNCHER: ccache
- name: clang-tidy
run: |
sed -i 's/-mno-direct-extern-access //g' build/compile_commands.json
set -o pipefail
run-clang-tidy -p build -j $(nproc) -header-filter="Plugins/.*" 2>&1 | \
grep -v 'Suppressed\|non-user\|non-system\|unknown argument.*mno-direct\|Found compiler error\|warnings generated\.\|^Use -header-filter'
run-clang-tidy -p build -j "$(nproc)" \
-source-filter="^$(pwd)/Plugins/" \
-header-filter=".*Plugins/.*" \
-removed-arg=-mno-direct-extern-access
+1 -15
View File
@@ -4,7 +4,7 @@ on:
pull_request:
jobs:
fmt:
fmt & lint:
runs-on: alpine
container: node:26-alpine
@@ -24,20 +24,6 @@ jobs:
else
echo "No JS/TS files found"
fi
lint:
runs-on: alpine
container: node:26-alpine
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Install tools
run: |
apk add --no-cache \
git
- name: ESLint
run: |
if [ -n "$(find . \( -iname "*.js" -o -iname "*.jsx" -o -iname "*.ts" -o -iname "*.tsx" -o -iname "*.mjs" -o -iname "*.cjs" \) -print -quit)" ]; then
+2 -2
View File
@@ -7,7 +7,7 @@ on:
pull_request:
jobs:
static:
fmt & lint:
runs-on: debian
container: node:26-trixie-slim
@@ -33,7 +33,7 @@ jobs:
. .venv/bin/activate
ruff check .
verify:
test & nuitka build:
if: always()
runs-on: debian
container: node:26-trixie-slim
+11 -99
View File
@@ -4,9 +4,9 @@ on:
pull_request:
jobs:
build:
clippy & fmt:
runs-on: alpine
container: node:26-alpine
container: node:26-alpine # keep node image for checkout to work
env:
CARGO_HOME: ${{ github.workspace }}/.cargo
@@ -16,34 +16,29 @@ jobs:
- name: Cache cargo packages
uses: actions/cache@v4
env:
cache-name: cache-cargo-packages
with:
path: |
.cargo/registry
.cargo/git
target
key: rust-build-${{ runner.os }}-${{ env.cache-name }}-${{ hashFiles('**/Cargo.lock') }}
key: rust-build-${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.lock') }}
restore-keys: |
rust-${{ runner.os }}-build-${{ env.cache-name }}-
rust-${{ runner.os }}-build-
rust-
rust-${{ runner.os }}-cargo-
- name: Install tools
run: |
apk add --no-cache \
git \
cargo \
rust
apk add --no-cache git cargo rust rust-clippy rustfmt
- name: Cargo check
- name: Clippy (with compile check)
run: |
if [ -n "$(find . -name "Cargo.toml" -print -quit)" ]; then
status=0
for manifest in $(find . -name "Cargo.toml"); do
cargo check --manifest-path "$manifest" && \
echo "$manifest: check passed" || \
{ echo "$manifest: check failed"; exit 1; }
cargo clippy --manifest-path "$manifest" -- -D warnings && \
echo "$manifest: Clippy passed" || \
{ echo "$manifest: Clippy failed"; status=1; }
done
exit $status
elif [ -n "$(find . -name "*.rs" -print -quit)" ]; then
echo "Rust files found but no Cargo.toml"
exit 1
@@ -51,39 +46,6 @@ jobs:
echo "No Rust project found"
fi
fmt:
runs-on: alpine
container: node:26-alpine
env:
CARGO_HOME: ${{ github.workspace }}/.cargo
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Cache cargo packages
uses: actions/cache@v4
env:
cache-name: cache-cargo-packages
with:
path: |
.cargo/registry
.cargo/git
target
key: rust-fmt-${{ runner.os }}-${{ env.cache-name }}-${{ hashFiles('**/Cargo.lock') }}
restore-keys: |
rust-${{ runner.os }}-build-${{ env.cache-name }}-
rust-${{ runner.os }}-build-
rust-
- name: Install tools
run: |
apk add --no-cache \
git \
cargo \
rust \
rustfmt
- name: Format check
run: |
if [ -n "$(find . -name "Cargo.toml" -print -quit)" ]; then
@@ -100,53 +62,3 @@ jobs:
else
echo "No Rust project found"
fi
clippy:
runs-on: alpine
container: node:26-alpine
env:
CARGO_HOME: ${{ github.workspace }}/.cargo
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Cache cargo packages
uses: actions/cache@v4
env:
cache-name: cache-cargo-packages
with:
path: |
.cargo/registry
.cargo/git
target
key: rust-clippy-${{ runner.os }}-${{ env.cache-name }}-${{ hashFiles('**/Cargo.lock') }}
restore-keys: |
rust-${{ runner.os }}-build-${{ env.cache-name }}-
rust-${{ runner.os }}-build-
rust-
- name: Install tools
run: |
apk add --no-cache \
git \
cargo \
rust \
rust-clippy
- name: Clippy
run: |
if [ -n "$(find . -name "Cargo.toml" -print -quit)" ]; then
status=0
for manifest in $(find . -name "Cargo.toml"); do
cargo clippy --manifest-path "$manifest" --all-targets --all-features -- -D warnings && \
echo "$manifest: Clippy passed" || \
{ echo "$manifest: Clippy failed"; status=1; }
done
exit $status
elif [ -n "$(find . -name "*.rs" -print -quit)" ]; then
echo "Rust files found but no Cargo.toml"
exit 1
else
echo "No Rust project found"
fi
+22 -10
View File
@@ -1,23 +1,35 @@
**/__pycache__/
./result/
.pyre/
.cache/
.venv/
.qmlls.ini
build/
compile_commands.json
testpython
pkg/
*.tar.*
uv.lock
.qtcreator/
dist/
**/target/
**/test-plugins/
**/Charts/
network-dev/
**/zshell.build/
**/zshell.dist/
# Qml
.qtcreator/
.qmlls.ini
# CMake compile artifacts
.cache/
compile_commands.json
build/
# Python
uv.lock
testpython
.venv/
**/__pycache__/
# Nuitka compile
**/zshell.pyi
**/zshell.cpython-*
**/zshell.build/
# Agents stuff
.opencode/
run-agent.sh
AGENTS.md
+2 -4
View File
@@ -46,8 +46,7 @@ Item {
strokeWidth: Math.min(1, remainingArc.sweepAngle) * root.strokeWidth
Behavior on strokeColor {
CAnim {
}
CAnim {}
}
PathAngleArc {
@@ -84,8 +83,7 @@ Item {
}
}
Behavior on color {
CAnim {
}
CAnim {}
}
Anim on waveProgress {
id: waveProgAnim
+1 -2
View File
@@ -160,8 +160,7 @@ Item {
Behavior on color {
enabled: false
CAnim {
}
CAnim {}
}
}
+1 -2
View File
@@ -8,7 +8,6 @@ MultiEffect {
colorization: 1
Behavior on colorizationColor {
CAnim {
}
CAnim {}
}
}
+1 -2
View File
@@ -7,7 +7,6 @@ ClippingRectangle {
color: "transparent"
Behavior on color {
CAnim {
}
CAnim {}
}
}
+1 -2
View File
@@ -7,7 +7,6 @@ ClippingWrapperRectangle {
color: "transparent"
Behavior on color {
CAnim {
}
CAnim {}
}
}
+2 -4
View File
@@ -124,8 +124,7 @@ ProgressBar {
anchors.left: parent.left
Behavior on implicitWidth {
Anim {
}
Anim {}
}
Component.onCompleted: implicitWidth = Qt.binding(() => parent.width * root.visualPosition)
@@ -222,8 +221,7 @@ ProgressBar {
}
}
Behavior on color {
CAnim {
}
CAnim {}
}
Anim on waveProgress {
duration: root.waveDuration
+5 -10
View File
@@ -105,20 +105,16 @@ Switch {
width: height
Behavior on end1 {
PropAnim {
}
PropAnim {}
}
Behavior on end2 {
PropAnim {
}
PropAnim {}
}
Behavior on start1 {
PropAnim {
}
PropAnim {}
}
Behavior on start2 {
PropAnim {
}
PropAnim {}
}
ShapePath {
@@ -134,8 +130,7 @@ Switch {
strokeWidth: 16 * 0.15
Behavior on strokeColor {
CAnim {
}
CAnim {}
}
PathLine {
+2 -4
View File
@@ -20,8 +20,7 @@ Text {
textFormat: Text.PlainText
Behavior on color {
CAnim {
}
CAnim {}
}
Behavior on text {
enabled: root.animate
@@ -33,8 +32,7 @@ Text {
type: Anim.FastEffects
}
PropertyAction {
}
PropertyAction {}
TAnim {
target: root
+1 -2
View File
@@ -65,8 +65,7 @@ Image {
value: root.source
}
PropertyAction {
}
PropertyAction {}
ScriptAction {
script: root.maybeStartInAnim()
+4 -1
View File
@@ -138,7 +138,10 @@ Item {
const t = (tlo + thi) / 2;
const u = 1 - t;
const y = u * u * u * p1.y + 3 * u * u * t * c1y + 3 * u * t * t * c2y + t * t * t * p2.y;
return { x: targetX, y };
return {
x: targetX,
y
};
}
// Part of the curve left/right of a cut x, including the cut point
+1 -2
View File
@@ -64,8 +64,7 @@ MaterialShape {
to: 360
}
Behavior on color {
CAnim {
}
CAnim {}
}
ElapsedTimer {
+2 -4
View File
@@ -47,12 +47,10 @@ Item {
implicitWidth: vertical ? elideText.implicitHeight : elideText.implicitWidth
Behavior on leftFadeStrength {
Anim {
}
Anim {}
}
Behavior on rightFadeStrength {
Anim {
}
Anim {}
}
onHeightChanged: resetMarquee()
+3 -6
View File
@@ -102,8 +102,7 @@ Row {
topLeftRadius: rad
Behavior on rad {
Anim {
}
Anim {}
}
StateLayer {
@@ -127,12 +126,10 @@ Row {
text: "expand_more"
Behavior on anchors.horizontalCenterOffset {
Anim {
}
Anim {}
}
Behavior on rotation {
Anim {
}
Anim {}
}
}
}
+3 -6
View File
@@ -44,8 +44,7 @@ Item {
onValuesChanged: root.flagChanged()
}
ToastWrapper {
}
ToastWrapper {}
}
component ToastWrapper: MouseArea {
@@ -86,12 +85,10 @@ Item {
}
}
Behavior on opacity {
Anim {
}
Anim {}
}
Behavior on scale {
Anim {
}
Anim {}
}
Component.onCompleted: modelData.lock(this)
+1 -2
View File
@@ -20,8 +20,7 @@ Shape {
strokeWidth: 0
Behavior on fillColor {
CAnim {
}
CAnim {}
}
PathSvg {
-1
View File
@@ -141,7 +141,6 @@ Singleton {
BeatTracker {
id: beatTracker
}
PwObjectTracker {
+1 -2
View File
@@ -295,8 +295,7 @@ Singleton {
Component {
id: apComp
AccessPoint {
}
AccessPoint {}
}
Process {
+2 -5
View File
@@ -1081,15 +1081,13 @@ Singleton {
Component {
id: commandProc
CommandProcess {
}
CommandProcess {}
}
Component {
id: apComp
AccessPoint {
}
AccessPoint {}
}
Timer {
@@ -1310,7 +1308,6 @@ Singleton {
}
stdout: StdioCollector {
id: stdoutCollector
}
onExited: code => {
+1 -2
View File
@@ -164,8 +164,7 @@ Singleton {
Component {
id: notifComp
Notif {
}
Notif {}
}
component Notif: QtObject {
+2 -4
View File
@@ -46,8 +46,7 @@ Item {
strokeWidth: Math.min(1, remainingArc.sweepAngle) * root.strokeWidth
Behavior on strokeColor {
CAnim {
}
CAnim {}
}
PathAngleArc {
@@ -84,8 +83,7 @@ Item {
}
}
Behavior on color {
CAnim {
}
CAnim {}
}
Anim on waveProgress {
id: waveProgAnim
+1 -2
View File
@@ -7,7 +7,6 @@ ClippingRectangle {
color: "transparent"
Behavior on color {
CAnim {
}
CAnim {}
}
}
+2 -4
View File
@@ -20,8 +20,7 @@ Text {
textFormat: Text.PlainText
Behavior on color {
CAnim {
}
CAnim {}
}
Behavior on text {
enabled: root.animate
@@ -33,8 +32,7 @@ Text {
type: Anim.FastEffects
}
PropertyAction {
}
PropertyAction {}
TAnim {
target: root
+1 -2
View File
@@ -65,8 +65,7 @@ Image {
value: root.source
}
PropertyAction {
}
PropertyAction {}
ScriptAction {
script: root.maybeStartInAnim()
+1 -2
View File
@@ -64,8 +64,7 @@ MaterialShape {
to: 360
}
Behavior on color {
CAnim {
}
CAnim {}
}
ElapsedTimer {
-1
View File
@@ -200,6 +200,5 @@ Singleton {
ElapsedTimer {
id: timer
}
}
-1
View File
@@ -16,7 +16,6 @@ ShellRoot {
GreeterState {
id: greeter
}
GreeterSurface {
+1 -2
View File
@@ -69,8 +69,7 @@ Singleton {
model: Quickshell.screens
Monitor {
}
Monitor {}
}
Process {
+1 -2
View File
@@ -33,8 +33,7 @@ Singleton {
implicitHeight: 0
implicitWidth: 0
mask: Region {
}
mask: Region {}
}
}
+1 -2
View File
@@ -50,8 +50,7 @@ Item {
}
Behavior on offsetScale {
Anim {
}
Anim {}
}
Behavior on x {
enabled: !root.horizontal || root.offsetScale < 1
+7 -14
View File
@@ -26,20 +26,15 @@ StackView {
initialItem: SubMenu {
handle: root.trayItem
}
popEnter: NoAnim {
}
popExit: NoAnim {
}
pushEnter: NoAnim {
}
pushExit: NoAnim {
}
popEnter: NoAnim {}
popExit: NoAnim {}
pushEnter: NoAnim {}
pushExit: NoAnim {}
Component {
id: subMenuComp
SubMenu {
}
SubMenu {}
}
component NoAnim: Transition {
@@ -59,12 +54,10 @@ StackView {
spacing: Tokens.spacing.extraSmall
Behavior on opacity {
Anim {
}
Anim {}
}
Behavior on scale {
Anim {
}
Anim {}
}
Component.onCompleted: shown = true
+2 -4
View File
@@ -307,12 +307,10 @@ CustomMouseArea {
}
}
Behavior on x {
Anim {
}
Anim {}
}
Behavior on y {
Anim {
}
Anim {}
}
onTodayItemChanged: {
+1 -2
View File
@@ -77,8 +77,7 @@ Item {
implicitSize: height
Behavior on clampedVal {
Anim {
}
Anim {}
}
MaterialIcon {
+2 -4
View File
@@ -33,8 +33,7 @@ Item {
Repeater {
id: shapes
DriftingShape {
}
DriftingShape {}
}
FrameAnimation {
@@ -80,8 +79,7 @@ Item {
shape: root.shapePool[Math.floor(Math.random() * root.shapePool.length)]
Behavior on color {
CAnim {
}
CAnim {}
}
Behavior on opacity {
Anim {
+1 -2
View File
@@ -18,8 +18,7 @@ Item {
layer.enabled: true
Behavior on fallbackColor {
CAnim {
}
CAnim {}
}
layer.effect: MultiEffect {
blurMax: 1
+5 -10
View File
@@ -54,14 +54,12 @@ Item {
Behavior on x {
enabled: !mouseArea.drag.active && !root.isSnapping && !root.iconsRoot.selectedIcons.includes(root.filePath)
Anim {
}
Anim {}
}
Behavior on y {
enabled: !mouseArea.drag.active && !root.isSnapping && !root.iconsRoot.selectedIcons.includes(root.filePath)
Anim {
}
Anim {}
}
Item {
@@ -85,8 +83,7 @@ Item {
y: (root.iconsRoot.selectedIcons.includes(root.filePath) && root.iconsRoot.dragLeader !== "" && root.iconsRoot.dragLeader !== root.filePath) ? root.iconsRoot.groupDragY : 0
}
transitions: Transition {
Anim {
}
Anim {}
}
onXChanged: {
@@ -208,8 +205,7 @@ Item {
radius: Tokens.rounding.small
Behavior on opacity {
Anim {
}
Anim {}
}
}
@@ -268,8 +264,7 @@ Item {
radius: Tokens.rounding.small
Behavior on opacity {
Anim {
}
Anim {}
}
}
}
+1 -2
View File
@@ -82,8 +82,7 @@ CustomRect {
Loader {
active: isSeparator
sourceComponent: DockSeparator {
}
sourceComponent: DockSeparator {}
anchors {
fill: parent
+1 -2
View File
@@ -41,8 +41,7 @@ CarouselView {
tileHeight: focalWidth / 16 * 9
delegate: Component {
WallpaperTile {
}
WallpaperTile {}
}
Component.onDestruction: Wallpapers.stopPreview()
+1 -2
View File
@@ -22,8 +22,7 @@ Searcher {
model: Config.launcher.actions.values.filter(a => (a.enabled ?? true) && (Config.launcher.enableDangerousActions || !(a.dangerous ?? false)))
Action {
}
Action {}
}
component Action: QtObject {
+1 -2
View File
@@ -131,8 +131,7 @@ Item {
}
}
Behavior on opacity {
Anim {
}
Anim {}
}
}
}
+1 -2
View File
@@ -15,8 +15,7 @@ ClipRect {
radius: Tokens.rounding.largeIncreased
Behavior on animPerc {
Anim {
}
Anim {}
}
Contents {
+1 -2
View File
@@ -51,8 +51,7 @@ CustomRect {
value: Memory.percentage
Behavior on clampedVal {
Anim {
}
Anim {}
}
ColumnLayout {
+6 -12
View File
@@ -81,8 +81,7 @@ Item {
active: Config.dashboard.performance.showStorage
sourceComponent: StorageCard {
}
sourceComponent: StorageCard {}
}
WrappedLoader {
@@ -90,8 +89,7 @@ Item {
active: Config.dashboard.performance.showMemory
sourceComponent: MemoryCard {
}
sourceComponent: MemoryCard {}
}
WrappedLoader {
@@ -99,8 +97,7 @@ Item {
active: Config.dashboard.performance.showVram
sourceComponent: VramCard {
}
sourceComponent: VramCard {}
}
WrappedLoader {
@@ -108,8 +105,7 @@ Item {
active: Config.dashboard.performance.showNetwork && !vramCard.active
sourceComponent: NetworkCard {
}
sourceComponent: NetworkCard {}
}
}
@@ -118,8 +114,7 @@ Item {
active: Config.dashboard.performance.showNetwork && vramCard.active
sourceComponent: NetworkCard {
}
sourceComponent: NetworkCard {}
}
}
@@ -127,8 +122,7 @@ Item {
Layout.fillWidth: false
active: Battery.isLaptop && Config.dashboard.performance.showBattery
sourceComponent: BatteryTank {
}
sourceComponent: BatteryTank {}
}
}
+1 -2
View File
@@ -22,8 +22,7 @@ CustomRect {
topRightRadius: first ? Tokens.rounding.largeIncreased : Tokens.rounding.extraSmall
Behavior on opacity {
Anim {
}
Anim {}
}
CustomRect {
+2 -4
View File
@@ -26,8 +26,7 @@ CustomRect {
state: expanded ? "expanded" : ""
Behavior on implicitHeight {
Anim {
}
Anim {}
}
states: State {
name: "expanded"
@@ -116,8 +115,7 @@ CustomRect {
anchors.topMargin: Tokens.spacing.extraSmall
shouldBeActive: root.expanded
sourceComponent: ExpandedBody {
}
sourceComponent: ExpandedBody {}
}
component ExpandedBody: ColumnLayout {
+3 -6
View File
@@ -58,18 +58,15 @@ LazyListView {
}
}
Behavior on scale {
Anim {
}
Anim {}
}
Behavior on x {
Anim {
}
Anim {}
}
Behavior on y {
enabled: notif.LazyListView.ready
Anim {
}
Anim {}
}
onPositionChanged: event => {
+4 -8
View File
@@ -52,8 +52,7 @@ CustomRect {
radius: Tokens.rounding.large
Behavior on implicitHeight {
Anim {
}
Anim {}
}
Component.onDestruction: {
@@ -155,8 +154,7 @@ CustomRect {
spacing: root.expanded ? Math.round(Tokens.spacing.extraSmall) : 0
Behavior on spacing {
Anim {
}
Anim {}
}
RowLayout {
@@ -214,12 +212,10 @@ CustomRect {
text: "expand_more"
Behavior on Layout.topMargin {
Anim {
}
Anim {}
}
Behavior on rotation {
Anim {
}
Anim {}
}
}
}
+3 -6
View File
@@ -59,18 +59,15 @@ LazyListView {
}
}
Behavior on scale {
Anim {
}
Anim {}
}
Behavior on x {
Anim {
}
Anim {}
}
Behavior on y {
enabled: notif.LazyListView.ready
Anim {
}
Anim {}
}
Component.onCompleted: modelData?.lock(this)
+1 -2
View File
@@ -17,8 +17,7 @@ ShapePath {
strokeWidth: -1
Behavior on fillColor {
CAnim {
}
CAnim {}
}
PathLine {
+6 -2
View File
@@ -60,11 +60,15 @@ class BlobInvertedRect : public BlobShape {
void setOuterRadius(qreal v);
// Per-corner outer radii. -1 falls back to outerRadius (mirrors BlobRect).
[[nodiscard]] qreal outerTopLeftRadius() const { return m_outerTopLeftRadius; }
[[nodiscard]] qreal outerTopLeftRadius() const {
return m_outerTopLeftRadius;
}
void setOuterTopLeftRadius(qreal v);
[[nodiscard]] qreal outerTopRightRadius() const { return m_outerTopRightRadius; }
[[nodiscard]] qreal outerTopRightRadius() const {
return m_outerTopRightRadius;
}
void setOuterTopRightRadius(qreal v);
+1 -2
View File
@@ -240,8 +240,7 @@ void BlobShape::updatePolish() {
m_cachedInvertedRadius = 0;
memset(m_cachedInvertedOuter, 0, sizeof(m_cachedInvertedOuter));
memset(m_cachedInvertedInner, 0, sizeof(m_cachedInvertedInner));
memset(
m_cachedInvertedOuterRadii, 0, sizeof(m_cachedInvertedOuterRadii));
memset(m_cachedInvertedOuterRadii, 0, sizeof(m_cachedInvertedOuterRadii));
auto* inv = m_group->invertedRect();
if (inv) {
+4 -3
View File
@@ -653,7 +653,8 @@ void WallpaperDb::queueMetadata(
existingCache.isEmpty() ? "" : ", existing blob");
m_queue.append(
MetadataJob{entry, entry->path(), isVideo, existingCache, existingPoster});
MetadataJob{
entry, entry->path(), isVideo, existingCache, existingPoster});
if (!m_queueTimer.isActive()) {
m_queueTimer.start();
@@ -771,8 +772,8 @@ void WallpaperDb::runMetadataJob(const MetadataJob& job) {
QByteArray poster = job.existingPoster;
if (poster.isEmpty()) {
poster =
job.isVideo ? videoPosterBytes(job.path, cacheSize) : cache;
poster = job.isVideo ? videoPosterBytes(job.path, cacheSize)
: cache;
}
result.cache = cache;
+2 -2
View File
@@ -110,8 +110,8 @@ class WallpaperDb : public QObject {
[[nodiscard]] static QString thumbnailUrl(const QString& path);
Q_INVOKABLE QVariantMap crop(const QString& path, const QString& screen)
const;
Q_INVOKABLE QVariantMap
crop(const QString& path, const QString& screen) const;
Q_INVOKABLE void setCrop(
const QString& path, const QString& screen, const QVariantMap& crop);
+3 -5
View File
@@ -72,11 +72,9 @@ void WallpaperObject::syncCrop(const QVariantMap& crop) {
const qreal y = crop.value("y").toDouble();
const qreal width = crop.contains("width") ? crop.value("width").toDouble()
: 1.0;
const qreal height = crop.contains("height")
? crop.value("height").toDouble()
: 1.0;
const qreal z =
crop.contains("zoom") ? crop.value("zoom").toDouble() : 1.0;
const qreal height =
crop.contains("height") ? crop.value("height").toDouble() : 1.0;
const qreal z = crop.contains("zoom") ? crop.value("zoom").toDouble() : 1.0;
const bool prev = m_pushEnabled;
m_pushEnabled = false;
+1 -2
View File
@@ -34,7 +34,6 @@ Singleton {
model: Quickshell.screens
ScreenState {
}
ScreenState {}
}
}
+25 -53
View File
@@ -1,56 +1,28 @@
FROM archlinux:latest
RUN pacman -Syyu --noconfirm
RUN pacman -Syu --noconfirm \
&& pacman -S --needed --noconfirm \
base-devel cmake ninja clang lld nodejs tree-sitter \
jkqtplotter cmark-gfm git wayland-protocols ffmpeg mpv \
qt6-base qt6-declarative qt6-shadertools qt6-5compat \
qt6-canvaspainter qt6-wayland qt5-wayland mpv \
libqalculate pipewire aubio cava lm_sensors glib2 \
&& pacman -Scc --noconfirm
# Build toolchain
RUN pacman -S --noconfirm \
base-devel \
cmake \
ninja \
clang \
lld \
nodejs \
tree-sitter \
jkqtplotter \
cmark-gfm \
git
# Qt6
RUN pacman -S --noconfirm \
qt6-base \
qt6-declarative \
qt6-shadertools \
qt6-5compat \
qt6-canvaspainter
# Project-specific dependencies
RUN pacman -S --noconfirm \
libqalculate \
pipewire \
aubio \
cava \
lm_sensors \
glib2
# AUR: libcava (provides development headers for cava)
RUN pacman -Syu --noconfirm && \
pacman -S --needed --noconfirm \
sudo \
meson \
autoconf-archive \
python-tqdm && \
useradd -m builder && \
echo "builder ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers
RUN for i in 1 2 3 4 5; do \
rm -rf /tmp/libcava && \
git clone --depth 1 https://aur.archlinux.org/libcava.git /tmp/libcava && \
break || sleep 5; \
done && \
test -d /tmp/libcava/.git && \
chown -R builder /tmp/libcava
RUN su builder -c "cd /tmp/libcava && makepkg -si --noconfirm" && \
rm -rf /tmp/libcava && \
userdel -r builder && \
sed -i '/^builder/d' /etc/sudoers
RUN pacman -Syu --noconfirm \
&& pacman -S --needed --noconfirm \
sudo meson autoconf-archive python-tqdm \
&& useradd -m builder \
&& printf '%s\n' 'builder ALL=(ALL) NOPASSWD: ALL' > /etc/sudoers.d/builder \
&& chmod 0440 /etc/sudoers.d/builder \
&& for i in 1 2 3 4 5; do \
rm -rf /tmp/libcava; \
if git clone --depth 1 https://aur.archlinux.org/libcava.git /tmp/libcava; then break; fi; \
sleep 5; \
done \
&& test -d /tmp/libcava/.git \
&& chown -R builder:builder /tmp/libcava \
&& su builder -c "cd /tmp/libcava && makepkg -si --noconfirm" \
&& rm -rf /tmp/libcava /etc/sudoers.d/builder \
&& userdel -r builder \
&& pacman -Scc --noconfirm
+110
View File
@@ -0,0 +1,110 @@
BUILD ?= cmake -B build -G Ninja
NONUITKA ?= cmake -S . -B build -G Ninja -DCMAKE_BUILD_TYPE=Release -DENABLE_MODULES="plugin;shell;m3shapes"
NINJA ?= ninja -C build
COMPILE ?= $(BUILD) && $(NINJA)
INSTALL ?= $(BUILD) && $(NINJA) && sudo ninja -C build install
CPPFMT ?= find . \( -name '*.cpp' -o -name '*.h' -o -name '*.hpp' \) -not -path './build/*' -exec clang-format -i --style=file {} +
CPPLINT ?= run-clang-tidy -p build -j "$$(nproc)" -source-filter="^$$(pwd)/Plugins/" -header-filter=".*Plugins/.*" -removed-arg=-mno-direct-extern-access
NUITKA ?= nuitka --module --include-package=zshell cli/src/zshell/ --output-dir=cli/
.DEFAULT_GOAL := help
# string is misaligned to align when run in terminal
help:
@echo "build cmake builds into build directory"
@echo "install cmake builds, compiles and installs into filesystem"
@echo "compile cmake builds and compiles C++ code"
@echo "cpp-fmt format C++ code with clang-format"
@echo "cpp-lint lint check C++ code with clang-tidy"
@echo "cpp-compile similar to make compile, but excludes Nuitka from compiling python"
@echo "py-fmt format Python code with ruff"
@echo "py-lint lint check Python code with ruff"
@echo "py-check lsp and typecheck all Python code using Basedpyright"
@echo "py-test run all Python tests using Pytest"
@echo "py-compile compiles Python code using Nuitka"
@echo "rs-compile compiles Rust code"
@echo "rs-format formats Rust code with Rustfmt"
@echo "rs-lint lint check Rust code with Clippy"
@echo "rs-test runs all Rust tests"
@echo "qml-fmt format QML code with qmlformat"
@echo "check-cpp runs all C++ checks"
@echo "check-py runs all Python checks"
@echo "check-rs runs all Rust checks"
@echo "fmt-make formats the makefile using mbake (in case you like spaces instead of tabs)"
build:
$(BUILD)
install:
$(INSTALL)
compile:
$(COMPILE)
# C++
cpp-fmt:
$(CPPFMT)
cpp-lint:
$(CPPLINT)
cpp-compile:
$(NONUITKA)
# Python
py-fmt:
ruff format
py-lint:
ruff check ./cli
py-check:
basedpyright
py-test:
python -m pytest ./cli/tests/ -v
# Want to use gcc, clang or zig C compiler instead? Output directory?
py-compile:
$(NUITKA)
# Rust
rs-compile:
cd ./zshell-img-tools/ && cargo run
rs-fmt:
cd ./zshell-img-tools/ && cargo fmt && echo "formatted!"
rs-lint:
cd ./zshell-img-tools/ && cargo clippy
rs-test:
cd ./zshell-img-tools/ && cargo test
# Qml
qml-fmt:
find -name '*.qml' -exec /usr/lib/qt6/bin/qmlformat -i {} +
# Full checks
check-cpp:
$(MAKE) cpp-fmt
$(MAKE) cpp-lint
$(MAKE) compile
check-rs:
$(MAKE) rs-fmt
$(MAKE) rs-lint
$(MAKE) rs-test
$(MAKE) rs-compile
check-py:
$(MAKE) py-fmt
$(MAKE) py-lint
$(MAKE) py-test
$(MAKE) py-check
$(MAKE) py-compile
fmt-make:
mbake format makefile