aboutsummaryrefslogtreecommitdiff
path: root/flakes/mypackages/pkgs/webapps/roundcubemail
diff options
context:
space:
mode:
Diffstat (limited to 'flakes/mypackages/pkgs/webapps/roundcubemail')
-rw-r--r--flakes/mypackages/pkgs/webapps/roundcubemail/add_all.patch209
-rw-r--r--flakes/mypackages/pkgs/webapps/roundcubemail/default.nix85
-rw-r--r--flakes/mypackages/pkgs/webapps/roundcubemail/plugins/automatic_addressbook/default.nix7
-rw-r--r--flakes/mypackages/pkgs/webapps/roundcubemail/plugins/carddav/default.nix7
-rw-r--r--flakes/mypackages/pkgs/webapps/roundcubemail/plugins/contextmenu/default.nix7
-rw-r--r--flakes/mypackages/pkgs/webapps/roundcubemail/plugins/contextmenu_folder/default.nix7
-rw-r--r--flakes/mypackages/pkgs/webapps/roundcubemail/plugins/html5_notifier/default.nix7
-rw-r--r--flakes/mypackages/pkgs/webapps/roundcubemail/plugins/ident_switch/default.nix7
-rw-r--r--flakes/mypackages/pkgs/webapps/roundcubemail/plugins/message_highlight/default.nix7
-rw-r--r--flakes/mypackages/pkgs/webapps/roundcubemail/plugins/thunderbird_labels/default.nix7
10 files changed, 350 insertions, 0 deletions
diff --git a/flakes/mypackages/pkgs/webapps/roundcubemail/add_all.patch b/flakes/mypackages/pkgs/webapps/roundcubemail/add_all.patch
new file mode 100644
index 0000000..ba651e2
--- /dev/null
+++ b/flakes/mypackages/pkgs/webapps/roundcubemail/add_all.patch
@@ -0,0 +1,209 @@
1diff --git a/program/include/rcmail_output_html.php b/program/include/rcmail_output_html.php
2index 0552b89c2..1b84e1b4e 100644
3--- a/program/include/rcmail_output_html.php
4+++ b/program/include/rcmail_output_html.php
5@@ -1013,13 +1013,13 @@ EOF;
6 // use minified file if exists (not in development mode)
7 if (!$this->devel_mode && !preg_match('/\.min\.' . $ext . '$/', $file)) {
8 $minified_file = substr($file, 0, strlen($ext) * -1) . 'min.' . $ext;
9- if ($fs = @filemtime($this->assets_dir . $minified_file)) {
10- return $minified_file . '?s=' . $fs;
11+ if ($fs = @md5_file($this->assets_dir . $minified_file)) {
12+ return $minified_file . '?s=' . substr($fs, 0, 6);
13 }
14 }
15
16- if ($fs = @filemtime($this->assets_dir . $file)) {
17- $file .= '?s=' . $fs;
18+ if ($fs = @md5_file($this->assets_dir . $file)) {
19+ $file .= '?s=' . substr($fs, 0, 6);
20 }
21
22 return $file;
23diff --git a/program/js/app.js b/program/js/app.js
24index 2094b7b7b..06fe96a80 100644
25--- a/program/js/app.js
26+++ b/program/js/app.js
27@@ -2277,6 +2277,9 @@ function rcube_webmail()
28 }
29
30 tree += '<span id="msgicn'+row.id+'" class="'+css_class+status_class+'" title="'+status_label+'"></span>';
31+ if (flags.mbox != this.env.mailbox) {
32+ tree += '<span style="color:#737677">' + flags.mbox + '&nbsp;<span>';
33+ }
34 row.className = row_class;
35
36 // build subject link
37diff --git a/program/localization/en_CA/labels.inc b/program/localization/en_CA/labels.inc
38index 03c1c8e11..8d67a49ac 100644
39--- a/program/localization/en_CA/labels.inc
40+++ b/program/localization/en_CA/labels.inc
41@@ -128,6 +128,7 @@ $labels['markunread'] = 'As unread';
42 $labels['markflagged'] = 'As flagged';
43 $labels['markunflagged'] = 'As unflagged';
44 $labels['moreactions'] = 'More actions...';
45+$labels['folders-allsubscribed'] = 'All subscribed folders';
46 $labels['folders-all'] = 'All folders';
47 $labels['more'] = 'More';
48 $labels['back'] = 'Back';
49@@ -184,6 +185,7 @@ $labels['namex'] = 'Name';
50 $labels['searchscope'] = 'Scope';
51 $labels['currentfolder'] = 'Current folder';
52 $labels['subfolders'] = 'This and subfolders';
53+$labels['allsubscribedfolders'] = 'All subscribed folders';
54 $labels['allfolders'] = 'All folders';
55 $labels['openinextwin'] = 'Open in new window';
56 $labels['emlsave'] = 'Download (.eml)';
57diff --git a/program/localization/en_GB/labels.inc b/program/localization/en_GB/labels.inc
58index a442965de..b5b4839e3 100644
59--- a/program/localization/en_GB/labels.inc
60+++ b/program/localization/en_GB/labels.inc
61@@ -135,6 +135,7 @@ $labels['moreactions'] = 'More actions...';
62 $labels['markallread'] = 'Mark all as read';
63 $labels['folders-cur'] = 'Selected folder only';
64 $labels['folders-sub'] = 'Selected folder and its subfolders';
65+$labels['folders-allsubscribed'] = 'All subscribed folders';
66 $labels['folders-all'] = 'All folders';
67 $labels['more'] = 'More';
68 $labels['back'] = 'Back';
69@@ -221,6 +222,7 @@ $labels['namex'] = 'Name';
70 $labels['searchscope'] = 'Scope';
71 $labels['currentfolder'] = 'Current folder';
72 $labels['subfolders'] = 'This and subfolders';
73+$labels['allsubscribedfolders'] = 'All subscribed folders';
74 $labels['allfolders'] = 'All folders';
75 $labels['searchinterval-1W'] = 'older than a week';
76 $labels['searchinterval-1M'] = 'older than a month';
77diff --git a/program/localization/en_US/labels.inc b/program/localization/en_US/labels.inc
78index 2e8ec8009..c7736557f 100644
79--- a/program/localization/en_US/labels.inc
80+++ b/program/localization/en_US/labels.inc
81@@ -158,6 +158,7 @@ $labels['moreactions'] = 'More actions...';
82 $labels['markallread'] = 'Mark all as read';
83 $labels['folders-cur'] = 'Selected folder only';
84 $labels['folders-sub'] = 'Selected folder and its subfolders';
85+$labels['folders-allsubscribed'] = 'All subscribed folders';
86 $labels['folders-all'] = 'All folders';
87 $labels['more'] = 'More';
88 $labels['back'] = 'Back';
89@@ -249,6 +250,7 @@ $labels['namex'] = 'Name';
90 $labels['searchscope'] = 'Scope';
91 $labels['currentfolder'] = 'Current folder';
92 $labels['subfolders'] = 'This and subfolders';
93+$labels['allsubscribedfolders'] = 'All subscribed folders';
94 $labels['allfolders'] = 'All folders';
95 $labels['searchinterval-1W'] = 'older than a week';
96 $labels['searchinterval-1M'] = 'older than a month';
97diff --git a/program/localization/fr_FR/labels.inc b/program/localization/fr_FR/labels.inc
98index 6db44f95c..ad83e15d8 100644
99--- a/program/localization/fr_FR/labels.inc
100+++ b/program/localization/fr_FR/labels.inc
101@@ -135,6 +135,7 @@ $labels['moreactions'] = 'Plus d’actions…';
102 $labels['markallread'] = 'Tout marquer comme lu';
103 $labels['folders-cur'] = 'Dossier sélectionné seulement';
104 $labels['folders-sub'] = 'Dossier sélectionné et ses sous-dossiers';
105+$labels['folders-allsubscribed'] = 'Tous les dossiers souscrits';
106 $labels['folders-all'] = 'Tous les dossiers';
107 $labels['more'] = 'Plus';
108 $labels['back'] = 'Retour';
109@@ -221,6 +222,7 @@ $labels['namex'] = 'Nom';
110 $labels['searchscope'] = 'Portée';
111 $labels['currentfolder'] = 'Répertoire actuel';
112 $labels['subfolders'] = 'Ceci et les sous-dossiers';
113+$labels['allsubscribedfolders'] = 'Tous les dossiers souscrits';
114 $labels['allfolders'] = 'Tous les dossiers';
115 $labels['searchinterval-1W'] = 'plus d’une semaine';
116 $labels['searchinterval-1M'] = 'plus d’un mois';
117diff --git a/program/steps/mail/func.inc b/program/steps/mail/func.inc
118index 8e0c642f6..ac79780e0 100644
119--- a/program/steps/mail/func.inc
120+++ b/program/steps/mail/func.inc
121@@ -110,8 +110,8 @@ if (empty($RCMAIL->action) || $RCMAIL->action == 'list') {
122 'copy', 'move', 'quota', 'replyall', 'replylist', 'stillsearching',
123 'flagged', 'unflagged', 'unread', 'deleted', 'replied', 'forwarded',
124 'priority', 'withattachment', 'fileuploaderror', 'mark', 'markallread',
125- 'folders-cur', 'folders-sub', 'folders-all', 'cancel', 'bounce', 'bouncemsg',
126- 'sendingmessage');
127+ 'folders-cur', 'folders-sub', 'folders-allsubscribed', 'folder-all',
128+ 'cancel', 'bounce', 'bouncemsg', 'sendingmessage');
129 }
130 }
131
132diff --git a/program/steps/mail/search.inc b/program/steps/mail/search.inc
133index f60528835..836a715b0 100644
134--- a/program/steps/mail/search.inc
135+++ b/program/steps/mail/search.inc
136@@ -86,7 +86,7 @@ else if (strlen(trim($str))) {
137 }
138
139 // save search modifiers for the current folder to user prefs
140- $mkey = $scope == 'all' ? '*' : $mbox;
141+ $mkey = ($scope == 'all' || $scope == 'allsubscribed') ? '*' : $mbox;
142 $search_mods = rcmail_search_mods();
143 $search_mods[$mkey] = array_fill_keys(array_keys($subject), 1);
144
145@@ -124,6 +124,10 @@ if (!empty($continue) && isset($_SESSION['search']) && $_SESSION['search_request
146 if ($search_str) {
147 // search all, current or subfolders folders
148 if ($scope == 'all') {
149+ $mboxes = $RCMAIL->storage->list_folders('', '*', 'mail', null, true);
150+ natcasesort($mboxes); // we want natural alphabetic sorting of folders in the result set
151+ }
152+ else if ($scope == 'allsubscribed') {
153 $mboxes = $RCMAIL->storage->list_folders_subscribed('', '*', 'mail', null, true);
154 natcasesort($mboxes); // we want natural alphabetic sorting of folders in the result set
155 }
156@@ -133,7 +137,7 @@ if ($search_str) {
157 array_unshift($mboxes, $mbox);
158 }
159
160- if ($scope != 'all') {
161+ if ($scope != 'all' && $scope != 'allsubscribed') {
162 // Remember current folder, it can change in meantime (plugins)
163 // but we need it to e.g. recognize Sent folder to handle From/To column later
164 $RCMAIL->output->set_env('mailbox', $mbox);
165@@ -194,7 +198,7 @@ else {
166 $count = 0;
167 $OUTPUT->show_message('searchnomatch', 'notice');
168 $OUTPUT->set_env('multifolder_listing', (bool)$result->multi);
169- if ($result->multi && $scope == 'all') {
170+ if ($result->multi && ($scope == 'all' || $scope == 'allsubscribed')) {
171 $OUTPUT->command('select_folder', '');
172 }
173 }
174diff --git a/skins/classic/templates/mail.html b/skins/classic/templates/mail.html
175index 666adf606..23d12a275 100644
176--- a/skins/classic/templates/mail.html
177+++ b/skins/classic/templates/mail.html
178@@ -106,6 +106,7 @@
179 <li><label class="comment"><roundcube:label name="searchscope" /></label></li>
180 <li><label><input type="radio" name="s_scope" value="base" id="s_scope_base" onclick="rcmail.set_searchscope(this.value)" /> <span><roundcube:label name="currentfolder" /></span></label></li>
181 <li><label><input type="radio" name="s_scope" value="sub" id="s_scope_sub" onclick="rcmail.set_searchscope(this.value)" /> <span><roundcube:label name="subfolders" /></span></label></li>
182+ <li><label><input type="radio" name="s_scope" value="allsubscribed" id="s_scope_allsubscribed" onclick="rcmail.set_searchscope(this.value)" /> <span><roundcube:label name="allsubscribedfolders" /></span></label></li>
183 <li><label><input type="radio" name="s_scope" value="all" id="s_scope_all" onclick="rcmail.set_searchscope(this.value)" /> <span><roundcube:label name="allfolders" /></span></label></li>
184 </ul>
185 </div>
186diff --git a/skins/elastic/templates/mail.html b/skins/elastic/templates/mail.html
187index 51dbfcd30..4c2281281 100644
188--- a/skins/elastic/templates/mail.html
189+++ b/skins/elastic/templates/mail.html
190@@ -77,6 +77,7 @@
191 <select name="s_scope" id="s_scope">
192 <option value="base"><roundcube:label name="currentfolder" /></option>
193 <option value="sub"><roundcube:label name="subfolders" /></option>
194+ <option value="allsubscribed"><roundcube:label name="allsubscribedfolders" /></option>
195 <option value="all"><roundcube:label name="allfolders" /></option>
196 </select>
197 </div>
198diff --git a/skins/larry/templates/mail.html b/skins/larry/templates/mail.html
199index 5ef0bc211..e0e8280ad 100644
200--- a/skins/larry/templates/mail.html
201+++ b/skins/larry/templates/mail.html
202@@ -56,6 +56,7 @@
203 <li role="separator" class="separator"><label><roundcube:label name="searchscope" /></label></li>
204 <li role="menuitem"><label><input type="radio" name="s_scope" value="base" id="s_scope_base" onclick="UI.set_searchscope(this)" /> <span><roundcube:label name="currentfolder" /></span></label></li>
205 <li role="menuitem"><label><input type="radio" name="s_scope" value="sub" id="s_scope_sub" onclick="UI.set_searchscope(this)" /> <span><roundcube:label name="subfolders" /></span></label></li>
206+ <li role="menuitem"><label><input type="radio" name="s_scope" value="allsubscribed" id="s_scope_allsubscribed" onclick="UI.set_searchscope(this)" /> <span><roundcube:label name="allsubscribedfolders" /></span></label></li>
207 <li role="menuitem"><label><input type="radio" name="s_scope" value="all" id="s_scope_all" onclick="UI.set_searchscope(this)" /> <span><roundcube:label name="allfolders" /></span></label></li>
208 </ul>
209 <div class="buttons"><a class="button" href="#" onclick="if (rcmail.command('search')) UI.show_popup('searchmenu',false)"><roundcube:label name="search" /></a></div>
diff --git a/flakes/mypackages/pkgs/webapps/roundcubemail/default.nix b/flakes/mypackages/pkgs/webapps/roundcubemail/default.nix
new file mode 100644
index 0000000..bdddf2f
--- /dev/null
+++ b/flakes/mypackages/pkgs/webapps/roundcubemail/default.nix
@@ -0,0 +1,85 @@
1{ varDir ? "/var/lib/roundcubemail"
2, roundcube_config ? "/etc/roundcube/config.php"
3, stdenv, fetchurl, jre, unzip, lib, callPackage }:
4let
5 defaultInstall = ''
6 mkdir -p $out
7 cp -R . $out/
8 cd $out
9 if [ -d skins -a -d skins/larry -a ! -d skins/elastic ]; then
10 ln -s larry skins/elastic
11 fi
12 '';
13 buildPlugin = { appName, version, url, sha256, installPhase ? defaultInstall }:
14 stdenv.mkDerivation rec {
15 name = "roundcube-${appName}-${version}";
16 inherit version;
17 phases = "unpackPhase installPhase";
18 inherit installPhase;
19 src = fetchurl { inherit url sha256; };
20 passthru.pluginName = appName;
21 };
22 skinNames = [];
23 allSkins = lib.attrsets.genAttrs skinNames
24 (name: callPackage (./skins + "/${name}") {});
25 pluginNames = [
26 "automatic_addressbook" "carddav" "contextmenu"
27 "contextmenu_folder" "html5_notifier" "ident_switch"
28 "message_highlight" "thunderbird_labels"
29 ];
30 allPlugins = lib.attrsets.genAttrs pluginNames
31 (name: callPackage (./plugins + "/${name}") { inherit buildPlugin; });
32 toPassthru = pkg: plugins: skins: {
33 inherit plugins skins allSkins allPlugins;
34 withSkins = withSkins pkg;
35 withPlugins = withPlugins pkg;
36 };
37 withPlugins = pkg: toPlugins:
38 let
39 plugins = toPlugins allPlugins;
40 toInstallPlugin = n: "ln -s ${n} $out/plugins/${n.pluginName}";
41 newRoundcube = pkg.overrideAttrs(old: {
42 installPhase = old.installPhase + "\n" + builtins.concatStringsSep "\n" (map toInstallPlugin plugins);
43 passthru = toPassthru newRoundcube (pkg.plugins ++ plugins) pkg.skins;
44 });
45 in newRoundcube;
46 withSkins = pkg: toSkins:
47 let
48 skins = toSkins allSkins;
49 toInstallSkin = n: "ln -s ${n} $out/skins/${n.skinName}";
50 newRoundcube = pkg.overrideAttrs(old: {
51 installPhase = old.installPhase + "\n" + builtins.concatStringsSep "\n" (map toInstallSkin skins);
52 passthru = toPassthru newRoundcube pkg.plugins (pkg.skins ++ skins);
53 });
54 in newRoundcube;
55 shrinker = fetchurl {
56 url = "https://dl.google.com/closure-compiler/compiler-20200719.zip";
57 sha256 = "0j46y9ack2yq67naca6nfysbmyilwjlkl29dbswidf1lq09yhhj3";
58 };
59 package = stdenv.mkDerivation rec {
60 version = "1.4.4";
61 name = "roundcubemail-${version}";
62 src= fetchurl {
63 url = "https://github.com/roundcube/roundcubemail/releases/download/${version}/${name}-complete.tar.gz";
64 sha256 = "1my726p0wmsn21nbdsjx02h6hnbh8nidzipzdy0gk0qgda1j729b";
65 };
66 patches = [ ./add_all.patch ]; # This patch includes js modification which requires to re-run the jsshrink below
67 buildInputs = [ unzip jre ];
68 buildPhase = ''
69 mkdir -p /tmp
70 unzip -p "${shrinker}" "*.jar" > "/tmp/compiler.jar"
71 ./bin/jsshrink.sh
72 sed -i \
73 -e "s|RCUBE_INSTALL_PATH . 'temp.*|'${varDir}/cache';|" \
74 config/defaults.inc.php
75 sed -i \
76 -e "s|RCUBE_INSTALL_PATH . 'logs.*|'${varDir}/logs';|" \
77 config/defaults.inc.php
78 '';
79 installPhase = ''
80 cp -a . $out
81 ln -s ${roundcube_config} $out/config/config.inc.php
82 '';
83 passthru = toPassthru package [] [];
84 };
85in package
diff --git a/flakes/mypackages/pkgs/webapps/roundcubemail/plugins/automatic_addressbook/default.nix b/flakes/mypackages/pkgs/webapps/roundcubemail/plugins/automatic_addressbook/default.nix
new file mode 100644
index 0000000..cd9efee
--- /dev/null
+++ b/flakes/mypackages/pkgs/webapps/roundcubemail/plugins/automatic_addressbook/default.nix
@@ -0,0 +1,7 @@
1{ buildPlugin }:
2buildPlugin rec {
3 appName = "automatic_addressbook";
4 version = "0.4.3";
5 url = "https://github.com/sblaisot/${appName}/archive/${version}.tar.gz";
6 sha256 = "0bx5qjzp3a3wc72fr295bvgsy5n15949c041hq76n6c7sqdn7inc";
7}
diff --git a/flakes/mypackages/pkgs/webapps/roundcubemail/plugins/carddav/default.nix b/flakes/mypackages/pkgs/webapps/roundcubemail/plugins/carddav/default.nix
new file mode 100644
index 0000000..ad6856b
--- /dev/null
+++ b/flakes/mypackages/pkgs/webapps/roundcubemail/plugins/carddav/default.nix
@@ -0,0 +1,7 @@
1{ buildPlugin }:
2buildPlugin rec {
3 appName = "carddav";
4 version = "3.0.3";
5 url = "https://github.com/blind-coder/rcmcarddav/releases/download/v${version}/${appName}-${version}.tar.bz2";
6 sha256 = "0cf5rnqkhhag2vdy808zfpr4l5586fn43nvcia8ac1ha58azrxal";
7}
diff --git a/flakes/mypackages/pkgs/webapps/roundcubemail/plugins/contextmenu/default.nix b/flakes/mypackages/pkgs/webapps/roundcubemail/plugins/contextmenu/default.nix
new file mode 100644
index 0000000..34a43a7
--- /dev/null
+++ b/flakes/mypackages/pkgs/webapps/roundcubemail/plugins/contextmenu/default.nix
@@ -0,0 +1,7 @@
1{ buildPlugin }:
2buildPlugin rec {
3 appName = "contextmenu";
4 version = "3.2";
5 url = "https://github.com/johndoh/roundcube-${appName}/archive/${version}.tar.gz";
6 sha256 = "1j7qns42bvgwav8d5n8g16iajyrhydd76hgil8625f3xyjbv4mx0";
7}
diff --git a/flakes/mypackages/pkgs/webapps/roundcubemail/plugins/contextmenu_folder/default.nix b/flakes/mypackages/pkgs/webapps/roundcubemail/plugins/contextmenu_folder/default.nix
new file mode 100644
index 0000000..e5cb46d
--- /dev/null
+++ b/flakes/mypackages/pkgs/webapps/roundcubemail/plugins/contextmenu_folder/default.nix
@@ -0,0 +1,7 @@
1{ buildPlugin }:
2buildPlugin rec {
3 appName = "contextmenu_folder";
4 version = "1.3.3";
5 url = "https://github.com/random-cuber/${appName}/archive/${version}.tar.gz";
6 sha256 = "1ngfws1v8qrpa52rjh7kirc98alchk2vbqwra86h00agyjjlcc57";
7}
diff --git a/flakes/mypackages/pkgs/webapps/roundcubemail/plugins/html5_notifier/default.nix b/flakes/mypackages/pkgs/webapps/roundcubemail/plugins/html5_notifier/default.nix
new file mode 100644
index 0000000..a5788b3
--- /dev/null
+++ b/flakes/mypackages/pkgs/webapps/roundcubemail/plugins/html5_notifier/default.nix
@@ -0,0 +1,7 @@
1{ buildPlugin }:
2buildPlugin rec {
3 appName = "html5_notifier";
4 version = "v0.6.4";
5 url = "https://github.com/stremlau/${appName}/archive/${version}.tar.gz";
6 sha256 = "1w6xkffgxwbahi7acixdh5sgjvsjlfwdq942gkvc64byk8r3bhsj";
7}
diff --git a/flakes/mypackages/pkgs/webapps/roundcubemail/plugins/ident_switch/default.nix b/flakes/mypackages/pkgs/webapps/roundcubemail/plugins/ident_switch/default.nix
new file mode 100644
index 0000000..3e10fee
--- /dev/null
+++ b/flakes/mypackages/pkgs/webapps/roundcubemail/plugins/ident_switch/default.nix
@@ -0,0 +1,7 @@
1{ buildPlugin }:
2buildPlugin rec {
3 appName = "ident_switch";
4 version = "4.2";
5 url = "https://bitbucket.org/BoresExpress/${appName}/get/${version}.tar.gz";
6 sha256 = "0rf2krjsnly4i0mzgsbx09xckr3p9a9dzxf8qq4lkyng1a7dvjkq";
7}
diff --git a/flakes/mypackages/pkgs/webapps/roundcubemail/plugins/message_highlight/default.nix b/flakes/mypackages/pkgs/webapps/roundcubemail/plugins/message_highlight/default.nix
new file mode 100644
index 0000000..dc7138a
--- /dev/null
+++ b/flakes/mypackages/pkgs/webapps/roundcubemail/plugins/message_highlight/default.nix
@@ -0,0 +1,7 @@
1{ buildPlugin }:
2buildPlugin rec {
3 appName = "message_highlight";
4 version = "4.4";
5 url = "https://github.com/corbosman/${appName}/archive/${version}.tar.gz";
6 sha256 = "12c4x47y70xdl5pgm8csh5i4yiyhpi232lvjbixmca6di4lkhh9j";
7}
diff --git a/flakes/mypackages/pkgs/webapps/roundcubemail/plugins/thunderbird_labels/default.nix b/flakes/mypackages/pkgs/webapps/roundcubemail/plugins/thunderbird_labels/default.nix
new file mode 100644
index 0000000..b67f16a
--- /dev/null
+++ b/flakes/mypackages/pkgs/webapps/roundcubemail/plugins/thunderbird_labels/default.nix
@@ -0,0 +1,7 @@
1{ buildPlugin }:
2buildPlugin rec {
3 appName = "thunderbird_labels";
4 version = "v1.4.2";
5 url = "https://github.com/mike-kfed/roundcube-${appName}/archive/${version}.tar.gz";
6 sha256 = "00dqqlq6m8a6dwynp6gwfimc10anbs8kh0qdy8xvq2l06hk6jxyc";
7}