aboutsummaryrefslogtreecommitdiff
path: root/nixops
diff options
context:
space:
mode:
authorIsmaël Bouya <ismael.bouya@normalesup.org>2019-05-10 00:20:30 +0200
committerIsmaël Bouya <ismael.bouya@normalesup.org>2019-05-10 00:20:30 +0200
commit2977fd8fdfc55dd42837e3dd56c77d36097ef607 (patch)
treed245f84b567b8b7275440aeb8eb9690fe0a95f34 /nixops
parent598aaa373c359046ee08ab5e7576ebaa4f0331e0 (diff)
downloadNix-2977fd8fdfc55dd42837e3dd56c77d36097ef607.tar.gz
Nix-2977fd8fdfc55dd42837e3dd56c77d36097ef607.tar.zst
Nix-2977fd8fdfc55dd42837e3dd56c77d36097ef607.zip
Move taskwarrior-web to pkgs
Diffstat (limited to 'nixops')
-rw-r--r--nixops/modules/task/Gemfile.lock139
-rw-r--r--nixops/modules/task/default.nix75
-rw-r--r--nixops/modules/task/fixes.patch56
-rw-r--r--nixops/modules/task/gemset.nix567
-rw-r--r--nixops/modules/task/taskwarrior-web.json15
-rw-r--r--nixops/modules/task/taskwarrior-web.nix24
-rw-r--r--nixops/modules/task/thin.patch23
7 files changed, 37 insertions, 862 deletions
diff --git a/nixops/modules/task/Gemfile.lock b/nixops/modules/task/Gemfile.lock
deleted file mode 100644
index 1b2f5ba..0000000
--- a/nixops/modules/task/Gemfile.lock
+++ /dev/null
@@ -1,139 +0,0 @@
1PATH
2 remote: .
3 specs:
4 taskwarrior-web (1.1.12)
5 activesupport (~> 3)
6 json (~> 1.8)
7 parseconfig
8 rack-flash3
9 rinku
10 sinatra
11 sinatra-simple-navigation
12 vegas
13 versionomy
14
15GEM
16 remote: http://rubygems.org/
17 specs:
18 activesupport (3.2.22.5)
19 i18n (~> 0.6, >= 0.6.4)
20 multi_json (~> 1.0)
21 blockenspiel (0.5.0)
22 coderay (1.1.2)
23 concurrent-ruby (1.1.4)
24 daemons (1.3.1)
25 diff-lcs (1.3)
26 docile (1.3.1)
27 eventmachine (1.2.7)
28 ffi (1.10.0)
29 formatador (0.2.5)
30 growl (1.0.3)
31 guard (2.15.0)
32 formatador (>= 0.2.4)
33 listen (>= 2.7, < 4.0)
34 lumberjack (>= 1.0.12, < 2.0)
35 nenv (~> 0.1)
36 notiffany (~> 0.0)
37 pry (>= 0.9.12)
38 shellany (~> 0.0)
39 thor (>= 0.18.1)
40 guard-bundler (2.2.1)
41 bundler (>= 1.3.0, < 3)
42 guard (~> 2.2)
43 guard-compat (~> 1.1)
44 guard-compat (1.2.1)
45 guard-rspec (4.7.3)
46 guard (~> 2.1)
47 guard-compat (~> 1.1)
48 rspec (>= 2.99.0, < 4.0)
49 i18n (0.9.5)
50 concurrent-ruby (~> 1.0)
51 json (1.8.6)
52 listen (3.1.5)
53 rb-fsevent (~> 0.9, >= 0.9.4)
54 rb-inotify (~> 0.9, >= 0.9.7)
55 ruby_dep (~> 1.2)
56 lumberjack (1.0.13)
57 method_source (0.9.2)
58 mini_portile2 (2.4.0)
59 multi_json (1.13.1)
60 mustermann (1.0.3)
61 nenv (0.3.0)
62 nokogiri (1.10.1)
63 mini_portile2 (~> 2.4.0)
64 notiffany (0.1.1)
65 nenv (~> 0.1)
66 shellany (~> 0.0)
67 parseconfig (1.0.8)
68 pry (0.12.2)
69 coderay (~> 1.1.0)
70 method_source (~> 0.9.0)
71 rack (2.0.6)
72 rack-flash3 (1.0.5)
73 rack
74 rack-protection (2.0.5)
75 rack
76 rack-test (1.1.0)
77 rack (>= 1.0, < 3)
78 rake (10.5.0)
79 rb-fsevent (0.10.3)
80 rb-inotify (0.10.0)
81 ffi (~> 1.0)
82 rinku (2.0.5)
83 rspec (2.99.0)
84 rspec-core (~> 2.99.0)
85 rspec-expectations (~> 2.99.0)
86 rspec-mocks (~> 2.99.0)
87 rspec-core (2.99.2)
88 rspec-expectations (2.99.2)
89 diff-lcs (>= 1.1.3, < 2.0)
90 rspec-html-matchers (0.5.0)
91 nokogiri (~> 1)
92 rspec (~> 2, >= 2.11.0)
93 rspec-mocks (2.99.4)
94 ruby_dep (1.5.0)
95 shellany (0.0.1)
96 simple-navigation (4.0.5)
97 activesupport (>= 2.3.2)
98 simplecov (0.16.1)
99 docile (~> 1.1)
100 json (>= 1.8, < 3)
101 simplecov-html (~> 0.10.0)
102 simplecov-html (0.10.2)
103 sinatra (2.0.5)
104 mustermann (~> 1.0)
105 rack (~> 2.0)
106 rack-protection (= 2.0.5)
107 tilt (~> 2.0)
108 sinatra-simple-navigation (4.1.0)
109 simple-navigation (~> 4.0)
110 sinatra (>= 1.0, < 3.0)
111 thin (1.7.2)
112 daemons (~> 1.0, >= 1.0.9)
113 eventmachine (~> 1.0, >= 1.0.4)
114 rack (>= 1, < 3)
115 thor (0.20.3)
116 tilt (2.0.9)
117 vegas (0.1.11)
118 rack (>= 1.0.0)
119 versionomy (0.5.0)
120 blockenspiel (~> 0.5)
121
122PLATFORMS
123 ruby
124
125DEPENDENCIES
126 growl
127 guard-bundler
128 guard-rspec
129 rack-test
130 rake (< 11)
131 rb-fsevent
132 rspec (~> 2)
133 rspec-html-matchers
134 simplecov
135 taskwarrior-web!
136 thin
137
138BUNDLED WITH
139 1.16.2
diff --git a/nixops/modules/task/default.nix b/nixops/modules/task/default.nix
index 9671725..1f5ddd2 100644
--- a/nixops/modules/task/default.nix
+++ b/nixops/modules/task/default.nix
@@ -1,7 +1,7 @@
1{ lib, pkgs, config, myconfig, mylibs, ... }: 1{ lib, pkgs, config, myconfig, mylibs, ... }:
2let 2let
3 cfg = config.services.myTasks; 3 cfg = config.services.myTasks;
4 vardir = config.services.taskserver.dataDir; 4 server_vardir = config.services.taskserver.dataDir;
5 fqdn = "task.immae.eu"; 5 fqdn = "task.immae.eu";
6 user = config.services.taskserver.user; 6 user = config.services.taskserver.user;
7 env = myconfig.env.tools.task; 7 env = myconfig.env.tools.task;
@@ -22,8 +22,8 @@ let
22 22
23 silent_certtool -p \ 23 silent_certtool -p \
24 --bits 4096 \ 24 --bits 4096 \
25 --outfile "${vardir}/userkeys/$user.key.pem" 25 --outfile "${server_vardir}/userkeys/$user.key.pem"
26 ${pkgs.gnused}/bin/sed -i -n -e '/^-----BEGIN RSA PRIVATE KEY-----$/,$p' "${vardir}/userkeys/$user.key.pem" 26 ${pkgs.gnused}/bin/sed -i -n -e '/^-----BEGIN RSA PRIVATE KEY-----$/,$p' "${server_vardir}/userkeys/$user.key.pem"
27 27
28 silent_certtool -c \ 28 silent_certtool -c \
29 --template "${pkgs.writeText "taskserver-ca.template" '' 29 --template "${pkgs.writeText "taskserver-ca.template" ''
@@ -32,18 +32,17 @@ let
32 signing_key 32 signing_key
33 expiration_days = 3650 33 expiration_days = 3650
34 ''}" \ 34 ''}" \
35 --load-ca-certificate "${vardir}/keys/ca.cert" \ 35 --load-ca-certificate "${server_vardir}/keys/ca.cert" \
36 --load-ca-privkey "${vardir}/keys/ca.key" \ 36 --load-ca-privkey "${server_vardir}/keys/ca.key" \
37 --load-privkey "${vardir}/userkeys/$user.key.pem" \ 37 --load-privkey "${server_vardir}/userkeys/$user.key.pem" \
38 --outfile "${vardir}/userkeys/$user.cert.pem" 38 --outfile "${server_vardir}/userkeys/$user.cert.pem"
39 EOF 39 EOF
40 chmod a+x $out/bin/taskserver-user-certs 40 chmod a+x $out/bin/taskserver-user-certs
41 patchShebangs $out/bin/taskserver-user-certs 41 patchShebangs $out/bin/taskserver-user-certs
42 ''; 42 '';
43 taskwarrior-web = pkgs.callPackage ./taskwarrior-web.nix { 43 taskwarrior-web = pkgs.webapps.taskwarrior-web;
44 inherit (mylibs) fetchedGithub; 44 socketsDir = "/run/taskwarrior-web";
45 inherit env; 45 varDir = "/var/lib/taskwarrior-web";
46 };
47 taskwebPages = let 46 taskwebPages = let
48 uidPages = lib.attrsets.zipAttrs ( 47 uidPages = lib.attrsets.zipAttrs (
49 lib.lists.flatten 48 lib.lists.flatten
@@ -94,7 +93,7 @@ in {
94 permissions = "0400"; 93 permissions = "0400";
95 text = '' 94 text = ''
96 SetEnv TASKD_HOST "${fqdn}:${toString config.services.taskserver.listenPort}" 95 SetEnv TASKD_HOST "${fqdn}:${toString config.services.taskserver.listenPort}"
97 SetEnv TASKD_VARDIR "${vardir}" 96 SetEnv TASKD_VARDIR "${server_vardir}"
98 SetEnv TASKD_LDAP_HOST "ldaps://${env.ldap.host}" 97 SetEnv TASKD_LDAP_HOST "ldaps://${env.ldap.host}"
99 SetEnv TASKD_LDAP_DN "${env.ldap.dn}" 98 SetEnv TASKD_LDAP_DN "${env.ldap.dn}"
100 SetEnv TASKD_LDAP_PASSWORD "${env.ldap.password}" 99 SetEnv TASKD_LDAP_PASSWORD "${env.ldap.password}"
@@ -121,8 +120,8 @@ in {
121 '' 120 ''
122 '' 121 ''
123 <Macro Taskwarrior %{folderName}> 122 <Macro Taskwarrior %{folderName}>
124 ProxyPass "unix://${taskwarrior-web.socketsDir}/%{folderName}.sock|http://localhost-%{folderName}/" 123 ProxyPass "unix://${socketsDir}/%{folderName}.sock|http://localhost-%{folderName}/"
125 ProxyPassReverse "unix://${taskwarrior-web.socketsDir}/%{folderName}.sock|http://localhost-%{folderName}/" 124 ProxyPassReverse "unix://${socketsDir}/%{folderName}.sock|http://localhost-%{folderName}/"
126 ProxyPassReverse http://${fqdn}/ 125 ProxyPassReverse http://${fqdn}/
127 126
128 SetOutputFilter Sed 127 SetOutputFilter Sed
@@ -177,7 +176,7 @@ in {
177 ; Needed to avoid clashes in browser cookies (same domain) 176 ; Needed to avoid clashes in browser cookies (same domain)
178 env[PATH] = "/etc/profiles/per-user/${user}/bin" 177 env[PATH] = "/etc/profiles/per-user/${user}/bin"
179 php_value[session.name] = TaskPHPSESSID 178 php_value[session.name] = TaskPHPSESSID
180 php_admin_value[open_basedir] = "${./www}:/tmp:${vardir}:/etc/profiles/per-user/${user}/bin/" 179 php_admin_value[open_basedir] = "${./www}:/tmp:${server_vardir}:/etc/profiles/per-user/${user}/bin/"
181 ''; 180 '';
182 }; 181 };
183 182
@@ -199,11 +198,11 @@ in {
199 system.activationScripts.taskserver = { 198 system.activationScripts.taskserver = {
200 deps = [ "users" ]; 199 deps = [ "users" ];
201 text = '' 200 text = ''
202 install -m 0750 -o ${user} -g ${group} -d ${vardir} 201 install -m 0750 -o ${user} -g ${group} -d ${server_vardir}
203 install -m 0750 -o ${user} -g ${group} -d ${vardir}/userkeys 202 install -m 0750 -o ${user} -g ${group} -d ${server_vardir}/userkeys
204 install -m 0750 -o ${user} -g ${group} -d ${vardir}/keys 203 install -m 0750 -o ${user} -g ${group} -d ${server_vardir}/keys
205 204
206 if [ ! -e "${vardir}/keys/ca.key" ]; then 205 if [ ! -e "${server_vardir}/keys/ca.key" ]; then
207 silent_certtool() { 206 silent_certtool() {
208 if ! output="$("${pkgs.gnutls.bin}/bin/certtool" "$@" 2>&1)"; then 207 if ! output="$("${pkgs.gnutls.bin}/bin/certtool" "$@" 2>&1)"; then
209 echo "GNUTLS certtool invocation failed with output:" >&2 208 echo "GNUTLS certtool invocation failed with output:" >&2
@@ -213,7 +212,7 @@ in {
213 212
214 silent_certtool -p \ 213 silent_certtool -p \
215 --bits 4096 \ 214 --bits 4096 \
216 --outfile "${vardir}/keys/ca.key" 215 --outfile "${server_vardir}/keys/ca.key"
217 216
218 silent_certtool -s \ 217 silent_certtool -s \
219 --template "${pkgs.writeText "taskserver-ca.template" '' 218 --template "${pkgs.writeText "taskserver-ca.template" ''
@@ -222,11 +221,11 @@ in {
222 cert_signing_key 221 cert_signing_key
223 ca 222 ca
224 ''}" \ 223 ''}" \
225 --load-privkey "${vardir}/keys/ca.key" \ 224 --load-privkey "${server_vardir}/keys/ca.key" \
226 --outfile "${vardir}/keys/ca.cert" 225 --outfile "${server_vardir}/keys/ca.cert"
227 226
228 chown :${group} "${vardir}/keys/ca.key" 227 chown :${group} "${server_vardir}/keys/ca.key"
229 chmod g+r "${vardir}/keys/ca.key" 228 chmod g+r "${server_vardir}/keys/ca.key"
230 fi 229 fi
231 ''; 230 '';
232 }; 231 };
@@ -236,7 +235,7 @@ in {
236 allowedClientIDs = [ "^task [2-9]" "^Mirakel [1-9]" ]; 235 allowedClientIDs = [ "^task [2-9]" "^Mirakel [1-9]" ];
237 inherit fqdn; 236 inherit fqdn;
238 listenHost = "::"; 237 listenHost = "::";
239 pki.manual.ca.cert = "${vardir}/keys/ca.cert"; 238 pki.manual.ca.cert = "${server_vardir}/keys/ca.cert";
240 pki.manual.server.cert = "/var/lib/acme/task/fullchain.pem"; 239 pki.manual.server.cert = "/var/lib/acme/task/fullchain.pem";
241 pki.manual.server.crl = "/var/lib/acme/task/invalid.crl"; 240 pki.manual.server.crl = "/var/lib/acme/task/invalid.crl";
242 pki.manual.server.key = "/var/lib/acme/task/key.pem"; 241 pki.manual.server.key = "/var/lib/acme/task/key.pem";
@@ -246,15 +245,15 @@ in {
246 system.activationScripts.taskwarrior-web = { 245 system.activationScripts.taskwarrior-web = {
247 deps = [ "users" ]; 246 deps = [ "users" ];
248 text = '' 247 text = ''
249 install -m 0755 -o ${user} -g ${group} -d ${taskwarrior-web.socketsDir} 248 install -m 0755 -o ${user} -g ${group} -d ${socketsDir}
250 install -m 0750 -o ${user} -g ${group} -d ${taskwarrior-web.varDir} 249 install -m 0750 -o ${user} -g ${group} -d ${varDir}
251 ${builtins.concatStringsSep "\n" (lib.attrsets.mapAttrsToList 250 ${builtins.concatStringsSep "\n" (lib.attrsets.mapAttrsToList
252 (k: v: "install -m 0750 -o ${user} -g ${group} -d ${taskwarrior-web.varDir}/${k}") 251 (k: v: "install -m 0750 -o ${user} -g ${group} -d ${varDir}/${k}")
253 env.taskwarrior-web 252 env.taskwarrior-web
254 )} 253 )}
255 if [ ! -f ${vardir}/userkeys/taskwarrior-web.cert.pem ]; then 254 if [ ! -f ${server_vardir}/userkeys/taskwarrior-web.cert.pem ]; then
256 ${taskserver-user-certs}/bin/taskserver-user-certs taskwarrior-web 255 ${taskserver-user-certs}/bin/taskserver-user-certs taskwarrior-web
257 chown taskd:taskd ${vardir}/userkeys/taskwarrior-web.cert.pem ${vardir}/userkeys/taskwarrior-web.key.pem 256 chown taskd:taskd ${server_vardir}/userkeys/taskwarrior-web.cert.pem ${server_vardir}/userkeys/taskwarrior-web.key.pem
258 fi 257 fi
259 ''; 258 '';
260 }; 259 };
@@ -264,9 +263,9 @@ in {
264 credentials = "${userConfig.org}/${name}/${userConfig.key}"; 263 credentials = "${userConfig.org}/${name}/${userConfig.key}";
265 dateFormat = userConfig.date; 264 dateFormat = userConfig.date;
266 taskrc = pkgs.writeText "taskrc" '' 265 taskrc = pkgs.writeText "taskrc" ''
267 data.location=${taskwarrior-web.varDir}/${name} 266 data.location=${varDir}/${name}
268 taskd.certificate=${vardir}/userkeys/taskwarrior-web.cert.pem 267 taskd.certificate=${server_vardir}/userkeys/taskwarrior-web.cert.pem
269 taskd.key=${vardir}/userkeys/taskwarrior-web.key.pem 268 taskd.key=${server_vardir}/userkeys/taskwarrior-web.key.pem
270 # IdenTrust DST Root CA X3 269 # IdenTrust DST Root CA X3
271 # obtained here: https://letsencrypt.org/fr/certificates/ 270 # obtained here: https://letsencrypt.org/fr/certificates/
272 taskd.ca=${pkgs.writeText "ca.cert" '' 271 taskd.ca=${pkgs.writeText "ca.cert" ''
@@ -306,7 +305,7 @@ in {
306 environment.LC_ALL = "fr_FR.UTF-8"; 305 environment.LC_ALL = "fr_FR.UTF-8";
307 306
308 script = '' 307 script = ''
309 exec ${taskwarrior-web.gems}/${taskwarrior-web.gems.ruby.gemPath}/bin/bundle exec thin start -R config.ru -S ${taskwarrior-web.socketsDir}/${name}.sock 308 exec ${taskwarrior-web.gems}/${taskwarrior-web.gems.ruby.gemPath}/bin/bundle exec thin start -R config.ru -S ${socketsDir}/${name}.sock
310 ''; 309 '';
311 310
312 serviceConfig = { 311 serviceConfig = {
@@ -315,14 +314,14 @@ in {
315 Restart = "always"; 314 Restart = "always";
316 TimeoutSec = 60; 315 TimeoutSec = 60;
317 Type = "simple"; 316 Type = "simple";
318 WorkingDirectory = taskwarrior-web.rubyRoot; 317 WorkingDirectory = taskwarrior-web;
319 }; 318 };
320 319
321 unitConfig.RequiresMountsFor = taskwarrior-web.varDir; 320 unitConfig.RequiresMountsFor = varDir;
322 }) env.taskwarrior-web) // { 321 }) env.taskwarrior-web) // {
323 taskserver-ca.postStart = '' 322 taskserver-ca.postStart = ''
324 chown :${group} "${vardir}/keys/ca.key" 323 chown :${group} "${server_vardir}/keys/ca.key"
325 chmod g+r "${vardir}/keys/ca.key" 324 chmod g+r "${server_vardir}/keys/ca.key"
326 ''; 325 '';
327 }; 326 };
328 327
diff --git a/nixops/modules/task/fixes.patch b/nixops/modules/task/fixes.patch
deleted file mode 100644
index 851f9f0..0000000
--- a/nixops/modules/task/fixes.patch
+++ /dev/null
@@ -1,56 +0,0 @@
1diff --git a/lib/taskwarrior-web/helpers.rb b/lib/taskwarrior-web/helpers.rb
2index 212aed7..94c57df 100644
3--- a/lib/taskwarrior-web/helpers.rb
4+++ b/lib/taskwarrior-web/helpers.rb
5@@ -1,6 +1,8 @@
6 require 'active_support/core_ext/date/calculations'
7
8 module TaskwarriorWeb::App::Helpers
9+ include ERB::Util
10+
11 def format_date(timestamp)
12 format = TaskwarriorWeb::Config.dateformat || '%-m/%-d/%Y'
13 Time.parse(timestamp).localtime.strftime(format)
14diff --git a/lib/taskwarrior-web/services/builder/base.rb b/lib/taskwarrior-web/services/builder/base.rb
15index 58d246e..8f716ac 100644
16--- a/lib/taskwarrior-web/services/builder/base.rb
17+++ b/lib/taskwarrior-web/services/builder/base.rb
18@@ -10,7 +10,7 @@ module TaskwarriorWeb::CommandBuilder::Base
19 :complete => ':id done',
20 :annotate => ':id annotate',
21 :denotate => ':id denotate',
22- :projects => '_projects',
23+ :projects => '_unique project',
24 :tags => '_tags',
25 :sync => 'sync'
26 }
27diff --git a/lib/taskwarrior-web/views/tasks/_form.erb b/lib/taskwarrior-web/views/tasks/_form.erb
28index 789e7a1..fa08698 100644
29--- a/lib/taskwarrior-web/views/tasks/_form.erb
30+++ b/lib/taskwarrior-web/views/tasks/_form.erb
31@@ -1,14 +1,14 @@
32 <div class="control-group">
33 <label for="task-description" class="control-label">Description</label>
34 <div class="controls">
35- <input type="text" required="required" id="task-description" name="task[description]" value="<%= @task.description unless @task.nil? %>" />
36+ <input type="text" required="required" id="task-description" name="task[description]" value="<%=h @task.description unless @task.nil? %>" />
37 </div>
38 </div>
39
40 <div class="control-group">
41 <label for="task-project" class="control-label">Project</label>
42 <div class="controls">
43- <input type="text" id="task-project" name="task[project]" value="<%= @task.project unless @task.nil? %>" autocomplete="off" />
44+ <input type="text" id="task-project" name="task[project]" value="<%=h @task.project unless @task.nil? %>" autocomplete="off" />
45 </div>
46 </div>
47
48@@ -45,7 +45,7 @@
49 <div class="control-group">
50 <label for="task-tags" class="control-label">Tags</label>
51 <div class="controls">
52- <input type="text" id="task-tags" name="task[tags]" value="<%= @task.tags.join(', ') unless @task.nil? %>" autocomplete="off" />
53+ <input type="text" id="task-tags" name="task[tags]" value="<%=h @task.tags.join(', ') unless @task.nil? %>" autocomplete="off" />
54 <span class="help-block">Enter tags separated by commas or spaces (e.g. <em>each, word will,be a tag</em>)</span>
55 </div>
56 </div>
diff --git a/nixops/modules/task/gemset.nix b/nixops/modules/task/gemset.nix
deleted file mode 100644
index 35d13c6..0000000
--- a/nixops/modules/task/gemset.nix
+++ /dev/null
@@ -1,567 +0,0 @@
1{
2 activesupport = {
3 dependencies = ["i18n" "multi_json"];
4 groups = ["default"];
5 platforms = [];
6 source = {
7 remotes = ["http://rubygems.org"];
8 sha256 = "0fyxqkkws4px4lzkbcqzp0bwai7nn7jk4p0bgfy0dny9cwm0qc9r";
9 type = "gem";
10 };
11 version = "3.2.22.5";
12 };
13 blockenspiel = {
14 groups = ["default"];
15 platforms = [];
16 source = {
17 remotes = ["http://rubygems.org"];
18 sha256 = "1h701s45n5qprvcpc7fnr45n88p56x07pznkxqnhz1dbdbhb7xx8";
19 type = "gem";
20 };
21 version = "0.5.0";
22 };
23 coderay = {
24 groups = ["default" "local"];
25 platforms = [];
26 source = {
27 remotes = ["http://rubygems.org"];
28 sha256 = "15vav4bhcc2x3jmi3izb11l4d9f3xv8hp2fszb7iqmpsccv1pz4y";
29 type = "gem";
30 };
31 version = "1.1.2";
32 };
33 concurrent-ruby = {
34 groups = ["default"];
35 platforms = [];
36 source = {
37 remotes = ["http://rubygems.org"];
38 sha256 = "1ixcx9pfissxrga53jbdpza85qd5f6b5nq1sfqa9rnfq82qnlbp1";
39 type = "gem";
40 };
41 version = "1.1.4";
42 };
43 daemons = {
44 groups = ["default"];
45 platforms = [];
46 source = {
47 remotes = ["http://rubygems.org"];
48 sha256 = "0l5gai3vd4g7aqff0k1mp41j9zcsvm2rbwmqn115a325k9r7pf4w";
49 type = "gem";
50 };
51 version = "1.3.1";
52 };
53 diff-lcs = {
54 groups = ["default" "development" "local"];
55 platforms = [];
56 source = {
57 remotes = ["http://rubygems.org"];
58 sha256 = "18w22bjz424gzafv6nzv98h0aqkwz3d9xhm7cbr1wfbyas8zayza";
59 type = "gem";
60 };
61 version = "1.3";
62 };
63 docile = {
64 groups = ["default" "local"];
65 platforms = [];
66 source = {
67 remotes = ["http://rubygems.org"];
68 sha256 = "04d2izkna3ahfn6fwq4xrcafa715d3bbqczxm16fq40fqy87xn17";
69 type = "gem";
70 };
71 version = "1.3.1";
72 };
73 eventmachine = {
74 groups = ["default"];
75 platforms = [];
76 source = {
77 remotes = ["http://rubygems.org"];
78 sha256 = "0wh9aqb0skz80fhfn66lbpr4f86ya2z5rx6gm5xlfhd05bj1ch4r";
79 type = "gem";
80 };
81 version = "1.2.7";
82 };
83 ffi = {
84 groups = ["default" "local"];
85 platforms = [];
86 source = {
87 remotes = ["http://rubygems.org"];
88 sha256 = "0j8pzj8raxbir5w5k6s7a042sb5k02pg0f8s4na1r5lan901j00p";
89 type = "gem";
90 };
91 version = "1.10.0";
92 };
93 formatador = {
94 groups = ["default" "local"];
95 platforms = [];
96 source = {
97 remotes = ["http://rubygems.org"];
98 sha256 = "1gc26phrwlmlqrmz4bagq1wd5b7g64avpx0ghxr9xdxcvmlii0l0";
99 type = "gem";
100 };
101 version = "0.2.5";
102 };
103 growl = {
104 groups = ["local"];
105 platforms = [];
106 source = {
107 remotes = ["http://rubygems.org"];
108 sha256 = "0s0y7maljnalpbv2q1j5j5hvb4wcc31y9af0n7x1q2l0fzxgc9n9";
109 type = "gem";
110 };
111 version = "1.0.3";
112 };
113 guard = {
114 dependencies = ["formatador" "listen" "lumberjack" "nenv" "notiffany" "pry" "shellany" "thor"];
115 groups = ["default" "local"];
116 platforms = [];
117 source = {
118 remotes = ["http://rubygems.org"];
119 sha256 = "0h84ja6qvii3hx86w9l4vjpbgl4m8ma8fbawwp7s8l791cgkdcmk";
120 type = "gem";
121 };
122 version = "2.15.0";
123 };
124 guard-bundler = {
125 dependencies = ["guard" "guard-compat"];
126 groups = ["local"];
127 platforms = [];
128 source = {
129 remotes = ["http://rubygems.org"];
130 sha256 = "0lji8f8w7y4prmpr2lqmlljvkqgkgnlsiwqgwvq7b1y3sxlsvy62";
131 type = "gem";
132 };
133 version = "2.2.1";
134 };
135 guard-compat = {
136 groups = ["default" "local"];
137 platforms = [];
138 source = {
139 remotes = ["http://rubygems.org"];
140 sha256 = "1zj6sr1k8w59mmi27rsii0v8xyy2rnsi09nqvwpgj1q10yq1mlis";
141 type = "gem";
142 };
143 version = "1.2.1";
144 };
145 guard-rspec = {
146 dependencies = ["guard" "guard-compat" "rspec"];
147 groups = ["local"];
148 platforms = [];
149 source = {
150 remotes = ["http://rubygems.org"];
151 sha256 = "1jkm5xp90gm4c5s51pmf92i9hc10gslwwic6mvk72g0yplya0yx4";
152 type = "gem";
153 };
154 version = "4.7.3";
155 };
156 i18n = {
157 dependencies = ["concurrent-ruby"];
158 groups = ["default"];
159 platforms = [];
160 source = {
161 remotes = ["http://rubygems.org"];
162 sha256 = "038qvz7kd3cfxk8bvagqhakx68pfbnmghpdkx7573wbf0maqp9a3";
163 type = "gem";
164 };
165 version = "0.9.5";
166 };
167 json = {
168 groups = ["default" "local"];
169 platforms = [];
170 source = {
171 remotes = ["http://rubygems.org"];
172 sha256 = "0qmj7fypgb9vag723w1a49qihxrcf5shzars106ynw2zk352gbv5";
173 type = "gem";
174 };
175 version = "1.8.6";
176 };
177 listen = {
178 dependencies = ["rb-fsevent" "rb-inotify" "ruby_dep"];
179 groups = ["default" "local"];
180 platforms = [];
181 source = {
182 remotes = ["http://rubygems.org"];
183 sha256 = "01v5mrnfqm6sgm8xn2v5swxsn1wlmq7rzh2i48d4jzjsc7qvb6mx";
184 type = "gem";
185 };
186 version = "3.1.5";
187 };
188 lumberjack = {
189 groups = ["default" "local"];
190 platforms = [];
191 source = {
192 remotes = ["http://rubygems.org"];
193 sha256 = "06im7gcg42x77yhz2w5da2ly9xz0n0c36y5ks7xs53v0l9g0vf5n";
194 type = "gem";
195 };
196 version = "1.0.13";
197 };
198 method_source = {
199 groups = ["default" "local"];
200 platforms = [];
201 source = {
202 remotes = ["http://rubygems.org"];
203 sha256 = "1pviwzvdqd90gn6y7illcdd9adapw8fczml933p5vl739dkvl3lq";
204 type = "gem";
205 };
206 version = "0.9.2";
207 };
208 mini_portile2 = {
209 groups = ["default" "development"];
210 platforms = [];
211 source = {
212 remotes = ["http://rubygems.org"];
213 sha256 = "15zplpfw3knqifj9bpf604rb3wc1vhq6363pd6lvhayng8wql5vy";
214 type = "gem";
215 };
216 version = "2.4.0";
217 };
218 multi_json = {
219 groups = ["default"];
220 platforms = [];
221 source = {
222 remotes = ["http://rubygems.org"];
223 sha256 = "1rl0qy4inf1mp8mybfk56dfga0mvx97zwpmq5xmiwl5r770171nv";
224 type = "gem";
225 };
226 version = "1.13.1";
227 };
228 mustermann = {
229 groups = ["default"];
230 platforms = [];
231 source = {
232 remotes = ["http://rubygems.org"];
233 sha256 = "0lycgkmnyy0bf29nnd2zql5a6pcf8sp69g9v4xw0gcfcxgpwp7i1";
234 type = "gem";
235 };
236 version = "1.0.3";
237 };
238 nenv = {
239 groups = ["default" "local"];
240 platforms = [];
241 source = {
242 remotes = ["http://rubygems.org"];
243 sha256 = "0r97jzknll9bhd8yyg2bngnnkj8rjhal667n7d32h8h7ny7nvpnr";
244 type = "gem";
245 };
246 version = "0.3.0";
247 };
248 nokogiri = {
249 dependencies = ["mini_portile2"];
250 groups = ["default" "development"];
251 platforms = [];
252 source = {
253 remotes = ["http://rubygems.org"];
254 sha256 = "09zll7c6j7xr6wyvh5mm5ncj6pkryp70ybcsxdbw1nyphx5dh184";
255 type = "gem";
256 };
257 version = "1.10.1";
258 };
259 notiffany = {
260 dependencies = ["nenv" "shellany"];
261 groups = ["default" "local"];
262 platforms = [];
263 source = {
264 remotes = ["http://rubygems.org"];
265 sha256 = "0x838fa5il0dd9zbm3lxkpbfxcf5fxv9556mayc2mxsdl5ghv8nx";
266 type = "gem";
267 };
268 version = "0.1.1";
269 };
270 parseconfig = {
271 groups = ["default"];
272 platforms = [];
273 source = {
274 remotes = ["http://rubygems.org"];
275 sha256 = "0br2g9k6zc4ygah52aa8cwvpnnkszia29bnvnr8bhpk3rdzi2vmq";
276 type = "gem";
277 };
278 version = "1.0.8";
279 };
280 pry = {
281 dependencies = ["coderay" "method_source"];
282 groups = ["default" "local"];
283 platforms = [];
284 source = {
285 remotes = ["http://rubygems.org"];
286 sha256 = "00rm71x0r1jdycwbs83lf9l6p494m99asakbvqxh8rz7zwnlzg69";
287 type = "gem";
288 };
289 version = "0.12.2";
290 };
291 rack = {
292 groups = ["default" "development"];
293 platforms = [];
294 source = {
295 remotes = ["http://rubygems.org"];
296 sha256 = "1pcgv8dv4vkaczzlix8q3j68capwhk420cddzijwqgi2qb4lm1zm";
297 type = "gem";
298 };
299 version = "2.0.6";
300 };
301 rack-flash3 = {
302 dependencies = ["rack"];
303 groups = ["default"];
304 platforms = [];
305 source = {
306 remotes = ["http://rubygems.org"];
307 sha256 = "0rim9afrns6s8zc4apiymncysyvijpdg18k57kdpz66p55jf4mqz";
308 type = "gem";
309 };
310 version = "1.0.5";
311 };
312 rack-protection = {
313 dependencies = ["rack"];
314 groups = ["default"];
315 platforms = [];
316 source = {
317 remotes = ["http://rubygems.org"];
318 sha256 = "15167q25rmxipqwi6hjqj3i1byi9iwl3xq9b7mdar7qiz39pmjsk";
319 type = "gem";
320 };
321 version = "2.0.5";
322 };
323 rack-test = {
324 dependencies = ["rack"];
325 groups = ["development"];
326 platforms = [];
327 source = {
328 remotes = ["http://rubygems.org"];
329 sha256 = "0rh8h376mx71ci5yklnpqqn118z3bl67nnv5k801qaqn1zs62h8m";
330 type = "gem";
331 };
332 version = "1.1.0";
333 };
334 rake = {
335 groups = ["development"];
336 platforms = [];
337 source = {
338 remotes = ["http://rubygems.org"];
339 sha256 = "0jcabbgnjc788chx31sihc5pgbqnlc1c75wakmqlbjdm8jns2m9b";
340 type = "gem";
341 };
342 version = "10.5.0";
343 };
344 rb-fsevent = {
345 groups = ["local"];
346 platforms = [];
347 source = {
348 remotes = ["http://rubygems.org"];
349 sha256 = "1lm1k7wpz69jx7jrc92w3ggczkjyjbfziq5mg62vjnxmzs383xx8";
350 type = "gem";
351 };
352 version = "0.10.3";
353 };
354 rb-inotify = {
355 dependencies = ["ffi"];
356 groups = ["default" "local"];
357 platforms = [];
358 source = {
359 remotes = ["http://rubygems.org"];
360 sha256 = "1fs7hxm9g6ywv2yih83b879klhc4fs8i0p9166z795qmd77dk0a4";
361 type = "gem";
362 };
363 version = "0.10.0";
364 };
365 rinku = {
366 groups = ["default"];
367 platforms = [];
368 source = {
369 remotes = ["http://rubygems.org"];
370 sha256 = "1smkk299v18brk98gqbdnqrfwm3143kikl30scidqb5j3pzlbz91";
371 type = "gem";
372 };
373 version = "2.0.5";
374 };
375 rspec = {
376 dependencies = ["rspec-core" "rspec-expectations" "rspec-mocks"];
377 groups = ["development" "local"];
378 platforms = [];
379 source = {
380 remotes = ["http://rubygems.org"];
381 sha256 = "14q3hxvngk4ks8h41yw50d5fqbf2dhzwi9rz5ccxvh5a53ak2as3";
382 type = "gem";
383 };
384 version = "2.99.0";
385 };
386 rspec-core = {
387 groups = ["default" "development" "local"];
388 platforms = [];
389 source = {
390 remotes = ["http://rubygems.org"];
391 sha256 = "1wwz21lcz2lwd2jcp2pvq7n1677v23acf7wxsyszp8msb47mw38i";
392 type = "gem";
393 };
394 version = "2.99.2";
395 };
396 rspec-expectations = {
397 dependencies = ["diff-lcs"];
398 groups = ["default" "development" "local"];
399 platforms = [];
400 source = {
401 remotes = ["http://rubygems.org"];
402 sha256 = "11a5pph3anp4xr591dnlcy8xfkdf54qi2lvg4ykpqhxk37si1py3";
403 type = "gem";
404 };
405 version = "2.99.2";
406 };
407 rspec-html-matchers = {
408 dependencies = ["nokogiri" "rspec"];
409 groups = ["development"];
410 platforms = [];
411 source = {
412 remotes = ["http://rubygems.org"];
413 sha256 = "148grzvk0cvh24avhl0shjzz7ldhj138svf48pc5h1fdsb0pnqcv";
414 type = "gem";
415 };
416 version = "0.5.0";
417 };
418 rspec-mocks = {
419 groups = ["default" "development" "local"];
420 platforms = [];
421 source = {
422 remotes = ["http://rubygems.org"];
423 sha256 = "0bzhqahbiswq41nqi6y2dka1k42n0hl14jb6bldb206zp4hikz8r";
424 type = "gem";
425 };
426 version = "2.99.4";
427 };
428 ruby_dep = {
429 groups = ["default" "local"];
430 platforms = [];
431 source = {
432 remotes = ["http://rubygems.org"];
433 sha256 = "1c1bkl97i9mkcvkn1jks346ksnvnnp84cs22gwl0vd7radybrgy5";
434 type = "gem";
435 };
436 version = "1.5.0";
437 };
438 shellany = {
439 groups = ["default" "local"];
440 platforms = [];
441 source = {
442 remotes = ["http://rubygems.org"];
443 sha256 = "1ryyzrj1kxmnpdzhlv4ys3dnl2r5r3d2rs2jwzbnd1v96a8pl4hf";
444 type = "gem";
445 };
446 version = "0.0.1";
447 };
448 simple-navigation = {
449 dependencies = ["activesupport"];
450 groups = ["default"];
451 platforms = [];
452 source = {
453 remotes = ["http://rubygems.org"];
454 sha256 = "08a2s18an3br3xj5j86r33q0hrkai0y157xg67h1khdskb08yylk";
455 type = "gem";
456 };
457 version = "4.0.5";
458 };
459 simplecov = {
460 dependencies = ["docile" "json" "simplecov-html"];
461 groups = ["local"];
462 platforms = [];
463 source = {
464 remotes = ["http://rubygems.org"];
465 sha256 = "1sfyfgf7zrp2n42v7rswkqgk3bbwk1bnsphm24y7laxv3f8z0947";
466 type = "gem";
467 };
468 version = "0.16.1";
469 };
470 simplecov-html = {
471 groups = ["default" "local"];
472 platforms = [];
473 source = {
474 remotes = ["http://rubygems.org"];
475 sha256 = "1lihraa4rgxk8wbfl77fy9sf0ypk31iivly8vl3w04srd7i0clzn";
476 type = "gem";
477 };
478 version = "0.10.2";
479 };
480 sinatra = {
481 dependencies = ["mustermann" "rack" "rack-protection" "tilt"];
482 groups = ["default"];
483 platforms = [];
484 source = {
485 remotes = ["http://rubygems.org"];
486 sha256 = "1gasgn5f15myv08k10i16p326pchxjsy37pgqfw0xm66kcc5d7ry";
487 type = "gem";
488 };
489 version = "2.0.5";
490 };
491 sinatra-simple-navigation = {
492 dependencies = ["simple-navigation" "sinatra"];
493 groups = ["default"];
494 platforms = [];
495 source = {
496 remotes = ["http://rubygems.org"];
497 sha256 = "1gishxd23qw6bwsk7fkagkfc7ihqyvvvb98j9bmwc6wwpsfs4prs";
498 type = "gem";
499 };
500 version = "4.1.0";
501 };
502 taskwarrior-web = {
503 dependencies = ["activesupport" "json" "parseconfig" "rack-flash3" "rinku" "sinatra" "sinatra-simple-navigation" "vegas" "versionomy"];
504 groups = ["default"];
505 platforms = [];
506 bundledByPath = true;
507 path = ./.;
508 source = {
509 path = ./.;
510 type = "path";
511 };
512 version = "1.1.12";
513 };
514 thin = {
515 dependencies = ["daemons" "eventmachine" "rack"];
516 groups = ["default"];
517 platforms = [];
518 source = {
519 remotes = ["http://rubygems.org"];
520 sha256 = "0nagbf9pwy1vg09k6j4xqhbjjzrg5dwzvkn4ffvlj76fsn6vv61f";
521 type = "gem";
522 };
523 version = "1.7.2";
524 };
525 thor = {
526 groups = ["default" "local"];
527 platforms = [];
528 source = {
529 remotes = ["http://rubygems.org"];
530 sha256 = "1yhrnp9x8qcy5vc7g438amd5j9sw83ih7c30dr6g6slgw9zj3g29";
531 type = "gem";
532 };
533 version = "0.20.3";
534 };
535 tilt = {
536 groups = ["default"];
537 platforms = [];
538 source = {
539 remotes = ["http://rubygems.org"];
540 sha256 = "0ca4k0clwf0rkvy7726x4nxpjxkpv67w043i39saxgldxd97zmwz";
541 type = "gem";
542 };
543 version = "2.0.9";
544 };
545 vegas = {
546 dependencies = ["rack"];
547 groups = ["default"];
548 platforms = [];
549 source = {
550 remotes = ["http://rubygems.org"];
551 sha256 = "0kzv0v1zb8vvm188q4pqwahb6468bmiamn6wpsbiq6r5i69s1bs5";
552 type = "gem";
553 };
554 version = "0.1.11";
555 };
556 versionomy = {
557 dependencies = ["blockenspiel"];
558 groups = ["default"];
559 platforms = [];
560 source = {
561 remotes = ["http://rubygems.org"];
562 sha256 = "0i0l4pzrl1vyp4lpg2cxhgkk56spki3lld943d6h7168fj8qyv33";
563 type = "gem";
564 };
565 version = "0.5.0";
566 };
567}
diff --git a/nixops/modules/task/taskwarrior-web.json b/nixops/modules/task/taskwarrior-web.json
deleted file mode 100644
index 70f396d..0000000
--- a/nixops/modules/task/taskwarrior-web.json
+++ /dev/null
@@ -1,15 +0,0 @@
1{
2 "tag": "a79cfe2-master",
3 "meta": {
4 "name": "taskwarrior-web",
5 "url": "https://github.com/theunraveler/taskwarrior-web",
6 "branch": "master"
7 },
8 "github": {
9 "owner": "theunraveler",
10 "repo": "taskwarrior-web",
11 "rev": "a79cfe2b42791b62364118e58b21b892fff6ded8",
12 "sha256": "028rb4wry2an19707bvy4n305f3s0hipg214224p1m0mb61c3cq4",
13 "fetchSubmodules": true
14 }
15}
diff --git a/nixops/modules/task/taskwarrior-web.nix b/nixops/modules/task/taskwarrior-web.nix
deleted file mode 100644
index e38ada4..0000000
--- a/nixops/modules/task/taskwarrior-web.nix
+++ /dev/null
@@ -1,24 +0,0 @@
1{ env, ruby_2_6, bundlerEnv, defaultGemConfig, fetchedGithub, stdenv, writeText, pkgs }:
2let
3 varDir = "/var/lib/taskwarrior-web";
4 socketsDir = "/run/taskwarrior-web";
5 rubyRoot = stdenv.mkDerivation (fetchedGithub ./taskwarrior-web.json // rec {
6 phases = [ "unpackPhase" "patchPhase" "installPhase" ];
7 patches = [ ./fixes.patch ./thin.patch ];
8 installPhase = ''
9 cp -a . $out
10 cp ${./Gemfile.lock} $out/Gemfile.lock
11 '';
12 });
13 gems = bundlerEnv {
14 name = "taskwarrior-web-env";
15 ruby = ruby_2_6;
16 pname = "taskwarrior-web";
17 gemset = ./gemset.nix;
18 gemdir = rubyRoot.out;
19 groups = [ "default" "local" "development" ];
20 };
21in
22 {
23 inherit gems varDir socketsDir rubyRoot;
24 }
diff --git a/nixops/modules/task/thin.patch b/nixops/modules/task/thin.patch
deleted file mode 100644
index a7df3e3..0000000
--- a/nixops/modules/task/thin.patch
+++ /dev/null
@@ -1,23 +0,0 @@
1diff --git a/Gemfile b/Gemfile
2index 8544e15..9c4279c 100644
3--- a/Gemfile
4+++ b/Gemfile
5@@ -3,6 +3,8 @@ source "http://rubygems.org"
6 # Specify your gem's dependencies in taskwarrior-web.gemspec
7 gemspec
8
9+gem 'thin'
10+
11 group :local do
12 gem 'rb-fsevent', :require => false
13 gem 'growl', :require => false
14diff --git a/config.ru b/config.ru
15index c3050c6..52387d8 100644
16--- a/config.ru
17+++ b/config.ru
18@@ -1,5 +1,4 @@
19 require File.join(File.dirname(__FILE__), 'lib', 'taskwarrior-web')
20
21-disable :run
22 TaskwarriorWeb::App.set({ :environment => :production })
23 run TaskwarriorWeb::App