firefox/: Add some Firefox configuration stuff.
authorMark Wooding <mdw@distorted.org.uk>
Wed, 10 Jun 2020 15:06:29 +0000 (16:06 +0100)
committerMark Wooding <mdw@distorted.org.uk>
Wed, 10 Jun 2020 15:06:29 +0000 (16:06 +0100)
12 files changed:
Makefile
firefox/chrome-userContent.css [new file with mode: 0644]
firefox/explode-stylus [new file with mode: 0755]
firefox/implode-stylus [new file with mode: 0755]
firefox/smartup-gestures.json [new file with mode: 0644]
firefox/stylus/arstechnica.com.css [new file with mode: 0644]
firefox/stylus/devblogs.microsoft.com.css [new file with mode: 0644]
firefox/stylus/github.com.css [new file with mode: 0644]
firefox/stylus/slack.com.css [new file with mode: 0644]
firefox/stylus/slatestarcodex.com.css [new file with mode: 0644]
firefox/stylus/tvtropes.com.css [new file with mode: 0644]
firefox/stylus/www.bbc.co.uk.css [new file with mode: 0644]

index 0536c5d..222d6ce 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -330,6 +330,31 @@ endif
 endif
 
 ###--------------------------------------------------------------------------
+### Firefox things.
+
+ifeq ($(FIREFOX),t)
+
+out/:
+       $(call v_tag,MKDIR)mkdir $@
+
+out/firefox/: | out/
+       $(call v_tag,MKDIR)mkdir $@
+
+clean::; rm -rf out/
+
+all:: out/firefox/smartup-gestures.config
+out/firefox/smartup-gestures.config: firefox/smartup-gestures.json | out/firefox/
+       $(call v_tag,BLOB)\
+               jq -c . $< | bincode base64 >$@.new && mv $@.new $@
+
+all:: out/firefox/stylus.json
+out/firefox/stylus.json: firefox/stylus/ firefox/stylus/*.css | out/firefox/
+       $(call v_tag,IMPLODE)\
+               firefox/implode-stylus firefox/stylus/ >$@.new && \
+                       mv $@.new $@
+endif
+
+###--------------------------------------------------------------------------
 ### General symlinking.
 
 misclink-source                 = $(HERE)/$(or $($1_SRC), $1)
diff --git a/firefox/chrome-userContent.css b/firefox/chrome-userContent.css
new file mode 100644 (file)
index 0000000..a65e620
--- /dev/null
@@ -0,0 +1,29 @@
+@-moz-document url-prefix("about:reader") {
+       /* Override the fonts and layout in Reader Mode. */
+
+       /* Use the globally configured serif font, rather than a hardcoded font
+        * that's less nice.
+        */
+       body.serif, body.serif .remove-button
+               { font-family: serif !important; }
+
+       /* Fix the background colour. */
+       body.dark { background-color: #111 !important; }
+       .toolbar, .button { background-color: inherit !important; }
+
+       /* Don't render block quotes and other kinds of lists in a stupid
+        * way.   (This is currently incomplete.)
+        */
+       body.dark blockquote { border-inline-start: 0 !important; }
+       p, code, pre, blockquote, ul, ol, li, figure, .wp-caption {
+               border-radius: 0 !important;
+               margin: 10px 0 20px 0 !important;
+       }
+       blockquote { padding-inline-start: 30px !important; }
+       p, li { padding: 0 !important; }
+}
+
+@-moz-document url-prefix("about:blank") {
+       /* Fix the background colour of new tabs. */
+       body { background-color: #242425; }
+}
diff --git a/firefox/explode-stylus b/firefox/explode-stylus
new file mode 100755 (executable)
index 0000000..6dde67c
--- /dev/null
@@ -0,0 +1,24 @@
+#! /usr/bin/perl
+
+use autodie;
+use JSON;
+
+my ($dir) = @ARGV;
+mkdir $dir;
+
+local $/;
+my $js = decode_json <STDIN>;
+
+for my $e (@$js) {
+  open $fh, ">", "$dir/$e->{name}.css";
+  print $fh "/* -*-css-*- */\n";
+  for my $s ($e->{sections}->@*) {
+    KEY: for my $k (keys %$s) {
+      next KEY if $k eq "code";
+      print $fh "/*@ $k: ", join(", ", $s->{$k}->@*), " */\n";
+    }
+    print $fh $s->{code}, "\n";
+    print $fh "/*\@END*/\n";
+  }
+  close $fh;
+}
diff --git a/firefox/implode-stylus b/firefox/implode-stylus
new file mode 100755 (executable)
index 0000000..1cabd4b
--- /dev/null
@@ -0,0 +1,45 @@
+#! /usr/bin/perl
+
+use autodie;
+use JSON;
+
+use Data::Dumper;
+
+my $NOW = time;
+
+my ($dir) = @ARGV;
+my $j = [];
+my $seq = 0;
+opendir my $dh, $dir;
+FILE: while (my $f = readdir $dh) {
+  next if $f eq "." || $f eq "..";
+  next unless $f =~ /\.css$/;
+  (my $name = $f) =~ s/\.css$//;
+  my @s = ();
+  my $s = {};
+  my $c = "";
+  open my $fh, "<", "$dir/$f";
+  while (<$fh>) {
+    if (m{/\* -\*-css-\*- \*/}) {
+      next;
+    } elsif (m{/\*\@END\*/}) {
+      $s->{code} = $c;
+      push @s, $s;
+      $s = {}; $c = "";
+    } elsif (m{/\*\@ \s* ([^:]+) \s* : \s* ( | \S | \S .* \S) \s* \*/}x) {
+      $s->{$1} = [split /\s*,\s*/, $2];
+    } else {
+      $c .= $_;
+    }
+  }
+  push @$j, { enabled => JSON::true,
+             updateUrl => undef,
+             md5Url => undef,
+             url => undef,
+             originalMd5 => undef,
+             installDate => $NOW,
+             name => $name,
+             id => ++$seq,
+             sections => \@s };
+}
+print encode_json($j), "\n";
diff --git a/firefox/smartup-gestures.json b/firefox/smartup-gestures.json
new file mode 100644 (file)
index 0000000..7df9c0e
--- /dev/null
@@ -0,0 +1,1100 @@
+{
+       "about": {
+               "donatedev": {
+                       "ad": true
+               }
+       },
+       "apps": {
+               "appslist": {
+                       "n_closebox": true
+               }
+       },
+       "ctm": {
+               "settings": {
+                       "disable": true,
+                       "opt": true,
+                       "fnswitch": false,
+                       "homepage": true
+               },
+               "actions": [
+                       {
+                               "name": "newtab",
+                               "selects": [
+                                       {
+                                               "type": "n_optype",
+                                               "value": "n_new"
+                                       },
+                                       {
+                                               "type": "n_position",
+                                               "value": "s_default"
+                                       }
+                               ],
+                               "checks": [
+                                       {
+                                               "type": "n_pin",
+                                               "value": false
+                                       }
+                               ]
+                       }
+               ]
+       },
+       "drg": {
+               "settings": {
+                       "holdkey": "ctrl",
+                       "holdimgkey": "shift",
+                       "drgbox": false,
+                       "drgtobox": true,
+                       "drgurl": true,
+                       "drgimg": false,
+                       "txt": false,
+                       "lnk": true,
+                       "img": true,
+                       "draggable": true
+               },
+               "ui": {
+                       "line": {
+                               "enable": true,
+                               "color": "#bb4444",
+                               "width": 3,
+                               "opacity": 90
+                       },
+                       "direct": {
+                               "enable": false,
+                               "color": "#8e9bd5",
+                               "width": 32,
+                               "opacity": 80,
+                               "style": "center"
+                       },
+                       "tip": {
+                               "enable": true,
+                               "color": "#ffffff",
+                               "bgcolor": "#5e6a88",
+                               "width": "16",
+                               "opacity": "90",
+                               "style": "center",
+                               "withdir": true
+                       },
+                       "note": {
+                               "enable": false,
+                               "color": "#f75620",
+                               "opacity": 90,
+                               "width": 12,
+                               "style": "hover"
+                       },
+                       "allaction": {
+                               "enable": false,
+                               "color": "#ffffff",
+                               "bgcolor": "#576f71",
+                               "width": 24,
+                               "opacity": 70,
+                               "style": "ui_bottom"
+                       }
+               },
+               "tdrg": [
+                       {
+                               "direct": "LDR",
+                               "name": "copytxt"
+                       }
+               ],
+               "ldrg": [
+                       {
+                               "direct": "D",
+                               "name": "openlnk",
+                               "mydes": {
+                                       "type": true,
+                                       "value": "Open link in background"
+                               },
+                               "selects": [
+                                       {
+                                               "type": "n_optype",
+                                               "value": "s_back"
+                                       },
+                                       {
+                                               "type": "n_position",
+                                               "value": "s_right"
+                                       }
+                               ],
+                               "checks": [
+                                       {
+                                               "type": "n_pin",
+                                               "value": false
+                                       }
+                               ]
+                       },
+                       {
+                               "direct": "R",
+                               "name": "openlnk",
+                               "selects": [
+                                       {
+                                               "type": "n_optype",
+                                               "value": "s_new"
+                                       },
+                                       {
+                                               "type": "n_position",
+                                               "value": "s_right"
+                                       }
+                               ],
+                               "checks": [
+                                       {
+                                               "type": "n_pin",
+                                               "value": false
+                                       }
+                               ],
+                               "mydes": {
+                                       "type": true,
+                                       "value": "Open link in new tab"
+                               },
+                               "type": "action"
+                       },
+                       {
+                               "name": "openlnk",
+                               "direct": "U",
+                               "mydes": {
+                                       "type": true,
+                                       "value": "Open link in new window"
+                               },
+                               "selects": [
+                                       {
+                                               "type": "n_optype",
+                                               "value": "s_win"
+                                       },
+                                       {
+                                               "type": "n_position",
+                                               "value": "s_default"
+                                       }
+                               ],
+                               "checks": [
+                                       {
+                                               "type": "n_pin",
+                                               "value": false
+                                       }
+                               ]
+                       },
+                       {
+                               "name": "copylnkurl",
+                               "direct": "LDR"
+                       },
+                       {
+                               "name": "dllink",
+                               "direct": "RD",
+                               "checks": [
+                                       {
+                                               "type": "n_dialog",
+                                               "value": true
+                                       }
+                               ]
+                       }
+               ],
+               "idrg": [
+                       {
+                               "direct": "R",
+                               "name": "openimg",
+                               "selects": [
+                                       {
+                                               "type": "n_optype",
+                                               "value": "s_new"
+                                       },
+                                       {
+                                               "type": "n_position",
+                                               "value": "s_right"
+                                       }
+                               ],
+                               "checks": [
+                                       {
+                                               "type": "n_pin",
+                                               "value": false
+                                       }
+                               ],
+                               "mydes": {
+                                       "type": true,
+                                       "value": "Open image in new tab"
+                               }
+                       },
+                       {
+                               "name": "openimg",
+                               "direct": "U",
+                               "selects": [
+                                       {
+                                               "type": "n_optype",
+                                               "value": "s_win"
+                                       },
+                                       {
+                                               "type": "n_position",
+                                               "value": "s_default"
+                                       }
+                               ],
+                               "checks": [
+                                       {
+                                               "type": "n_pin",
+                                               "value": false
+                                       }
+                               ],
+                               "mydes": {
+                                       "type": true,
+                                       "value": "Open image in new window"
+                               }
+                       },
+                       {
+                               "name": "openimg",
+                               "direct": "D",
+                               "mydes": {
+                                       "type": true,
+                                       "value": "Open image in background tab"
+                               },
+                               "selects": [
+                                       {
+                                               "type": "n_optype",
+                                               "value": "s_back"
+                                       },
+                                       {
+                                               "type": "n_position",
+                                               "value": "s_right"
+                                       }
+                               ],
+                               "checks": [
+                                       {
+                                               "type": "n_pin",
+                                               "value": false
+                                       }
+                               ]
+                       },
+                       {
+                               "name": "imgsearch",
+                               "direct": "RDLD",
+                               "selects": [
+                                       {
+                                               "type": "n_imgengine",
+                                               "value": "0"
+                                       },
+                                       {
+                                               "type": "n_encoding",
+                                               "value": "s_none"
+                                       },
+                                       {
+                                               "type": "n_optype",
+                                               "value": "s_new"
+                                       },
+                                       {
+                                               "type": "n_position",
+                                               "value": "s_right"
+                                       }
+                               ],
+                               "checks": [
+                                       {
+                                               "type": "n_pin",
+                                               "value": false
+                                       }
+                               ]
+                       },
+                       {
+                               "name": "saveimgas",
+                               "direct": "RD",
+                               "checks": [
+                                       {
+                                               "type": "n_dlbar",
+                                               "value": true
+                                       },
+                                       {
+                                               "type": "n_notif",
+                                               "value": true
+                                       }
+                               ]
+                       }
+               ]
+       },
+       "general": {
+               "settings": {
+                       "timeout": true,
+                       "timeoutvalue": 2000,
+                       "timeout_nomenu": true,
+                       "minlength": 10,
+                       "autosave": true,
+                       "icon": true,
+                       "theme": "colorful",
+                       "notif": false,
+                       "appnotif": true,
+                       "esc": true
+               },
+               "fnswitch": {
+                       "fnmges": true,
+                       "fnsdrg": false,
+                       "fndrg": true,
+                       "fnrges": false,
+                       "fnwges": false,
+                       "fnpop": false,
+                       "fnicon": false,
+                       "fnctm": false
+               },
+               "engine": {
+                       "txtengine": [
+                               {
+                                       "name": "Google",
+                                       "content": "https://www.google.com/search?q=%s"
+                               },
+                               {
+                                       "name": "Bing",
+                                       "content": "http://www.bing.com/search?q=%s"
+                               }
+                       ],
+                       "imgengine": [
+                               {
+                                       "name": "Google Images",
+                                       "content": "https://www.google.com/searchbyimage?image_url=%s"
+                               },
+                               {
+                                       "name": "Bing Images",
+                                       "content": "http://www.bing.com/images/searchbyimage?&imgurl=%s"
+                               }
+                       ]
+               },
+               "script": {
+                       "script": [
+                               {
+                                       "name": "Test Script",
+                                       "content": "alert('test script 1.')"
+                               },
+                               {
+                                       "name": "Test Script2",
+                                       "content": "alert('test script 2.')"
+                               }
+                       ]
+               },
+               "linux": {
+                       "cancelmenu": false
+               },
+               "sync": {
+                       "autosync": true
+               }
+       },
+       "icon": {
+               "settings": {
+                       "type": "back",
+                       "tip": true
+               },
+               "actions": [
+                       {
+                               "name": "newtab",
+                               "selects": [
+                                       {
+                                               "type": "n_optype",
+                                               "value": "n_new"
+                                       },
+                                       {
+                                               "type": "n_position",
+                                               "value": "s_default"
+                                       }
+                               ],
+                               "checks": [
+                                       {
+                                               "type": "n_pin",
+                                               "value": false
+                                       }
+                               ]
+                       }
+               ]
+       },
+       "mges": {
+               "settings": {
+                       "model": "4",
+                       "holdkey": "none",
+                       "txttourl": true,
+                       "lnktoimg": false
+               },
+               "ui": {
+                       "line": {
+                               "enable": true,
+                               "color": "#44bb44",
+                               "width": 3,
+                               "opacity": 90
+                       },
+                       "direct": {
+                               "enable": false,
+                               "color": "#8e9bd5",
+                               "width": 32,
+                               "opacity": 80,
+                               "style": "center"
+                       },
+                       "tip": {
+                               "enable": true,
+                               "color": "#ffffff",
+                               "bgcolor": "#5e6a88",
+                               "width": "16",
+                               "opacity": "90",
+                               "style": "center",
+                               "withdir": true
+                       },
+                       "note": {
+                               "enable": false,
+                               "color": "#f75620",
+                               "opacity": 90,
+                               "width": 12,
+                               "style": "hover"
+                       },
+                       "allaction": {
+                               "enable": false,
+                               "color": "#ffffff",
+                               "bgcolor": "#576f71",
+                               "width": 24,
+                               "opacity": 70,
+                               "style": "ui_bottom"
+                       }
+               },
+               "actions": [
+                       {
+                               "direct": "L",
+                               "name": "back",
+                               "type": "action"
+                       },
+                       {
+                               "direct": "R",
+                               "name": "forward",
+                               "type": "action"
+                       },
+                       {
+                               "direct": "D",
+                               "name": "newtab",
+                               "selects": [
+                                       {
+                                               "type": "n_optype",
+                                               "value": "s_new"
+                                       },
+                                       {
+                                               "type": "n_position",
+                                               "value": "s_default"
+                                       }
+                               ],
+                               "checks": [
+                                       {
+                                               "type": "n_pin",
+                                               "value": false
+                                       }
+                               ],
+                               "type": "action"
+                       },
+                       {
+                               "direct": "DR",
+                               "name": "close",
+                               "mydes": {
+                                       "type": true,
+                                       "value": "Close current tab"
+                               },
+                               "selects": [
+                                       {
+                                               "type": "n_tab",
+                                               "value": "s_current"
+                                       },
+                                       {
+                                               "type": "n_close_sel",
+                                               "value": "s_default"
+                                       }
+                               ],
+                               "checks": [
+                                       {
+                                               "type": "n_close_keep",
+                                               "value": false
+                                       }
+                               ],
+                               "type": "action"
+                       },
+                       {
+                               "direct": "UL",
+                               "name": "switchtab",
+                               "mydes": {
+                                       "type": true,
+                                       "value": "Switch to left tab"
+                               },
+                               "selects": [
+                                       {
+                                               "type": "n_tab_lrhl",
+                                               "value": "s_left"
+                                       }
+                               ]
+                       },
+                       {
+                               "direct": "UR",
+                               "name": "switchtab",
+                               "mydes": {
+                                       "type": true,
+                                       "value": "Switch to right tab"
+                               },
+                               "selects": [
+                                       {
+                                               "type": "n_tab_lrhl",
+                                               "value": "s_right"
+                                       }
+                               ]
+                       },
+                       {
+                               "direct": "LU",
+                               "name": "reopen"
+                       },
+                       {
+                               "direct": "UD",
+                               "name": "reload",
+                               "mydes": {
+                                       "type": true,
+                                       "value": "Reload current tab"
+                               },
+                               "selects": [
+                                       {
+                                               "type": "n_tab",
+                                               "value": "s_current"
+                                       }
+                               ],
+                               "checks": [
+                                       {
+                                               "type": "n_reload_clear",
+                                               "value": false
+                                       }
+                               ],
+                               "type": "action"
+                       },
+                       {
+                               "direct": "UDU",
+                               "name": "reload",
+                               "mydes": {
+                                       "type": true,
+                                       "value": "Reload current tab without cache"
+                               },
+                               "selects": [
+                                       {
+                                               "type": "n_tab",
+                                               "value": "s_current"
+                                       }
+                               ],
+                               "checks": [
+                                       {
+                                               "type": "n_reload_clear",
+                                               "value": true
+                                       }
+                               ]
+                       },
+                       {
+                               "direct": "RDLU",
+                               "name": "optionspage"
+                       },
+                       {
+                               "name": "upperlevel",
+                               "direct": "ULU",
+                               "selects": [
+                                       {
+                                               "type": "n_optype",
+                                               "value": "s_current"
+                                       },
+                                       {
+                                               "type": "n_position",
+                                               "value": "s_default"
+                                       }
+                               ],
+                               "checks": [
+                                       {
+                                               "type": "n_pin",
+                                               "value": false
+                                       }
+                               ]
+                       },
+                       {
+                               "name": "decrement",
+                               "direct": "LR",
+                               "selects": [
+                                       {
+                                               "type": "n_optype",
+                                               "value": "s_current"
+                                       },
+                                       {
+                                               "type": "n_position",
+                                               "value": "s_default"
+                                       }
+                               ],
+                               "checks": [
+                                       {
+                                               "type": "n_pin",
+                                               "value": false
+                                       }
+                               ]
+                       },
+                       {
+                               "name": "increment",
+                               "direct": "RL",
+                               "selects": [
+                                       {
+                                               "type": "n_optype",
+                                               "value": "s_current"
+                                       },
+                                       {
+                                               "type": "n_position",
+                                               "value": "s_default"
+                                       }
+                               ],
+                               "checks": [
+                                       {
+                                               "type": "n_pin",
+                                               "value": false
+                                       }
+                               ]
+                       },
+                       {
+                               "name": "min",
+                               "direct": "RD",
+                               "type": "action"
+                       }
+               ]
+       },
+       "plus": {},
+       "pop": {
+               "settings": {
+                       "type": "front",
+                       "last": false
+               },
+               "actions": [
+                       {
+                               "name": "reload",
+                               "mydes": {
+                                       "type": true,
+                                       "value": "Reload current tab"
+                               },
+                               "selects": [
+                                       {
+                                               "type": "n_tab",
+                                               "value": "s_current"
+                                       }
+                               ],
+                               "checks": [
+                                       {
+                                               "type": "n_reload_clear",
+                                               "value": false
+                                       }
+                               ]
+                       },
+                       {
+                               "name": "newtab",
+                               "selects": [
+                                       {
+                                               "type": "n_optype",
+                                               "value": "n_new"
+                                       },
+                                       {
+                                               "type": "n_position",
+                                               "value": "s_default"
+                                       }
+                               ],
+                               "checks": [
+                                       {
+                                               "type": "n_pin",
+                                               "value": false
+                                       }
+                               ]
+                       }
+               ]
+       },
+       "rges": {
+               "actions": [
+                       {
+                               "name": "switchtab",
+                               "mydes": {
+                                       "type": true,
+                                       "value": "Switch to right tab"
+                               },
+                               "selects": [
+                                       {
+                                               "type": "n_tab_lrhl",
+                                               "value": "s_right"
+                                       }
+                               ]
+                       },
+                       {
+                               "name": "switchtab",
+                               "mydes": {
+                                       "type": true,
+                                       "value": "Switch to left tab"
+                               },
+                               "selects": [
+                                       {
+                                               "type": "n_tab_lrhl",
+                                               "value": "s_left"
+                                       }
+                               ]
+                       }
+               ]
+       },
+       "sdrg": {
+               "settings": {
+                       "holdkey": "ctrl",
+                       "holdimgkey": "alt",
+                       "drgbox": false,
+                       "drgtobox": true,
+                       "drgurl": true,
+                       "drgimg": true,
+                       "txt": true,
+                       "lnk": true,
+                       "img": true,
+                       "draggable": true
+               },
+               "tsdrg": [
+                       {
+                               "direct": "L",
+                               "name": "txtsearch",
+                               "mydes": {
+                                       "type": true,
+                                       "value": "Search texts in background"
+                               },
+                               "selects": [
+                                       {
+                                               "type": "n_txtengine",
+                                               "value": "0"
+                                       },
+                                       {
+                                               "type": "n_encoding",
+                                               "value": "s_uri"
+                                       },
+                                       {
+                                               "type": "n_optype",
+                                               "value": "s_back"
+                                       },
+                                       {
+                                               "type": "n_position",
+                                               "value": "s_default"
+                                       }
+                               ],
+                               "checks": [
+                                       {
+                                               "type": "n_pin",
+                                               "value": false
+                                       }
+                               ]
+                       },
+                       {
+                               "direct": "U",
+                               "name": "none"
+                       },
+                       {
+                               "direct": "R",
+                               "name": "txtsearch",
+                               "selects": [
+                                       {
+                                               "type": "n_txtengine",
+                                               "value": "0"
+                                       },
+                                       {
+                                               "type": "n_encoding",
+                                               "value": "s_uri"
+                                       },
+                                       {
+                                               "type": "n_optype",
+                                               "value": "s_new"
+                                       },
+                                       {
+                                               "type": "n_position",
+                                               "value": "s_default"
+                                       }
+                               ],
+                               "checks": [
+                                       {
+                                               "type": "n_pin",
+                                               "value": false
+                                       }
+                               ]
+                       },
+                       {
+                               "direct": "D",
+                               "name": "copytxt"
+                       },
+                       {
+                               "direct": "l",
+                               "name": "none"
+                       },
+                       {
+                               "direct": "u",
+                               "name": "none"
+                       },
+                       {
+                               "direct": "r",
+                               "name": "none"
+                       },
+                       {
+                               "direct": "d",
+                               "name": "none"
+                       }
+               ],
+               "lsdrg": [
+                       {
+                               "direct": "L",
+                               "name": "openlnk",
+                               "mydes": {
+                                       "type": true,
+                                       "value": "Open link in background"
+                               },
+                               "selects": [
+                                       {
+                                               "type": "n_optype",
+                                               "value": "s_back"
+                                       },
+                                       {
+                                               "type": "n_position",
+                                               "value": "s_default"
+                                       }
+                               ],
+                               "checks": [
+                                       {
+                                               "type": "n_pin",
+                                               "value": false
+                                       }
+                               ]
+                       },
+                       {
+                               "direct": "U",
+                               "name": "none"
+                       },
+                       {
+                               "direct": "R",
+                               "name": "openlnk",
+                               "selects": [
+                                       {
+                                               "type": "n_optype",
+                                               "value": "s_new"
+                                       },
+                                       {
+                                               "type": "n_position",
+                                               "value": "s_default"
+                                       }
+                               ],
+                               "checks": [
+                                       {
+                                               "type": "n_pin",
+                                               "value": false
+                                       }
+                               ]
+                       },
+                       {
+                               "direct": "D",
+                               "name": "none"
+                       },
+                       {
+                               "direct": "l",
+                               "name": "none"
+                       },
+                       {
+                               "direct": "u",
+                               "name": "none"
+                       },
+                       {
+                               "direct": "r",
+                               "name": "none"
+                       },
+                       {
+                               "direct": "d",
+                               "name": "none"
+                       }
+               ],
+               "isdrg": [
+                       {
+                               "direct": "L",
+                               "name": "openimg",
+                               "mydes": {
+                                       "type": true,
+                                       "value": "Open image in background"
+                               },
+                               "selects": [
+                                       {
+                                               "type": "n_optype",
+                                               "value": "s_back"
+                                       },
+                                       {
+                                               "type": "n_position",
+                                               "value": "s_default"
+                                       }
+                               ],
+                               "checks": [
+                                       {
+                                               "type": "n_pin",
+                                               "value": false
+                                       }
+                               ]
+                       },
+                       {
+                               "direct": "U",
+                               "name": "none"
+                       },
+                       {
+                               "direct": "R",
+                               "name": "openimg",
+                               "selects": [
+                                       {
+                                               "type": "n_optype",
+                                               "value": "s_new"
+                                       },
+                                       {
+                                               "type": "n_position",
+                                               "value": "s_default"
+                                       }
+                               ],
+                               "checks": [
+                                       {
+                                               "type": "n_pin",
+                                               "value": false
+                                       }
+                               ]
+                       },
+                       {
+                               "direct": "D",
+                               "name": "none"
+                       },
+                       {
+                               "direct": "l",
+                               "name": "none"
+                       },
+                       {
+                               "direct": "u",
+                               "name": "none"
+                       },
+                       {
+                               "direct": "r",
+                               "name": "none"
+                       },
+                       {
+                               "direct": "d",
+                               "name": "none"
+                       }
+               ]
+       },
+       "touch": {
+               "settings": {
+                       "txttourl": true,
+                       "lnktoimg": false
+               },
+               "ui": {
+                       "line": {
+                               "enable": false,
+                               "color": "#808080",
+                               "width": 5,
+                               "opacity": 50
+                       },
+                       "direct": {
+                               "enable": false,
+                               "color": "#8e9bd5",
+                               "width": 32,
+                               "opacity": 80,
+                               "style": "center"
+                       },
+                       "tip": {
+                               "enable": true,
+                               "color": "#ffffff",
+                               "bgcolor": "#5677fc",
+                               "width": 18,
+                               "opacity": 80,
+                               "style": "leftbottom",
+                               "withdir": false
+                       },
+                       "note": {
+                               "enable": false,
+                               "color": "#f75620",
+                               "opacity": 90,
+                               "width": 12,
+                               "style": "hover"
+                       },
+                       "allaction": {
+                               "enable": false,
+                               "color": "#ffffff",
+                               "bgcolor": "#576f71",
+                               "width": 24,
+                               "opacity": 70,
+                               "style": "ui_bottom"
+                       }
+               },
+               "actions": [
+                       {
+                               "direct": "DL",
+                               "name": "newtab",
+                               "selects": [
+                                       {
+                                               "type": "n_optype",
+                                               "value": "n_new"
+                                       },
+                                       {
+                                               "type": "n_position",
+                                               "value": "s_default"
+                                       }
+                               ],
+                               "checks": [
+                                       {
+                                               "type": "n_pin",
+                                               "value": false
+                                       }
+                               ]
+                       },
+                       {
+                               "direct": "DR",
+                               "name": "close",
+                               "mydes": {
+                                       "type": true,
+                                       "value": "Close current tab"
+                               },
+                               "selects": [
+                                       {
+                                               "type": "n_tab",
+                                               "value": "s_current"
+                                       },
+                                       {
+                                               "type": "n_close_sel",
+                                               "value": "s_default"
+                                       }
+                               ],
+                               "checks": [
+                                       {
+                                               "type": "n_close_keep",
+                                               "value": false
+                                       }
+                               ]
+                       },
+                       {
+                               "direct": "DRL",
+                               "name": "reopen"
+                       },
+                       {
+                               "direct": "DRU",
+                               "name": "appslist"
+                       },
+                       {
+                               "direct": "RDLU",
+                               "name": "optionspage"
+                       }
+               ]
+       },
+       "version": 46,
+       "wges": {
+               "actions": [
+                       {
+                               "name": "none"
+                       },
+                       {
+                               "name": "none"
+                       },
+                       {
+                               "name": "switchtab",
+                               "mydes": {
+                                       "type": true,
+                                       "value": "Switch to left tab"
+                               },
+                               "selects": [
+                                       {
+                                               "type": "n_tab_lrhl",
+                                               "value": "s_left"
+                                       }
+                               ]
+                       },
+                       {
+                               "name": "switchtab",
+                               "mydes": {
+                                       "type": true,
+                                       "value": "Switch to right tab"
+                               },
+                               "selects": [
+                                       {
+                                               "type": "n_tab_lrhl",
+                                               "value": "s_right"
+                                       }
+                               ]
+                       }
+               ]
+       }
+}
diff --git a/firefox/stylus/arstechnica.com.css b/firefox/stylus/arstechnica.com.css
new file mode 100644 (file)
index 0000000..a22fba5
--- /dev/null
@@ -0,0 +1,4 @@
+/* -*-css-*- */
+/*@ domains: arstechnica.com */
+body, .sidebar { font-family: serif !important; }
+/*@END*/
diff --git a/firefox/stylus/devblogs.microsoft.com.css b/firefox/stylus/devblogs.microsoft.com.css
new file mode 100644 (file)
index 0000000..783f97c
--- /dev/null
@@ -0,0 +1,4 @@
+/* -*-css-*- */
+/*@ domains: devblogs.microsoft.com */
+h5.entry-title a { white-space: normal; }
+/*@END*/
diff --git a/firefox/stylus/github.com.css b/firefox/stylus/github.com.css
new file mode 100644 (file)
index 0000000..86be575
--- /dev/null
@@ -0,0 +1,10 @@
+/* -*-css-*- */
+/*@ domains: github.com, github.blog */
+body, .min-width-lg, .container {
+       min-width: auto !important;
+       width: auto !important;
+}
+.markdown-body { font-family: serif !important; }
+.markdown-body h1, .markdown-body h2, .markdown-body h3, .markdown-body h4
+       { font-family: sans-serif !important; }
+/*@END*/
diff --git a/firefox/stylus/slack.com.css b/firefox/stylus/slack.com.css
new file mode 100644 (file)
index 0000000..3d0e8ec
--- /dev/null
@@ -0,0 +1,36 @@
+/* -*-css-*- */
+/*@ domains: slack.com */
+/* Fix the scroll bar; otherwise Dark Reader makes this unreadable. */
+.c-scrollbar__bar { background-color: rgba(192, 192, 192, 0.6) !important; }
+
+/* Hide the pointless search bar across the top.  (Currently doesn't work.)
+.p-top_nav { display: none; }
+.p-client--ia-top-nav {
+       grid-template-rows: 0px auto min-content;
+}
+*/
+
+/* Make the panel on the left narrower. */
+.p-workspace--iap1.p-workspace--context-pane-collapsed
+       { grid-template-columns: 180px auto; }
+.p-workspace--channel_sidebar { width: 180px !important; }
+
+/* Make all the fonts smaller. */
+body,
+.c-message_kit__message,
+.ql-container,
+.c-texty_input .ql-editor,
+.c-texty_input .ql-placeholder,
+.c-message__edited_label,
+.p-channel_sidebar--classic_nav,
+.p-ia__sidebar_header__user__name,
+.p-ia__view_header .p-classic_nav__model__title__name,
+.c-message_list__unread_divider__label,
+.p-rich_text_block 
+       { font-size: 11px !important; }
+body { font-family: sans-serif !important; }
+code, pre {
+       font-family: monospace !important;
+       font-size: 9px !important;
+}
+/*@END*/
diff --git a/firefox/stylus/slatestarcodex.com.css b/firefox/stylus/slatestarcodex.com.css
new file mode 100644 (file)
index 0000000..214e43a
--- /dev/null
@@ -0,0 +1,27 @@
+/* -*-css-*- */
+/*@ domains: slatestarcodex.com */
+html { background-image: none; }
+
+body, #pjgm-content, #pjgm-content input, #pjgm-content textarea,
+.commentlist li.comment {
+       font-family: serif;
+       font-size: 11pt;
+       line-height: 1.3;
+}
+
+blockquote {
+       font-family: inherit;
+       font-size: inherit;
+       line-height: inherit;
+}
+
+div#primary { display: none; }
+
+#pjgm-menubar { width: auto; }
+
+#pjgm-wrap {
+       margin: 0;
+       min-width: 0;
+       max-width: none;
+}
+/*@END*/
diff --git a/firefox/stylus/tvtropes.com.css b/firefox/stylus/tvtropes.com.css
new file mode 100644 (file)
index 0000000..21b26e0
--- /dev/null
@@ -0,0 +1,18 @@
+/* -*-css-*- */
+/*@ domains: tvtropes.org */
+body { font-family: serif; }
+h1, h2, h3,
+.folderlabel, .subpage-links,
+.watch-button, .action-bar, .headroom-element,
+.nav-wrapper, #main-content-sidebar
+       { font-family: sans-serif; }
+.nav__dropdown-toggle { font-weight: inherit; }
+.action-bar-right { display: none; }
+
+#main-content-sidebar { display: none; }
+#main-content #main-entry { max-width: 100% !important; }
+.tablet-on { display: block !important; }
+.tablet-on.inline { display: inline-block !important; }
+.tablet-off { display: none !important; }
+#main-header-logoButton { margin-left: 20px; }
+/*@END*/
diff --git a/firefox/stylus/www.bbc.co.uk.css b/firefox/stylus/www.bbc.co.uk.css
new file mode 100644 (file)
index 0000000..a90c1f9
--- /dev/null
@@ -0,0 +1,6 @@
+/* -*-css-*- */
+/*@ urlPrefixes: https://www.bbc.co.uk/news */
+body { font-family: serif; }
+h1, h2, .gs-c-promo-heading, [role=navigation]
+       { font-family: sans-serif; }
+/*@END*/