Skip to content

Commit 476dbb8

Browse files
authored
Merge pull request #190 from kdroidFilter/feat/system-info
feat(system-info): add system information module with native Linux JNI
2 parents 466d5b8 + a2b01bd commit 476dbb8

89 files changed

Lines changed: 12842 additions & 13 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.github/workflows/build-natives.yaml

Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,9 @@ jobs:
1616
distribution: 'temurin'
1717
java-version: '21'
1818

19+
- name: Setup MSVC
20+
uses: ilammy/msvc-dev-cmd@v1
21+
1922
- name: Build darkmode-detector Windows native DLLs
2023
shell: cmd
2124
run: call darkmode-detector\src\main\native\windows\build.bat
@@ -226,6 +229,27 @@ jobs:
226229
path: decorated-window-core/src/main/resources/nucleus/native/win32-*/
227230
retention-days: 1
228231

232+
- name: Build system-info Windows DLLs
233+
shell: cmd
234+
run: call system-info\src\main\native\windows\build.bat
235+
236+
- name: Verify system-info Windows natives
237+
shell: bash
238+
run: |
239+
for f in \
240+
system-info/src/main/resources/nucleus/native/win32-x64/nucleus_system_info.dll \
241+
system-info/src/main/resources/nucleus/native/win32-aarch64/nucleus_system_info.dll; do
242+
if [ ! -f "$f" ]; then echo "MISSING: $f" >&2; exit 1; fi
243+
echo "OK: $f ($(wc -c < "$f") bytes)"
244+
done
245+
246+
- name: Upload system-info Windows DLLs
247+
uses: actions/upload-artifact@v4
248+
with:
249+
name: system-info-windows
250+
path: system-info/src/main/resources/nucleus/native/win32-*/
251+
retention-days: 1
252+
229253
macos:
230254
runs-on: macos-latest
231255
steps:
@@ -466,6 +490,25 @@ jobs:
466490
path: decorated-window-core/src/main/resources/nucleus/native/darwin-*/
467491
retention-days: 1
468492

493+
- name: Build system-info macOS dylibs
494+
run: bash system-info/src/main/native/macos/build.sh
495+
496+
- name: Verify system-info macOS natives
497+
run: |
498+
for f in \
499+
system-info/src/main/resources/nucleus/native/darwin-aarch64/libnucleus_system_info.dylib \
500+
system-info/src/main/resources/nucleus/native/darwin-x64/libnucleus_system_info.dylib; do
501+
if [ ! -f "$f" ]; then echo "MISSING: $f" >&2; exit 1; fi
502+
echo "OK: $f ($(wc -c < "$f") bytes)"
503+
done
504+
505+
- name: Upload system-info macOS dylibs
506+
uses: actions/upload-artifact@v4
507+
with:
508+
name: system-info-macos
509+
path: system-info/src/main/resources/nucleus/native/darwin-*/
510+
retention-days: 1
511+
469512
linux:
470513
runs-on: ${{ matrix.os }}
471514
strategy:
@@ -617,6 +660,22 @@ jobs:
617660
path: decorated-window-core/src/main/resources/nucleus/native/linux-*/
618661
retention-days: 1
619662

663+
- name: Build system-info Linux native shared library
664+
run: bash system-info/src/main/native/linux/build.sh
665+
666+
- name: Verify system-info Linux native
667+
run: |
668+
f="system-info/src/main/resources/nucleus/native/linux-${{ matrix.arch }}/libnucleus_system_info.so"
669+
if [ ! -f "$f" ]; then echo "MISSING: $f" >&2; exit 1; fi
670+
echo "OK: $f ($(wc -c < "$f") bytes)"
671+
672+
- name: Upload system-info Linux shared library
673+
uses: actions/upload-artifact@v4
674+
with:
675+
name: system-info-linux-${{ matrix.arch }}
676+
path: system-info/src/main/resources/nucleus/native/linux-*/
677+
retention-days: 1
678+
620679
- name: Build global-hotkey Linux native shared library
621680
run: bash global-hotkey/src/main/native/linux/build.sh
622681

