From df8dd110ad98a64305caee5140f9d4e94fe1df8a Mon Sep 17 00:00:00 2001 From: Leyla Becker Date: Tue, 7 Apr 2026 08:45:11 -0500 Subject: [PATCH] refactor: made pkgs dendrites --- flake.nix | 4 + legacy-modules/common-modules/default.nix | 7 -- .../common-modules/overlays/default.nix | 40 ------ .../common-modules/pkgs/cline/default.nix | 53 -------- .../pkgs/codium-extensions/ai-code.nix | 42 ------- .../pkgs/codium-extensions/default.nix | 3 - .../common-modules/pkgs/default.nix | 54 -------- .../common-modules/pkgs/e621-downloader.nix | 36 ------ .../pkgs/firefox-extensions/default.nix | 17 --- .../deutsch-de-language-pack.nix | 18 --- .../dizionario-italiano.nix | 18 --- .../italiano-it-language-pack.nix | 18 --- .../common-modules/pkgs/gdx-liftoff.nix | 48 -------- .../common-modules/pkgs/h3-c-lib.nix | 36 ------ .../pkgs/mapillary-uploader.nix | 39 ------ .../common-modules/pkgs/panoramax.nix | 105 ---------------- .../common-modules/pkgs/prostudiomasters.nix | 33 ----- .../common-modules/pkgs/python/default.nix | 18 --- .../pkgs/python/geojson-pydantic.nix | 48 -------- .../pkgs/python/geopic-tag-reader.nix | 70 ----------- .../common-modules/pkgs/python/h3.nix | 81 ------------ .../common-modules/pkgs/python/pyexiv2.nix | 49 -------- .../pkgs/python/pygeofilter.nix | 52 -------- .../common-modules/pkgs/python/pygeoif.nix | 48 -------- .../common-modules/pkgs/python/rfeed.nix | 40 ------ legacy-modules/common-modules/pkgs/sgblur.nix | 65 ---------- .../common-modules/pkgs/webtoon-dl.nix | 18 --- modules/nixos/overlays/default.nix | 42 +++++++ .../nixos}/pkgs/cline/cline-package-lock.json | 0 modules/nixos/pkgs/cline/default.nix | 63 ++++++++++ .../nixos/pkgs/codium-extensions/ai-code.nix | 46 +++++++ .../nixos/pkgs/codium-extensions/default.nix | 11 ++ modules/nixos/pkgs/default.nix | 21 ++++ modules/nixos/pkgs/e621-downloader.nix | 46 +++++++ .../nixos/pkgs/firefox-extensions/default.nix | 25 ++++ .../deutsch-de-language-pack.nix | 22 ++++ .../dizionario-italiano.nix | 22 ++++ .../italiano-it-language-pack.nix | 22 ++++ modules/nixos/pkgs/gdx-liftoff.nix | 58 +++++++++ modules/nixos/pkgs/h3-c-lib.nix | 47 +++++++ modules/nixos/pkgs/mapillary-uploader.nix | 49 ++++++++ modules/nixos/pkgs/panoramax.nix | 115 ++++++++++++++++++ modules/nixos/pkgs/prostudiomasters.nix | 43 +++++++ modules/nixos/pkgs/python/default.nix | 22 ++++ .../nixos/pkgs/python/geojson-pydantic.nix | 52 ++++++++ .../nixos/pkgs/python/geopic-tag-reader.nix | 74 +++++++++++ modules/nixos/pkgs/python/h3.nix | 85 +++++++++++++ modules/nixos/pkgs/python/pyexiv2.nix | 53 ++++++++ modules/nixos/pkgs/python/pygeofilter.nix | 56 +++++++++ modules/nixos/pkgs/python/pygeoif.nix | 52 ++++++++ modules/nixos/pkgs/python/rfeed.nix | 44 +++++++ modules/nixos/pkgs/sgblur.nix | 75 ++++++++++++ modules/nixos/pkgs/webtoon-dl.nix | 28 +++++ modules/parts.nix | 9 +- 54 files changed, 1184 insertions(+), 1058 deletions(-) delete mode 100644 legacy-modules/common-modules/default.nix delete mode 100644 legacy-modules/common-modules/overlays/default.nix delete mode 100644 legacy-modules/common-modules/pkgs/cline/default.nix delete mode 100644 legacy-modules/common-modules/pkgs/codium-extensions/ai-code.nix delete mode 100644 legacy-modules/common-modules/pkgs/codium-extensions/default.nix delete mode 100644 legacy-modules/common-modules/pkgs/default.nix delete mode 100644 legacy-modules/common-modules/pkgs/e621-downloader.nix delete mode 100644 legacy-modules/common-modules/pkgs/firefox-extensions/default.nix delete mode 100644 legacy-modules/common-modules/pkgs/firefox-extensions/deutsch-de-language-pack.nix delete mode 100644 legacy-modules/common-modules/pkgs/firefox-extensions/dizionario-italiano.nix delete mode 100644 legacy-modules/common-modules/pkgs/firefox-extensions/italiano-it-language-pack.nix delete mode 100644 legacy-modules/common-modules/pkgs/gdx-liftoff.nix delete mode 100644 legacy-modules/common-modules/pkgs/h3-c-lib.nix delete mode 100644 legacy-modules/common-modules/pkgs/mapillary-uploader.nix delete mode 100644 legacy-modules/common-modules/pkgs/panoramax.nix delete mode 100644 legacy-modules/common-modules/pkgs/prostudiomasters.nix delete mode 100644 legacy-modules/common-modules/pkgs/python/default.nix delete mode 100644 legacy-modules/common-modules/pkgs/python/geojson-pydantic.nix delete mode 100644 legacy-modules/common-modules/pkgs/python/geopic-tag-reader.nix delete mode 100644 legacy-modules/common-modules/pkgs/python/h3.nix delete mode 100644 legacy-modules/common-modules/pkgs/python/pyexiv2.nix delete mode 100644 legacy-modules/common-modules/pkgs/python/pygeofilter.nix delete mode 100644 legacy-modules/common-modules/pkgs/python/pygeoif.nix delete mode 100644 legacy-modules/common-modules/pkgs/python/rfeed.nix delete mode 100644 legacy-modules/common-modules/pkgs/sgblur.nix delete mode 100644 legacy-modules/common-modules/pkgs/webtoon-dl.nix create mode 100644 modules/nixos/overlays/default.nix rename {legacy-modules/common-modules => modules/nixos}/pkgs/cline/cline-package-lock.json (100%) create mode 100644 modules/nixos/pkgs/cline/default.nix create mode 100644 modules/nixos/pkgs/codium-extensions/ai-code.nix create mode 100644 modules/nixos/pkgs/codium-extensions/default.nix create mode 100644 modules/nixos/pkgs/default.nix create mode 100644 modules/nixos/pkgs/e621-downloader.nix create mode 100644 modules/nixos/pkgs/firefox-extensions/default.nix create mode 100644 modules/nixos/pkgs/firefox-extensions/deutsch-de-language-pack.nix create mode 100644 modules/nixos/pkgs/firefox-extensions/dizionario-italiano.nix create mode 100644 modules/nixos/pkgs/firefox-extensions/italiano-it-language-pack.nix create mode 100644 modules/nixos/pkgs/gdx-liftoff.nix create mode 100644 modules/nixos/pkgs/h3-c-lib.nix create mode 100644 modules/nixos/pkgs/mapillary-uploader.nix create mode 100644 modules/nixos/pkgs/panoramax.nix create mode 100644 modules/nixos/pkgs/prostudiomasters.nix create mode 100644 modules/nixos/pkgs/python/default.nix create mode 100644 modules/nixos/pkgs/python/geojson-pydantic.nix create mode 100644 modules/nixos/pkgs/python/geopic-tag-reader.nix create mode 100644 modules/nixos/pkgs/python/h3.nix create mode 100644 modules/nixos/pkgs/python/pyexiv2.nix create mode 100644 modules/nixos/pkgs/python/pygeofilter.nix create mode 100644 modules/nixos/pkgs/python/pygeoif.nix create mode 100644 modules/nixos/pkgs/python/rfeed.nix create mode 100644 modules/nixos/pkgs/sgblur.nix create mode 100644 modules/nixos/pkgs/webtoon-dl.nix diff --git a/flake.nix b/flake.nix index a734ee4..c5760b7 100644 --- a/flake.nix +++ b/flake.nix @@ -101,6 +101,10 @@ type = lib.types.attrsOf lib.types.unspecified; default = {}; }; + options.flake.commonModules = lib.mkOption { + type = lib.types.attrsOf lib.types.unspecified; + default = {}; + }; }) ({...}: { flake.syncthingConfiguration = inputs.nix-syncthing.lib.syncthingConfiguration { diff --git a/legacy-modules/common-modules/default.nix b/legacy-modules/common-modules/default.nix deleted file mode 100644 index 3dd1923..0000000 --- a/legacy-modules/common-modules/default.nix +++ /dev/null @@ -1,7 +0,0 @@ -# this folder is for modules that are common between nixos, home-manager, and darwin -{...}: { - imports = [ - ./overlays - ./pkgs - ]; -} diff --git a/legacy-modules/common-modules/overlays/default.nix b/legacy-modules/common-modules/overlays/default.nix deleted file mode 100644 index fab8f2b..0000000 --- a/legacy-modules/common-modules/overlays/default.nix +++ /dev/null @@ -1,40 +0,0 @@ -# this folder is for derivation overlays -{inputs, ...}: { - nixpkgs.overlays = [ - inputs.nix-vscode-extensions.overlays.default - # Add noita_entangled_worlds from upstream flake to pkgs - (final: prev: { - noita_entangled_worlds = inputs.noita-entangled-worlds.packages.${prev.stdenv.hostPlatform.system}.noita-proxy; - }) - # Workaround: some extensions in nix-vscode-extensions have invalid semver - # engine versions (e.g. 1.112.01907 with leading zeros) that cause - # forVSCodeVersion to throw. This tries the version-filtered set per site - # and falls back to unfiltered only for sites with bad semver data. - (final: prev: { - nix-vscode-extensions = - prev.nix-vscode-extensions - // { - forVSCodeVersion = vscodeVersion: let - filtered = prev.nix-vscode-extensions.forVSCodeVersion vscodeVersion; - unfiltered = prev.nix-vscode-extensions; - safeSite = site: let - # builtins.attrNames forces the filter to run on all extensions, - # which triggers semver parsing. If any extension has an invalid - # version, this catches the error and falls back to the unfiltered set. - tried = builtins.tryEval ( - builtins.seq (builtins.length (builtins.attrNames filtered.${site})) filtered.${site} - ); - in - if tried.success - then tried.value - else unfiltered.${site}; - in - filtered - // { - open-vsx = safeSite "open-vsx"; - vscode-marketplace = safeSite "vscode-marketplace"; - }; - }; - }) - ]; -} diff --git a/legacy-modules/common-modules/pkgs/cline/default.nix b/legacy-modules/common-modules/pkgs/cline/default.nix deleted file mode 100644 index 05dbf48..0000000 --- a/legacy-modules/common-modules/pkgs/cline/default.nix +++ /dev/null @@ -1,53 +0,0 @@ -{ - lib, - buildNpmPackage, - fetchurl, - ripgrep, - makeWrapper, - jq, - ... -}: -buildNpmPackage rec { - pname = "cline"; - version = "2.4.2"; - - src = fetchurl { - url = "https://registry.npmjs.org/cline/-/cline-${version}.tgz"; - hash = "sha256-2utOBC0vhoj5fR+cG+Vdo3N6+i/pNW1E4mESF/dZS/c="; - }; - - sourceRoot = "package"; - - postPatch = '' - cp ${./cline-package-lock.json} package-lock.json - - # Remove @vscode/ripgrep from package.json since it tries to download - # a binary from GitHub during install, which fails in the nix sandbox. - # We provide ripgrep from nixpkgs instead via PATH wrapping. - # Also remove the man field since the man page is not included in the npm tarball. - ${jq}/bin/jq 'del(.dependencies["@vscode/ripgrep"]) | del(.man)' package.json > package.json.tmp - mv package.json.tmp package.json - ''; - - npmDepsHash = "sha256-oHo60ghR7A4SUT0cLmIe7glPDYBK3twJ0F71RKVrxQc="; - - dontNpmBuild = true; - - # Skip post-install scripts to be safe - npmFlags = ["--ignore-scripts"]; - - nativeBuildInputs = [makeWrapper jq]; - - # Provide ripgrep from nixpkgs since @vscode/ripgrep was removed - postInstall = '' - wrapProgram $out/bin/cline \ - --prefix PATH : ${lib.makeBinPath [ripgrep]} - ''; - - meta = with lib; { - description = "Autonomous coding agent CLI - capable of creating/editing files, running commands, using the browser, and more"; - homepage = "https://cline.bot"; - license = licenses.asl20; - mainProgram = "cline"; - }; -} diff --git a/legacy-modules/common-modules/pkgs/codium-extensions/ai-code.nix b/legacy-modules/common-modules/pkgs/codium-extensions/ai-code.nix deleted file mode 100644 index 9c9efe3..0000000 --- a/legacy-modules/common-modules/pkgs/codium-extensions/ai-code.nix +++ /dev/null @@ -1,42 +0,0 @@ -{ - buildNpmPackage, - vscode-utils, - pkgs, - ... -}: let - version = "0.0.1"; - pname = "ai-code"; - publisher = "jan-leila"; - vsix = buildNpmPackage { - inherit version pname; - - src = builtins.fetchGit { - url = "ssh://git@git.jan-leila.com/jan-leila/ai-code.git"; - rev = "d48e01713021dbb30de0ebbee2cfaf99e4e9b5a6"; - }; - - npmDepsHash = "sha256-kjMyEnT3dz0yH5Ydh+aGoFDocKpBYGRmfnwbEdvvgpY="; - - nativeBuildInputs = with pkgs; [ - vsce - ]; - - buildPhase = '' - ${pkgs.vsce}/bin/vsce package -o ${pname}.zip - ''; - - installPhase = '' - mkdir -p $out - mv ${pname}.zip $out/${pname}.zip - ''; - }; -in - vscode-utils.buildVscodeExtension { - inherit pname version; - - src = "${vsix}/${pname}.zip"; - - vscodeExtUniqueId = "${publisher}.${pname}"; - vscodeExtPublisher = publisher; - vscodeExtName = pname; - } diff --git a/legacy-modules/common-modules/pkgs/codium-extensions/default.nix b/legacy-modules/common-modules/pkgs/codium-extensions/default.nix deleted file mode 100644 index a60e8a0..0000000 --- a/legacy-modules/common-modules/pkgs/codium-extensions/default.nix +++ /dev/null @@ -1,3 +0,0 @@ -{pkgs, ...}: { - ai-code = pkgs.callPackage ./ai-code.nix {}; -} diff --git a/legacy-modules/common-modules/pkgs/default.nix b/legacy-modules/common-modules/pkgs/default.nix deleted file mode 100644 index c1e5e80..0000000 --- a/legacy-modules/common-modules/pkgs/default.nix +++ /dev/null @@ -1,54 +0,0 @@ -{ - pkgs, - inputs, - ... -}: { - imports = [ - ./python - ]; - - nixpkgs.overlays = [ - (final: prev: { - webtoon-dl = - pkgs.callPackage - ./webtoon-dl.nix - {}; - }) - (final: prev: { - prostudiomasters = - pkgs.callPackage - ./prostudiomasters.nix - {}; - }) - (final: prev: { - gdx-liftoff = pkgs.callPackage ./gdx-liftoff.nix {}; - }) - (final: prev: { - codium-extensions = pkgs.callPackage ./codium-extensions {}; - }) - (final: prev: { - firefox-extensions = pkgs.callPackage ./firefox-extensions { - inherit inputs; - }; - }) - (final: prev: { - mapillary-uploader = pkgs.callPackage ./mapillary-uploader.nix {}; - }) - (final: prev: { - panoramax = pkgs.python3.pkgs.callPackage ./panoramax.nix {}; - }) - (final: prev: { - sgblur = pkgs.python3.pkgs.callPackage ./sgblur.nix {}; - }) - (final: prev: { - # Override h3 C library to version 4.3.0 - h3 = pkgs.callPackage ./h3-c-lib.nix {}; - }) - (final: prev: { - cline = pkgs.callPackage ./cline/default.nix {}; - }) - (final: prev: { - e621-downloader = pkgs.callPackage ./e621-downloader.nix {}; - }) - ]; -} diff --git a/legacy-modules/common-modules/pkgs/e621-downloader.nix b/legacy-modules/common-modules/pkgs/e621-downloader.nix deleted file mode 100644 index 3e7c546..0000000 --- a/legacy-modules/common-modules/pkgs/e621-downloader.nix +++ /dev/null @@ -1,36 +0,0 @@ -{ - lib, - rustPlatform, - fetchFromGitHub, - pkg-config, - openssl, - ... -}: -rustPlatform.buildRustPackage rec { - pname = "e621-downloader"; - version = "1.7.2"; - - src = fetchFromGitHub { - owner = "McSib"; - repo = "e621_downloader"; - rev = version; - hash = "sha256-4z+PrCv8Mlp0VOJ5Akv1TXrJir1Ws/+45a6VCZGuCtk="; - }; - - cargoHash = "sha256-/yqNYjP7BuFQWilL2Ty+E5rd8qXj30twteptHx7cLRo="; - - nativeBuildInputs = [ - pkg-config - ]; - - buildInputs = [ - openssl - ]; - - meta = with lib; { - description = "E621 and E926 downloader made in Rust"; - homepage = "https://github.com/McSib/e621_downloader"; - license = licenses.asl20; - mainProgram = "e621_downloader"; - }; -} diff --git a/legacy-modules/common-modules/pkgs/firefox-extensions/default.nix b/legacy-modules/common-modules/pkgs/firefox-extensions/default.nix deleted file mode 100644 index 922dfc7..0000000 --- a/legacy-modules/common-modules/pkgs/firefox-extensions/default.nix +++ /dev/null @@ -1,17 +0,0 @@ -{ - pkgs, - inputs, - ... -}: let - inherit (inputs.firefox-addons.lib.${pkgs.stdenv.hostPlatform.system}) buildFirefoxXpiAddon; -in { - italiano-it-language-pack = pkgs.callPackage ./italiano-it-language-pack.nix { - inherit buildFirefoxXpiAddon; - }; - dizionario-italiano = pkgs.callPackage ./dizionario-italiano.nix { - inherit buildFirefoxXpiAddon; - }; - deutsch-de-language-pack = pkgs.callPackage ./deutsch-de-language-pack.nix { - inherit buildFirefoxXpiAddon; - }; -} diff --git a/legacy-modules/common-modules/pkgs/firefox-extensions/deutsch-de-language-pack.nix b/legacy-modules/common-modules/pkgs/firefox-extensions/deutsch-de-language-pack.nix deleted file mode 100644 index b769bfd..0000000 --- a/legacy-modules/common-modules/pkgs/firefox-extensions/deutsch-de-language-pack.nix +++ /dev/null @@ -1,18 +0,0 @@ -{ - lib, - buildFirefoxXpiAddon, - ... -}: -buildFirefoxXpiAddon rec { - pname = "deutsch-de-language-pack"; - version = "145.0.20251106.194447"; - addonId = "langpack-de@firefox.mozilla.org"; - url = "https://addons.mozilla.org/firefox/downloads/file/4614311/deutsch_de_language_pack-${version}.xpi"; - sha256 = "aaaa95c29984fb3802a5e7edb6b7e5020c391d81f389b8a8133c163959ea4299"; - meta = with lib; { - description = "Firefox Language Pack for Deutsch (de) – German"; - license = licenses.mpl20; - mozPermissions = []; - platforms = platforms.all; - }; -} diff --git a/legacy-modules/common-modules/pkgs/firefox-extensions/dizionario-italiano.nix b/legacy-modules/common-modules/pkgs/firefox-extensions/dizionario-italiano.nix deleted file mode 100644 index 4bfca14..0000000 --- a/legacy-modules/common-modules/pkgs/firefox-extensions/dizionario-italiano.nix +++ /dev/null @@ -1,18 +0,0 @@ -{ - lib, - buildFirefoxXpiAddon, - ... -}: -buildFirefoxXpiAddon rec { - pname = "dizionario-italiano"; - version = "5.1"; - addonId = "it-IT@dictionaries.addons.mozilla.org"; - url = "https://addons.mozilla.org/firefox/downloads/file/3693497/dizionario_italiano-${version}.xpi"; - sha256 = "90b173ffdde34a77108152a5ff51879767b1dd84e0aa0dfb7b2bab94cd2e7f53"; - meta = with lib; { - description = "Add support for Italian to spellchecking"; - license = licenses.gpl3; - mozPermissions = []; - platforms = platforms.all; - }; -} diff --git a/legacy-modules/common-modules/pkgs/firefox-extensions/italiano-it-language-pack.nix b/legacy-modules/common-modules/pkgs/firefox-extensions/italiano-it-language-pack.nix deleted file mode 100644 index 35f4243..0000000 --- a/legacy-modules/common-modules/pkgs/firefox-extensions/italiano-it-language-pack.nix +++ /dev/null @@ -1,18 +0,0 @@ -{ - lib, - buildFirefoxXpiAddon, - ... -}: -buildFirefoxXpiAddon rec { - pname = "italiano-it-language-pack"; - version = "145.0.20251106.194447"; - addonId = "langpack-it@firefox.mozilla.org"; - url = "https://addons.mozilla.org/firefox/downloads/file/4614309/italiano_it_language_pack-${version}.xpi"; - sha256 = "1eb271cedbf326543e222ba1b9a1da62fceef9d3c523ac02a098df296f155038"; - meta = with lib; { - description = "Firefox Language Pack for Italiano (it) – Italian"; - license = licenses.mpl20; - mozPermissions = []; - platforms = platforms.all; - }; -} diff --git a/legacy-modules/common-modules/pkgs/gdx-liftoff.nix b/legacy-modules/common-modules/pkgs/gdx-liftoff.nix deleted file mode 100644 index da7d51f..0000000 --- a/legacy-modules/common-modules/pkgs/gdx-liftoff.nix +++ /dev/null @@ -1,48 +0,0 @@ -{ - stdenv, - fetchurl, - makeWrapper, - jdk, - lib, - libGL, - libx11, - libxcursor, - libxext, - libxrandr, - libxxf86vm, - ... -}: -stdenv.mkDerivation rec { - pname = "gdx-liftoff"; - version = "1.13.5.1"; - - src = fetchurl { - url = "https://github.com/libgdx/gdx-liftoff/releases/download/v${version}/gdx-liftoff-${version}.jar"; - hash = "sha256-9vCXGNGwI/P4VmcdIzTv2GPAX8bZb7nkfopaRAf6yMA="; - }; - - dontUnpack = true; - - nativeBuildInputs = [makeWrapper]; - - runtimeDependencies = lib.makeLibraryPath [ - # glfw - libGL - libx11 - libxcursor - libxext - libxrandr - libxxf86vm - ]; - - installPhase = '' - runHook preInstall - - install -Dm644 $src $out/lib/gdx-liftoff-${version}.jar - - makeWrapper ${lib.getExe jdk} $out/bin/gdx-liftoff-${version} \ - --append-flags "-jar $out/lib/gdx-liftoff-${version}.jar"\ - ${lib.optionalString stdenv.hostPlatform.isLinux "--prefix LD_LIBRARY_PATH : ${runtimeDependencies}"} - runHook postInstall - ''; -} diff --git a/legacy-modules/common-modules/pkgs/h3-c-lib.nix b/legacy-modules/common-modules/pkgs/h3-c-lib.nix deleted file mode 100644 index 2615d3c..0000000 --- a/legacy-modules/common-modules/pkgs/h3-c-lib.nix +++ /dev/null @@ -1,36 +0,0 @@ -{ - lib, - stdenv, - fetchFromGitHub, - cmake, - doxygen, -}: -stdenv.mkDerivation rec { - pname = "h3"; - version = "4.3.0"; - - src = fetchFromGitHub { - owner = "uber"; - repo = "h3"; - rev = "v${version}"; - hash = "sha256-DUILKZ1QvML6qg+WdOxir6zRsgTvk+En6yjeFf6MQBg="; - }; - - nativeBuildInputs = [ - cmake - doxygen - ]; - - cmakeFlags = [ - "-DBUILD_SHARED_LIBS=ON" - "-DBUILD_TESTING=OFF" - ]; - - meta = with lib; { - homepage = "https://github.com/uber/h3"; - description = "Hexagonal hierarchical geospatial indexing system"; - license = licenses.asl20; - maintainers = []; - platforms = platforms.all; - }; -} diff --git a/legacy-modules/common-modules/pkgs/mapillary-uploader.nix b/legacy-modules/common-modules/pkgs/mapillary-uploader.nix deleted file mode 100644 index acff772..0000000 --- a/legacy-modules/common-modules/pkgs/mapillary-uploader.nix +++ /dev/null @@ -1,39 +0,0 @@ -{ - lib, - fetchurl, - appimageTools, -}: let - pname = "mapillary-uploader"; - version = "4.7.2"; - - src = fetchurl { - url = "http://tools.mapillary.com/uploader/download/linux/${version}"; - name = "mapillary-uploader.AppImage"; - sha256 = "sha256-hpWdfeuhYylO+SFD3BsKI0s/xtObCDd5OcuJ6i/aEuI="; - }; - - appimageContents = appimageTools.extractType2 { - inherit pname version src; - }; -in - appimageTools.wrapType2 { - inherit pname version src; - - extraInstallCommands = '' - # Install desktop file - install -Dm644 ${appimageContents}/mapillary-desktop-uploader.desktop $out/share/applications/mapillary-uploader.desktop - - # Fix desktop file paths - substituteInPlace $out/share/applications/mapillary-uploader.desktop \ - --replace 'Exec=AppRun' 'Exec=${pname}' - ''; - - meta = with lib; { - description = "Mapillary Desktop Uploader - Upload street-level imagery to Mapillary"; - homepage = "https://www.mapillary.com/"; - license = licenses.unfree; # Mapillary's license terms - maintainers = []; - platforms = ["x86_64-linux"]; - sourceProvenance = with sourceTypes; [binaryNativeCode]; - }; - } diff --git a/legacy-modules/common-modules/pkgs/panoramax.nix b/legacy-modules/common-modules/pkgs/panoramax.nix deleted file mode 100644 index 75b5e0e..0000000 --- a/legacy-modules/common-modules/pkgs/panoramax.nix +++ /dev/null @@ -1,105 +0,0 @@ -{ - lib, - fetchFromGitLab, - buildPythonPackage, - flit-core, - flask, - pillow, - requests, - python-dotenv, - authlib, - sentry-sdk, - python-dateutil, - dateparser, - croniter, - pydantic, - flask-cors, - flask-compress, - flask-babel, - flasgger, - yoyo-migrations, - psycopg, - psycopg-pool, - tzdata, - email-validator, - pydantic-extra-types, - python-multipart, - fs, - fs-s3fs, - geopic-tag-reader, - pygeofilter, - pygeoif, - rfeed, - geojson-pydantic, - ... -}: let - pname = "geovisio"; - version = "2.10.0"; - repo = fetchFromGitLab { - owner = "panoramax"; - repo = "server/api"; - rev = version; - hash = "sha256-kCLcrOe7jJdIfmWWOmxQ5dOj8ZG2B7s0qFpHXs02B/E="; - }; -in - buildPythonPackage { - inherit pname version; - - pyproject = true; - - src = repo; - - build-system = [ - flit-core - ]; - - dependencies = [ - flask - pillow - requests - python-dotenv - authlib - sentry-sdk - python-dateutil - dateparser - croniter - pydantic - flask-cors - flask-compress - flask-babel - flasgger - yoyo-migrations - psycopg - psycopg-pool - tzdata - email-validator - pydantic-extra-types - python-multipart - fs - fs-s3fs - geopic-tag-reader - pygeofilter - pygeoif - rfeed - geojson-pydantic - # Missing from nixpkgs - may need custom packages: - # flask-executor - ]; - - # Skip tests as they may require network access or specific setup - doCheck = false; - - # Disable runtime dependencies check as many dependencies are not available in nixpkgs - dontCheckRuntimeDeps = true; - - # Disable imports check as many dependencies are not available in nixpkgs - pythonImportsCheck = []; - - meta = with lib; { - description = "Panoramax API client and tools for street-level imagery platform"; - homepage = "https://gitlab.com/panoramax/server/api"; - license = licenses.mit; - maintainers = []; - platforms = platforms.all; - }; - } diff --git a/legacy-modules/common-modules/pkgs/prostudiomasters.nix b/legacy-modules/common-modules/pkgs/prostudiomasters.nix deleted file mode 100644 index 1a3ad01..0000000 --- a/legacy-modules/common-modules/pkgs/prostudiomasters.nix +++ /dev/null @@ -1,33 +0,0 @@ -{ - fetchurl, - appimageTools, - writeShellScript, -}: let - pname = "prostudiomasters"; - version = "2.5.6"; - src = fetchurl { - url = "https://download.prostudiomasters.com/linux/ProStudioMasters-${version}.AppImage"; - hash = "sha256-7owOwdcucFfl+JsVj+Seau2KOz0J4P/ep7WrBSNSmbs="; - }; - - # Create the base AppImage wrapper - baseApp = appimageTools.wrapType2 { - inherit pname version src; - }; - - # Create a wrapper script that automatically adds the --in-process-gpu flag - wrapper = writeShellScript "prostudiomasters-wrapper" '' - exec ${baseApp}/bin/prostudiomasters --in-process-gpu "$@" - ''; -in - # Override the base app to use our wrapper script - baseApp.overrideAttrs (oldAttrs: { - buildCommand = - oldAttrs.buildCommand - + '' - # Replace the original binary with our wrapper - rm $out/bin/prostudiomasters - cp ${wrapper} $out/bin/prostudiomasters - chmod +x $out/bin/prostudiomasters - ''; - }) diff --git a/legacy-modules/common-modules/pkgs/python/default.nix b/legacy-modules/common-modules/pkgs/python/default.nix deleted file mode 100644 index f69c512..0000000 --- a/legacy-modules/common-modules/pkgs/python/default.nix +++ /dev/null @@ -1,18 +0,0 @@ -{...}: { - nixpkgs.overlays = [ - (final: prev: { - python3 = prev.python3.override { - packageOverrides = pythonPrev: pythonFinal: { - h3 = pythonPrev.callPackage ./h3.nix {h3 = final.h3;}; - pygeofilter = pythonPrev.callPackage ./pygeofilter.nix {}; - pygeoif = pythonPrev.callPackage ./pygeoif.nix {}; - rfeed = pythonPrev.callPackage ./rfeed.nix {}; - pyexiv2 = pythonPrev.callPackage ./pyexiv2.nix {}; - geojson-pydantic = pythonPrev.callPackage ./geojson-pydantic.nix {}; - geopic-tag-reader = pythonPrev.callPackage ./geopic-tag-reader.nix {}; - }; - }; - python3Packages = final.python3.pkgs; - }) - ]; -} diff --git a/legacy-modules/common-modules/pkgs/python/geojson-pydantic.nix b/legacy-modules/common-modules/pkgs/python/geojson-pydantic.nix deleted file mode 100644 index 96ec6b5..0000000 --- a/legacy-modules/common-modules/pkgs/python/geojson-pydantic.nix +++ /dev/null @@ -1,48 +0,0 @@ -{ - lib, - fetchPypi, - buildPythonPackage, - flit-core, - pydantic, - geojson, - ... -}: let - pname = "geojson_pydantic"; - version = "2.0.0"; -in - buildPythonPackage { - inherit pname version; - - pyproject = true; - - src = fetchPypi { - inherit pname version; - hash = "sha256-ti6LRFAt0a1Ri19zkDWoGSSnb5gMvbOk6JFu+RO+JC4="; - }; - - build-system = [ - flit-core - ]; - - dependencies = [ - pydantic - geojson - ]; - - # Skip tests as they may require specific setup - doCheck = false; - - # Disable runtime dependencies check - dontCheckRuntimeDeps = true; - - # Basic imports check - pythonImportsCheck = ["geojson_pydantic"]; - - meta = with lib; { - description = "Pydantic models for GeoJSON objects"; - homepage = "https://github.com/developmentseed/geojson-pydantic"; - license = licenses.mit; - maintainers = []; - platforms = platforms.all; - }; - } diff --git a/legacy-modules/common-modules/pkgs/python/geopic-tag-reader.nix b/legacy-modules/common-modules/pkgs/python/geopic-tag-reader.nix deleted file mode 100644 index bd8451f..0000000 --- a/legacy-modules/common-modules/pkgs/python/geopic-tag-reader.nix +++ /dev/null @@ -1,70 +0,0 @@ -{ - lib, - fetchFromGitLab, - buildPythonPackage, - flit-core, - typer, - xmltodict, - timezonefinder, - pytz, - types-pytz, - types-python-dateutil, - rtree, - python-dateutil, - pyexiv2, - ... -}: let - pname = "geopic-tag-reader"; - version = "1.8.0"; -in - buildPythonPackage { - inherit pname version; - - pyproject = true; - - src = fetchFromGitLab { - owner = "panoramax"; - repo = "server/geo-picture-tag-reader"; - rev = version; - sha256 = "0lzf5xxxcdqmq28bpvgpkxf5jxmh2nawwa4rl4yg04bdsi16rf1j"; - }; - - build-system = [ - flit-core - ]; - - dependencies = [ - typer - xmltodict - pyexiv2 - timezonefinder - pytz - types-pytz - types-python-dateutil - rtree - ]; - - optional-dependencies = { - write-exif = [ - python-dateutil - types-python-dateutil - ]; - }; - - # Skip tests as they may require network access or specific setup - doCheck = false; - - # Disable runtime dependencies check as some dependencies might have issues - dontCheckRuntimeDeps = true; - - # Disable imports check initially to avoid dependency issues - pythonImportsCheck = []; - - meta = with lib; { - description = "GeoPic Tag Reader - Python library to read and write standardized metadata from geolocated pictures EXIF metadata"; - homepage = "https://gitlab.com/panoramax/server/geo-picture-tag-reader"; - license = licenses.mit; - maintainers = []; - platforms = platforms.all; - }; - } diff --git a/legacy-modules/common-modules/pkgs/python/h3.nix b/legacy-modules/common-modules/pkgs/python/h3.nix deleted file mode 100644 index 2dc3d26..0000000 --- a/legacy-modules/common-modules/pkgs/python/h3.nix +++ /dev/null @@ -1,81 +0,0 @@ -{ - autoPatchelfHook, - buildPythonPackage, - cmake, - cython, - fetchFromGitHub, - h3, - lib, - ninja, - numpy, - pytestCheckHook, - pytest-cov-stub, - scikit-build-core, - stdenv, -}: -buildPythonPackage rec { - pname = "h3"; - version = "4.3.1"; - pyproject = true; - - # pypi version does not include tests - src = fetchFromGitHub { - owner = "uber"; - repo = "h3-py"; - tag = "v${version}"; - hash = "sha256-zt7zbBgSp2P9q7mObZeQZpW9Szip62dAYdPZ2cGTmi4="; - }; - - dontConfigure = true; - - nativeCheckInputs = [ - pytestCheckHook - pytest-cov-stub - ]; - - build-system = - [ - scikit-build-core - cmake - cython - ninja - ] - ++ lib.optionals stdenv.hostPlatform.isLinux [ - # On Linux the .so files ends up referring to libh3.so instead of the full - # Nix store path. I'm not sure why this is happening! On Darwin it works - # fine. - autoPatchelfHook - ]; - - # This is not needed per-se, it's only added for autoPatchelfHook to work - # correctly. See the note above ^^ - buildInputs = lib.optionals stdenv.hostPlatform.isLinux [h3]; - - dependencies = [numpy]; - - # The following prePatch replaces the h3lib compilation with using the h3 packaged in nixpkgs. - # - # - Remove the h3lib submodule. - # - Patch CMakeLists to avoid building h3lib, and use h3 instead. - prePatch = let - cmakeCommands = '' - include_directories(${lib.getDev h3}/include/h3) - link_directories(${h3}/lib) - ''; - in '' - rm -r src/h3lib - substituteInPlace CMakeLists.txt \ - --replace-fail "add_subdirectory(src/h3lib)" "${cmakeCommands}" \ - --replace-fail "\''${CMAKE_CURRENT_BINARY_DIR}/src/h3lib/src/h3lib/include/h3api.h" "${lib.getDev h3}/include/h3/h3api.h" - ''; - - # Extra check to make sure we can import it from Python - pythonImportsCheck = ["h3"]; - - meta = { - homepage = "https://github.com/uber/h3-py"; - description = "Hierarchical hexagonal geospatial indexing system"; - license = lib.licenses.asl20; - maintainers = [lib.maintainers.kalbasit]; - }; -} diff --git a/legacy-modules/common-modules/pkgs/python/pyexiv2.nix b/legacy-modules/common-modules/pkgs/python/pyexiv2.nix deleted file mode 100644 index 69fa537..0000000 --- a/legacy-modules/common-modules/pkgs/python/pyexiv2.nix +++ /dev/null @@ -1,49 +0,0 @@ -{ - lib, - fetchFromGitHub, - buildPythonPackage, - exiv2, - boost, - pybind11, - setuptools, - ... -}: let - pname = "pyexiv2"; - version = "2.15.3"; -in - buildPythonPackage { - inherit pname version; - - pyproject = true; - build-system = [setuptools]; - - src = fetchFromGitHub { - owner = "LeoHsiao1"; - repo = "pyexiv2"; - rev = "v${version}"; - sha256 = "sha256-83bFMaoXncvhRJNcCgkkC7B29wR5pjuLO/EdkQdqxxo="; - }; - - buildInputs = [ - exiv2 - boost - ]; - - nativeBuildInputs = [ - pybind11 - ]; - - # Skip tests as they may require specific test images - doCheck = false; - - # Disable runtime dependencies check initially - dontCheckRuntimeDeps = true; - - meta = with lib; { - description = "Python binding to the library exiv2"; - homepage = "https://github.com/LeoHsiao1/pyexiv2"; - license = licenses.gpl3Plus; - maintainers = []; - platforms = platforms.linux; - }; - } diff --git a/legacy-modules/common-modules/pkgs/python/pygeofilter.nix b/legacy-modules/common-modules/pkgs/python/pygeofilter.nix deleted file mode 100644 index aa310f9..0000000 --- a/legacy-modules/common-modules/pkgs/python/pygeofilter.nix +++ /dev/null @@ -1,52 +0,0 @@ -{ - lib, - fetchPypi, - buildPythonPackage, - setuptools, - wheel, - lark, - python-dateutil, - shapely, - ... -}: let - pname = "pygeofilter"; - version = "0.3.1"; -in - buildPythonPackage { - inherit pname version; - - pyproject = true; - - src = fetchPypi { - inherit pname version; - hash = "sha256-+SvAYiCZ+H/os23nq92GBZ1hWontYIInNwgiI6V44VA="; - }; - - build-system = [ - setuptools - wheel - ]; - - dependencies = [ - lark - python-dateutil - shapely - ]; - - # Skip tests as they may require specific setup - doCheck = false; - - # Disable runtime dependencies check - dontCheckRuntimeDeps = true; - - # Basic imports check - pythonImportsCheck = ["pygeofilter"]; - - meta = with lib; { - description = "A pure Python parser implementation of OGC filtering standards"; - homepage = "https://github.com/geopython/pygeofilter"; - license = licenses.mit; - maintainers = []; - platforms = platforms.all; - }; - } diff --git a/legacy-modules/common-modules/pkgs/python/pygeoif.nix b/legacy-modules/common-modules/pkgs/python/pygeoif.nix deleted file mode 100644 index 12b8b12..0000000 --- a/legacy-modules/common-modules/pkgs/python/pygeoif.nix +++ /dev/null @@ -1,48 +0,0 @@ -{ - lib, - fetchPypi, - buildPythonPackage, - setuptools, - wheel, - typing-extensions, - ... -}: let - pname = "pygeoif"; - version = "1.5.1"; -in - buildPythonPackage { - inherit pname version; - - pyproject = true; - - src = fetchPypi { - inherit pname version; - hash = "sha256-8nprah7Lh66swrUbzFnKeb5w7RKgEE3oYBR4shPdXYE="; - }; - - build-system = [ - setuptools - wheel - ]; - - dependencies = [ - typing-extensions - ]; - - # Skip tests as they may require specific setup - doCheck = false; - - # Disable runtime dependencies check - dontCheckRuntimeDeps = true; - - # Basic imports check - pythonImportsCheck = ["pygeoif"]; - - meta = with lib; { - description = "A basic implementation of the __geo_interface__"; - homepage = "https://github.com/cleder/pygeoif"; - license = licenses.lgpl21Plus; - maintainers = []; - platforms = platforms.all; - }; - } diff --git a/legacy-modules/common-modules/pkgs/python/rfeed.nix b/legacy-modules/common-modules/pkgs/python/rfeed.nix deleted file mode 100644 index 0be8ab9..0000000 --- a/legacy-modules/common-modules/pkgs/python/rfeed.nix +++ /dev/null @@ -1,40 +0,0 @@ -{ - lib, - fetchPypi, - buildPythonPackage, - setuptools, - python-dateutil, -}: -buildPythonPackage rec { - pname = "rfeed"; - version = "1.1.1"; - pyproject = true; - - src = fetchPypi { - inherit pname version; - hash = "sha256-qpUG8oZrdPWjItOUoUpjwZpoJcLZR1X/GdRt0eJDSBk="; - }; - - build-system = [ - setuptools - ]; - - dependencies = [ - python-dateutil - ]; - - # No tests available in the package - doCheck = false; - - pythonImportsCheck = [ - "rfeed" - ]; - - meta = with lib; { - description = "RSS feed generation library for Python"; - homepage = "https://pypi.org/project/rfeed/"; - license = licenses.mit; - maintainers = []; - platforms = platforms.all; - }; -} diff --git a/legacy-modules/common-modules/pkgs/sgblur.nix b/legacy-modules/common-modules/pkgs/sgblur.nix deleted file mode 100644 index d007b4e..0000000 --- a/legacy-modules/common-modules/pkgs/sgblur.nix +++ /dev/null @@ -1,65 +0,0 @@ -{ - lib, - python3Packages, - fetchFromGitHub, - pkg-config, - libjpeg_turbo, - exiftran ? libjpeg_turbo, -}: -python3Packages.buildPythonPackage { - pname = "sgblur"; - version = "1.0.0"; - - pyproject = true; - - src = fetchFromGitHub { - owner = "cquest"; - repo = "sgblur"; - rev = "master"; - hash = "sha256-17wpif2sa021kaa1pbkry4l1967la1qd7knhngvxblrvd7jqqz4y="; - }; - - nativeBuildInputs = [ - pkg-config - ]; - - buildInputs = [ - libjpeg_turbo - exiftran - ]; - - build-system = with python3Packages; [ - setuptools - wheel - ]; - - dependencies = with python3Packages; [ - # Core dependencies from pyproject.toml - ultralytics - # pyturbojpeg # May need special handling - pillow - # uuid # Built into Python - # exifread - python-multipart - fastapi - uvicorn - requests - # piexif - pydantic-settings - pydantic - ]; - - # Skip tests as they may require GPU or specific setup - doCheck = false; - - # The package may have import issues due to system dependencies - pythonImportsCheck = []; - - meta = with lib; { - description = "Panoramax Speedy Gonzales Blurring Algorithm - AI-powered face and license plate blurring API"; - homepage = "https://github.com/cquest/sgblur"; - license = licenses.mit; - maintainers = []; - platforms = platforms.unix; - }; -} diff --git a/legacy-modules/common-modules/pkgs/webtoon-dl.nix b/legacy-modules/common-modules/pkgs/webtoon-dl.nix deleted file mode 100644 index 4341098..0000000 --- a/legacy-modules/common-modules/pkgs/webtoon-dl.nix +++ /dev/null @@ -1,18 +0,0 @@ -{ - buildGoModule, - fetchFromGitHub, - ... -}: -buildGoModule rec { - pname = "webtoon-dl"; - version = "0.0.10"; - - src = fetchFromGitHub { - owner = "robinovitch61"; - repo = "webtoon-dl"; - rev = "v${version}"; - hash = "sha256-geVb3LFPZxPQYARZnaqOr5sgaN6mqkEX5ZiLvg8mF5k="; - }; - - vendorHash = "sha256-NTqUygJ6b6kTnLUnJqxCo/URzaRouPLACEPi2Ob1s9w="; -} diff --git a/modules/nixos/overlays/default.nix b/modules/nixos/overlays/default.nix new file mode 100644 index 0000000..5cf6ceb --- /dev/null +++ b/modules/nixos/overlays/default.nix @@ -0,0 +1,42 @@ +# External overlays from flake inputs +{inputs, ...}: { + flake.commonModules.overlays = { + nixpkgs.overlays = [ + inputs.nix-vscode-extensions.overlays.default + # Add noita_entangled_worlds from upstream flake to pkgs + (final: prev: { + noita_entangled_worlds = inputs.noita-entangled-worlds.packages.${prev.stdenv.hostPlatform.system}.noita-proxy; + }) + # Workaround: some extensions in nix-vscode-extensions have invalid semver + # engine versions (e.g. 1.112.01907 with leading zeros) that cause + # forVSCodeVersion to throw. This tries the version-filtered set per site + # and falls back to unfiltered only for sites with bad semver data. + (final: prev: { + nix-vscode-extensions = + prev.nix-vscode-extensions + // { + forVSCodeVersion = vscodeVersion: let + filtered = prev.nix-vscode-extensions.forVSCodeVersion vscodeVersion; + unfiltered = prev.nix-vscode-extensions; + safeSite = site: let + # builtins.attrNames forces the filter to run on all extensions, + # which triggers semver parsing. If any extension has an invalid + # version, this catches the error and falls back to the unfiltered set. + tried = builtins.tryEval ( + builtins.seq (builtins.length (builtins.attrNames filtered.${site})) filtered.${site} + ); + in + if tried.success + then tried.value + else unfiltered.${site}; + in + filtered + // { + open-vsx = safeSite "open-vsx"; + vscode-marketplace = safeSite "vscode-marketplace"; + }; + }; + }) + ]; + }; +} diff --git a/legacy-modules/common-modules/pkgs/cline/cline-package-lock.json b/modules/nixos/pkgs/cline/cline-package-lock.json similarity index 100% rename from legacy-modules/common-modules/pkgs/cline/cline-package-lock.json rename to modules/nixos/pkgs/cline/cline-package-lock.json diff --git a/modules/nixos/pkgs/cline/default.nix b/modules/nixos/pkgs/cline/default.nix new file mode 100644 index 0000000..d2c27d1 --- /dev/null +++ b/modules/nixos/pkgs/cline/default.nix @@ -0,0 +1,63 @@ +{...}: let + package = { + lib, + buildNpmPackage, + fetchurl, + ripgrep, + makeWrapper, + jq, + ... + }: + buildNpmPackage rec { + pname = "cline"; + version = "2.4.2"; + + src = fetchurl { + url = "https://registry.npmjs.org/cline/-/cline-${version}.tgz"; + hash = "sha256-2utOBC0vhoj5fR+cG+Vdo3N6+i/pNW1E4mESF/dZS/c="; + }; + + sourceRoot = "package"; + + postPatch = '' + cp ${./cline-package-lock.json} package-lock.json + + # Remove @vscode/ripgrep from package.json since it tries to download + # a binary from GitHub during install, which fails in the nix sandbox. + # We provide ripgrep from nixpkgs instead via PATH wrapping. + # Also remove the man field since the man page is not included in the npm tarball. + ${jq}/bin/jq 'del(.dependencies["@vscode/ripgrep"]) | del(.man)' package.json > package.json.tmp + mv package.json.tmp package.json + ''; + + npmDepsHash = "sha256-oHo60ghR7A4SUT0cLmIe7glPDYBK3twJ0F71RKVrxQc="; + + dontNpmBuild = true; + + # Skip post-install scripts to be safe + npmFlags = ["--ignore-scripts"]; + + nativeBuildInputs = [makeWrapper jq]; + + # Provide ripgrep from nixpkgs since @vscode/ripgrep was removed + postInstall = '' + wrapProgram $out/bin/cline \ + --prefix PATH : ${lib.makeBinPath [ripgrep]} + ''; + + meta = with lib; { + description = "Autonomous coding agent CLI - capable of creating/editing files, running commands, using the browser, and more"; + homepage = "https://cline.bot"; + license = licenses.asl20; + mainProgram = "cline"; + }; + }; +in { + flake.commonModules.cline = {pkgs, ...}: { + nixpkgs.overlays = [ + (final: prev: { + cline = pkgs.callPackage package {}; + }) + ]; + }; +} diff --git a/modules/nixos/pkgs/codium-extensions/ai-code.nix b/modules/nixos/pkgs/codium-extensions/ai-code.nix new file mode 100644 index 0000000..7692e84 --- /dev/null +++ b/modules/nixos/pkgs/codium-extensions/ai-code.nix @@ -0,0 +1,46 @@ +{...}: let + package = { + buildNpmPackage, + vscode-utils, + pkgs, + ... + }: let + version = "0.0.1"; + pname = "ai-code"; + publisher = "jan-leila"; + vsix = buildNpmPackage { + inherit version pname; + + src = builtins.fetchGit { + url = "ssh://git@git.jan-leila.com/jan-leila/ai-code.git"; + rev = "d48e01713021dbb30de0ebbee2cfaf99e4e9b5a6"; + }; + + npmDepsHash = "sha256-kjMyEnT3dz0yH5Ydh+aGoFDocKpBYGRmfnwbEdvvgpY="; + + nativeBuildInputs = with pkgs; [ + vsce + ]; + + buildPhase = '' + ${pkgs.vsce}/bin/vsce package -o ${pname}.zip + ''; + + installPhase = '' + mkdir -p $out + mv ${pname}.zip $out/${pname}.zip + ''; + }; + in + vscode-utils.buildVscodeExtension { + inherit pname version; + + src = "${vsix}/${pname}.zip"; + + vscodeExtUniqueId = "${publisher}.${pname}"; + vscodeExtPublisher = publisher; + vscodeExtName = pname; + }; +in { + flake.commonModules.codium-ai-code = package; +} diff --git a/modules/nixos/pkgs/codium-extensions/default.nix b/modules/nixos/pkgs/codium-extensions/default.nix new file mode 100644 index 0000000..367809b --- /dev/null +++ b/modules/nixos/pkgs/codium-extensions/default.nix @@ -0,0 +1,11 @@ +{config, ...}: { + flake.commonModules.codium-extensions = {pkgs, ...}: { + nixpkgs.overlays = [ + (final: prev: { + codium-extensions = { + ai-code = pkgs.callPackage config.flake.commonModules.codium-ai-code {}; + }; + }) + ]; + }; +} diff --git a/modules/nixos/pkgs/default.nix b/modules/nixos/pkgs/default.nix new file mode 100644 index 0000000..406b7c2 --- /dev/null +++ b/modules/nixos/pkgs/default.nix @@ -0,0 +1,21 @@ +# Package modules providing custom packages via nixpkgs overlays +{config, ...}: let + pkg = config.flake.commonModules; +in { + flake.commonModules.pkgs = { + imports = [ + pkg.webtoon-dl + pkg.prostudiomasters + pkg.gdx-liftoff + pkg.e621-downloader + pkg.h3-c-lib + pkg.mapillary-uploader + pkg.panoramax + pkg.sgblur + pkg.cline + pkg.codium-extensions + pkg.firefox-extensions + pkg.python + ]; + }; +} diff --git a/modules/nixos/pkgs/e621-downloader.nix b/modules/nixos/pkgs/e621-downloader.nix new file mode 100644 index 0000000..8f4e291 --- /dev/null +++ b/modules/nixos/pkgs/e621-downloader.nix @@ -0,0 +1,46 @@ +{...}: let + package = { + lib, + rustPlatform, + fetchFromGitHub, + pkg-config, + openssl, + ... + }: + rustPlatform.buildRustPackage rec { + pname = "e621-downloader"; + version = "1.7.2"; + + src = fetchFromGitHub { + owner = "McSib"; + repo = "e621_downloader"; + rev = version; + hash = "sha256-4z+PrCv8Mlp0VOJ5Akv1TXrJir1Ws/+45a6VCZGuCtk="; + }; + + cargoHash = "sha256-/yqNYjP7BuFQWilL2Ty+E5rd8qXj30twteptHx7cLRo="; + + nativeBuildInputs = [ + pkg-config + ]; + + buildInputs = [ + openssl + ]; + + meta = with lib; { + description = "E621 and E926 downloader made in Rust"; + homepage = "https://github.com/McSib/e621_downloader"; + license = licenses.asl20; + mainProgram = "e621_downloader"; + }; + }; +in { + flake.commonModules.e621-downloader = {pkgs, ...}: { + nixpkgs.overlays = [ + (final: prev: { + e621-downloader = pkgs.callPackage package {}; + }) + ]; + }; +} diff --git a/modules/nixos/pkgs/firefox-extensions/default.nix b/modules/nixos/pkgs/firefox-extensions/default.nix new file mode 100644 index 0000000..5ea1528 --- /dev/null +++ b/modules/nixos/pkgs/firefox-extensions/default.nix @@ -0,0 +1,25 @@ +{config, ...}: { + flake.commonModules.firefox-extensions = { + pkgs, + inputs, + ... + }: let + inherit (inputs.firefox-addons.lib.${pkgs.stdenv.hostPlatform.system}) buildFirefoxXpiAddon; + in { + nixpkgs.overlays = [ + (final: prev: { + firefox-extensions = { + italiano-it-language-pack = pkgs.callPackage config.flake.commonModules.firefox-italiano-it-language-pack { + inherit buildFirefoxXpiAddon; + }; + dizionario-italiano = pkgs.callPackage config.flake.commonModules.firefox-dizionario-italiano { + inherit buildFirefoxXpiAddon; + }; + deutsch-de-language-pack = pkgs.callPackage config.flake.commonModules.firefox-deutsch-de-language-pack { + inherit buildFirefoxXpiAddon; + }; + }; + }) + ]; + }; +} diff --git a/modules/nixos/pkgs/firefox-extensions/deutsch-de-language-pack.nix b/modules/nixos/pkgs/firefox-extensions/deutsch-de-language-pack.nix new file mode 100644 index 0000000..4dfa740 --- /dev/null +++ b/modules/nixos/pkgs/firefox-extensions/deutsch-de-language-pack.nix @@ -0,0 +1,22 @@ +{...}: let + package = { + lib, + buildFirefoxXpiAddon, + ... + }: + buildFirefoxXpiAddon rec { + pname = "deutsch-de-language-pack"; + version = "145.0.20251106.194447"; + addonId = "langpack-de@firefox.mozilla.org"; + url = "https://addons.mozilla.org/firefox/downloads/file/4614311/deutsch_de_language_pack-${version}.xpi"; + sha256 = "aaaa95c29984fb3802a5e7edb6b7e5020c391d81f389b8a8133c163959ea4299"; + meta = with lib; { + description = "Firefox Language Pack for Deutsch (de) – German"; + license = licenses.mpl20; + mozPermissions = []; + platforms = platforms.all; + }; + }; +in { + flake.commonModules.firefox-deutsch-de-language-pack = package; +} diff --git a/modules/nixos/pkgs/firefox-extensions/dizionario-italiano.nix b/modules/nixos/pkgs/firefox-extensions/dizionario-italiano.nix new file mode 100644 index 0000000..4a652d5 --- /dev/null +++ b/modules/nixos/pkgs/firefox-extensions/dizionario-italiano.nix @@ -0,0 +1,22 @@ +{...}: let + package = { + lib, + buildFirefoxXpiAddon, + ... + }: + buildFirefoxXpiAddon rec { + pname = "dizionario-italiano"; + version = "5.1"; + addonId = "it-IT@dictionaries.addons.mozilla.org"; + url = "https://addons.mozilla.org/firefox/downloads/file/3693497/dizionario_italiano-${version}.xpi"; + sha256 = "90b173ffdde34a77108152a5ff51879767b1dd84e0aa0dfb7b2bab94cd2e7f53"; + meta = with lib; { + description = "Add support for Italian to spellchecking"; + license = licenses.gpl3; + mozPermissions = []; + platforms = platforms.all; + }; + }; +in { + flake.commonModules.firefox-dizionario-italiano = package; +} diff --git a/modules/nixos/pkgs/firefox-extensions/italiano-it-language-pack.nix b/modules/nixos/pkgs/firefox-extensions/italiano-it-language-pack.nix new file mode 100644 index 0000000..fb8674b --- /dev/null +++ b/modules/nixos/pkgs/firefox-extensions/italiano-it-language-pack.nix @@ -0,0 +1,22 @@ +{...}: let + package = { + lib, + buildFirefoxXpiAddon, + ... + }: + buildFirefoxXpiAddon rec { + pname = "italiano-it-language-pack"; + version = "145.0.20251106.194447"; + addonId = "langpack-it@firefox.mozilla.org"; + url = "https://addons.mozilla.org/firefox/downloads/file/4614309/italiano_it_language_pack-${version}.xpi"; + sha256 = "1eb271cedbf326543e222ba1b9a1da62fceef9d3c523ac02a098df296f155038"; + meta = with lib; { + description = "Firefox Language Pack for Italiano (it) – Italian"; + license = licenses.mpl20; + mozPermissions = []; + platforms = platforms.all; + }; + }; +in { + flake.commonModules.firefox-italiano-it-language-pack = package; +} diff --git a/modules/nixos/pkgs/gdx-liftoff.nix b/modules/nixos/pkgs/gdx-liftoff.nix new file mode 100644 index 0000000..88206ea --- /dev/null +++ b/modules/nixos/pkgs/gdx-liftoff.nix @@ -0,0 +1,58 @@ +{...}: let + package = { + stdenv, + fetchurl, + makeWrapper, + jdk, + lib, + libGL, + libx11, + libxcursor, + libxext, + libxrandr, + libxxf86vm, + ... + }: + stdenv.mkDerivation rec { + pname = "gdx-liftoff"; + version = "1.13.5.1"; + + src = fetchurl { + url = "https://github.com/libgdx/gdx-liftoff/releases/download/v${version}/gdx-liftoff-${version}.jar"; + hash = "sha256-9vCXGNGwI/P4VmcdIzTv2GPAX8bZb7nkfopaRAf6yMA="; + }; + + dontUnpack = true; + + nativeBuildInputs = [makeWrapper]; + + runtimeDependencies = lib.makeLibraryPath [ + # glfw + libGL + libx11 + libxcursor + libxext + libxrandr + libxxf86vm + ]; + + installPhase = '' + runHook preInstall + + install -Dm644 $src $out/lib/gdx-liftoff-${version}.jar + + makeWrapper ${lib.getExe jdk} $out/bin/gdx-liftoff-${version} \ + --append-flags "-jar $out/lib/gdx-liftoff-${version}.jar"\ + ${lib.optionalString stdenv.hostPlatform.isLinux "--prefix LD_LIBRARY_PATH : ${runtimeDependencies}"} + runHook postInstall + ''; + }; +in { + flake.commonModules.gdx-liftoff = {pkgs, ...}: { + nixpkgs.overlays = [ + (final: prev: { + gdx-liftoff = pkgs.callPackage package {}; + }) + ]; + }; +} diff --git a/modules/nixos/pkgs/h3-c-lib.nix b/modules/nixos/pkgs/h3-c-lib.nix new file mode 100644 index 0000000..38f9eac --- /dev/null +++ b/modules/nixos/pkgs/h3-c-lib.nix @@ -0,0 +1,47 @@ +{...}: let + package = { + lib, + stdenv, + fetchFromGitHub, + cmake, + doxygen, + }: + stdenv.mkDerivation rec { + pname = "h3"; + version = "4.3.0"; + + src = fetchFromGitHub { + owner = "uber"; + repo = "h3"; + rev = "v${version}"; + hash = "sha256-DUILKZ1QvML6qg+WdOxir6zRsgTvk+En6yjeFf6MQBg="; + }; + + nativeBuildInputs = [ + cmake + doxygen + ]; + + cmakeFlags = [ + "-DBUILD_SHARED_LIBS=ON" + "-DBUILD_TESTING=OFF" + ]; + + meta = with lib; { + homepage = "https://github.com/uber/h3"; + description = "Hexagonal hierarchical geospatial indexing system"; + license = licenses.asl20; + maintainers = []; + platforms = platforms.all; + }; + }; +in { + flake.commonModules.h3-c-lib = {pkgs, ...}: { + nixpkgs.overlays = [ + (final: prev: { + # Override h3 C library to version 4.3.0 + h3 = pkgs.callPackage package {}; + }) + ]; + }; +} diff --git a/modules/nixos/pkgs/mapillary-uploader.nix b/modules/nixos/pkgs/mapillary-uploader.nix new file mode 100644 index 0000000..6fe1105 --- /dev/null +++ b/modules/nixos/pkgs/mapillary-uploader.nix @@ -0,0 +1,49 @@ +{...}: let + package = { + lib, + fetchurl, + appimageTools, + }: let + pname = "mapillary-uploader"; + version = "4.7.2"; + + src = fetchurl { + url = "http://tools.mapillary.com/uploader/download/linux/${version}"; + name = "mapillary-uploader.AppImage"; + sha256 = "sha256-hpWdfeuhYylO+SFD3BsKI0s/xtObCDd5OcuJ6i/aEuI="; + }; + + appimageContents = appimageTools.extractType2 { + inherit pname version src; + }; + in + appimageTools.wrapType2 { + inherit pname version src; + + extraInstallCommands = '' + # Install desktop file + install -Dm644 ${appimageContents}/mapillary-desktop-uploader.desktop $out/share/applications/mapillary-uploader.desktop + + # Fix desktop file paths + substituteInPlace $out/share/applications/mapillary-uploader.desktop \ + --replace 'Exec=AppRun' 'Exec=${pname}' + ''; + + meta = with lib; { + description = "Mapillary Desktop Uploader - Upload street-level imagery to Mapillary"; + homepage = "https://www.mapillary.com/"; + license = licenses.unfree; # Mapillary's license terms + maintainers = []; + platforms = ["x86_64-linux"]; + sourceProvenance = with sourceTypes; [binaryNativeCode]; + }; + }; +in { + flake.commonModules.mapillary-uploader = {pkgs, ...}: { + nixpkgs.overlays = [ + (final: prev: { + mapillary-uploader = pkgs.callPackage package {}; + }) + ]; + }; +} diff --git a/modules/nixos/pkgs/panoramax.nix b/modules/nixos/pkgs/panoramax.nix new file mode 100644 index 0000000..9e0886e --- /dev/null +++ b/modules/nixos/pkgs/panoramax.nix @@ -0,0 +1,115 @@ +{...}: let + package = { + lib, + fetchFromGitLab, + buildPythonPackage, + flit-core, + flask, + pillow, + requests, + python-dotenv, + authlib, + sentry-sdk, + python-dateutil, + dateparser, + croniter, + pydantic, + flask-cors, + flask-compress, + flask-babel, + flasgger, + yoyo-migrations, + psycopg, + psycopg-pool, + tzdata, + email-validator, + pydantic-extra-types, + python-multipart, + fs, + fs-s3fs, + geopic-tag-reader, + pygeofilter, + pygeoif, + rfeed, + geojson-pydantic, + ... + }: let + pname = "geovisio"; + version = "2.10.0"; + repo = fetchFromGitLab { + owner = "panoramax"; + repo = "server/api"; + rev = version; + hash = "sha256-kCLcrOe7jJdIfmWWOmxQ5dOj8ZG2B7s0qFpHXs02B/E="; + }; + in + buildPythonPackage { + inherit pname version; + + pyproject = true; + + src = repo; + + build-system = [ + flit-core + ]; + + dependencies = [ + flask + pillow + requests + python-dotenv + authlib + sentry-sdk + python-dateutil + dateparser + croniter + pydantic + flask-cors + flask-compress + flask-babel + flasgger + yoyo-migrations + psycopg + psycopg-pool + tzdata + email-validator + pydantic-extra-types + python-multipart + fs + fs-s3fs + geopic-tag-reader + pygeofilter + pygeoif + rfeed + geojson-pydantic + # Missing from nixpkgs - may need custom packages: + # flask-executor + ]; + + # Skip tests as they may require network access or specific setup + doCheck = false; + + # Disable runtime dependencies check as many dependencies are not available in nixpkgs + dontCheckRuntimeDeps = true; + + # Disable imports check as many dependencies are not available in nixpkgs + pythonImportsCheck = []; + + meta = with lib; { + description = "Panoramax API client and tools for street-level imagery platform"; + homepage = "https://gitlab.com/panoramax/server/api"; + license = licenses.mit; + maintainers = []; + platforms = platforms.all; + }; + }; +in { + flake.commonModules.panoramax = {pkgs, ...}: { + nixpkgs.overlays = [ + (final: prev: { + panoramax = pkgs.python3.pkgs.callPackage package {}; + }) + ]; + }; +} diff --git a/modules/nixos/pkgs/prostudiomasters.nix b/modules/nixos/pkgs/prostudiomasters.nix new file mode 100644 index 0000000..3d33350 --- /dev/null +++ b/modules/nixos/pkgs/prostudiomasters.nix @@ -0,0 +1,43 @@ +{...}: let + package = { + fetchurl, + appimageTools, + writeShellScript, + }: let + pname = "prostudiomasters"; + version = "2.5.6"; + src = fetchurl { + url = "https://download.prostudiomasters.com/linux/ProStudioMasters-${version}.AppImage"; + hash = "sha256-7owOwdcucFfl+JsVj+Seau2KOz0J4P/ep7WrBSNSmbs="; + }; + + # Create the base AppImage wrapper + baseApp = appimageTools.wrapType2 { + inherit pname version src; + }; + + # Create a wrapper script that automatically adds the --in-process-gpu flag + wrapper = writeShellScript "prostudiomasters-wrapper" '' + exec ${baseApp}/bin/prostudiomasters --in-process-gpu "$@" + ''; + in + # Override the base app to use our wrapper script + baseApp.overrideAttrs (oldAttrs: { + buildCommand = + oldAttrs.buildCommand + + '' + # Replace the original binary with our wrapper + rm $out/bin/prostudiomasters + cp ${wrapper} $out/bin/prostudiomasters + chmod +x $out/bin/prostudiomasters + ''; + }); +in { + flake.commonModules.prostudiomasters = {pkgs, ...}: { + nixpkgs.overlays = [ + (final: prev: { + prostudiomasters = pkgs.callPackage package {}; + }) + ]; + }; +} diff --git a/modules/nixos/pkgs/python/default.nix b/modules/nixos/pkgs/python/default.nix new file mode 100644 index 0000000..61615f5 --- /dev/null +++ b/modules/nixos/pkgs/python/default.nix @@ -0,0 +1,22 @@ +{config, ...}: let + pkg = config.flake.commonModules; +in { + flake.commonModules.python = {...}: { + nixpkgs.overlays = [ + (final: prev: { + python3 = prev.python3.override { + packageOverrides = pythonPrev: pythonFinal: { + h3 = pythonPrev.callPackage pkg.python-h3 {h3 = final.h3;}; + pygeofilter = pythonPrev.callPackage pkg.python-pygeofilter {}; + pygeoif = pythonPrev.callPackage pkg.python-pygeoif {}; + rfeed = pythonPrev.callPackage pkg.python-rfeed {}; + pyexiv2 = pythonPrev.callPackage pkg.python-pyexiv2 {}; + geojson-pydantic = pythonPrev.callPackage pkg.python-geojson-pydantic {}; + geopic-tag-reader = pythonPrev.callPackage pkg.python-geopic-tag-reader {}; + }; + }; + python3Packages = final.python3.pkgs; + }) + ]; + }; +} diff --git a/modules/nixos/pkgs/python/geojson-pydantic.nix b/modules/nixos/pkgs/python/geojson-pydantic.nix new file mode 100644 index 0000000..4d570d3 --- /dev/null +++ b/modules/nixos/pkgs/python/geojson-pydantic.nix @@ -0,0 +1,52 @@ +{...}: let + package = { + lib, + fetchPypi, + buildPythonPackage, + flit-core, + pydantic, + geojson, + ... + }: let + pname = "geojson_pydantic"; + version = "2.0.0"; + in + buildPythonPackage { + inherit pname version; + + pyproject = true; + + src = fetchPypi { + inherit pname version; + hash = "sha256-ti6LRFAt0a1Ri19zkDWoGSSnb5gMvbOk6JFu+RO+JC4="; + }; + + build-system = [ + flit-core + ]; + + dependencies = [ + pydantic + geojson + ]; + + # Skip tests as they may require specific setup + doCheck = false; + + # Disable runtime dependencies check + dontCheckRuntimeDeps = true; + + # Basic imports check + pythonImportsCheck = ["geojson_pydantic"]; + + meta = with lib; { + description = "Pydantic models for GeoJSON objects"; + homepage = "https://github.com/developmentseed/geojson-pydantic"; + license = licenses.mit; + maintainers = []; + platforms = platforms.all; + }; + }; +in { + flake.commonModules.python-geojson-pydantic = package; +} diff --git a/modules/nixos/pkgs/python/geopic-tag-reader.nix b/modules/nixos/pkgs/python/geopic-tag-reader.nix new file mode 100644 index 0000000..29eecc8 --- /dev/null +++ b/modules/nixos/pkgs/python/geopic-tag-reader.nix @@ -0,0 +1,74 @@ +{...}: let + package = { + lib, + fetchFromGitLab, + buildPythonPackage, + flit-core, + typer, + xmltodict, + timezonefinder, + pytz, + types-pytz, + types-python-dateutil, + rtree, + python-dateutil, + pyexiv2, + ... + }: let + pname = "geopic-tag-reader"; + version = "1.8.0"; + in + buildPythonPackage { + inherit pname version; + + pyproject = true; + + src = fetchFromGitLab { + owner = "panoramax"; + repo = "server/geo-picture-tag-reader"; + rev = version; + sha256 = "0lzf5xxxcdqmq28bpvgpkxf5jxmh2nawwa4rl4yg04bdsi16rf1j"; + }; + + build-system = [ + flit-core + ]; + + dependencies = [ + typer + xmltodict + pyexiv2 + timezonefinder + pytz + types-pytz + types-python-dateutil + rtree + ]; + + optional-dependencies = { + write-exif = [ + python-dateutil + types-python-dateutil + ]; + }; + + # Skip tests as they may require network access or specific setup + doCheck = false; + + # Disable runtime dependencies check as some dependencies might have issues + dontCheckRuntimeDeps = true; + + # Disable imports check initially to avoid dependency issues + pythonImportsCheck = []; + + meta = with lib; { + description = "GeoPic Tag Reader - Python library to read and write standardized metadata from geolocated pictures EXIF metadata"; + homepage = "https://gitlab.com/panoramax/server/geo-picture-tag-reader"; + license = licenses.mit; + maintainers = []; + platforms = platforms.all; + }; + }; +in { + flake.commonModules.python-geopic-tag-reader = package; +} diff --git a/modules/nixos/pkgs/python/h3.nix b/modules/nixos/pkgs/python/h3.nix new file mode 100644 index 0000000..cf4fe7b --- /dev/null +++ b/modules/nixos/pkgs/python/h3.nix @@ -0,0 +1,85 @@ +{...}: let + package = { + autoPatchelfHook, + buildPythonPackage, + cmake, + cython, + fetchFromGitHub, + h3, + lib, + ninja, + numpy, + pytestCheckHook, + pytest-cov-stub, + scikit-build-core, + stdenv, + }: + buildPythonPackage rec { + pname = "h3"; + version = "4.3.1"; + pyproject = true; + + # pypi version does not include tests + src = fetchFromGitHub { + owner = "uber"; + repo = "h3-py"; + tag = "v${version}"; + hash = "sha256-zt7zbBgSp2P9q7mObZeQZpW9Szip62dAYdPZ2cGTmi4="; + }; + + dontConfigure = true; + + nativeCheckInputs = [ + pytestCheckHook + pytest-cov-stub + ]; + + build-system = + [ + scikit-build-core + cmake + cython + ninja + ] + ++ lib.optionals stdenv.hostPlatform.isLinux [ + # On Linux the .so files ends up referring to libh3.so instead of the full + # Nix store path. I'm not sure why this is happening! On Darwin it works + # fine. + autoPatchelfHook + ]; + + # This is not needed per-se, it's only added for autoPatchelfHook to work + # correctly. See the note above ^^ + buildInputs = lib.optionals stdenv.hostPlatform.isLinux [h3]; + + dependencies = [numpy]; + + # The following prePatch replaces the h3lib compilation with using the h3 packaged in nixpkgs. + # + # - Remove the h3lib submodule. + # - Patch CMakeLists to avoid building h3lib, and use h3 instead. + prePatch = let + cmakeCommands = '' + include_directories(${lib.getDev h3}/include/h3) + link_directories(${h3}/lib) + ''; + in '' + rm -r src/h3lib + substituteInPlace CMakeLists.txt \ + --replace-fail "add_subdirectory(src/h3lib)" "${cmakeCommands}" \ + --replace-fail "\''${CMAKE_CURRENT_BINARY_DIR}/src/h3lib/src/h3lib/include/h3api.h" "${lib.getDev h3}/include/h3/h3api.h" + ''; + + # Extra check to make sure we can import it from Python + pythonImportsCheck = ["h3"]; + + meta = { + homepage = "https://github.com/uber/h3-py"; + description = "Hierarchical hexagonal geospatial indexing system"; + license = lib.licenses.asl20; + maintainers = [lib.maintainers.kalbasit]; + }; + }; +in { + flake.commonModules.python-h3 = package; +} diff --git a/modules/nixos/pkgs/python/pyexiv2.nix b/modules/nixos/pkgs/python/pyexiv2.nix new file mode 100644 index 0000000..17b1838 --- /dev/null +++ b/modules/nixos/pkgs/python/pyexiv2.nix @@ -0,0 +1,53 @@ +{...}: let + package = { + lib, + fetchFromGitHub, + buildPythonPackage, + exiv2, + boost, + pybind11, + setuptools, + ... + }: let + pname = "pyexiv2"; + version = "2.15.3"; + in + buildPythonPackage { + inherit pname version; + + pyproject = true; + build-system = [setuptools]; + + src = fetchFromGitHub { + owner = "LeoHsiao1"; + repo = "pyexiv2"; + rev = "v${version}"; + sha256 = "sha256-83bFMaoXncvhRJNcCgkkC7B29wR5pjuLO/EdkQdqxxo="; + }; + + buildInputs = [ + exiv2 + boost + ]; + + nativeBuildInputs = [ + pybind11 + ]; + + # Skip tests as they may require specific test images + doCheck = false; + + # Disable runtime dependencies check initially + dontCheckRuntimeDeps = true; + + meta = with lib; { + description = "Python binding to the library exiv2"; + homepage = "https://github.com/LeoHsiao1/pyexiv2"; + license = licenses.gpl3Plus; + maintainers = []; + platforms = platforms.linux; + }; + }; +in { + flake.commonModules.python-pyexiv2 = package; +} diff --git a/modules/nixos/pkgs/python/pygeofilter.nix b/modules/nixos/pkgs/python/pygeofilter.nix new file mode 100644 index 0000000..0d90826 --- /dev/null +++ b/modules/nixos/pkgs/python/pygeofilter.nix @@ -0,0 +1,56 @@ +{...}: let + package = { + lib, + fetchPypi, + buildPythonPackage, + setuptools, + wheel, + lark, + python-dateutil, + shapely, + ... + }: let + pname = "pygeofilter"; + version = "0.3.1"; + in + buildPythonPackage { + inherit pname version; + + pyproject = true; + + src = fetchPypi { + inherit pname version; + hash = "sha256-+SvAYiCZ+H/os23nq92GBZ1hWontYIInNwgiI6V44VA="; + }; + + build-system = [ + setuptools + wheel + ]; + + dependencies = [ + lark + python-dateutil + shapely + ]; + + # Skip tests as they may require specific setup + doCheck = false; + + # Disable runtime dependencies check + dontCheckRuntimeDeps = true; + + # Basic imports check + pythonImportsCheck = ["pygeofilter"]; + + meta = with lib; { + description = "A pure Python parser implementation of OGC filtering standards"; + homepage = "https://github.com/geopython/pygeofilter"; + license = licenses.mit; + maintainers = []; + platforms = platforms.all; + }; + }; +in { + flake.commonModules.python-pygeofilter = package; +} diff --git a/modules/nixos/pkgs/python/pygeoif.nix b/modules/nixos/pkgs/python/pygeoif.nix new file mode 100644 index 0000000..9dac79d --- /dev/null +++ b/modules/nixos/pkgs/python/pygeoif.nix @@ -0,0 +1,52 @@ +{...}: let + package = { + lib, + fetchPypi, + buildPythonPackage, + setuptools, + wheel, + typing-extensions, + ... + }: let + pname = "pygeoif"; + version = "1.5.1"; + in + buildPythonPackage { + inherit pname version; + + pyproject = true; + + src = fetchPypi { + inherit pname version; + hash = "sha256-8nprah7Lh66swrUbzFnKeb5w7RKgEE3oYBR4shPdXYE="; + }; + + build-system = [ + setuptools + wheel + ]; + + dependencies = [ + typing-extensions + ]; + + # Skip tests as they may require specific setup + doCheck = false; + + # Disable runtime dependencies check + dontCheckRuntimeDeps = true; + + # Basic imports check + pythonImportsCheck = ["pygeoif"]; + + meta = with lib; { + description = "A basic implementation of the __geo_interface__"; + homepage = "https://github.com/cleder/pygeoif"; + license = licenses.lgpl21Plus; + maintainers = []; + platforms = platforms.all; + }; + }; +in { + flake.commonModules.python-pygeoif = package; +} diff --git a/modules/nixos/pkgs/python/rfeed.nix b/modules/nixos/pkgs/python/rfeed.nix new file mode 100644 index 0000000..bc415c9 --- /dev/null +++ b/modules/nixos/pkgs/python/rfeed.nix @@ -0,0 +1,44 @@ +{...}: let + package = { + lib, + fetchPypi, + buildPythonPackage, + setuptools, + python-dateutil, + }: + buildPythonPackage rec { + pname = "rfeed"; + version = "1.1.1"; + pyproject = true; + + src = fetchPypi { + inherit pname version; + hash = "sha256-qpUG8oZrdPWjItOUoUpjwZpoJcLZR1X/GdRt0eJDSBk="; + }; + + build-system = [ + setuptools + ]; + + dependencies = [ + python-dateutil + ]; + + # No tests available in the package + doCheck = false; + + pythonImportsCheck = [ + "rfeed" + ]; + + meta = with lib; { + description = "RSS feed generation library for Python"; + homepage = "https://pypi.org/project/rfeed/"; + license = licenses.mit; + maintainers = []; + platforms = platforms.all; + }; + }; +in { + flake.commonModules.python-rfeed = package; +} diff --git a/modules/nixos/pkgs/sgblur.nix b/modules/nixos/pkgs/sgblur.nix new file mode 100644 index 0000000..d7e4ebc --- /dev/null +++ b/modules/nixos/pkgs/sgblur.nix @@ -0,0 +1,75 @@ +{...}: let + package = { + lib, + python3Packages, + fetchFromGitHub, + pkg-config, + libjpeg_turbo, + exiftran ? libjpeg_turbo, + }: + python3Packages.buildPythonPackage { + pname = "sgblur"; + version = "1.0.0"; + + pyproject = true; + + src = fetchFromGitHub { + owner = "cquest"; + repo = "sgblur"; + rev = "master"; + hash = "sha256-17wpif2sa021kaa1pbkry4l1967la1qd7knhngvxblrvd7jqqz4y="; + }; + + nativeBuildInputs = [ + pkg-config + ]; + + buildInputs = [ + libjpeg_turbo + exiftran + ]; + + build-system = with python3Packages; [ + setuptools + wheel + ]; + + dependencies = with python3Packages; [ + # Core dependencies from pyproject.toml + ultralytics + # pyturbojpeg # May need special handling + pillow + # uuid # Built into Python + # exifread + python-multipart + fastapi + uvicorn + requests + # piexif + pydantic-settings + pydantic + ]; + + # Skip tests as they may require GPU or specific setup + doCheck = false; + + # The package may have import issues due to system dependencies + pythonImportsCheck = []; + + meta = with lib; { + description = "Panoramax Speedy Gonzales Blurring Algorithm - AI-powered face and license plate blurring API"; + homepage = "https://github.com/cquest/sgblur"; + license = licenses.mit; + maintainers = []; + platforms = platforms.unix; + }; + }; +in { + flake.commonModules.sgblur = {pkgs, ...}: { + nixpkgs.overlays = [ + (final: prev: { + sgblur = pkgs.python3.pkgs.callPackage package {}; + }) + ]; + }; +} diff --git a/modules/nixos/pkgs/webtoon-dl.nix b/modules/nixos/pkgs/webtoon-dl.nix new file mode 100644 index 0000000..0702695 --- /dev/null +++ b/modules/nixos/pkgs/webtoon-dl.nix @@ -0,0 +1,28 @@ +{...}: let + package = { + buildGoModule, + fetchFromGitHub, + ... + }: + buildGoModule rec { + pname = "webtoon-dl"; + version = "0.0.10"; + + src = fetchFromGitHub { + owner = "robinovitch61"; + repo = "webtoon-dl"; + rev = "v${version}"; + hash = "sha256-geVb3LFPZxPQYARZnaqOr5sgaN6mqkEX5ZiLvg8mF5k="; + }; + + vendorHash = "sha256-NTqUygJ6b6kTnLUnJqxCo/URzaRouPLACEPi2Ob1s9w="; + }; +in { + flake.commonModules.webtoon-dl = {pkgs, ...}: { + nixpkgs.overlays = [ + (final: prev: { + webtoon-dl = pkgs.callPackage package {}; + }) + ]; + }; +} diff --git a/modules/parts.nix b/modules/parts.nix index 3be84e6..6067651 100644 --- a/modules/parts.nix +++ b/modules/parts.nix @@ -1,4 +1,8 @@ -{inputs, ...}: let +{ + inputs, + config, + ... +}: let home-manager = inputs.home-manager; sops-nix = inputs.sops-nix; nix-syncthing = inputs.nix-syncthing; @@ -6,7 +10,8 @@ impermanence = inputs.impermanence; common-modules = [ - ../legacy-modules/common-modules + config.flake.commonModules.pkgs + config.flake.commonModules.overlays ]; home-manager-modules =