From 4ffbc4237d4e4985c691187ad22344152e788771 Mon Sep 17 00:00:00 2001 From: Olivier Date: Fri, 8 Aug 2025 16:56:12 -0300 Subject: [PATCH] Complete rebase --- README.md | 36 ------- build-repo.sh | 56 ----------- build-upload.sh | 47 +++++++++ builds/ucon-rotate_0.1_all.deb | Bin 0 -> 1964 bytes .../custom-theme.deb => custom-theme.deb | Bin dists/bookworm/Release | 8 -- .../bookworm/stable/main/binary-all/Packages | 15 --- .../stable/main/binary-all/Packages.gz | Bin 391 -> 0 bytes pool/main/c/clockworkpi-theme/.gitkeep | 0 .../u/ucon-rotate/ucon-rotate_0.1_all.deb | Bin 1680 -> 0 bytes .../u/ucon-rotate/ucon-rotate_0.2_all.deb | Bin 1692 -> 0 bytes ucon-rotate/DEBIAN/control | 9 ++ ucon-rotate/usr/bin/ucon-rotate | 94 ++++++++++++++++++ 13 files changed, 150 insertions(+), 115 deletions(-) delete mode 100644 README.md delete mode 100755 build-repo.sh create mode 100755 build-upload.sh create mode 100644 builds/ucon-rotate_0.1_all.deb rename pool/main/c/clockworkpi-theme/custom-theme.deb => custom-theme.deb (100%) delete mode 100644 dists/bookworm/Release delete mode 100644 dists/bookworm/stable/main/binary-all/Packages delete mode 100644 dists/bookworm/stable/main/binary-all/Packages.gz delete mode 100644 pool/main/c/clockworkpi-theme/.gitkeep delete mode 100644 pool/main/u/ucon-rotate/ucon-rotate_0.1_all.deb delete mode 100644 pool/main/u/ucon-rotate/ucon-rotate_0.2_all.deb create mode 100644 ucon-rotate/DEBIAN/control create mode 100755 ucon-rotate/usr/bin/ucon-rotate diff --git a/README.md b/README.md deleted file mode 100644 index 035a9ff..0000000 --- a/README.md +++ /dev/null @@ -1,36 +0,0 @@ -# Personal APT repository - -This directory is a minimal Debian/apt repository that hosts personal -packages for the Clockwork Pi image. - -Currently it contains only **clockworkpi-theme**. - -## Structure -``` -apt-repository/ -├── build-repo.sh # helper to rebuild the index -├── pool/main/c/clockworkpi-theme/ -│ └── clockworkpi-theme_*.deb # package files live here -└── dists/bookworm/stable/main/binary-all/ - ├── Packages - └── Packages.gz -``` - -## Usage -1. Build / rebuild your theme package in *pi-gen* (e.g. via - `scripts/package-custom-theme.sh`). -2. Run the helper here: - ```bash - cd apt-repository - ./build-repo.sh - ``` -3. Commit & push this repo – the raw URL of the repo root is the apt - source, e.g. - ``` - deb [arch=all] https://gitea.example.com/olivier/apt-repository bookworm stable main - ``` - -## Adding more packages -Just copy additional `.deb` files into an appropriate sub-directory -under `pool/` (follow the first letter scheme) and run -`./build-repo.sh` – the script rescans the entire pool each time. diff --git a/build-repo.sh b/build-repo.sh deleted file mode 100755 index e5d7a13..0000000 --- a/build-repo.sh +++ /dev/null @@ -1,56 +0,0 @@ -#!/usr/bin/env bash -# ----------------------------------------------------------------------------- -# build-repo.sh – regenerate minimal Debian/apt repository -# ----------------------------------------------------------------------------- -# 1. copies the current custom-theme.deb from ../ClockworkPi-pi-gen/custom-theme/ -# (edit PKG_SRC below if your path is different) -# 2. puts it into pool/main/c/clockworkpi-theme/ -# 3. runs dpkg-scanpackages to create Packages & Packages.gz -# 4. writes a small Release stub (not signed – fine for private use, add gpg -# signing later if you wish) -# -# After running, commit & push this repo – the raw URLs will be usable as an -# apt source on any machine. -# ----------------------------------------------------------------------------- -set -euo pipefail - -PKG_SRC="../ClockworkPi-pi-gen/custom-theme/custom-theme.deb" # location of .deb -POOL_DIR="pool/main/c/clockworkpi-theme" -DIST="bookworm" -COMP="stable" -ARCH="all" - -if [[ ! -f "${PKG_SRC}" ]]; then - echo "ERROR: ${PKG_SRC} not found – build your theme package first." >&2 - exit 1 -fi - -mkdir -p "${POOL_DIR}" -cp -u "${PKG_SRC}" "${POOL_DIR}/" # copy only if newer (keeps history) - -BIN_DIR="dists/${DIST}/${COMP}/main/binary-${ARCH}" -mkdir -p "${BIN_DIR}" - -# Generate Packages & Packages.gz -if ! command -v dpkg-scanpackages >/dev/null; then - echo "ERROR: dpkg-scanpackages not found – install dpkg-dev." >&2 - exit 1 -fi - -dpkg-scanpackages --arch "${ARCH}" pool /dev/null > "${BIN_DIR}/Packages" - gzip -9c "${BIN_DIR}/Packages" > "${BIN_DIR}/Packages.gz" - -# Minimal Release file (unsigned) -mkdir -p "dists/${DIST}" -cat > "dists/${DIST}/Release" <&2 + exit 1 +fi + +PS3="Choose a package directory: " +select pkg in "${dirs[@]}"; do + if [[ -n "$pkg" ]]; then + pkg_path="$pkg" + break + fi + echo "Invalid selection" +done +version=$(awk -F': ' '/^Version:/{print $2; exit}' "$pkg_path/DEBIAN/control") +output_file="${pkg_path}_${version}_all.deb" +output_path="builds/${output_file}" +read -p "Enter your username: " user +read -s -p "Enter your password: " pass +echo + +mkdir -p builds +dpkg-deb --build "$pkg_path" "$output_path" +response=$(curl --silent --show-error --user "$user:$pass" --upload-file "$output_path" "$remote_url" 2>&1) +if echo "$response" | grep -q "package file already exists"; then + echo "Upload skipped: package file already exists on the server. You might have forgot to update the version number in the control file" +else + echo "$response" + echo "Package $output_path uploaded successfully" +fi + + + + + + + + diff --git a/builds/ucon-rotate_0.1_all.deb b/builds/ucon-rotate_0.1_all.deb new file mode 100644 index 0000000000000000000000000000000000000000..a64a3a232c5958b91021486c6122c57dc4ed839a GIT binary patch literal 1964 zcmY$iNi0gvu;WTeP0CEn(@o0EODw8XP*5;5H#IS{FtRi-;Oi1ARYhD!*#lXPw?AjJLmID`=8Uhp< z#TX!9GS`$357hrNdd4z{bMKL)Dw7g&aclC3=wHYmc z7X9y^zP@CO&qR@L;LUdcj$=?(1GTa(4ndk1O zQq|`n(Btqh_JQr4ZM~vbS&EMs=&laVv|rV>O?pqFzY25f{PJ-7ivKTP9h6WoY`S!O z`;CDAu@(O+LV9-}e6v3_DWdx3nc5}K|7G~x@}F?{PrBgb6Q`%=-=14?=i+H4CYGMZ z0^u?H-~N4OAfI$q`m3VN(a+hFJ6n<~?k#nWf9sxC zOE3SrtYB(p&UrnlXX`olS>3)h?}F^9yEkPj)gB}pUDEJ#SK>W2Cv1E7J=Ma!zrx*3 ztruUlIa4~};VzqH!TYzcnNMC-{otn%%gb3i*UHQ(%dS5b->rZ4lrYal_qYerY6_r` zeSK=;>(jSRJ2Ei7WoiguV8{|*HEH9K^xsS%NtVc{l*E!mcw`ch9t@4mEWpV@0X;sa zaUsX&`Ig6h57hs&@*&5k+Z>rA|MhmyeK@^F;nIe@<2zXOG$*d@*c96EN1%7lvSyBi z{l=@A4>;EJd42PfnCds_$j7-ND-JF3-SXZ3ylDjc&pT&!ggI&Zny|kU`oeN`nW*&7 zgT7b2y!JT1aeMOPbJZ;AgOg56f0Zy1ocz>9F16g2y`HzxOYd_KDVt#;hBLiXM5xj`j!`e&zV?lk-Ss;bLn-R4_omc02T zYk#Ur&%nC2jn8}<_dn*tkM3+XQcC~4B`W)!U0JWEv5~i?!iAS{yQhf$dslJf+<(u7 z|83b5nrtVsht^k#fzBRr~+6)h;}fb@z;pub5l~ioK%$%*XYC?aVEF!RDV&y;-c3!7#%;`2E>;KO}Fp{W$dGip-rgx4e@Ua3{rG zcp5%WG)3*<*HtBE%M-7P&H1RHP(MG+qTtLyLxvMaUt9|;o7cL*YLcJTo||uueYu`G zp@Q93FOO~CDu%4JUt@oC@=8qG{hoJ<>Ze;9UUt0kvrRvK-GD9N+ibas=2jPdSPnjR zT6$`o?JLzfZof94Ib6Cw|LxjVC&b2jPIz|n=BnhZh_zD}pS!l(atD`Q|6Q~Go2P%j zShQe=#o7wdRlgn-U!A+z`rm=bGl@&4DE#!;`jjL5(*f4l_^hVQTm8DMOPC)#{<1>t z*_T}c3BI?Tnzl~MO1F%6IKR-d`u;}8Nv{oL?VVJ0ES9X=xvR1)_Hfr;UppQ~kvsge zKjxUuKKH~)eonl_X{Q>6kL72>-ksZR*04F@sj84vuT_D#Z=K48`3$yKdK(2#-CwZ8 z`^=pCa=RB>`%6`B_AF7*?3y!ON44!zU-8O)Cnp77*rOJps9S5&cHm%A`)sDOT+jL6 zi@ooxW3hRu_2IGA(h+y+_4fHj93|FlSvR!j>*vndm$@}( z(qk^(rTa>MD9?3F5wu&&`7f1;x*b?6HK13FBO@iE*L6*bKb>l!-?rk z|Mo;(c1Und_|?@qDV3*WtM%TknqLZ;e|#6|i2fQEsb}kzCCV7Xa&q;wv~PFAFJ$tY zJYVYkv9U~Z;iSUOKF*dihhEQU4}ZPHAo70c0slVE*Nd4MJ&eCStYUus&r7NB=e9#p z?pq>lYSJ_BXRkRbcjaUH -Depends: bash -Filename: pool/main/u/ucon-rotate/ucon-rotate_0.2_all.deb -Size: 1692 -MD5sum: 7d20aa98b4bdd694835c8bb9c46b8e87 -SHA1: 63ab5b1499b89e5a86074ea0cf31a7de340c5d82 -SHA256: fba99567ec0f0714ca43115406ad1c8ea2390f52f40d101b462b548a2bdfa0a5 -Section: utils -Priority: optional -Description: Rotate uConsole DSI display via wlr-randr - Provides the `ucon-rotate` command to rotate the primary DSI output under Wayland. - diff --git a/dists/bookworm/stable/main/binary-all/Packages.gz b/dists/bookworm/stable/main/binary-all/Packages.gz deleted file mode 100644 index 20648b9560cc87a4b67bea7eea79e3a7db5fcb3b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 391 zcmb2|=HSS4o|eJH9FUltotU0l%-}omVBT#5p0@W@T>BhkPfp7@Ezu^%-S##>C!*o& zjUb`B9FujOr)^I4w>RDS#GygK?q7?Y?1g{F%B2!E7uIv`&Mcq?w9IBPwemCZA$TN`-we@<(BJQ?rYv88iw{{3xYL)4%TK8$&o5QF0P9A^q zIkjO&%^5=x?bW_@I|J?4uWx zqg1iG_$%AdZy^dN1oIYaZ&tBS+!bT|c-nN`!)CibMeA2^vaXl-&2KGVw3C5}fdK%_ CLB5{= diff --git a/pool/main/c/clockworkpi-theme/.gitkeep b/pool/main/c/clockworkpi-theme/.gitkeep deleted file mode 100644 index e69de29..0000000 diff --git a/pool/main/u/ucon-rotate/ucon-rotate_0.1_all.deb b/pool/main/u/ucon-rotate/ucon-rotate_0.1_all.deb deleted file mode 100644 index 35f8d5b99c65d2f0b37a881295ed8d2c35b5584d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1680 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 wlr-randr transform for this device +# Device reality: 0° logical == 270 transform (normal handheld portrait) +map_degree() { + local d=${1:-} + case "$d" in + 0) echo 270;; # logical 0 -> transform 270 + 90) echo 180;; # logical 90 -> transform 180 (fixed) + 180) echo 90;; # logical 180 -> transform 90 + 270) echo normal;; # logical 270 -> transform normal (fixed) + *) echo "";; + esac +} + +# Pick the DSI output name dynamically (DSI-1 or DSI-2) +detect_output() { + local out + out=$(wlr-randr | awk '/^DSI-[12]/{print $1; exit}') || true + if [[ -z "$out" ]]; then + echo "Error: No DSI output found (need Wayland + wlr-randr)" >&2 + exit 1 + fi + echo "$out" +} + +# Read current transform from wlr-randr line like: +# DSI-1 … transform: 270 +current_transform() { + local out="$1" + # Query the single output and print the value on the "Transform:" line (field 2) + # Use only POSIX-friendly awk features for compatibility + local val + val=$(wlr-randr --output "$out" | awk 'tolower($1)=="transform:" {print $2; exit}') || true + if [[ -z "$val" ]]; then + # Fallback: parse from the summary line for that output + val=$(wlr-randr | awk -v o="$out" 'tolower($1)==tolower(o) {for(i=1;i<=NF;i++){if(tolower($i)=="transform:"){print $(i+1); exit}}}') || true + fi + echo "$val" +} + +# Compute transform after rotating by a delta (in logical degrees), +# using the device-specific logical<->transform mapping. +compute_transform_with_delta() { + local cur="$1" + local delta="$2" # can be negative (e.g., -90) + # Reverse-map current PHYSICAL state: transform -> logical degrees + local logical + case "$cur" in + 270) logical=0;; + 180) logical=90;; + 90) logical=180;; + normal|0) logical=270;; + *) logical=0;; + esac + # Normalize wrap-around for negative values safely + local next=$(( ( (logical + delta) % 360 + 360 ) % 360 )) + map_degree "$next" +} + +main() { + local out; out=$(detect_output) + local arg=${1:-} + local transform + + if [[ -z "$arg" ]]; then + local cur; cur=$(current_transform "$out") + transform=$(compute_transform_with_delta "$cur" 90) + else + # normalize arg (allow 0/90/180/270) + case "$arg" in + right) + local cur; cur=$(current_transform "$out") + transform=$(compute_transform_with_delta "$cur" 90) + ;; + left) + local cur; cur=$(current_transform "$out") + transform=$(compute_transform_with_delta "$cur" -90) + ;; + 0|90|180|270) transform=$(map_degree "$arg");; + *) echo "Usage: ucon-rotate [right|left|0|90|180|270]" >&2; exit 2;; + esac + fi + + if [[ -z "$transform" ]]; then + echo "Error: could not resolve transform" >&2 + exit 1 + fi + + exec wlr-randr --output "$out" --transform "$transform" +} + +main "$@"