.github/workflows/pre-merge.yaml

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -141,6 +141,13 @@ jobs:
141141
pattern: 'menu-macos*'
142142
merge-multiple: true
143143

144+
- name: Download system-info artifacts
145+
uses: actions/download-artifact@v4
146+
with:
147+
path: system-info/src/main/resources/nucleus/native/
148+
pattern: 'system-info-*'
149+
merge-multiple: true
150+
144151
- name: Verify all natives present
145152
run: |
146153
EXPECTED=(
@@ -206,6 +213,12 @@ jobs:
206213
"decorated-window-core/src/main/resources/nucleus/native/darwin-x64/libnucleus_layout_direction.dylib"
207214
"decorated-window-core/src/main/resources/nucleus/native/linux-x64/libnucleus_layout_direction.so"
208215
"decorated-window-core/src/main/resources/nucleus/native/linux-aarch64/libnucleus_layout_direction.so"
216+
"system-info/src/main/resources/nucleus/native/win32-x64/nucleus_system_info.dll"
217+
"system-info/src/main/resources/nucleus/native/win32-aarch64/nucleus_system_info.dll"
218+
"system-info/src/main/resources/nucleus/native/darwin-aarch64/libnucleus_system_info.dylib"
219+
"system-info/src/main/resources/nucleus/native/darwin-x64/libnucleus_system_info.dylib"
220+
"system-info/src/main/resources/nucleus/native/linux-x64/libnucleus_system_info.so"
221+
"system-info/src/main/resources/nucleus/native/linux-aarch64/libnucleus_system_info.so"
209222
)
210223
MISSING=0
211224
for f in "${EXPECTED[@]}"; do

.github/workflows/publish-maven.yaml

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -136,6 +136,13 @@ jobs:
136136
pattern: 'menu-macos*'
137137
merge-multiple: true
138138

139+
- name: Download system-info artifacts
140+
uses: actions/download-artifact@v4
141+
with:
142+
path: system-info/src/main/resources/nucleus/native/
143+
pattern: 'system-info-*'
144+
merge-multiple: true
145+
139146
- name: Verify all natives present
140147
run: |
141148
EXPECTED=(
@@ -201,6 +208,12 @@ jobs:
201208
"decorated-window-core/src/main/resources/nucleus/native/darwin-x64/libnucleus_layout_direction.dylib"
202209
"decorated-window-core/src/main/resources/nucleus/native/linux-x64/libnucleus_layout_direction.so"
203210
"decorated-window-core/src/main/resources/nucleus/native/linux-aarch64/libnucleus_layout_direction.so"
211+
"system-info/src/main/resources/nucleus/native/win32-x64/nucleus_system_info.dll"
212+
"system-info/src/main/resources/nucleus/native/win32-aarch64/nucleus_system_info.dll"
213+
"system-info/src/main/resources/nucleus/native/darwin-aarch64/libnucleus_system_info.dylib"
214+
"system-info/src/main/resources/nucleus/native/darwin-x64/libnucleus_system_info.dylib"
215+
"system-info/src/main/resources/nucleus/native/linux-x64/libnucleus_system_info.so"
216+
"system-info/src/main/resources/nucleus/native/linux-aarch64/libnucleus_system_info.so"
204217
)
205218
MISSING=0
206219
for f in "${EXPECTED[@]}"; do

.github/workflows/publish-plugin.yaml

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -142,6 +142,13 @@ jobs:
142142
pattern: 'menu-macos*'
143143
merge-multiple: true
144144

145+
- name: Download system-info artifacts
146+
uses: actions/download-artifact@v4
147+
with:
148+
path: system-info/src/main/resources/nucleus/native/
149+
pattern: 'system-info-*'
150+
merge-multiple: true
151+
145152
- name: Cache Gradle Caches
146153
uses: gradle/actions/setup-gradle@v5
147154

