diff --git a/hosts/common/programs/default.nix b/hosts/common/programs/default.nix index 68a54649..b38f4a94 100644 --- a/hosts/common/programs/default.nix +++ b/hosts/common/programs/default.nix @@ -12,7 +12,7 @@ ./jellyfin-media-player.nix ./kitty ./komikku.nix - ./koreader.nix + ./koreader ./libreoffice.nix ./mpv.nix ./neovim.nix diff --git a/hosts/common/programs/koreader.nix b/hosts/common/programs/koreader.nix deleted file mode 100644 index ba54cf9b..00000000 --- a/hosts/common/programs/koreader.nix +++ /dev/null @@ -1,11 +0,0 @@ -{ ... }: - -{ - sane.programs.koreader = { - # koreader on aarch64 errors if there's no fonts directory (sandboxing thing, i guess) - fs.".local/share/fonts".dir = {}; - # history, cache, dictionaries... - # could be more explicit if i symlinked the history.lua file to somewhere it can persist better. - persist.plaintext = [ ".config/koreader" ]; - }; -} diff --git a/hosts/common/programs/koreader/2-colin-NetworkManager-isConnected.lua b/hosts/common/programs/koreader/2-colin-NetworkManager-isConnected.lua new file mode 100644 index 00000000..6130b6d9 --- /dev/null +++ b/hosts/common/programs/koreader/2-colin-NetworkManager-isConnected.lua @@ -0,0 +1,39 @@ +-- as of 2023.05.1, koreader FTP browser always fails to load. +-- it's convinced that it's offline, and asks to connect to wifi. +-- this seems to be because of the following in : +-- +-- function Device:initNetworkManager(NetworkMgr) +-- function NetworkMgr:isWifiOn() return true end +-- function NetworkMgr:isConnected() +-- -- Pull the default gateway first, so we don't even try to ping anything if there isn't one... +-- local default_gw = Device:getDefaultRoute() +-- if not default_gw then +-- return false +-- end +-- return 0 == os.execute("ping -c1 -w2 " .. default_gw .. " > /dev/null") +-- end +-- end +-- +-- specifically, `os.execute` is not *expected* to return 0. it returns `true` on success: +-- +-- this apparently changed from 5.1 -> 5.2 + +local logger = require("logger") +logger.info("applying colin patch") + +local Device = require("device") +logger.info("Device:" .. tostring(Device)) + +local orig_initNetworkManager = Device.initNetworkManager +Device.initNetworkManager = function(self, NetworkMgr) + logger.info("Device:initNetworkManager") + orig_initNetworkManager(self, NetworkMgr) + function NetworkMgr:isConnected() + logger.info("mocked `NetworkMgr:isConnected` to return true") + return true + -- unpatch to show that the boolean form works + -- local rc = os.execute("ping -c1 -w2 10.78.79.1 > /dev/null") + -- logger.info("ping rc: " .. tostring(rc)) + -- return rc + end +end diff --git a/hosts/common/programs/koreader/default.nix b/hosts/common/programs/koreader/default.nix new file mode 100644 index 00000000..a1bb4516 --- /dev/null +++ b/hosts/common/programs/koreader/default.nix @@ -0,0 +1,18 @@ +{ ... }: + +{ + sane.programs.koreader = { + # koreader applies these lua "patches" at boot: + # - + # - TODO: upstream this patch to koreader + # fs.".config/koreader/patches".symlink.target = "${./.}"; + fs.".config/koreader/patches/2-colin-NetworkManager-isConnected.lua".symlink.target = "${./2-colin-NetworkManager-isConnected.lua}"; + + # koreader on aarch64 errors if there's no fonts directory (sandboxing thing, i guess) + fs.".local/share/fonts".dir = {}; + + # history, cache, dictionaries... + # could be more explicit if i symlinked the history.lua file to somewhere it can persist better. + persist.plaintext = [ ".config/koreader" ]; + }; +}