Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
78 commits
Select commit Hold shift + click to select a range
ff1dcae
Merge tag 'v0.10' into develop
jahnf Oct 17, 2023
eb9ff49
ci: bump for 1.0 alpha
jahnf Oct 17, 2023
89bdac1
Basic support for Kensington PowerPointer
MarcelWaldvogel Nov 11, 2023
e5313a8
Bump actions/download-artifact from 3 to 4.1.7 in /.github/workflows
dependabot[bot] Sep 3, 2024
67c60ce
chore(ci): update upload-artifact action
jahnf Nov 24, 2024
e93343a
ci: update triggers for ci and codeql builds
jahnf Nov 24, 2024
099aa1f
feat: add cmdline option to hide system tray icon
jahnf Nov 24, 2024
812a15d
ci: update github checkout action to v4
jahnf Nov 24, 2024
3ae9cae
feat: add support for Norwii N95s BLE Presenter (3243:0382)
frsela Nov 10, 2025
a9b7d2b
feat: add Bluetooth support for Norwii N95s BLE Presenter (3243:03a2)
frsela Nov 10, 2025
ddfe282
NIT
frsela Nov 10, 2025
368c14c
feat: recognize Spotlight 2 Bluetooth device
gbin Jul 27, 2026
02aba54
feat: integrate Spotlight 2 input behavior
gbin Jul 27, 2026
d2cd79b
docs: list Spotlight 2 Bluetooth support
gbin Jul 27, 2026
a654725
Full port to modern KDE / plasma 6
gbin Jul 27, 2026
2d5ddf3
Merge pull request #1 from gbin/gbin/qt6-kde-only
gbin Jul 27, 2026
4c98071
Adds justfile and native arch install
gbin Jul 27, 2026
46b322f
Merge pull request #2 from gbin/gbin/justfile
gbin Jul 27, 2026
aed15d7
Clean startup now
gbin Jul 27, 2026
b0332c1
Merge pull request #3 from gbin/gbin/launch-semantics
gbin Jul 27, 2026
1799f59
don't mix up upstream with this fork
gbin Jul 27, 2026
7b607e9
Move that to a proper plasma applet
gbin Jul 27, 2026
c76efca
Merge pull request #4 from gbin/gbin/minimize-back
gbin Jul 27, 2026
de1948a
Adds a quit action
gbin Jul 27, 2026
50be8fd
adds the quit action
gbin Jul 27, 2026
5054b9c
Fixed border disapearing when changing shape
gbin Jul 27, 2026
9a80082
disable cursor shaking when in spotlight
gbin Jul 27, 2026
36f9b07
Document the fork properly
gbin Jul 27, 2026
bd6e2ce
New screenshots
gbin Jul 27, 2026
d20f8e1
screenshots cleanups
gbin Jul 27, 2026
7509918
remove furutre improvements that are not wours
gbin Jul 27, 2026
c2f0990
Added battery level to the devices.
gbin Jul 27, 2026
21e16cd
Adds the timers to spotlight 2
gbin Jul 27, 2026
c302960
Adds a global timer and haptic feedback
gbin Jul 27, 2026
23446ec
more reliable reinstall
gbin Jul 27, 2026
5f05974
move timer and haptic feedbakc to the correct spots
gbin Jul 27, 2026
788f909
timer on next present button
gbin Jul 27, 2026
007296f
fix the battery status dissapearing
gbin Jul 27, 2026
af01809
Dongle support
gbin Jul 27, 2026
dc3ee8c
usb c dongle support for spotlight 2 / couple bugs
gbin Jul 27, 2026
419f65f
KDE migration part 2
gbin Jul 27, 2026
75c7154
More KDEifacation
gbin Jul 27, 2026
67d38fc
KDEifaction of the preferences
gbin Jul 27, 2026
32d2763
Better screenshots
gbin Jul 28, 2026
5486666
screenshots reorg
gbin Jul 28, 2026
eeeb956
Added global shortcuts
gbin Jul 28, 2026
f961367
use the KDE color picker
gbin Jul 28, 2026
6afbf4c
moved to KDE localization
gbin Jul 28, 2026
e6ad76d
Simplify debug logs
gbin Jul 28, 2026
ef21d3b
Color code the minutes / seconds on the badge
gbin Jul 28, 2026
4f981d7
updates the readme for hte color coded badges
gbin Jul 28, 2026
32e65f4
better fractional zoom support
gbin Jul 28, 2026
bb7415d
Now uses stream protocol with a small 0 copy crop.
gbin Jul 28, 2026
0ff7063
remove the actication artificial lag
gbin Jul 28, 2026
76c562b
more optimizations at click
gbin Jul 28, 2026
0e5c72c
remove even moar latency
gbin Jul 28, 2026
2d56504
fixing CI
gbin Jul 28, 2026
f9445f8
mentioned the new video pipeline
gbin Jul 28, 2026
2081099
improved AA
gbin Jul 30, 2026
efca970
New specialized zoom-modes + doc update
gbin Jul 30, 2026
e033062
Cleanup the readme
gbin Jul 30, 2026
e0a1b8f
docs: make Plasma 6 edition official
gbin Aug 1, 2026
3e0e054
feat: make Plasma 6 / Wayland the official mainline (#251)
gbin Aug 1, 2026
cfc0770
Poor working
gbin Aug 1, 2026
9a835f8
Merge pull request #252 from gbin/gbin-patch-1
gbin Aug 1, 2026
4ce04b0
build: prepare portable 1.0 packages
gbin Aug 1, 2026
6d5a340
ci: build and release entirely on GitHub
gbin Aug 1, 2026
666a3aa
fix: preserve full version in source archives
gbin Aug 1, 2026
fb84a19
ci: bootstrap Git before container checkout
gbin Aug 1, 2026
bd75879
ci: select GNU awk on Tumbleweed
gbin Aug 1, 2026
7b92815
ci: trust the checked-out workspace in containers
gbin Aug 1, 2026
c86114a
ci: build and release entirely on GitHub (#253)
gbin Aug 1, 2026
c81dce8
ci: refresh GitHub Actions runtime pins
gbin Aug 1, 2026
9a586d9
ci: refresh GitHub Actions runtime pins (#257)
gbin Aug 1, 2026
93b3a58
Merge branch 'develop' into feat/supportNorwiiN95s
gbin Aug 1, 2026
749b5f5
docs: list Norwii N95s BLE support
gbin Aug 1, 2026
8f187bf
Merge pull request #237 from frsela/feat/supportNorwiiN95s
gbin Aug 1, 2026
ddb942d
provides a reference AUR PKGBUILD version
gbin Aug 2, 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
9 changes: 9 additions & 0 deletions .github/dependabot.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
version: 2
updates:
- package-ecosystem: github-actions
directory: /
schedule:
interval: weekly
labels:
- dependencies
- github-actions
349 changes: 78 additions & 271 deletions .github/workflows/ci-build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -2,282 +2,89 @@ name: ci-build

on:
push:
branches:
- "**"
branches: [develop, master]
pull_request:
branches:
- master
- develop
- 'feature/**'
branches: [develop, master]
workflow_dispatch:

jobs:
build:
strategy:
matrix:
docker_tag:
- archlinux
- fedora-31
- fedora-32
- fedora-33
- fedora-34
- fedora-37
- fedora-38
- debian-stretch
- debian-buster
- debian-bullseye
- debian-bookworm
- ubuntu-18.04
- ubuntu-20.04
- ubuntu-20.10
- ubuntu-21.04
- ubuntu-22.04
- ubuntu-23.04
- opensuse-15.0
- opensuse-15.1
- opensuse-15.2
- opensuse-15.3
- opensuse-15.4
- opensuse-15.5
- centos-8
os:
- ubuntu-latest

runs-on: ${{ matrix.os }}
env:
DOCKER_IMG: ghcr.io/jahnf/projecteur/projecteur
DOCKER_TAG: ${{ matrix.docker_tag }}
MAKEFLAGS: -j2
CLOUDSMITH_USER: jahnf
CLOUDSMITH_SUMMARY: ci-build from branch '${{ github.ref }}'
CLOUDSMITH_DESC: For more information visit https://github.com/jahnf/Projecteur

steps:
# ===================================================================================
# ---------- Add ~/.local/bin to PATH ----------
- run: |
export LOCAL_BIN=~/.local/bin
echo "${LOCAL_BIN}" >> $GITHUB_PATH

# ===================================================================================
# ---------- Checkout and build inside docker container ----------
- uses: actions/checkout@v3
with:
# unfortunately, currently we need all the history for a valid auto generated version
fetch-depth: 0

- run: |
export BRANCH=${GITHUB_REF/refs\/heads\//}
echo Detected branch: ${BRANCH}
echo "BRANCH=${BRANCH}" >> $GITHUB_ENV

- name: Pull ${{ matrix.docker_tag }} docker image
run: |
docker pull ${DOCKER_IMG}:${{ matrix.docker_tag }}
- name: docker create build container
run: |
docker run --name build --env MAKEFLAGS=${MAKEFLAGS} \
--env TRAVIS_BRANCH=${BRANCH} \
-d -v `pwd`:/source:ro -t ${DOCKER_IMG}:${{ matrix.docker_tag }}
- name: cmake configuration
run: docker exec build /bin/bash -c "mkdir -p /build/dist-pkg && cd /build && cmake /source"
- name: cmake build
run: docker exec build /bin/bash -c "cd /build && cmake --build ."
- name: create linux package
run: docker exec build /bin/bash -c "cd /build && cmake --build . --target dist-package"
- name: Run projecteur executable, print version
run: |
docker exec build /bin/bash -c "cd /build && ./projecteur --version"
docker exec build /bin/bash -c "cd /build && ./projecteur -f"

# ===================================================================================
# ---------- Gather artifacts and version information from container build ----------
- name: Get created artifacts from docker container
run: |
docker cp build:/build/dist-pkg .
docker cp build:/build/version-string .

- name: Set version environment variable
run: |
projecteur_version=`cat version-string`
echo "projecteur_version=${projecteur_version}" >> $GITHUB_ENV

- name: Move source package
if: startsWith(matrix.docker_tag, 'archlinux')
run: mkdir -p source-pkg && mv dist-pkg/*source.tar.gz ./source-pkg || true

- name: Get source package filename for artifact uploads
run: |
src_pkg_artifact=`ls -1 source-pkg/* | head -n 1`
echo "src_pkg_artifact=${src_pkg_artifact}" >> $GITHUB_ENV

- name: Get binary package filename for artifact uploads
run: |
dist_pkg_artifact=`ls -1 dist-pkg/* | head -n 1`
echo "dist_pkg_artifact=${dist_pkg_artifact}" >> $GITHUB_ENV

- if: startsWith(matrix.docker_tag, 'archlinux')
run: echo "${{ env.BRANCH }}" >> version-branch

# ===================================================================================
# ---------- Upload artifacts to github ----------
- name: Upload source-pkg artifact to github
if: startsWith(matrix.docker_tag, 'archlinux')
uses: actions/upload-artifact@v3
with:
name: source-package
path: ${{ env.src_pkg_artifact }}
concurrency:
group: ci-${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }}
cancel-in-progress: true

- name: Upload version-info to github
if: startsWith(matrix.docker_tag, 'archlinux')
uses: actions/upload-artifact@v3
with:
name: version-info
path: |
./version-string
./version-branch
permissions:
contents: read

- name: Upload binary package artifact to github
uses: actions/upload-artifact@v3
with:
name: ${{ matrix.docker_tag }}-package
path: ${{ env.dist_pkg_artifact }}
env:
LC_ALL: C.UTF-8
# GitVersion predates GitHub Actions and uses this value for detached checkouts.
TRAVIS_BRANCH: ${{ github.base_ref || github.ref_name }}

# ===================================================================================
# ---------- Set environment variables depending on branch ----------
- name: Set environment variable defaults
run: |
echo "upload_bin_pkg=${{ false }}" >> $GITHUB_ENV
echo "upload_src_pkg=${{ false }}" >> $GITHUB_ENV
echo "cloudsmith_upload_repo=projecteur-develop" >> $GITHUB_ENV
echo "REPO_UPLOAD=${{ false }}" >> $GITHUB_ENV

- name: Check for binary-pkg upload conditions
if: ${{ (env.BRANCH == 'develop' || env.BRANCH == 'master') && github.repository == 'jahnf/Projecteur' }}
run: |
echo "upload_bin_pkg=${{ true }}" >> $GITHUB_ENV
pip install --upgrade wheel
pip install --upgrade cloudsmith-cli

- name: Check for source-pkg upload conditions
if: ${{ env.upload_bin_pkg == 'true' && startsWith(matrix.docker_tag, 'archlinux') && github.repository == 'jahnf/Projecteur' }}
run: |
echo "upload_src_pkg=${{ true }}" >> $GITHUB_ENV

- if: env.BRANCH == 'master'
run: |
echo "cloudsmith_upload_repo=projecteur-stable" >> $GITHUB_ENV

# ===================================================================================
# ---------- Upload artifacts to cloudsmith ----------
- name: Upload raw binary-pkg to cloudsmith
if: env.upload_bin_pkg == 'true'
env:
CLOUDSMITH_API_KEY: ${{ secrets.CLOUDSMITH_API_KEY }}
CLOUDSMITH_REPO: ${{ env.cloudsmith_upload_repo }}
run: |
cloudsmith push raw -W -k ${CLOUDSMITH_API_KEY} --name ${{ matrix.docker_tag }} --republish \
--version ${{ env.projecteur_version }} ${CLOUDSMITH_USER}/${CLOUDSMITH_REPO} \
--summary "${CLOUDSMITH_SUMMARY}" --description "${CLOUDSMITH_DESC}" ${{ env.dist_pkg_artifact }}

- name: Upload raw source-pkg to cloudsmith
if: ${{ env.upload_src_pkg == 'true' && github.repository == 'jahnf/Projecteur' }}
env:
CLOUDSMITH_API_KEY: ${{ secrets.CLOUDSMITH_API_KEY }}
CLOUDSMITH_REPO: ${{ env.cloudsmith_upload_repo }}
run: |
cloudsmith push raw -W -k ${CLOUDSMITH_API_KEY} --name sources --republish \
--version ${{ env.projecteur_version }} ${CLOUDSMITH_USER}/${CLOUDSMITH_REPO} \
--summary "${CLOUDSMITH_SUMMARY}" --description "${CLOUDSMITH_DESC}" ${{ env.src_pkg_artifact }}

- name: Get package and repo type for upload
if: env.upload_bin_pkg == 'true'
run: |
filename=$(basename -- "${{ env.dist_pkg_artifact }}")
export PKG_TYPE="${filename##*.}"
declare -A distromap=( ["debian-stretch"]="debian/stretch" ["debian-buster"]="debian/buster" \
["debian-bullseye"]="debian/bullseye" ["debian-bookworm"]="debian/bookworm" \
["ubuntu-18.04"]="ubuntu/bionic" \
["ubuntu-20.04"]="ubuntu/focal" ["ubuntu-21.04"]="ubuntu/hirsute" \
["ubuntu-22.04"]="ubuntu/jammy" ["ubuntu-23.04"]="ubuntu/lunar" \
["opensuse-15.1"]="opensuse/15.1" ["opensuse-15.2"]="opensuse/15.2" \
["opensuse-15.3"]="opensuse/15.3" ["opensuse-15.4"]="opensuse/15.4" \
["opensuse-15.5"]="opensuse/15.5" ["centos-8"]="el/8" \
["fedora-31"]="fedora/31" \
["fedora-32"]="fedora/32" ["fedora-33"]="fedora/33" \
["fedora-34"]="fedora/34" ["fedora-37"]="fedora/37" ["fedora-38"]="fedora/38" )
export DISTRO=${distromap[${{ matrix.docker_tag }}]}
echo PKGTYPE=$PKG_TYPE
echo DISTRO=$DISTRO
echo "PKG_TYPE=${PKG_TYPE}" >> $GITHUB_ENV
echo "DISTRO=${DISTRO}" >> $GITHUB_ENV
if [ -z ${DISTRO} ] || [ -z ${PKG_TYPE} ]; then \
export REPO_UPLOAD=false; else export REPO_UPLOAD=true; fi;
echo "REPO_UPLOAD=${REPO_UPLOAD}" >> $GITHUB_ENV

- name: Linux repo upload on cloudsmith for ${{ env.DISTRO }}
if: env.REPO_UPLOAD == 'true'
env:
CLOUDSMITH_API_KEY: ${{ secrets.CLOUDSMITH_API_KEY }}
CLOUDSMITH_REPO: ${{ env.cloudsmith_upload_repo }}
run: |
echo Uploading for ${DISTRO} - ${PKG_TYPE}: ${CLOUDSMITH_USER}/${CLOUDSMITH_REPO}/${DISTRO}
cloudsmith push ${PKG_TYPE} -W -k ${CLOUDSMITH_API_KEY} --republish \
${CLOUDSMITH_USER}/${CLOUDSMITH_REPO}/${DISTRO} ${{ env.dist_pkg_artifact }}

# =====================================================================================
# ---------- Upload artifacts to projecteur server ------------
projecteur-bin-upload:
if: ${{ github.repository == 'jahnf/Projecteur' }}
needs: build
jobs:
build:
name: ${{ matrix.id }}
runs-on: ubuntu-latest
continue-on-error: ${{ matrix.moving && github.base_ref != 'master' && github.ref_name != 'master' }}
container:
image: ${{ matrix.image }}
strategy:
fail-fast: false
matrix:
include:
- id: archlinux
image: archlinux:latest
bootstrap: pacman -Sy --noconfirm git
moving: false
package: true
- id: fedora-44
image: fedora:44
bootstrap: dnf -y -q install git
moving: false
package: true
- id: tumbleweed
image: opensuse/tumbleweed:latest
bootstrap: zypper -qn refresh && zypper -qn install -y git-core gawk
moving: true
package: true
- id: debian-testing
image: debian:testing-slim
bootstrap: apt-get update -qq && DEBIAN_FRONTEND=noninteractive apt-get install -y -qq git
moving: true
package: true
- id: ubuntu-26.10
image: ubuntu:devel
bootstrap: apt-get update -qq && DEBIAN_FRONTEND=noninteractive apt-get install -y -qq git
moving: true
package: true
- id: fedora-rawhide
image: fedora:rawhide
bootstrap: dnf -y -q install git
moving: true
package: false
- id: debian-sid
image: debian:sid-slim
bootstrap: apt-get update -qq && DEBIAN_FRONTEND=noninteractive apt-get install -y -qq git
moving: true
package: false

steps:
- name: Get version-info
uses: actions/download-artifact@v3
with:
name: version-info

- name: Extract version info
run: |
BRANCH=`cat version-branch`
echo "BRANCH=${BRANCH}" >> $GITHUB_ENV
VERSION=`cat version-string`
echo "VERSION=${VERSION}" >> $GITHUB_ENV
DO_UPLOAD=$(( [ "master" = "$BRANCH" ] || [ "develop" = "$BRANCH" ] ) && echo true || echo false)
echo "DO_UPLOAD=${DO_UPLOAD}" >> $GITHUB_ENV

- uses: actions/download-artifact@v3
if: env.DO_UPLOAD == 'true'
with:
path: artifacts

- name: Create upload directory
if: env.DO_UPLOAD == 'true'
run: |
BRANCHDIR=${{ env.BRANCH }}
[ "master" = "$BRANCHDIR" ] && BRANCHDIR=stable
VERSION=${{ env.VERSION }}
mkdir -p upload/$BRANCHDIR/$VERSION
find ./artifacts -iname "projecteur*" -exec mv -t upload/$BRANCHDIR/$VERSION {} +
BRANCHNAME=${BRANCHDIR/\//_}
BRANCH_FILENAME=${BRANCHNAME}-latest.json
echo '{ "version": "${{ env.VERSION}}" }' >> upload/$BRANCH_FILENAME
echo "BRANCHNAME=${BRANCHNAME}" >> $GITHUB_ENV
find . -iname "projecteur*"
cd upload/$BRANCHDIR/$VERSION
sha1sum * > sha1sums.txt

- name: 📂 Upload files
if: env.DO_UPLOAD == 'true'
run: |
cd upload && sudo apt-get install lftp --no-install-recommends
lftp ${{ secrets.PROJECTEUR_UPLOAD_HOSTNAME }} \
-u "${{ secrets.PROJECTEUR_UPLOAD_USER }},${{ secrets.PROJECTEUR_UPLOAD_TOKEN }}" \
-e "set ftp:ssl-force true; set ssl:verify-certificate true; mirror \
--reverse --upload-older --dereference -x ^\.git/$ ./ ./; quit"

- name: Update latest symlink
if: env.DO_UPLOAD == 'true'
run: |
curl --fail -i -X POST -F "token=${{ secrets.PROJECTEUR_UPDATE_TOKEN }}" \
${{ secrets.PROJECTEUR_UPDATE_URL }}?branch=${{ env.BRANCHNAME }}
- name: Bootstrap Git for checkout
run: ${{ matrix.bootstrap }}

- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
with:
fetch-depth: 0

- name: Install dependencies
run: ./ci/install-dependencies.sh "${{ matrix.id }}"

- name: Build, package, and smoke test
run: ./ci/build-target.sh "${{ matrix.id }}"

- name: Preserve package for one day
if: matrix.package
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
with:
name: package-${{ matrix.id }}
path: release-assets/${{ matrix.id }}/
if-no-files-found: error
retention-days: 1
Loading