From 373d5246eb53ef1a13166b066248526f33f935db Mon Sep 17 00:00:00 2001 From: Chris Wells Date: Thu, 5 Sep 2024 19:45:28 -0500 Subject: Trying to get the kobo api working for querying firmware --- pkgs/firmware/default.nix | 16 +++++++++++++--- pkgs/kfwproxy/default.nix | 19 +++++++++++++++++++ pkgs/kobo-manager/script.sh | 24 ++++++++++++++++++++++++ pkgs/misc/firmware-check.nix | 12 ++++++++++++ pkgs/misc/unlock.nix | 28 ++++++++++++++++++++++++++++ pkgs/plato/default.nix | 19 +++++++++++-------- 6 files changed, 107 insertions(+), 11 deletions(-) create mode 100644 pkgs/kfwproxy/default.nix create mode 100755 pkgs/kobo-manager/script.sh create mode 100644 pkgs/misc/firmware-check.nix create mode 100644 pkgs/misc/unlock.nix (limited to 'pkgs') diff --git a/pkgs/firmware/default.nix b/pkgs/firmware/default.nix index 813746a..932ecf1 100644 --- a/pkgs/firmware/default.nix +++ b/pkgs/firmware/default.nix @@ -1,20 +1,29 @@ { stdenvNoCC, fetchzip, lib, ... }: -{ hardware, date, version, hash ? "", sha256 ? "", ... }: +{ hardware, date, version, hash ? "", ... }: stdenvNoCC.mkDerivation (finalAttrs: { pname = "kobo-firmware"; inherit version hardware date; src = fetchzip { url = "https://ereaderfiles.kobo.com/firmwares/${finalAttrs.hardware}/${finalAttrs.date}/kobo-update-${finalAttrs.version}.zip"; - inherit hash sha256; + inherit hash; }; + outputs = [ + "out" + "KoboRoot" + ]; + phases = "installPhase"; installPhase = '' runHook preInstall - cp -r $src $out + mkdir $out + cp -r $src/{manifest.md5sum,upgrade} $out/ + + mkdir $KoboRoot + tar xvzf $src/KoboRoot.tgz --directory=$KoboRoot runHook postInstall ''; @@ -29,5 +38,6 @@ stdenvNoCC.mkDerivation (finalAttrs: { Kobo firmware files. ''; platform = platforms.all; + outputsToInstall = finalAttrs.outputs; }; }) diff --git a/pkgs/kfwproxy/default.nix b/pkgs/kfwproxy/default.nix new file mode 100644 index 0000000..c06eb73 --- /dev/null +++ b/pkgs/kfwproxy/default.nix @@ -0,0 +1,19 @@ +{ fetchFromGitHub, buildGoModule, lib, ... }: +buildGoModule rec { + pname = "kfwproxy"; + version = "unstable"; + + src = fetchFromGitHub { + owner = "pgaskin"; + repo = "kfwproxy"; + rev = "fd068fe"; + hash = "sha256-0d0ovn7omZkDW8Oj8m//hwo9h6R3/COYMSneIDp5nQM="; + }; + + vendorHash = "sha256-Ps5ofzM7S5FyEQ27OT/6MgB3KvOpawEAf/ReKcKE8x4="; + + meta = with lib; { + homepage = "https://github.com/pgaskin/kfwproxy"; + license = licenses.mit; + }; +} diff --git a/pkgs/kobo-manager/script.sh b/pkgs/kobo-manager/script.sh new file mode 100755 index 0000000..16bec7f --- /dev/null +++ b/pkgs/kobo-manager/script.sh @@ -0,0 +1,24 @@ +#!/bin/bash + +set -euo pipefail + +local koboConfigurations="koboConfigurations" + +function setWorkDir() { + if [[ ! -v WORK_DIR ]]; then + WORK_DIR="$(mktemp --tmpdir -d kobo-manager-build.XXXXXXXXX)" + + trap "rm -r '$WORK_DIR'" EXIT + fi +} + +function setFlakeAttribute() { + local flake="${FLAKE_ARG%#*}" + local name="default" + + case $FLAKE_ARG in + *#*) local name="${FLAKE_ARG#*#}" ;; + esac + + export FLAKE_CONFIG_URI="$flake#\"$koboConfigurations\".\"$name\"" +} diff --git a/pkgs/misc/firmware-check.nix b/pkgs/misc/firmware-check.nix new file mode 100644 index 0000000..53cd2c2 --- /dev/null +++ b/pkgs/misc/firmware-check.nix @@ -0,0 +1,12 @@ +{ writeShellApplication, jq, curl, ... }: +{ deviceID, affiliate ? "kobo" }: +writeShellApplication { + name = "kobo-check-firmware"; + runtimeInputs = [ + curl + jq + ]; + text = '' + curl --silent "https://api.kobobooks.com/1.0/UpgradeCheck/Device/${deviceID}/${affiliate}/0.0/N0" | jq '.UpgradeURL' + ''; +} diff --git a/pkgs/misc/unlock.nix b/pkgs/misc/unlock.nix new file mode 100644 index 0000000..dee313a --- /dev/null +++ b/pkgs/misc/unlock.nix @@ -0,0 +1,28 @@ +{ sqlite3, kobo-utils, writeShellApplication, ... }: +writeShellApplication { + name = "kobo-unlock"; + runtimeInputs = [ + sqlite3 + kobo-utils + ]; + text = '' + KOBOMNT="$(kobo-find)" + KOBOSQL="$KOBOMNT/.kobo/KoboReader.sqlite3" + + if [ -z "$KOBOMNT" ]; then + >&2 echo "Cannot find a mounted Kobo ereader..." + exit 1 + elif [ ! -f "$KOBOSQL" ]; then + >&2 echo "Cannot find the file $KOBOSQL" + exit 1 + fi + + echo "Inserting dummy user into $KOBOSQL" + + sqlite3 "$KOBOSQL" \ + 'INSERT INTO user(UserID,UserKey) VALUES("1","");' \ + '.exit' + + echo "Success!" + ''; +} diff --git a/pkgs/plato/default.nix b/pkgs/plato/default.nix index 2c7b5df..548363b 100644 --- a/pkgs/plato/default.nix +++ b/pkgs/plato/default.nix @@ -1,9 +1,7 @@ -{ stdenvNoCC, fetchzip, lib, ... }: -let - version = "0.9.43"; -in stdenvNoCC.mkDerivation (finalAttrs: { +{ stdenvNoCC, fetchzip, fetchFromGitHub, lib, ... }: +stdenvNoCC.mkDerivation (finalAttrs: { pname = "plato"; - inherit version; + version = "0.9.43"; src = fetchzip { url = "https://github.com/baskerville/plato/releases/download/${finalAttrs.version}/plato-${finalAttrs.version}.zip"; @@ -11,9 +9,14 @@ in stdenvNoCC.mkDerivation (finalAttrs: { hash = "sha256-1E9trfAF3w0+ix8JVDJwYjWQ/dfsLjLPmkCLJAYXkZU="; }; - picSrc = fetchzip { - url = "https://github.com/baskerville/plato/archive/refs/tags/${version}.zip"; - hash = "sha256-u9d/8C9rRb0glZR07tqz/d8EXO0bRddXlCFDje7ow2Y="; + picSrc = fetchFromGitHub { + owner = "baskerville"; + repo = "plato"; + rev = "${finalAttrs.version}"; + sparseCheckout = [ + "artworks/plato.png" + ]; + hash = "sha256-aZiEzZFeqUUMcBU7dg6xO6RF01lBlSmGsxNni/2pciY="; }; outputs = [ -- cgit v1.2.3