From ebed8fb6dc2cbe9cf89b9ce8e6bbe3faf0986b08 Mon Sep 17 00:00:00 2001 From: June Stepp Date: Sat, 3 May 2025 22:02:13 -0500 Subject: [PATCH 01/17] maintainers: add junestepp --- maintainers/maintainer-list.nix | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/maintainers/maintainer-list.nix b/maintainers/maintainer-list.nix index d9731063b760..d0f623a81dd5 100644 --- a/maintainers/maintainer-list.nix +++ b/maintainers/maintainer-list.nix @@ -12509,6 +12509,13 @@ githubId = 39434424; name = "Felix Springer"; }; + junestepp = { + email = "git@junestepp.me"; + github = "junestepp"; + githubId = 26205306; + name = "June Stepp"; + keys = [ { fingerprint = "2561 0243 2233 CFE6 E13E 3C33 348C 6EB3 39AE C582"; } ]; + }; junjihashimoto = { email = "junji.hashimoto@gmail.com"; github = "junjihashimoto"; From 158bfaf735401219af77573e80c2892cdfc02ac4 Mon Sep 17 00:00:00 2001 From: Thomas Sowell Date: Wed, 28 May 2025 18:44:11 -0800 Subject: [PATCH 02/17] wiremix: init at 0.4.0 --- pkgs/by-name/wi/wiremix/package.nix | 38 +++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) create mode 100644 pkgs/by-name/wi/wiremix/package.nix diff --git a/pkgs/by-name/wi/wiremix/package.nix b/pkgs/by-name/wi/wiremix/package.nix new file mode 100644 index 000000000000..92f040b05e59 --- /dev/null +++ b/pkgs/by-name/wi/wiremix/package.nix @@ -0,0 +1,38 @@ +{ + lib, + fetchCrate, + rustPlatform, + pkg-config, + pipewire, +}: + +rustPlatform.buildRustPackage rec { + pname = "wiremix"; + version = "0.4.0"; + + src = fetchCrate { + inherit pname version; + hash = "sha256-LtwKG3phUuNgwXlAJMhZkOenYHGyXGRhNcr6+WKxVz0="; + }; + + useFetchCargoVendor = true; + cargoHash = "sha256-Qc+VubikiYox1zqy2HO3InRI8aFT8AorrFZBQhNGFOQ="; + + nativeBuildInputs = [ + pkg-config + rustPlatform.bindgenHook + ]; + buildInputs = [ pipewire ]; + + meta = { + description = "Simple TUI mixer for PipeWire"; + mainProgram = "wiremix"; + homepage = "https://github.com/tsowell/wiremix"; + license = with lib.licenses; [ + asl20 + mit + ]; + maintainers = with lib.maintainers; [ tsowell ]; + platforms = lib.platforms.linux; + }; +} From 62f1946374dc9d463544293244ffc596f22b5c59 Mon Sep 17 00:00:00 2001 From: Kira Bruneau Date: Thu, 29 May 2025 01:36:16 -0400 Subject: [PATCH 03/17] mangohud: hardcode libGL & libX11 --- pkgs/tools/graphics/mangohud/default.nix | 5 +++- .../mangohud/hardcode-dependencies.patch | 27 ++++++++++++++++++- 2 files changed, 30 insertions(+), 2 deletions(-) diff --git a/pkgs/tools/graphics/mangohud/default.nix b/pkgs/tools/graphics/mangohud/default.nix index cba3c24f70d8..b565ce52b92c 100644 --- a/pkgs/tools/graphics/mangohud/default.nix +++ b/pkgs/tools/graphics/mangohud/default.nix @@ -10,6 +10,8 @@ gnused, xdg-utils, dbus, + libGL, + libX11, hwdata, mangohud32, addDriverRunpath, @@ -20,7 +22,6 @@ ninja, pkg-config, unzip, - libX11, wayland, libXNVCtrl, nlohmann_json, @@ -138,6 +139,8 @@ stdenv.mkDerivation (finalAttrs: { ]; libdbus = dbus.lib; + libGL = libGL; + libX11 = libX11; inherit hwdata; }) ]; diff --git a/pkgs/tools/graphics/mangohud/hardcode-dependencies.patch b/pkgs/tools/graphics/mangohud/hardcode-dependencies.patch index c19b2081c97f..14589826208d 100644 --- a/pkgs/tools/graphics/mangohud/hardcode-dependencies.patch +++ b/pkgs/tools/graphics/mangohud/hardcode-dependencies.patch @@ -11,8 +11,33 @@ index 7379af1..4eef3fe 100644 SPDLOG_ERROR("Could not load libdbus-1.so.3"); return false; } +diff --git a/src/loaders/loader_glx.cpp b/src/loaders/loader_glx.cpp +index aa453b8..0f6479d 100644 +--- a/src/loaders/loader_glx.cpp ++++ b/src/loaders/loader_glx.cpp +@@ -23,7 +23,7 @@ bool glx_loader::Load() { + handle = real_dlopen("glxtrace.so", RTLD_LAZY); + #endif + if (!handle) +- handle = real_dlopen("libGL.so.1", RTLD_LAZY); ++ handle = real_dlopen("@libGL@/lib/libGL.so.1", RTLD_LAZY); + if (!handle) { + SPDLOG_ERROR("Failed to open " MANGOHUD_ARCH " libGL.so.1: {}", dlerror()); + return false; +diff --git a/src/loaders/loader_x11.cpp b/src/loaders/loader_x11.cpp +index 214fd50..2f08857 100644 +--- a/src/loaders/loader_x11.cpp ++++ b/src/loaders/loader_x11.cpp +@@ -110,6 +110,6 @@ static std::shared_ptr loader; + std::shared_ptr get_libx11() + { + if (!loader) +- loader = std::make_shared("libX11.so.6"); ++ loader = std::make_shared("@libX11@/lib/libX11.so.6"); + return loader; + } diff --git a/src/logging.cpp b/src/logging.cpp -index ca986d4..c4d99ea 100644 +index 4ef7023..e24f6da 100644 --- a/src/logging.cpp +++ b/src/logging.cpp @@ -28,8 +28,12 @@ string exec(string command) { From a6826b41036446fd2e66e0af48c88e2eaef6585f Mon Sep 17 00:00:00 2001 From: June Stepp Date: Sat, 3 May 2025 22:44:07 -0500 Subject: [PATCH 04/17] anki: add withAddons `anki.withAddons` creates a wrapped version of Anki with all the addons provided to the function installed. --- pkgs/games/anki/addons/anki-utils.nix | 126 ++++++++++++++++++ pkgs/games/anki/addons/default.nix | 6 + pkgs/games/anki/default.nix | 5 + .../patches/allow-setting-addons-folder.patch | 15 +++ pkgs/games/anki/with-addons.nix | 107 +++++++++++++++ pkgs/top-level/all-packages.nix | 2 + 6 files changed, 261 insertions(+) create mode 100644 pkgs/games/anki/addons/anki-utils.nix create mode 100644 pkgs/games/anki/addons/default.nix create mode 100644 pkgs/games/anki/patches/allow-setting-addons-folder.patch create mode 100644 pkgs/games/anki/with-addons.nix diff --git a/pkgs/games/anki/addons/anki-utils.nix b/pkgs/games/anki/addons/anki-utils.nix new file mode 100644 index 000000000000..e2247ebac874 --- /dev/null +++ b/pkgs/games/anki/addons/anki-utils.nix @@ -0,0 +1,126 @@ +{ + lib, + stdenv, + symlinkJoin, + lndir, + formats, + runCommand, +}: +{ + buildAnkiAddon = lib.extendMkDerivation { + constructDrv = stdenv.mkDerivation; + extendDrvArgs = + finalAttrs: + { + pname, + version, + src, + sourceRoot ? "", + configurePhase ? '' + runHook preConfigure + runHook postConfigure + '', + buildPhase ? '' + runHook preBuild + runHook postBuild + '', + dontPatchELF ? true, + dontStrip ? true, + nativeBuildInputs ? [ ], + passthru ? { }, + meta ? { }, + # Script run after "user_files" folder is populated. + # Used when an add-on needs to process and change "user_files" based + # on what the user added to it. + processUserFiles ? "", + ... + }: + { + inherit + version + src + sourceRoot + configurePhase + buildPhase + dontPatchELF + dontStrip + nativeBuildInputs + ; + + pname = "anki-addon-${pname}"; + + installPrefix = "share/anki/addons/${pname}"; + + installPhase = '' + runHook preInstall + + mkdir -p "$out/$installPrefix" + find . -mindepth 1 -maxdepth 1 | xargs -d'\n' mv -t "$out/$installPrefix/" + + runHook postInstall + ''; + + passthru = { + withConfig = + { + # JSON add-on config. The available options for an add-on are in its + # config.json file. + # See https://addon-docs.ankiweb.net/addon-config.html#config-json + config ? { }, + # Path to a folder to be merged with the add-on "user_files" folder. + # See https://addon-docs.ankiweb.net/addon-config.html#user-files. + userFiles ? null, + }: + let + metaConfigFormat = formats.json { }; + addonMetaConfig = metaConfigFormat.generate "meta.json" { inherit config; }; + in + symlinkJoin { + pname = "${finalAttrs.pname}-with-config"; + inherit (finalAttrs) version meta; + + paths = [ + finalAttrs.finalPackage + ]; + + postBuild = '' + cd $out/${finalAttrs.installPrefix} + + rm -f meta.json + ln -s ${addonMetaConfig} meta.json + + mkdir -p user_files + ${ + if (userFiles != null) then + '' + ${lndir}/bin/lndir -silent "${userFiles}" user_files + '' + else + "" + } + + ${processUserFiles} + ''; + }; + } // passthru; + + meta = { + platforms = lib.platforms.all; + } // meta; + }; + }; + + buildAnkiAddonsDir = + addonPackages: + let + addonDirs = map (pkg: "${pkg}/share/anki/addons") addonPackages; + addons = lib.concatMapStringsSep " " (p: "${p}/*") addonDirs; + in + runCommand "anki-addons" { } '' + mkdir $out + [[ '${addons}' ]] || exit 0 + for addon in ${addons}; do + ln -s "$addon" $out/ + done + ''; +} diff --git a/pkgs/games/anki/addons/default.nix b/pkgs/games/anki/addons/default.nix new file mode 100644 index 000000000000..e4090644a690 --- /dev/null +++ b/pkgs/games/anki/addons/default.nix @@ -0,0 +1,6 @@ +{ + callPackage, +}: +{ + +} diff --git a/pkgs/games/anki/default.nix b/pkgs/games/anki/default.nix index 8e1d69a26acf..3025afbe092d 100644 --- a/pkgs/games/anki/default.nix +++ b/pkgs/games/anki/default.nix @@ -10,6 +10,7 @@ lame, mpv-unwrapped, ninja, + callPackage, nixosTests, nodejs, nodejs-slim, @@ -129,6 +130,8 @@ python3.pkgs.buildPythonApplication { ./patches/disable-auto-update.patch ./patches/remove-the-gl-library-workaround.patch ./patches/skip-formatting-python-code.patch + # Used in with-addons.nix + ./patches/allow-setting-addons-folder.patch ]; inherit cargoDeps yarnOfflineCache; @@ -301,6 +304,7 @@ python3.pkgs.buildPythonApplication { ''; passthru = { + withAddons = ankiAddons: callPackage ./with-addons.nix { inherit ankiAddons; }; tests.anki-sync-server = nixosTests.anki-sync-server; }; @@ -324,6 +328,7 @@ python3.pkgs.buildPythonApplication { inherit (mesa.meta) platforms; maintainers = with maintainers; [ euank + junestepp oxij ]; # Reported to crash at launch on darwin (as of 2.1.65) diff --git a/pkgs/games/anki/patches/allow-setting-addons-folder.patch b/pkgs/games/anki/patches/allow-setting-addons-folder.patch new file mode 100644 index 000000000000..12f7846267d5 --- /dev/null +++ b/pkgs/games/anki/patches/allow-setting-addons-folder.patch @@ -0,0 +1,15 @@ +diff --git a/qt/aqt/profiles.py b/qt/aqt/profiles.py +index 469908c1b2..34612d6e08 100644 +--- a/qt/aqt/profiles.py ++++ b/qt/aqt/profiles.py +@@ -310,7 +310,9 @@ def profileFolder(self, create: bool = True) -> str: + return path + + def addonFolder(self) -> str: +- return self._ensureExists(os.path.join(self.base, "addons21")) ++ path = Path(os.environ.get("ANKI_ADDONS") or Path(self.base) / "addons21") ++ path.mkdir(parents=True, exist_ok=True) ++ return str(path.resolve()) + + def backupFolder(self) -> str: + return self._ensureExists(os.path.join(self.profileFolder(), "backups")) diff --git a/pkgs/games/anki/with-addons.nix b/pkgs/games/anki/with-addons.nix new file mode 100644 index 000000000000..d47c2c16f316 --- /dev/null +++ b/pkgs/games/anki/with-addons.nix @@ -0,0 +1,107 @@ +{ + lib, + symlinkJoin, + makeWrapper, + anki, + anki-utils, + writeTextDir, + ankiAddons ? [ ], +}: +/* + `ankiAddons` + : A set of Anki add-ons to be installed. Here's a an example: + + ~~~ + pkgs.anki.withAddons [ + # When the add-on is already available in nixpkgs + pkgs.ankiAddons.anki-connect + + # When the add-on is not available in nixpkgs + (pkgs.anki-utils.buildAnkiAddon (finalAttrs: { + pname = "recolor"; + version = "3.1"; + src = pkgs.fetchFromGitHub { + owner = "AnKing-VIP"; + repo = "AnkiRecolor"; + rev = finalAttrs.version; + sparseCheckout = [ "src/addon" ]; + hash = "sha256-28DJq2l9DP8O6OsbNQCZ0pm4S6CQ3Yz0Vfvlj+iQw8Y="; + }; + sourceRoot = "source/src/addon"; + })) + + # When the add-on needs to be configured + pkgs.ankiAddons.passfail2.withConfig { + config = { + again_button_name = "not quite"; + good_button_name = "excellent"; + }; + + user_files = ./dir-to-be-merged-into-addon-user-files-dir; + }; + ] + ~~~ + + The original `anki` executable will be wrapped so that it uses the addons from + `ankiAddons`. + + This only works with Anki versions patched to support the `ANKI_ADDONS` environment + variable. `pkgs.anki` has this, but `pkgs.anki-bin` does not. +*/ +let + defaultAddons = [ + (anki-utils.buildAnkiAddon { + pname = "nixos"; + version = "1.0"; + src = writeTextDir "__init__.py" '' + import aqt + from aqt.qt import QMessageBox + import json + + def addons_dialog_will_show(dialog: aqt.addons.AddonsDialog) -> None: + dialog.setEnabled(False) + QMessageBox.information( + dialog, + "NixOS Info", + ("These add-ons are managed by NixOS.
" + "See " + "github.com/NixOS/nixpkgs/tree/master/pkgs/games/anki/with-addons.nix") + ) + + def addon_tried_to_write_config(module: str, conf: dict) -> None: + message_box = QMessageBox( + QMessageBox.Icon.Warning, + "NixOS Info", + (f"The add-on module: \"{module}\" tried to update its config.
" + "See " + "github.com/NixOS/nixpkgs/tree/master/pkgs/games/anki/with-addons.nix" + " for how to configure add-ons managed by NixOS.") + ) + message_box.setDetailedText(json.dumps(conf)) + message_box.exec() + + aqt.gui_hooks.addons_dialog_will_show.append(addons_dialog_will_show) + aqt.mw.addonManager.writeConfig = addon_tried_to_write_config + ''; + meta.maintainers = with lib.maintainers; [ junestepp ]; + }) + ]; +in +symlinkJoin { + inherit (anki) version; + pname = "${anki.pname}-with-addons"; + + paths = [ anki ]; + + nativeBuildInputs = [ makeWrapper ]; + postBuild = '' + wrapProgram $out/bin/anki \ + --set ANKI_ADDONS "${anki-utils.buildAnkiAddonsDir (ankiAddons ++ defaultAddons)}" + ''; + + meta = builtins.removeAttrs anki.meta [ + "name" + "outputsToInstall" + "position" + ]; +} diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 21affad468e6..0907a7424602 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -14902,6 +14902,8 @@ with pkgs; amoeba-data = callPackage ../games/amoeba/data.nix { }; anki = callPackage ../games/anki { }; + anki-utils = callPackage ../games/anki/addons/anki-utils.nix { }; + ankiAddons = recurseIntoAttrs (callPackage ../games/anki/addons { }); anki-bin = callPackage ../games/anki/bin.nix { }; anki-sync-server = callPackage ../games/anki/sync-server.nix { }; From b5b252067914513d3df98717be44c32dc99918c5 Mon Sep 17 00:00:00 2001 From: Justin Bedo Date: Fri, 30 May 2025 09:21:28 +1000 Subject: [PATCH 05/17] strobealign: init 0.16.1 --- pkgs/by-name/st/strobealign/package.nix | 38 +++++++++++++++++++++++++ 1 file changed, 38 insertions(+) create mode 100644 pkgs/by-name/st/strobealign/package.nix diff --git a/pkgs/by-name/st/strobealign/package.nix b/pkgs/by-name/st/strobealign/package.nix new file mode 100644 index 000000000000..0dd0a976f512 --- /dev/null +++ b/pkgs/by-name/st/strobealign/package.nix @@ -0,0 +1,38 @@ +{ + stdenv, + lib, + fetchFromGitHub, + cmake, + pkg-config, + isa-l, + zlib, +}: +stdenv.mkDerivation (self: { + pname = "strobealign"; + version = "0.16.1"; + + src = fetchFromGitHub { + owner = "ksahlin"; + repo = "strobealign"; + tag = "v${self.version}"; + hash = "sha256-RZxIT6iwanRuPk2sWv/QRkUaPMdterOKCo30FPZHC8o="; + }; + + nativeBuildInputs = [ + cmake + pkg-config + ]; + buildInputs = [ + zlib + isa-l + ]; + + meta = { + description = "Read aligner for short reads"; + mainProgram = "strobealign"; + license = lib.licenses.mit; + homepage = "https://github.com/ksahlin/strobealign"; + maintainers = [ lib.maintainers.jbedo ]; + platforms = lib.platforms.unix; + }; +}) From d0c2fbd21b465770eb546b4dff6c649656dd1842 Mon Sep 17 00:00:00 2001 From: VuiMuich Date: Fri, 30 May 2025 12:28:44 +0200 Subject: [PATCH 06/17] iwmenu: init at 0.2.0 --- pkgs/by-name/iw/iwmenu/package.nix | 40 ++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) create mode 100644 pkgs/by-name/iw/iwmenu/package.nix diff --git a/pkgs/by-name/iw/iwmenu/package.nix b/pkgs/by-name/iw/iwmenu/package.nix new file mode 100644 index 000000000000..e42d3c12c42a --- /dev/null +++ b/pkgs/by-name/iw/iwmenu/package.nix @@ -0,0 +1,40 @@ +{ + dbus, + fetchFromGitHub, + lib, + iwd, + rustPlatform, +}: + +rustPlatform.buildRustPackage rec { + pname = "iwmenu"; + version = "0.2.0"; + + src = fetchFromGitHub { + owner = "e-tho"; + repo = "iwmenu"; + tag = "v${version}"; + hash = "sha256-F1w2Lp0/iXUHh0PXAZ/wD78C2uVtAcWlEKqBI5I/hnE="; + }; + + cargoHash = "sha256-NjA8n11pOytXsotEQurYxDHPhwXG5vpdlyscmVUIzfA="; + + buildInputs = [ + dbus + iwd + ]; + + meta = { + homepage = "https://github.com/e-tho/iwmenu"; + description = "Launcher-driven Wi-Fi manager for Linux"; + longDescription = '' + Use `iwmenu --launcher ` + Supported launchers are: `dmenu`, `fuzzel`, `rofi`, `walker` and `custom` with `stdin` + for details refer to https://github.com/e-tho/iwmenu/blob/main/README.md#usage + ''; + mainProgram = "iwmenu"; + platforms = lib.platforms.linux; + license = lib.licenses.gpl3Plus; + maintainers = with lib.maintainers; [ vuimuich ]; + }; +} From d6adcac86404c9d9ef82dbe898f3b01fcc6dc0cf Mon Sep 17 00:00:00 2001 From: "R. Ryantm" Date: Sun, 1 Jun 2025 02:24:12 +0000 Subject: [PATCH 07/17] zsh-forgit: 25.05.0 -> 25.06.0 --- pkgs/by-name/zs/zsh-forgit/package.nix | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkgs/by-name/zs/zsh-forgit/package.nix b/pkgs/by-name/zs/zsh-forgit/package.nix index 646708ebdf1b..222a45ca9fc2 100644 --- a/pkgs/by-name/zs/zsh-forgit/package.nix +++ b/pkgs/by-name/zs/zsh-forgit/package.nix @@ -15,13 +15,13 @@ stdenvNoCC.mkDerivation (finalAttrs: { pname = "zsh-forgit"; - version = "25.05.0"; + version = "25.06.0"; src = fetchFromGitHub { owner = "wfxr"; repo = "forgit"; tag = finalAttrs.version; - hash = "sha256-U+MtgunPEmo/kv/lQI2BBi2WUBgt3wFkaUdfRzJWoGQ="; + hash = "sha256-D1we3pOPXNsK8KgEaRBAmD5eH1i2ud4zX1GwYbOyZvY="; }; strictDeps = true; From a35490b72db1b186c82b63bf2b1fc4d692eba45a Mon Sep 17 00:00:00 2001 From: "R. Ryantm" Date: Sun, 8 Jun 2025 11:18:05 +0000 Subject: [PATCH 08/17] geminicommit: 0.4.0 -> 0.4.1 --- pkgs/by-name/ge/geminicommit/package.nix | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/pkgs/by-name/ge/geminicommit/package.nix b/pkgs/by-name/ge/geminicommit/package.nix index ff58bebd43bd..2b69183918c9 100644 --- a/pkgs/by-name/ge/geminicommit/package.nix +++ b/pkgs/by-name/ge/geminicommit/package.nix @@ -8,16 +8,16 @@ buildGoModule (finalAttrs: { pname = "geminicommit"; - version = "0.4.0"; + version = "0.4.1"; src = fetchFromGitHub { owner = "tfkhdyt"; repo = "geminicommit"; tag = "v${finalAttrs.version}"; - hash = "sha256-hJevJkniyICUUr1UyS0A5SKuuYRU0dGHMWzF99Yr2Eo="; + hash = "sha256-QUI5JI1udOo3IOXegoes3pwwgSfxXIjxXIPsA5SuAJo="; }; - vendorHash = "sha256-IfqlPg+HPcOfjlwwuLi2/R21UD83xQzWyUmzM7JSDEs="; + vendorHash = "sha256-AFm+1RQ6sMSe+kY/cw1Ly/8WEj2/yk0nJQiEJzV6jKg="; nativeBuildInputs = [ installShellFiles From 4c1ec45e5abf6d18b3b3972845384f565ff1d4f9 Mon Sep 17 00:00:00 2001 From: June Stepp Date: Sat, 3 May 2025 22:46:34 -0500 Subject: [PATCH 09/17] ankiAddons.adjust-sound-volume: init at 0.0.6 --- .../addons/adjust-sound-volume/default.nix | 23 +++++++++++++++++++ pkgs/games/anki/addons/default.nix | 2 +- 2 files changed, 24 insertions(+), 1 deletion(-) create mode 100644 pkgs/games/anki/addons/adjust-sound-volume/default.nix diff --git a/pkgs/games/anki/addons/adjust-sound-volume/default.nix b/pkgs/games/anki/addons/adjust-sound-volume/default.nix new file mode 100644 index 000000000000..cdeb7d3d727a --- /dev/null +++ b/pkgs/games/anki/addons/adjust-sound-volume/default.nix @@ -0,0 +1,23 @@ +{ + lib, + anki-utils, + fetchFromGitHub, + nix-update-script, +}: +anki-utils.buildAnkiAddon (finalAttrs: { + pname = "adjust-sound-volume"; + version = "0.0.6"; + src = fetchFromGitHub { + owner = "mnogu"; + repo = "adjust-sound-volume"; + rev = "v${finalAttrs.version}"; + hash = "sha256-6reIUz+tHKd4KQpuofLa/tIL5lCloj3yODZ8Cz29jFU="; + }; + passthru.updateScript = nix-update-script { }; + meta = { + description = "Add a new menu item for adjusting the sound volume"; + homepage = "https://github.com/mnogu/adjust-sound-volume"; + license = lib.licenses.agpl3Plus; + maintainers = with lib.maintainers; [ junestepp ]; + }; +}) diff --git a/pkgs/games/anki/addons/default.nix b/pkgs/games/anki/addons/default.nix index e4090644a690..e4808f566295 100644 --- a/pkgs/games/anki/addons/default.nix +++ b/pkgs/games/anki/addons/default.nix @@ -2,5 +2,5 @@ callPackage, }: { - + adjust-sound-volume = callPackage ./adjust-sound-volume { }; } From 2d98ddf69951424c57714216844f848e03f92062 Mon Sep 17 00:00:00 2001 From: June Stepp Date: Sat, 3 May 2025 22:48:03 -0500 Subject: [PATCH 10/17] ankiAddons.anki-connect: init at 24.7.25.0 --- .../anki/addons/anki-connect/default.nix | 27 +++++++++++++++++++ pkgs/games/anki/addons/default.nix | 2 ++ 2 files changed, 29 insertions(+) create mode 100644 pkgs/games/anki/addons/anki-connect/default.nix diff --git a/pkgs/games/anki/addons/anki-connect/default.nix b/pkgs/games/anki/addons/anki-connect/default.nix new file mode 100644 index 000000000000..27a0411e52f7 --- /dev/null +++ b/pkgs/games/anki/addons/anki-connect/default.nix @@ -0,0 +1,27 @@ +{ + lib, + anki-utils, + fetchFromSourcehut, + nix-update-script, +}: +anki-utils.buildAnkiAddon (finalAttrs: { + pname = "anki-connect"; + version = "24.7.25.0"; + src = fetchFromSourcehut { + owner = "~foosoft"; + repo = "anki-connect"; + rev = finalAttrs.version; + hash = "sha256-N98EoCE/Bx+9QUQVeU64FXHXSek7ASBVv1b9ltJ4G1U="; + }; + sourceRoot = "${finalAttrs.src.name}/plugin"; + passthru.updateScript = nix-update-script { }; + meta = { + description = '' + Enable external applications such as Yomichan to communicate + with Anki over a simple HTTP API + ''; + homepage = "https://foosoft.net/projects/anki-connect/"; + license = lib.licenses.gpl3Plus; + maintainers = with lib.maintainers; [ junestepp ]; + }; +}) diff --git a/pkgs/games/anki/addons/default.nix b/pkgs/games/anki/addons/default.nix index e4808f566295..f63f75a27499 100644 --- a/pkgs/games/anki/addons/default.nix +++ b/pkgs/games/anki/addons/default.nix @@ -3,4 +3,6 @@ }: { adjust-sound-volume = callPackage ./adjust-sound-volume { }; + + anki-connect = callPackage ./anki-connect { }; } From f0e483d06dd2bdaa512d9131415482b76dcda7f9 Mon Sep 17 00:00:00 2001 From: June Stepp Date: Sat, 3 May 2025 22:50:12 -0500 Subject: [PATCH 11/17] ankiAddons.passfail2: init at 0.3.0-unstable-2024-10-17 --- pkgs/games/anki/addons/default.nix | 2 ++ pkgs/games/anki/addons/passfail2/default.nix | 34 ++++++++++++++++++++ 2 files changed, 36 insertions(+) create mode 100644 pkgs/games/anki/addons/passfail2/default.nix diff --git a/pkgs/games/anki/addons/default.nix b/pkgs/games/anki/addons/default.nix index f63f75a27499..842e2fbc9c2d 100644 --- a/pkgs/games/anki/addons/default.nix +++ b/pkgs/games/anki/addons/default.nix @@ -5,4 +5,6 @@ adjust-sound-volume = callPackage ./adjust-sound-volume { }; anki-connect = callPackage ./anki-connect { }; + + passfail2 = callPackage ./passfail2 { }; } diff --git a/pkgs/games/anki/addons/passfail2/default.nix b/pkgs/games/anki/addons/passfail2/default.nix new file mode 100644 index 000000000000..73746c1a568a --- /dev/null +++ b/pkgs/games/anki/addons/passfail2/default.nix @@ -0,0 +1,34 @@ +{ + lib, + anki-utils, + fetchFromGitHub, + nix-update-script, +}: +anki-utils.buildAnkiAddon (finalAttrs: { + pname = "passfail2"; + version = "0.3.0-unstable-2024-10-17"; + src = fetchFromGitHub { + owner = "lambdadog"; + repo = "passfail2"; + rev = "d5313e4f1217e968b36edbc0a4fe92386209ffe6"; + hash = "sha256-HMe6/fHpYj/MN0dUFj3W71vK7qqcp9l1xm8SAiKkJLs="; + }; + buildPhase = '' + runHook preBuild + + substitute build_info.py.in build_info.py \ + --replace-fail '$version' '"${finalAttrs.version}"' + + runHook postBuild + ''; + passthru.updateScript = nix-update-script { }; + meta = { + description = '' + Replaces the default Anki review buttons with only two options: + “Fail” and “Pass” + ''; + homepage = "https://github.com/lambdadog/passfail2"; + license = lib.licenses.gpl3Plus; + maintainers = with lib.maintainers; [ junestepp ]; + }; +}) From 133b3319e54d9fe5383a525c8ad4a207c23f4354 Mon Sep 17 00:00:00 2001 From: June Stepp Date: Sat, 3 May 2025 22:51:52 -0500 Subject: [PATCH 12/17] ankiAddons.reviewer-refocus-card: init at 0-unstable-2022-12-24 --- pkgs/games/anki/addons/default.nix | 2 ++ .../addons/reviewer-refocus-card/default.nix | 30 +++++++++++++++++++ 2 files changed, 32 insertions(+) create mode 100644 pkgs/games/anki/addons/reviewer-refocus-card/default.nix diff --git a/pkgs/games/anki/addons/default.nix b/pkgs/games/anki/addons/default.nix index 842e2fbc9c2d..bcbfc15523f5 100644 --- a/pkgs/games/anki/addons/default.nix +++ b/pkgs/games/anki/addons/default.nix @@ -7,4 +7,6 @@ anki-connect = callPackage ./anki-connect { }; passfail2 = callPackage ./passfail2 { }; + + reviewer-refocus-card = callPackage ./reviewer-refocus-card { }; } diff --git a/pkgs/games/anki/addons/reviewer-refocus-card/default.nix b/pkgs/games/anki/addons/reviewer-refocus-card/default.nix new file mode 100644 index 000000000000..6fde24afd22e --- /dev/null +++ b/pkgs/games/anki/addons/reviewer-refocus-card/default.nix @@ -0,0 +1,30 @@ +{ + lib, + anki-utils, + fetchFromGitHub, + nix-update-script, +}: +anki-utils.buildAnkiAddon (finalAttrs: { + pname = "reviewer-refocus-card"; + version = "0-unstable-2022-12-24"; + src = fetchFromGitHub { + owner = "glutanimate"; + repo = "anki-addons-misc"; + rev = "7b981836e0a6637a1853f3e8d73d022ab95fed31"; + sparseCheckout = [ "src/reviewer_refocus_card" ]; + hash = "sha256-181hyc4ED+0lBzn1FnrBvNIYIUQF8xEDB3uHK6SkpHw="; + }; + sourceRoot = "${finalAttrs.src.name}/src/reviewer_refocus_card"; + passthru.updateScript = nix-update-script { + extraArgs = [ "--version=branch" ]; + }; + meta = { + description = '' + Set focus to the card area, allowing you to scroll through your cards using + Page Up / Page Down, etc + ''; + homepage = "https://github.com/glutanimate/anki-addons-misc"; + license = lib.licenses.agpl3Only; + maintainers = with lib.maintainers; [ junestepp ]; + }; +}) From 6eebb20365bfe01caaf27b10acc876e84f282620 Mon Sep 17 00:00:00 2001 From: June Stepp Date: Sat, 3 May 2025 22:53:56 -0500 Subject: [PATCH 13/17] ankiAddons.yomichan-forvo-server: init at 0-unstable-2024-10-21 --- pkgs/games/anki/addons/default.nix | 2 ++ .../addons/yomichan-forvo-server/default.nix | 25 +++++++++++++++++++ 2 files changed, 27 insertions(+) create mode 100644 pkgs/games/anki/addons/yomichan-forvo-server/default.nix diff --git a/pkgs/games/anki/addons/default.nix b/pkgs/games/anki/addons/default.nix index bcbfc15523f5..7f60c7e29e25 100644 --- a/pkgs/games/anki/addons/default.nix +++ b/pkgs/games/anki/addons/default.nix @@ -9,4 +9,6 @@ passfail2 = callPackage ./passfail2 { }; reviewer-refocus-card = callPackage ./reviewer-refocus-card { }; + + yomichan-forvo-server = callPackage ./yomichan-forvo-server { }; } diff --git a/pkgs/games/anki/addons/yomichan-forvo-server/default.nix b/pkgs/games/anki/addons/yomichan-forvo-server/default.nix new file mode 100644 index 000000000000..751798f6e3a6 --- /dev/null +++ b/pkgs/games/anki/addons/yomichan-forvo-server/default.nix @@ -0,0 +1,25 @@ +{ + lib, + anki-utils, + fetchFromGitHub, + nix-update-script, +}: +anki-utils.buildAnkiAddon { + pname = "yomichan-forvo-server"; + version = "0-unstable-2024-10-21"; + src = fetchFromGitHub { + owner = "jamesnicolas"; + repo = "yomichan-forvo-server"; + rev = "364fc6d5d10969f516e0fa283460dfaf08c98e15"; + hash = "sha256-Jpee9hkXCiBmSW7hzJ1rAg45XVIiLC8WENc09+ySFVI="; + }; + passthru.updateScript = nix-update-script { + extraArgs = [ "--version=branch" ]; + }; + meta = { + description = "Audio server for yomichan that scrapes forvo for audio files"; + homepage = "https://github.com/jamesnicolas/yomichan-forvo-server"; + license = lib.licenses.unlicense; + maintainers = with lib.maintainers; [ junestepp ]; + }; +} From 8dc12689a0a6e07d9e977e741c04c3a5df240d5f Mon Sep 17 00:00:00 2001 From: June Stepp Date: Sat, 3 May 2025 22:55:54 -0500 Subject: [PATCH 14/17] ankiAddons.local-audio-yomichan: init at 0-unstable-2025-04-26 --- pkgs/games/anki/addons/default.nix | 2 + .../addons/local-audio-yomichan/default.nix | 73 +++++++++++++++++++ 2 files changed, 75 insertions(+) create mode 100644 pkgs/games/anki/addons/local-audio-yomichan/default.nix diff --git a/pkgs/games/anki/addons/default.nix b/pkgs/games/anki/addons/default.nix index 7f60c7e29e25..57560aad77c4 100644 --- a/pkgs/games/anki/addons/default.nix +++ b/pkgs/games/anki/addons/default.nix @@ -6,6 +6,8 @@ anki-connect = callPackage ./anki-connect { }; + local-audio-yomichan = callPackage ./local-audio-yomichan { }; + passfail2 = callPackage ./passfail2 { }; reviewer-refocus-card = callPackage ./reviewer-refocus-card { }; diff --git a/pkgs/games/anki/addons/local-audio-yomichan/default.nix b/pkgs/games/anki/addons/local-audio-yomichan/default.nix new file mode 100644 index 000000000000..7ba361c8590c --- /dev/null +++ b/pkgs/games/anki/addons/local-audio-yomichan/default.nix @@ -0,0 +1,73 @@ +{ + lib, + anki-utils, + fetchFromGitHub, + python3, + nix-update-script, +}: +anki-utils.buildAnkiAddon (finalAttrs: { + pname = "local-audio-yomichan"; + version = "0-unstable-2025-04-26"; + src = fetchFromGitHub { + owner = "yomidevs"; + repo = "local-audio-yomichan"; + rev = "34750f1d8ca1cb473128fea7976a4d981e5e78a4"; + sparseCheckout = [ "plugin" ]; + hash = "sha256-2gyggcvxParay+1B7Sg2COKyocoxaRO1WTz+ymdRp4w="; + }; + sourceRoot = "${finalAttrs.src.name}/plugin"; + processUserFiles = '' + # Addon will try to load extra stuff unless Python package name is "plugin". + temp=$(mktemp -d) + ln -s $PWD $temp/plugin + # Addoon expects `user_files` dir at `$XDG_DATA_HOME/local-audio-yomichan` + ln -s $PWD/user_files $temp/local-audio-yomichan + + PYTHONPATH=$temp \ + WO_ANKI=1 \ + XDG_DATA_HOME=$temp \ + ${lib.getExe python3} -c \ + "from plugin import db_utils; \ + db_utils.init_db()" + ''; + passthru.updateScript = nix-update-script { + extraArgs = [ "--version=branch" ]; + }; + meta = { + description = "Run a local audio server for Yomitan"; + longDescription = '' + This add-on must be configured with an audio collection. + + Example: + + ```nix + pkgs.ankiAddons.local-audio-yomichan.withConfig { + userFiles = + let + audio-collection = + pkgs.runCommand "local-yomichan-audio-collection" + { + outputHashMode = "recursive"; + outputHash = "sha256-NxbcXh2SDPfCd+ZHAWT5JdxRecNbT4Xpo0pxX5/DOfo="; + + src = pkgs.requireFile { + name = "local-yomichan-audio-collection-2023-06-11-opus.tar.xz"; + url = "https://github.com/yomidevs/local-audio-yomichan?tab=readme-ov-file#steps"; + sha256 = "1xsxp8iggklv77rj972mqaa1i8f9hvr3ir0r2mwfqcdz4q120hr1"; + }; + } + ''' + mkdir -p $out + cd $out + tar -xf "$src" + '''; + in + "''${audio-collection}/user_files"; + } + ``` + ''; + homepage = "https://github.com/yomidevs/local-audio-yomichan"; + license = lib.licenses.mit; + maintainers = with lib.maintainers; [ junestepp ]; + }; +}) From e9216c0d4cecf55013a275abea07076136dea8d5 Mon Sep 17 00:00:00 2001 From: June Stepp Date: Thu, 15 May 2025 13:29:45 -0500 Subject: [PATCH 15/17] ankiAddons.recolor: init at 3.1 --- pkgs/games/anki/addons/default.nix | 2 ++ pkgs/games/anki/addons/recolor/default.nix | 27 ++++++++++++++++++++++ 2 files changed, 29 insertions(+) create mode 100644 pkgs/games/anki/addons/recolor/default.nix diff --git a/pkgs/games/anki/addons/default.nix b/pkgs/games/anki/addons/default.nix index 57560aad77c4..d602b1ea877e 100644 --- a/pkgs/games/anki/addons/default.nix +++ b/pkgs/games/anki/addons/default.nix @@ -10,6 +10,8 @@ passfail2 = callPackage ./passfail2 { }; + recolor = callPackage ./recolor { }; + reviewer-refocus-card = callPackage ./reviewer-refocus-card { }; yomichan-forvo-server = callPackage ./yomichan-forvo-server { }; diff --git a/pkgs/games/anki/addons/recolor/default.nix b/pkgs/games/anki/addons/recolor/default.nix new file mode 100644 index 000000000000..3e60b0193904 --- /dev/null +++ b/pkgs/games/anki/addons/recolor/default.nix @@ -0,0 +1,27 @@ +{ + lib, + anki-utils, + fetchFromGitHub, + nix-update-script, +}: +anki-utils.buildAnkiAddon (finalAttrs: { + pname = "recolor"; + version = "3.1"; + src = fetchFromGitHub { + owner = "AnKing-VIP"; + repo = "AnkiRecolor"; + rev = finalAttrs.version; + sparseCheckout = [ "src/addon" ]; + hash = "sha256-28DJq2l9DP8O6OsbNQCZ0pm4S6CQ3Yz0Vfvlj+iQw8Y="; + }; + sourceRoot = "${finalAttrs.src.name}/src/addon"; + passthru.updateScript = nix-update-script { }; + meta = { + description = "ReColor your Anki desktop to whatever aesthetic you like"; + homepage = "https://github.com/AnKing-VIP/AnkiRecolor"; + # No license file, but it can be assumed to be AGPL3 based on + # https://ankiweb.net/account/terms. + license = lib.licenses.agpl3Only; + maintainers = with lib.maintainers; [ junestepp ]; + }; +}) From 827ec2499b454f104f9fbef86b81ba0267cea74e Mon Sep 17 00:00:00 2001 From: Bryan Lai Date: Mon, 9 Jun 2025 17:09:44 +0800 Subject: [PATCH 16/17] geminicommit: rename mainProgram & add versionCheckHook --- pkgs/by-name/ge/geminicommit/package.nix | 22 +++++++++++++++++++--- 1 file changed, 19 insertions(+), 3 deletions(-) diff --git a/pkgs/by-name/ge/geminicommit/package.nix b/pkgs/by-name/ge/geminicommit/package.nix index 2b69183918c9..2c83ac9c285a 100644 --- a/pkgs/by-name/ge/geminicommit/package.nix +++ b/pkgs/by-name/ge/geminicommit/package.nix @@ -4,6 +4,7 @@ fetchFromGitHub, installShellFiles, stdenv, + versionCheckHook, }: buildGoModule (finalAttrs: { @@ -26,9 +27,18 @@ buildGoModule (finalAttrs: { postInstall = let cmd = finalAttrs.meta.mainProgram; + goDefaultCmd = finalAttrs.pname; in - lib.optionalString (with stdenv; buildPlatform.canExecute hostPlatform) '' - # `geminicommit` requires write permissions to $HOME for its `config.toml` + # The official github released binary is renamed since v0.4.1, + # see: https://github.com/tfkhdyt/geminicommit/releases/tag/v0.4.1 + # Here we link the old name (which is also the `go build` default name) + # for backward compatibility: + '' + mv $out/bin/${goDefaultCmd} $out/bin/${cmd} + ln -s $out/bin/${cmd} $out/bin/${goDefaultCmd} + '' + + lib.optionalString (with stdenv; buildPlatform.canExecute hostPlatform) '' + # `gmc` requires write permissions to $HOME for its `config.toml` # ... which is automatically initiated on startup export HOME=$(mktemp -d) @@ -39,11 +49,17 @@ buildGoModule (finalAttrs: { done ''; + nativeInstallCheckInputs = [ + versionCheckHook + ]; + + doInstallCheck = true; + meta = { description = "CLI that generates git commit messages with Google Gemini AI"; homepage = "https://github.com/tfkhdyt/geminicommit"; license = lib.licenses.gpl3Only; maintainers = with lib.maintainers; [ bryango ]; - mainProgram = "geminicommit"; + mainProgram = "gmc"; }; }) From 853e5dd9210bbb352b96065fafdfca16c5a1f621 Mon Sep 17 00:00:00 2001 From: Julian Stecklina Date: Mon, 9 Jun 2025 11:11:54 +0200 Subject: [PATCH 17/17] git-machete: move to pkgs/by-name --- .../gi/git-machete/package.nix} | 19 ++++++++++--------- pkgs/top-level/all-packages.nix | 2 -- 2 files changed, 10 insertions(+), 11 deletions(-) rename pkgs/{applications/version-management/git-machete/default.nix => by-name/gi/git-machete/package.nix} (88%) diff --git a/pkgs/applications/version-management/git-machete/default.nix b/pkgs/by-name/gi/git-machete/package.nix similarity index 88% rename from pkgs/applications/version-management/git-machete/default.nix rename to pkgs/by-name/gi/git-machete/package.nix index 5b9db51a215f..6dc30fe03830 100644 --- a/pkgs/applications/version-management/git-machete/default.nix +++ b/pkgs/by-name/gi/git-machete/package.nix @@ -1,15 +1,13 @@ { lib, - buildPythonApplication, - pytest-mock, - pytestCheckHook, + python3, fetchFromGitHub, installShellFiles, git, nix-update-script, }: -buildPythonApplication rec { +python3.pkgs.buildPythonApplication rec { pname = "git-machete"; version = "3.34.1"; @@ -22,11 +20,14 @@ buildPythonApplication rec { nativeBuildInputs = [ installShellFiles ]; - nativeCheckInputs = [ - git - pytest-mock - pytestCheckHook - ]; + nativeCheckInputs = + [ + git + ] + ++ (with python3.pkgs; [ + pytest-mock + pytestCheckHook + ]); disabledTests = [ # Requires fully functioning shells including zsh modules and bash diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 9465ef1cb5d8..31f5b7fe7c9e 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -1307,8 +1307,6 @@ with pkgs; git-imerge = python3Packages.callPackage ../applications/version-management/git-imerge { }; - git-machete = python3Packages.callPackage ../applications/version-management/git-machete { }; - git-publish = python3Packages.callPackage ../applications/version-management/git-publish { }; git-recent = callPackage ../applications/version-management/git-recent {