summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--archpkgs.nix82
-rw-r--r--default.nix8
-rw-r--r--flake.nix4
3 files changed, 91 insertions, 3 deletions
diff --git a/archpkgs.nix b/archpkgs.nix
new file mode 100644
index 0000000..37f8236
--- /dev/null
+++ b/archpkgs.nix
@@ -0,0 +1,82 @@
+{ self, pkgs, wrappers, system }:
+let
+ lib = pkgs.lib;
+ make-tzst = name: value: pkgs.stdenv.mkDerivation {
+ pname = "${name}-tzst";
+ version = value.version;
+ # src = bundlers.bundlers.${system}.toArx value;
+ # dontUnpack = true;
+ src = value;
+ nativeBuildInputs = [ pkgs.zstd ];
+ buildPhase = ''
+ mtime=$(date -d '@${toString self.lastModified}' '+%Y%m%d %H:%M')
+ cp $src/bin/${name} "sorre-${name}"
+ tar -cf '${name}.tar.zst' --zstd "--mtime=$mtime" --mode=a+rX,u+w --dereference "sorre-${name}"
+ '';
+ installPhase = ''
+ mkdir -p $out
+ cp '${name}.tar.zst' $out/
+ '';
+ };
+
+ arch = builtins.head (lib.strings.splitString "-" system);
+
+ make-pkgbuild = name: version: archdeps:
+ pkgs.writeText "${name}-pkgbuild" ''
+ pkgname=sorre-${name}
+ pkgver=${version}
+ pkgrel=1
+ depends=${archdeps}
+ arch=('${arch}') # FIXME?
+ source=('${name}.tar.zst')
+ md5sums=('SKIP')
+
+ package() {
+ mkdir -p $pkgdir/usr/bin
+ tar -xf ${name}.tar.zst -C $pkgdir/usr/bin
+ }
+ '';
+
+ # make an Arch Linux compatible wrapper package
+ #
+ # This function only packages the **wrapper**, it does not include the package
+ # itself. Make sure the archeps are set correctly. The wrapper binary will be
+ # prefixed with `sorre-`.
+ #
+ # See:
+ # - https://man.archlinux.org/man/PKGBUILD.5
+ # - https://tonyfinn.com/blog/arch-packages-with-nix/
+ make-archpkg = { name, value, archdeps }:
+ let
+ tzst = make-tzst name value;
+ pkgbuild = make-pkgbuild name value.version archdeps;
+ in pkgs.stdenv.mkDerivation {
+ pname = "${name}-arch";
+ version = value.version;
+ src = tzst;
+ dontUnpack = true;
+ nativeBuildInputs = [ pkgs.zstd pkgs.pacman pkgs.fakeroot pkgs.libarchive ];
+ buildPhase = ''
+ cp $src/${name}.tar.zst .
+ cp ${pkgbuild} ./PKGBUILD
+
+ # FIXME: remove nodeps, build mtree myself :(
+ # having nodeps here means that pacman can't actaully resolve **any**
+ # dependecy, only warn you if they're missing.
+ PKGEXT=".pkg.tar.zst" makepkg --nodeps --config ${pkgs.pacman}/etc/makepkg.conf
+ '';
+
+ installPhase = ''
+ mkdir -p $out
+ cp *.pkg.tar.zst $out/
+ touch -m -d '@${toString self.lastModified}' $out/*.pkg.tar.zst
+ '';
+ };
+in
+{
+ gallery-dl = make-archpkg {
+ name = "gallery-dl";
+ value = wrappers.gallery-dl;
+ archdeps = "(gallery-dl)";
+ };
+}
diff --git a/default.nix b/default.nix
index 3a871d5..a2dc56f 100644
--- a/default.nix
+++ b/default.nix
@@ -1,9 +1,10 @@
{
+ self,
pkgs ? import <nixpkgs> { },
wrapper-manager,
+ system,
}:
let
-
recursiveMerge =
with pkgs.lib;
attrList:
@@ -44,11 +45,14 @@ let
./wrappers/gallery-dl
];
};
+ wrappers = wm-eval.config.build.packages;
+
+ archpkgs = import ./archpkgs.nix { inherit self pkgs wrappers system; };
in
{
+ inherit wrappers archpkgs;
lib = import ./lib { inherit pkgs; };
modules = import ./modules;
overlays = import ./overlays;
- wrappers = wm-eval.config.build.packages;
}
// packages
diff --git a/flake.nix b/flake.nix
index 0f99bea..e52cc12 100644
--- a/flake.nix
+++ b/flake.nix
@@ -28,7 +28,9 @@
};
in
{
- legacyPackages = import ./default.nix { inherit pkgs wrapper-manager; };
+ legacyPackages = import ./default.nix {
+ inherit self pkgs wrapper-manager system;
+ };
packages = nixpkgs.lib.filterAttrs (_: v: nixpkgs.lib.isDerivation v) self.legacyPackages.${system};
}
);