aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--data/affiliates.nix1
-rw-r--r--kobo/clara/Kobo eReader.conf125
-rw-r--r--kobo/clara/default.nix17
-rw-r--r--modules/build/firmware.nix3
-rw-r--r--modules/default.nix1
-rw-r--r--modules/device/default.nix18
-rw-r--r--modules/kfmon/default.nix34
-rw-r--r--modules/kobo/default.nix16
-rw-r--r--modules/koreader/default.nix23
-rw-r--r--modules/nickel/default.nix8
-rw-r--r--modules/onboard/default.nix49
-rw-r--r--modules/plato/default.nix43
-rw-r--r--pkgs/firmware/default.nix20
-rw-r--r--pkgs/kfmon/default.nix2
-rw-r--r--pkgs/koreader/default.nix2
-rw-r--r--pkgs/plato/default.nix4
16 files changed, 297 insertions, 69 deletions
diff --git a/data/affiliates.nix b/data/affiliates.nix
index 1da8686..08ade43 100644
--- a/data/affiliates.nix
+++ b/data/affiliates.nix
@@ -5,4 +5,5 @@
"fnac"
"beta"
"walmartca"
+ "shopify"
]
diff --git a/kobo/clara/Kobo eReader.conf b/kobo/clara/Kobo eReader.conf
new file mode 100644
index 0000000..8bd7357
--- /dev/null
+++ b/kobo/clara/Kobo eReader.conf
@@ -0,0 +1,125 @@
+[ApplicationPreferences]
+AIRPLANE_MODE=true
+CurrentLocale=en
+EarliestChangeLog=4.21.15023
+HomePageViewVisitCount=20
+LastAffiliateSyncTime=@Variant(\0\0\0\x10\0%\x88\x94\x2\x3wo\x2)
+LastAuthorsListSorter_authorList_=sortByLastName()
+LastFTEStep=BEGIN
+LastLibrarySorter_author_filterByAuthor%28Dost%20K%F6rpe%29=sortByNewest()
+LastLibrarySorter_author_filterByAuthor%28Gail%20Carson%20Levine%29=sortByNewest()
+LastLibrarySorter_author_filterByAuthor%28Margherita%20Botto%29=sortByNewest()
+LastLibrarySorter_author_filterByAuthor%28Naomi%20Novik%29=sortByNewest()
+LastLibrarySorter_author_filterByAuthor%28Unknown%20Author%29=sortByNewest()
+LastLibrarySorter_author_filterByAuthor%28%U5B89%U5A1C%UFF0E%U7F85%U6717%U5FB7%29=sortByNewest()
+LastLibrarySorter_books_filterByAllItems%28%29=sortByNewest()
+LastLibrarySubFilter_author_filterByAuthor%28Dost%20K%F6rpe%29=
+LastLibrarySubFilter_author_filterByAuthor%28Gail%20Carson%20Levine%29=
+LastLibrarySubFilter_author_filterByAuthor%28Margherita%20Botto%29=
+LastLibrarySubFilter_author_filterByAuthor%28Naomi%20Novik%29=
+LastLibrarySubFilter_author_filterByAuthor%28Unknown%20Author%29=
+LastLibrarySubFilter_author_filterByAuthor%28%U5B89%U5A1C%UFF0E%U7F85%U6717%U5FB7%29=
+LastLibrarySubFilter_books_filterByAllItems%28%29=
+LastLibraryTab=Books
+LastLibraryViewType_author=viewBy5List()
+LastLibraryViewType_books=viewBy5List()
+LastLibraryViewType_series=viewBy5List()
+LastLibraryViewType_seriesList=viewBy5List()
+LastSearchType_Home=Store
+LastSearchType_Store=Store
+LastSeriesListSorter_seriesList_=sortByRecent()
+LastShelfListSorter_shelfList_=sortByShelfName()
+LastUpdateCheckTime=@Variant(\0\0\0\x10\0%\x88\x96\x3(\a$\x2)
+LibraryViewVisitCount=9
+LongPressDialogShown=true
+MarkAsFinishedLastShown=@Variant(\0\0\0\x10\0%\x87\xcf\x1\x1c\x43\xf1\xff)
+MarkAsUnreadLastShown=@Variant(\0\0\0\x10\0%\x88\x95\x4\xbfR\x19\xff)
+MostRecentReadID="file:///mnt/onboard/Harrison, Kim/Black Magic Sanction - Kim Harrison.epub"
+PeriodicAutoSync=false
+QuickTourWidgetShown=true
+SmartLink_%05=3
+SwipeDialogShown=true
+SyncReminderDialogShown=true
+firstRunDate=@Variant(\0\0\0\x10\0%\x87\xce\x5%\x9a\x44\x2)
+lastPlugTime=@Variant(\0\0\0\x10\0%\x8b\x8d\x3\xb1\x6V\x2)
+sleepOnNextBoot=false
+syncOnNextBoot=false
+
+[DialogSettings]
+ReleaseNotesShown=true
+
+[FeatureSettings]
+ExcludeSyncFolders=(\\.(?!kobo|adobe).+|([^.][^/]*/)+\\..+)
+
+[OneStoreServices]
+account_page=https://secure.kobobooks.com/profile
+account_page_rakuten=https://my.rakuten.co.jp/
+autocomplete=https://storeapi.kobo.com/v1/products/autocomplete
+book=https://storeapi.kobo.com/v1/products/books/{ProductId}
+book_detail_page=https://www.kobo.com/{region}/{language}/ebook/{slug}
+book_detail_page_rakuten=http://books.rakuten.co.jp/rk/{crossrevisionid}
+book_landing_page=https://www.kobo.com/ebooks
+categories=https://storeapi.kobo.com/v1/categories
+category=https://storeapi.kobo.com/v1/categories/{CategoryId}
+category_products=https://storeapi.kobo.com/v1/categories/{CategoryId}/products
+dictionary_host=https://kbdownload1-a.akamaihd.net
+discovery_host=https://discovery.kobobooks.com
+dropbox_link_account_poll=
+eula_page="https://www.kobo.com/termsofuse?style=onestore"
+featured_list=https://storeapi.kobo.com/v1/products/featured/{FeaturedListId}
+featured_lists=https://storeapi.kobo.com/v1/products/featured
+feedback=
+fte_feedback=https://storeapi.kobo.com/v1/products/ftefeedback
+image_host=//kbimages1-a.akamaihd.net/
+image_url_quality_template=https://kbimages1-a.akamaihd.net/{ImageId}/{Width}/{Height}/{Quality}/{IsGreyscale}/image.jpg
+image_url_template=https://kbimages1-a.akamaihd.net/{ImageId}/{Width}/{Height}/false/image.jpg
+kobo_audiobooks_credit_redemption=False
+kobo_audiobooks_enabled=True
+kobo_dropbox_link_account_enabled=False
+kobo_nativeborrow_enabled=True
+kobo_privacyCentre_url=https://www.kobo.com/privacy
+kobo_redeem_enabled=True
+kobo_subscriptions_enabled=False
+kobo_superpoints_enabled=True
+kobo_wishlist_enabled=True
+love_points_redemption_page="https://www.kobo.com/{region}/{language}/KoboSuperPointsRedemption?productId={ProductId}"
+oauth_host=https://oauth.kobo.com
+password_retrieval_page=https://www.kobo.com/passwordretrieval.html
+privacy_page="https://www.kobo.com/privacypolicy?style=onestore"
+product_recommendations=https://storeapi.kobo.com/v1/products/{ProductId}/recommendations
+product_reviews=https://storeapi.kobo.com/v1/products/{ProductIds}/reviews
+purchase_buy_templated=https://www.kobo.com/{region}/{language}/checkout/createpurchase/{ProductId}
+reading_services_host=https://readingservices.kobo.com
+registration_page="https://authorize.kobo.com/signup?returnUrl=http://kobo.com/"
+review=https://storeapi.kobo.com/v1/products/reviews/{ReviewId}
+review_sentiment=https://storeapi.kobo.com/v1/products/reviews/{ReviewId}/sentiment/{Sentiment}
+sign_in_page="https://authorize.kobo.com/signin?returnUrl=http://kobo.com/"
+social_host=https://social.kobobooks.com
+store_home=www.kobo.com/{region}/{language}
+store_host=www.kobo.com
+store_search="https://www.kobo.com/{region}/{language}/Search?Query={query}"
+subs_landing_page=
+subs_management_page=
+subs_plans_page=
+subs_purchase_buy_templated=
+subscription_publisher_price_page=
+taste_profile=https://storeapi.kobo.com/v1/products/tasteprofile
+user_ratings=https://storeapi.kobo.com/v1/user/ratings
+user_recommendations=https://storeapi.kobo.com/v1/user/recommendations
+user_reviews=https://storeapi.kobo.com/v1/user/reviews
+userguide_host=https://kbdownload1-a.akamaihd.net
+
+[OverDrive]
+overdrive_account=https://auth.overdrive.com/account
+overdrive_library=https://{libraryKey}.auth.overdrive.com/library
+overdrive_library_finder_host=https://libraryfinder.api.overdrive.com
+overdrive_thunder_host=https://thunder.api.overdrive.com
+
+[PowerOptions]
+ColorSetting=6400
+FrontLightLevel=1
+
+[ReadingLife]
+FacebookAuthToken=
+FacebookName=
+FacebookTokenExpiry=@Variant(\0\0\0\x10\0\0\0\0\xff\xff\xff\xff\xff)
diff --git a/kobo/clara/default.nix b/kobo/clara/default.nix
index b061c7f..0bb35d4 100644
--- a/kobo/clara/default.nix
+++ b/kobo/clara/default.nix
@@ -3,6 +3,9 @@ with builtins // lib;
{
device = {
name = "Kobo Clara HD";
+ serialNumber = "N249191243488";
+ affiliate = "kobo";
+ forceAffiliate = true;
};
firmware = {
@@ -34,10 +37,13 @@ with builtins // lib;
sleep-cover = true;
auto-suspend = 15.0;
auto-power-off = 4.0;
+ wifi = false;
+ auto-share = false;
time-format = "%I:%M%P";
reader = {
font-size = 10.0;
font-family = "Fira Math";
+ font-path = "fonts";
};
dictionary = {
font-size = 10.0;
@@ -47,6 +53,17 @@ with builtins // lib;
power-off = "${config.kobo.devicePath}/screensaver/main.png";
share = power-off;
};
+ libraries = [
+ {
+ name = "On Board";
+ path = "/mnt/onboard";
+ mode = "database";
+ sort-method = "progress";
+ first-column = "title-and-author";
+ second-column = "progress";
+ thumbnail-previews = true;
+ }
+ ];
};
};
diff --git a/modules/build/firmware.nix b/modules/build/firmware.nix
index 3a1039b..785de4f 100644
--- a/modules/build/firmware.nix
+++ b/modules/build/firmware.nix
@@ -32,8 +32,7 @@ in {
];
} ''
mkdir $out
- tar czvf $out/KoboRoot.tgz --directory="${config.firmware.package.KoboRoot}" . --mode=u+w
- rsync -rv --links --executability --chmod=u+w "${config.firmware.package.out}/" $out
+ rsync -rv --links --executability --chmod=u+w "${config.firmware.package}/" $out
# Check that we haven't fucked up!
KOBOVERSION="$(kobo-versionextract "$out/KoboRoot.tgz" | awk '{if ($1 == "Version:") print $2}')"
diff --git a/modules/default.nix b/modules/default.nix
index 1c9fee4..3cf1fe6 100644
--- a/modules/default.nix
+++ b/modules/default.nix
@@ -8,6 +8,7 @@
./koboroot
./koreader
./nickel
+ ./onboard
./plato
];
}
diff --git a/modules/device/default.nix b/modules/device/default.nix
index 23be585..114c68c 100644
--- a/modules/device/default.nix
+++ b/modules/device/default.nix
@@ -34,6 +34,14 @@ in {
default = "kobo";
};
+ forceAffiliate = mkOption {
+ type = types.bool;
+ default = false;
+ description = ''
+ Write the given affiliate to /mnt/onboard/.kobo/affiliate.conf
+ '';
+ };
+
hardware = hardware // {
default = config._allDevices.${config.device.name}.hardware;
};
@@ -48,4 +56,14 @@ in {
};
};
};
+
+ config = {
+ onboard.file = {
+ ".kobo/affiliate.conf" = mkIf config.device.forceAffiliate {
+ text = generators.toINI {} {
+ General.affiliate = config.device.affiliate;
+ };
+ };
+ };
+ };
}
diff --git a/modules/kfmon/default.nix b/modules/kfmon/default.nix
index a2fcbb9..8ac50e4 100644
--- a/modules/kfmon/default.nix
+++ b/modules/kfmon/default.nix
@@ -83,23 +83,37 @@ in {
kfmon.file = mapAttrs' (n: v: {
name = "kfmon-config-${n}";
value = {
- text = generators.toINI {} v;
+ text = generators.toINI {
+ mkKeyValue = generators.mkKeyValueDefault {} " = ";
+ } v;
target =
let
- fixedN = if isSuffix ".ini" n then n else "${n}.ini";
+ fixedN = if hasSuffix ".ini" n then n else "${n}.ini";
in "config/${fixedN}";
};
- });
+ }) cfg.configs;
+
+ kfmon.configs = {
+ kfmon.daemon = {
+ db_timeout = 500;
+ use_syslog = 0;
+ with_notifications = 1;
+ };
+ kfmon-log.watch = {
+ filename = "/mnt/onboard/icons/kfmon.png";
+ action = "${cfg.devicePath}/bin/kfmon-printlog.sh";
+ label = "Show KFMon log";
+ hidden = 1;
+ block_spawns = 0;
+ do_db_update = 0;
+ db_title = "KFMon Log";
+ db_author = "NiLuJe";
+ db_comment = "Print the last few lines of KFMon's log";
+ };
+ };
}
(mkIf cfg.enable {
koboroot.include = singleton cfg.finalPackage;
- # koboroot.include = [
- # (pkgs.linkFarm [{
- # name = cfg.devicePath;
- # path = cfg._allFiles;
- # }])
- # cfg.package.KoboRoot
- # ];
})
];
}
diff --git a/modules/kobo/default.nix b/modules/kobo/default.nix
index 48bca11..ec0c469 100644
--- a/modules/kobo/default.nix
+++ b/modules/kobo/default.nix
@@ -65,23 +65,37 @@ in {
default = {};
description = "https://wiki.mobileread.com/wiki/Kobo_Configuration_Options";
};
+
+ analytics = mkOption {
+ type = ini.type;
+ default = {};
+ };
};
config = mkMerge [
{
kobo = {
conf = {
- FeatureSettings.ExcludeSyncFolders = ''(\.(?!kobo|adobe).+|([^.][^/]*/)+\..+)'';
ApplicationPreferences = {
+ CurrentLocale = "en";
SideloadedMode = true;
QuickTourShown = true;
};
+ FeatureSettings = {
+ ExcludeSyncFolders = ''(\\.(?!kobo|adobe).+|([^.][^/]*/)+\\..+)'';
+ };
+ DialogSettings = {
+ ReleaseNotesShown = true;
+ };
};
file = {
"Kobo eReader.conf" = mkIf (cfg.conf != {}) {
text = generators.toINI {} cfg.conf;
};
+ "Analytics.conf" = mkIf (cfg.analytics != {}) {
+ text = generators.toINI {} cfg.analytics;
+ };
};
};
}
diff --git a/modules/koreader/default.nix b/modules/koreader/default.nix
index ab1be83..41355b7 100644
--- a/modules/koreader/default.nix
+++ b/modules/koreader/default.nix
@@ -35,15 +35,6 @@ in {
];
};
};
- # _allFiles = mkOption {
- # type = types.package;
- # readOnly = true;
- # internal = true;
- # default = pkgs.symlinkJoin {
- # name = "koreader-files";
- # paths = mapAttrsToList (_: v: v._package) cfg.file ++ [ cfg.package ];
- # };
- # };
path = mkOption {
type = types.str;
@@ -66,7 +57,7 @@ in {
};
nickel = {
- enable = mkEnableOption "Add NickelMenu entry" // { default = true; };
+ enable = mkEnableOption "Add NickelMenu entry" // { default = ! config.kfmon.enable; };
};
};
@@ -88,6 +79,18 @@ in {
];
};
};
+
+ kfmon.configs.koreader.watch = {
+ filename = "/mnt/onboard/icons/koreader.png";
+ action = "${cfg.devicePath}/koreader.sh";
+ label = "KOReader";
+ hidden = 0;
+ block_spawns = 1;
+ do_db_update = 0;
+ db_title = "KOReader";
+ db_author = "KOReader Devs";
+ db_comment = "An eBook reader application";
+ };
})
];
}
diff --git a/modules/nickel/default.nix b/modules/nickel/default.nix
index 7663e93..d9c208a 100644
--- a/modules/nickel/default.nix
+++ b/modules/nickel/default.nix
@@ -159,19 +159,19 @@ in {
info.nickel = cfg.enable;
nickel = {
- file = mkMerge [
+ file =
(mapAttrs (_: v: {
text = concatMapStringsSep "\n" createGenerator v;
}) cfg.menu.generator)
-
+ //
(mapAttrs (_: v: {
text = concatStringsSep "\n" (mapAttrsToList createExperimental v);
}) cfg.menu.experimental)
-
+ //
(mapAttrs (_: v: {
text = concatMapStringsSep "\n" createMenuItem v;
}) cfg.menu.item)
- ];
+ ;
};
}
(mkIf cfg.enable {
diff --git a/modules/onboard/default.nix b/modules/onboard/default.nix
new file mode 100644
index 0000000..4af7573
--- /dev/null
+++ b/modules/onboard/default.nix
@@ -0,0 +1,49 @@
+{ config, pkgs, lib, ... }:
+with builtins // lib;
+let
+ cfg = config.onboard;
+in {
+ options.onboard = {
+
+ file = mkOption {
+ default = {};
+ type = types.attrsOf (types.submodule (pkgs.callPackage ../lib/file-type.nix {}));
+ apply = filterAttrs (_: v: v.enable);
+ };
+
+ devicePath = mkOption {
+ type = types.str;
+ readOnly = true;
+ internal = true;
+ default = "/mnt/onboard";
+ };
+
+ _createdFiles = mkOption {
+ type = types.package;
+ internal = true;
+ readOnly = true;
+ default = pkgs.buildEnv {
+ name = "onboard-files-created";
+ paths = mapAttrsToList (_: v: v._package) cfg.file;
+ extraPrefix = cfg.devicePath;
+ };
+ };
+
+ finalPackage = mkOption {
+ type = types.package;
+ readOnly = true;
+ internal = true;
+ default = pkgs.mergePaths {
+ name = "onboard-package";
+ paths = [
+ cfg._createdFiles
+ ];
+ };
+ };
+ };
+
+ config = {
+ koboroot.include = mkAfter [ cfg.finalPackage ];
+ };
+
+}
diff --git a/modules/plato/default.nix b/modules/plato/default.nix
index 74fe8c1..8312912 100644
--- a/modules/plato/default.nix
+++ b/modules/plato/default.nix
@@ -70,31 +70,6 @@ in {
cfg.package.KoboRoot
];
};
- # pkgs.symlinkJoin {
- # name = "plato-package";
- # paths = [
- # cfg._createdFiles
- # # (pkgs.linkFarm "plato-files" [{
- # # name = removePrefix "/" cfg.devicePath;
- # # path = cfg.package.out;
- # # }])
- # (pkgs.runCommandLocal "plato-files" {} ''
- # mkdir -p "$(dirname "$out${cfg.devicePath}")"
- # cp -r "${cfg.package.out}" "$out${cfg.devicePath}"
- # '')
- # cfg.package.KoboRoot
- # ];
- # };
- };
-
- _allFiles = mkOption {
- type = types.package;
- readOnly = true;
- internal = true;
- default = pkgs.symlinkJoin {
- name = "plato-files";
- paths = mapAttrsToList (_: v: v._package) cfg.file ++ [ cfg.package ];
- };
};
file = mkOption {
@@ -104,7 +79,7 @@ in {
};
nickel = {
- enable = mkEnableOption "Add NickelMenu option" // { default = true; };
+ enable = mkEnableOption "Add NickelMenu option" // { default = ! config.kfmon.enable; };
};
@@ -153,7 +128,7 @@ in {
default =
let
copyDicts = pkg: ''
- find ${pkg}/share/dictd/ -type f -regex '.*\.\(dict\(\.dz\)?\|index\)' -exec cp -v {} $out/ \;
+ find ${pkg}/ -type f -regex '^.*\.\(dict\(\.dz\)?\|index\)$' -exec cp -v {} $out/ \;
'';
in pkgs.runCommandLocal "plato-dictionaries" {} ''
mkdir $out
@@ -173,7 +148,7 @@ in {
default =
let
copyFonts = pkg: ''
- find ${pkg}/share/fonts/ -type f -regex '.*\.\(ttf\|otf\)' -exec cp -v {} $out/ \;
+ find ${pkg}/ -type f -regex '^.*\.\(ttf\|otf\)$' -exec cp -v {} $out/ \;
'';
in pkgs.runCommandLocal "plato-fonts" {} ''
mkdir $out
@@ -231,6 +206,18 @@ in {
];
};
};
+
+ kfmon.configs.plato.watch = {
+ filename = "/mnt/onboard/icons/plato.png";
+ action = "${cfg.devicePath}/plato.sh";
+ label = "Plato";
+ hidden = 0;
+ block_spawns = 1;
+ do_db_update = 0;
+ db_title = "Plato";
+ db_author = "Baskerville";
+ db_comment = "A document reader";
+ };
})
];
}
diff --git a/pkgs/firmware/default.nix b/pkgs/firmware/default.nix
index e33cf4a..2e6edf9 100644
--- a/pkgs/firmware/default.nix
+++ b/pkgs/firmware/default.nix
@@ -1,4 +1,4 @@
-{ stdenvNoCC, fetchzip, lib, rsync, kobo-utils, gawk, ... }:
+{ stdenvNoCC, fetchzip, lib, kobo-utils, gawk, ... }:
{ hardware, date, version, hash ? "", ... }:
stdenvNoCC.mkDerivation (finalAttrs: {
pname = "kobo-firmware";
@@ -13,13 +13,12 @@ stdenvNoCC.mkDerivation (finalAttrs: {
nativeBuildInputs = [
kobo-utils
gawk
- rsync
];
- outputs = [
- "out"
- "KoboRoot"
- ];
+ # outputs = [
+ # "out"
+ # "KoboRoot"
+ # ];
phases = [
"checkPhase"
@@ -40,10 +39,11 @@ stdenvNoCC.mkDerivation (finalAttrs: {
installPhase = ''
runHook preInstall
- rsync -av --links --exclude="KoboRoot.tgz" $src/ $out
+ cp -rv $src $out
+ # rsync -av --links --exclude="KoboRoot.tgz" $src/ $out
- mkdir $KoboRoot
- tar xvzf $src/KoboRoot.tgz --directory=$KoboRoot
+ # mkdir $KoboRoot
+ # tar xvzf $src/KoboRoot.tgz --directory=$KoboRoot
runHook postInstall
'';
@@ -58,6 +58,6 @@ stdenvNoCC.mkDerivation (finalAttrs: {
Kobo firmware files.
'';
platform = platforms.all;
- outputsToInstall = finalAttrs.outputs;
+ # outputsToInstall = finalAttrs.outputs;
};
})
diff --git a/pkgs/kfmon/default.nix b/pkgs/kfmon/default.nix
index 20addac..21a8231 100644
--- a/pkgs/kfmon/default.nix
+++ b/pkgs/kfmon/default.nix
@@ -25,7 +25,7 @@ stdenvNoCC.mkDerivation (finalAttrs: {
mkdir $KoboRoot
tar xvzf $src/.kobo/KoboRoot.tgz --directory=$KoboRoot
- install -D -t $KoboRoot/mnt/onboard $src/kfmon.png
+ install -D -t $KoboRoot/mnt/onboard/icons $src/kfmon.png
runHook postInstall
'';
diff --git a/pkgs/koreader/default.nix b/pkgs/koreader/default.nix
index 9427fe1..25cb2de 100644
--- a/pkgs/koreader/default.nix
+++ b/pkgs/koreader/default.nix
@@ -23,7 +23,7 @@ stdenvNoCC.mkDerivation (finalAttrs: {
mkdir $KoboRoot
- install -D -t $KoboRoot/mnt/onboard $src/koreader.png
+ install -D -t $KoboRoot/mnt/onboard/icons $src/koreader.png
runHook postInstall
'';
diff --git a/pkgs/plato/default.nix b/pkgs/plato/default.nix
index 6246f2b..36f9135 100644
--- a/pkgs/plato/default.nix
+++ b/pkgs/plato/default.nix
@@ -29,11 +29,11 @@ stdenvNoCC.mkDerivation (finalAttrs: {
installPhase = ''
runHook preInstall
- cp -r $src $out
+ cp -ra $src $out
mkdir $KoboRoot
- install -D -t $KoboRoot/mnt/onboard $picSrc/artworks/plato.png
+ install -D -t $KoboRoot/mnt/onboard/icons $picSrc/artworks/plato.png
runHook postInstall
'';