summary refs log tree commit diff
path: root/pkgs/applications/editors/textadept/default.nix
blob: 4f1a29278be927f334ffcb946adcbbf301d25f20 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
{ stdenv, fetchhg, fetchurl, fetchzip, gtk2, glib, pkgconfig, unzip, ncurses, zip }:
let
  # Textadept requires a whole bunch of external dependencies.
  # The build system expects to be able to download them with wget.
  # This expression gets Nix to fetch them instead.


  cached_url = url: sha256: fetchurl {
    inherit sha256 url;
  };

  get_url = url: sha256: let
    store_path = cached_url url sha256;
  in ''
    local_path=$(basename ${store_path} | sed -e 's@^[0-9a-z]\+-@@')

    # Copy the file from the Nix store and remove the hash part.
    cp ${store_path} $local_path

    # Update its access and modified times.
    touch $local_path
  '';

  cached_url_zip = url: sha256: fetchzip {
    inherit sha256 url;
  };

  get_url_zip = url: sha256: let
    store_path = cached_url_zip url sha256;
  in ''
    (
      build_dir=$PWD
      cd $TMPDIR

      local_path=$(basename ${url} .zip)

      cp -r ${store_path} $local_path
      chmod u+rwX -R $local_path
      zip -r $build_dir/$local_path.zip $local_path
      touch $local_path
    )
  '';


  # These lists are taken from the Makefile.
  scintilla_tgz  = "scintilla373.tgz";
  tre_zip        = "cdce45e8dd7a3b36954022b4a4d3570e1ac5a4f8.zip";
  scinterm_zip   = "scinterm_1.8.zip";
  scintillua_zip = "33298b6cbce3.zip";
  lua_tgz        = "lua-5.3.4.tar.gz";
  lpeg_tgz       = "lpeg-1.0.0.tar.gz";
  lfs_zip        = "v_1_6_3.zip";
  lspawn_zip     = "lspawn_1.5.zip";
  luajit_tgz     = "LuaJIT-2.0.3.tar.gz";
  libluajit_tgz  = "libluajit_2.0.3.x86_64.tgz";
  gtdialog_zip   = "gtdialog_1.3.zip";
  cdk_tgz        = "cdk-5.0-20150928.tgz";
  termkey_tgz    = "libtermkey-0.17.tar.gz";
  bombay_zip     = "bombay.zip";

  scinterm_url   = "http://foicica.com/scinterm/download/" + scinterm_zip;
  tre_url        = "https://github.com/laurikari/tre/archive/" + tre_zip;
  #scintillua_url = "http://foicica.com/scintillua/download/" + scintillua_zip;
  scintillua_url = "http://foicica.com/hg/scintillua/archive/" + scintillua_zip;
  gtdialog_url   = "http://foicica.com/gtdialog/download/" + gtdialog_zip;
  lspawn_url     = "http://foicica.com/lspawn/download/" + lspawn_zip;

  scintilla_url  = "http://prdownloads.sourceforge.net/scintilla/" + scintilla_tgz;
  lua_url        = "http://www.lua.org/ftp/" + lua_tgz;
  lpeg_url       = "http://www.inf.puc-rio.br/~roberto/lpeg/" + lpeg_tgz;
  lfs_url        = "https://github.com/keplerproject/luafilesystem/archive/" + lfs_zip;
  luajit_url     = "http://luajit.org/download/" + luajit_tgz;
  libluajit_url  = "http://foicica.com/textadept/download/" + libluajit_tgz;
  cdk_url        = "http://invisible-mirror.net/archives/cdk/" + cdk_tgz;
  bombay_url     = "http://foicica.com/hg/bombay/archive/tip.zip";
  termkey_url    = "http://www.leonerd.org.uk/code/libtermkey/" + termkey_tgz;


  get_scintilla   = get_url scintilla_url   "0rkczxzj6bqxks4jcbxbyrarjhfjh95nwxxiqprfid1kaamgkfm2";
  get_tre         = get_url tre_url         "0mw8npwk5nnhc33352j4akannhpx77kqvfam8jdq1n4yf8js1gi7";
  get_scinterm    = get_url scinterm_url    "02ax6cjpxylfz7iqp1cjmsl323in066a38yklmsyzdl3w7761nxi";
  get_scintillua  = get_url scintillua_url  "1kx113dpjby1p9jcsqlnlzwj01z94f9szw4b38077qav3bj4lk6g";
  get_lua         = get_url lua_url         "0320a8dg3aci4hxla380dx1ifkw8gj4gbw5c4dz41g1kh98sm0gn";
  get_lpeg        = get_url lpeg_url        "13mz18s359wlkwm9d9iqlyyrrwjc6iqfpa99ai0icam2b3khl68h";
  get_lfs         = get_url_zip lfs_url     "1hxcnqj53540ysyw8fzax7f09pl98b8f55s712gsglcdxp2g2pri";
  get_lspawn      = get_url lspawn_url      "09c6v9irblay2kv1n7i59pyj9g4xb43c6rfa7ba5m353lymcwwqi";
  get_luajit      = get_url luajit_url      "0ydxpqkmsn2c341j4r2v6r5r0ig3kbwv3i9jran3iv81s6r6rgjm";
  get_libluajit   = get_url libluajit_url   "1nhvcdjpqrhd5qbihdm3bxpw84irfvnw2vmfqnsy253ay3dxzrgy";
  get_gtdialog    = get_url gtdialog_url    "0nvcldyhj8abr8jny9pbyfjwg8qfp9f2h508vjmrvr5c5fqdbbm0";
  get_cdk         = get_url cdk_url         "0j74l874y33i26y5kjg3pf1vswyjif8k93pqhi0iqykpbxfsg382";
  get_bombay      = get_url_zip bombay_url  "0illabngrrxidkprgz268wgjqknrds34nhm6hav95xc1nmsdr6jj"
    + "mv tip.zip bombay.zip\n";
  get_termkey     = get_url termkey_url     "12gkrv1ldwk945qbpprnyawh0jz7rmqh18fyndbxiajyxmj97538";


  get_deps = get_scintilla
    + get_tre
    + get_scinterm
    + get_scintillua
    + get_lua
    + get_lpeg
    + get_lfs
    + get_lspawn
    + get_luajit
    + get_libluajit
    + get_gtdialog
    + get_cdk
    + get_bombay
    + get_termkey;
in
stdenv.mkDerivation rec {
  version = "9.3";
  name = "textadept-${version}";

  nativeBuildInputs = [ pkgconfig ];
  buildInputs = [
    gtk2 glib unzip ncurses zip
  ];

  src = fetchhg {
    url = http://foicica.com/hg/textadept;
    rev = "textadept_${version}";
    sha256 = "18x79pazm86agn1khdxfnf87la6kli3xasi7dcjx7l6yyz19y14d";
  };

  preConfigure = ''
    cd src

    # Make a dummy wget.
    mkdir wget
    echo '#! ${stdenv.shell}' > wget/wget
    chmod a+x wget/wget
    export PATH="$PATH:$PWD/wget"

    ${get_deps}

    # Let the build system do whatever setup it needs to do with these files.
    make deps
  '';

  postBuild = ''
    make curses
  '';

  postInstall = ''
    make curses install PREFIX=$out MAKECMDGOALS=curses
  '';

  makeFlags = [
    "PREFIX=$(out)"
  ];

  meta = with stdenv.lib; {
    description = "An extensible text editor based on Scintilla with Lua scripting";
    homepage = http://foicica.com/textadept;
    license = licenses.mit;
    maintainers = with maintainers; [ raskin mirrexagon ];
    platforms = platforms.linux;
  };
}