From 39b80ee20ad9d36c3406e076b2edc59b3b8c5d4c Mon Sep 17 00:00:00 2001 From: Trolli Schmittlauch Date: Thu, 11 Mar 2021 02:28:47 +0100 Subject: [PATCH] lolcommits: init at 0.16.2 - initial lolcommits packaging done by fzakaria - mplayer with v4l webcam support taken from nixpkgs-unstable --- default.nix | 7 +- pkgs/example-package/default.nix | 9 -- pkgs/lolcommits/.gitignore | 4 + pkgs/lolcommits/Gemfile | 3 + pkgs/lolcommits/Gemfile.lock | 35 +++++ pkgs/lolcommits/LICENSE | 21 +++ pkgs/lolcommits/README.md | 24 ++++ pkgs/lolcommits/default.nix | 16 +++ pkgs/lolcommits/gemset.nix | 126 +++++++++++++++++ pkgs/lolcommits/shell.nix | 7 + pkgs/mplayer/default.nix | 230 +++++++++++++++++++++++++++++++ 11 files changed, 469 insertions(+), 13 deletions(-) delete mode 100644 pkgs/example-package/default.nix create mode 100644 pkgs/lolcommits/.gitignore create mode 100644 pkgs/lolcommits/Gemfile create mode 100644 pkgs/lolcommits/Gemfile.lock create mode 100644 pkgs/lolcommits/LICENSE create mode 100644 pkgs/lolcommits/README.md create mode 100644 pkgs/lolcommits/default.nix create mode 100644 pkgs/lolcommits/gemset.nix create mode 100644 pkgs/lolcommits/shell.nix create mode 100644 pkgs/mplayer/default.nix diff --git a/default.nix b/default.nix index d6497c9..1fdca23 100644 --- a/default.nix +++ b/default.nix @@ -8,13 +8,12 @@ { pkgs ? import { } }: -{ +rec { # The `lib`, `modules`, and `overlay` names are special lib = import ./lib { inherit pkgs; }; # functions modules = import ./modules; # NixOS modules overlays = import ./overlays; # nixpkgs overlays - example-package = pkgs.callPackage ./pkgs/example-package { }; - # some-qt5-package = pkgs.libsForQt5.callPackage ./pkgs/some-qt5-package { }; - # ... + lolcommits = pkgs.callPackage ./pkgs/lolcommits {mplayer = mplayerV4l;}; + mplayerV4l = pkgs.callPackage ./pkgs/mplayer {v4lSupport = true;}; } diff --git a/pkgs/example-package/default.nix b/pkgs/example-package/default.nix deleted file mode 100644 index 41e22df..0000000 --- a/pkgs/example-package/default.nix +++ /dev/null @@ -1,9 +0,0 @@ -{ stdenv }: - -stdenv.mkDerivation rec { - name = "example-package-${version}"; - version = "1.0"; - src = ./.; - buildPhase = "echo echo Hello World > example"; - installPhase = "install -Dm755 example $out"; -} diff --git a/pkgs/lolcommits/.gitignore b/pkgs/lolcommits/.gitignore new file mode 100644 index 0000000..349868e --- /dev/null +++ b/pkgs/lolcommits/.gitignore @@ -0,0 +1,4 @@ +.direnv/ +vendor/ +result +.bundle/ diff --git a/pkgs/lolcommits/Gemfile b/pkgs/lolcommits/Gemfile new file mode 100644 index 0000000..ca40cec --- /dev/null +++ b/pkgs/lolcommits/Gemfile @@ -0,0 +1,3 @@ +source 'https://rubygems.org' do + gem 'lolcommits' +end \ No newline at end of file diff --git a/pkgs/lolcommits/Gemfile.lock b/pkgs/lolcommits/Gemfile.lock new file mode 100644 index 0000000..06cee20 --- /dev/null +++ b/pkgs/lolcommits/Gemfile.lock @@ -0,0 +1,35 @@ +GEM + remote: https://rubygems.org/ + specs: + addressable (2.7.0) + public_suffix (>= 2.0.2, < 5.0) + git (1.6.0) + rchardet (~> 1.8) + launchy (2.4.3) + addressable (~> 2.3) + lolcommits (0.16.2) + git (~> 1.6.0) + launchy (~> 2.4.3) + lolcommits-loltext (~> 0.4.0) + mercurial-ruby (~> 0.7.12) + methadone (~> 1.9.5) + mini_magick (~> 4.10.1) + open4 (~> 1.3.4) + lolcommits-loltext (0.4.0) + mercurial-ruby (0.7.12) + open4 (~> 1.3.0) + methadone (1.9.5) + bundler + mini_magick (4.10.1) + open4 (1.3.4) + public_suffix (4.0.6) + rchardet (1.8.0) + +PLATFORMS + ruby + +DEPENDENCIES + lolcommits! + +BUNDLED WITH + 2.1.4 diff --git a/pkgs/lolcommits/LICENSE b/pkgs/lolcommits/LICENSE new file mode 100644 index 0000000..ce42a2a --- /dev/null +++ b/pkgs/lolcommits/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2020 Farid Zakaria + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/pkgs/lolcommits/README.md b/pkgs/lolcommits/README.md new file mode 100644 index 0000000..c542fa5 --- /dev/null +++ b/pkgs/lolcommits/README.md @@ -0,0 +1,24 @@ +# lolcommits + +This is a [nixpkgs](https://nixos.org/) derivation for [lolcommits](https://github.com/lolcommits/lolcommits/). + +It was written to help [this discourse post](https://discourse.nixos.org/t/wrapping-ruby-applications-into-custom-path/9148). + +You can easily run it by issuing the following: + +```bash +nix run -f https://github.com/fzakaria/lolcommits/archive/master.tar.gz --command lolcommits + +Do what exactly? +Try: lolcommits --enable (when in a git repository) +Or: lolcommits --help +``` + +It includes all the necessary dependencies such as mplayer & imagemagick + +```bash +❯ cat ./result/bin/lolcommits +#! /nix/store/j8vysakw78bpgngba32hfwwikqda9yx2-bash-4.4-p23/bin/bash -e +export PATH='/nix/store/1dysm4zfzss74rw6vvhqbs623rxgygx4-mplayer-1.4/bin:/nix/store/z1fh9yz3mikpmdmxpnbs2i249477q5yf-imagemagick-6.9.11-14/bin'${PATH:+':'}$PATH +exec -a "$0" "/nix/store/xjvpw6p1yqsid0fags6bya607hzd6ff8-lolcommits-0.16.2/bin/.lolcommits-wrapped" "$@" +``` \ No newline at end of file diff --git a/pkgs/lolcommits/default.nix b/pkgs/lolcommits/default.nix new file mode 100644 index 0000000..c8d7ad3 --- /dev/null +++ b/pkgs/lolcommits/default.nix @@ -0,0 +1,16 @@ +{ nixpkgs ? import { }, lib ? nixpkgs.lib, bundlerApp ? nixpkgs.bundlerApp +, makeWrapper ? nixpkgs.makeWrapper, mplayer ? nixpkgs.mplayer +, imagemagick ? nixpkgs.imagemagick }: + +bundlerApp { + pname = "lolcommits"; + gemdir = ./.; + exes = [ "lolcommits" ]; + buildInputs = [ makeWrapper mplayer imagemagick ]; + + postBuild = '' + wrapProgram $out/bin/lolcommits --prefix PATH : ${ + lib.makeBinPath [ mplayer imagemagick ] + } + ''; +} diff --git a/pkgs/lolcommits/gemset.nix b/pkgs/lolcommits/gemset.nix new file mode 100644 index 0000000..0df169a --- /dev/null +++ b/pkgs/lolcommits/gemset.nix @@ -0,0 +1,126 @@ +{ + addressable = { + dependencies = [ "public_suffix" ]; + groups = [ "default" ]; + platforms = [ ]; + source = { + remotes = [ "https://rubygems.org" ]; + sha256 = "1fvchp2rhp2rmigx7qglf69xvjqvzq7x0g49naliw29r2bz656sy"; + type = "gem"; + }; + version = "2.7.0"; + }; + git = { + dependencies = [ "rchardet" ]; + groups = [ "default" ]; + platforms = [ ]; + source = { + remotes = [ "https://rubygems.org" ]; + sha256 = "15sbv16dlap5d6naybl8cc99zffrpzygkhjz3m6l3r5y5yrhwwjc"; + type = "gem"; + }; + version = "1.6.0"; + }; + launchy = { + dependencies = [ "addressable" ]; + groups = [ "default" ]; + platforms = [ ]; + source = { + remotes = [ "https://rubygems.org" ]; + sha256 = "190lfbiy1vwxhbgn4nl4dcbzxvm049jwc158r2x7kq3g5khjrxa2"; + type = "gem"; + }; + version = "2.4.3"; + }; + lolcommits = { + dependencies = [ + "git" + "launchy" + "lolcommits-loltext" + "mercurial-ruby" + "methadone" + "mini_magick" + "open4" + ]; + groups = [ "default" ]; + platforms = [ ]; + source = { + remotes = [ "https://rubygems.org" ]; + sha256 = "1qpjdl8np8xpw5v42331sqb628ldq300zaqg2z8iccxbrqjq240l"; + type = "gem"; + }; + version = "0.16.2"; + }; + lolcommits-loltext = { + groups = [ "default" ]; + platforms = [ ]; + source = { + remotes = [ "https://rubygems.org" ]; + sha256 = "0g1bpki6j8hzn22wh68m1gs881r4cis0vccxx1an3zq51hrrk2rf"; + type = "gem"; + }; + version = "0.4.0"; + }; + mercurial-ruby = { + dependencies = [ "open4" ]; + groups = [ "default" ]; + platforms = [ ]; + source = { + remotes = [ "https://rubygems.org" ]; + sha256 = "188zlrifrrlr88ls06f2mlji3ww9sm9rcfggfpraw547q4d44icj"; + type = "gem"; + }; + version = "0.7.12"; + }; + methadone = { + dependencies = [ ]; + groups = [ "default" ]; + platforms = [ ]; + source = { + remotes = [ "https://rubygems.org" ]; + sha256 = "1dwhlljmrv9r857jv1wnp963hmfnldjdvyqg0mwi8rsibnc30fj8"; + type = "gem"; + }; + version = "1.9.5"; + }; + mini_magick = { + groups = [ "default" ]; + platforms = [ ]; + source = { + remotes = [ "https://rubygems.org" ]; + sha256 = "0lpq12z70n10c1qshcddd5nib2pkcbkwzvmiqqzj60l01k3x4fg9"; + type = "gem"; + }; + version = "4.10.1"; + }; + open4 = { + groups = [ "default" ]; + platforms = [ ]; + source = { + remotes = [ "https://rubygems.org" ]; + sha256 = "1cgls3f9dlrpil846q0w7h66vsc33jqn84nql4gcqkk221rh7px1"; + type = "gem"; + }; + version = "1.3.4"; + }; + public_suffix = { + groups = [ "default" ]; + platforms = [ ]; + source = { + remotes = [ "https://rubygems.org" ]; + sha256 = "1xqcgkl7bwws1qrlnmxgh8g4g9m10vg60bhlw40fplninb3ng6d9"; + type = "gem"; + }; + version = "4.0.6"; + }; + rchardet = { + groups = [ "default" ]; + platforms = [ ]; + source = { + remotes = [ "https://rubygems.org" ]; + sha256 = "1isj1b3ywgg2m1vdlnr41lpvpm3dbyarf1lla4dfibfmad9csfk9"; + type = "gem"; + }; + version = "1.8.0"; + }; +} diff --git a/pkgs/lolcommits/shell.nix b/pkgs/lolcommits/shell.nix new file mode 100644 index 0000000..1d76d4b --- /dev/null +++ b/pkgs/lolcommits/shell.nix @@ -0,0 +1,7 @@ +{ pkgs ? import { } }: +with pkgs; +with stdenv; +mkShell { + name = "lolcommits-shell"; + buildInputs = [ bundix ruby ]; +} diff --git a/pkgs/mplayer/default.nix b/pkgs/mplayer/default.nix new file mode 100644 index 0000000..4e245b7 --- /dev/null +++ b/pkgs/mplayer/default.nix @@ -0,0 +1,230 @@ +{ config, lib, stdenv, fetchurl, pkg-config, freetype, yasm, ffmpeg_3 +, aalibSupport ? true, aalib ? null +, fontconfigSupport ? true, fontconfig ? null, freefont_ttf ? null +, fribidiSupport ? true, fribidi ? null +, x11Support ? true, libX11 ? null, libXext ? null, libGLU, libGL ? null +, xineramaSupport ? true, libXinerama ? null +, xvSupport ? true, libXv ? null +, alsaSupport ? stdenv.isLinux, alsaLib ? null +, screenSaverSupport ? true, libXScrnSaver ? null +, vdpauSupport ? false, libvdpau ? null +, cddaSupport ? !stdenv.isDarwin, cdparanoia ? null +, dvdnavSupport ? !stdenv.isDarwin, libdvdnav ? null +, dvdreadSupport ? true, libdvdread ? null +, bluraySupport ? true, libbluray ? null +, amrSupport ? false, amrnb ? null, amrwb ? null +, cacaSupport ? true, libcaca ? null +, lameSupport ? true, lame ? null +, speexSupport ? true, speex ? null +, theoraSupport ? true, libtheora ? null +, x264Support ? false, x264 ? null +, jackaudioSupport ? false, libjack2 ? null +, pulseSupport ? config.pulseaudio or false, libpulseaudio ? null +, bs2bSupport ? false, libbs2b ? null +, v4lSupport ? false, libv4l ? null +# For screenshots +, libpngSupport ? true, libpng ? null +, libjpegSupport ? true, libjpeg ? null +, useUnfreeCodecs ? false +, darwin ? null +, buildPackages +}: + +assert fontconfigSupport -> (fontconfig != null); +assert (!fontconfigSupport) -> (freefont_ttf != null); +assert fribidiSupport -> (fribidi != null); +assert x11Support -> (libX11 != null && libXext != null && libGLU != null && libGL != null); +assert xineramaSupport -> (libXinerama != null && x11Support); +assert xvSupport -> (libXv != null && x11Support); +assert alsaSupport -> alsaLib != null; +assert screenSaverSupport -> libXScrnSaver != null; +assert vdpauSupport -> libvdpau != null; +assert cddaSupport -> cdparanoia != null; +assert dvdnavSupport -> libdvdnav != null; +assert dvdreadSupport -> libdvdread != null; +assert bluraySupport -> libbluray != null; +assert amrSupport -> (amrnb != null && amrwb != null); +assert cacaSupport -> libcaca != null; +assert lameSupport -> lame != null; +assert speexSupport -> speex != null; +assert theoraSupport -> libtheora != null; +assert x264Support -> x264 != null; +assert jackaudioSupport -> libjack2 != null; +assert pulseSupport -> libpulseaudio != null; +assert bs2bSupport -> libbs2b != null; +assert libpngSupport -> libpng != null; +assert libjpegSupport -> libjpeg != null; +assert v4lSupport -> libv4l != null; + +let + + codecs_src = + let + dir = "http://www.mplayerhq.hu/MPlayer/releases/codecs/"; + version = "20071007"; + in + if stdenv.hostPlatform.system == "i686-linux" then fetchurl { + url = "${dir}/essential-${version}.tar.bz2"; + sha256 = "18vls12n12rjw0mzw4pkp9vpcfmd1c21rzha19d7zil4hn7fs2ic"; + } else if stdenv.hostPlatform.system == "x86_64-linux" then fetchurl { + url = "${dir}/essential-amd64-${version}.tar.bz2"; + sha256 = "13xf5b92w1ra5hw00ck151lypbmnylrnznq9hhb0sj36z5wz290x"; + } else if stdenv.hostPlatform.system == "powerpc-linux" then fetchurl { + url = "${dir}/essential-ppc-${version}.tar.bz2"; + sha256 = "18mlj8dp4wnz42xbhdk1jlz2ygra6fbln9wyrcyvynxh96g1871z"; + } else null; + + codecs = if codecs_src != null then stdenv.mkDerivation { + pname = "MPlayer-codecs-essential"; + + src = codecs_src; + + installPhase = '' + mkdir $out + cp -prv * $out + ''; + + meta.license = lib.licenses.unfree; + } else null; + + crossBuild = stdenv.hostPlatform != stdenv.buildPlatform; + +in + +stdenv.mkDerivation rec { + pname = "mplayer"; + version = "1.4"; + + src = fetchurl { + url = "http://www.mplayerhq.hu/MPlayer/releases/MPlayer-${version}.tar.xz"; + sha256 = "0j5mflr0wnklxsvnpmxvk704hscyn2785hvvihj2i3a7b3anwnc2"; + }; + + prePatch = '' + sed -i /^_install_strip/d configure + + rm -rf ffmpeg + ''; + + depsBuildBuild = [ buildPackages.stdenv.cc ]; + nativeBuildInputs = [ pkg-config yasm ]; + buildInputs = with lib; + [ freetype ffmpeg_3 ] + ++ optional aalibSupport aalib + ++ optional fontconfigSupport fontconfig + ++ optional fribidiSupport fribidi + ++ optionals x11Support [ libX11 libXext libGLU libGL ] + ++ optional alsaSupport alsaLib + ++ optional xvSupport libXv + ++ optional theoraSupport libtheora + ++ optional cacaSupport libcaca + ++ optional xineramaSupport libXinerama + ++ optional dvdnavSupport libdvdnav + ++ optional dvdreadSupport libdvdread + ++ optional bluraySupport libbluray + ++ optional cddaSupport cdparanoia + ++ optional jackaudioSupport libjack2 + ++ optionals amrSupport [ amrnb amrwb ] + ++ optional x264Support x264 + ++ optional pulseSupport libpulseaudio + ++ optional screenSaverSupport libXScrnSaver + ++ optional lameSupport lame + ++ optional vdpauSupport libvdpau + ++ optional speexSupport speex + ++ optional libpngSupport libpng + ++ optional libjpegSupport libjpeg + ++ optional bs2bSupport libbs2b + ++ optional v4lSupport libv4l + ++ (with darwin.apple_sdk.frameworks; optionals stdenv.isDarwin [ Cocoa OpenGL ]) + ; + + configurePlatforms = [ ]; + configureFlags = with lib; [ + "--enable-freetype" + (if fontconfigSupport then "--enable-fontconfig" else "--disable-fontconfig") + (if x11Support then "--enable-x11 --enable-gl" else "--disable-x11 --disable-gl") + (if xineramaSupport then "--enable-xinerama" else "--disable-xinerama") + (if xvSupport then "--enable-xv" else "--disable-xv") + (if alsaSupport then "--enable-alsa" else "--disable-alsa") + (if screenSaverSupport then "--enable-xss" else "--disable-xss") + (if vdpauSupport then "--enable-vdpau" else "--disable-vdpau") + (if cddaSupport then "--enable-cdparanoia" else "--disable-cdparanoia") + (if dvdnavSupport then "--enable-dvdnav" else "--disable-dvdnav") + (if bluraySupport then "--enable-bluray" else "--disable-bluray") + (if amrSupport then "--enable-libopencore_amrnb" else "--disable-libopencore_amrnb") + (if cacaSupport then "--enable-caca" else "--disable-caca") + (if lameSupport then "--enable-mp3lame --disable-mp3lame-lavc" else "--disable-mp3lame --enable-mp3lame-lavc") + (if speexSupport then "--enable-speex" else "--disable-speex") + (if theoraSupport then "--enable-theora" else "--disable-theora") + (if x264Support then "--enable-x264 --disable-x264-lavc" else "--disable-x264 --enable-x264-lavc") + (if jackaudioSupport then "" else "--disable-jack") + (if pulseSupport then "--enable-pulse" else "--disable-pulse") + (if v4lSupport then "--enable-v4l2 --enable-tv-v4l2" else "--disable-v4l2 --disable-tv-v4l2") + "--disable-xanim" + "--disable-ivtv" + "--disable-xvid --disable-xvid-lavc" + "--disable-ossaudio" + "--disable-ffmpeg_a" + "--yasm=${buildPackages.yasm}/bin/yasm" + # Note, the `target` vs `host` confusion is intensional. + "--target=${stdenv.hostPlatform.config}" + ] ++ optional + (useUnfreeCodecs && codecs != null && !crossBuild) + "--codecsdir=${codecs}" + ++ optional + ((stdenv.hostPlatform.isi686 || stdenv.hostPlatform.isx86_64) && !crossBuild) + "--enable-runtime-cpudetection" + ++ optional fribidiSupport "--enable-fribidi" + ++ optional stdenv.isLinux "--enable-vidix" + ++ optional stdenv.isLinux "--enable-fbdev" + ++ optionals (crossBuild) [ + "--enable-cross-compile" + "--disable-vidix-pcidb" + "--with-vidix-drivers=no" + ]; + + preConfigure = '' + configureFlagsArray+=( + "--cc=$CC" + "--host-cc=$CC_FOR_BUILD" + "--as=$AS" + "--nm=$NM" + "--ar=$AR" + "--ranlib=$RANLIB" + "--windres=$WINDRES" + ) + ''; + + postConfigure = '' + echo CONFIG_MPEGAUDIODSP=yes >> config.mak + ''; + + NIX_LDFLAGS = with lib; toString ( + optional fontconfigSupport "-lfontconfig" + ++ optional fribidiSupport "-lfribidi" + ++ optionals x11Support [ "-lX11" "-lXext" ] + ++ [ "-lfreetype" ] + ); + + installTargets = [ "install" ] ++ lib.optional x11Support "install-gui"; + + enableParallelBuilding = true; + + # Provide a reasonable standard font when not using fontconfig. Maybe we should symlink here. + postInstall = lib.optionalString (!fontconfigSupport) + '' + mkdir -p $out/share/mplayer + cp ${freefont_ttf}/share/fonts/truetype/FreeSans.ttf $out/share/mplayer/subfont.ttf + if test -f $out/share/applications/mplayer.desktop ; then + echo "NoDisplay=True" >> $out/share/applications/mplayer.desktop + fi + ''; + + meta = { + description = "A movie player that supports many video formats"; + homepage = "http://mplayerhq.hu"; + license = "GPL"; + maintainers = [ lib.maintainers.eelco ]; + platforms = [ "i686-linux" "x86_64-linux" "x86_64-darwin" ]; + }; +}