+### 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)
+
+all:: $(addprefix $(HOME)/, $(MISCLINKS))
+misclink-ok-p = \
+ $(call symlink-ok-p,$(HOME)/$1,$(call misclink-source,$1))
+$(addprefix $(HOME)/, $(subst %,\%,$(MISCLINKS))): $(HOME)/%: \
+ $$(if $$(call misclink-ok-p,$$*),,_force)
+ $(call v_tag,SYMLINK)mkdir -p $(dir $@) && \
+ rm -f $@.new && \
+ ln -s $(call misclink-source,$*) $@.new && \
+ mv $@.new $@
+ $(symlink-hook/$*)
+
+###--------------------------------------------------------------------------