Clone of https://github.com/NixOS/nixpkgs.git (to stress-test knotserver)
at devShellTools-shell 107 lines 3.3 kB view raw
1{ 2 lib, 3 symlinkJoin, 4 makeWrapper, 5 anki, 6 anki-utils, 7 writeTextDir, 8 ankiAddons ? [ ], 9}: 10/* 11 `ankiAddons` 12 : A set of Anki add-ons to be installed. Here's a an example: 13 14 ~~~ 15 pkgs.anki.withAddons [ 16 # When the add-on is already available in nixpkgs 17 pkgs.ankiAddons.anki-connect 18 19 # When the add-on is not available in nixpkgs 20 (pkgs.anki-utils.buildAnkiAddon (finalAttrs: { 21 pname = "recolor"; 22 version = "3.1"; 23 src = pkgs.fetchFromGitHub { 24 owner = "AnKing-VIP"; 25 repo = "AnkiRecolor"; 26 rev = finalAttrs.version; 27 sparseCheckout = [ "src/addon" ]; 28 hash = "sha256-28DJq2l9DP8O6OsbNQCZ0pm4S6CQ3Yz0Vfvlj+iQw8Y="; 29 }; 30 sourceRoot = "source/src/addon"; 31 })) 32 33 # When the add-on needs to be configured 34 pkgs.ankiAddons.passfail2.withConfig { 35 config = { 36 again_button_name = "not quite"; 37 good_button_name = "excellent"; 38 }; 39 40 user_files = ./dir-to-be-merged-into-addon-user-files-dir; 41 }; 42 ] 43 ~~~ 44 45 The original `anki` executable will be wrapped so that it uses the addons from 46 `ankiAddons`. 47 48 This only works with Anki versions patched to support the `ANKI_ADDONS` environment 49 variable. `pkgs.anki` has this, but `pkgs.anki-bin` does not. 50*/ 51let 52 defaultAddons = [ 53 (anki-utils.buildAnkiAddon { 54 pname = "nixos"; 55 version = "1.0"; 56 src = writeTextDir "__init__.py" '' 57 import aqt 58 from aqt.qt import QMessageBox 59 import json 60 61 def addons_dialog_will_show(dialog: aqt.addons.AddonsDialog) -> None: 62 dialog.setEnabled(False) 63 QMessageBox.information( 64 dialog, 65 "NixOS Info", 66 ("These add-ons are managed by NixOS.<br>" 67 "See <a href='https://github.com/NixOS/nixpkgs/tree/master/pkgs/games/anki/with-addons.nix'>" 68 "github.com/NixOS/nixpkgs/tree/master/pkgs/games/anki/with-addons.nix</a>") 69 ) 70 71 def addon_tried_to_write_config(module: str, conf: dict) -> None: 72 message_box = QMessageBox( 73 QMessageBox.Icon.Warning, 74 "NixOS Info", 75 (f"The add-on module: \"{module}\" tried to update its config.<br>" 76 "See <a href='https://github.com/NixOS/nixpkgs/tree/master/pkgs/games/anki/with-addons.nix'>" 77 "github.com/NixOS/nixpkgs/tree/master/pkgs/games/anki/with-addons.nix</a>" 78 " for how to configure add-ons managed by NixOS.") 79 ) 80 message_box.setDetailedText(json.dumps(conf)) 81 message_box.exec() 82 83 aqt.gui_hooks.addons_dialog_will_show.append(addons_dialog_will_show) 84 aqt.mw.addonManager.writeConfig = addon_tried_to_write_config 85 ''; 86 meta.maintainers = with lib.maintainers; [ junestepp ]; 87 }) 88 ]; 89in 90symlinkJoin { 91 inherit (anki) version; 92 pname = "${anki.pname}-with-addons"; 93 94 paths = [ anki ]; 95 96 nativeBuildInputs = [ makeWrapper ]; 97 postBuild = '' 98 wrapProgram $out/bin/anki \ 99 --set ANKI_ADDONS "${anki-utils.buildAnkiAddonsDir (ankiAddons ++ defaultAddons)}" 100 ''; 101 102 meta = builtins.removeAttrs anki.meta [ 103 "name" 104 "outputsToInstall" 105 "position" 106 ]; 107}