diff options
Diffstat (limited to 'pkgs')
-rwxr-xr-x | pkgs/aacolorize/aacolorize.py | 182 | ||||
-rw-r--r-- | pkgs/aacolorize/default.nix | 13 | ||||
-rw-r--r-- | pkgs/axbo/default.nix | 77 | ||||
-rw-r--r-- | pkgs/beehive/default.nix | 16 | ||||
-rw-r--r-- | pkgs/beehive/godeps.nix | 378 | ||||
-rw-r--r-- | pkgs/blop/default.nix | 16 | ||||
-rw-r--r-- | pkgs/default.nix | 24 | ||||
-rw-r--r-- | pkgs/gajim/config.patch | 80 | ||||
-rw-r--r-- | pkgs/grandpa/default.nix | 19 | ||||
-rw-r--r-- | pkgs/kpatches/bfqsched.nix | 44 | ||||
-rw-r--r-- | pkgs/libcmt/default.nix | 25 | ||||
-rw-r--r-- | pkgs/librxtx-java/default.nix | 29 | ||||
-rw-r--r-- | pkgs/lockdev/default.nix | 23 | ||||
-rw-r--r-- | pkgs/nixops/default.nix | 47 | ||||
-rw-r--r-- | pkgs/pvolctrl/default.nix | 35 | ||||
-rw-r--r-- | pkgs/sidplayfp/default.nix | 29 | ||||
-rw-r--r-- | pkgs/tkabber-urgent-plugin/default.nix | 26 | ||||
-rw-r--r-- | pkgs/tomahawk/default.nix | 59 | ||||
-rw-r--r-- | pkgs/twitchstream/default.nix | 112 | ||||
-rw-r--r-- | pkgs/vim/default.nix | 333 |
20 files changed, 1170 insertions, 397 deletions
diff --git a/pkgs/aacolorize/aacolorize.py b/pkgs/aacolorize/aacolorize.py new file mode 100755 index 00000000..ff19b687 --- /dev/null +++ b/pkgs/aacolorize/aacolorize.py @@ -0,0 +1,182 @@ +#!/usr/bin/env python +import os +import sys + +from optparse import Option, OptionParser + +COLORS = { + "k": (30, "Black"), + "r": (31, "Red"), + "g": (32, "Green"), + "y": (33, "Yellow"), + "b": (34, "Blue"), + "p": (35, "Pink"), + "c": (36, "Cyan"), + "w": (37, "White"), +} + +ESC = chr(27) + +class ColorizeError(Exception): + pass + +class Color(object): + def __init__(self, ident=None): + """ + Initialize a color object, if no `ident` is given or it's invalid, + the Color object represents "no color". + """ + if ident is not None: + spec = COLORS.get(ident.lower(), None) + else: + spec = None + + if spec is None: + self.ident = None + self.bold = False + self.code = None + self.name = "None" + else: + self.ident = ident + self.code, self.name = spec + + if ident.isupper(): + self.bold = True + else: + self.bold = False + + @property + def attrs(self): + """ + A tuple consisting of the SGR attributes. + """ + if self.ident is None: + return () + + if self.bold: + return (1, self.code) + else: + return (self.code,) + + def sgr_attrs(self, *attrs): + """ + Return the attributes specified by `attrs` formatted according + to the CSI specification. + """ + return ';'.join(map(lambda c: str(c), attrs)) + + def sgr(self, *attrs): + """ + Start Set Graphics Rendition + Return the CSI escape code for `attrs`. + """ + return "%s[%sm" % (ESC, self.sgr_attrs(*attrs)) + + def sgr_start(self): + """ + Start Set Graphics Rendition + Return the CSI start escape code for the current color. + """ + return self.sgr(*self.attrs) + + def sgr_stop(self): + """ + Clear Set Graphics Rendition + """ + return self.sgr() + + def apply(self, value): + """ + Apply the current color to the string in `value`. + """ + return "%s%s%s" % (self.sgr_start(), value, self.sgr_stop()) + + def describe(self): + """ + Return the description of the current color IN color :-) + """ + fmt = "%c: <ESC>[%sm -> [%s]" + return fmt % ( + self.ident, + self.sgr_attrs(*self.attrs), + self.apply(self.name) + ) + + def transform_to(self, new_color): + """ + Return the CSI sequences needed to transform into `new_color`. + """ + if self.ident is None and new_color.ident is not None: + return new_color.sgr_start() + elif self.ident is not None and new_color.ident is None: + return self.sgr_stop() + elif self.ident is None and new_color.ident is None: + return '' + elif self.code == new_color.code: + if not self.bold and new_color.bold: + return self.sgr(1) + elif self.bold and not new_color.bold: + return self.sgr(22) + elif self.bold == new_color.bold: + return '' + else: + if self.bold and new_color.bold: + return new_color.sgr(new_color.code) + + return self.sgr_stop()+new_color.sgr_start() + + def __repr__(self): + if self.bold: + return "<Bold color %s>" % self.name.lower() + else: + return "<Color %s>" % self.name.lower() + +def print_colortable(): + for ident in COLORS.iterkeys(): + normal = Color(ident).describe() + bold = Color(ident.upper()).describe() + sys.stdout.write("%-35s%s\n" % (normal, bold)) + +def colorize_art(art, colmap): + if len(art) != len(colmap): + raise ColorizeError("Art and colormap differ in size!") + + no_color = Color() + + out = "" + last_color = no_color + for i, char in enumerate(colmap): + color = Color(char) + out += last_color.transform_to(color) + art[i] + last_color = color + + last_color.transform_to(no_color) + + return out + +def colorize_file(artfile, mapfile=None): + if mapfile is None: + mapfile = os.path.splitext(artfile)[0]+'.colmap' + + asciiart = open(artfile, 'r').read() + colormap = open(mapfile, 'r').read() + + return colorize_art(asciiart, colormap) + +if __name__ == "__main__": + parser = OptionParser(usage="%prog [options] artfile [mapfile]") + parser.add_option("-t", "--table", action="store_true", dest="table", + help="Show color table and exit.") + + (options, args) = parser.parse_args() + + if options.table: + print_colortable() + parser.exit() + + if not len(args) in (1, 2): + parser.print_help() + parser.exit() + else: + colorized = colorize_file(*args) + sys.stdout.write(colorized) diff --git a/pkgs/aacolorize/default.nix b/pkgs/aacolorize/default.nix new file mode 100644 index 00000000..a7a3c3f1 --- /dev/null +++ b/pkgs/aacolorize/default.nix @@ -0,0 +1,13 @@ +{ buildPythonPackage, runCommand }: + +buildPythonPackage { + name = "aacolorize"; + src = runCommand "aacolorize-src" {} '' + mkdir -p "$out" + cp "${./aacolorize.py}" "$out/aacolorize" + cat > "$out/setup.py" <<SETUP + from distutils.core import setup + setup(name='aacolorize', scripts=['aacolorize']) + SETUP + ''; +} diff --git a/pkgs/axbo/default.nix b/pkgs/axbo/default.nix new file mode 100644 index 00000000..d83e891d --- /dev/null +++ b/pkgs/axbo/default.nix @@ -0,0 +1,77 @@ +{ stdenv, fetchurl, oraclejre, librxtx_java, makeFontsConf, dejavu_fonts }: + +stdenv.mkDerivation rec { + name = "axbo-research-${version}"; + version = "2.0.18"; + + src = fetchurl { + url = let + urlversion = stdenv.lib.replaceChars ["."] ["_"] version; + in "https://www.dropbox.com/s/shy0yqcyivonobi/aXbo_unix_${urlversion}.sh"; + sha256 = "1zc3bpqfa5pdpl7masigvv98mi5phl04p80fyd2ink33xbmik70z"; + }; + + buildInputs = [ oraclejre librxtx_java ]; + + unpackCmd = let + fontconfigFile = makeFontsConf { + fontDirectories = stdenv.lib.singleton dejavu_fonts; + }; + in '' + datalen="$(sed -n 's/^.*totalDataLength=\([0-9]\+\).*$/\1/p' "$src")" + installer_offset="$(sed -n 's/^ *tail *-c *\([0-9]\+\).*$/\1/p' "$src")" + + installer_dir="$(mktemp -d)" + mkdir -p "$installer_dir" + tail -c "$installer_offset" "$src" | tar xz -C "$installer_dir" + + cat > "$installer_dir/responses" <<EOF + executeLauncherAction$Boolean=false + sys.programGroup.linkDir=/dev/null + sys.component.73$Boolean=true + sys.languageId=en + sys.installationDir=$(pwd)/${name} + sys.programGroup.enabled$Boolean=false + sys.programGroup.allUsers$Boolean=true + sys.programGroup.name=aXbo + EOF + + cd "$installer_dir" + export FONTCONFIG_FILE="${fontconfigFile}" + java -client -Dinstall4j.jvmDir="${oraclejre}" \ + -Dexe4j.moduleName="$src" \ + -Dexe4j.totalDataLength="$datalen" \ + -Dinstall4j.cwd="$installer_dir" \ + -Djava.ext.dirs="${oraclejre}/lib/ext" \ + -Dsun.java2d.noddraw=true \ + -classpath i4jruntime.jar:user.jar \ + com.install4j.runtime.Launcher launch \ + com.install4j.runtime.installer.Installer \ + false false "" "" false true false "" true true \ + 0 0 "" 20 20 Arial 0,0,0 8 500 'version 2.0.18' \ + 20 40 Arial 0,0,0 8 500 \ + -1 -q -varfile "$installer_dir/responses" + cd - + rm -rf "$installer_dir" + ''; + + installPhase = '' + mkdir -p "$out/libexec/lib" "$out/bin" + for jarfile in lib/*; do + case "''${jarfile##*/}" in + axbo.jar) cp -vt "$out/libexec" "$jarfile";; + RXTXcomm.jar) ln -s "${librxtx_java}/lib/java/RXTXcomm.jar" \ + "$out/libexec/lib";; + *.jar) cp -vt "$out/libexec/lib" "$jarfile";; + esac + done + + cat > "$out/bin/axbo-research" <<WRAPPER + #!${stdenv.shell} + ${oraclejre}/bin/java -Djava.library.path="${librxtx_java}/lib" \ + -classpath "${librxtx_java}/lib/java/RXTXcomm.jar" \ + -jar "$out/libexec/axbo.jar" + WRAPPER + chmod +x "$out/bin/axbo-research" + ''; +} diff --git a/pkgs/beehive/default.nix b/pkgs/beehive/default.nix deleted file mode 100644 index 8cadb9e5..00000000 --- a/pkgs/beehive/default.nix +++ /dev/null @@ -1,16 +0,0 @@ -{ goPackages, lib, fetchFromGitHub, fetchhg, fetchgit }: - -goPackages.buildGoPackage { - name = "beehive"; - goPackagePath = "github.com/muesli/beehive"; - src = fetchFromGitHub { - owner = "muesli"; - repo = "beehive"; - rev = "74a7fc4927b8ef14b199254e04630c24f44429f7"; - sha256 = "1clgc6245yb3yxqdc14xj0f8hc8v4b9hgkv22c89zp0n1by8xrqx"; - }; - buildInputs = lib.mapAttrsToList (name: val: val) (import ./godeps.nix { - inherit (goPackages) buildGoPackage; - inherit lib fetchFromGitHub fetchhg fetchgit; - }); -} diff --git a/pkgs/beehive/godeps.nix b/pkgs/beehive/godeps.nix deleted file mode 100644 index a0e7526e..00000000 --- a/pkgs/beehive/godeps.nix +++ /dev/null @@ -1,378 +0,0 @@ -{ buildGoPackage, lib, fetchFromGitHub, fetchgit, fetchhg }: - -rec { - cascadia = buildGoPackage { - name = "cascadia"; - goPackagePath = "code.google.com/p/cascadia"; - src = fetchhg { - url = "https://code.google.com/p/cascadia"; - rev = "5d796540e3cb93ea0556c897e6a3c7690f614d35"; - sha256 = "1mxmj4vbh47j3nvmdqdah4fprkyww3pf8i9sy0zcar52bpa4j69c"; - }; - buildInputs = [ net ]; - }; - - charset = buildGoPackage { - name = "go-charset"; - goPackagePath = "code.google.com/p/go-charset"; - src = fetchhg { - url = "https://code.google.com/p/go-charset"; - rev = "ebbeafdc430eb6c7e44e9a730a38eaff4c56ba3a"; - sha256 = "162jd0ryvwaj7bwxbdwrs1vi6ig3bhd6m4n16wf54frrzyqxh34p"; - }; - }; - - gonet = buildGoPackage { - name = "go.net"; - goPackagePath = "code.google.com/p/go.net"; - src = fetchhg { - url = "https://code.google.com/p/go.net"; - rev = "937a34c9de13c766c814510f76bca091dee06028"; - sha256 = "1f91yzjllw2pdk68yjvf8hjix4mrlqn7fh97h9n7qjy903rwnb9q"; - }; - buildInputs = [ net text ]; - }; - - gomock = buildGoPackage { - name = "gomock"; - goPackagePath = "code.google.com/p/gomock"; - src = fetchgit { - url = "https://code.google.com/p/gomock"; - rev = "e033c7513ca3d743bbb64df299bdec29e93fed03"; - sha256 = "0vmpqibyx09bdqnqsy8g4xiw3hpw0j9kww7ak2z7fdzxpd9ly337"; - }; - }; - - anaconda = buildGoPackage { - name = "anaconda"; - goPackagePath = "github.com/ChimeraCoder/anaconda"; - src = fetchFromGitHub { - owner = "ChimeraCoder"; - repo = "anaconda"; - rev = "964821c05001e5a38dd234d681ce9a929858481a"; - sha256 = "077fxb4iazsjfsbmj966ifias84agxbzip742w9cbc7fv1bpy085"; - }; - buildInputs = [ tokenbucket jsonpointer oauth ]; - }; - - tokenbucket = buildGoPackage { - name = "tokenbucket"; - goPackagePath = "github.com/ChimeraCoder/tokenbucket"; - src = fetchFromGitHub { - owner = "ChimeraCoder"; - repo = "tokenbucket"; - rev = "c5a927568de7aad8a58127d80bcd36ca4e71e454"; - sha256 = "1cyzlvk1mgdvdfmqsdsy5y2rflfz5q54a9rz9jylc2mg40c1d6dq"; - }; - }; - - gotumblr = buildGoPackage { - name = "gotumblr"; - goPackagePath = "github.com/MariaTerzieva/gotumblr"; - src = fetchFromGitHub { - owner = "MariaTerzieva"; - repo = "gotumblr"; - rev = "62f45d64049aeab0b3835351edc66704c7210f7a"; - sha256 = "06bqc6c4j9g8l0xqhc9g5jmx4q6dq5jid5bpj4skca30gsqgldgr"; - }; - buildInputs = [ oauth1a ]; - }; - - goquery = buildGoPackage { - name = "goquery"; - goPackagePath = "github.com/PuerkitoBio/goquery"; - src = fetchFromGitHub { - owner = "PuerkitoBio"; - repo = "goquery"; - rev = "4cf64c51f7e80d56d9ae2ffe7d684d3dd5dbd5d0"; - sha256 = "1d6cl0qhfx9ngj3hn56mxwwy7yak62c5wxa77f7yfarql84r8h4n"; - }; - buildInputs = [ cascadia net ]; - }; - - GoOse = buildGoPackage { - name = "GoOse"; - goPackagePath = "github.com/advancedlogic/GoOse"; - src = fetchFromGitHub { - owner = "advancedlogic"; - repo = "GoOse"; - rev = "e210b2436fec0a3ce1b5f9209ee3340314b408e2"; - sha256 = "0sjqy295x9rn93b5k3r8hdbi5gjbdd3h2dn89v4nzpnzmlrfbc2c"; - }; - buildInputs = [ cascadia charset gojs-config goquery net latinx set ]; - }; - - gojs-config = buildGoPackage { - name = "gojs-config"; - goPackagePath = "github.com/advancedlogic/gojs-config"; - src = fetchFromGitHub { - owner = "advancedlogic"; - repo = "gojs-config"; - rev = "bff36193fca8bd2f6269e8c4e8c723991fd20565"; - sha256 = "1k0wgn3pj384sqai2c9dkv06j0z439i3xqzfl3kplb0wdf8a2vy0"; - }; - }; - - latinx = buildGoPackage { - name = "latinx"; - goPackagePath = "github.com/bjarneh/latinx"; - src = fetchFromGitHub { - owner = "bjarneh"; - repo = "latinx"; - rev = "4dfe9ba2a293f28a5e06fc7ffe56b1d71a47b8c8"; - sha256 = "0lavz5m0dz1rxyl20var3xqj2ndcmai2v893p83pjwm4333yb5g0"; - }; - }; - - jsonpointer = buildGoPackage { - name = "go-jsonpointer"; - goPackagePath = "github.com/dustin/go-jsonpointer"; - src = fetchFromGitHub { - owner = "dustin"; - repo = "go-jsonpointer"; - rev = "75939f54b39e7dafae879e61f65438dadc5f288c"; - sha256 = "1vcv5xb6v6akbbi71q4srfla311s4p9kspqya2h40x8fxx00lkxp"; - }; - propagatedBuildInputs = [ gojson ]; - }; - - gojson = buildGoPackage { - name = "gojson"; - goPackagePath = "github.com/dustin/gojson"; - src = fetchFromGitHub { - owner = "dustin"; - repo = "gojson"; - rev = "af16e0e771e2ed110f2785564ae33931de8829e4"; - sha256 = "0626n6a5hwb0zwi6dwsmqdv2g5fwzsfx22rbxscaydpb90b6qnin"; - }; - }; - - restful = buildGoPackage { - name = "go-restful"; - goPackagePath = "github.com/emicklei/go-restful"; - src = fetchFromGitHub { - owner = "emicklei"; - repo = "go-restful"; - rev = "7ef8ec372029a3112fdb94a53b1ca8eedf666e67"; - sha256 = "0rrpa9xiqkzapn6axjl19nnhxk0ljjq20a8jpam80hkzw4waa955"; - }; - postPatch = '' - rm -rf examples - ''; - buildInputs = [ schema ]; - }; - - goirc = buildGoPackage { - name = "goirc"; - goPackagePath = "github.com/fluffle/goirc"; - src = fetchFromGitHub { - owner = "fluffle"; - repo = "goirc"; - rev = "0cac69d2eec69bb08bb29b776d045a78b9699791"; - sha256 = "0iba19rslsyww3qsf9d4ncdxjjz7pv8k36ar5s1i6f4fwv42d56q"; - }; - buildInputs = [ glog golog gomock ]; - }; - - golog = buildGoPackage { - name = "golog"; - goPackagePath = "github.com/fluffle/golog"; - src = fetchFromGitHub { - owner = "fluffle"; - repo = "golog"; - rev = "3b86dae249b53d7dc2d9e817ff019fa01a155b06"; - sha256 = "0b8fzkk9bshkfsnbx2nq6dn0dcngsh5awpym98sinkkfwywvlq2f"; - }; - buildInputs = [ gomock ]; - }; - - oauth = buildGoPackage { - name = "go-oauth"; - goPackagePath = "github.com/garyburd/go-oauth"; - src = fetchFromGitHub { - owner = "garyburd"; - repo = "go-oauth"; - rev = "fa02955a8929c2f007c533fbdfb8ddc91bb6a731"; - sha256 = "0zx9azdhjxf18fk4y3hnp70cz75iyllqfvfxma02i8f63q364d94"; - }; - postPatch = '' - rm -rf examples - ''; - }; - - glog = buildGoPackage { - name = "glog"; - goPackagePath = "github.com/golang/glog"; - src = fetchFromGitHub { - owner = "golang"; - repo = "glog"; - rev = "44145f04b68cf362d9c4df2182967c2275eaefed"; - sha256 = "1k7sf6qmpgm0iw81gx2dwggf9di6lgw0n54mni7862hihwfrb5rq"; - }; - }; - - protobuf = buildGoPackage { - name = "protobuf"; - goPackagePath = "github.com/golang/protobuf"; - src = fetchFromGitHub { - owner = "golang"; - repo = "protobuf"; - rev = "f7137ae6b19afbfd61a94b746fda3b3fe0491874"; - sha256 = "05n1ws6y9qpp3imxjvl3jnknq6kca2vc5g475fqr2l67ap3w5lwk"; - }; - subPackages = [ "proto" "protoc-gen-go" ]; - }; - - schema = buildGoPackage { - name = "schema"; - goPackagePath = "github.com/gorilla/schema"; - src = fetchFromGitHub { - owner = "gorilla"; - repo = "schema"; - rev = "c8422571edf3131506bab7df27e18980fe2598d5"; - sha256 = "10czpd111l834aam52bh1cxv31pq4h8mi1w994v4848rmbw3jpp4"; - }; - }; - - dbus = buildGoPackage { - name = "go.dbus"; - goPackagePath = "github.com/guelfey/go.dbus"; - src = fetchFromGitHub { - owner = "guelfey"; - repo = "go.dbus"; - rev = "f6a3a2366cc39b8479cadc499d3c735fb10fbdda"; - sha256 = "15rnpvclg4b3cblcxwwgkdfgamhigiyla0s1rwhfjraqhn94r3ph"; - }; - postPatch = '' - rm -rf _examples - ''; - }; - - web = buildGoPackage { - name = "web"; - goPackagePath = "github.com/hoisie/web"; - src = fetchFromGitHub { - owner = "hoisie"; - repo = "web"; - rev = "5a66d0fa07a54688eba8fa506576a78a942ef243"; - sha256 = "1h4ary4ac51xznr41996k3xqlclm3r5mjba71y6anfwdrhaa2qf1"; - }; - buildInputs = [ gonet ]; - postPatch = '' - rm -rf examples - ''; - }; - - goserial = buildGoPackage { - name = "goserial"; - goPackagePath = "github.com/huin/goserial"; - src = fetchFromGitHub { - owner = "huin"; - repo = "goserial"; - rev = "7b90efdb22b1c168a57b998b2780cf541b2c4740"; - sha256 = "05ha3yvhvbfrbxlqi8x1fwcliginw0vxhh76mh6vycn9n7yjpacy"; - }; - }; - - rss = buildGoPackage { - name = "go-pkg-rss"; - goPackagePath = "github.com/jteeuwen/go-pkg-rss"; - src = fetchFromGitHub { - owner = "jteeuwen"; - repo = "go-pkg-rss"; - rev = "2382fc0262cb000be19e9042cdbc8459105b4f00"; - sha256 = "0rss5sj128qwai60wpkm5cy2q8d9yfakdm4pqb8p4lhgpq26g05h"; - }; - buildInputs = [ xmlx ]; - }; - - xmlx = buildGoPackage { - name = "go-pkg-xmlx"; - goPackagePath = "github.com/jteeuwen/go-pkg-xmlx"; - src = fetchFromGitHub { - owner = "jteeuwen"; - repo = "go-pkg-xmlx"; - rev = "cf505b97c711dd1c5a4682f68ea04dd35e385b8f"; - sha256 = "01pdjndl1i0p7lr8svi1j0f79zyl36s0xn7yb8d8yziksbczbcrj"; - }; - }; - - oauth1a = buildGoPackage { - name = "oauth1a"; - goPackagePath = "github.com/kurrik/oauth1a"; - src = fetchFromGitHub { - owner = "kurrik"; - repo = "oauth1a"; - rev = "fc2542bc5f2532ed4a437960d2d51ff6e18a5cb6"; - sha256 = "1v9zsn80y5x5fklc7q8rxixjrh5g01rsdlz247lgf3rag0hb3d39"; - }; - }; - - xmpp = buildGoPackage { - name = "go-xmpp"; - goPackagePath = "github.com/mattn/go-xmpp"; - src = fetchFromGitHub { - owner = "mattn"; - repo = "go-xmpp"; - rev = "8b13d0ad771420685f85ed09d8e9bf81757e7e20"; - sha256 = "022all0cphxmrg015jzfsqd5xd5nli7fpw32wx6ql79s4rsy3bwb"; - }; - postPatch = '' - rm -rf _example - ''; - }; - - goefa = buildGoPackage { - name = "goefa"; - goPackagePath = "github.com/michiwend/goefa"; - src = fetchFromGitHub { - owner = "michiwend"; - repo = "goefa"; - rev = "381f3d7b77fc04d9a81d2bc9e3e6d2fc742757b1"; - sha256 = "1aiiafbpvw2xlvjgh27mfljd3d0j443iz7sp9w9w3109ay1q2gk4"; - }; - buildInputs = [ charset ]; - }; - - hue = buildGoPackage { - name = "go.hue"; - goPackagePath = "github.com/muesli/go.hue"; - src = fetchFromGitHub { - owner = "muesli"; - repo = "go.hue"; - rev = "8aefcc693cafb5b2b4ef8ca8d51ab880849e8c12"; - sha256 = "158q3g5rg9wra1wxkvyb1c2v868gp9mslhf6gmbifj516lsb1agi"; - }; - }; - - net = buildGoPackage { - name = "net"; - goPackagePath = "golang.org/x/net"; - src = fetchgit { - url = "https://go.googlesource.com/net"; - rev = "97d8e4e174133a4d1d2171380e510eb4dea8f5ea"; - sha256 = "0jydngilxhgw8f1zgz11hbjk87bhj0jpar89a2py1pii4ncx9w04"; - }; - buildInputs = [ text ]; - }; - - text = buildGoPackage { - name = "text"; - goPackagePath = "golang.org/x/text"; - src = fetchgit { - url = "https://go.googlesource.com/text"; - rev = "26df76be81cdb060ed9820481a0d67b2d0b04ac2"; - sha256 = "1vmgzzi0r1idjfgfwibq2r3xlnab3w2v6nmm3c5l2bb994w376gn"; - }; - }; - - set = buildGoPackage { - name = "set.v0"; - goPackagePath = "gopkg.in/fatih/set.v0"; - src = fetchgit { - url = "https://gopkg.in/fatih/set.v0"; - rev = "27c40922c40b43fe04554d8223a402af3ea333f3"; - sha256 = "1d8yz8p4jvyqvmpim40x5y7kj91c5hcc5hbmxhv0j32ifz01nacl"; - }; - }; -} diff --git a/pkgs/blop/default.nix b/pkgs/blop/default.nix new file mode 100644 index 00000000..6f1f49c5 --- /dev/null +++ b/pkgs/blop/default.nix @@ -0,0 +1,16 @@ +{ stdenv, fetchurl, ladspaH }: + +stdenv.mkDerivation rec { + name = "blop-${version}"; + version = "0.2.8"; + + configureFlags = [ + "--with-ladspa-prefix=${ladspaH}" + "--with-ladspa-plugin-dir=$(out)/lib/ladspa" + ]; + + src = fetchurl { + url = "mirror://sourceforge/blop/${name}.tar.gz"; + sha256 = "02iymw84dml8glyqgx1mxq4fz2fifgi1jca28hx2r3a2mi7i71vy"; + }; +} diff --git a/pkgs/default.nix b/pkgs/default.nix index 9ff952ed..d156deff 100644 --- a/pkgs/default.nix +++ b/pkgs/default.nix @@ -1,9 +1,27 @@ -{ pkgs ? import <nixpkgs> {} }: +{ pkgs ? import <nixpkgs> {} +}: let callPackage = pkgs.lib.callPackageWith (pkgs // self); self = { - beehive = callPackage ./beehive {}; + aacolorize = callPackage ./aacolorize { }; + axbo = callPackage ./axbo { }; + blop = callPackage ./blop { }; + grandpa = callPackage ./grandpa { }; + nixops = callPackage ./nixops { }; + libCMT = callPackage ./libcmt { }; + librxtx_java = callPackage ./librxtx-java { }; + lockdev = callPackage ./lockdev { }; + pvolctrl = callPackage ./pvolctrl { }; + sidplayfp = callPackage ./sidplayfp { }; + tkabber_urgent_plugin = callPackage ./tkabber-urgent-plugin { }; + tomahawk = callPackage ./tomahawk { }; + twitchstream = callPackage ./twitchstream { }; + vim = callPackage ./vim { }; + + vuizvuiKernelPatches = { + bfqsched = callPackage ./kpatches/bfqsched.nix { }; + }; }; -in self +in { vuizvui = self; } diff --git a/pkgs/gajim/config.patch b/pkgs/gajim/config.patch new file mode 100644 index 00000000..fcfcc371 --- /dev/null +++ b/pkgs/gajim/config.patch @@ -0,0 +1,80 @@ +diff --git a/src/common/optparser.py b/src/common/optparser.py +index f84b18a..0078317 100644 +--- a/src/common/optparser.py ++++ b/src/common/optparser.py +@@ -30,6 +30,7 @@ import os + import sys + import locale + import re ++from itertools import chain + from time import time + from common import gajim + from common import helpers +@@ -46,19 +47,25 @@ class OptionsParser: + + def read(self): + try: +- fd = open(self.__filename) ++ cfg = nixfd = open("@nix_config@", 'r') + except Exception: + if os.path.exists(self.__filename): + #we talk about a file + print _('Error: cannot open %s for reading') % self.__filename + return False + ++ try: ++ fd = open(self.__filename) ++ cfg = chain(cfg, fd) ++ except Exception: ++ fd = None ++ + new_version = gajim.config.get('version') + new_version = new_version.split('-', 1)[0] + seen = set() + regex = re.compile(r"(?P<optname>[^.=]+)(?:(?:\.(?P<key>.+))?\.(?P<subname>[^.=]+))?\s=\s(?P<value>.*)") + +- for line in fd: ++ for line in cfg: + try: + line = line.decode('utf-8') + except UnicodeDecodeError: +@@ -79,10 +86,13 @@ class OptionsParser: + self.update_config(old_version, new_version) + self.old_values = {} # clean mem + +- fd.close() ++ if fd is not None: ++ fd.close() ++ ++ nixfd.close() + return True + +- def write_line(self, fd, opt, parents, value): ++ def write_line(self, (fd, nixcfg), opt, parents, value): + if value is None: + return + value = value[1] +@@ -102,17 +112,21 @@ class OptionsParser: + p = p.encode('utf-8') + s += p + '.' + s += opt +- fd.write(s + ' = ' + value + '\n') ++ line = s + ' = ' + value + '\n' ++ if not nixcfg.startswith(line) and not ('\n' + line) in nixcfg: ++ fd.write(line) + + def write(self): + (base_dir, filename) = os.path.split(self.__filename) + self.__tempfile = os.path.join(base_dir, '.' + filename) ++ + try: ++ nixcfg = open("@nix_config@", 'r').read() + f = open(self.__tempfile, 'w') + except IOError, e: + return str(e) + try: +- gajim.config.foreach(self.write_line, f) ++ gajim.config.foreach(self.write_line, (f, nixcfg)) + except IOError, e: + return str(e) + f.flush() diff --git a/pkgs/grandpa/default.nix b/pkgs/grandpa/default.nix new file mode 100644 index 00000000..bc68f157 --- /dev/null +++ b/pkgs/grandpa/default.nix @@ -0,0 +1,19 @@ +{ fetchgit, buildPythonPackage, pythonPackages, cython, gpm }: + +pythonPackages.buildPythonPackage { + name = "grandpa-0.5"; + namePrefix = ""; + + src = fetchgit { + url = "git://github.com/aszlig/GrandPA.git"; + rev = "41f21f67446b98f4600bc043abe32b95af6dd048"; + sha256 = "06sgz39ri0ai3x2fck44rczk04pj8zcysbhp97x20ggmqhx5vxyh"; + }; + + doCheck = false; + + buildInputs = [ cython gpm ]; + propagatedBuildInputs = with pythonPackages; [ + bsddb curses pyserial pyglet + ]; +} diff --git a/pkgs/kpatches/bfqsched.nix b/pkgs/kpatches/bfqsched.nix new file mode 100644 index 00000000..ff7d8752 --- /dev/null +++ b/pkgs/kpatches/bfqsched.nix @@ -0,0 +1,44 @@ +{ stdenv, fetchurl }: + +let + bfqVersion = "v7r7"; + kernelVersion = "3.19"; + version = "${kernelVersion}.0-${bfqVersion}"; + + baseURL = "http://algo.ing.unimo.it/people/paolo/disk_sched/patches"; + + fetchPatch = { name, sha256 }: fetchurl { + url = "${baseURL}/${version}/${name}.patch"; + inherit sha256; + }; + + allPatches = [ + (fetchPatch { + name = "0001-block-cgroups-kconfig-build-bits-for-BFQ-" + + "${bfqVersion}-${kernelVersion}"; + sha256 = "1qlk1hcirf3x9h80f9crnyqgxvw79xi89rwv0sh4hsd1lw3sbi7s"; + }) + (fetchPatch { + name = "0002-block-introduce-the-BFQ-" + + "${bfqVersion}-I-O-sched-for-${kernelVersion}"; + sha256 = "04fbynd6k7g92rbyciswx3mswxr0amvp75wzdpn57wwjv5vlh7b2"; + }) + (fetchPatch { + name = "0003-block-bfq-add-Early-Queue-Merge-EQM-to-BFQ-" + + "${bfqVersion}-for-${kernelVersion}.0"; + sha256 = "17ypb5y7wkr719vy00wm09szmqnlpzpvkcq5phivdxd27417828m"; + }) + ]; + + patch = stdenv.mkDerivation { + name = "bfqsched-${version}.patch"; + inherit allPatches; + buildCommand = '' + cat $allPatches > "$out" + ''; + }; + +in { + name = "bfqsched-${version}"; + inherit version patch; +} diff --git a/pkgs/libcmt/default.nix b/pkgs/libcmt/default.nix new file mode 100644 index 00000000..e255ef25 --- /dev/null +++ b/pkgs/libcmt/default.nix @@ -0,0 +1,25 @@ +{ stdenv, fetchurl, ladspaH }: + +stdenv.mkDerivation rec { + name = "libcmt-${version}"; + version = "1.16"; + + buildInputs = [ ladspaH ]; + + setSourceRoot = '' + sourceRoot=cmt/src + ''; + + makeFlags = [ + "INSTALL_PLUGINS_DIR=$(out)/lib/ladspa" + ]; + + preInstall = '' + mkdir -p "$out/lib/ladspa" + ''; + + src = fetchurl { + url = "http://www.ladspa.org/download/cmt_src_${version}.tgz"; + sha256 = "0dan83pvljij3972bv214balc26p9fgw40i2d5y0x7lbd5z1saji"; + }; +} diff --git a/pkgs/librxtx-java/default.nix b/pkgs/librxtx-java/default.nix new file mode 100644 index 00000000..861dc43b --- /dev/null +++ b/pkgs/librxtx-java/default.nix @@ -0,0 +1,29 @@ +{ stdenv, fetchurl, unzip, jdk, lockdev }: + +stdenv.mkDerivation rec { + name = "rxtx-${version}"; + version = "2.2pre2"; + + src = fetchurl { + urls = [ + "http://rxtx.qbang.org/pub/rxtx/${name}.zip" + "ftp://ftp.freebsd.org/pub/FreeBSD/ports/distfiles/${name}.zip" + ]; + sha256 = "00sv9604hkq81mshih0fhqfzn4mf01d6rish6vplsi0gfqz3fc1w"; + }; + + buildInputs = [ unzip jdk lockdev ]; + + NIX_CFLAGS_COMPILE = "-DUTS_RELEASE=\"3.8.0\""; + + configureFlags = [ "--enable-liblock" ]; + + makeFlags = [ + "JHOME=$(out)/lib/java" + "RXTX_PATH=$(out)/lib" + ]; + + preInstall = '' + mkdir -p "$out/lib/java" + ''; +} diff --git a/pkgs/lockdev/default.nix b/pkgs/lockdev/default.nix new file mode 100644 index 00000000..52e78eb5 --- /dev/null +++ b/pkgs/lockdev/default.nix @@ -0,0 +1,23 @@ +{ stdenv, fetchurl, perl }: + +let + baseurl = "ftp://ftp.debian.org/debian/pool/main/l/lockdev/"; +in stdenv.mkDerivation rec { + name = "lockdev-${version}"; + version = "1.0.3"; + + buildInputs = [ perl ]; + + patches = stdenv.lib.singleton (fetchurl { + url = baseurl + "lockdev_1.0.3-1.5.diff.gz"; + sha256 = "1l3pq1nfb5qx3i91cjaiz3c53368gw6m28a5mv9391n5gmsdmi3r"; + }); + + NIX_CFLAGS_COMPILE = "-fPIC -D_PATH_LOCK=\"/tmp\""; + installFlags = [ "basedir=$(out)" ]; + + src = fetchurl { + url = baseurl + "lockdev_${version}.orig.tar.gz"; + sha256 = "10lzhq6r2dn8y3ki7wlqsa8s3ndkf842bszcjw4dbzf3g9fn7bnc"; + }; +} diff --git a/pkgs/nixops/default.nix b/pkgs/nixops/default.nix new file mode 100644 index 00000000..d9d96a5b --- /dev/null +++ b/pkgs/nixops/default.nix @@ -0,0 +1,47 @@ +{ stdenv, fetchFromGitHub, fetchpatch, git }: + +let + rev = "9d7fbce08380107d3ff6e2546add817b4ac40ee0"; + sha256 = "167silv9p27gayrlrzpm88rj60gj3hlxhkhnsp4ccpbvq6yw1wr3"; + + master = stdenv.mkDerivation rec { + name = "nixops-upstream-patched"; + + src = fetchFromGitHub { + owner = "NixOS"; + repo = "nixops"; + inherit rev sha256; + }; + + phases = [ "unpackPhase" "patchPhase" "installPhase" ]; + + patches = [ + (fetchpatch { + url = "https://github.com/NixOS/nixops/pull/201.diff"; + sha256 = "1i5yycqayxggg3l1i6wk8lp64lqlxw5nmfya9fcrgmck8ls0rxid"; + }) + (fetchpatch rec { + name = "read-write-by-default.diff"; + url = "https://github.com/aszlig/nixops/compare/" + + "NixOS:master...aszlig:${name}"; + sha256 = "0a1jcqrqfi7dfvlha5r0609bzvin7p7nj523xxcrvwpgp6ag0zsa"; + }) + ]; + + patchFlags = "--merge -p1"; + + installPhase = '' + cp -a . "$out" + ''; + }; + + release = import "${master}/release.nix" { + nixopsSrc = { + outPath = master; + inherit rev; + revCount = 0; + shortRev = builtins.substring 0 7 rev; + }; + officialRelease = false; + }; +in stdenv.lib.getAttr stdenv.system release.build diff --git a/pkgs/pvolctrl/default.nix b/pkgs/pvolctrl/default.nix new file mode 100644 index 00000000..25edb27f --- /dev/null +++ b/pkgs/pvolctrl/default.nix @@ -0,0 +1,35 @@ +{ stdenv, fetchurl, pkgconfig, pulseaudio }: + +stdenv.mkDerivation rec { + name = "pvolctrl-0.23"; + + unpackPhase = let + baseurl = "https://sites.google.com/site/guenterbartsch/blog/" + + "volumecontrolutilityforpulseaudio/"; + makefile = fetchurl { + url = baseurl + "Makefile"; + sha256 = "0l2ffvb617csk6h29y64v6ywhpcp7la6vvcip1w4nq0yry6jhrqz"; + }; + source = fetchurl { + url = baseurl + "pvolctrl.c"; + sha256 = "0vcd5dlw9l47jpabwmmzdvlkn67fz55dr3sryyh56sl263mibjda"; + }; + in '' + mkdir -p "${name}" + sed -e 's|/usr/bin/||' "${makefile}" > "${name}/Makefile" + sed -e 's/PA_VOLUME_MAX/PA_VOLUME_NORM/ + /avg_vol += (avg_vol \* vol_mod) \/ 100;/ { + s/(avg_vol/((int)PA_VOLUME_NORM/ + } + /if (vol_mod)/i \ + if (info->name == NULL || strncmp(info->name, "combined", 8) != 0) \ + return;' "${source}" > "${name}/pvolctrl.c" + sourceRoot="${name}" + ''; + + installPhase = '' + install -D -T pvolctrl "$out/bin/pvolctrl" + ''; + + buildInputs = [ pkgconfig pulseaudio ]; +} diff --git a/pkgs/sidplayfp/default.nix b/pkgs/sidplayfp/default.nix new file mode 100644 index 00000000..4304d4e4 --- /dev/null +++ b/pkgs/sidplayfp/default.nix @@ -0,0 +1,29 @@ +{ stdenv, fetchurl, pkgconfig, alsaLib, pulseaudio }: + +let + libsidplayfp = stdenv.mkDerivation rec { + name = "libsidplayfp-${version}"; + version = "1.3.0"; + + src = fetchurl { + url = "mirror://sourceforge/sidplay-residfp/${name}.tar.gz"; + sha256 = "1gd4pn445v3wzr95z1b8642w016dnhq2hi8dgpc9imxig4xhx47d"; + }; + }; + +in stdenv.mkDerivation rec { + name = "sidplayfp-${version}"; + version = "1.1.0.1"; + + src = fetchurl { + url = "mirror://sourceforge/sidplay-residfp/${name}.tar.gz"; + sha256 = "0m8gk4xw2g4s3rcc3qy7nw6i08ivijjnbf3b6s5y3ryysyjjmc50"; + }; + + postPatch = '' + sed -i -e '/cerr.*\(Clear screen\|Move cursor\)/d' src/menu.cpp + ''; + + buildInputs = [ pkgconfig libsidplayfp alsaLib pulseaudio ]; +} + diff --git a/pkgs/tkabber-urgent-plugin/default.nix b/pkgs/tkabber-urgent-plugin/default.nix new file mode 100644 index 00000000..b39e5ea8 --- /dev/null +++ b/pkgs/tkabber-urgent-plugin/default.nix @@ -0,0 +1,26 @@ +{ stdenv, fetchsvn, xlibs }: + +stdenv.mkDerivation { + name = "tkabber-urgent-plugin"; + + src = fetchsvn { + url = "http://svn.xmpp.ru/repos/tkabber-3rd-party/trunk/plugins/urgent"; + rev = 528; + sha256 = "1qr7i0559ad5y1l5h2gp8aix4nsfgm0bx7jqb030hgbxaw1xnbp5"; + }; + + buildInputs = [ xlibs.libX11 ]; + + patchPhase = '' + sed -i -e 's|exec xwininfo|exec ${xlibs.xwininfo}/bin/xwininfo|' urgent.tcl + ''; + + buildPhase = '' + gcc -lX11 -o urgent urgent.c + ''; + + installPhase = '' + install -vd "$out/share/tkabber-plugins/urgent" + cp -vpt "$out/share/tkabber-plugins/urgent" urgent urgent.tcl + ''; +} diff --git a/pkgs/tomahawk/default.nix b/pkgs/tomahawk/default.nix new file mode 100644 index 00000000..16219e3b --- /dev/null +++ b/pkgs/tomahawk/default.nix @@ -0,0 +1,59 @@ +{ stdenv, fetchFromGitHub, cmake, pkgconfig, attica, boost, gnutls, libechonest +, liblastfm, lucenepp, vlc, qca2, qca2_ossl, qjson, qt4, qtkeychain, quazip +, sparsehash, taglib, websocketpp, makeWrapper + +, enableXMPP ? true, libjreen ? null +, enableKDE ? false, kdelibs ? null +, enableTelepathy ? false, telepathy_qt ? null +}: + +assert enableXMPP -> libjreen != null; +assert enableKDE -> kdelibs != null; +assert enableTelepathy -> telepathy_qt != null; + +let + quazipQt4 = quazip.override { qt = qt4; }; +in stdenv.mkDerivation rec { + name = "tomahawk-${version}"; + version = "0.9.0-git"; + + src = fetchFromGitHub { + owner = "tomahawk-player"; + repo = "tomahawk"; + rev = "0ec1fa0ab6fd674ca4d898c30739eb058b85dbe5"; + sha256 = "1lfxgi7qib99zzi4byvrz0ng6l51nvfdjciyhabdlqb286wkka2f"; + }; + + cmakeFlags = [ + "-DLUCENEPP_INCLUDE_DIR=${lucenepp}/include" + "-DLUCENEPP_LIBRARY_DIR=${lucenepp}/lib" + ]; + + buildInputs = [ + cmake pkgconfig attica boost gnutls libechonest liblastfm lucenepp vlc + qca2 qjson qt4 qtkeychain quazipQt4 sparsehash taglib websocketpp + makeWrapper + ] ++ stdenv.lib.optional enableXMPP libjreen + ++ stdenv.lib.optional enableKDE kdelibs + ++ stdenv.lib.optional enableTelepathy telepathy_qt; + + postInstall = let + pluginPath = stdenv.lib.concatStringsSep ":" [ + "${qca2_ossl}/lib/qt4/plugins" + ]; + in '' + for i in "$out"/bin/*; do + wrapProgram "$i" --prefix QT_PLUGIN_PATH : "${pluginPath}" + done + ''; + + enableParallelBuilding = true; + + meta = with stdenv.lib; { + description = "A multi-source music player"; + homepage = "http://tomahawk-player.org/"; + license = licenses.gpl3Plus; + platforms = platforms.all; + maintainers = [ maintainers.aszlig ]; + }; +} diff --git a/pkgs/twitchstream/default.nix b/pkgs/twitchstream/default.nix new file mode 100644 index 00000000..543ad261 --- /dev/null +++ b/pkgs/twitchstream/default.nix @@ -0,0 +1,112 @@ +{ stdenv, fetchurl, writeScriptBin, ffmpeg_2, pulseaudio }: + +# FIXME: Clean up this whole file! + +with stdenv.lib; + +let + streams = { + dnyarri = { + width = 1920; + height = 1080; + monitor = 1; + }; + mmrnmhrm = { + width = 1600; + height = 1280; + monitor = 1; + }; + }; + + sumAttr = name: attrs: acc: acc + (getAttr name attrs); + maxAttr = name: attrs: acc: let + current = getAttr name attrs; + in if acc > current then acc else current; + + fullwidth = fold (sumAttr "width") 0 (attrValues streams); + maxheight = fold (maxAttr "height") 0 (attrValues streams); + + resolution = "1920x1080"; + fps = 15; + quality = "slow"; + + encoder = let + aacenc = stdenv.mkDerivation rec { + name = "vo-aacenc-0.1.3"; + src = fetchurl { + url = "mirror://sourceforge/opencore-amr/${name}.tar.gz"; + sha256 = "0dhghm3c8pqrriwwyj5x9i0yf52fmdfijbgqqkvqvwarldvp86p5"; + }; + }; + base = ffmpeg_2.override { x11grabSupport = true; }; + in stdenv.lib.overrideDerivation base (attrs: { + configureFlags = attrs.configureFlags ++ [ + "--enable-libpulse" + "--enable-version3" + "--enable-libvo-aacenc" + ]; + preConfigure = '' + addPkgConfigPath "${pulseaudio}" + addPkgConfigPath "${aacenc}" + ''; + NIX_CFLAGS_COMPILE = "-I${aacenc}/include -L${aacenc}/lib"; + buildInputs = attrs.buildInputs ++ [ pulseaudio aacenc ]; + }); + + script = let + combine = [ + "color=c=black:s=1248x640 [surface]" + "[0:v] setpts=PTS-STARTPTS, scale=680x540 [left]" + "[1:v] setpts=PTS-STARTPTS, scale=568x640 [right]" + "[surface][left] overlay=0:0 [leftonly]" + "[leftonly][right] overlay=680:0 [out]" + ]; + /* + combine = [ + "color=c=black:s=${toString fullwidth}x${toString maxheight} [surface]" + "[surface][0:v] overlay=0:0 [leftonly]" + "[leftonly][1:v] overlay=${toString streams.dnyarri.width}:0 [out]" + ]; + */ + nop = x: "\\"; + in '' + #!${stdenv.shell} + keyfile="$HOME/.twitch.key" + if [ ! -e "$keyfile" ]; then + echo "You need to put your streaming key into $keyfile!" >&2 + echo "To obtain the key, please visit the following URL:" >&2 + echo "http://www.twitch.tv/broadcast/dashboard/streamkey" >&2 + exit 1 + fi + + ${encoder}/bin/ffmpeg -loglevel warning \ + -f x11grab -s "${resolution}" -r "${toString fps}" -i "$DISPLAY+1920,0" \ + -f pulse -ac 2 -i default \ + -codec:v libx264 -s 1280x720 -preset:v fast -crf 24 -pix_fmt yuv420p \ + -codec:a libvo_aacenc -ar 44100 -threads auto -b:a 128k -bufsize 8k \ + -f flv "rtmp://live-fra.twitch.tv/app/$(< "$keyfile")" "$@" + ''; + + disabled = '' + ${encoder}/bin/ffmpeg \ + -f x11grab -s "${resolution}" -r "${toString fps}" -i "$DISPLAY+1920,0" \ + ${nop '' + -i 'tcp://dnyarri:7891?listen' \ + ''} + -f pulse -ac 2 -i default \ + ${nop '' + -filter_complex "${concatStringsSep "; " combine}" \ + -map "[out]" -map 2:a,0:v \ + -c:v libx264 -preset "${quality}" -s 1280x720 \ + -b 2500k -minrate 2500k -maxrate 2500k \ + -tune film -qscale:v 1 -threads:v 4 -crf 1 -tune animation \ + -c:a libmp3lame -ar 44100 -qscale:a 1 -bufsize 512k -threads 4 \ + -framerate "${toString fps}" \ + -force_key_frames 2 -b 2500k -minrate 2500k -maxrate 2500k \ + -g 2 -keyint_min 2 \ + ''} + -c:v libx264 -preset fast -pix_fmt yuv420p -s 1280x800 -threads 0 \ + -c:a libmp3lame -ab 128k -ar 44100 -threads 0 \ + -f flv "rtmp://live-fra.twitch.tv/app/$(< "$keyfile")" "$@" + ''; +in writeScriptBin "twitchstream" script diff --git a/pkgs/vim/default.nix b/pkgs/vim/default.nix new file mode 100644 index 00000000..f753b453 --- /dev/null +++ b/pkgs/vim/default.nix @@ -0,0 +1,333 @@ +{ stdenv, lib, writeTextFile, writeText, buildEnv +, fetchurl, fetchFromGitHub, vim_configurable +}: + +let + fetchVimScript = { srcId, sha256, type, name }: let + baseUrl = "http://www.vim.org/scripts/download_script.php"; + src = fetchurl { + name = "script${toString srcId}.vim"; + url = "${baseUrl}?src_id=${toString srcId}"; + inherit sha256; + }; + in stdenv.mkDerivation { + name = "vim-${type}-${toString srcId}"; + buildCommand = '' + install -vD -m 0644 "${src}" "$out/${type}/${name}.vim" + ''; + }; + + extractSubdir = subdir: src: stdenv.mkDerivation { + name = "${src.name}-subdir"; + phases = [ "unpackPhase" "installPhase" ]; + inherit src; + installPhase = '' + cp -Rd "${subdir}" "$out" + ''; + }; + + mkVimPlugins = plugins: buildEnv { + name = "vim-plugins"; + paths = with lib; mapAttrsToList (const id) plugins; + ignoreCollisions = true; + postBuild = '' + find -L "$out" -mindepth 1 -maxdepth 1 -type f -delete + ''; + }; + + pluginDeps = { + vimAddonMwUtils = fetchFromGitHub { + owner = "MarcWeber"; + repo = "vim-addon-mw-utils"; + rev = "0c5612fa31ee434ba055e21c76f456244b3b5109"; + sha256 = "147s1k4n45d3x281vj35l26sv4waxjlpqdn83z3k9n51556h1d45"; + }; + + vimAddonCompletion = fetchFromGitHub { + owner = "MarcWeber"; + repo = "vim-addon-completion"; + rev = "80f717d68df5b0d7b32228229ddfd29c3e86e435"; + sha256 = "08acffzy847w8b5j8pdw6qsidm2859ki5q351n4r7fkr969p80mi"; + }; + + vimAddonActions = fetchFromGitHub { + owner = "MarcWeber"; + repo = "vim-addon-actions"; + rev = "a5d20500fb8812958540cf17862bd73e7af64936"; + sha256 = "1wfkwr89sn2w97i94d0dqylcg9mr6pirjadi0a4l492nfnsh99bc"; + }; + + vimAddonBackgroundCmd = fetchFromGitHub { + owner = "MarcWeber"; + repo = "vim-addon-background-cmd"; + rev = "14df72660a95804a57c02b9ff0ae3198608e2491"; + sha256 = "09lh6hqbx05gm7njhpqvhqdwig3pianq9rddxmjsr6b1vylgdgg4"; + }; + + vimAddonErrorFormats = fetchFromGitHub { + owner = "MarcWeber"; + repo = "vim-addon-errorformats"; + rev = "dcbb203ad5f56e47e75fdee35bc92e2ba69e1d28"; + sha256 = "159zqm69fxbxcv3b2y99g57bf20qrzsijcvb5rzy2njxah3049m1"; + }; + + vimAddonToggleBuffer = fetchFromGitHub { + owner = "MarcWeber"; + repo = "vim-addon-toggle-buffer"; + rev = "a1b38b9c5709cba666ed2d84ef06548f675c6b0b"; + sha256 = "1xq38kfdm36c34ln66znw841q797w5gm8bpq1x64bsf2h6n3ml03"; + }; + + vimAddonGotoThingAtCursor = fetchFromGitHub { + owner = "MarcWeber"; + repo = "vim-addon-goto-thing-at-cursor"; + rev = "f052e094bdb351829bf72ae3435af9042e09a6e4"; + sha256 = "1ksm2b0j80zn8sz2y227bpcx4jsv76lwgr2gpgy2drlyqhn2vlv0"; + }; + + vimAddonViews = fetchFromGitHub { + owner = "MarcWeber"; + repo = "vim-addon-views"; + rev = "d1383ad56d0a07d7350880adbadf9de501729fa8"; + sha256 = "09gqh7w5rk4lmra706schqaj8dnisf396lpsipm7xv6gy1qbslnv"; + }; + + vimAddonSwfMill = fetchFromGitHub { + owner = "MarcWeber"; + repo = "vim-addon-swfmill"; + rev = "726777e02cbe3ad8f82e37421fb37674f446a148"; + sha256 = "0ablzl5clgfzhzwvzzbaj0cda0b4cyrj3pbv02f26hx7rfnssaqm"; + }; + + vimHaxeSyntax = fetchFromGitHub { + owner = "MarcWeber"; + repo = "vim-haxe-syntax"; + rev = "500acc2f2ab92d77ff6cd04fdc7868800c033dfa"; + sha256 = "1ipm0igplplfmscm3bk95qpf9rw71h133l9shmw54mxr4h0ymnmj"; + }; + + tlib = fetchFromGitHub { + owner = "tomtom"; + repo = "tlib_vim"; + rev = "bc4097bd38c4bc040fe1e74df68dec6c9adfcb6a"; + sha256 = "19v7bgmkk4k2g1z62bd0kky29xxfq96l7wfrl27wb2zijlhbrnpz"; + }; + + vamStub = writeTextFile { + name = "vam-stub"; + destination = "/autoload/vam.vim"; + text = '' + fun! vam#DefineAndBind(local, global, default) + return ' if !exists('.string(a:global).') | + \ let '.a:global.' = '.a:default.' | + \ endif | let '.a:local.' = '.a:global + endfun + ''; + }; + }; + + plugins = mkVimPlugins (pluginDeps // { + vimErl = fetchFromGitHub { + owner = "jimenezrick"; + repo = "vimerl"; + rev = "823bf8cb515bb10396c705cdc017aa9121cc4d12"; + sha256 = "0sybkx8iy8qhr6nlwn52j7zd5v99rn0b8wbg43d112z2px4yq5x3"; + }; + + vimHaxe = fetchFromGitHub { + owner = "MarcWeber"; + repo = "vim-haxe"; + rev = "8efc705db41a01713d67d437f29866a1ff831e8a"; + sha256 = "15kv13gvpgf23p0566qrlw7gmpir2z7g5dnkfs1knmcwzw45am5d"; + }; + + factor = extractSubdir "misc/vim" (fetchFromGitHub { + owner = "slavapestov"; + repo = "factor"; + rev = "0d6f70cc7cf35cc627ee78886e2932091a651fe6"; + sha256 = "0lmqzvrmwgmxpcpwgn59y033sf4jybmw3lffbjwww5d7ch90333q"; + }); + + opaLang = extractSubdir "tools/editors/vim" (fetchFromGitHub { + owner = "MLstate"; + repo = "opalang"; + rev = "94e4e6d9d8da9a72214f4f28dd1ffa1a987997eb"; + sha256 = "0d6b67868cfqakkz63y5ynpz549lbpfzc3c3x7kx3ffsv10xy3bb"; + }); + + lslvim = fetchFromGitHub { + owner = "sukima"; + repo = "LSLvim"; + rev = "f269de39a1c713a43470e90d0ec78208c0f05e0b"; + sha256 = "1plwx5id3jsj4y6yhshlf3rishxhf1b9k47g2cpzaczvqb5bl40w"; + }; + + vimSyntaxShakespeare = fetchFromGitHub { + owner = "pbrisbin"; + repo = "vim-syntax-shakespeare"; + rev = "29085ae94ee3dbd7f39f2a7705d86692ef5bc365"; + sha256 = "0kvys81jiwqzwmpbk1lvbciw28yha4shd1xby5saiy4b68l6d8rk"; + }; + + glsl = fetchVimScript { + name = "glsl"; + srcId = 3194; + sha256 = "1vqfcpjmfyjc95wns3i84kgd1k5r2lwjjvjcprygi9g9vng7i5xc"; + type = "syntax"; + }; + + actionScript = fetchVimScript { + name = "actionscript"; + srcId = 1205; + sha256 = "0pdzqg678lhn7lmqf3z9icpj6ff2nnghsxy983kxkn8sblnzlhfs"; + type = "syntax"; + }; + + indentPython = fetchVimScript { + name = "python"; + srcId = 4316; + sha256 = "1pgdiaqd1hm0qpspy1asj7i103pq0846lnjrxvl6pk17ymww9pmk"; + type = "indent"; + }; + + nixAddon = fetchFromGitHub { + owner = "MarcWeber"; + repo = "vim-addon-nix"; + rev = "7b0a376bb1797fef8da2dc14e768f318bcb671e8"; + sha256 = "00dsba2a0az9bw1sni12km1vdga9x32dapxaj5gmq98hzqlhklyp"; + }; + + urwebAddon = fetchFromGitHub { + owner = "MarcWeber"; + repo = "vim-addon-urweb"; + rev = "49ea3960a9924a5dd7ff70956d1a7c0479a55773"; + sha256 = "090ww8nxqsabrwf4r8g7a93kawnp6zwpsx65yxpacwwwlbc73m7s"; + }; + + indentHaskell = fetchVimScript { + name = "haskell"; + srcId = 7407; + sha256 = "1lj44jkyihmcnj2kcfckhqzr9gfipda9frbzicix2wrc5728kjsv"; + type = "indent"; + }; + + fishSyntax = fetchVimScript { + name = "fish"; + srcId = 20242; + sha256 = "12gfmyxxf84f19bp8xfmkb9phbfkifn89sjgi8hnv6dn0a5y1zpj"; + type = "syntax"; + }; + + elmVim = fetchFromGitHub { + owner = "lambdatoast"; + repo = "elm.vim"; + rev = "ad556c97e26072b065825852ceead0fe6a1f7d7c"; + sha256 = "19k6b6m5ngm5qn2f3p13hzjyvha53fpdgq691z8n0lwfn8831b21"; + }; + + flake8 = fetchFromGitHub { + owner = "nvie"; + repo = "vim-flake8"; + rev = "293613dbe731a2875ce93739e7b64ee504d8bbab"; + sha256 = "0xmqmbh66g44vhx9769mzs820k6ksbpfnsfvivmbhzlps2hjqpqg"; + }; + }); + + generic = '' + syntax on + colorscheme elflord + + " boolean + set nocompatible + set showcmd + set showmatch + set ignorecase + set smartcase + set incsearch + set modeline + set smarttab + set expandtab + set smartindent + set ruler + + " non-boolean + set tabstop=4 + set softtabstop=4 + set shiftwidth=4 + set textwidth=80 + set termencoding=ascii + set backspace=indent,eol,start + set background=dark + ''; + + plugin = '' + " erlang + let erlang_folding = 0 + let erlang_highlight_bif = 1 + let erlang_force_use_vimerl_indent = 1 + + " python + let python_highlight_numbers = 1 + let python_highlight_builtins = 1 + let python_highlight_exceptions = 1 + + " all plugins + set runtimepath^=${plugins} + set runtimepath+=${plugins}/after + ''; + + autocmd = '' + " jump to last position + au BufReadPost * if line("'\"") > 1 && line("'\"") <= line("$") | + \ exe "normal! g'\"zz" | endif + + " filetype defaults + filetype plugin indent on + au BufNewFile,BufRead *.as set filetype=actionscript + au BufNewFile,BufRead *.html set tabstop=4|set shiftwidth=4|set expandtab + au FileType python set textwidth=79 + au FileType gitcommit set textwidth=72 + + " highlight unnecessary whitespace + highlight ExtraWhitespace ctermbg=red guibg=red + match ExtraWhitespace /\s\+$/ + au BufWinEnter,InsertLeave * match ExtraWhitespace /\s\+$/ + au InsertEnter * match ExtraWhitespace /\s\+\%#\@<!$/ + " prevent colorscheme from overriding these highlights + au ColorScheme * highlight ExtraWhitespace ctermbg=red guibg=red + + " highlight everything exceeding 80 characters + au BufWinEnter * let w:m2=matchadd('ErrorMsg', '\%>80v.\+', -1) + ''; + + misc = '' + " ASCII art mode + fun! AAMode() + highlight clear ExtraWhitespace + for m in getmatches() + if m.group == 'ErrorMsg' && m.pattern == '\%>80v.\+' + call matchdelete(m.id) + endif + endfor + endfun + + " flake everything that has been *detected* as python (not just by suffix). + autocmd BufWritePost * if &ft ==# 'python' | call Flake8() | endif + ''; + + vimrc = writeText "vimrc" '' + ${generic} + ${plugin} + + if has("autocmd") + ${autocmd} + endif + + ${misc} + ''; + +in lib.overrideDerivation vim_configurable (o: { + postInstall = (o.postInstall or "") + '' + ln -sf "${vimrc}" "$out/share/vim/vimrc" + ''; +}) |