.github/workflows/release-graalvm.yaml

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -167,6 +167,13 @@ jobs:
167167
pattern: 'menu-macos*'
168168
merge-multiple: true
169169

170+
- name: Download system-info artifacts
171+
uses: actions/download-artifact@v4
172+
with:
173+
path: system-info/src/main/resources/nucleus/native/
174+
pattern: 'system-info-*'
175+
merge-multiple: true
176+
170177
- name: Setup Nucleus (GraalVM)
171178
uses: ./.github/actions/setup-nucleus
172179
with:

.github/workflows/test-graalvm.yaml

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -152,6 +152,13 @@ jobs:
152152
pattern: 'menu-macos*'
153153
merge-multiple: true
154154

155+
- name: Download system-info artifacts
156+
uses: actions/download-artifact@v4
157+
with:
158+
path: system-info/src/main/resources/nucleus/native/
159+
pattern: 'system-info-*'
160+
merge-multiple: true
161+
155162
- name: Setup Nucleus (GraalVM)
156163
uses: ./.github/actions/setup-nucleus
157164
with:

.github/workflows/test-packaging.yaml

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -179,6 +179,13 @@ jobs:
179179
pattern: 'menu-macos*'
180180
merge-multiple: true
181181

182+
- name: Download system-info artifacts
183+
uses: actions/download-artifact@v4
184+
with:
185+
path: system-info/src/main/resources/nucleus/native/
186+
pattern: 'system-info-*'
187+
merge-multiple: true
188+
182189
- name: Build packages
183190
shell: bash
184191
run: ./gradlew :example:packageReleaseDistributionForCurrentOS --stacktrace --no-daemon

build.gradle.kts

Lines changed: 18 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -12,13 +12,19 @@ plugins {
1212
alias(libs.plugins.versionCheck)
1313
}
1414

15+
val demoProjects = setOf("example", "jewel-sample", "system-info-demo", "sample-cmp")
16+
1517
subprojects {
18+
if (name !in demoProjects) {
19+
apply {
20+
plugin(
21+
rootProject.libs.plugins.detekt
22+
.get()
23+
.pluginId,
24+
)
25+
}
26+
}
1627
apply {
17-
plugin(
18-
rootProject.libs.plugins.detekt
19-
.get()
20-
.pluginId,
21-
)
2228
plugin(
2329
rootProject.libs.plugins.ktlint
2430
.get()
@@ -39,12 +45,14 @@ subprojects {
3945
}
4046
}
4147

42-
detekt {
43-
config.setFrom(rootProject.files("config/detekt/detekt.yml"))
44-
}
48+
if (name !in demoProjects) {
49+
detekt {
50+
config.setFrom(rootProject.files("config/detekt/detekt.yml"))
51+
}
4552

46-
tasks.withType<Detekt>().configureEach {
47-
jvmTarget.set("21")
53+
tasks.withType<Detekt>().configureEach {
54+
jvmTarget.set("21")
55+
}
4856
}
4957
}
5058

decorated-window-jewel/src/main/kotlin/io/github/kdroidfilter/nucleus/window/jewel/JewelColorMapping.kt

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -28,11 +28,12 @@ private val linuxWindowBorderColor = Color(0x12FFFFFF)
2828
@Composable
2929
internal fun rememberJewelWindowStyle(): DecoratedWindowStyle {
3030
val isDark = JewelTheme.isDark
31-
// On Linux, use a subtle semi-transparent border that matches native GNOME/KDE
32-
// window chrome instead of the opaque Jewel borders.normal (designed for UI separators).
31+
// On Linux, blend the Jewel border color with a semi-transparent overlay so the
32+
// window frame adapts to both light and dark themes without a jarring white outline.
3333
val borderColor =
3434
if (isLinux) {
35-
linuxWindowBorderColor
35+
JewelTheme.globalColors.borders.normal
36+
.copy(alpha = 0.6f)
3637
} else {
3738
JewelTheme.globalColors.borders.normal
3839
}

0 commit comments

Comments
 (0)