summaryrefslogtreecommitdiffstats
path: root/hacks/config
diff options
context:
space:
mode:
authorSimon Rettberg2018-10-16 10:08:48 +0200
committerSimon Rettberg2018-10-16 10:08:48 +0200
commitd3a98cf6cbc3bd0b9efc570f58e8812c03931c18 (patch)
treecbddf8e50f35a9c6e878a5bfe3c6d625d99e12ba /hacks/config
downloadxscreensaver-d3a98cf6cbc3bd0b9efc570f58e8812c03931c18.tar.gz
xscreensaver-d3a98cf6cbc3bd0b9efc570f58e8812c03931c18.tar.xz
xscreensaver-d3a98cf6cbc3bd0b9efc570f58e8812c03931c18.zip
Original 5.40
Diffstat (limited to 'hacks/config')
-rw-r--r--hacks/config/README262
-rw-r--r--hacks/config/abstractile.xml36
-rw-r--r--hacks/config/anemone.xml61
-rw-r--r--hacks/config/anemotaxis.xml39
-rw-r--r--hacks/config/ant.xml74
-rw-r--r--hacks/config/antinspect.xml25
-rw-r--r--hacks/config/antmaze.xml23
-rw-r--r--hacks/config/antspotlight.xml25
-rw-r--r--hacks/config/apollonian.xml42
-rw-r--r--hacks/config/apple2.xml65
-rw-r--r--hacks/config/atlantis.xml50
-rw-r--r--hacks/config/attraction.xml87
-rw-r--r--hacks/config/atunnel.xml26
-rw-r--r--hacks/config/barcode.xml35
-rw-r--r--hacks/config/binaryring.xml31
-rw-r--r--hacks/config/blaster.xml63
-rw-r--r--hacks/config/blinkbox.xml35
-rw-r--r--hacks/config/blitspin.xml46
-rw-r--r--hacks/config/blocktube.xml33
-rw-r--r--hacks/config/boing.xml51
-rw-r--r--hacks/config/bouboule.xml33
-rw-r--r--hacks/config/bouncingcow.xml32
-rw-r--r--hacks/config/boxed.xml58
-rw-r--r--hacks/config/boxfit.xml65
-rw-r--r--hacks/config/braid.xml39
-rw-r--r--hacks/config/bsod.xml105
-rw-r--r--hacks/config/bubble3d.xml30
-rw-r--r--hacks/config/bubbles.xml42
-rw-r--r--hacks/config/bumps.xml36
-rw-r--r--hacks/config/cage.xml27
-rw-r--r--hacks/config/carousel.xml57
-rw-r--r--hacks/config/ccurve.xml32
-rw-r--r--hacks/config/celtic.xml32
-rw-r--r--hacks/config/circuit.xml37
-rw-r--r--hacks/config/cityflow.xml55
-rw-r--r--hacks/config/cloudlife.xml41
-rw-r--r--hacks/config/companioncube.xml56
-rw-r--r--hacks/config/compass.xml24
-rw-r--r--hacks/config/coral.xml36
-rw-r--r--hacks/config/crackberg.xml52
-rw-r--r--hacks/config/critical.xml31
-rw-r--r--hacks/config/crumbler.xml49
-rw-r--r--hacks/config/crystal.xml48
-rw-r--r--hacks/config/cube21.xml77
-rw-r--r--hacks/config/cubenetic.xml67
-rw-r--r--hacks/config/cubestack.xml44
-rw-r--r--hacks/config/cubestorm.xml53
-rw-r--r--hacks/config/cubetwist.xml46
-rw-r--r--hacks/config/cubicgrid.xml31
-rw-r--r--hacks/config/cwaves.xml31
-rw-r--r--hacks/config/cynosure.xml32
-rw-r--r--hacks/config/dangerball.xml37
-rw-r--r--hacks/config/decayscreen.xml48
-rw-r--r--hacks/config/deco.xml45
-rw-r--r--hacks/config/deluxe.xml39
-rw-r--r--hacks/config/demon.xml41
-rw-r--r--hacks/config/discoball.xml37
-rw-r--r--hacks/config/discrete.xml32
-rw-r--r--hacks/config/distort.xml53
-rw-r--r--hacks/config/dnalogo.xml50
-rw-r--r--hacks/config/drift.xml31
-rw-r--r--hacks/config/dymaxionmap.xml79
-rw-r--r--hacks/config/endgame.xml29
-rw-r--r--hacks/config/energystream.xml26
-rw-r--r--hacks/config/engine.xml44
-rw-r--r--hacks/config/epicycle.xml57
-rw-r--r--hacks/config/eruption.xml53
-rw-r--r--hacks/config/esper.xml46
-rw-r--r--hacks/config/euler2d.xml53
-rw-r--r--hacks/config/extrusion.xml44
-rw-r--r--hacks/config/fadeplot.xml35
-rw-r--r--hacks/config/fiberlamp.xml31
-rw-r--r--hacks/config/filmleader.xml42
-rw-r--r--hacks/config/fireworkx.xml30
-rw-r--r--hacks/config/flag.xml41
-rw-r--r--hacks/config/flame.xml39
-rw-r--r--hacks/config/flipflop.xml52
-rw-r--r--hacks/config/flipscreen3d.xml27
-rw-r--r--hacks/config/fliptext.xml55
-rw-r--r--hacks/config/flow.xml60
-rw-r--r--hacks/config/fluidballs.xml55
-rw-r--r--hacks/config/flurry.xml29
-rw-r--r--hacks/config/flyingtoasters.xml42
-rw-r--r--hacks/config/fontglide.xml54
-rw-r--r--hacks/config/forest.xml30
-rw-r--r--hacks/config/fuzzyflakes.xml66
-rw-r--r--hacks/config/galaxy.xml36
-rw-r--r--hacks/config/gears.xml39
-rw-r--r--hacks/config/geodesic.xml61
-rw-r--r--hacks/config/geodesicgears.xml41
-rw-r--r--hacks/config/gflux.xml61
-rw-r--r--hacks/config/glblur.xml46
-rw-r--r--hacks/config/glcells.xml64
-rw-r--r--hacks/config/gleidescope.xml41
-rw-r--r--hacks/config/glforestfire.xml46
-rw-r--r--hacks/config/glhanoi.xml54
-rw-r--r--hacks/config/glitchpeg.xml38
-rw-r--r--hacks/config/glknots.xml63
-rw-r--r--hacks/config/glmatrix.xml53
-rw-r--r--hacks/config/glplanet.xml43
-rw-r--r--hacks/config/glschool.xml45
-rw-r--r--hacks/config/glslideshow.xml55
-rw-r--r--hacks/config/glsnake.xml56
-rw-r--r--hacks/config/gltext.xml51
-rw-r--r--hacks/config/goop.xml65
-rw-r--r--hacks/config/grav.xml36
-rw-r--r--hacks/config/greynetic.xml25
-rw-r--r--hacks/config/halftone.xml61
-rw-r--r--hacks/config/halo.xml42
-rw-r--r--hacks/config/helix.xml27
-rw-r--r--hacks/config/hexadrop.xml60
-rw-r--r--hacks/config/hexstrut.xml48
-rw-r--r--hacks/config/hilbert.xml77
-rw-r--r--hacks/config/hopalong.xml64
-rw-r--r--hacks/config/hydrostat.xml76
-rw-r--r--hacks/config/hyperball.xml66
-rw-r--r--hacks/config/hypercube.xml77
-rw-r--r--hacks/config/hypertorus.xml116
-rw-r--r--hacks/config/hypnowheel.xml54
-rw-r--r--hacks/config/ifs.xml65
-rw-r--r--hacks/config/imsmap.xml46
-rw-r--r--hacks/config/interaggregate.xml33
-rw-r--r--hacks/config/interference.xml57
-rw-r--r--hacks/config/intermomentary.xml37
-rw-r--r--hacks/config/jigglypuff.xml95
-rw-r--r--hacks/config/jigsaw.xml51
-rw-r--r--hacks/config/juggle.xml60
-rw-r--r--hacks/config/juggler3d.xml55
-rw-r--r--hacks/config/julia.xml39
-rw-r--r--hacks/config/kaleidescope.xml42
-rw-r--r--hacks/config/kaleidocycle.xml57
-rw-r--r--hacks/config/klein.xml131
-rw-r--r--hacks/config/kumppa.xml32
-rw-r--r--hacks/config/lament.xml29
-rw-r--r--hacks/config/laser.xml38
-rw-r--r--hacks/config/lavalite.xml90
-rw-r--r--hacks/config/lcdscrub.xml58
-rw-r--r--hacks/config/lightning.xml30
-rw-r--r--hacks/config/lisa.xml50
-rw-r--r--hacks/config/lissie.xml52
-rw-r--r--hacks/config/lmorph.xml51
-rw-r--r--hacks/config/lockward.xml67
-rw-r--r--hacks/config/loop.xml37
-rw-r--r--hacks/config/m6502.xml55
-rw-r--r--hacks/config/maze.xml71
-rwxr-xr-xhacks/config/maze3d.xml122
-rw-r--r--hacks/config/memscroller.xml35
-rw-r--r--hacks/config/menger.xml51
-rw-r--r--hacks/config/metaballs.xml53
-rw-r--r--hacks/config/mirrorblob.xml75
-rw-r--r--hacks/config/mismunch.xml44
-rw-r--r--hacks/config/moebius.xml29
-rw-r--r--hacks/config/moebiusgears.xml47
-rw-r--r--hacks/config/moire.xml38
-rw-r--r--hacks/config/moire2.xml34
-rw-r--r--hacks/config/molecule.xml60
-rw-r--r--hacks/config/morph3d.xml34
-rw-r--r--hacks/config/mountain.xml31
-rw-r--r--hacks/config/munch.xml63
-rw-r--r--hacks/config/nerverot.xml62
-rw-r--r--hacks/config/noof.xml23
-rw-r--r--hacks/config/noseguy.xml19
-rw-r--r--hacks/config/pacman.xml28
-rw-r--r--hacks/config/pedal.xml33
-rw-r--r--hacks/config/peepers.xml47
-rw-r--r--hacks/config/penetrate.xml34
-rw-r--r--hacks/config/penrose.xml55
-rw-r--r--hacks/config/petri.xml83
-rw-r--r--hacks/config/phosphor.xml49
-rw-r--r--hacks/config/photopile.xml65
-rw-r--r--hacks/config/piecewise.xml45
-rw-r--r--hacks/config/pinion.xml49
-rw-r--r--hacks/config/pipes.xml49
-rw-r--r--hacks/config/polyhedra.xml201
-rw-r--r--hacks/config/polyominoes.xml36
-rw-r--r--hacks/config/polytopes.xml112
-rw-r--r--hacks/config/pong.xml46
-rw-r--r--hacks/config/popsquares.xml56
-rw-r--r--hacks/config/projectiveplane.xml153
-rw-r--r--hacks/config/providence.xml29
-rw-r--r--hacks/config/pulsar.xml42
-rw-r--r--hacks/config/pyro.xml37
-rw-r--r--hacks/config/qix.xml74
-rw-r--r--hacks/config/quasicrystal.xml56
-rw-r--r--hacks/config/queens.xml31
-rw-r--r--hacks/config/raverhoop.xml54
-rw-r--r--hacks/config/razzledazzle.xml66
-rw-r--r--hacks/config/rd-bomb.xml67
l---------hacks/config/rdbomb.xml1
-rw-r--r--hacks/config/ripples.xml55
-rw-r--r--hacks/config/rocks.xml45
-rw-r--r--hacks/config/romanboy.xml128
-rw-r--r--hacks/config/rorschach.xml36
-rw-r--r--hacks/config/rotor.xml40
-rw-r--r--hacks/config/rotzoomer.xml43
-rw-r--r--hacks/config/rubik.xml39
-rw-r--r--hacks/config/rubikblocks.xml67
-rw-r--r--hacks/config/sballs.xml37
-rw-r--r--hacks/config/shadebobs.xml38
-rw-r--r--hacks/config/sierpinski.xml37
-rw-r--r--hacks/config/sierpinski3d.xml34
-rw-r--r--hacks/config/skytentacles.xml71
-rw-r--r--hacks/config/slidescreen.xml54
-rw-r--r--hacks/config/slip.xml43
-rw-r--r--hacks/config/sonar.xml85
-rw-r--r--hacks/config/speedmine.xml62
-rw-r--r--hacks/config/sphere.xml30
-rw-r--r--hacks/config/spheremonics.xml60
-rw-r--r--hacks/config/spiral.xml38
-rw-r--r--hacks/config/splitflap.xml72
-rw-r--r--hacks/config/splodesic.xml32
-rw-r--r--hacks/config/spotlight.xml34
-rw-r--r--hacks/config/sproingies.xml36
-rw-r--r--hacks/config/squiral.xml51
-rw-r--r--hacks/config/stairs.xml25
-rw-r--r--hacks/config/starfish.xml43
-rw-r--r--hacks/config/starwars.xml63
-rw-r--r--hacks/config/stonerview.xml27
-rw-r--r--hacks/config/strange.xml58
-rw-r--r--hacks/config/substrate.xml47
-rw-r--r--hacks/config/superquadrics.xml36
-rw-r--r--hacks/config/surfaces.xml75
-rw-r--r--hacks/config/swirl.xml33
-rw-r--r--hacks/config/t3d.xml60
-rw-r--r--hacks/config/tangram.xml45
-rw-r--r--hacks/config/tessellimage.xml66
-rw-r--r--hacks/config/testx11.xml17
-rw-r--r--hacks/config/thornbird.xml37
-rw-r--r--hacks/config/timetunnel.xml42
-rw-r--r--hacks/config/topblock.xml64
-rw-r--r--hacks/config/triangle.xml28
-rw-r--r--hacks/config/tronbit.xml41
-rw-r--r--hacks/config/truchet.xml41
-rw-r--r--hacks/config/twang.xml61
-rw-r--r--hacks/config/unicrud.xml44
-rw-r--r--hacks/config/unknownpleasures.xml57
-rw-r--r--hacks/config/vermiculate.xml22
-rw-r--r--hacks/config/vfeedback.xml39
-rw-r--r--hacks/config/vidwhacker.xml32
-rw-r--r--hacks/config/vigilance.xml30
-rw-r--r--hacks/config/vines.xml30
-rw-r--r--hacks/config/voronoi.xml63
-rw-r--r--hacks/config/wander.xml55
-rw-r--r--hacks/config/webcollage.xml56
-rw-r--r--hacks/config/whirlwindwarp.xml28
-rw-r--r--hacks/config/whirlygig.xml90
-rw-r--r--hacks/config/winduprobot.xml62
-rw-r--r--hacks/config/worm.xml39
-rw-r--r--hacks/config/wormhole.xml31
-rw-r--r--hacks/config/xanalogtv.xml48
-rw-r--r--hacks/config/xflame.xml34
-rw-r--r--hacks/config/xjack.xml25
-rw-r--r--hacks/config/xlyap.xml52
-rw-r--r--hacks/config/xmatrix.xml68
-rw-r--r--hacks/config/xrayswarm.xml23
-rw-r--r--hacks/config/xspirograph.xml32
-rw-r--r--hacks/config/xss.dtd109
-rw-r--r--hacks/config/xss.xsd375
-rw-r--r--hacks/config/zoom.xml54
259 files changed, 13346 insertions, 0 deletions
diff --git a/hacks/config/README b/hacks/config/README
new file mode 100644
index 0000000..9771a89
--- /dev/null
+++ b/hacks/config/README
@@ -0,0 +1,262 @@
+
+ XScreenSaver
+
+ a screen saver and locker for the X window system
+ by Jamie Zawinski
+
+ version 5.40
+ 12-Aug-2018
+
+ https://www.jwz.org/xscreensaver/
+
+-----------------------------------------------------------------------
+
+This directory contains XML files that describe each of the screenhacks;
+the per-hack user interface is constructed based on the things in these
+files. The files are loaded at run-time by xscreensaver-demo (also
+known as "the Control Center screensaver properties capplet".)
+
+The tags and parameters used here are:
+
+-----------------------------------------------------------------------
+
+ <screensaver name="PROGRAM-NAME" _label="PRETTY NAME">
+ ...
+ </screensaver>
+
+ This encloses the whole file: all of the tags described below
+ are inside this one.
+
+-----------------------------------------------------------------------
+
+ <command arg="-SWITCH"/>
+
+ specifies that "-SWITCH" always appears on the command line.
+ You'll most often see this with "-root".
+
+-----------------------------------------------------------------------
+
+ <boolean id="SYMBOLIC NAME"
+ _label="USER VISIBLE STRING"
+ arg-set="-SWITCH-A"
+ arg-unset="-SWITCH-B"
+ />
+
+ This creates a checkbox.
+
+ "id" is currently unused, but may eventually be used for
+ letting other widgets refer to this one.
+
+ "_label" is the string printed next to the checkbox.
+
+ "arg-set" is what to insert into the command line if the
+ box is checked.
+
+ "arg-unset" is what to insert into the command line if the
+ box is unchecked.
+
+ You will probably never specify both "arg-set" and "arg-unset",
+ because the setting that is the default should insert nothing
+ into the command line (that's what makes it the default.)
+ For example:
+
+ <boolean _label="foo" arg-set="-foo" />
+
+ or if "foo" is the default, and must be explicity turned off,
+
+ <boolean _label="foo" arg-unset="-no-foo" />
+
+-----------------------------------------------------------------------
+
+ <number id="SYMBOLIC NAME"
+ type="slider"
+ arg="-SWITCH %"
+ _label="HEADING LABEL"
+ _low-label="LEFT LABEL"
+ _high-label="RIGHT LABEL"
+ low="MIN VALUE"
+ high="MAX VALUE"
+ default="DEFAULT VALUE"
+ [ convert="invert" ]
+ />
+
+ This creates a slider.
+
+ The _label is printed above the slider. The _low-label and
+ _high-label are printed to the left and right, respectively.
+
+ If any of the numbers you type has a decimal point, then
+ the range is assumed to be a floating-point value; otherwise,
+ only integral values will be used. So be careful about "1"
+ versus "1.0".
+
+ If convert="invert" is specified, then the value that the
+ user tweaks goes the other way from the value the command
+ line expects: e.g., if the slider goes from 10-20 and the
+ user picks 13, the converted value goes from 20-10 (and
+ would be 17.) This is useful for converting between the
+ concepts of "delay" and "speed".
+
+ In the "arg" string, the first occurence of "%" is replaced
+ with the numeric value, when creating the command line.
+
+-----------------------------------------------------------------------
+
+ <number id="SYMBOLIC NAME"
+ type="spinbutton"
+ arg="-SWITCH %"
+ _label="HEADING LABEL"
+ low="MIN VALUE"
+ high="MAX VALUE"
+ default="DEFAULT VALUE"
+ [ convert="invert" ]
+ />
+
+ This creates a spinbox (a text field with a number in it,
+ and up/down arrows next to it.)
+
+ Arguments are exactly like type="slider", except that
+ _low-label and _high-label are not used. Also, _label
+ appears to the left of the box, instead of above it.
+
+-----------------------------------------------------------------------
+
+ <select id="SYMBOLIC NAME">
+ <option id="SYMBOLIC NAME"
+ _label="USER VISIBLE STRING"
+ arg-set="-SWITCH"
+ />
+ [ ... more <options> ... ]
+ </select>
+
+ This creates a selection popup menu.
+
+ Options should have arg-set (arg-unset is not used here.)
+
+ One of the menu items (the default) should have no arg-set.
+
+ Each arg-set should begin with the same switch: that is,
+ all the args in a given menu should look like:
+
+ -mode one
+ -mode two
+ -mode three
+
+ and not
+
+ -this
+ -that
+ -the other
+
+-----------------------------------------------------------------------
+
+ <string id="SYMBOLIC NAME"
+ _label="USER VISIBLE STRING"
+ arg="-SWITCH %"
+ />
+
+ This creates a text entry field.
+
+-----------------------------------------------------------------------
+
+ <file id="SYMBOLIC NAME"
+ _label="USER VISIBLE STRING"
+ arg="-SWITCH %"
+ />
+
+ This creates a file entry field (a text field with a "Browse"
+ button next to it.)
+
+-----------------------------------------------------------------------
+
+ <xscreensaver-text />
+
+ This indicates that this screen saver displays text via the
+ "xscreensaver-text" program.
+
+ In the X11 version, this tag does nothing: the text-related
+ preferences are in the main Screen Saver Preferences window,
+ not in the per-display-mode preferences.
+
+ In the MacOS version, the text-related preferences appear
+ in this pane, and this tag emits those several controls.
+
+-----------------------------------------------------------------------
+
+ <xscreensaver-image />
+
+ This indicates that this screen saver displays images via the
+ "xscreensaver-getimage" program.
+
+ In the X11 version, this tag does nothing: the image-loading
+ and screen-grabbing-related preferences are in the main
+ Screen Saver Preferences window, not in the per-display-mode
+ preferences.
+
+ In the MacOS version, the image-related preferences appear
+ in this pane, and this tag emits those several controls.
+
+-----------------------------------------------------------------------
+
+ <xscreensaver-updater />
+
+ Where to position the "Check for Updates" options.
+ This is used on MacOS and ignored on X11.
+
+-----------------------------------------------------------------------
+
+ <video href="URL" />
+
+ A link to a Youtube preview of this screen saver.
+
+-----------------------------------------------------------------------
+
+ <hgroup>
+ [ ... <boolean>s ... ]
+ [ ... <number>s ... ]
+ [ ... <select>s ... ]
+ [ ... <string>s ... ]
+ [ ... <file>s ... ]
+ [ ... <vgroup>s ... ]
+ </hgroup>
+
+ A horizontal group of widgets/groups. No more than 4 widgets
+ or groups should be used in a row.
+
+-----------------------------------------------------------------------
+
+ <vgroup>
+ [ ... <boolean>s ... ]
+ [ ... <number>s ... ]
+ [ ... <select>s ... ]
+ [ ... <string>s ... ]
+ [ ... <file>s ... ]
+ [ ... <hgroup>s ... ]
+ </vgroup>
+
+ A vertical group of widgets/groups. No more than 10 widgets
+ or groups should be used in a column.
+
+ Since the default alignment of widgets is a column, the
+ <vgroup> element is only of use inside an <hgroup> element.
+
+-----------------------------------------------------------------------
+
+ <_description>
+ FREE TEXT
+ </_description>
+
+ This is the description of the hack that appears in the right
+ part of the window. Lines are wrapped; paragraphs are separated
+ by blank lines. Lines that begin with whitespace will not be
+ wrapped (see "munch.xml" for an example of why.)
+
+ Make sure you use "&lt;" instead of "<", etc. Character
+ entities are allowed; HTML (and other markup) is not.
+
+-----------------------------------------------------------------------
+
+If you are DTD-minded, you may also find the included files "xss.dtd"
+and "xss.xsd" useful.
+
+-----------------------------------------------------------------------
diff --git a/hacks/config/abstractile.xml b/hacks/config/abstractile.xml
new file mode 100644
index 0000000..c706330
--- /dev/null
+++ b/hacks/config/abstractile.xml
@@ -0,0 +1,36 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="abstractile" _label="Abstractile">
+
+ <command arg="-root"/>
+
+ <video href="https://www.youtube.com/watch?v=NgSetBY6VP4"/>
+
+ <number id="speed" type="slider" arg="-speed %"
+ _label="Speed" _low-label="Slow" _high-label="Fast"
+ low="0" high="5" default="3"/>
+
+ <number id="sleep" type="slider" arg="-sleep %"
+ _label="Linger" _low-label="0 seconds" _high-label="60 seconds"
+ low="0" high="60" default="3"/>
+
+ <select id="tile">
+ <option id="random" _label="Random tile layout"/>
+ <option id="random" _label="Flat tiles" arg-set="-tile flat"/>
+ <option id="random" _label="Thin tiles" arg-set="-tile thin"/>
+ <option id="random" _label="Outline tiles" arg-set="-tile outline"/>
+ <option id="random" _label="Block tiles" arg-set="-tile block"/>
+ <option id="random" _label="Neon tiles" arg-set="-tile neon"/>
+ <option id="random" _label="Tiled tiles" arg-set="-tile tiled"/>
+ </select>
+
+ <boolean id="showfps" _label="Show frame rate" arg-set="-fps"/>
+
+ <xscreensaver-updater />
+
+ <_description>
+Mosaic patterns of interlocking tiles.
+
+Written by Steve Sundstrom; 2004.
+ </_description>
+</screensaver>
diff --git a/hacks/config/anemone.xml b/hacks/config/anemone.xml
new file mode 100644
index 0000000..90dff7a
--- /dev/null
+++ b/hacks/config/anemone.xml
@@ -0,0 +1,61 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="anemone" _label="Anemone">
+
+ <command arg="-root"/>
+
+ <video href="https://www.youtube.com/watch?v=usITxM2YJZs"/>
+
+<!--
+ -withdraw 1200
+ -turnspeed 50
+-->
+
+ <hgroup>
+ <vgroup>
+ <number id="delay" type="slider" arg="-delay %"
+ _label="Speed" _low-label="Slow" _high-label="Fast"
+ low="0" high="80000" default="40000"
+ convert="invert"/>
+
+ <number id="arms" type="slider" arg="-arms %"
+ _label="Arms" _low-label="Few" _high-label="Many"
+ low="2" high="500" default="128"/>
+
+ <number id="finpoints" type="slider" arg="-finpoints %"
+ _label="Tentacles" _low-label="Few" _high-label="Many"
+ low="3" high="200" default="64"/>
+ </vgroup>
+
+ <vgroup>
+ <number id="width" type="slider" arg="-width %"
+ _label="Thickness" _low-label="Thin" _high-label="Thick"
+ low="1" high="10" default="2"/>
+
+ <number id="withdraw" type="slider" arg="-withdraw %"
+ _label="Withdraw freqency" _low-label="Often" _high-label="Rarely"
+ low="12" high="10000" default="1200"/>
+
+ <number id="turnspeed" type="slider" arg="-turnspeed %"
+ _label="Turn speed" _low-label="Slow" _high-label="Fast"
+ low="0" high="1000" default="50"/>
+
+ <!--
+ <number id="ncolors" type="slider" arg="-ncolors %"
+ _label="Number of colors" _low-label="Two" _high-label="Many"
+ low="2" high="255" default="64"/>
+ -->
+
+ </vgroup>
+ </hgroup>
+
+ <boolean id="showfps" _label="Show frame rate" arg-set="-fps"/>
+
+ <xscreensaver-updater />
+
+ <_description>
+Wiggling tentacles.
+
+Written by Gabriel Finch; 2002.
+ </_description>
+</screensaver>
diff --git a/hacks/config/anemotaxis.xml b/hacks/config/anemotaxis.xml
new file mode 100644
index 0000000..6c3785f
--- /dev/null
+++ b/hacks/config/anemotaxis.xml
@@ -0,0 +1,39 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="anemotaxis" _label="Anemotaxis">
+
+ <command arg="-root"/>
+
+ <video href="https://www.youtube.com/watch?v=hIqmIQbQkW8"/>
+
+ <number id="delay" type="slider" arg="-delay %"
+ _label="Frame rate" _low-label="Low" _high-label="High"
+ low="0" high="100000" default="20000"
+ convert="invert"/>
+
+ <number id="distance" type="slider" arg="-distance %"
+ _label="Distance" _low-label="Near" _high-label="Far"
+ low="10" high="250" default="40"/>
+
+ <number id="sources" type="slider" arg="-sources %"
+ _label="Sources" _low-label="Few" _high-label="Many"
+ low="1" high="100" default="25"/>
+
+ <number id="searchers" type="slider" arg="-searchers %"
+ _label="Searchers" _low-label="Few" _high-label="Many"
+ low="1" high="100" default="25"/>
+
+ <boolean id="showfps" _label="Show frame rate" arg-set="-fps"/>
+
+ <xscreensaver-updater />
+
+ <_description>
+Searches for a source of odor in a turbulent atmosphere. The searcher
+is able to sense the odor and determine local instantaneous wind
+direction. The goal is to find the source in the shortest mean time.
+
+https://en.wikipedia.org/wiki/Anemotaxis
+
+Written by Eugene Balkovsky; 2004.
+ </_description>
+</screensaver>
diff --git a/hacks/config/ant.xml b/hacks/config/ant.xml
new file mode 100644
index 0000000..8bb7423
--- /dev/null
+++ b/hacks/config/ant.xml
@@ -0,0 +1,74 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="ant" _label="Ant">
+
+ <command arg="-root"/>
+
+ <video href="https://www.youtube.com/watch?v=PaG7RCO4ezs"/>
+
+ <hgroup>
+ <vgroup>
+ <number id="delay" type="slider" arg="-delay %"
+ _label="Frame rate" _low-label="Low" _high-label="High"
+ low="0" high="100000" default="20000"
+ convert="invert"/>
+
+ <number id="cycles" type="slider" arg="-cycles %"
+ _label="Timeout" _low-label="Small" _high-label="Large"
+ low="0" high="800000" default="40000"/>
+
+ <hgroup>
+ <boolean id="sharpturn" _label="Sharp turns" arg-set="-sharpturn"/>
+ <boolean id="truchet" _label="Truchet lines" arg-set="-truchet"/>
+ <boolean id="eyes" _label="Draw eyes" arg-set="-eyes"/>
+ </hgroup>
+ </vgroup>
+
+ <vgroup>
+ <number id="ncolors" type="slider" arg="-ncolors %"
+ _label="Number of colors" _low-label="Three" _high-label="Many"
+ low="3" high="255" default="64"/>
+
+
+ <hgroup>
+ <number id="count" type="spinbutton" arg="-count %"
+ _label="Ants count" low="-20" high="20" default="-3"/>
+ <number id="size" type="spinbutton" arg="-size %"
+ _label="Ant size" low="-18" high="18" default="-12"/>
+ </hgroup>
+
+ <select id="neighbors">
+ <option id="rand" _label="Random cell shape"/>
+ <option id="three" _label="Three sided cells"
+ arg-set="-neighbors 3"/>
+ <option id="four" _label="Four sided cells"
+ arg-set="-neighbors 4"/>
+ <option id="six" _label="Six sided cells"
+ arg-set="-neighbors 6"/>
+ <option id="nine" _label="Nine sided cells"
+ arg-set="-neighbors 9"/>
+ <option id="twelve" _label="Twelve sided cells"
+ arg-set="-neighbors 12"/>
+ </select>
+
+ <boolean id="showfps" _label="Show frame rate" arg-set="-fps"/>
+ </vgroup>
+ </hgroup>
+
+ <xscreensaver-updater />
+
+ <_description>
+This screen saver was removed from the XScreenSaver distribution as of
+version 4.22.
+
+A cellular automaton that is really a two-dimensional Turing machine:
+as the heads ("ants") walk along the screen, they change pixel
+values in their path. Then, as they pass over changed pixels, their
+behavior is influenced.
+
+https://en.wikipedia.org/wiki/Langton%27s_ant
+https://en.wikipedia.org/wiki/Turing_machine
+
+Written by David Bagley; 1997.
+ </_description>
+</screensaver>
diff --git a/hacks/config/antinspect.xml b/hacks/config/antinspect.xml
new file mode 100644
index 0000000..ee4ce7b
--- /dev/null
+++ b/hacks/config/antinspect.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="antinspect" _label="AntInspect" gl="yes">
+
+ <command arg="-root"/>
+
+ <video href="https://www.youtube.com/watch?v=Ecw9dDc0db0"/>
+
+ <number id="speed" type="slider" arg="-delay %"
+ _label="Frame rate" _low-label="Low" _high-label="High"
+ low="0" high="100000" default="20000"
+ convert="invert"/>
+
+ <boolean id="showfps" _label="Show frame rate" arg-set="-fps"/>
+
+ <boolean id="shadows" _label="Draw shadows" arg-set="-shadows"/>
+
+ <xscreensaver-updater />
+
+ <_description>
+Ants move spheres around a circle.
+
+Written by Blair Tennessy; 2004.
+ </_description>
+</screensaver>
diff --git a/hacks/config/antmaze.xml b/hacks/config/antmaze.xml
new file mode 100644
index 0000000..1580205
--- /dev/null
+++ b/hacks/config/antmaze.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="antmaze" _label="AntMaze" gl="yes">
+
+ <command arg="-root"/>
+
+ <video href="https://www.youtube.com/watch?v=Bwa5-n6UUj8"/>
+
+ <number id="delay" type="slider" arg="-delay %"
+ _label="Frame rate" _low-label="Low" _high-label="High"
+ low="0" high="100000" default="20000"
+ convert="invert"/>
+
+ <boolean id="showfps" _label="Show frame rate" arg-set="-fps"/>
+
+ <xscreensaver-updater />
+
+ <_description>
+Ants walk around a simple maze.
+
+Written by Blair Tennessy; 2005.
+ </_description>
+</screensaver>
diff --git a/hacks/config/antspotlight.xml b/hacks/config/antspotlight.xml
new file mode 100644
index 0000000..fe78174
--- /dev/null
+++ b/hacks/config/antspotlight.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="antspotlight" _label="AntSpotlight" gl="yes">
+
+ <command arg="-root"/>
+
+ <video href="https://www.youtube.com/watch?v=NYisFYtODTA"/>
+
+ <number id="delay" type="slider" arg="-delay %"
+ _label="Frame rate" _low-label="Low" _high-label="High"
+ low="0" high="100000" default="20000"
+ convert="invert"/>
+
+ <xscreensaver-image />
+
+ <boolean id="showfps" _label="Show frame rate" arg-set="-fps"/>
+
+ <xscreensaver-updater />
+
+ <_description>
+An ant walks over an image.
+
+Written by Blair Tennessy; 2003.
+ </_description>
+</screensaver>
diff --git a/hacks/config/apollonian.xml b/hacks/config/apollonian.xml
new file mode 100644
index 0000000..72d0e41
--- /dev/null
+++ b/hacks/config/apollonian.xml
@@ -0,0 +1,42 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="apollonian" _label="Apollonian">
+
+ <command arg="-root"/>
+
+ <video href="https://www.youtube.com/watch?v=aeWnjSROR8U"/>
+
+ <boolean id="label" _label="Draw labels" arg-unset="-no-label"/>
+
+ <boolean id="altgeom" _label="Include alternate geometries"
+ arg-unset="-no-altgeom"/>
+
+<!-- don't know what -count does -->
+
+ <number id="cycles" type="slider" arg="-cycles %"
+ _label="Depth" _low-label="Shallow" _high-label="Deep"
+ low="1" high="20" default="20"/>
+
+ <number id="ncolors" type="slider" arg="-ncolors %"
+ _label="Number of colors" _low-label="Two" _high-label="Many"
+ low="2" high="255" default="64"/>
+
+ <number id="delay" type="slider" arg="-delay %"
+ _label="Speed" _low-label="Slow" _high-label="Fast"
+ low="0" high="1000000" default="1000000"
+ convert="invert"/>
+
+ <boolean id="showfps" _label="Show frame rate" arg-set="-fps"/>
+
+ <xscreensaver-updater />
+
+ <_description>
+A fractal packing of circles with smaller circles, demonstrating
+Descartes's theorem.
+
+https://en.wikipedia.org/wiki/Apollonian_gasket
+https://en.wikipedia.org/wiki/Descartes%27_theorem
+
+Written by Allan R. Wilks and David Bagley; 2002.
+ </_description>
+</screensaver>
diff --git a/hacks/config/apple2.xml b/hacks/config/apple2.xml
new file mode 100644
index 0000000..4084bc9
--- /dev/null
+++ b/hacks/config/apple2.xml
@@ -0,0 +1,65 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="apple2" _label="Apple2">
+
+ <command arg="-root"/>
+
+ <video href="https://www.youtube.com/watch?v=p3QZqhp67l8"/>
+
+ <hgroup>
+ <vgroup>
+ <select id="mode">
+ <option id="random" _label="Choose display mode randomly"/>
+ <option id="text" _label="Display scrolling text" arg-set="-mode text"/>
+ <option id="slideshow" _label="Display images" arg-set="-mode slideshow"/>
+ <option id="basic" _label="Run basic programs" arg-set="-mode basic"/>
+ </select>
+
+ <xscreensaver-text />
+ </vgroup>
+ <vgroup>
+ <number id="duration" type="slider" arg="-duration %"
+ _label="Duration" _low-label="10 seconds" _high-label="10 minutes"
+ low="10" high="600" default="60"/>
+
+ <xscreensaver-image />
+ <boolean id="showfps" _label="Show frame rate" arg-set="-fps"/>
+ <xscreensaver-updater />
+ </vgroup>
+
+ <vgroup>
+ <number id="tvcolor" type="slider" arg="-tv-color %"
+ _label="Color Knob" _low-label="Low" _high-label="High"
+ low="0" high="400" default="70"/>
+ <number id="tvtint" type="slider" arg="-tv-tint %"
+ _label="Tint Knob" _low-label="Low" _high-label="High"
+ low="0" high="360" default="5"/>
+ <number id="tvbrightness" type="slider" arg="-tv-brightness %"
+ _label="Brightness Knob" _low-label="Low" _high-label="High"
+ low="-75.0" high="100.0" default="3.0"/>
+ <number id="tvcontrast" type="slider" arg="-tv-contrast %"
+ _label="Contrast Knob" _low-label="Low" _high-label="High"
+ low="0" high="500" default="150"/>
+ </vgroup>
+ </hgroup>
+
+ <_description>
+An Apple ][+ computer simulation, in all its 1979 glory. It also
+reproduces the appearance of display on a color television set of the
+period.
+
+In "Basic Programming Mode", a simulated user types in a BASIC program
+and runs it. In "Text Mode", it displays the output of a program, or
+the contents of a file or URL. In "Slideshow Mode", it chooses random
+images and displays them within the limitations of the Apple ][
+display hardware. (Six available colors in hi-res mode!)
+
+On MacOS and Linux, this program is also a fully-functional VT100
+emulator! Run it as an application instead of as a screen saver and
+you can use it as a terminal.
+
+https://en.wikipedia.org/wiki/Apple_II_series
+
+Written by Trevor Blackwell and Jamie Zawinski; 2003.
+ </_description>
+</screensaver>
diff --git a/hacks/config/atlantis.xml b/hacks/config/atlantis.xml
new file mode 100644
index 0000000..2e06b85
--- /dev/null
+++ b/hacks/config/atlantis.xml
@@ -0,0 +1,50 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="atlantis" _label="Atlantis" gl="yes">
+
+ <command arg="-root"/>
+
+ <video href="https://www.youtube.com/watch?v=U78xPez5UGg"/>
+
+ <number id="sharkspeed" type="slider" arg="-delay %"
+ _label="Frame rate" _low-label="Low" _high-label="High"
+ low="0" high="100000" default="25000"
+ convert="invert"/>
+
+ <number id="whalespeed" type="slider" arg="-whalespeed %"
+ _label="Whale speed" _low-label="Slow" _high-label="Fast"
+ low="0" high="1000" default="250"/>
+
+ <number id="sharkproximity" type="slider" arg="-size %"
+ _label="Shark proximity" _low-label="Shy" _high-label="Agressive"
+ low="100" high="10000" default="6000"/>
+
+ <number id="sharkcount" type="slider" arg="-count %"
+ _label="Number of sharks" _low-label="None" _high-label="20"
+ low="0" high="20" default="4"/>
+
+ <hgroup>
+ <select id="water">
+ <option id="shimmer" _label="Shimmering water"/>
+ <option id="clear" _label="Clear water" arg-set="-no-texture"/>
+ </select>
+
+ <select id="bg">
+ <option id="flat" _label="Flat background" arg-set="-no-gradient"/>
+ <option id="gradient" _label="Gradient background"/>
+ </select>
+ </hgroup>
+
+ <hgroup>
+ <boolean id="wire" _label="Wireframe" arg-set="-wireframe"/>
+ <boolean id="showfps" _label="Show frame rate" arg-set="-fps"/>
+ </hgroup>
+
+ <xscreensaver-updater />
+
+ <_description>
+Sharks, dolphins and whales.
+
+Written by Mark Kilgard; 1998.
+ </_description>
+</screensaver>
diff --git a/hacks/config/attraction.xml b/hacks/config/attraction.xml
new file mode 100644
index 0000000..b0ca4ae
--- /dev/null
+++ b/hacks/config/attraction.xml
@@ -0,0 +1,87 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="attraction" _label="Attraction">
+
+ <command arg="-root"/>
+
+ <video href="https://www.youtube.com/watch?v=KAT9nkXCdms"/>
+
+ <hgroup>
+ <select id="mode">
+ <option id="balls" _label="Balls"/>
+ <option id="lines" _label="Lines" arg-set="-mode lines"/>
+ <option id="tails" _label="Tails" arg-set="-mode tails"/>
+ <option id="polygons" _label="Polygons" arg-set="-mode polygons"/>
+ <option id="splines" _label="Splines" arg-set="-mode splines"/>
+ <option id="fsplines" _label="Filled splines"
+ arg-set="-mode filled-splines"/>
+ </select>
+
+ <select id="wallmode">
+ <option id="walls" _label="Bounce off walls"/>
+ <option id="nowalls" _label="Ignore screen edges" arg-set="-nowalls"/>
+ </select>
+
+ </hgroup>
+
+ <hgroup>
+ <vgroup>
+ <number id="points" type="spinbutton" arg="-points %"
+ _label="Ball count" low="0" high="200" default="0"/>
+ <number id="viscosity" type="slider" arg="-viscosity %"
+ _label="Environmental viscosity"
+ _low-label="Low" _high-label="High"
+ low="0.0" high="1.0" default="1.0"
+ convert="invert"/>
+ <number id="segments" type="slider" arg="-segments %"
+ _label="Trail length" _low-label="Short" _high-label="Long"
+ low="2" high="1000" default="500"/>
+ <number id="ncolors" type="slider" arg="-colors %"
+ _label="Number of colors" _low-label="Two" _high-label="Many"
+ low="1" high="255" default="200"/>
+ </vgroup>
+ <vgroup>
+ <number id="size" type="slider" arg="-size %"
+ _low-label="Ball mass" _high-label="High"
+ low="0" high="100" default="0"/>
+ <number id="threshold" type="slider" arg="-threshold %"
+ _label="Repulsion threshold"
+ _low-label="Small" _high-label="Large"
+ low="0" high="600" default="200"/>
+ <number id="delay" type="slider" arg="-delay %"
+ _label="Speed" _low-label="Slow" _high-label="Fast"
+ low="0" high="40000" default="10000"
+ convert="invert"/>
+ </vgroup>
+ </hgroup>
+
+ <hgroup>
+ <boolean id="orbit" _label="Orbital mode" arg-set="-orbit"/>
+ <number id="radius" type="spinbutton" arg="-radius %"
+ _label="Radius" low="0" high="1000" default="0"/>
+ <number id="vmult" type="slider" arg="-vmult %"
+ _low-label="Outward" _high-label="Inward"
+ low="-5.0" high="5.0" default="0.9"/>
+ </hgroup>
+
+ <!-- #### -vx [?] -->
+ <!-- #### -vy [?] -->
+ <!-- #### -glow -->
+ <!-- #### -nomaxspeed -->
+ <!-- #### -correct-bounce -->
+ <!-- #### -graphmode [none] -->
+
+ <boolean id="showfps" _label="Show frame rate" arg-set="-fps"/>
+
+ <xscreensaver-updater />
+
+ <_description>
+
+Points attract each other up to a certain distance, and then begin to
+repel each other. The attraction/repulsion is proportional to the
+distance between any two particles, similar to the strong and weak
+nuclear forces.
+
+Written by Jamie Zawinski and John Pezaris; 1992.
+ </_description>
+</screensaver>
diff --git a/hacks/config/atunnel.xml b/hacks/config/atunnel.xml
new file mode 100644
index 0000000..eea3b96
--- /dev/null
+++ b/hacks/config/atunnel.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="atunnel" _label="Atunnel" gl="yes">
+
+ <command arg="-root"/>
+
+ <video href="https://www.youtube.com/watch?v=mpCRbi3jkuc"/>
+
+ <number id="delay" type="slider" arg="-delay %"
+ _label="Frame rate" _low-label="Low" _high-label="High"
+ low="0" high="100000" default="10000"
+ convert="invert"/>
+
+ <boolean id="tex" _label="Textured" arg-unset="-no-texture"/>
+ <boolean id="light" _label="Lighting" arg-set="-light"/>
+ <boolean id="wire" _label="Wireframe" arg-set="-wireframe"/>
+ <boolean id="showfps" _label="Show frame rate" arg-set="-fps"/>
+
+ <xscreensaver-updater />
+
+ <_description>
+Zooming through a textured tunnel.
+
+Written by Eric Lassauge and Roman Podobedov; 2003.
+ </_description>
+</screensaver>
diff --git a/hacks/config/barcode.xml b/hacks/config/barcode.xml
new file mode 100644
index 0000000..76fca28
--- /dev/null
+++ b/hacks/config/barcode.xml
@@ -0,0 +1,35 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="barcode" _label="Barcode">
+
+ <command arg="-root"/>
+
+ <video href="https://www.youtube.com/watch?v=gmtAySJdsfg"/>
+
+ <number id="delay" type="slider" arg="-delay %"
+ _label="Frame rate" _low-label="Low" _high-label="High"
+ low="0" high="100000" default="10000"
+ convert="invert"/>
+
+ <select id="mode">
+ <option id="scroll" _label="Scrolling barcodes"/>
+ <option id="scroll" _label="Barcode grid" arg-set="-mode grid"/>
+ <option id="clock12" _label="Barcode clock (AM/PM)" arg-set="-mode clock12"/>
+ <option id="clock24" _label="Barcode clock (24 hour)" arg-set="-mode clock24"/>
+ </select>
+
+ <boolean id="showfps" _label="Show frame rate" arg-set="-fps"/>
+
+ <xscreensaver-updater />
+
+ <_description>
+Colorful scrolling barcodes. CONSUME!
+
+The barcodes follow the UPC-A, UPC-E, EAN-8 or EAN-13 standards.
+
+https://en.wikipedia.org/wiki/Universal_Product_Code
+https://en.wikipedia.org/wiki/European_Article_Number
+
+Written by Dan Bornstein and Jamie Zawinski; 2003.
+ </_description>
+</screensaver>
diff --git a/hacks/config/binaryring.xml b/hacks/config/binaryring.xml
new file mode 100644
index 0000000..a96026c
--- /dev/null
+++ b/hacks/config/binaryring.xml
@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="binaryring" _label="BinaryRing">
+
+ <command arg="-root"/>
+
+ <video href="https://www.youtube.com/watch?v=KPiJb0Qm1SE"/>
+
+ <number id="growth-delay" type="slider" arg="-growth-delay %"
+ _label="Growth delay" _low-label="Low" _high-label="High"
+ low="0" high="100000" default="10000" />
+
+ <number id="ring-radius" type="slider" arg="-ring-radius %"
+ _label="Ring Radius" _low-label="Short" _high-label="Long"
+ low="0" high="400" default="40" />
+
+ <number id="particles-number" type="slider" arg="-particles-number %"
+ _label="Number of particles" _low-label="Few" _high-label="Lots"
+ low="500" high="20000" default="5000" />
+
+ <boolean id="color" _label="Fade with colors" arg-unset="-no-color"/>
+
+ <xscreensaver-updater />
+
+ <_description>
+A system of path tracing particles evolves continuously from an
+initial creation, alternating dark and light colors.
+
+Written by J. Tarbell and Emilio Del Tessandoro; 2014.
+ </_description>
+</screensaver>
diff --git a/hacks/config/blaster.xml b/hacks/config/blaster.xml
new file mode 100644
index 0000000..d7cb42d
--- /dev/null
+++ b/hacks/config/blaster.xml
@@ -0,0 +1,63 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="blaster" _label="Blaster">
+
+ <command arg="-root"/>
+
+ <video href="https://www.youtube.com/watch?v=bp3J3si2Hr0"/>
+
+ <number id="delay" type="slider" arg="-delay %"
+ _label="Frame rate" _low-label="Low" _high-label="High"
+ low="0" high="100000" default="10000"
+ convert="invert"/>
+
+ <number id="num_robots" type="spinbutton" arg="-num_robots %"
+ _label="Robots" low="2" high="50" default="5"/>
+
+ <number id="num_lasers" type="spinbutton" arg="-num_lasers %"
+ _label="Lasers" low="1" high="100" default="3"/>
+
+ <number id="num_stars" type="slider" arg="-num_stars %"
+ _label="Stars" _low-label="Few" _high-label="Many"
+ low="5" high="200" default="50"/>
+
+ <!-- #### -move_stars_x [2] -->
+ <!-- #### -move_stars_y [1] -->
+ <!-- #### -move_stars_random [0] -->
+ <!-- #### -star_color [white] -->
+
+ <!-- #### -explode_size_1 [27] -->
+ <!-- #### -explode_size_2 [19] -->
+ <!-- #### -explode_size_3 [7] -->
+ <!-- #### -explode_color_1 [yellow] -->
+ <!-- #### -explode_color_2 [orange] -->
+
+ <!-- #### -r_color0 [magenta] -->
+ <!-- #### -r_color1 [orange] -->
+ <!-- #### -r_color2 [yellow] -->
+ <!-- #### -r_color3 [white] -->
+ <!-- #### -r_color4 [blue] -->
+ <!-- #### -r_color5 [cyan] -->
+ <!-- #### -l_color0 [green] -->
+ <!-- #### -l_color1 [red] -->
+
+ <!-- #### -mother_ship -->
+ <!-- #### -mother_ship_width [25] -->
+ <!-- #### -mother_ship_height [7] -->
+ <!-- #### -mother_ship_laser [15] -->
+ <!-- #### -mother_ship_period [150] -->
+ <!-- #### -mother_ship_hits [10] -->
+ <!-- #### -mother_ship_color0 [darkblue] -->
+ <!-- #### -mother_ship_color1 [white] -->
+
+ <boolean id="showfps" _label="Show frame rate" arg-set="-fps"/>
+
+ <xscreensaver-updater />
+
+ <_description>
+Flying space-combat robots (cleverly disguised as colored circles)
+do battle in front of a moving star field.
+
+Written by Jonathan Lin; 1999.
+ </_description>
+</screensaver>
diff --git a/hacks/config/blinkbox.xml b/hacks/config/blinkbox.xml
new file mode 100644
index 0000000..d457df2
--- /dev/null
+++ b/hacks/config/blinkbox.xml
@@ -0,0 +1,35 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="blinkbox" _label="BlinkBox" gl="yes">
+
+ <command arg="-root"/>
+
+ <video href="https://www.youtube.com/watch?v=lgjbHMcSd8U"/>
+
+ <number id="delay" type="slider" arg="-delay %"
+ _label="Frame rate" _low-label="Low" _high-label="High"
+ low="0" high="100000" default="30000"
+ convert="invert"/>
+
+ <number id="boxsize" type="slider" arg="-boxsize %"
+ _label="Box size" _low-label="Small" _high-label="Large"
+ low="1" high="8" default="2"/>
+
+ <hgroup>
+ <boolean id="fade" _label="Fade" arg-unset="-no-fade"/>
+ <boolean id="blur" _label="Motion blur" arg-unset="-no-blur"/>
+ <boolean id="dissolve" _label="Dissolve" arg-set="-dissolve"/>
+ <boolean id="wire" _label="Wireframe" arg-set="-wireframe"/>
+ </hgroup>
+
+ <boolean id="showfps" _label="Show frame rate" arg-set="-fps"/>
+
+ <xscreensaver-updater />
+
+ <_description>
+A motion-blurred ball bounces inside a box whose tiles only become
+visible upon impact.
+
+Written by Jeremy English; 2003.
+ </_description>
+</screensaver>
diff --git a/hacks/config/blitspin.xml b/hacks/config/blitspin.xml
new file mode 100644
index 0000000..df53aa7
--- /dev/null
+++ b/hacks/config/blitspin.xml
@@ -0,0 +1,46 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="blitspin" _label="BlitSpin">
+
+ <command arg="-root"/>
+
+ <video href="https://www.youtube.com/watch?v=UTtcwb-UWW8"/>
+
+ <hgroup>
+ <vgroup>
+ <number id="delay" type="slider" arg="-delay %"
+ _label="Fuzzy rotation speed" _low-label="Slow" _high-label="Fast"
+ low="1" high="800000" default="500000"
+ convert="invert"/>
+
+ <number id="delay2" type="slider" arg="-delay2 %"
+ _label="90 degree rotation speed" _low-label="Slow" _high-label="Fast"
+ low="1" high="800000" default="500000"
+ convert="invert"/>
+
+ <number id="duration" type="slider" arg="-duration %"
+ _label="Duration" _low-label="10 seconds" _high-label="10 minutes"
+ low="10" high="600" default="120"/>
+ </vgroup>
+
+ <vgroup>
+ <!-- <file id="bitmap" _label="Bitmap to rotate" arg="-bitmap %"/> -->
+ <xscreensaver-image />
+ <boolean id="showfps" _label="Show frame rate" arg-set="-fps"/>
+ </vgroup>
+ </hgroup>
+
+ <xscreensaver-updater />
+
+ <_description>
+
+Repeatedly rotates a bitmap by 90 degrees by using logical operations:
+the bitmap is divided into quadrants, and the quadrants are shifted
+clockwise. Then the same thing is done again with progressively
+smaller quadrants, except that all sub-quadrants of a given size are
+rotated in parallel. As you watch it, the image appears to dissolve
+into static and then reconstitute itself, but rotated.
+
+Written by Jamie Zawinski; 1992.
+ </_description>
+</screensaver>
diff --git a/hacks/config/blocktube.xml b/hacks/config/blocktube.xml
new file mode 100644
index 0000000..85f88f9
--- /dev/null
+++ b/hacks/config/blocktube.xml
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="blocktube" _label="BlockTube" gl="yes">
+
+ <command arg="-root"/>
+
+ <video href="https://www.youtube.com/watch?v=L0JUBhpZlMw"/>
+
+ <number id="delay" type="slider" arg="-delay %"
+ _label="Frame rate" _low-label="Low" _high-label="High"
+ low="0" high="100000" default="40000"
+ convert="invert"/>
+
+ <number id="holdtime" type="slider" arg="-holdtime %"
+ _label="Color hold time" _low-label="Short" _high-label="Long"
+ low="10" high="2000" default="1000"/>
+
+ <number id="changetime" type="slider" arg="-changetime %"
+ _label="Color change time" _low-label="Short" _high-label="Long"
+ low="10" high="1000" default="200"/>
+
+ <boolean id="tex" _label="Textured" arg-unset="-no-texture"/>
+ <boolean id="wire" _label="Wireframe" arg-set="-wireframe"/>
+ <boolean id="showfps" _label="Show frame rate" arg-set="-fps"/>
+
+ <xscreensaver-updater />
+
+ <_description>
+A swirling, falling tunnel of reflective slabs. They fade from hue to hue.
+
+Written by Lars R. Damerow; 2003.
+ </_description>
+</screensaver>
diff --git a/hacks/config/boing.xml b/hacks/config/boing.xml
new file mode 100644
index 0000000..a36d1e2
--- /dev/null
+++ b/hacks/config/boing.xml
@@ -0,0 +1,51 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="boing" _label="Boing" gl="yes">
+
+ <command arg="-root"/>
+
+ <video href="https://www.youtube.com/watch?v=J3KAsV31d6M"/>
+
+ <number id="size" type="slider" arg="-size %"
+ _label="Size" _low-label="Tiny" _high-label="Huge"
+ low="0.02" high="0.9" default="0.5"/>
+
+ <number id="speed" type="slider" arg="-speed %"
+ _label="Speed" _low-label="Slow" _high-label="Fast"
+ low="0.1" high="10.0" default="1.0"/>
+
+ <vgroup>
+ <hgroup>
+ <number id="meridians" type="spinbutton" arg="-meridians %"
+ _label="Meridians" low="1" high="90" default="16"/>
+ <number id="parallels" type="spinbutton" arg="-parallels %"
+ _label="Parallels" low="1" high="90" default="8"/>
+ </hgroup>
+ <hgroup>
+ <boolean id="smoothing" _label="Smoothing" arg-set="-smooth"/>
+ <boolean id="lighting" _label="Lighting" arg-set="-lighting"/>
+ <boolean id="scanlines" _label="Scanlines" arg-unset="-no-scanlines"/>
+ </hgroup>
+ <hgroup>
+ <boolean id="wire" _label="Wireframe" arg-set="-wireframe"/>
+ <boolean id="showfps" _label="Show frame rate" arg-set="-fps"/>
+ </hgroup>
+ </vgroup>
+
+ <xscreensaver-updater />
+
+ <_description>
+
+A clone of the first graphics demo for the Amiga 1000, which was
+written by Dale Luck and RJ Mical during a break at the 1984 Consumer
+Electronics Show (or so the legend goes.)
+
+This looks like the original Amiga demo if you turn off "smoothing"
+and "lighting" and turn on "scanlines", and is somewhat more modern
+otherwise.
+
+https://en.wikipedia.org/wiki/Amiga#Boing_Ball
+
+Written by Jamie Zawinski; 2005.
+ </_description>
+</screensaver>
diff --git a/hacks/config/bouboule.xml b/hacks/config/bouboule.xml
new file mode 100644
index 0000000..b28912e
--- /dev/null
+++ b/hacks/config/bouboule.xml
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="bouboule" _label="Bouboule">
+
+ <command arg="-root"/>
+
+ <video href="https://www.youtube.com/watch?v=MdmIBmlkyFw"/>
+
+ <number id="delay" type="slider" arg="-delay %"
+ _label="Frame rate" _low-label="Low" _high-label="High"
+ low="0" high="100000" default="20000"
+ convert="invert"/>
+
+ <number id="count" type="slider" arg="-count %"
+ _label="Number of spots" _low-label="Few" _high-label="Many"
+ low="1" high="400" default="100"/>
+
+ <number id="ncolors" type="slider" arg="-ncolors %"
+ _label="Number of colors" _low-label="Two" _high-label="Many"
+ low="1" high="255" default="64"/>
+
+ <boolean id="3d" _label="Do Red/Blue 3D separation" arg-unset="-no-3d"/>
+
+ <boolean id="showfps" _label="Show frame rate" arg-set="-fps"/>
+
+ <xscreensaver-updater />
+
+ <_description>
+A deforming balloon with varying-sized spots painted on its invisible surface.
+
+Written by Jeremie Petit; 1997.
+ </_description>
+</screensaver>
diff --git a/hacks/config/bouncingcow.xml b/hacks/config/bouncingcow.xml
new file mode 100644
index 0000000..0e3dfe5
--- /dev/null
+++ b/hacks/config/bouncingcow.xml
@@ -0,0 +1,32 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="bouncingcow" _label="BouncingCow" gl="yes">
+
+ <command arg="-root"/>
+
+ <video href="https://www.youtube.com/watch?v=O_b5UWhv49w"/>
+
+ <number id="delay" type="slider" arg="-delay %"
+ _label="Frame rate" _low-label="Low" _high-label="High"
+ low="0" high="100000" default="30000"
+ convert="invert"/>
+
+ <number id="speed" type="slider" arg="-speed %"
+ _label="Bounce speed" _low-label="Slow" _high-label="Fast"
+ low="0.05" high="2.0" default="1.0"/>
+
+ <number id="count" type="slider" arg="-count %"
+ _label="Number of cows" _low-label="Moo" _high-label="Herd"
+ low="1" high="9" default="1"/>
+
+ <boolean id="wire" _label="Wireframe" arg-set="-wireframe"/>
+ <boolean id="showfps" _label="Show frame rate" arg-set="-fps"/>
+
+ <xscreensaver-updater />
+
+ <_description>
+A Cow. A Trampoline. Together, they fight crime.
+
+Written by Jamie Zawinski; 2003.
+ </_description>
+</screensaver>
diff --git a/hacks/config/boxed.xml b/hacks/config/boxed.xml
new file mode 100644
index 0000000..b2926f0
--- /dev/null
+++ b/hacks/config/boxed.xml
@@ -0,0 +1,58 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="boxed" _label="Boxed" gl="yes">
+
+ <command arg="-root"/>
+
+ <video href="https://www.youtube.com/watch?v=CU4QFtZm9So"/>
+
+ <hgroup>
+ <vgroup>
+
+ <number id="delay" type="slider" arg="-delay %"
+ _label="Frame rate" _low-label="Low" _high-label="High"
+ low="0" high="100000" default="15000"
+ convert="invert"/>
+ <number id="speed" type="slider" arg="-speed %"
+ _label="Speed" _low-label="Slow" _high-label="Fast"
+ low="0.001" high="4.0" default="0.5"/>
+
+ <number id="balls" type="slider" arg="-balls %"
+ _label="Number of balls" _low-label="Few" _high-label="Lots"
+ low="3" high="40" default="20"/>
+
+ <number id="ballsize" type="slider" arg="-ballsize %"
+ _label="Ball size" _low-label="Tiny" _high-label="Huge"
+ low="1.0" high="5.0" default="3.0"/>
+
+ </vgroup>
+
+ <vgroup>
+
+ <number id="explosion" type="slider" arg="-explosion %"
+ _label="Explosion force" _low-label="Popcorn" _high-label="Nuke"
+ low="1.0" high="50.0" default="15.0"/>
+
+ <number id="decay" type="slider" arg="-decay %"
+ _label="Explosion decay" _low-label="Linger" _high-label="Pop!"
+ low="0.0" high="1.0" default="0.07"/>
+
+ <number id="momentum" type="slider" arg="-momentum %"
+ _label="Explosion momentum" _low-label="None" _high-label="Full"
+ low="0.0" high="1.0" default="0.6"/>
+
+ <boolean id="showfps" _label="Show frame rate" arg-set="-fps"/>
+ <boolean id="wire" _label="Wireframe" arg-set="-wireframe"/>
+
+ </vgroup>
+ </hgroup>
+
+
+ <xscreensaver-updater />
+
+ <_description>
+A box full of 3D bouncing balls that explode.
+
+Written by Sander van Grieken; 2002.
+ </_description>
+</screensaver>
diff --git a/hacks/config/boxfit.xml b/hacks/config/boxfit.xml
new file mode 100644
index 0000000..a297e13
--- /dev/null
+++ b/hacks/config/boxfit.xml
@@ -0,0 +1,65 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="boxfit" _label="BoxFit">
+
+ <command arg="-root"/>
+
+ <video href="https://www.youtube.com/watch?v=8GkcbBbcwBk"/>
+
+ <hgroup>
+ <vgroup>
+ <number id="delay" type="slider" arg="-delay %"
+ _label="Frame rate" _low-label="Low" _high-label="High"
+ low="0" high="100000" default="20000"
+ convert="invert"/>
+
+ <hgroup>
+ <number id="count" type="spinbutton" arg="-count %"
+ _label="Boxes" low="1" high="1000" default="50"/>
+
+ <number id="growby" type="spinbutton" arg="-growby %"
+ _label="Grow by" low="1" high="10" default="1"/>
+ </hgroup>
+
+ <hgroup>
+ <number id="spacing" type="spinbutton" arg="-spacing %"
+ _label="Spacing" low="1" high="10" default="1"/>
+
+ <number id="border" type="spinbutton" arg="-border %"
+ _label="Border" low="1" high="10" default="1"/>
+ </hgroup>
+
+ <hgroup>
+ <select id="mode">
+ <option id="random" _label="Boxes or circles"/>
+ <option id="boxes" _label="Boxes only" arg-set="-mode squares"/>
+ <option id="circles" _label="Circles only" arg-set="-mode circles"/>
+ </select>
+
+ <select id="mode2">
+ <option id="gradient" _label="Color gradient"/>
+ <option id="image" _label="Grab images" arg-set="-grab"/>
+ </select>
+ </hgroup>
+ </vgroup>
+
+ <vgroup>
+ <xscreensaver-image />
+
+ <boolean id="peek" _label="Peek at underlying images" arg-set="-peek"/>
+
+ <boolean id="showfps" _label="Show frame rate" arg-set="-fps"/>
+ </vgroup>
+ </hgroup>
+
+ <xscreensaver-updater />
+
+ <_description>
+Packs the screen with growing squares or circles, colored according to
+a horizontal or vertical gradient, or according to the colors of a
+loaded image. The objects grow until they touch, then stop. When the
+screen is full, they shrink away and the process restarts.
+
+Written by Jamie Zawinski; 2005.
+ </_description>
+</screensaver>
diff --git a/hacks/config/braid.xml b/hacks/config/braid.xml
new file mode 100644
index 0000000..b49fa22
--- /dev/null
+++ b/hacks/config/braid.xml
@@ -0,0 +1,39 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="braid" _label="Braid">
+
+ <command arg="-root"/>
+
+ <video href="https://www.youtube.com/watch?v=PUhJq56ViGM"/>
+
+ <number id="delay" type="slider" arg="-delay %"
+ _label="Frame rate" _low-label="Low" _high-label="High"
+ low="0" high="100000" default="1000"
+ convert="invert"/>
+
+ <number id="cycles" type="slider" arg="-cycles %"
+ _label="Duration" _low-label="Short" _high-label="Long"
+ low="0" high="500" default="100"/>
+
+ <number id="ncolors" type="slider" arg="-ncolors %"
+ _label="Number of colors" _low-label="Two" _high-label="Many"
+ low="1" high="255" default="64"/>
+
+ <hgroup>
+ <number id="count" type="spinbutton" arg="-count %"
+ _label="Number of rings" low="3" high="15" default="15"/>
+
+ <number id="size" type="spinbutton" arg="-size %"
+ _label="Line thickness" low="-20" high="20" default="-7"/>
+ </hgroup>
+
+ <boolean id="showfps" _label="Show frame rate" arg-set="-fps"/>
+
+ <xscreensaver-updater />
+
+ <_description>
+Inter-braided concentric circles.
+
+Written by John Neil; 1997.
+ </_description>
+</screensaver>
diff --git a/hacks/config/bsod.xml b/hacks/config/bsod.xml
new file mode 100644
index 0000000..ef18e21
--- /dev/null
+++ b/hacks/config/bsod.xml
@@ -0,0 +1,105 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="bsod" _label="BSOD">
+
+ <command arg="-root"/>
+
+ <video href="https://www.youtube.com/watch?v=YIqbMCfR3r0"/>
+
+ <hgroup>
+ <number id="delay" type="slider" arg="-delay %"
+ _label="Duration" _low-label="5 seconds" _high-label="2 minutes"
+ low="5" high="120" default="45"/>
+ <boolean id="showfps" _label="Show frame rate" arg-set="-fps"/>
+ </hgroup>
+
+ <hgroup>
+ <vgroup>
+ <boolean id="windows" _label="Windows 3.1" arg-unset="-no-windows"/>
+ <boolean id="nt" _label="Windows NT" arg-unset="-no-nt"/>
+ <boolean id="2k" _label="Windows 2000 " arg-unset="-no-2k"/>
+ <boolean id="win10" _label="Windows 10 " arg-unset="-no-win10"/>
+ <boolean id="msdos" _label="MS-DOS" arg-unset="-no-msdos"/>
+ </vgroup>
+ <vgroup>
+ <boolean id="amiga" _label="AmigaDOS" arg-unset="-no-amiga"/>
+ <boolean id="glados" _label="GLaDOS" arg-unset="-no-glados"/>
+ <boolean id="android" _label="Android" arg-unset="-no-android"/>
+ <boolean id="apple2" _label="Apple ][" arg-unset="-no-apple2"/>
+ <boolean id="ransomware" _label="Ransomware" arg-unset="-no-ransomware"/>
+ </vgroup>
+ <vgroup>
+ <boolean id="nvidia" _label="NVidia" arg-unset="-no-nvidia"/>
+ <boolean id="os2" _label="OS/2" arg-unset="-no-os2"/>
+ <boolean id="mac" _label="Sad Mac" arg-unset="-no-mac"/>
+ <boolean id="mac1" _label="Mac bomb" arg-unset="-no-mac1"/>
+ <boolean id="vmware" _label="VMware" arg-unset="-no-vmware"/>
+ </vgroup>
+ <vgroup>
+ <boolean id="macsbug" _label="MacsBug" arg-unset="-no-macsbug"/>
+ <boolean id="atari" _label="Atari" arg-set="-atari"/>
+ <boolean id="macx" _label="MacOS X" arg-unset="-no-macx"/>
+ <boolean id="os390" _label="OS/390" arg-unset="-no-os390"/>
+ </vgroup>
+ <vgroup>
+ <boolean id="vms" _label="VMS" arg-unset="-no-vms"/>
+ <boolean id="hvx" _label="HVX/GCOS6" arg-unset="-no-hvx"/>
+ <boolean id="blitdamage" _label="NCD X Terminal " arg-unset="-no-blitdamage"/>
+ <boolean id="atm" _label="ATM" arg-unset="-no-atm"/>
+ </vgroup>
+ <vgroup>
+ <boolean id="bsd" _label="BSD" arg-set="-bsd"/>
+ <boolean id="linux" _label="Linux (fsck)" arg-unset="-no-linux"/>
+ <boolean id="sparclinux" _label="Linux (sparc)" arg-set="-sparclinux"/>
+ <boolean id="hppalinux" _label="Linux (hppa)" arg-unset="-no-hppalinux"/>
+ </vgroup>
+ <vgroup>
+ <boolean id="solaris" _label="Solaris" arg-unset="-no-solaris"/>
+ <boolean id="sco" _label="SCO" arg-unset="-no-sco"/>
+ <boolean id="hpux" _label="HPUX" arg-unset="-no-hpux"/>
+ <boolean id="tru64" _label="Tru64" arg-unset="-no-tru64"/>
+ </vgroup>
+ </hgroup>
+
+ <hgroup>
+ <vgroup>
+ <xscreensaver-image />
+ </vgroup>
+ <xscreensaver-updater />
+ </hgroup>
+
+<!--
+ <hgroup>
+ <vgroup>
+ <number id="tvcolor" type="slider" arg="-tv-color %"
+ _label="Color Knob" _low-label="Low" _high-label="High"
+ low="0" high="400" default="70"/>
+ <number id="tvtint" type="slider" arg="-tv-tint %"
+ _label="Tint Knob" _low-label="Low" _high-label="High"
+ low="0" high="360" default="5"/>
+ </vgroup>
+ <vgroup>
+ <number id="tvbrightness" type="slider" arg="-tv-brightness %"
+ _label="Brightness Knob" _low-label="Low" _high-label="High"
+ low="-75.0" high="100.0" default="3.0"/>
+ <number id="tvcontrast" type="slider" arg="-tv-contrast %"
+ _label="Contrast Knob" _low-label="Low" _high-label="High"
+ low="0" high="500" default="150"/>
+ </vgroup>
+ </hgroup>
+-->
+
+ <_description>
+BSOD stands for "Blue Screen of Death". The finest in personal
+computer emulation, BSOD simulates popular screen savers from a
+number of less robust operating systems.
+
+https://en.wikipedia.org/wiki/Blue_Screen_of_Death
+https://en.wikipedia.org/wiki/Screen_of_death
+https://en.wikipedia.org/wiki/Guru_Meditation
+https://en.wikipedia.org/wiki/Row_of_Bombs
+https://en.wikipedia.org/wiki/Bomb_%28symbol%29
+
+Written by Jamie Zawinski; 1998.
+ </_description>
+</screensaver>
diff --git a/hacks/config/bubble3d.xml b/hacks/config/bubble3d.xml
new file mode 100644
index 0000000..985c394
--- /dev/null
+++ b/hacks/config/bubble3d.xml
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="bubble3d" _label="Bubble3D" gl="yes">
+
+ <command arg="-root"/>
+
+ <video href="https://www.youtube.com/watch?v=4vcj8sq9FO8"/>
+
+ <number id="delay" type="slider" arg="-delay %"
+ _label="Frame rate" _low-label="Low" _high-label="High"
+ low="0" high="100000" default="10000"
+ convert="invert"/>
+
+ <boolean id="transp" _label="Transparent bubbles" arg-unset="-no-transparent"/>
+ <select id="bubblecolor">
+ <option id="random" _label="Random" />
+ <option id="Red" _label="Amber" arg-set="-color #FF0000" />
+ <option id="Green" _label="Green" arg-set="-color #00FF00" />
+ <option id="Blue" _label="Blue" arg-set="-color #0000FF" />
+ <option id="white" _label="White" arg-set="-color #FFFFFF" />
+ </select>
+ <boolean id="showfps" _label="Show frame rate" arg-set="-fps"/>
+ <xscreensaver-updater />
+
+ <_description>
+Rising, undulating 3D bubbles, with transparency and specular reflections.
+
+Written by Richard Jones; 1998.
+ </_description>
+</screensaver>
diff --git a/hacks/config/bubbles.xml b/hacks/config/bubbles.xml
new file mode 100644
index 0000000..86cb132
--- /dev/null
+++ b/hacks/config/bubbles.xml
@@ -0,0 +1,42 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="bubbles" _label="Bubbles">
+
+ <command arg="-root"/>
+
+ <video href="https://www.youtube.com/watch?v=Mli1TjZY1YA"/>
+
+ <number id="delay" type="slider" arg="-delay %"
+ _label="Frame rate" _low-label="Low" _high-label="High"
+ low="0" high="100000" default="10000"
+ convert="invert"/>
+
+ <boolean id="simple" _label="Draw circles instead of bubble images"
+ arg-set="-simple"/>
+
+ <boolean id="broken" _label="Don't hide bubbles when they pop"
+ arg-set="-broken"/>
+
+ <boolean id="trails" _label="Leave trails" arg-set="-trails"/>
+
+ <select id="gravity">
+ <option id="rise" _label="Bubbles rise" arg-set="-mode rise"/>
+ <option id="float" _label="Bubbles float"/>
+ <option id="drop" _label="Bubbles fall" arg-set="-mode drop"/>
+ </select>
+
+ <boolean id="showfps" _label="Show frame rate" arg-set="-fps"/>
+
+ <xscreensaver-updater />
+
+ <_description>
+This screen saver was removed from the XScreenSaver distribution as of
+version 5.08.
+
+This simulates the kind of bubble formation that happens when water
+boils: small bubbles appear, and as they get closer to each other,
+they combine to form larger bubbles, which eventually pop.
+
+Written by James Macnicol; 1996.
+ </_description>
+</screensaver>
diff --git a/hacks/config/bumps.xml b/hacks/config/bumps.xml
new file mode 100644
index 0000000..78ee969
--- /dev/null
+++ b/hacks/config/bumps.xml
@@ -0,0 +1,36 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="bumps" _label="Bumps">
+
+ <command arg="-root"/>
+
+ <video href="https://www.youtube.com/watch?v=IV7D-NYRCiU"/>
+
+ <!-- #### -degrees [360] -->
+ <!-- #### -color [random] -->
+ <!-- #### -colorcount [64] -->
+
+ <number id="delay" type="slider" arg="-delay %"
+ _label="Frame rate" _low-label="Low" _high-label="High"
+ low="0" high="100000" default="30000"
+ convert="invert"/>
+
+ <number id="duration" type="slider" arg="-duration %"
+ _label="Duration" _low-label="10 seconds" _high-label="10 minutes"
+ low="10" high="600" default="120"/>
+
+ <!-- #### -soften [1] -->
+ <!-- #### -invert -->
+
+ <xscreensaver-image />
+
+ <boolean id="showfps" _label="Show frame rate" arg-set="-fps"/>
+
+ <xscreensaver-updater />
+
+ <_description>
+A spotlight roams across an embossed version of a loaded image.
+
+Written by Shane Smit; 1999.
+ </_description>
+</screensaver>
diff --git a/hacks/config/cage.xml b/hacks/config/cage.xml
new file mode 100644
index 0000000..6ede618
--- /dev/null
+++ b/hacks/config/cage.xml
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="cage" _label="Cage" gl="yes">
+
+ <command arg="-root"/>
+
+ <video href="https://www.youtube.com/watch?v=BxGHUFvI2Zo"/>
+
+ <number id="delay" type="slider" arg="-delay %"
+ _label="Frame rate" _low-label="Low" _high-label="High"
+ low="0" high="100000" default="25000"
+ convert="invert"/>
+
+ <boolean id="wire" _label="Wireframe" arg-set="-wireframe"/>
+ <boolean id="showfps" _label="Show frame rate" arg-set="-fps"/>
+
+ <xscreensaver-updater />
+
+ <_description>
+Escher's "Impossible Cage", a 3d analog of a moebius
+strip, and rotates it in three dimensions.
+
+https://en.wikipedia.org/wiki/Maurits_Cornelis_Escher
+
+Written by Marcelo Vianna; 1998.
+ </_description>
+</screensaver>
diff --git a/hacks/config/carousel.xml b/hacks/config/carousel.xml
new file mode 100644
index 0000000..6f9a79f
--- /dev/null
+++ b/hacks/config/carousel.xml
@@ -0,0 +1,57 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="carousel" _label="Carousel" gl="yes">
+
+ <command arg="-root"/>
+
+ <video href="https://www.youtube.com/watch?v=IyqWkGVrFIY"/>
+
+ <hgroup>
+ <vgroup>
+
+ <number id="delay" type="slider" arg="-delay %"
+ _label="Frame rate" _low-label="Low" _high-label="High"
+ low="0" high="100000" default="10000"
+ convert="invert"/>
+
+ <number id="speed" type="slider" arg="-speed %"
+ _label="Animation speed" _low-label="Slow" _high-label="Fast"
+ low="0.1" high="8.0" default="1.0"/>
+
+ <number id="duration" type="slider" arg="-duration %"
+ _label="Time until loading a new image"
+ _low-label="5 seconds" _high-label="1 minute"
+ low="5" high="60" default="20"/>
+
+ </vgroup>
+ <vgroup>
+
+ <number id="count" type="spinbutton" arg="-count %"
+ _label="Number of images" low="1" high="20" default="7"/>
+
+ <select id="mode">
+ <option id="tiltxy" _label="Tilt in/out and left/right"/>
+ <option id="tiltx" _label="Tilt in/out only" arg-set="-tilt x"/>
+ <option id="tilty" _label="Tilt left/right only" arg-set="-tilt y"/>
+ <option id="notilt" _label="No tilting" arg-set="-tilt 0"/>
+ </select>
+
+ <boolean id="zoom" _label="Zoom in/out" arg-unset="-no-zoom"/>
+ <boolean id="titles" _label="Show file names" arg-unset="-no-titles"/>
+ <boolean id="showfps" _label="Show frame rate" arg-set="-fps"/>
+
+ </vgroup>
+ </hgroup>
+
+ <xscreensaver-image />
+
+ <xscreensaver-updater />
+
+ <_description>
+Loads several random images, and displays them flying in a circular
+formation. The formation changes speed and direction randomly, and
+images periodically drop out to be replaced by new ones.
+
+Written by Jamie Zawinski; 2005.
+ </_description>
+</screensaver>
diff --git a/hacks/config/ccurve.xml b/hacks/config/ccurve.xml
new file mode 100644
index 0000000..e15138f
--- /dev/null
+++ b/hacks/config/ccurve.xml
@@ -0,0 +1,32 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="ccurve" _label="CCurve">
+
+ <command arg="-root"/>
+
+ <video href="https://www.youtube.com/watch?v=zqIlWzUHOz8"/>
+
+ <number id="delay" type="slider" arg="-delay %"
+ _label="Change image every" _low-label="0 seconds" _high-label="30 seconds"
+ low="0" high="30" default="3"/>
+
+ <number id="pause" type="slider" arg="-pause %"
+ _label="Animation speed" _low-label="Slow" _high-label="Fast"
+ low="0.0" high="5.0" default="0.4" convert="invert"/>
+
+ <number id="limit" type="slider" arg="-limit %"
+ _label="Density" _low-label="Low" _high-label="High"
+ low="3" high="300000" default="200000"/>
+
+ <boolean id="showfps" _label="Show frame rate" arg-set="-fps"/>
+
+ <xscreensaver-updater />
+
+ <_description>
+Generates self-similar linear fractals, including the classic "C Curve".
+
+https://en.wikipedia.org/wiki/Levy_C_curve
+
+Written by Rick Campbell; 1999.
+ </_description>
+</screensaver>
diff --git a/hacks/config/celtic.xml b/hacks/config/celtic.xml
new file mode 100644
index 0000000..f84d12b
--- /dev/null
+++ b/hacks/config/celtic.xml
@@ -0,0 +1,32 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="celtic" _label="Celtic">
+
+ <command arg="-root"/>
+
+ <video href="https://www.youtube.com/watch?v=PnX60AAoTdw"/>
+
+ <number id="delay" type="slider" arg="-delay %"
+ _label="Frame rate" _low-label="Low" _high-label="High"
+ low="0" high="100000" default="10000"
+ convert="invert"/>
+
+ <number id="delay2" type="slider" arg="-delay2 %"
+ _label="Linger" _low-label="Short" _high-label="Long"
+ low="0" high="10" default="5"/>
+
+ <boolean id="graph" _label="Draw graph" arg-set="-graph"/>
+
+ <boolean id="showfps" _label="Show frame rate" arg-set="-fps"/>
+
+ <xscreensaver-updater />
+
+ <_description>
+Repeatedly draws random Celtic cross-stitch patterns.
+
+https://en.wikipedia.org/wiki/Celtic_knot
+https://en.wikipedia.org/wiki/Knots_and_graphs
+
+Written by Max Froumentin; 2005.
+ </_description>
+</screensaver>
diff --git a/hacks/config/circuit.xml b/hacks/config/circuit.xml
new file mode 100644
index 0000000..0605002
--- /dev/null
+++ b/hacks/config/circuit.xml
@@ -0,0 +1,37 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="circuit" _label="Circuit" gl="yes">
+
+ <command arg="-root"/>
+
+ <video href="https://www.youtube.com/watch?v=tfqR1j1OQs8"/>
+
+ <number id="delay" type="slider" arg="-delay %"
+ _label="Frame rate" _low-label="Low" _high-label="High"
+ low="0" high="100000" default="20000"
+ convert="invert"/>
+
+ <number id="count" type="slider" arg="-parts %"
+ _label="Parts" _low-label="One" _high-label="Lots"
+ low="1" high="30" default="10"/>
+
+ <number id="speed" type="slider" arg="-rotate-speed %"
+ _label="Rotation speed" _low-label="Slow" _high-label="Fast"
+ low="0" high="100" default="1"/>
+ <boolean id="spin" _label="Spin" arg-unset="-no-spin"/>
+
+ <select id="render">
+ <option id="flat" _label="Flat coloring" arg-set="-no-light"/>
+ <option id="light" _label="Directional lighting"/>
+ </select>
+
+ <boolean id="showfps" _label="Show frame rate" arg-set="-fps"/>
+
+ <xscreensaver-updater />
+
+ <_description>
+Electronic components float around.
+
+Written by Ben Buxton; 2001.
+ </_description>
+</screensaver>
diff --git a/hacks/config/cityflow.xml b/hacks/config/cityflow.xml
new file mode 100644
index 0000000..61f67d9
--- /dev/null
+++ b/hacks/config/cityflow.xml
@@ -0,0 +1,55 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="cityflow" _label="Cityflow" gl="yes">
+
+ <command arg="-root"/>
+
+ <video href="https://www.youtube.com/watch?v=LJMtu-9T3U0"/>
+
+ <hgroup>
+ <vgroup>
+ <number id="delay" type="slider" arg="-delay %"
+ _label="Frame rate" _low-label="Low" _high-label="High"
+ low="0" high="100000" default="20000"
+ convert="invert"/>
+
+ <number id="count" type="slider" arg="-count %"
+ _label="Boxes" _low-label="Few" _high-label="Many"
+ low="50" high="4000" default="800"/>
+
+ <number id="skew" type="slider" arg="-skew %"
+ _label="Skew"
+ _low-label="Low" _high-label="High"
+ low="0" high="45" default="12"/>
+ </vgroup>
+
+ <vgroup>
+ <number id="wave-speed" type="slider" arg="-wave-speed %"
+ _label="Wave speed" _low-label="Slow" _high-label="Fast"
+ low="5" high="150" default="25"/>
+
+ <number id="wave-radius" type="slider" arg="-wave-radius %"
+ _label="Wave overlap"
+ _low-label="Small" _high-label="Large"
+ low="5" high="512" default="256"/>
+
+ <number id="waves" type="slider" arg="-waves %"
+ _label="Wave complexity"
+ _low-label="Low" _high-label="High"
+ low="1" high="20" default="6"/>
+ </vgroup>
+ </hgroup>
+
+ <hgroup>
+ <boolean id="wire" _label="Wireframe" arg-set="-wireframe"/>
+ <boolean id="showfps" _label="Show frame rate" arg-set="-fps"/>
+
+ <xscreensaver-updater />
+ </hgroup>
+
+ <_description>
+Waves move across a sea of boxes. The city swells. The walls are closing in.
+
+Written by Jamie Zawinski; 2014.
+ </_description>
+</screensaver>
diff --git a/hacks/config/cloudlife.xml b/hacks/config/cloudlife.xml
new file mode 100644
index 0000000..767a8ea
--- /dev/null
+++ b/hacks/config/cloudlife.xml
@@ -0,0 +1,41 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="cloudlife" _label="CloudLife">
+
+ <command arg="-root"/>
+
+ <video href="https://www.youtube.com/watch?v=TkVDO3nTTsE"/>
+
+ <number id="delay" type="slider" arg="-cycle-delay %"
+ _label="Frame rate" _low-label="Low" _high-label="High"
+ low="0" high="100000" default="25000"
+ convert="invert"/>
+
+ <number id="maxage" type="slider" arg="-max-age %"
+ _label="Max age" _low-label="Young" _high-label="Old"
+ low="2" high="255" default="64"/>
+
+ <number id="density" type="slider" arg="-initial-density %"
+ _label="Initial density" _low-label="Low" _high-label="High"
+ low="1" high="99" default="30"/>
+
+ <number id="cellsize" type="slider" arg="-cell-size %"
+ _label="Cell size" _low-label="Small" _high-label="Large"
+ low="1" high="20" default="3"/>
+
+ <boolean id="showfps" _label="Show frame rate" arg-set="-fps"/>
+
+ <xscreensaver-updater />
+
+ <_description>
+
+Generates cloud-like formations based on a variant of Conway's Life. The
+difference is that cells have a maximum age, after which they count as
+3 for populating the next generation. This makes long-lived formations
+explode instead of just sitting there.
+
+https://en.wikipedia.org/wiki/Conway%27s_Game_of_Life
+
+Written by Don Marti; 2003.
+ </_description>
+</screensaver>
diff --git a/hacks/config/companioncube.xml b/hacks/config/companioncube.xml
new file mode 100644
index 0000000..128edc5
--- /dev/null
+++ b/hacks/config/companioncube.xml
@@ -0,0 +1,56 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="companioncube" _label="CompanionCube" gl="yes">
+
+ <command arg="-root"/>
+
+ <video href="https://www.youtube.com/watch?v=Q54NVuxhGso"/>
+
+ <hgroup>
+ <vgroup>
+
+ <number id="delay" type="slider" arg="-delay %"
+ _label="Frame rate" _low-label="Low" _high-label="High"
+ low="0" high="100000" default="30000"
+ convert="invert"/>
+
+ <number id="speed" type="slider" arg="-speed %"
+ _label="Bounce" _low-label="Slow" _high-label="Fast"
+ low="0.05" high="2.0" default="1.0"/>
+
+ </vgroup>
+ <vgroup>
+
+ <number id="count" type="slider" arg="-count %"
+ _label="Number of cubes" _low-label="1" _high-label="20"
+ low="1" high="20" default="3"/>
+
+ <hgroup>
+ <vgroup>
+ <boolean id="spin" _label="Spin" arg-set="-spin"/>
+ <boolean id="wander" _label="Wander" arg-set="-wander"/>
+ </vgroup>
+ <vgroup>
+ <boolean id="wire" _label="Wireframe" arg-set="-wireframe"/>
+ <boolean id="showfps" _label="Show frame rate" arg-set="-fps"/>
+ </vgroup>
+ </hgroup>
+
+ </vgroup>
+ </hgroup>
+
+ <xscreensaver-updater />
+
+ <_description>
+The symptoms most commonly produced by Enrichment Center testing are
+superstition, perceiving inanimate objects as alive, and hallucinations.
+The Enrichment Center reminds you that the weighted companion cube will
+never threaten to stab you and, in fact, cannot speak. In the event that
+the Weighted Companion Cube does speak, the Enrichment Center urges you to
+disregard its advice.
+
+https://en.wikipedia.org/wiki/Portal_%28video_game%29
+
+Written by Jamie Zawinski; 2011.
+ </_description>
+</screensaver>
diff --git a/hacks/config/compass.xml b/hacks/config/compass.xml
new file mode 100644
index 0000000..83e0c83
--- /dev/null
+++ b/hacks/config/compass.xml
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="compass" _label="Compass">
+
+ <command arg="-root"/>
+
+ <video href="https://www.youtube.com/watch?v=IssDEcgB550"/>
+
+ <number id="delay" type="slider" arg="-delay %"
+ _label="Frame rate" _low-label="Low" _high-label="High"
+ low="0" high="100000" default="20000"
+ convert="invert"/>
+
+ <boolean id="showfps" _label="Show frame rate" arg-set="-fps"/>
+
+ <xscreensaver-updater />
+
+ <_description>
+A compass, with all elements spinning about randomly, for
+that "lost and nauseous" feeling.
+
+Written by Jamie Zawinski; 1999.
+ </_description>
+</screensaver>
diff --git a/hacks/config/coral.xml b/hacks/config/coral.xml
new file mode 100644
index 0000000..c722ea5
--- /dev/null
+++ b/hacks/config/coral.xml
@@ -0,0 +1,36 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="coral" _label="Coral">
+
+ <command arg="-root"/>
+
+ <video href="https://www.youtube.com/watch?v=3WTSvzJcQhw"/>
+
+ <number id="delay2" type="slider" arg="-delay2 %"
+ _label="Frame rate" _low-label="Low" _high-label="High"
+ low="1" high="500000" default="20000"
+ convert="invert"/>
+
+ <number id="delay" type="slider" arg="-delay %"
+ _label="Linger" _low-label="1 second" _high-label="1 minute"
+ low="1" high="60" default="5"/>
+
+ <number id="density" type="slider" arg="-density %"
+ _label="Density" _low-label="Sparse" _high-label="Dense"
+ low="1" high="90" default="25"
+ convert="invert"/>
+
+ <number id="seeds" type="slider" arg="-seeds %"
+ _label="Seeds" _low-label="Few" _high-label="Many"
+ low="1" high="100" default="20"/>
+
+ <boolean id="showfps" _label="Show frame rate" arg-set="-fps"/>
+
+ <xscreensaver-updater />
+
+ <_description>
+Simulates coral growth, albeit somewhat slowly.
+
+Written by Frederick Roeber; 1997.
+ </_description>
+</screensaver>
diff --git a/hacks/config/crackberg.xml b/hacks/config/crackberg.xml
new file mode 100644
index 0000000..dacf279
--- /dev/null
+++ b/hacks/config/crackberg.xml
@@ -0,0 +1,52 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="crackberg" _label="Crackberg" gl="yes">
+
+ <command arg="-root"/>
+
+ <video href="https://www.youtube.com/watch?v=ej1No4EK8Rc"/>
+
+ <number id="delay" type="slider" arg="-delay %"
+ _label="Frame rate" _low-label="Low" _high-label="High"
+ low="0" high="100000" default="20000"
+ convert="invert"/>
+
+ <number id="visibility" type="slider" arg="-visibility %"
+ _label="Visibility" _low-label="Mouse hole" _high-label="Eagle nest"
+ low="0.2" high="1.0" default="0.6" />
+ <number id="nsubdivs" type="slider" arg="-nsubdivs %"
+ _label="Subdivisions" _low-label="Few" _high-label="Hurt me"
+ low="2" high="9" default="4" />
+
+ <hgroup>
+ <vgroup>
+ <boolean id="flat" _label="Flat shading" arg-unset="-no-flat"/>
+ <boolean id="lit" _label="Lighting" arg-unset="-no-lit"/>
+ <boolean id="water" _label="Water" arg-unset="-no-water"/>
+ <boolean id="crack" _label="Confused" arg-unset="-no-crack"/>
+ </vgroup>
+ <vgroup>
+ <boolean id="boring" _label="Immediate" arg-set="-boring"/>
+ <boolean id="letter" _label="Letterbox" arg-set="-letterbox"/>
+ <boolean id="wire" _label="Wireframe" arg-set="-wireframe"/>
+ <boolean id="showfps" _label="Show frame rate" arg-set="-fps"/>
+ </vgroup>
+ </hgroup>
+
+ <select id="color">
+ <option id="random" _label="Random coloration"/>
+ <option id="plain" _label="Earthy coloration" arg-set="-color plain"/>
+ <option id="ice" _label="Icy coloration" arg-set="-color ice"/>
+ <option id="magma" _label="Swampy coloration" arg-set="-color magma"/>
+ <option id="vomit" _label="Vomitous coloration" arg-set="-color vomit"/>
+ </select>
+
+ <xscreensaver-updater />
+
+ <_description>
+Flies through height maps, optionally animating the creation and
+destruction of generated tiles; tiles `grow' into place.
+
+Written by Matus Telgarsky; 2005.
+ </_description>
+</screensaver>
diff --git a/hacks/config/critical.xml b/hacks/config/critical.xml
new file mode 100644
index 0000000..399c569
--- /dev/null
+++ b/hacks/config/critical.xml
@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="critical" _label="Critical">
+
+ <command arg="-root"/>
+
+ <video href="https://www.youtube.com/watch?v=HN2ykbM2cTk"/>
+
+ <number id="delay" type="slider" arg="-delay %"
+ _label="Frame rate" _low-label="Low" _high-label="High"
+ low="0" high="100000" default="10000"
+ convert="invert"/>
+
+ <number id="ncolors" type="slider" arg="-ncolors %"
+ _label="Number of colors" _low-label="Two" _high-label="Many"
+ low="3" high="255" default="64"/>
+
+ <boolean id="showfps" _label="Show frame rate" arg-set="-fps"/>
+
+ <xscreensaver-updater />
+
+ <_description>
+This screen saver was removed from the XScreenSaver distribution as of
+version 5.08.
+
+Draws a system of self-organizing lines. It starts out as random
+squiggles, but after a few iterations, order begins to appear.
+
+Written by Martin Pool; 1999.
+ </_description>
+</screensaver>
diff --git a/hacks/config/crumbler.xml b/hacks/config/crumbler.xml
new file mode 100644
index 0000000..57b1bd6
--- /dev/null
+++ b/hacks/config/crumbler.xml
@@ -0,0 +1,49 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="crumbler" _label="Crumbler" gl="yes">
+
+ <command arg="-root"/>
+
+ <video href="https://www.youtube.com/watch?v=oERz1IPluYQ"/>
+
+ <hgroup>
+ <vgroup>
+ <number id="delay" type="slider" arg="-delay %"
+ _label="Frame rate" _low-label="Low" _high-label="High"
+ low="0" high="100000" default="30000"
+ convert="invert"/>
+
+ <number id="speed" type="slider" arg="-speed %"
+ _label="Speed" _low-label="Slow" _high-label="Fast"
+ low="0.05" high="2.0" default="1.0"/>
+
+ <number id="density" type="slider" arg="-density %"
+ _label="Polygons" _low-label="Few" _high-label="Many"
+ low="0.2" high="5.0" default="1.0"/>
+
+ <number id="fracture" type="slider" arg="-fracture %"
+ _label="Fractures" _low-label="Few" _high-label="Many"
+ low="0" high="20" default="0"/>
+ </vgroup>
+
+ <vgroup>
+ <boolean id="wander" _label="Wander" arg-unset="-no-wander"/>
+ <boolean id="spin" _label="Spin" arg-unset="-no-spin"/>
+ <boolean id="wire" _label="Wireframe" arg-set="-wireframe"/>
+ <boolean id="showfps" _label="Show frame rate" arg-set="-fps"/>
+
+ <xscreensaver-updater />
+ </vgroup>
+ </hgroup>
+
+ <_description>
+Randomly subdivides a ball into voronoi chunks, then further subdivides
+one of the remaining pieces.
+
+https://en.wikipedia.org/wiki/Voronoi_diagram
+https://en.wikipedia.org/wiki/Convex_hull
+https://en.wikipedia.org/wiki/Quickhull
+
+Written by Jamie Zawinski; 2018.
+ </_description>
+</screensaver>
diff --git a/hacks/config/crystal.xml b/hacks/config/crystal.xml
new file mode 100644
index 0000000..ab1f1dd
--- /dev/null
+++ b/hacks/config/crystal.xml
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="crystal" _label="Crystal">
+
+ <command arg="-root"/>
+
+ <video href="https://www.youtube.com/watch?v=M27wWKGXIvw"/>
+
+ <number id="delay" type="slider" arg="-delay %"
+ _label="Frame rate" _low-label="Low" _high-label="High"
+ low="0" high="100000" default="60000"
+ convert="invert"/>
+
+ <number id="ncolors" type="slider" arg="-ncolors %"
+ _label="Number of colors" _low-label="Two" _high-label="Many"
+ low="1" high="255" default="100"/>
+
+ <!-- #### -maxsize -->
+ <!-- #### -shift (color cycling) -->
+
+ <number id="count" type="spinbutton" arg="-count %"
+ _label="Number of crystals" low="-5000" high="5000" default="-500"/>
+
+ <number id="nx" type="spinbutton" arg="-nx %"
+ _label="Horizontal symmetries" low="-10" high="10" default="-3"/>
+
+ <number id="ny" type="spinbutton" arg="-ny %"
+ _label="Vertical symmetries" low="-10" high="10" default="-3"/>
+
+ <hgroup>
+ <boolean id="grid" _label="Draw grid" arg-set="-grid"/>
+ <boolean id="cells" _label="Draw cell" arg-unset="-no-cell"/>
+ <boolean id="centre" _label="Center on screen" arg-set="-centre"/>
+ </hgroup>
+
+ <boolean id="showfps" _label="Show frame rate" arg-set="-fps"/>
+
+ <xscreensaver-updater />
+
+ <_description>
+Moving polygons, similar to a kaleidoscope. See also the
+"Kaleidescope" and "GLeidescope" screen savers.
+
+https://en.wikipedia.org/wiki/Kaleidoscope
+
+Written by Jouk Jansen; 1998.
+ </_description>
+</screensaver>
diff --git a/hacks/config/cube21.xml b/hacks/config/cube21.xml
new file mode 100644
index 0000000..f16d7fd
--- /dev/null
+++ b/hacks/config/cube21.xml
@@ -0,0 +1,77 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="cube21" _label="Cube21" gl="yes">
+
+ <command arg="-root"/>
+
+ <video href="https://www.youtube.com/watch?v=AFtxL6--lTQ"/>
+
+ <hgroup>
+ <vgroup>
+
+ <number id="speed" type="slider" arg="-delay %"
+ _label="Frame rate" _low-label="Low" _high-label="High"
+ low="0" high="100000" default="20000" convert="invert"/>
+
+ <number id="cubesize" type="slider" arg="-cubesize %"
+ _label="Cube size" _low-label="Small" _high-label="Large"
+ low="0.4" high="1.0" default="0.7"/>
+
+ <number id="rotspeed" type="slider" arg="-rotspeed %"
+ _label="Rotation" _low-label="Slow" _high-label="Fast"
+ low="1.0" high="10.0" default="3.0"/>
+
+ <select id="start">
+ <option id="cube" _label="Start as cube" arg-set="-no-randomize"/>
+ <option id="shuffle" _label="Start as random shape"/>
+ </select>
+
+ <select id="colors">
+ <option id="white" _label="White" arg-set="-colormode white"/>
+ <option id="one" _label="Random color" arg-set="-colormode rnd"/>
+ <option id="se" _label="Silver edition" arg-set="-colormode se"/>
+ <option id="two" _label="Two random colors" arg-set="-colormode two"/>
+ <option id="ce" _label="Classic edition" arg-set="-colormode ce"/>
+ <option id="six" _label="Six random colors"/>
+ </select>
+
+ </vgroup>
+ <vgroup>
+
+ <number id="spinspeed" type="slider" arg="-spinspeed %"
+ _label="Spin" _low-label="Slow" _high-label="Fast"
+ low="0.01" high="4.0" default="1.0"/>
+
+ <number id="wanderspeed" type="slider" arg="-wanderspeed %"
+ _label="Wander" _low-label="Slow" _high-label="Fast"
+ low="0.001" high="0.1" default="0.02"/>
+
+ <number id="wait" type="slider" arg="-wait %"
+ _label="Linger" _low-label="Short" _high-label="Long"
+ low="10.0" high="100.0" default="40.0"/>
+
+ <hgroup>
+ <boolean id="spin" _label="Spin" arg-unset="-no-spin"/>
+ <boolean id="wander" _label="Wander" arg-unset="-no-wander"/>
+ <boolean id="tex" _label="Outlines" arg-unset="-no-texture"/>
+ </hgroup>
+ <hgroup>
+ <boolean id="wire" _label="Wireframe" arg-set="-wireframe"/>
+ <boolean id="showfps" _label="Show frame rate" arg-set="-fps"/>
+ </hgroup>
+
+ </vgroup>
+ </hgroup>
+
+ <xscreensaver-updater />
+
+ <_description>
+The "Cube 21" Rubik-like puzzle, also known as "Square-1".
+The rotations are chosen randomly. See also the "Rubik",
+"RubikBlocks" and "GLSnake" screen savers.
+
+https://en.wikipedia.org/wiki/Square_One_%28puzzle%29
+
+Written by Vasek Potocek; 2005.
+ </_description>
+</screensaver>
diff --git a/hacks/config/cubenetic.xml b/hacks/config/cubenetic.xml
new file mode 100644
index 0000000..3907214
--- /dev/null
+++ b/hacks/config/cubenetic.xml
@@ -0,0 +1,67 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="cubenetic" _label="Cubenetic" gl="yes">
+
+ <command arg="-root"/>
+
+ <video href="https://www.youtube.com/watch?v=aElbM0rZZNg"/>
+
+ <hgroup>
+ <vgroup>
+ <number id="delay" type="slider" arg="-delay %"
+ _label="Frame rate" _low-label="Low" _high-label="High"
+ low="0" high="100000" default="20000"
+ convert="invert"/>
+
+ <number id="count" type="slider" arg="-count %"
+ _label="Boxes" _low-label="Few" _high-label="Many"
+ low="1" high="20" default="5"/>
+
+ <hgroup>
+ <boolean id="wander" _label="Wander" arg-unset="-no-wander"/>
+
+ <select id="rotation">
+ <option id="no" _label="Don't rotate" arg-set="-spin 0"/>
+ <option id="x" _label="Rotate around X axis" arg-set="-spin X"/>
+ <option id="y" _label="Rotate around Y axis" arg-set="-spin Y"/>
+ <option id="z" _label="Rotate around Z axis" arg-set="-spin Z"/>
+ <option id="xy" _label="Rotate around X and Y axes" arg-set="-spin XY"/>
+ <option id="xz" _label="Rotate around X and Z axes" arg-set="-spin XZ"/>
+ <option id="yz" _label="Rotate around Y and Z axes" arg-set="-spin YZ"/>
+ <option id="xyz" _label="Rotate around all three axes"/>
+ </select>
+ </hgroup>
+ </vgroup>
+
+ <vgroup>
+ <number id="wave-speed" type="slider" arg="-wave-speed %"
+ _label="Surface pattern speed" _low-label="Slow" _high-label="Fast"
+ low="5" high="150" default="80"/>
+
+ <number id="wave-radius" type="slider" arg="-wave-radius %"
+ _label="Surface pattern overlap"
+ _low-label="Small" _high-label="Large"
+ low="5" high="600" default="512"/>
+
+ <number id="waves" type="slider" arg="-waves %"
+ _label="Surface pattern complexity"
+ _low-label="Low" _high-label="High"
+ low="1" high="20" default="3"/>
+ </vgroup>
+ </hgroup>
+
+ <hgroup>
+ <boolean id="tex" _label="Textured" arg-unset="-no-texture"/>
+ <boolean id="wire" _label="Wireframe" arg-set="-wireframe"/>
+ <boolean id="showfps" _label="Show frame rate" arg-set="-fps"/>
+ </hgroup>
+
+ <xscreensaver-updater />
+
+ <_description>
+A cubist Lavalite, sort of. A pulsating set of overlapping boxes with
+ever-changing blobby patterns undulating across their surfaces.
+
+Written by Jamie Zawinski; 2002.
+ </_description>
+</screensaver>
diff --git a/hacks/config/cubestack.xml b/hacks/config/cubestack.xml
new file mode 100644
index 0000000..68c550e
--- /dev/null
+++ b/hacks/config/cubestack.xml
@@ -0,0 +1,44 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="cubestack" _label="CubeStack" gl="yes">
+
+ <command arg="-root"/>
+
+ <video href="https://www.youtube.com/watch?v=rZi5yav6sRo"/>
+
+ <hgroup>
+ <vgroup>
+ <number id="delay" type="slider" arg="-delay %"
+ _label="Frame rate" _low-label="Low" _high-label="High"
+ low="0" high="100000" default="30000"
+ convert="invert"/>
+
+ <number id="speed" type="slider" arg="-speed %"
+ _label="Animation speed" _low-label="Slow" _high-label="Fast"
+ low="0.1" high="10" default="1.0"/>
+ </vgroup>
+ <vgroup>
+ <number id="thickness" type="slider" arg="-thickness %"
+ _label="Thickness" _low-label="Thin" _high-label="Thick"
+ low="0.0" high="0.5" default="0.13"/>
+
+ <number id="opacity" type="slider" arg="-opacity %"
+ _label="Opacity" _low-label="Transparent" _high-label="Opaque"
+ low="0.01" high="1.0" default="0.7"/>
+ </vgroup>
+ </hgroup>
+
+ <hgroup>
+ <boolean id="wander" _label="Wander" arg-unset="-no-wander"/>
+ <boolean id="wire" _label="Wireframe" arg-set="-wireframe"/>
+ <boolean id="showfps" _label="Show frame rate" arg-set="-fps"/>
+ </hgroup>
+
+ <xscreensaver-updater />
+
+ <_description>
+An endless stack of unfolding, translucent cubes.
+
+Written by Jamie Zawinski; 2016.
+ </_description>
+</screensaver>
diff --git a/hacks/config/cubestorm.xml b/hacks/config/cubestorm.xml
new file mode 100644
index 0000000..533d710
--- /dev/null
+++ b/hacks/config/cubestorm.xml
@@ -0,0 +1,53 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="cubestorm" _label="CubeStorm" gl="yes">
+
+ <command arg="-root"/>
+
+ <video href="https://www.youtube.com/watch?v=enuZbkMiqCE"/>
+
+ <hgroup>
+ <vgroup>
+ <number id="delay" type="slider" arg="-delay %"
+ _label="Frame rate" _low-label="Low" _high-label="High"
+ low="0" high="100000" default="30000"
+ convert="invert"/>
+
+ <number id="speed" type="slider" arg="-speed %"
+ _label="Speed" _low-label="Slow" _high-label="Fast"
+ low="0.01" high="5.0" default="1.0"/>
+
+ <number id="count" type="slider" arg="-count %"
+ _label="Cubes" _low-label="Few" _high-label="Many"
+ low="1" high="20" default="4"/>
+
+ </vgroup>
+ <vgroup>
+
+ <number id="length" type="slider" arg="-length %"
+ _label="Length" _low-label="Short" _high-label="Long"
+ low="20" high="1000" default="200"/>
+
+ <number id="thickness" type="slider" arg="-thickness %"
+ _label="Struts" _low-label="Thin" _high-label="Thick"
+ low="0.01" high="1.0" default="0.06"/>
+
+ <hgroup>
+ <boolean id="wander" _label="Wander" arg-unset="-no-wander"/>
+ <boolean id="spin" _label="Spin" arg-unset="-no-spin"/>
+ <boolean id="wire" _label="Wireframe" arg-set="-wireframe"/>
+ </hgroup>
+
+ </vgroup>
+ </hgroup>
+
+ <boolean id="showfps" _label="Show frame rate" arg-set="-fps"/>
+
+ <xscreensaver-updater />
+
+ <_description>
+Boxes change shape and intersect each other, filling space.
+
+Written by Jamie Zawinski; 2003.
+ </_description>
+</screensaver>
diff --git a/hacks/config/cubetwist.xml b/hacks/config/cubetwist.xml
new file mode 100644
index 0000000..00f54b8
--- /dev/null
+++ b/hacks/config/cubetwist.xml
@@ -0,0 +1,46 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="cubetwist" _label="CubeTwist" gl="yes">
+
+ <command arg="-root"/>
+
+ <video href="https://www.youtube.com/watch?v=RjrtUtMEa_4"/>
+
+ <hgroup>
+ <vgroup>
+ <number id="delay" type="slider" arg="-delay %"
+ _label="Frame rate" _low-label="Low" _high-label="High"
+ low="0" high="100000" default="30000"
+ convert="invert"/>
+
+ <number id="speed" type="slider" arg="-speed %"
+ _label="Animation speed" _low-label="Slow" _high-label="Fast"
+ low="0.1" high="10" default="1.0"/>
+ </vgroup>
+ <vgroup>
+ <number id="thickness" type="slider" arg="-thickness %"
+ _label="Thickness" _low-label="Thin" _high-label="Thick"
+ low="0.0" high="0.5" default="0.0"/>
+
+ <number id="displacement" type="slider" arg="-displacement %"
+ _label="Displacement" _low-label="Tight" _high-label="Wide"
+ low="0.0" high="0.5" default="0.0"/>
+ </vgroup>
+ </hgroup>
+
+ <hgroup>
+ <boolean id="flat" _label="Flat shading" arg-unset="-no-flat"/>
+ <boolean id="wander" _label="Wander" arg-unset="-no-wander"/>
+ <boolean id="spin" _label="Spin" arg-unset="-no-spin"/>
+ <boolean id="wire" _label="Wireframe" arg-set="-wireframe"/>
+ <boolean id="showfps" _label="Show frame rate" arg-set="-fps"/>
+ </hgroup>
+
+ <xscreensaver-updater />
+
+ <_description>
+A series of nested cubes rotate and slide recursively.
+
+Written by Jamie Zawinski; 2016.
+ </_description>
+</screensaver>
diff --git a/hacks/config/cubicgrid.xml b/hacks/config/cubicgrid.xml
new file mode 100644
index 0000000..b8a90a8
--- /dev/null
+++ b/hacks/config/cubicgrid.xml
@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="cubicgrid" _label="CubicGrid" gl="yes">
+
+ <command arg="-root"/>
+
+ <video href="https://www.youtube.com/watch?v=nOTi7gy9l-I"/>
+
+ <number id="delay" type="slider" arg="-delay %"
+ _label="Frame rate" _low-label="Low" _high-label="High"
+ low="0" high="100000" default="20000" convert="invert"/>
+
+ <number id="speed" type="slider" arg="-speed %"
+ _label="Speed" _low-label="Slow" _high-label="Fast"
+ low="0.2" high="10.0" default="1.0"/>
+
+ <number id="zoom" type="slider" arg="-zoom %"
+ _label="Dot spacing" _low-label="Close" _high-label="Far"
+ low="15" high="100" default="20"/>
+
+ <boolean id="bigdots" _label="Big dots" arg-unset="-no-bigdots"/>
+ <boolean id="showfps" _label="Show frame rate" arg-set="-fps"/>
+
+ <xscreensaver-updater />
+
+ <_description>
+A rotating lattice of colored points.
+
+Written by Vasek Potocek; 2007.
+ </_description>
+</screensaver>
diff --git a/hacks/config/cwaves.xml b/hacks/config/cwaves.xml
new file mode 100644
index 0000000..b18f365
--- /dev/null
+++ b/hacks/config/cwaves.xml
@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="cwaves" _label="CWaves">
+
+ <command arg="-root"/>
+
+ <video href="https://www.youtube.com/watch?v=yOuJqiDUrpY"/>
+
+ <number id="delay" type="slider" arg="-delay %"
+ _label="Frame rate" _low-label="Low" _high-label="High"
+ low="0" high="100000" default="20000"
+ convert="invert"/>
+
+ <number id="waves" type="slider" arg="-waves %"
+ _label="Complexity" _low-label="Low" _high-label="High"
+ low="1" high="100" default="15"/>
+
+ <number id="ncolors" type="slider" arg="-colors %"
+ _label="Color transitions" _low-label="Rough" _high-label="Smooth"
+ low="2" high="1000" default="600"/>
+
+ <boolean id="showfps" _label="Show frame rate" arg-set="-fps"/>
+
+ <xscreensaver-updater />
+
+ <_description>
+A field of sinusoidal colors languidly scrolls. It's relaxing.
+
+Written by Jamie Zawinski; 2007.
+ </_description>
+</screensaver>
diff --git a/hacks/config/cynosure.xml b/hacks/config/cynosure.xml
new file mode 100644
index 0000000..c81130d
--- /dev/null
+++ b/hacks/config/cynosure.xml
@@ -0,0 +1,32 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="cynosure" _label="Cynosure">
+
+ <command arg="-root"/>
+
+ <video href="https://www.youtube.com/watch?v=If7FOc8UnYs"/>
+
+ <number id="delay" type="slider" arg="-delay %"
+ _label="Frame rate" _low-label="Low" _high-label="High"
+ low="0" high="1000000" default="500000"
+ convert="invert"/>
+
+ <number id="ncolors" type="slider" arg="-ncolors %"
+ _label="Number of colors" _low-label="Two" _high-label="Many"
+ low="2" high="255" default="128"/>
+
+ <number id="iterations" type="slider" arg="-iterations %"
+ _label="Duration" _low-label="Short" _high-label="Long"
+ low="2" high="200" default="100"/>
+
+
+ <boolean id="showfps" _label="Show frame rate" arg-set="-fps"/>
+
+ <xscreensaver-updater />
+
+ <_description>
+Random dropshadowed rectangles pop onto the screen in lockstep.
+
+Written by Ozymandias G. Desiderata, Jamie Zawinski, and Stephen Linhart; 1998.
+ </_description>
+</screensaver>
diff --git a/hacks/config/dangerball.xml b/hacks/config/dangerball.xml
new file mode 100644
index 0000000..12bbac5
--- /dev/null
+++ b/hacks/config/dangerball.xml
@@ -0,0 +1,37 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="dangerball" _label="DangerBall" gl="yes">
+
+ <command arg="-root"/>
+
+ <video href="https://www.youtube.com/watch?v=QU0aPwWwHbg"/>
+
+ <number id="delay" type="slider" arg="-delay %"
+ _label="Frame rate" _low-label="Low" _high-label="High"
+ low="0" high="100000" default="30000"
+ convert="invert"/>
+
+ <number id="spikespeed" type="slider" arg="-speed %"
+ _label="Spike growth" _low-label="Slow" _high-label="Fast"
+ low="0.001" high="0.25" default="0.05"/>
+
+ <number id="count" type="slider" arg="-count %"
+ _label="Number of spikes" _low-label="Few" _high-label="Ouch"
+ low="1" high="100" default="30"/>
+
+ <hgroup>
+ <boolean id="wander" _label="Wander" arg-unset="-no-wander"/>
+ <boolean id="spin" _label="Spin" arg-unset="-no-spin"/>
+ <boolean id="wire" _label="Wireframe" arg-set="-wireframe"/>
+ </hgroup>
+
+ <boolean id="showfps" _label="Show frame rate" arg-set="-fps"/>
+
+ <xscreensaver-updater />
+
+ <_description>
+A spiky ball. Ouch!
+
+Written by Jamie Zawinski; 2001.
+ </_description>
+</screensaver>
diff --git a/hacks/config/decayscreen.xml b/hacks/config/decayscreen.xml
new file mode 100644
index 0000000..93d85b3
--- /dev/null
+++ b/hacks/config/decayscreen.xml
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="decayscreen" _label="DecayScreen">
+
+ <command arg="-root"/>
+
+ <video href="https://www.youtube.com/watch?v=dFlyRTObuDo"/>
+
+ <number id="delay" type="slider" arg="-delay %"
+ _label="Frame rate" _low-label="Low" _high-label="High"
+ low="0" high="100000" default="10000"
+ convert="invert"/>
+
+ <number id="duration" type="slider" arg="-duration %"
+ _label="Duration" _low-label="10 seconds" _high-label="10 minutes"
+ low="10" high="600" default="120"/>
+
+ <select id="mode">
+ <option id="random" _label="Random melt style"/>
+ <option id="random" _label="Shuffle melt" arg-set="-mode shuffle"/>
+ <option id="random" _label="Melt up" arg-set="-mode up"/>
+ <option id="random" _label="Melt down" arg-set="-mode down"/>
+ <option id="random" _label="Melt left" arg-set="-mode left"/>
+ <option id="random" _label="Melt right" arg-set="-mode right"/>
+ <option id="random" _label="Melt up, left" arg-set="-mode upleft"/>
+ <option id="random" _label="Melt up, right" arg-set="-mode upright"/>
+ <option id="random" _label="Melt down, left" arg-set="-mode downleft"/>
+ <option id="random" _label="Melt down, right" arg-set="-mode downright"/>
+ <option id="random" _label="Melt towards center" arg-set="-mode in"/>
+ <option id="random" _label="Melt away from center" arg-set="-mode out"/>
+ <option id="random" _label="Melty melt" arg-set="-mode melt"/>
+ <option id="random" _label="Stretchy melt" arg-set="-mode stretch"/>
+ <option id="random" _label="Fuzzy melt" arg-set="-mode fuzz"/>
+ </select>
+
+ <xscreensaver-image />
+
+ <boolean id="showfps" _label="Show frame rate" arg-set="-fps"/>
+
+ <xscreensaver-updater />
+
+ <_description>
+Melts an image in various ways. Warning, if the effect continues after
+the screen saver is off, seek medical attention.
+
+Written by David Wald, Vivek Khera, Jamie Zawinski, and Vince Levey; 1993.
+ </_description>
+</screensaver>
diff --git a/hacks/config/deco.xml b/hacks/config/deco.xml
new file mode 100644
index 0000000..b5347cf
--- /dev/null
+++ b/hacks/config/deco.xml
@@ -0,0 +1,45 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="deco" _label="Deco">
+
+ <command arg="-root"/>
+
+ <video href="https://www.youtube.com/watch?v=kfdDTv07Nhw"/>
+
+ <number id="delay" type="slider" arg="-delay %"
+ _label="Duration" _low-label="1 second" _high-label="1 minute"
+ low="1" high="60" default="5"/>
+
+ <number id="ncolors" type="slider" arg="-ncolors %"
+ _label="Number of colors" _low-label="Two" _high-label="Many"
+ low="1" high="255" default="64"/>
+
+ <hgroup>
+ <vgroup>
+ <number id="minwidth" type="spinbutton" arg="-min-width %"
+ _label="Minimum width" low="1" high="100" default="20"/>
+
+ <number id="minheight" type="spinbutton" arg="-min-height %"
+ _label="Minimum height" low="1" high="100" default="20"/>
+
+ <number id="maxdepth" type="spinbutton" arg="-max-depth %"
+ _label="Maximum depth" low="1" high="40" default="12"/>
+ </vgroup>
+ <vgroup>
+ <boolean id="smooth-colors" _label="Smooth colors" arg-set="-smooth-colors"/>
+ <boolean id="golden-ratio" _label="Golden ratio" arg-set="-golden-ratio"/>
+ <boolean id="mondrian" _label="Mondrian" arg-set="-mondrian"/>
+ <boolean id="showfps" _label="Show frame rate" arg-set="-fps"/>
+ </vgroup>
+ </hgroup>
+
+ <xscreensaver-updater />
+
+ <_description>
+Subdivides and colors rectangles randomly, for a Mondrian-esque effect.
+
+https://en.wikipedia.org/wiki/Piet_Mondrian#Paris_1919.E2.80.931938
+
+Written by Jamie Zawinski and Michael Bayne; 1997.
+ </_description>
+</screensaver>
diff --git a/hacks/config/deluxe.xml b/hacks/config/deluxe.xml
new file mode 100644
index 0000000..0cd4746
--- /dev/null
+++ b/hacks/config/deluxe.xml
@@ -0,0 +1,39 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="deluxe" _label="Deluxe">
+
+ <command arg="-root"/>
+
+ <video href="https://www.youtube.com/watch?v=2CsKEVR3ecs"/>
+
+ <number id="delay" type="slider" arg="-delay %"
+ _label="Frame rate" _low-label="Low" _high-label="High"
+ low="0" high="50000" default="10000"
+ convert="invert"/>
+
+ <number id="thickness" type="slider" arg="-thickness %"
+ _label="Lines" _low-label="Thin" _high-label="Thick"
+ low="1" high="150" default="50"/>
+
+ <number id="count" type="slider" arg="-count %"
+ _label="Shapes" _low-label="1" _high-label="20"
+ low="1" high="20" default="5"/>
+
+ <number id="ncolors" type="slider" arg="-ncolors %"
+ _label="Number of colors" _low-label="Two" _high-label="Many"
+ low="1" high="255" default="20"/>
+
+ <!-- #### -speed [15] -->
+
+ <boolean id="transparent" _label="Transparency" arg-unset="-no-transparent"/>
+
+ <boolean id="showfps" _label="Show frame rate" arg-set="-fps"/>
+
+ <xscreensaver-updater />
+
+ <_description>
+Pulsing stars, circles, and lines.
+
+Written by Jamie Zawinski; 1999.
+ </_description>
+</screensaver>
diff --git a/hacks/config/demon.xml b/hacks/config/demon.xml
new file mode 100644
index 0000000..bd78bf1
--- /dev/null
+++ b/hacks/config/demon.xml
@@ -0,0 +1,41 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="demon" _label="Demon">
+
+ <command arg="-root"/>
+
+ <video href="https://www.youtube.com/watch?v=OhHI-pIHddA"/>
+
+ <number id="delay" type="slider" arg="-delay %"
+ _label="Frame rate" _low-label="Low" _high-label="High"
+ low="0" high="100000" default="50000"
+ convert="invert"/>
+
+ <number id="count" type="slider" arg="-count %"
+ _label="States" _low-label="0" _high-label="20"
+ low="0" high="20" default="0"/>
+
+ <number id="cycles" type="slider" arg="-cycles %"
+ _label="Timeout" _low-label="Small" _high-label="Large"
+ low="0" high="800000" default="1000"/>
+
+ <number id="ncolors" type="slider" arg="-ncolors %"
+ _label="Number of colors" _low-label="Two" _high-label="Many"
+ low="1" high="255" default="64"/>
+
+ <number id="size" type="spinbutton" arg="-size %"
+ _label="Cell size" low="-40" high="40" default="-30"/>
+
+ <boolean id="showfps" _label="Show frame rate" arg-set="-fps"/>
+
+ <xscreensaver-updater />
+
+ <_description>
+A cellular automaton that starts with a random field, and organizes
+it into stripes and spirals.
+
+https://en.wikipedia.org/wiki/Maxwell%27s_demon
+
+Written by David Bagley; 1999.
+ </_description>
+</screensaver>
diff --git a/hacks/config/discoball.xml b/hacks/config/discoball.xml
new file mode 100644
index 0000000..61ed94c
--- /dev/null
+++ b/hacks/config/discoball.xml
@@ -0,0 +1,37 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="discoball" _label="Discoball" gl="yes">
+
+ <command arg="-root"/>
+
+ <video href="https://www.youtube.com/watch?v=8yd4PYJQrMw"/>
+
+ <number id="delay" type="slider" arg="-delay %"
+ _label="Frame rate" _low-label="Low" _high-label="High"
+ low="0" high="100000" default="30000"
+ convert="invert"/>
+
+ <number id="speed" type="slider" arg="-speed %"
+ _label="Speed" _low-label="Slow" _high-label="Fast"
+ low="0.1" high="5" default="1.0"/>
+
+ <number id="count" type="slider" arg="-count %"
+ _label="Size" _low-label="Small" _high-label="Large"
+ low="10" high="100" default="30"/>
+
+ <hgroup>
+ <boolean id="wander" _label="Wander" arg-unset="-no-wander"/>
+ <boolean id="spin" _label="Spin" arg-set="-spin"/>
+ <boolean id="wire" _label="Wireframe" arg-set="-wireframe"/>
+ </hgroup>
+
+ <boolean id="showfps" _label="Show frame rate" arg-set="-fps"/>
+
+ <xscreensaver-updater />
+
+ <_description>
+A dusty, dented disco ball. Woop woop.
+
+Written by Jamie Zawinski; 2016.
+ </_description>
+</screensaver>
diff --git a/hacks/config/discrete.xml b/hacks/config/discrete.xml
new file mode 100644
index 0000000..01c7d4f
--- /dev/null
+++ b/hacks/config/discrete.xml
@@ -0,0 +1,32 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="discrete" _label="Discrete">
+
+ <command arg="-root"/>
+
+ <video href="https://www.youtube.com/watch?v=l-yIY8vRlHA"/>
+
+ <number id="delay" type="slider" arg="-delay %"
+ _label="Frame rate" _low-label="Low" _high-label="High"
+ low="0" high="100000" default="20000"
+ convert="invert"/>
+
+ <number id="cycles" type="slider" arg="-cycles %"
+ _label="Timeout" _low-label="Small" _high-label="Large"
+ low="100" high="10000" default="2500"/>
+
+ <number id="ncolors" type="slider" arg="-ncolors %"
+ _label="Number of colors" _low-label="Two" _high-label="Many"
+ low="1" high="255" default="100"/>
+
+ <boolean id="showfps" _label="Show frame rate" arg-set="-fps"/>
+
+ <xscreensaver-updater />
+
+ <_description>
+Discrete map fractal systems, including variants of Hopalong, Julia,
+and others.
+
+Written by Tim Auckland; 1998.
+ </_description>
+</screensaver>
diff --git a/hacks/config/distort.xml b/hacks/config/distort.xml
new file mode 100644
index 0000000..ab06ae1
--- /dev/null
+++ b/hacks/config/distort.xml
@@ -0,0 +1,53 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="distort" _label="Distort">
+
+ <command arg="-root"/>
+
+ <video href="https://www.youtube.com/watch?v=ENaG3gwtukM"/>
+
+ <number id="delay" type="slider" arg="-delay %"
+ _label="Frame rate" _low-label="Low" _high-label="High"
+ low="0" high="200000" default="20000"
+ convert="invert"/>
+
+ <number id="duration" type="slider" arg="-duration %"
+ _label="Duration" _low-label="10 seconds" _high-label="10 minutes"
+ low="10" high="600" default="120"/>
+
+ <!-- #### -speed [0] -->
+ <!-- #### -slow -->
+
+ <number id="radius" type="slider" arg="-radius %"
+ _label="Lens size" _low-label="Small" _high-label="Large"
+ low="0" high="1000" default="0"/>
+
+ <hgroup>
+ <number id="count" type="spinbutton" arg="-number %"
+ _label="Lens count" low="0" high="10" default="0"/>
+
+ <select id="effect">
+ <option id="normal" _label="Normal"/>
+ <option id="swamp" _label="Swamp thing" arg-set="-effect swamp"/>
+ <option id="bounce" _label="Bounce" arg-set="-effect bounce"/>
+ </select>
+ </hgroup>
+
+ <hgroup>
+ <boolean id="reflect" _label="Reflect" arg-set="-reflect"/>
+ <boolean id="magnify" _label="Magnify" arg-set="-magnify"/>
+ <boolean id="blackhole" _label="Black hole" arg-set="-blackhole"/>
+ <boolean id="vortex" _label="Vortex" arg-set="-vortex"/>
+ <boolean id="showfps" _label="Show frame rate" arg-set="-fps"/>
+ </hgroup>
+
+ <xscreensaver-image />
+
+ <xscreensaver-updater />
+
+ <_description>
+Wandering lenses distort the screen image in various ways.
+
+Written by Jonas Munsin; 1998.
+ </_description>
+</screensaver>
diff --git a/hacks/config/dnalogo.xml b/hacks/config/dnalogo.xml
new file mode 100644
index 0000000..ac10f15
--- /dev/null
+++ b/hacks/config/dnalogo.xml
@@ -0,0 +1,50 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="dnalogo" _label="DNA Logo" gl="yes">
+
+ <command arg="-root"/>
+
+ <video href="https://www.youtube.com/watch?v=B7I5A7E3SP0"/>
+
+ <number id="delay" type="slider" arg="-delay %"
+ _label="Frame Rate" _low-label="Low" _high-label="High"
+ low="0" high="100000" default="25000"
+ convert="invert"/>
+
+ <select id="mode">
+ <option id="glyph" _label="DNA Lounge logo" arg-set="-mode helix"/>
+ <option id="pizza" _label="DNA Pizza logo" arg-set="-mode pizza"/>
+ <option id="both" _label="DNA Lounge and DNA Pizza logos"/>
+<!--<option id="codeword" _label="Codeword logo" arg-set="-mode codeword"/>-->
+ </select>
+ <hgroup>
+ <boolean id="wire" _label="Wireframe" arg-set="-wireframe"/>
+ <boolean id="showfps" _label="Show frame rate" arg-set="-fps"/>
+ </hgroup>
+
+ <xscreensaver-updater />
+
+ <_description>
+DNA Lounge
+
+ Restaurant -- Bar -- Nightclub -- Cafe -- Est. 1985.
+
+ 375 Eleventh Street
+ San Francisco, CA
+ 94103
+
+Codeword
+
+ Restaurant -- Bar -- Nightclub -- Cafe -- Est. 2015.
+
+ 917 Folsom Street
+ San Francisco, CA
+ 94107
+
+ https://www.dnalounge.com/
+ http://www.dnapizza.com/
+ https://www.codeword-sf.com/
+
+Written by Jamie Zawinski; 2001.
+ </_description>
+</screensaver>
diff --git a/hacks/config/drift.xml b/hacks/config/drift.xml
new file mode 100644
index 0000000..9eda2b4
--- /dev/null
+++ b/hacks/config/drift.xml
@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="drift" _label="Drift">
+
+ <command arg="-root"/>
+
+ <video href="https://www.youtube.com/watch?v=cppZgCh6U7I"/>
+
+ <number id="delay" type="slider" arg="-delay %"
+ _label="Frame rate" _low-label="Low" _high-label="High"
+ low="0" high="100000" default="10000"
+ convert="invert"/>
+
+ <number id="count" type="slider" arg="-count %"
+ _label="Duration" _low-label="Short" _high-label="Long"
+ low="1" high="200" default="30"/>
+
+ <number id="ncolors" type="slider" arg="-ncolors %"
+ _label="Number of colors" _low-label="Two" _high-label="Many"
+ low="1" high="255" default="200"/>
+
+ <boolean id="showfps" _label="Show frame rate" arg-set="-fps"/>
+
+ <xscreensaver-updater />
+
+ <_description>
+Drifting recursive fractal cosmic flames.
+
+Written by Scott Draves; 1997.
+ </_description>
+</screensaver>
diff --git a/hacks/config/dymaxionmap.xml b/hacks/config/dymaxionmap.xml
new file mode 100644
index 0000000..6f846c7
--- /dev/null
+++ b/hacks/config/dymaxionmap.xml
@@ -0,0 +1,79 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="dymaxionmap" _label="DymaxionMap" gl="yes">
+
+ <command arg="-root"/>
+
+ <video href="https://www.youtube.com/watch?v=4LnO0UiccGs"/>
+
+ <hgroup>
+ <vgroup>
+ <number id="delay" type="slider" arg="-delay %"
+ _label="Frame rate" _low-label="Low" _high-label="High"
+ low="0" high="100000" default="20000"
+ convert="invert"/>
+ <number id="speed" type="slider" arg="-speed %"
+ _label="Animation speed" _low-label="Slow" _high-label="Fast"
+ low="0.05" high="10.0" default="1.0"/>
+ </vgroup>
+ <vgroup>
+
+ <hgroup>
+ <select id="map">
+ <option id="flat" _label="Flat map"/>
+ <option id="day" _label="Satellite map" arg-set="-image BUILTIN_SAT"/>
+ </select>
+
+ <!-- <file id="image" _label="Image file" arg="-image %"/> -->
+ </hgroup>
+
+ <number id="frames" type="slider" arg="-frames %"
+ _label="Day / night smoothness" _low-label="Low" _high-label="High"
+ low="24" high="1440" default="720"/>
+ </vgroup>
+ </hgroup>
+ <hgroup>
+
+ <vgroup>
+ <hgroup>
+ <boolean id="stars" _label="Stars" arg-unset="-no-stars"/>
+ <boolean id="grid" _label="Lat / Long" arg-unset="-no-grid"/>
+ <boolean id="wander" _label="Wander" arg-unset="-no-wander"/>
+ <boolean id="roll" _label="Roll" arg-unset="-no-roll"/>
+ <boolean id="wire" _label="Wireframe" arg-set="-wireframe"/>
+ <boolean id="showfps" _label="Show frame rate" arg-set="-fps"/>
+ </hgroup>
+
+ <xscreensaver-updater />
+
+ </vgroup>
+ </hgroup>
+
+ <_description>
+Buckminster Fuller's map of the Earth projected onto the surface of
+an unfolded icosahedron. It depicts the Earth's continents as one
+island, or nearly contiguous land masses.
+
+This screen saver animates the progression of the dusk terminator across
+the flattened globe. It includes both satellite and flat-colored map
+imagery, and can load and convert other Equirectangular-projected maps.
+
+"Dymaxion Map" and "The Fuller Projection Map" are trademarks of
+The Buckminster Fuller Institute.
+
+The original Dymaxion Map image is copyright 1982 by
+The Buckminster Fuller Institute. (This program does not use their
+imagery, only similar trigonometry.)
+
+The Dymaxion Map was covered by now-expired US Patent 2,393,676
+(Richard Buckminster Fuller, 1946).
+
+https://en.wikipedia.org/wiki/Dymaxion_map
+https://en.wikipedia.org/wiki/Buckminster_Fuller
+https://en.wikipedia.org/wiki/List_of_map_projections
+https://en.wikipedia.org/wiki/Cahill%E2%80%93Keyes_projection
+https://en.wikipedia.org/wiki/Waterman_butterfly_projection
+
+Written by Jamie Zawinski; 2016.
+ </_description>
+</screensaver>
diff --git a/hacks/config/endgame.xml b/hacks/config/endgame.xml
new file mode 100644
index 0000000..88eac22
--- /dev/null
+++ b/hacks/config/endgame.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="endgame" _label="Endgame" gl="yes">
+
+ <command arg="-root"/>
+
+ <video href="https://www.youtube.com/watch?v=QfglC_lvUTA"/>
+
+ <number id="delay" type="slider" arg="-delay %"
+ _label="Frame rate" _low-label="Low" _high-label="High"
+ low="0" high="100000" default="20000"
+ convert="invert"/>
+
+ <boolean id="classic" _label="Low resolution chess pieces" arg-set="-classic"/>
+ <boolean id="showfps" _label="Show frame rate" arg-set="-fps"/>
+
+ <xscreensaver-updater />
+
+ <_description>
+Black slips out of three mating nets, but the fourth one holds him tight!
+A brilliant composition!
+
+See also the "Queens" screen saver.
+
+https://en.wikipedia.org/wiki/Chess_endgame
+
+Written by Blair Tennessy and Jamie Zawinski; 2002.
+ </_description>
+</screensaver>
diff --git a/hacks/config/energystream.xml b/hacks/config/energystream.xml
new file mode 100644
index 0000000..a3c034f
--- /dev/null
+++ b/hacks/config/energystream.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="energystream" _label="EnergyStream" gl="yes">
+
+ <command arg="-root"/>
+
+ <video href="https://www.youtube.com/watch?v=TbWZ6v5Zzk8"/>
+
+ <number id="speed" type="slider" arg="-speed %"
+ _label="Speed" _low-label="Slow" _high-label="Fast"
+ low="0.01" high="5.0" default="1.0"/>
+
+ <hgroup>
+ <boolean id="wander" _label="Wander" arg-unset="-wander" />
+ <boolean id="spin" _label="Spin" arg-unset="-spin" />
+ <boolean id="showfps" _label="Show frame rate" arg-set="-fps"/>
+ </hgroup>
+
+ <xscreensaver-updater />
+
+ <_description>
+A flow of particles which form an energy stream.
+
+Written by Eugene Sandulenko and Konrad "Yoghurt" Zagorowicz; 2016.
+ </_description>
+</screensaver>
diff --git a/hacks/config/engine.xml b/hacks/config/engine.xml
new file mode 100644
index 0000000..5c91d28
--- /dev/null
+++ b/hacks/config/engine.xml
@@ -0,0 +1,44 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="engine" _label="Engine" gl="yes">
+
+ <command arg="-root"/>
+
+ <video href="https://www.youtube.com/watch?v=8BL2o8QJmiA"/>
+
+ <number id="delay" type="slider" arg="-delay %"
+ _label="Frame rate" _low-label="Low" _high-label="High"
+ low="0" high="100000" default="30000"
+ convert="invert"/>
+
+ <select id="engine">
+ <option id="random" _label="Random engine"/>
+ <option id="1" _label="Honda Insight (3 cylinders)" arg-set="-engine honda_insight"/>
+ <option id="2" _label="BMW M3 (4 cylinders)" arg-set="-engine bmw_m3"/>
+ <option id="3" _label="VW Beetle (4 cylinders, flat)" arg-set="-engine vw_beetle"/>
+ <option id="4" _label="Audi Quattro (5 cylinders)" arg-set="-engine audi_quattro"/>
+ <option id="5" _label="BMW M5 (6 cylinders)" arg-set="-engine bmw_m5"/>
+ <option id="6" _label="Subaru XT (6 cylinders, V)" arg-set="-engine subaru_xt"/>
+ <option id="7" _label="Porsche 911 (6 cylinders, flat)" arg-set="-engine porsche_911"/>
+ <option id="8" _label="Corvette Z06 (8 cylinders, V)" arg-set="-engine corvette_z06"/>
+ <option id="9" _label="Dodge Viper (10 cylinders, V)" arg-set="-engine dodge_viper"/>
+ <option id="10" _label="Jaguar XKE (12 cylinders, V)" arg-set="-engine jaguar_xke"/>
+ </select>
+
+ <boolean id="titles" _label="Show engine name" arg-set="-titles"/>
+ <hgroup>
+ <boolean id="wander" _label="Wander" arg-unset="-no-move"/>
+ <boolean id="spin" _label="Spin" arg-unset="-no-spin"/>
+ </hgroup>
+ <boolean id="showfps" _label="Show frame rate" arg-set="-fps"/>
+
+ <xscreensaver-updater />
+
+ <_description>
+Internal combusion engines.
+
+https://en.wikipedia.org/wiki/Internal_combustion_engine#Operation
+
+Written by Ben Buxton, Ed Beroset and Jamie Zawinski; 2001.
+ </_description>
+</screensaver>
diff --git a/hacks/config/epicycle.xml b/hacks/config/epicycle.xml
new file mode 100644
index 0000000..0b56922
--- /dev/null
+++ b/hacks/config/epicycle.xml
@@ -0,0 +1,57 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="epicycle" _label="Epicycle">
+
+ <command arg="-root"/>
+
+ <video href="https://www.youtube.com/watch?v=rpk3zxQxaR8"/>
+
+ <number id="delay" type="slider" arg="-delay %"
+ _label="Frame rate" _low-label="Low" _high-label="High"
+ low="0" high="100000" default="20000"
+ convert="invert"/>
+
+ <number id="ncolors" type="slider" arg="-colors %"
+ _label="Number of colors" _low-label="Two" _high-label="Many"
+ low="1" high="255" default="100"/>
+
+ <number id="holdtime" type="slider" arg="-holdtime %"
+ _label="Linger" _low-label="1 second" _high-label="30 seconds"
+ low="1" high="30" default="2"/>
+
+ <hgroup>
+ <number id="linewidth" type="spinbutton" arg="-linewidth %"
+ _label="Line thickness" low="1" high="50" default="4"/>
+
+ <number id="harmonics" type="spinbutton" arg="-harmonics %"
+ _label="Harmonics" low="1" high="20" default="8"/>
+ </hgroup>
+
+ <!-- #### -color0 [red] -->
+ <!-- #### -colours [100] -->
+ <!-- #### -foreground [white] -->
+ <!-- #### -min_circles [2] -->
+ <!-- #### -max_circles [10] -->
+ <!-- #### -min_speed [0.003] -->
+ <!-- #### -max_speed [0.005] -->
+ <!-- #### -timestep [1.0] -->
+ <!-- #### -divisor_poisson [0.4] -->
+ <!-- #### -size_factor_min [1.05] -->
+ <!-- #### -size_factor_max [2.05] -->
+
+ <boolean id="showfps" _label="Show frame rate" arg-set="-fps"/>
+
+ <xscreensaver-updater />
+
+ <_description>
+A pre-heliocentric model of planetary motion.
+
+This draws the path traced out by a point on the edge of a
+circle. That circle rotates around a point on the rim of another
+circle, and so on, several times.
+
+https://en.wikipedia.org/wiki/Deferent_and_epicycle
+
+Written by James Youngman; 1998.
+ </_description>
+</screensaver>
diff --git a/hacks/config/eruption.xml b/hacks/config/eruption.xml
new file mode 100644
index 0000000..da778fe
--- /dev/null
+++ b/hacks/config/eruption.xml
@@ -0,0 +1,53 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="eruption" _label="Eruption">
+
+ <command arg="-root"/>
+
+ <video href="https://www.youtube.com/watch?v=CQ6jDBnumT8"/>
+
+ <hgroup>
+ <vgroup>
+ <number id="delay" type="slider" arg="-delay %"
+ _label="Frame rate" _low-label="Low" _high-label="High"
+ low="0" high="100000" default="10000"
+ convert="invert"/>
+
+ <number id="ncolors" type="slider" arg="-ncolors %"
+ _label="Number of colors" _low-label="Few" _high-label="Many"
+ low="16" high="256" default="256"/>
+
+ <number id="nparticles" type="slider" arg="-particles %"
+ _label="Number of particles" _low-label="Little" _high-label="Many"
+ low="100" high="2000" default="300"/>
+
+ <number id="cooloff" type="slider" arg="-cooloff %"
+ _label="Cooling factor" _low-label="Slow" _high-label="Fast"
+ low="0" high="10" default="2"/>
+ </vgroup>
+ <vgroup>
+ <number id="heat" type="slider" arg="-heat %"
+ _label="Heat" _low-label="Pleasant" _high-label="Inferno"
+ low="64" high="256" default="256"/>
+
+ <number id="gravity" type="slider" arg="-gravity %"
+ _label="Gravity" _low-label="Negative" _high-label="Positive"
+ low="-5" high="5" default="1"/>
+
+ <number id="cycles" type="slider" arg="-cycles %"
+ _label="Duration" _low-label="Short" _high-label="Long"
+ low="10" high="3000" default="80"/>
+
+ <boolean id="showfps" _label="Show frame rate" arg-set="-fps"/>
+ </vgroup>
+ </hgroup>
+
+ <xscreensaver-updater />
+
+ <_description>
+Exploding fireworks. See also the "Fireworkx", "XFlame" and "Pyro"
+screen savers.
+
+Written by W.P. van Paassen; 2003.
+ </_description>
+</screensaver>
diff --git a/hacks/config/esper.xml b/hacks/config/esper.xml
new file mode 100644
index 0000000..e91bb51
--- /dev/null
+++ b/hacks/config/esper.xml
@@ -0,0 +1,46 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="esper" _label="Esper" gl="yes">
+
+ <command arg="-root"/>
+
+ <video href="https://www.youtube.com/watch?v=_er7xZd7zUU"/>
+
+ <hgroup>
+ <vgroup>
+ <number id="delay" type="slider" arg="-delay %"
+ _label="Frame rate" _low-label="Low" _high-label="High"
+ low="0" high="100000" default="20000"
+ convert="invert"/>
+
+ <number id="speed" type="slider" arg="-speed %"
+ _label="Speed" _low-label="Slow" _high-label="Fast"
+ low="0.2" high="20" default="1.0"/>
+
+ </vgroup>
+ <vgroup>
+
+ <boolean id="titles" _label="Show file names" arg-unset="-no-titles"/>
+ <boolean id="showfps" _label="Show frame rate" arg-set="-fps"/>
+
+ <xscreensaver-image />
+
+ <xscreensaver-updater />
+
+ </vgroup>
+ </hgroup>
+
+ <_description>
+"Enhance 224 to 176. Pull out track right. Center in pull back. Pull
+back. Wait a minute. Go right. Stop. Enhance 57 19. Track 45 left.
+Gimme a hardcopy right there."
+
+The Esper Machine was a voice-controlled forensic device used by LAPD
+in 2019, as documented in the 1982 film, Blade Runner. It was capable
+of enhancing photographs to an extreme degree, including reconstructing
+different viewpoints within the space from the reflections on various
+objects in the photograph.
+
+Written by Jamie Zawinski; 2017.
+ </_description>
+</screensaver>
diff --git a/hacks/config/euler2d.xml b/hacks/config/euler2d.xml
new file mode 100644
index 0000000..31222e6
--- /dev/null
+++ b/hacks/config/euler2d.xml
@@ -0,0 +1,53 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="euler2d" _label="Euler2D">
+
+ <command arg="-root"/>
+
+ <video href="https://www.youtube.com/watch?v=ZH1ZtfId0iA"/>
+
+ <hgroup>
+ <vgroup>
+ <number id="delay" type="slider" arg="-delay %"
+ _label="Frame rate" _low-label="Low" _high-label="High"
+ low="0" high="100000" default="10000"
+ convert="invert"/>
+
+ <number id="count" type="slider" arg="-count %"
+ _label="Particles" _low-label="Few" _high-label="Many"
+ low="2" high="5000" default="1024"/>
+
+ <number id="eulertail" type="slider" arg="-eulertail %"
+ _label="Trail length" _low-label="Short" _high-label="Long"
+ low="2" high="500" default="10"/>
+ </vgroup>
+
+ <vgroup>
+ <!--
+ <number id="eulerpower" type="slider" arg="-eulerpower %"
+ _label="Power" _low-label="Low" _high-label="High"
+ low="0.5" high="3.0" default="1.0"/>
+ -->
+
+ <number id="cycles" type="slider" arg="-cycles %"
+ _label="Duration" _low-label="Short" _high-label="Long"
+ low="100" high="5000" default="3000"/>
+
+ <number id="ncolors" type="slider" arg="-ncolors %"
+ _label="Number of colors" _low-label="Two" _high-label="Many"
+ low="2" high="255" default="64"/>
+ </vgroup>
+ </hgroup>
+
+ <boolean id="showfps" _label="Show frame rate" arg-set="-fps"/>
+ <xscreensaver-updater />
+
+ <_description>
+Simulates two dimensional incompressible inviscid fluid flow.
+
+https://en.wikipedia.org/wiki/Euler_equations_%28fluid_dynamics%29
+https://en.wikipedia.org/wiki/Inviscid_flow
+
+Written by Stephen Montgomery-Smith; 2002.
+ </_description>
+</screensaver>
diff --git a/hacks/config/extrusion.xml b/hacks/config/extrusion.xml
new file mode 100644
index 0000000..97c26a8
--- /dev/null
+++ b/hacks/config/extrusion.xml
@@ -0,0 +1,44 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="extrusion" _label="Extrusion" gl="yes">
+
+ <command arg="-root"/>
+
+ <video href="https://www.youtube.com/watch?v=eKYmqL7ndGs"/>
+
+ <number id="delay" type="slider" arg="-delay %"
+ _label="Frame rate" _low-label="Low" _high-label="High"
+ low="0" high="100000" default="20000"
+ convert="invert"/>
+
+ <select id="mode">
+ <option id="random" _label="Random object"/>
+ <option id="helix2" _label="Helix 2" arg-set="-name helix2"/>
+ <option id="helix3" _label="Helix 3" arg-set="-name helix3"/>
+ <option id="helix4" _label="Helix 4" arg-set="-name helix4"/>
+ <option id="joinoffset" _label="Join offset" arg-set="-name joinoffset"/>
+ <option id="screw" _label="Screw" arg-set="-name screw"/>
+ <option id="taper" _label="Taper" arg-set="-name taper"/>
+ <option id="twist" _label="Twistoid" arg-set="-name twistoid"/>
+ </select>
+
+ <select id="render">
+ <option id="flat" _label="Use flat coloring" arg-set="-no-light"/>
+ <option id="light" _label="Use lighting"/>
+ </select>
+
+ <!-- #### -texture -->
+ <!-- #### -texture_quality -->
+ <!-- #### -mipmap -->
+
+ <boolean id="wire" _label="Wireframe" arg-set="-wireframe"/>
+ <boolean id="showfps" _label="Show frame rate" arg-set="-fps"/>
+
+ <xscreensaver-updater />
+
+ <_description>
+Various extruded shapes twist and turn inside out.
+
+Written by Linas Vepstas, David Konerding, and Jamie Zawinski; 1999.
+ </_description>
+</screensaver>
diff --git a/hacks/config/fadeplot.xml b/hacks/config/fadeplot.xml
new file mode 100644
index 0000000..a977c2b
--- /dev/null
+++ b/hacks/config/fadeplot.xml
@@ -0,0 +1,35 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="fadeplot" _label="FadePlot">
+
+ <command arg="-root"/>
+
+ <video href="https://www.youtube.com/watch?v=Cev034v37JM"/>
+
+ <number id="delay" type="slider" arg="-delay %"
+ _label="Frame rate" _low-label="Low" _high-label="High"
+ low="0" high="100000" default="30000"
+ convert="invert"/>
+
+ <number id="count" type="slider" arg="-count %"
+ _label="Thickness" _low-label="Thin" _high-label="Thick"
+ low="0" high="30" default="10"/>
+
+ <number id="cycles" type="slider" arg="-cycles %"
+ _label="Cycles" _low-label="Small" _high-label="Large"
+ low="0" high="10000" default="1500"/>
+
+ <number id="ncolors" type="slider" arg="-ncolors %"
+ _label="Number of colors" _low-label="Two" _high-label="Many"
+ low="1" high="255" default="64"/>
+
+ <boolean id="showfps" _label="Show frame rate" arg-set="-fps"/>
+
+ <xscreensaver-updater />
+
+ <_description>
+A waving ribbon follows a sinusoidal path.
+
+Written by Bas van Gaalen and Charles Vidal; 1997.
+ </_description>
+</screensaver>
diff --git a/hacks/config/fiberlamp.xml b/hacks/config/fiberlamp.xml
new file mode 100644
index 0000000..b07e863
--- /dev/null
+++ b/hacks/config/fiberlamp.xml
@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="fiberlamp" _label="Fiberlamp">
+
+ <command arg="-root"/>
+
+ <video href="https://www.youtube.com/watch?v=PvYKJ-vkxE0"/>
+
+ <number id="delay" type="slider" arg="-delay %"
+ _label="Frame rate" _low-label="Low" _high-label="High"
+ low="0" high="100000" default="10000"
+ convert="invert"/>
+
+ <number id="count" type="slider" arg="-count %"
+ _label="Fibers" _low-label="Few" _high-label="Many"
+ low="10" high="500" default="500"/>
+
+ <number id="cycles" type="slider" arg="-cycles %"
+ _label="Time between knocks" _low-label="Short" _high-label="Long"
+ low="100" high="10000" default="10000"/>
+
+ <boolean id="showfps" _label="Show frame rate" arg-set="-fps"/>
+
+ <xscreensaver-updater />
+
+ <_description>
+A fiber-optic lamp. Groovy.
+
+Written by Tim Auckland; 2005.
+ </_description>
+</screensaver>
diff --git a/hacks/config/filmleader.xml b/hacks/config/filmleader.xml
new file mode 100644
index 0000000..02b4fd7
--- /dev/null
+++ b/hacks/config/filmleader.xml
@@ -0,0 +1,42 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="filmleader" _label="FilmLeader">
+
+ <command arg="-root"/>
+
+ <video href="https://www.youtube.com/watch?v=Cng7hmsuLo0"/>
+
+ <hgroup>
+ <vgroup>
+ <number id="tvcolor" type="slider" arg="-tv-color %"
+ _label="Color Knob" _low-label="Low" _high-label="High"
+ low="0" high="400" default="70"/>
+ <number id="tvtint" type="slider" arg="-tv-tint %"
+ _label="Tint Knob" _low-label="Low" _high-label="High"
+ low="0" high="360" default="5"/>
+ <number id="noise" type="slider" arg="-noise %"
+ _label="Noise" _low-label="Low" _high-label="High"
+ low="0.0" high="0.2" default="0.04"/>
+ </vgroup>
+ <vgroup>
+ <number id="tvbrightness" type="slider" arg="-tv-brightness %"
+ _label="Brightness Knob" _low-label="Low" _high-label="High"
+ low="-75.0" high="100.0" default="3.0"/>
+ <number id="tvcontrast" type="slider" arg="-tv-contrast %"
+ _label="Contrast Knob" _low-label="Low" _high-label="High"
+ low="0" high="500" default="150"/>
+ <boolean id="showfps" _label="Show frame rate" arg-set="-fps"/>
+ </vgroup>
+ </hgroup>
+
+ <xscreensaver-updater />
+
+ <_description>
+Displays a looping countdown based on the SMPTE Universal Film leader
+on a simulation of an old analog television.
+
+https://en.wikipedia.org/wiki/Film_leader
+
+Written by Jamie Zawinski; 2018.
+ </_description>
+</screensaver>
diff --git a/hacks/config/fireworkx.xml b/hacks/config/fireworkx.xml
new file mode 100644
index 0000000..2c8d096
--- /dev/null
+++ b/hacks/config/fireworkx.xml
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="fireworkx" _label="Fireworkx">
+
+ <command arg="-root"/>
+
+ <video href="https://www.youtube.com/watch?v=-l9BfvnFIPM"/>
+
+ <number id="Delay" type="slider" arg="-delay %"
+ _label="Frame rate" _low-label="Low" _high-label="High"
+ low="0" high="100000" default="10000"
+ convert="invert"/>
+
+ <number id="maxlife" type="slider" arg="-maxlife %"
+ _label="Activity" _low-label="Dense" _high-label="Sparse"
+ low="0" high="100" default="32"/>
+
+ <boolean id="flash" _label="Light flash" arg-unset="-no-flash"/>
+ <boolean id="shoot" _label="Shells upward" arg-set="-shoot"/>
+ <boolean id="showfps" _label="Show frame rate" arg-set="-fps"/>
+
+ <xscreensaver-updater />
+
+ <_description>
+Exploding fireworks. See also the "Eruption", "XFlame" and "Pyro"
+screen savers.
+
+Written by Rony B Chandran; 2004.
+ </_description>
+</screensaver>
diff --git a/hacks/config/flag.xml b/hacks/config/flag.xml
new file mode 100644
index 0000000..1e6cfb3
--- /dev/null
+++ b/hacks/config/flag.xml
@@ -0,0 +1,41 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="flag" _label="Flag">
+
+ <command arg="-root"/>
+
+ <video href="https://www.youtube.com/watch?v=LuEC3EONzjc"/>
+
+ <string id="text" _label="Text for flag" arg="-text %"/>
+
+ <number id="delay" type="slider" arg="-delay %"
+ _label="Frame rate" _low-label="Low" _high-label="High"
+ low="0" high="200000" default="50000"
+ convert="invert"/>
+
+ <number id="cycles" type="slider" arg="-cycles %"
+ _label="Timeout" _low-label="Small" _high-label="Large"
+ low="0" high="800000" default="1000"/>
+
+ <number id="ncolors" type="slider" arg="-ncolors %"
+ _label="Number of colors" _low-label="Two" _high-label="Many"
+ low="1" high="255" default="200"/>
+
+ <!-- #### -size [-7] -->
+
+ <boolean id="showfps" _label="Show frame rate" arg-set="-fps"/>
+
+ <xscreensaver-updater />
+
+ <_description>
+This screen saver was removed from the XScreenSaver distribution as of
+version 5.08.
+
+This draws a waving colored flag, that undulates its way around the
+screen. The flag can contain arbitrary text and images. By default,
+it displays either the current system name and OS type, or a picture
+of "Bob".
+
+Written by Charles Vidal and Jamie Zawinski; 1997.
+ </_description>
+</screensaver>
diff --git a/hacks/config/flame.xml b/hacks/config/flame.xml
new file mode 100644
index 0000000..8e341c6
--- /dev/null
+++ b/hacks/config/flame.xml
@@ -0,0 +1,39 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="flame" _label="Flame">
+
+ <command arg="-root"/>
+
+ <video href="https://www.youtube.com/watch?v=6Pu8JKNT_Jk"/>
+
+ <number id="delay" type="slider" arg="-delay %"
+ _label="Frame rate" _low-label="Low" _high-label="High"
+ low="0" high="100000" default="50000"
+ convert="invert"/>
+
+ <number id="delay2" type="slider" arg="-delay2 %"
+ _label="Linger" _low-label="0 seconds" _high-label="10 seconds"
+ low="1000" high="10000000" default="2000000"/>
+
+ <number id="iterations" type="slider" arg="-iterations %"
+ _label="Number of fractals" _low-label="Few" _high-label="Many"
+ low="1" high="250" default="25"/>
+
+ <number id="points" type="slider" arg="-points %"
+ _label="Complexity" _low-label="Low" _high-label="High"
+ low="100" high="80000" default="10000"/>
+
+ <number id="ncolors" type="slider" arg="-colors %"
+ _label="Number of colors" _low-label="Two" _high-label="Many"
+ low="1" high="255" default="64"/>
+
+ <boolean id="showfps" _label="Show frame rate" arg-set="-fps"/>
+
+ <xscreensaver-updater />
+
+ <_description>
+Iterative fractals.
+
+Written by Scott Draves; 1993.
+ </_description>
+</screensaver>
diff --git a/hacks/config/flipflop.xml b/hacks/config/flipflop.xml
new file mode 100644
index 0000000..7f843a3
--- /dev/null
+++ b/hacks/config/flipflop.xml
@@ -0,0 +1,52 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="flipflop" _label="FlipFlop" gl="yes">
+
+ <command arg="-root"/>
+
+ <video href="https://www.youtube.com/watch?v=RzWRoAMFtnw"/>
+
+ <hgroup>
+ <vgroup>
+ <number id="delay" type="slider" arg="-delay %"
+ _label="Frame rate" _low-label="Low" _high-label="High"
+ low="0" high="100000" default="20000"
+ convert="invert"/>
+
+ <number id="spin" type="slider" arg="-spin %"
+ _label="Spin" _low-label="Stopped" _high-label="Whirlwind"
+ low="0" high="3.0" default="0.1"/>
+ </vgroup>
+ <vgroup>
+
+ <select id="mode">
+ <option id="tiles" _label="Draw Tiles"/>
+ <option id="sticks" _label="Draw Sticks" arg-set="-mode sticks"/>
+ </select>
+
+ <number id="size-x" type="spinbutton" arg="-size-x %"
+ _label="Width" low="3" high="20" default="9"/>
+ <number id="size-y" type="spinbutton" arg="-size-y %"
+ _label="Depth" low="3" high="20" default="9"/>
+ </vgroup>
+ </hgroup>
+
+ <hgroup>
+ <vgroup>
+ <boolean id="texture" _label="Load image" arg-set="-texture" />
+ <boolean id="wire" _label="Wireframe" arg-set="-wireframe"/>
+ <boolean id="showfps" _label="Show frame rate" arg-set="-fps"/>
+ </vgroup>
+ <vgroup>
+ <xscreensaver-image />
+ </vgroup>
+ </hgroup>
+
+ <xscreensaver-updater />
+
+ <_description>
+Colored tiles swap with each other.
+
+Written by Kevin Ogden and Sergio Gutierrez; 2003.
+ </_description>
+</screensaver>
diff --git a/hacks/config/flipscreen3d.xml b/hacks/config/flipscreen3d.xml
new file mode 100644
index 0000000..5ed1cfb
--- /dev/null
+++ b/hacks/config/flipscreen3d.xml
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="flipscreen3d" _label="FlipScreen3D" gl="yes">
+
+ <command arg="-root"/>
+
+ <video href="https://www.youtube.com/watch?v=mu3iN_BSpt4"/>
+
+ <number id="delay" type="slider" arg="-delay %"
+ _label="Frame rate" _low-label="Low" _high-label="High"
+ low="0" high="100000" default="20000"
+ convert="invert"/>
+
+ <boolean id="rotate" _label="Rotate" arg-unset="-no-rotate"/>
+
+ <boolean id="showfps" _label="Show frame rate" arg-set="-fps"/>
+
+ <xscreensaver-image />
+
+ <xscreensaver-updater />
+
+ <_description>
+Spins and deforms an image.
+
+Written by Ben Buxton and Jamie Zawinski; 2001.
+ </_description>
+</screensaver>
diff --git a/hacks/config/fliptext.xml b/hacks/config/fliptext.xml
new file mode 100644
index 0000000..48c7e64
--- /dev/null
+++ b/hacks/config/fliptext.xml
@@ -0,0 +1,55 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="fliptext" _label="FlipText" gl="yes">
+
+ <command arg="-root"/>
+
+ <video href="https://www.youtube.com/watch?v=vcB-6S7Hfuk"/>
+
+ <hgroup>
+ <vgroup>
+ <number id="delay" type="slider" arg="-delay %"
+ _label="Frame rate" _low-label="Low" _high-label="High"
+ low="0" high="100000" default="10000"
+ convert="invert"/>
+ </vgroup>
+ <vgroup>
+ <number id="speed" type="slider" arg="-speed %"
+ _label="Speed" _low-label="Slow" _high-label="Fast"
+ low="0.1" high="10.0" default="1.0"/>
+ </vgroup>
+ </hgroup>
+
+ <hgroup>
+ <vgroup>
+ <select id="align">
+ <option id="left" _label="Random text alignment"/>
+ <option id="left" _label="Flush left text" arg-set="-alignment left"/>
+ <option id="center" _label="Centered text" arg-set="-alignment center"/>
+ <option id="right" _label="Flush right text" arg-set="-alignment right"/>
+ </select>
+
+ <number id="size" type="spinbutton" arg="-size %"
+ _label="Font point size" low="1" high="100" default="20"/>
+
+ <number id="columns" type="spinbutton" arg="-columns %"
+ _label="Text columns" low="1" high="200" default="80"/>
+
+ <number id="lines" type="spinbutton" arg="-lines %"
+ _label="Text lines" low="1" high="99" default="8"/>
+
+ <boolean id="showfps" _label="Show frame rate" arg-set="-fps"/>
+ </vgroup>
+ <vgroup>
+ <xscreensaver-text />
+ </vgroup>
+ </hgroup>
+
+ <xscreensaver-updater />
+
+ <_description>
+Successive pages of text flip in and out in a soothing 3D pattern.
+
+Written by Jamie Zawinski; 2005.
+ </_description>
+</screensaver>
diff --git a/hacks/config/flow.xml b/hacks/config/flow.xml
new file mode 100644
index 0000000..804080a
--- /dev/null
+++ b/hacks/config/flow.xml
@@ -0,0 +1,60 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="flow" _label="Flow">
+
+ <command arg="-root"/>
+
+ <video href="https://www.youtube.com/watch?v=RJjbRV0FC_A"/>
+
+ <hgroup>
+ <vgroup>
+ <number id="speed" type="slider" arg="-delay %"
+ _label="Frame rate" _low-label="Low" _high-label="High"
+ low="0" high="100000" default="10000"
+ convert="invert"/>
+
+ <number id="count" type="slider" arg="-count %"
+ _label="Count" _low-label="Few" _high-label="Many"
+ low="10" high="5000" default="3000"/>
+
+ <number id="cycles" type="slider" arg="-cycles %"
+ _label="Timeout" _low-label="Small" _high-label="Large"
+ low="0" high="800000" default="10000"/>
+ </vgroup>
+ <vgroup>
+ <number id="ncolors" type="slider" arg="-ncolors %"
+ _label="Number of colors" _low-label="Two" _high-label="Many"
+ low="1" high="255" default="200"/>
+
+ <number id="size" type="slider" arg="-size %"
+ _label="Length of trails" _low-label="Short" _high-label="Long"
+ low="-20" high="-2" default="-10" convert="invert"/>
+ </vgroup>
+ </hgroup>
+
+ <hgroup>
+ <vgroup>
+ <boolean id="rotate" _label="Rotating around attractor" arg-unset="-no-rotate"/>
+ <boolean id="ride" _label="Ride in the flow" arg-unset="-no-ride"/>
+ <boolean id="box" _label="Draw bounding box" arg-unset="-no-box"/>
+ </vgroup>
+ <vgroup>
+ <boolean id="periodic" _label="Periodic attractors" arg-unset="-no-periodic"/>
+ <boolean id="search" _label="Search for new attractors" arg-unset="-no-search"/>
+ <boolean id="showfps" _label="Show frame rate" arg-set="-fps"/>
+ </vgroup>
+ </hgroup>
+
+ <xscreensaver-updater />
+
+ <_description>
+Strange attractors formed of flows in a 3D differential equation phase
+space. Features the popular attractors described by Lorentz,
+Roessler, Birkhoff and Duffing, and can discover entirely new
+attractors by itself.
+
+https://en.wikipedia.org/wiki/Attractor#Strange_attractor
+
+Written by Tim Auckland; 1998.
+ </_description>
+</screensaver>
diff --git a/hacks/config/fluidballs.xml b/hacks/config/fluidballs.xml
new file mode 100644
index 0000000..2acd92c
--- /dev/null
+++ b/hacks/config/fluidballs.xml
@@ -0,0 +1,55 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="fluidballs" _label="FluidBalls">
+
+ <command arg="-root"/>
+
+ <video href="https://www.youtube.com/watch?v=5Iz9V-vOrxA"/>
+
+ <hgroup>
+ <vgroup>
+ <number id="delay" type="slider" arg="-delay %"
+ _label="Frame rate" _low-label="Low" _high-label="High"
+ low="0" high="100000" default="10000"
+ convert="invert"/>
+
+ <number id="count" type="slider" arg="-count %"
+ _label="Number of balls" _low-label="Few" _high-label="Many"
+ low="1" high="3000" default="300"/>
+
+ <number id="size" type="slider" arg="-size %"
+ _label="Ball size" _low-label="Small" _high-label="Large"
+ low="3" high="200" default="25"/>
+ </vgroup>
+ <vgroup>
+ <number id="gravity" type="slider" arg="-gravity %"
+ _label="Gravity" _low-label=" Freefall" _high-label="Jupiter"
+ low="0.0" high="0.1" default="0.01"/>
+
+ <number id="wind" type="slider" arg="-wind %"
+ _label="Wind" _low-label="Still" _high-label="Hurricane"
+ low="0.0" high="0.1" default="0.00"/>
+
+ <number id="elasticity" type="slider" arg="-elasticity %"
+ _label="Friction" _low-label="Clay" _high-label="Rubber"
+ low="0.2" high="1.0" default="0.97"/>
+ </vgroup>
+ </hgroup>
+
+ <hgroup>
+ <boolean id="random" _label="Various ball sizes" arg-unset="-no-random"/>
+ <boolean id="shake" _label="Shake box" arg-unset="-no-shake"/>
+ <boolean id="showfps" _label="Show frame rate" arg-set="-fps"/>
+ </hgroup>
+
+ <xscreensaver-updater />
+
+ <_description>
+Models the physics of bouncing balls, or of particles in a gas or
+fluid, depending on the settings. If "Shake Box" is selected, then
+every now and then, the box will be rotated, changing which direction
+is down (in order to keep the settled balls in motion.)
+
+Written by Peter Birtles and Jamie Zawinski; 2002.
+ </_description>
+</screensaver>
diff --git a/hacks/config/flurry.xml b/hacks/config/flurry.xml
new file mode 100644
index 0000000..5917e32
--- /dev/null
+++ b/hacks/config/flurry.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="flurry" _label="Flurry" gl="yes">
+
+ <command arg="-root"/>
+
+ <video href="https://www.youtube.com/watch?v=0beqUyN5ZsI"/>
+
+ <boolean id="showfps" _label="Show frame rate" arg-set="-fps"/>
+
+ <select id="preset">
+ <option id="classic" _label="Classic" arg-set="-preset classic"/>
+ <option id="rgb" _label="RGB" arg-set="-preset rgb"/>
+ <option id="fire" _label="Fire" arg-set="-preset fire"/>
+ <option id="water" _label="Water" arg-set="-preset water"/>
+ <option id="binary" _label="Binary" arg-set="-preset binary"/>
+ <option id="psych" _label="Psychedelic" arg-set="-preset psychedelic"/>
+ <option id="insane" _label="Insane" arg-set="-preset insane"/>
+ <option id="random" _label="Random"/>
+ </select>
+
+ <xscreensaver-updater />
+
+ <_description>
+A colourful star(fish)like flurry of particles.
+
+Written by Calum Robinson and Tobias Sargeant; 2002.
+ </_description>
+</screensaver>
diff --git a/hacks/config/flyingtoasters.xml b/hacks/config/flyingtoasters.xml
new file mode 100644
index 0000000..7df6459
--- /dev/null
+++ b/hacks/config/flyingtoasters.xml
@@ -0,0 +1,42 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="flyingtoasters" _label="FlyingToasters" gl="yes">
+
+ <command arg="-root"/>
+
+ <video href="https://www.youtube.com/watch?v=mLGDvtbFvfg"/>
+
+ <number id="delay" type="slider" arg="-delay %"
+ _label="Frame rate" _low-label="Low" _high-label="High"
+ low="0" high="100000" default="30000"
+ convert="invert"/>
+
+ <number id="speed" type="slider" arg="-speed %"
+ _label="Air speed" _low-label="Slow" _high-label="Fast"
+ low="0.01" high="8.0" default="1.0"/>
+
+ <number id="ntoasters" type="slider" arg="-ntoasters %"
+ _label="Number of toasters" _low-label="None" _high-label="Swarm"
+ low="0" high="50" default="20"/>
+
+ <number id="nslices" type="slider" arg="-nslices %"
+ _label="Number of slices" _low-label="None" _high-label="Swarm"
+ low="0" high="50" default="25"/>
+
+ <hgroup>
+ <boolean id="tex" _label="Chrome" arg-unset="-no-texture"/>
+ <boolean id="wire" _label="Wireframe" arg-set="-wireframe"/>
+ <boolean id="showfps" _label="Show frame rate" arg-set="-fps"/>
+ </hgroup>
+
+ <xscreensaver-updater />
+
+ <_description>
+A fleet of 3d space-age jet-powered flying toasters (and toast!)
+Inspired by the ancient Berkeley Systems After Dark flying toasters.
+
+https://en.wikipedia.org/wiki/After_Dark_%28software%29#Flying_Toasters
+
+Written by Jamie Zawinski and Devon Dossett; 2003.
+ </_description>
+</screensaver>
diff --git a/hacks/config/fontglide.xml b/hacks/config/fontglide.xml
new file mode 100644
index 0000000..db437d3
--- /dev/null
+++ b/hacks/config/fontglide.xml
@@ -0,0 +1,54 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="fontglide" _label="FontGlide">
+
+ <command arg="-root"/>
+
+ <video href="https://www.youtube.com/watch?v=2KCXD19FHk0"/>
+
+ <hgroup>
+ <vgroup>
+ <number id="delay" type="slider" arg="-delay %"
+ _label="Frame rate" _low-label="Low" _high-label="High"
+ low="0" high="100000" default="10000"
+ convert="invert"/>
+
+ <number id="speed" type="slider" arg="-speed %"
+ _label="Speed" _low-label="Slow" _high-label="Fast"
+ low="0.1" high="10.0" default="1.0"/>
+
+ <number id="linger" type="slider" arg="-linger %"
+ _label="Page linger" _low-label="Brief" _high-label="Long"
+ low="0.1" high="10.0" default="1.0"/>
+
+ <select id="mode">
+ <option id="page" _label="Pages of text" arg-set="-mode page"/>
+ <option id="scroll" _label="Horizontally scrolling text" arg-set="-mode scroll"/>
+ <option id="random" _label="Random display style"/>
+ </select>
+
+ <hgroup>
+ <number id="bw" type="spinbutton" arg="-bw %"
+ _label="Font border thickness" low="0" high="8" default="2"/>
+ </hgroup>
+ </vgroup>
+
+ <vgroup>
+ <xscreensaver-text />
+ <hgroup>
+ <boolean id="trails" _label="Vapor trails" arg-set="-trails"/>
+ <boolean id="showfps" _label="Show frame rate" arg-set="-fps"/>
+ </hgroup>
+ </vgroup>
+ </hgroup>
+
+ <xscreensaver-updater />
+
+ <_description>
+Puts text on the screen using large characters that glide in from the
+edges, assemble, then disperse. Alternately, it can simply scroll whole
+sentences from right to left.
+
+Written by Jamie Zawinski; 2003.
+ </_description>
+</screensaver>
diff --git a/hacks/config/forest.xml b/hacks/config/forest.xml
new file mode 100644
index 0000000..2e0bd41
--- /dev/null
+++ b/hacks/config/forest.xml
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="forest" _label="Forest">
+
+ <command arg="-root"/>
+
+ <video href="https://www.youtube.com/watch?v=EEK2qbAmKWs"/>
+
+ <number id="delay" type="slider" arg="-delay %"
+ _label="Frame rate" _low-label="Low" _high-label="High"
+ low="0" high="3000000" default="500000"
+ convert="invert"/>
+
+ <number id="ncolors" type="slider" arg="-ncolors %"
+ _label="Number of colors" _low-label="Two" _high-label="Many"
+ low="1" high="20" default="20"/>
+
+ <boolean id="showfps" _label="Show frame rate" arg-set="-fps"/>
+
+ <xscreensaver-updater />
+
+ <_description>
+This screen saver was removed from the XScreenSaver distribution as of
+version 5.08.
+
+Fractal trees.
+
+Written by Peter Baumung; 1997.
+ </_description>
+</screensaver>
diff --git a/hacks/config/fuzzyflakes.xml b/hacks/config/fuzzyflakes.xml
new file mode 100644
index 0000000..b59517d
--- /dev/null
+++ b/hacks/config/fuzzyflakes.xml
@@ -0,0 +1,66 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="fuzzyflakes" _label="FuzzyFlakes">
+
+ <command arg="-root"/>
+
+ <video href="https://www.youtube.com/watch?v=NrGe3xcqAns"/>
+
+ <hgroup>
+ <vgroup>
+ <number id="delay" type="slider" arg="-delay %"
+ _label="Frame rate" _low-label="Low" _high-label="High"
+ low="0" high="100000" default="10000"
+ convert="invert"/>
+
+ <number id="speed" type="slider" arg="-speed %"
+ _label="Speed" _low-label="Slow" _high-label="Fast"
+ low="1" high="50" default="10"/>
+
+ <number id="layers" type="slider" arg="-layers %"
+ _label="Layers" _low-label="Few" _high-label="Many"
+ low="1" high="10" default="3"/>
+
+ <hgroup>
+ <boolean id="rc" _label="Random colors" arg-set="-random-colors"/>
+ <boolean id="showfps" _label="Show frame rate" arg-set="-fps"/>
+ </hgroup>
+
+ <select id="color">
+ <option id="lred" _label="Red" arg-set="-color #FF0000"/>
+ <option id="pink" _label="Pink"/>
+ <option id="lyellow" _label="Yellow" arg-set="-color #FFFF00"/>
+ <option id="lgreen" _label="Green" arg-set="-color #00FF00"/>
+ <option id="lcyan" _label="Cyan" arg-set="-color #00FFFF"/>
+ <option id="lblue" _label="Blue" arg-set="-color #0000FF"/>
+ <option id="lmagenta" _label="Magenta" arg-set="-color #FF00FF"/>
+ </select>
+
+ </vgroup>
+ <vgroup>
+ <number id="arms" type="slider" arg="-arms %"
+ _label="Arms" _low-label="Few" _high-label="Many"
+ low="1" high="10" default="5"/>
+ <number id="thickness" type="slider" arg="-thickness %"
+ _label="Thickness" _low-label="Thin" _high-label="Thick"
+ low="1" high="50" default="10"/>
+ <number id="bthickness" type="slider" arg="-bthickness %"
+ _label="Border thickness" _low-label="Thin" _high-label="Thick"
+ low="0" high="50" default="3"/>
+ <number id="radius" type="slider" arg="-radius %"
+ _label="Radius" _low-label="Small" _high-label="Large"
+ low="1" high="100" default="20"/>
+
+ </vgroup>
+ </hgroup>
+
+ <xscreensaver-updater />
+
+ <_description>
+Falling colored snowflake/flower shapes.
+
+https://en.wikipedia.org/wiki/Snowflake
+
+Written by Barry Dmytro; 2004.
+ </_description>
+</screensaver>
diff --git a/hacks/config/galaxy.xml b/hacks/config/galaxy.xml
new file mode 100644
index 0000000..b12d62f
--- /dev/null
+++ b/hacks/config/galaxy.xml
@@ -0,0 +1,36 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="galaxy" _label="Galaxy">
+
+ <command arg="-root"/>
+
+ <video href="https://www.youtube.com/watch?v=xBprAm9w-Fo"/>
+
+ <number id="delay" type="slider" arg="-delay %"
+ _label="Frame rate" _low-label="Low" _high-label="High"
+ low="0" high="100000" default="20000"
+ convert="invert"/>
+
+ <number id="count" type="spinbutton" arg="-count %"
+ _label="Count" low="-20" high="20" default="-5"/>
+
+ <number id="cycles" type="slider" arg="-cycles %"
+ _label="Duration" _low-label="Short" _high-label="Long"
+ low="10" high="1000" default="250"/>
+
+ <number id="ncolors" type="slider" arg="-ncolors %"
+ _label="Number of colors" _low-label="Two" _high-label="Many"
+ low="10" high="255" default="64"/>
+
+ <boolean id="spin" _label="Rotate viewpoint" arg-unset="-no-spin"/>
+
+ <boolean id="showfps" _label="Show frame rate" arg-set="-fps"/>
+
+ <xscreensaver-updater />
+
+ <_description>
+Spinning galaxies collide.
+
+Written by Uli Siegmund, Harald Backert, and Hubert Feyrer; 1997.
+ </_description>
+</screensaver>
diff --git a/hacks/config/gears.xml b/hacks/config/gears.xml
new file mode 100644
index 0000000..957fbdb
--- /dev/null
+++ b/hacks/config/gears.xml
@@ -0,0 +1,39 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="gears" _label="Gears" gl="yes">
+
+ <command arg="-root"/>
+
+ <video href="https://www.youtube.com/watch?v=OHamiC1tcdg"/>
+
+ <number id="delay" type="slider" arg="-delay %"
+ _label="Frame rate" _low-label="Low" _high-label="High"
+ low="0" high="100000" default="30000"
+ convert="invert"/>
+
+ <number id="speed" type="slider" arg="-speed %"
+ _label="Speed" _low-label="Slow" _high-label="Fast"
+ low="0.01" high="5.0" default="1.0"/>
+
+ <number id="count" type="slider" arg="-count %"
+ _label="Gear count" _low-label="0" _high-label="20"
+ low="0" high="20" default="0"/>
+
+ <hgroup>
+ <boolean id="wander" _label="Wander" arg-unset="-no-wander"/>
+ <boolean id="spin" _label="Spin" arg-unset="-no-spin"/>
+ <boolean id="wire" _label="Wireframe" arg-set="-wireframe"/>
+ <boolean id="showfps" _label="Show frame rate" arg-set="-fps"/>
+ </hgroup>
+
+ <xscreensaver-updater />
+
+ <_description>
+Interlocking gears. See also the "Pinion" and "MoebiusGears" screen savers.
+
+https://en.wikipedia.org/wiki/Involute_gear
+https://en.wikipedia.org/wiki/Epicyclic_gearing
+
+Written by Jamie Zawinski; 2007.
+ </_description>
+</screensaver>
diff --git a/hacks/config/geodesic.xml b/hacks/config/geodesic.xml
new file mode 100644
index 0000000..0bc52ff
--- /dev/null
+++ b/hacks/config/geodesic.xml
@@ -0,0 +1,61 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="geodesic" _label="Geodesic" gl="yes">
+
+ <command arg="-root"/>
+
+ <video href="https://www.youtube.com/watch?v=qulzooBLIcU"/>
+
+ <hgroup>
+ <vgroup>
+ <select id="object">
+ <option id="mesh" _label="Mesh faces"/>
+ <option id="solid" _label="Solid faces" arg-set="-mode solid"/>
+ <option id="stellated" _label="Stellated faces" arg-set="-mode stellated"/>
+ <option id="stellated2" _label="Inverse Stellated" arg-set="-mode stellated2"/>
+ <option id="wire" _label="Wireframe" arg-set="-mode wire"/>
+ <option id="random" _label="Random face style" arg-set="-mode random"/>
+ </select>
+
+ <boolean id="wander" _label="Wander" arg-unset="-no-wander"/>
+ <boolean id="spin" _label="Spin" arg-unset="-no-spin"/>
+ <boolean id="showfps" _label="Show frame rate" arg-set="-fps"/>
+
+ </vgroup>
+
+ <vgroup>
+ <number id="delay" type="slider" arg="-delay %"
+ _label="Frame rate" _low-label="Low" _high-label="High"
+ low="0" high="100000" default="30000"
+ convert="invert"/>
+
+ <number id="speed" type="slider" arg="-speed %"
+ _label="Animation speed" _low-label="Slow" _high-label="Fast"
+ low="0.05" high="10.0" default="1.0"/>
+
+ <number id="count" type="slider" arg="-count %"
+ _label="Depth" _low-label="1" _high-label="8"
+ low="1" high="8" default="4"/>
+ </vgroup>
+ </hgroup>
+
+ <xscreensaver-updater />
+
+ <_description>
+A mesh geodesic sphere of increasing and decreasing complexity.
+
+A geodesic sphere is an icosohedron whose equilateral faces are
+sub-divided into non-equilateral triangles to more closely approximate
+a sphere.
+
+The animation shows the equilateral triangles subdivided into four
+coplanar equilateral triangles; and then inflated outward, causing the
+sub-triangles to no longer be equilateral, but to more closely
+approximate the surface of a sphere.
+
+https://en.wikipedia.org/wiki/Geodesic_dome
+https://en.wikipedia.org/wiki/Buckminster_Fuller
+
+Written by Jamie Zawinski; 2013.
+ </_description>
+</screensaver>
diff --git a/hacks/config/geodesicgears.xml b/hacks/config/geodesicgears.xml
new file mode 100644
index 0000000..813268a
--- /dev/null
+++ b/hacks/config/geodesicgears.xml
@@ -0,0 +1,41 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="geodesicgears" _label="GeodesicGears" gl="yes">
+
+ <command arg="-root"/>
+
+ <video href="https://www.youtube.com/watch?v=gd_nTnJQ4Ps"/>
+
+ <number id="delay" type="slider" arg="-delay %"
+ _label="Frame rate" _low-label="Low" _high-label="High"
+ low="0" high="100000" default="30000"
+ convert="invert"/>
+
+ <number id="timeout" type="slider" arg="-timeout %"
+ _label="Duration" _low-label="5 seconds" _high-label="2 minutes"
+ low="5" high="120" default="20"/>
+
+ <hgroup>
+ <boolean id="labels" _label="Describe gears" arg-set="-labels"/>
+ <boolean id="numbers" _label="Number gears" arg-set="-numbers"/>
+ <boolean id="wire" _label="Wireframe" arg-set="-wireframe"/>
+ </hgroup>
+
+ <hgroup>
+ <boolean id="wander" _label="Wander" arg-unset="-no-wander"/>
+ <boolean id="spin" _label="Spin" arg-unset="-no-spin"/>
+ <boolean id="showfps" _label="Show frame rate" arg-set="-fps"/>
+ </hgroup>
+
+ <xscreensaver-updater />
+
+ <_description>
+A set of meshed gears arranged on the surface of a sphere.
+
+https://en.wikipedia.org/wiki/Geodesic_dome
+https://en.wikipedia.org/wiki/Involute_gear
+https://en.wikipedia.org/wiki/Buckminster_Fuller
+
+Written by Jamie Zawinski; 2014.
+ </_description>
+</screensaver>
diff --git a/hacks/config/gflux.xml b/hacks/config/gflux.xml
new file mode 100644
index 0000000..baced13
--- /dev/null
+++ b/hacks/config/gflux.xml
@@ -0,0 +1,61 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="gflux" _label="GFlux" gl="yes">
+
+ <command arg="-root"/>
+
+ <video href="https://www.youtube.com/watch?v=vbRFlKH-LpA"/>
+
+ <hgroup>
+ <vgroup>
+ <number id="delay" type="slider" arg="-delay %"
+ _label="Frame rate" _low-label="Low" _high-label="High"
+ low="0" high="100000" default="20000"
+ convert="invert"/>
+
+ <number id="wave" type="slider" arg="-speed %"
+ _label="Wave speed" _low-label="Slow" _high-label="Fast"
+ low="0" high="0.50" default="0.05"
+ convert="invert"/>
+ </vgroup>
+ <vgroup>
+ <number id="squares" type="slider" arg="-squares %"
+ _label="Mesh density" _low-label="Sparse" _high-label="Dense"
+ low="2" high="40" default="19"/>
+
+ <number id="waves" type="slider" arg="-waves %"
+ _label="Waves" _low-label="1" _high-label="10"
+ low="1" high="10" default="3"/>
+ </vgroup>
+ </hgroup>
+
+ <select id="mode">
+ <option id="wire" _label="Wire mesh" arg-set="-mode wire"/>
+ <option id="solid" _label="Flat lighting" arg-set="-mode solid"/>
+ <option id="light" _label="Directional lighting" arg-set="-mode light"/>
+ <option id="checker" _label="Checkerboard" arg-set="-mode checker"/>
+ <option id="grab" _label="Picture" />
+ </select>
+
+ <boolean id="showfps" _label="Show frame rate" arg-set="-fps"/>
+
+ <!-- #### -resolution [4] -->
+ <!-- #### -flat [0] -->
+ <!-- #### -rotationx [0.01] -->
+ <!-- #### -rotationy [0.0] -->
+ <!-- #### -rotationz [0.1] -->
+ <!-- #### -waveChange [50] -->
+ <!-- #### -waveHeight [1.0] -->
+ <!-- #### -waveFreq [3.0] -->
+ <!-- #### -zoom [1.0] -->
+
+ <xscreensaver-image />
+
+ <xscreensaver-updater />
+
+ <_description>
+Undulating waves on a rotating grid.
+
+Written by Josiah Pease; 2000.
+ </_description>
+</screensaver>
diff --git a/hacks/config/glblur.xml b/hacks/config/glblur.xml
new file mode 100644
index 0000000..ffa953d
--- /dev/null
+++ b/hacks/config/glblur.xml
@@ -0,0 +1,46 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="glblur" _label="GLBlur" gl="yes">
+
+ <command arg="-root"/>
+
+ <video href="https://www.youtube.com/watch?v=wUWwQXRp8lE"/>
+
+ <number id="delay" type="slider" arg="-delay %"
+ _label="Frame rate" _low-label="Low" _high-label="High"
+ low="0" high="100000" default="10000"
+ convert="invert"/>
+
+ <number id="blursize" type="slider" arg="-blursize %"
+ _label="Blur smoothness" _low-label="Sparse" _high-label="Dense"
+ low="1" high="100" default="15"/>
+
+ <boolean id="wander" _label="Wander" arg-unset="-no-wander"/>
+
+ <select id="rotation">
+ <option id="no" _label="Don't rotate" arg-set="-spin 0"/>
+ <option id="x" _label="Rotate around X axis" arg-set="-spin X"/>
+ <option id="y" _label="Rotate around Y axis" arg-set="-spin Y"/>
+ <option id="z" _label="Rotate around Z axis" arg-set="-spin Z"/>
+ <option id="xy" _label="Rotate around X and Y axes" arg-set="-spin XY"/>
+ <option id="xz" _label="Rotate around X and Z axes" arg-set="-spin XZ"/>
+ <option id="yz" _label="Rotate around Y and Z axes" arg-set="-spin YZ"/>
+ <option id="xyz" _label="Rotate around all three axes"/>
+ </select>
+
+ <boolean id="showfps" _label="Show frame rate" arg-set="-fps"/>
+
+ <xscreensaver-updater />
+
+ <_description>
+Flowing field effects from the vapor trails around a moving object.
+
+This is done by rendering the scene into a small texture, then
+repeatedly rendering increasingly-enlarged and increasingly-transparent
+versions of that texture onto the frame buffer. As such, it's quite
+GPU-intensive: if you don't have a very good graphics card, it
+will hurt your machine bad.
+
+Written by Jamie Zawinski; 2002.
+ </_description>
+</screensaver>
diff --git a/hacks/config/glcells.xml b/hacks/config/glcells.xml
new file mode 100644
index 0000000..da86fe6
--- /dev/null
+++ b/hacks/config/glcells.xml
@@ -0,0 +1,64 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="glcells" _label="GLCells" gl="yes">
+
+ <command arg="-root"/>
+
+ <video href="https://www.youtube.com/watch?v=94ac7nEQyBI"/>
+
+ <hgroup>
+ <vgroup>
+ <number id="delay" type="slider" arg="-delay %"
+ _label="Frame rate" _low-label="Low" _high-label="High"
+ low="0" high="100000" default="20000"
+ convert="invert"/>
+ <number id="pause" type="slider" arg="-pause %"
+ _label="Linger" _low-label="Short" _high-label="Long"
+ low="0" high="400" default="50"/>
+ <number id="maxcells" type="slider" arg="-maxcells %"
+ _label="Max cells" _low-label="Few" _high-label="Many"
+ low="50" high="5000" default="800"/>
+ <number id="radius" type="slider" arg="-radius %"
+ _label="Cell radius" _low-label="Small" _high-label="Huge"
+ low="5" high="80" default="40"/>
+ <select id="quality">
+ <option id="q0" _label="Lowest sphere detail" arg-set="-quality 0"/>
+ <option id="q1" _label="Medium sphere detail" arg-set="-quality 1"/>
+ <option id="q2" _label="Normal sphere detail" arg-set="-quality 2"/>
+ <option id="q3" _label="More sphere detail"/>
+ <option id="q4" _label="Highest sphere detail" arg-set="-quality 4"/>
+ </select>
+ </vgroup>
+ <vgroup>
+ <number id="minfood" type="slider" arg="-minfood %"
+ _label="Min food" _low-label="Starve" _high-label="Gorge"
+ low="0" high="100" default="5"/>
+ <number id="maxfood" type="slider" arg="-maxfood %"
+ _label="Max food" _low-label="Starve" _high-label="Gorge"
+ low="10" high="100" default="20"/>
+ <number id="divideage" type="slider" arg="-divideage %"
+ _label="Cell division" _low-label="Quick" _high-label="Slow"
+ low="1" high="100" default="20"/>
+ <number id="mindist" type="slider" arg="-mindist %"
+ _label="Min distance" _low-label="Small" _high-label="Large"
+ low="1.0" high="3.0" default="1.4"/>
+ <number id="seeds" type="slider" arg="-seeds %"
+ _label="Seeds" _low-label="1" _high-label="15"
+ low="1" high="15" default="1"/>
+ </vgroup>
+ </hgroup>
+
+ <hgroup>
+ <boolean id="keepold" _label="Keep dead cells" arg-set="-keepold"/>
+ <boolean id="showfps" _label="Show frame rate" arg-set="-fps"/>
+ <boolean id="wireframe" _label="Wireframe" arg-set="-wireframe"/>
+ </hgroup>
+
+ <xscreensaver-updater />
+
+ <_description>
+Cells growing, dividing and dying on your screen. Microscopic pathos.
+
+Written by Matthias Toussaint; 2007.
+ </_description>
+</screensaver>
diff --git a/hacks/config/gleidescope.xml b/hacks/config/gleidescope.xml
new file mode 100644
index 0000000..b75bc11
--- /dev/null
+++ b/hacks/config/gleidescope.xml
@@ -0,0 +1,41 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="gleidescope" _label="Gleidescope" gl="yes">
+
+ <command arg="-root"/>
+
+ <video href="https://www.youtube.com/watch?v=q6F-CDX6-tU"/>
+
+ <number id="delay" type="slider" arg="-delay %"
+ _label="Frame rate" _low-label="Low" _high-label="High"
+ low="0" high="100000" default="20000"
+ convert="invert"/>
+
+ <number id="size" _label="Size of tube" arg="-size %"
+ type="slider" _low-label="Small" _high-label="Large"
+ low="0" high="10" default="0" />
+
+ <number id="duration" type="slider" arg="-duration %"
+ _label="Image duration"
+ _low-label="10 seconds" _high-label="5 minutes"
+ low="10" high="300" default="30"/>
+
+ <hgroup>
+ <boolean id="move" _label="Move" arg-unset="-no-move"/>
+ <boolean id="rotate" _label="Rotate" arg-unset="-no-rotate"/>
+ <boolean id="zoom" _label="Zoom" arg-set="-zoom"/>
+ <boolean id="showfps" _label="Show frame rate" arg-set="-fps"/>
+ </hgroup>
+
+ <xscreensaver-image />
+
+ <xscreensaver-updater />
+
+ <_description>
+A kaleidoscope that operates on a loaded image.
+
+https://en.wikipedia.org/wiki/Kaleidoscope
+
+Written by Andrew Dean; 2003.
+ </_description>
+</screensaver>
diff --git a/hacks/config/glforestfire.xml b/hacks/config/glforestfire.xml
new file mode 100644
index 0000000..08f882c
--- /dev/null
+++ b/hacks/config/glforestfire.xml
@@ -0,0 +1,46 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="glforestfire" _label="GLForestFire" gl="yes">
+
+ <command arg="-root"/>
+
+ <video href="https://www.youtube.com/watch?v=_0Ff3qHUfsA"/>
+
+ <number id="delay" type="slider" arg="-delay %"
+ _label="Frame rate" _low-label="Low" _high-label="High"
+ low="0" high="100000" default="10000"
+ convert="invert"/>
+
+ <number id="count" type="slider" arg="-count %"
+ _label="Count" _low-label="Rain" _high-label="Huge fire"
+ low="0" high="8000" default="800"/>
+
+ <number id="trees" type="slider" arg="-trees %"
+ _label="Number of trees" _low-label="Desert" _high-label="Forest"
+ low="0" high="20" default="5"/>
+
+ <hgroup>
+ <vgroup>
+ <boolean id="wander" _label="Wander" arg-unset="-no-wander"/>
+ <boolean id="tex" _label="Textures" arg-unset="-no-texture"/>
+ <boolean id="shadow" _label="Shadows" arg-unset="-no-shadows"/>
+ </vgroup>
+ <vgroup>
+ <boolean id="fog" _label="Fog" arg-set="-fog"/>
+ <boolean id="wire" _label="Wireframe" arg-set="-wireframe"/>
+ <boolean id="showfps" _label="Show frame rate" arg-set="-fps"/>
+ </vgroup>
+ </hgroup>
+
+ <xscreensaver-updater />
+
+ <_description>
+This screen saver was removed from the XScreenSaver distribution as of
+version 5.08.
+
+Draws an animation of sprinkling fire-like 3D triangles in a landscape
+filled with trees.
+
+Written by Eric Lassauge; 2002.
+ </_description>
+</screensaver>
diff --git a/hacks/config/glhanoi.xml b/hacks/config/glhanoi.xml
new file mode 100644
index 0000000..6d9aec2
--- /dev/null
+++ b/hacks/config/glhanoi.xml
@@ -0,0 +1,54 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="glhanoi" _label="GLHanoi" gl="yes">
+
+ <command arg="-root"/>
+
+ <video href="https://www.youtube.com/watch?v=1qRCviRmsTY"/>
+
+ <hgroup>
+ <vgroup>
+ <number id="delay" type="slider" arg="-delay %"
+ _label="Frame rate" _low-label="Low" _high-label="High"
+ low="0" high="100000" default="15000" convert="invert"/>
+
+ <number id="count" type="slider" arg="-count %"
+ _label="Number of disks" _low-label="0" _high-label="31"
+ default="0" low="0" high="31"/>
+
+ <number id="poles" type="slider" arg="-poles %"
+ _label="Number of poles" _low-label="0" _high-label="31"
+ default="0" low="3" high="31"/>
+ </vgroup>
+
+ <vgroup>
+ <number id="speed" type="slider" arg="-speed %"
+ _label="Speed (of smallest disks)" _low-label="1" _high-label="20"
+ default="1" low="1" high="20"/>
+
+ <number id="trails" type="slider" arg="-trails %"
+ _label="Length of disk trails" _low-label="0" _high-label="10"
+ default="2" low="0" high="10"/>
+
+ <boolean id="fog" _label="Enable fog" arg-set="-fog"/>
+
+ <boolean id="wire" _label="Wireframe" arg-set="-wireframe"/>
+
+ <boolean id="showfps" _label="Show frame rate" arg-set="-fps"/>
+
+ <boolean id="lighting" _label="Enable lighting" arg-unset="-no-light"/>
+ </vgroup>
+ </hgroup>
+
+ <xscreensaver-updater />
+
+ <_description>
+Solves the Towers of Hanoi puzzle. Move N disks from one pole to
+another, one disk at a time, with no disk ever resting on a disk
+smaller than itself.
+
+https://en.wikipedia.org/wiki/Tower_of_Hanoi
+
+Written by Dave Atkinson; 2005.
+ </_description>
+</screensaver>
diff --git a/hacks/config/glitchpeg.xml b/hacks/config/glitchpeg.xml
new file mode 100644
index 0000000..f53777c
--- /dev/null
+++ b/hacks/config/glitchpeg.xml
@@ -0,0 +1,38 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="glitchpeg" _label="GlitchPEG">
+
+ <command arg="-root"/>
+
+ <video href="https://www.youtube.com/watch?v=Xl5vKJ65_xM"/>
+
+ <hgroup>
+ <vgroup>
+ <number id="delay" type="slider" arg="-delay %"
+ _label="Frame rate" _low-label="Low" _high-label="High"
+ low="0" high="100000" default="30000"
+ convert="invert"/>
+
+ <number id="duration" type="slider" arg="-duration %"
+ _label="Duration" _low-label="1 second" _high-label="10 minutes"
+ low="1" high="600" default="120"/>
+
+ <number id="count" type="slider" arg="-count %"
+ _label="Glitchiness" _low-label="Low" _high-label="High"
+ low="1" high="1024" default="100"/>
+
+ </vgroup>
+
+ <vgroup>
+ <xscreensaver-image />
+ <xscreensaver-updater />
+ </vgroup>
+ </hgroup>
+
+ <_description>
+Loads an image, corrupts it, and then displays the corrupted version,
+several times a second. After a while, finds a new image to corrupt.
+
+Written by Jamie Zawinski; 2018.
+ </_description>
+</screensaver>
diff --git a/hacks/config/glknots.xml b/hacks/config/glknots.xml
new file mode 100644
index 0000000..afdd296
--- /dev/null
+++ b/hacks/config/glknots.xml
@@ -0,0 +1,63 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="glknots" _label="GLKnots" gl="yes">
+
+ <command arg="-root"/>
+
+ <video href="https://www.youtube.com/watch?v=ILiYNkeEb_k"/>
+
+ <hgroup>
+ <vgroup>
+ <number id="delay" type="slider" arg="-delay %"
+ _label="Frame rate" _low-label="Low" _high-label="High"
+ low="0" high="100000" default="30000"
+ convert="invert"/>
+
+ <number id="speed" type="slider" arg="-speed %"
+ _label="Speed" _low-label="Slow" _high-label="Fast"
+ low="0.01" high="5.0" default="1.0"/>
+
+ <select id="rotation">
+ <option id="no" _label="Don't rotate" arg-set="-spin 0"/>
+ <option id="x" _label="Rotate around X axis" arg-set="-spin X"/>
+ <option id="y" _label="Rotate around Y axis" arg-set="-spin Y"/>
+ <option id="z" _label="Rotate around Z axis" arg-set="-spin Z"/>
+ <option id="xy" _label="Rotate around X and Y axes" arg-set="-spin XY"/>
+ <option id="xz" _label="Rotate around X and Z axes" arg-set="-spin XZ"/>
+ <option id="yz" _label="Rotate around Y and Z axes" arg-set="-spin YZ"/>
+ <option id="xyz" _label="Rotate around all three axes"/>
+ </select>
+
+ </vgroup>
+ <vgroup>
+
+ <number id="segments" type="slider" arg="-segments %"
+ _label="Resolution" _low-label="Segmented" _high-label="Smooth"
+ low="100" high="2000" default="800"/>
+
+ <number id="thickness" type="slider" arg="-thickness %"
+ _label="Thickness" _low-label="Thin" _high-label="Thick"
+ low="0.05" high="1.0" default="0.3"/>
+
+ <hgroup>
+ <boolean id="wander" _label="Wander" arg-unset="-no-wander"/>
+ <boolean id="wire" _label="Wireframe" arg-set="-wireframe"/>
+ </hgroup>
+
+ <hgroup>
+ <boolean id="showfps" _label="Show frame rate" arg-set="-fps"/>
+ </hgroup>
+
+ </vgroup>
+ </hgroup>
+
+ <xscreensaver-updater />
+
+ <_description>
+Generates some twisting 3d knot patterns. Spins 'em around.
+
+https://en.wikipedia.org/wiki/Knot_theory
+
+Written by Jamie Zawinski; 2003.
+ </_description>
+</screensaver>
diff --git a/hacks/config/glmatrix.xml b/hacks/config/glmatrix.xml
new file mode 100644
index 0000000..18293da
--- /dev/null
+++ b/hacks/config/glmatrix.xml
@@ -0,0 +1,53 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="glmatrix" _label="GLMatrix" gl="yes">
+
+ <command arg="-root"/>
+
+ <video href="https://www.youtube.com/watch?v=_dktSpsaCPg"/>
+
+ <number id="delay" type="slider" arg="-delay %"
+ _label="Frame rate" _low-label="Low" _high-label="High"
+ low="0" high="100000" default="30000"
+ convert="invert"/>
+
+ <number id="density" type="slider" arg="-density %"
+ _label="Glyph density" _low-label="Sparse" _high-label="Dense"
+ low="0" high="100" default="20"/>
+
+ <number id="speed" type="slider" arg="-speed %"
+ _label="Glyph speed" _low-label="Slow" _high-label="Fast"
+ low="0.1" high="8.0" default="1.0"/>
+
+ <select id="mode">
+ <option id="matrix" _label="Matrix encoding"/>
+ <option id="binary" _label="Binary encoding" arg-set="-mode binary"/>
+ <option id="hex" _label="Hexadecimal encoding" arg-set="-mode hex"/>
+ <option id="dna" _label="Genetic encoding" arg-set="-mode dna"/>
+ </select>
+
+ <hgroup>
+ <boolean id="fog" _label="Fog" arg-unset="-no-fog"/>
+ <boolean id="waves" _label="Waves" arg-unset="-no-waves"/>
+ <boolean id="rotate" _label="Panning" arg-unset="-no-rotate"/>
+ </hgroup>
+
+ <hgroup>
+ <boolean id="tex" _label="Textured" arg-unset="-no-texture"/>
+ <boolean id="wire" _label="Wireframe" arg-set="-wireframe"/>
+ <boolean id="showfps" _label="Show frame rate" arg-set="-fps"/>
+ </hgroup>
+
+ <xscreensaver-updater />
+
+ <_description>
+The 3D "digital rain" effect, as seen in the title sequence of "The Matrix".
+
+See also "xmatrix" for a 2D rendering of the similar effect that
+appeared on the computer monitors actually *in* the movie.
+
+https://en.wikipedia.org/wiki/Matrix_digital_rain
+
+Written by Jamie Zawinski; 2003.
+ </_description>
+</screensaver>
diff --git a/hacks/config/glplanet.xml b/hacks/config/glplanet.xml
new file mode 100644
index 0000000..5714b7a
--- /dev/null
+++ b/hacks/config/glplanet.xml
@@ -0,0 +1,43 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="glplanet" _label="GLPlanet" gl="yes">
+
+ <command arg="-root"/>
+
+ <video href="https://www.youtube.com/watch?v=ohcJ1bVkLZ4"/>
+
+ <number id="delay" type="slider" arg="-delay %"
+ _label="Frame rate" _low-label="Low" _high-label="High"
+ low="0" high="100000" default="20000"
+ convert="invert"/>
+
+ <!-- #### -no-texture -->
+
+ <file id="image" _label="Day image" arg="-image %" />
+ <file id="image2" _label="Night image" arg="-image2 %" />
+
+ <hgroup>
+ <boolean id="wander" _label="Wander" arg-unset="-no-wander"/>
+ <boolean id="rotate" _label="Rotate" arg-unset="-no-rotate"/>
+ <boolean id="roll" _label="Roll" arg-unset="-no-roll"/>
+ <boolean id="stars" _label="Stars" arg-unset="-no-stars"/>
+ </hgroup>
+
+ <hgroup>
+ <boolean id="wire" _label="Wireframe" arg-set="-wireframe"/>
+ <boolean id="showfps" _label="Show frame rate" arg-set="-fps"/>
+ </hgroup>
+
+ <xscreensaver-updater />
+
+ <_description>
+The Earth, bouncing around in space, rendered with satellite imagery
+of the planet in both sunlight and darkness.
+
+If you would like it to display a different planet, any pair of
+Equirectangular-projected maps will work. The maps that come with
+"ssystem" work well.
+
+Written by David Konerding and Jamie Zawinski; 1998.
+ </_description>
+</screensaver>
diff --git a/hacks/config/glschool.xml b/hacks/config/glschool.xml
new file mode 100644
index 0000000..a79ce12
--- /dev/null
+++ b/hacks/config/glschool.xml
@@ -0,0 +1,45 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="glschool" _label="GLSchool" gl="yes">
+
+ <command arg="-root"/>
+
+ <video href="https://www.youtube.com/watch?v=SuMIatcSPdU"/>
+
+ <hgroup>
+ <vgroup>
+ <number id="delay" type="slider" arg="-delay %"
+ _label="Frame rate" _low-label="Low" _high-label="High"
+ low="0" high="100000" default="20000" convert="invert"/>
+
+ <number id="NFish" type="slider" arg="-nfish %"
+ _label="Fish count" _low-label="Few" _high-label="Lots"
+ low="5" high="500" default="100"/>
+
+ <number id="AvoidFact" type="slider" arg="-avoidfact %" _label="Avoidance" _low-label="None" _high-label="High" low="0" high="10" default="1.5"/>
+ </vgroup>
+ <vgroup>
+ <number id="MatchFact" type="slider" arg="-matchfact %" _label="Velocity matching" _low-label="None" _high-label="High" low="0" high="3" default="0.15"/>
+ <number id="CenterFact" type="slider" arg="-centerfact %" _label="Centering" _low-label="None" _high-label="High" low="0" high="1.0" default="0.1"/>
+ <number id="TargetFact" type="slider" arg="-targetfact %" _label="Goal following" _low-label="None" _high-label="High" low="0" high="400" default="80"/>
+ </vgroup>
+ </hgroup>
+
+ <hgroup>
+ <boolean id="wire" _label="Wireframe" arg-set="-wireframe"/>
+ <boolean id="fog" _label="Fog" arg-set="-fog"/>
+ <boolean id="drawgoal" _label="Draw goal" arg-set="-drawgoal"/>
+ <boolean id="drawbbox" _label="Draw bounding box" arg-unset="-no-drawbbox"/>
+ <boolean id="showfps" _label="Show frame rate" arg-set="-fps"/>
+ </hgroup>
+
+ <xscreensaver-updater />
+
+ <_description>
+A school of fish, using the classic "Boids" algorithm by Craig Reynolds.
+
+https://en.wikipedia.org/wiki/Boids
+
+Written by David C. Lambert and Jamie Zawinski; 2006.
+ </_description>
+</screensaver>
diff --git a/hacks/config/glslideshow.xml b/hacks/config/glslideshow.xml
new file mode 100644
index 0000000..c92a6de
--- /dev/null
+++ b/hacks/config/glslideshow.xml
@@ -0,0 +1,55 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="glslideshow" _label="GLSlideshow" gl="yes">
+
+ <command arg="-root"/>
+
+ <video href="https://www.youtube.com/watch?v=Hi0xUWnqBhQ"/>
+
+ <hgroup>
+ <vgroup>
+ <number id="delay" type="slider" arg="-delay %"
+ _label="Frame rate" _low-label="Low" _high-label="High"
+ low="0" high="100000" default="20000"
+ convert="invert"/>
+
+ <number id="duration" type="slider" arg="-duration %"
+ _label="Time until loading a new image"
+ _low-label="10 seconds" _high-label="5 minutes"
+ low="10" high="300" default="30"/>
+
+ <number id="zoom" type="slider" arg="-zoom %"
+ _label="Always show at least this much of the image"
+ _low-label="50%" _high-label="100%"
+ low="50" high="100" default="75"/>
+
+ <number id="pan" type="slider" arg="-pan %"
+ _label="Pan/zoom duration"
+ _low-label="1 second" _high-label="30 seconds"
+ low="1" high="30" default="6"/>
+
+ <number id="fade" type="slider" arg="-fade %"
+ _label="Crossfade duration"
+ _low-label="None" _high-label="30 seconds"
+ low="0" high="30" default="2"/>
+ </vgroup>
+ <vgroup>
+
+ <boolean id="letterbox" _label="Letterbox" arg-unset="-no-letterbox"/>
+ <boolean id="titles" _label="Show file names" arg-set="-titles"/>
+ <boolean id="showfps" _label="Show frame rate" arg-set="-fps"/>
+
+ <xscreensaver-image />
+
+ <xscreensaver-updater />
+
+ </vgroup>
+ </hgroup>
+
+ <_description>
+Loads a random sequence of images and smoothly scans and zooms around
+in each, fading from pan to pan.
+
+Written by Jamie Zawinski and Mike Oliphant; 2003.
+ </_description>
+</screensaver>
diff --git a/hacks/config/glsnake.xml b/hacks/config/glsnake.xml
new file mode 100644
index 0000000..d73663d
--- /dev/null
+++ b/hacks/config/glsnake.xml
@@ -0,0 +1,56 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="glsnake" _label="GLSnake" gl="yes">
+
+ <command arg="-root"/>
+
+ <video href="https://www.youtube.com/watch?v=AIqz-G0n1JU"/>
+
+ <hgroup>
+ <vgroup>
+ <number id="delay" type="slider" arg="-delay %"
+ _label="Frame rate" _low-label="Low" _high-label="High"
+ low="0" high="100000" default="30000"
+ convert="invert"/>
+
+ <number id="duration" type="slider" arg="-statictime %"
+ _label="Duration" _low-label="1" _high-label="30 seconds"
+ low="1000" high="30000" default="5000"/>
+
+ <number id="packing" type="slider" arg="-explode %"
+ _label="Packing" _low-label="Tight" _high-label="Loose"
+ low="0.0" high="0.5" default="0.03"/>
+ </vgroup>
+ <vgroup>
+
+ <number id="angvel" type="slider" arg="-angvel %"
+ _label="Angular velocity" _low-label="Slow" _high-label="Fast"
+ low="0.05" high="5.0" default="1.0"/>
+ <number id="yangvel" type="slider" arg="-yangvel %"
+ _label="Y angular velocity" _low-label="Slow" _high-label="Fast"
+ low="0.0" high="1.0" default="0.10"/>
+
+ <number id="zangvel" type="slider" arg="-zangvel %"
+ _label="Z angular velocity" _low-label="Slow" _high-label="Fast"
+ low="0.0" high="1.0" default="0.14"/>
+
+ </vgroup>
+ </hgroup>
+
+
+ <hgroup>
+ <boolean id="labels" _label="Show titles" arg-set="-titles"/>
+ <boolean id="wire" _label="Wireframe" arg-set="-wireframe"/>
+ <boolean id="showfps" _label="Show frame rate" arg-set="-fps"/>
+ </hgroup>
+
+ <xscreensaver-updater />
+
+ <_description>
+The "Rubik's Snake" puzzle. See also the "Rubik" and "Cube21" screen savers.
+
+https://en.wikipedia.org/wiki/Rubik%27s_Snake
+
+Written by Jamie Wilkinson, Andrew Bennetts, and Peter Aylett; 2002.
+ </_description>
+</screensaver>
diff --git a/hacks/config/gltext.xml b/hacks/config/gltext.xml
new file mode 100644
index 0000000..99ec92f
--- /dev/null
+++ b/hacks/config/gltext.xml
@@ -0,0 +1,51 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="gltext" _label="GLText" gl="yes">
+
+ <command arg="-root"/>
+
+ <video href="https://www.youtube.com/watch?v=jrXa-QtY6MU"/>
+
+ <number id="delay" type="slider" arg="-delay %"
+ _label="Frame rate" _low-label="Low" _high-label="High"
+ low="0" high="100000" default="20000"
+ convert="invert"/>
+
+ <select id="text">
+ <option id="uname" _label="Display system information" />
+ <option id="clock" _label="Display date and time"
+ arg-set="-text '%A%n%d %b %Y%n%r'"/>
+ </select>
+
+ <hgroup>
+ <select id="facing">
+ <option id="front" _label="Always face front"/>
+ <option id="nofront" _label="Spin all the way around" arg-set="-no-front"/>
+ </select>
+ <boolean id="wander" _label="Wander" arg-unset="-no-wander"/>
+ </hgroup>
+
+ <select id="rotation">
+ <option id="no" _label="Don't rotate" arg-set="-spin 0"/>
+ <option id="x" _label="Rotate around X axis" arg-set="-spin X"/>
+ <option id="y" _label="Rotate around Y axis" arg-set="-spin Y"/>
+ <option id="z" _label="Rotate around Z axis" arg-set="-spin Z"/>
+ <option id="xy" _label="Rotate around X and Y axes" arg-set="-spin XY"/>
+ <option id="xz" _label="Rotate around X and Z axes" arg-set="-spin XZ"/>
+ <option id="yz" _label="Rotate around Y and Z axes" arg-set="-spin YZ"/>
+ <option id="xyz" _label="Rotate around all three axes"/>
+ </select>
+
+ <boolean id="wire" _label="Wireframe" arg-set="-wireframe"/>
+ <boolean id="showfps" _label="Show frame rate" arg-set="-fps"/>
+
+ <xscreensaver-updater />
+
+ <_description>
+Displays a few lines of text spinning around in a solid 3D font.
+The text can use strftime() escape codes to display the current
+date and time.
+
+Written by Jamie Zawinski; 2001.
+ </_description>
+</screensaver>
diff --git a/hacks/config/goop.xml b/hacks/config/goop.xml
new file mode 100644
index 0000000..53222f8
--- /dev/null
+++ b/hacks/config/goop.xml
@@ -0,0 +1,65 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="goop" _label="Goop">
+
+ <command arg="-root"/>
+
+ <video href="https://www.youtube.com/watch?v=bLMAF4Q-mGA"/>
+
+ <hgroup>
+ <vgroup>
+ <number id="delay" type="slider" arg="-delay %"
+ _label="Frame rate" _low-label="Low" _high-label="High"
+ low="0" high="100000" default="12000"
+ convert="invert"/>
+
+ <number id="torque" type="slider" arg="-torque %"
+ _label="Speed" _low-label="Slow" _high-label="Fast"
+ low="0.0002" high="0.0500" default="0.0075"/>
+
+ <number id="count" type="slider" arg="-planes %"
+ _label="Blobs" _low-label="Few" _high-label="Many"
+ low="1" high="50" default="12"/>
+
+ </vgroup>
+ <vgroup>
+ <number id="elasticity" type="slider" arg="-elasticity %"
+ _label="Elasticity" _low-label="Low" _high-label="High"
+ low="0.1" high="5.0" default="0.9"/>
+
+ <number id="maxv" type="slider" arg="-max-velocity %"
+ _label="Speed limit" _low-label="Low" _high-label="High"
+ low="0.1" high="3.0" default="0.5"/>
+
+ <boolean id="showfps" _label="Show frame rate" arg-set="-fps"/>
+
+ </vgroup>
+ </hgroup>
+
+ <hgroup>
+ <select id="mode">
+ <option id="transparent" _label="Transparent blobs"/>
+ <option id="opaque" _label="Opaque blobs" arg-set="-mode opaque"/>
+ <option id="xor" _label="XOR blobs" arg-set="-mode xor"/>
+ </select>
+
+ <select id="color-mode">
+ <option id="additive" _label="Additive colors (transmitted light)"/>
+ <option id="subtractive" _label="Subtractive colors (reflected light)"
+ arg-set="-subtractive"/>
+ </select>
+ </hgroup>
+
+ <xscreensaver-updater />
+
+ <_description>
+Amoeba-like blobs change shape as they wander around the screen.
+They are translucent, so you can see the lower blobs through the
+higher ones, and when one passes over another, their colors merge. I
+got the idea for this from a mouse pad I had once, which achieved the
+same kind of effect in real life by having several layers of plastic
+with colored oil between them.
+
+Written by Jamie Zawinski; 1997.
+ </_description>
+</screensaver>
diff --git a/hacks/config/grav.xml b/hacks/config/grav.xml
new file mode 100644
index 0000000..807f37d
--- /dev/null
+++ b/hacks/config/grav.xml
@@ -0,0 +1,36 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="grav" _label="Grav">
+
+ <command arg="-root"/>
+
+ <video href="https://www.youtube.com/watch?v=spQRFDmDMeg"/>
+
+ <number id="delay" type="slider" arg="-delay %"
+ _label="Frame rate" _low-label="Low" _high-label="High"
+ low="0" high="100000" default="10000"
+ convert="invert"/>
+
+ <number id="count" type="slider" arg="-count %"
+ _label="Number of objects" _low-label="Few" _high-label="Many"
+ low="1" high="40" default="12"/>
+
+ <number id="ncolors" type="slider" arg="-ncolors %"
+ _label="Number of colors" _low-label="Two" _high-label="Many"
+ low="1" high="255" default="64"/>
+
+ <hgroup>
+ <boolean id="decay" _label="Orbital decay" arg-unset="-no-decay"/>
+ <boolean id="trail" _label="Object trails" arg-unset="-no-trail"/>
+ <boolean id="showfps" _label="Show frame rate" arg-set="-fps"/>
+ </hgroup>
+
+ <xscreensaver-updater />
+
+ <_description>
+An orbital simulation. With trails enabled, it looks kind of like a
+cloud-chamber photograph.
+
+Written by Greg Bowering; 1997.
+ </_description>
+</screensaver>
diff --git a/hacks/config/greynetic.xml b/hacks/config/greynetic.xml
new file mode 100644
index 0000000..cbc11a9
--- /dev/null
+++ b/hacks/config/greynetic.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="greynetic" _label="Greynetic">
+
+ <command arg="-root"/>
+
+ <video href="https://www.youtube.com/watch?v=lVEi089s1_c"/>
+
+ <number id="delay" type="slider" arg="-delay %"
+ _label="Frame rate" _low-label="Low" _high-label="High"
+ low="0" high="250000" default="10000"
+ convert="invert"/>
+
+ <boolean id="grey" _label="Grey" arg-set="-grey"/>
+
+ <boolean id="showfps" _label="Show frame rate" arg-set="-fps"/>
+
+ <xscreensaver-updater />
+
+ <_description>
+Colored, stippled and transparent rectangles.
+
+Written by Jamie Zawinski; 1992.
+ </_description>
+</screensaver>
diff --git a/hacks/config/halftone.xml b/hacks/config/halftone.xml
new file mode 100644
index 0000000..be65660
--- /dev/null
+++ b/hacks/config/halftone.xml
@@ -0,0 +1,61 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="halftone" _label="Halftone">
+
+ <command arg="-root"/>
+
+ <video href="https://www.youtube.com/watch?v=K2lqgBPde4o"/>
+
+ <hgroup>
+ <vgroup>
+ <number id="delay" type="slider" arg="-delay %"
+ _label="Frame rate" _low-label="Low" _high-label="High"
+ low="0" high="100000" default="10000" convert="invert"/>
+
+ <number id="count" type="slider" arg="-count %"
+ _label="Gravity points" _low-label="Few" _high-label="Many"
+ low="1" high="50" default="10"/>
+
+ <number id="size" type="slider" arg="-spacing %"
+ _label="Dot size" _low-label="Small" _high-label="Big"
+ low="2" high="50" default="14"/>
+
+ <number id="dotfill" type="slider" arg="-sizefactor %"
+ _label="Dot fill factor" _low-label="Small" _high-label="Large"
+ low="0.1" high="3" default="1.5"/>
+ </vgroup>
+ <vgroup>
+ <number id="minspeed" type="slider" arg="-minspeed %"
+ _label="Minimum speed" _low-label="Low" _high-label="High"
+ low="0.001" high="0.09" default="0.001"/>
+
+ <number id="maxspeed" type="slider" arg="-maxspeed %"
+ _label="Maximum speed" _low-label="Low" _high-label="High"
+ low="0.001" high="0.09" default="0.02"/>
+
+ <number id="minmass" type="slider" arg="-minmass %"
+ _label="Minimum mass" _low-label="Small" _high-label="Large"
+ low="0.001" high="0.09" default="0.001"/>
+
+ <number id="maxmass" type="slider" arg="-maxmass %"
+ _label="Maximum mass" _low-label="Small" _high-label="Large"
+ low="0.001" high="0.09" default="0.02"/>
+ </vgroup>
+ </hgroup>
+
+ <boolean id="showfps" _label="Show frame rate" arg-set="-fps"/>
+
+ <xscreensaver-updater />
+
+ <_description>
+A halftone dot pattern in motion.
+
+Draws the gravity force in each point on the screen seen through a
+halftone dot pattern. The gravity force is calculated from a set of
+moving mass points. View it from a distance for best effect.
+
+https://en.wikipedia.org/wiki/Halftone
+
+Written by Peter Jaric; 2002.
+ </_description>
+</screensaver>
diff --git a/hacks/config/halo.xml b/hacks/config/halo.xml
new file mode 100644
index 0000000..ef947e2
--- /dev/null
+++ b/hacks/config/halo.xml
@@ -0,0 +1,42 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="halo" _label="Halo">
+
+ <command arg="-root"/>
+
+ <video href="https://www.youtube.com/watch?v=K7LbfXh3LTc"/>
+
+ <number id="delay" type="slider" arg="-delay %"
+ _label="Frame rate" _low-label="Low" _high-label="High"
+ low="0" high="200000" default="100000"
+ convert="invert"/>
+
+ <number id="count" type="slider" arg="-count %"
+ _label="Number of circles" _low-label="Few" _high-label="Many"
+ low="0" high="20" default="0"/>
+
+ <number id="ncolors" type="slider" arg="-colors %"
+ _label="Number of colors" _low-label="Two" _high-label="Many"
+ low="1" high="255" default="100"/>
+
+ <select id="mode">
+ <option id="random" _label="Random mode"/>
+ <option id="seuss" _label="Seuss mode" arg-set="-mode seuss"/>
+ <option id="ramp" _label="Ramp mode" arg-set="-mode ramp"/>
+ </select>
+
+ <hgroup>
+ <boolean id="animate" _label="Animate circles" arg-set="-animate"/>
+ <boolean id="showfps" _label="Show frame rate" arg-set="-fps"/>
+ </hgroup>
+
+ <xscreensaver-updater />
+
+ <_description>
+Circular interference patterns.
+
+https://en.wikipedia.org/wiki/Moire_pattern
+
+Written by Jamie Zawinski; 1993.
+ </_description>
+</screensaver>
diff --git a/hacks/config/helix.xml b/hacks/config/helix.xml
new file mode 100644
index 0000000..00d4525
--- /dev/null
+++ b/hacks/config/helix.xml
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="helix" _label="Helix">
+
+ <command arg="-root"/>
+
+ <video href="https://www.youtube.com/watch?v=H-mMnadnPSs"/>
+
+ <number id="delay" type="slider" arg="-subdelay %"
+ _label="Frame rate" _low-label="Low" _high-label="High"
+ low="0" high="100000" default="20000"
+ convert="invert"/>
+
+ <number id="delay" type="slider" arg="-delay %"
+ _label="Linger" _low-label="1 second" _high-label="1 minute"
+ low="1" high="60" default="5"/>
+
+ <boolean id="showfps" _label="Show frame rate" arg-set="-fps"/>
+
+ <xscreensaver-updater />
+
+ <_description>
+Spirally string-art-ish patterns.
+
+Written by Jamie Zawinski; 1992.
+ </_description>
+</screensaver>
diff --git a/hacks/config/hexadrop.xml b/hacks/config/hexadrop.xml
new file mode 100644
index 0000000..8f8baef
--- /dev/null
+++ b/hacks/config/hexadrop.xml
@@ -0,0 +1,60 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="hexadrop" _label="Hexadrop">
+
+ <command arg="-root"/>
+
+ <video href="https://www.youtube.com/watch?v=HMPVzQUGW-Q"/>
+
+ <hgroup>
+ <vgroup>
+ <number id="delay" type="slider" arg="-delay %"
+ _label="Frame rate" _low-label="Low" _high-label="High"
+ low="0" high="50000" default="30000"
+ convert="invert"/>
+
+ <number id="speed" type="slider" arg="-speed %"
+ _label="Speed" _low-label="Slow" _high-label="Fast"
+ low="0.1" high="4.0" default="1.0"/>
+
+ <number id="size" type="slider" arg="-size %"
+ _label="Tile size" _low-label="Small" _high-label="Large"
+ low="5" high="50" default="15"
+ convert="invert"/>
+ </vgroup>
+
+ <vgroup>
+ <select id="sides">
+ <option id="0" _label="Random shape"/>
+ <option id="3" _label="Triangles" arg-set="-sides 3"/>
+ <option id="4" _label="Squares" arg-set="-sides 4"/>
+ <option id="6" _label="Hexagons" arg-set="-sides 6"/>
+ <option id="5" _label="Octagons" arg-set="-sides 8"/>
+ </select>
+
+ <select id="uniform">
+ <option id="r-uniform" _label="Random speed"/>
+ <option id="uniform" _label="Uniform speed" arg-set="-uniform-speed"/>
+ <option id="no-uniform" _label="Non-uniform speed" arg-set="-no-uniform-speed"/>
+ </select>
+
+ <select id="lockstep">
+ <option id="r-lockstep" _label="Random sync"/>
+ <option id="lockstep" _label="Synchronized" arg-set="-lockstep"/>
+ <option id="no-lockstep" _label="Non-synchronized" arg-set="-no-lockstep"/>
+ </select>
+
+ <boolean id="showfps" _label="Show frame rate" arg-set="-fps"/>
+ </vgroup>
+ </hgroup>
+
+ <xscreensaver-updater />
+
+ <_description>
+A grid of hexagons or other shapes, with tiles dropping out.
+
+https://en.wikipedia.org/wiki/Tiling_by_regular_polygons
+
+Written by Jamie Zawinski; 2013.
+ </_description>
+</screensaver>
diff --git a/hacks/config/hexstrut.xml b/hacks/config/hexstrut.xml
new file mode 100644
index 0000000..0823dc8
--- /dev/null
+++ b/hacks/config/hexstrut.xml
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="hexstrut" _label="Hexstrut" gl="yes">
+
+ <command arg="-root"/>
+
+ <video href="https://www.youtube.com/watch?v=iOCffj3ZmgE"/>
+
+ <hgroup>
+ <vgroup>
+ <number id="delay" type="slider" arg="-delay %"
+ _label="Frame rate" _low-label="Low" _high-label="High"
+ low="0" high="100000" default="30000"
+ convert="invert"/>
+
+ <number id="speed" type="slider" arg="-speed %"
+ _label="Speed" _low-label="Slow" _high-label="Fast"
+ low="0.1" high="5" default="1.0"/>
+ </vgroup>
+
+ <vgroup>
+ <number id="count" type="slider" arg="-count %"
+ _label="Hexagon Size" _low-label="Small" _high-label="Large"
+ low="2" high="80" default="20"
+ convert="invert"/>
+
+ <number id="thickness" type="slider" arg="-thickness %"
+ _label="Line Thickness" _low-label="Thin" _high-label="Thick"
+ low="0.01" high="1.7" default="0.2"/>
+ </vgroup>
+ </hgroup>
+
+ <hgroup>
+ <boolean id="wander" _label="Wander" arg-unset="-no-wander"/>
+ <boolean id="spin" _label="Spin" arg-unset="-no-spin"/>
+ <boolean id="wire" _label="Wireframe" arg-set="-wireframe"/>
+ <boolean id="showfps" _label="Show frame rate" arg-set="-fps"/>
+ </hgroup>
+
+ <xscreensaver-updater />
+
+ <_description>
+A grid of hexagons composed of rotating Y-shaped struts.
+Waves of rotation and color changes randomly propagate across the plane.
+
+Written by Jamie Zawinski; 2016.
+ </_description>
+</screensaver>
diff --git a/hacks/config/hilbert.xml b/hacks/config/hilbert.xml
new file mode 100644
index 0000000..7f44aed
--- /dev/null
+++ b/hacks/config/hilbert.xml
@@ -0,0 +1,77 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="hilbert" _label="Hilbert" gl="yes">
+
+ <command arg="-root"/>
+
+ <video href="https://www.youtube.com/watch?v=NhKmipo_Ek4"/>
+
+ <hgroup>
+ <vgroup>
+
+ <hgroup>
+ <select id="twodee">
+ <option id="random" _label="2D or 3D"/>
+ <option id="2D" _label="2D" arg-set="-mode 2d"/>
+ <option id="3D" _label="3D" arg-set="-mode 3d"/>
+ </select>
+
+ <select id="closed">
+ <option id="random" _label="Open or closed paths"/>
+ <option id="closed" _label="Closed" arg-set="-ends closed"/>
+ <option id="open" _label="Open" arg-set="-ends open"/>
+ </select>
+ </hgroup>
+
+ <hgroup>
+ <vgroup>
+ <number id="delay" type="slider" arg="-delay %"
+ _label="Frame rate" _low-label="Slow" _high-label="Fast"
+ low="0" high="100000" default="30000"
+ convert="invert"/>
+
+ <number id="speed" type="slider" arg="-speed %"
+ _label="Speed" _low-label="Slow" _high-label="Fast"
+ low="0.02" high="10.0" default="1.0"/>
+ </vgroup>
+
+ <vgroup>
+ <number id="depth" type="slider" arg="-max-depth %"
+ _label="Recursion levels" _low-label="2" _high-label="10"
+ low="2" high="10" default="5"/>
+
+ <number id="thickness" type="slider" arg="-thickness %"
+ _label="Line thickness" _low-label="Thin" _high-label="Thick"
+ low="0.01" high="1.0" default="0.25"/>
+ </vgroup>
+ </hgroup>
+
+ <hgroup>
+ <boolean id="wander" _label="Wander" arg-set="-wander"/>
+ <boolean id="spin" _label="Spin" arg-unset="-no-spin"/>
+ <boolean id="showfps" _label="Show frame rate" arg-set="-fps"/>
+ <boolean id="wire" _label="Wireframe" arg-set="-wireframe"/>
+ </hgroup>
+
+ </vgroup>
+ </hgroup>
+
+ <xscreensaver-updater />
+
+ <_description>
+The recursive Hilbert space-filling curve, both 2D and 3D variants.
+It incrementally animates the growth and recursion to the maximum
+depth, then unwinds it back.
+
+The Hilbert path is a single contiguous line that can fill a volume
+without crossing itself. As a data structure, Hilbert paths are
+useful because ordering along the curve preserves locality: points
+that are close together along the curve are also close together in space.
+The converse is often, but not always, true. The coloration
+reflects this.
+
+https://en.wikipedia.org/wiki/Hilbert_curve
+
+Written by Jamie Zawinski; 2011.
+ </_description>
+</screensaver>
diff --git a/hacks/config/hopalong.xml b/hacks/config/hopalong.xml
new file mode 100644
index 0000000..c3c5aad
--- /dev/null
+++ b/hacks/config/hopalong.xml
@@ -0,0 +1,64 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="hopalong" _label="Hopalong">
+
+ <command arg="-root"/>
+
+ <video href="https://www.youtube.com/watch?v=Ck0pKMflau0"/>
+
+ <hgroup>
+ <vgroup>
+ <number id="delay" type="slider" arg="-delay %"
+ _label="Frame rate" _low-label="Low" _high-label="High"
+ low="0" high="100000" default="10000"
+ convert="invert"/>
+
+ <number id="cycles" type="slider" arg="-cycles %"
+ _label="Duration" _low-label="Small" _high-label="Large"
+ low="0" high="800000" default="2500"/>
+ </vgroup>
+
+ <vgroup>
+ <number id="count" type="slider" arg="-count %"
+ _label="Color contrast" _low-label="Low" _high-label="High"
+ low="100" high="10000" default="1000"/>
+
+ <number id="ncolors" type="slider" arg="-ncolors %"
+ _label="Number of colors" _low-label="Two" _high-label="Many"
+ low="1" high="255" default="200"/>
+ </vgroup>
+ </hgroup>
+
+ <hgroup>
+ <vgroup>
+ <boolean id="sine" _label="Sine" arg-set="-sine"/>
+ <boolean id="martin" _label="Martin" arg-set="-martin"/>
+ <boolean id="popcorn" _label="Popcorn" arg-set="-popcorn"/>
+ </vgroup>
+ <vgroup>
+ <boolean id="jong" _label="Jong" arg-set="-jong"/>
+ <boolean id="rr" _label="RR" arg-set="-rr"/>
+ <boolean id="ejk1" _label="EJK1" arg-set="-ejk1"/>
+ </vgroup>
+ <vgroup>
+ <boolean id="ejk2" _label="EJK2" arg-set="-ejk2"/>
+ <boolean id="ejk3" _label="EJK3" arg-set="-ejk3"/>
+ <boolean id="ejk4" _label="EJK4" arg-set="-ejk4"/>
+ </vgroup>
+ <vgroup>
+ <boolean id="ejk5" _label="EJK5" arg-set="-ejk5"/>
+ <boolean id="ejk6" _label="EJK6" arg-set="-ejk6"/>
+ <boolean id="showfps" _label="Show frame rate" arg-set="-fps"/>
+ </vgroup>
+ </hgroup>
+
+ <xscreensaver-updater />
+
+ <_description>
+Lacy fractal patterns based on iteration in the imaginary
+plane, from a 1986 Scientific American article. See also the
+"Discrete" screen saver.
+
+Written by Patrick Naughton; 1992.
+ </_description>
+</screensaver>
diff --git a/hacks/config/hydrostat.xml b/hacks/config/hydrostat.xml
new file mode 100644
index 0000000..b8b8bbe
--- /dev/null
+++ b/hacks/config/hydrostat.xml
@@ -0,0 +1,76 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="hydrostat" _label="Hydrostat" gl="yes">
+
+ <command arg="-root"/>
+
+ <video href="https://www.youtube.com/watch?v=nn-nA18hFt0"/>
+
+ <hgroup>
+ <vgroup>
+ <number id="delay" type="slider" arg="-delay %"
+ _label="Frame rate" _low-label="Low" _high-label="High"
+ low="0" high="100000" default="20000"
+ convert="invert"/>
+
+ <number id="speed" type="slider" arg="-speed %"
+ _label="Animation speed" _low-label="Slow" _high-label="Fast"
+ low="0.01" high="4.0" default="1.0"/>
+
+ <number id="count" type="slider" arg="-count %"
+ _label="Number of squid" _low-label="One" _high-label="Many"
+ low="1" high="100" default="3" />
+
+ <number id="head_radius" type="slider" arg="-head-radius %"
+ _label="Head size" _low-label="Small" _high-label="Large"
+ low="10" high="100" default="60" />
+
+ <number id="tentacles" type="slider" arg="-tentacles %"
+ _label="Number of tentacles" _low-label="Few" _high-label="Many"
+ low="3" high="100" default="35" />
+
+ </vgroup>
+ <vgroup>
+
+ <number id="thickness" type="slider" arg="-thickness %"
+ _label="Thickness" _low-label="Thin" _high-label="Thick"
+ low="3" high="40" default="18" />
+
+ <number id="length" type="slider" arg="-length %"
+ _label="Length of tentacles" _low-label="Short" _high-label="Long"
+ low="10" high="150" default="55" />
+
+ <number id="gravity" type="slider" arg="-gravity %"
+ _label="Gravity" _low-label="Weak" _high-label="Strong"
+ low="0" high="10.0" default="0.5" />
+
+ <number id="current" type="slider" arg="-current %"
+ _label="Current" _low-label="Weak" _high-label="Strong"
+ low="0.0" high="10.0" default="0.25" />
+
+ <number id="friction" type="slider" arg="-friction %"
+ _label="Viscosity" _low-label="Low" _high-label="High"
+ low="0.0" high="0.1" default="0.02" />
+ </vgroup>
+ </hgroup>
+
+ <hgroup>
+ <boolean id="pulse" _label="Pulse" arg-unset="-no-pulse" />
+ <boolean id="wire" _label="Wireframe" arg-set="-wireframe"/>
+ <boolean id="showfps" _label="Show frame rate" arg-set="-fps"/>
+ <xscreensaver-updater />
+ </hgroup>
+
+ <_description>
+Wiggly squid or jellyfish with many tentacles.
+
+A muscular hydrostat is a biological structure used to move its host
+about, consisting of muscles with no skeletal support. It performs
+its hydraulic movement without fluid in a separate compartment, as in
+a hydrostatic skeleton.
+
+https://en.wikipedia.org/wiki/Muscular_hydrostat
+
+Written by Justin Windle and Jamie Zawinski; 2016.
+ </_description>
+</screensaver>
diff --git a/hacks/config/hyperball.xml b/hacks/config/hyperball.xml
new file mode 100644
index 0000000..8f674d2
--- /dev/null
+++ b/hacks/config/hyperball.xml
@@ -0,0 +1,66 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="hyperball" _label="HyperBall">
+
+ <command arg="-root"/>
+
+ <video href="https://www.youtube.com/watch?v=BqOHgn0BQOc"/>
+
+ <hgroup>
+ <vgroup>
+ <number id="delay" type="slider" arg="-delay %"
+ _label="Frame rate" _low-label="Low" _high-label="High"
+ low="0" high="100000" default="20000"
+ convert="invert"/>
+
+
+ <number id="z" type="slider" arg="-observer-z %"
+ _label="Zoom" _low-label="Near" _high-label="Far"
+ low="1.125" high="10.0" default="3.0"/>
+
+ <boolean id="showfps" _label="Show frame rate" arg-set="-fps"/>
+ </vgroup>
+
+ <vgroup>
+ <number id="xw" type="slider" arg="-xw %"
+ _label="XW rotation" _low-label="Slow" _high-label="Fast"
+ low="0" high="20" default="0"/>
+ <number id="xy" type="slider" arg="-xy %"
+ _label="XY rotation" _low-label="Slow" _high-label="Fast"
+ low="0" high="20" default="3"/>
+ <number id="xz" type="slider" arg="-xz %"
+ _label="XZ rotation" _low-label="Slow" _high-label="Fast"
+ low="0" high="20" default="5"/>
+ </vgroup>
+ <vgroup>
+ <number id="yw" type="slider" arg="-yw %"
+ _label="YW rotation" _low-label="Slow" _high-label="Fast"
+ low="0" high="20" default="10"/>
+ <number id="yz" type="slider" arg="-yz %"
+ _label="YZ rotation" _low-label="Slow" _high-label="Fast"
+ low="0" high="20" default="0"/>
+ <number id="zw" type="slider" arg="-zw %"
+ _label="ZW rotation" _low-label="Slow" _high-label="Fast"
+ low="0" high="20" default="0"/>
+ </vgroup>
+ </hgroup>
+
+ <xscreensaver-updater />
+
+ <_description>
+This screen saver was removed from the XScreenSaver distribution as of
+version 5.10. It has been replaced by the more general "Polytopes"
+screen saver, which can display this object as well as others. The
+Polytopes "120-cell" object corresponds to this one.
+
+Hyperball is to hypercube as dodecahedron is to cube: this displays
+a 2D projection of the sequence of 3D objects which are the projections
+of the 4D analog to the dodecahedron. Technically, it is a "120 cell
+polytope".
+
+https://en.wikipedia.org/wiki/Hypercube
+https://en.wikipedia.org/wiki/Regular_polytope
+
+Written by Joe Keane; 2000.
+ </_description>
+</screensaver>
diff --git a/hacks/config/hypercube.xml b/hacks/config/hypercube.xml
new file mode 100644
index 0000000..f471230
--- /dev/null
+++ b/hacks/config/hypercube.xml
@@ -0,0 +1,77 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="hypercube" _label="HyperCube">
+
+ <command arg="-root"/>
+
+ <video href="https://www.youtube.com/watch?v=tOLzz_D4-0E"/>
+
+ <hgroup>
+ <vgroup>
+ <number id="delay" type="slider" arg="-delay %"
+ _label="Frame rate" _low-label="Low" _high-label="High"
+ low="0" high="100000" default="10000"
+ convert="invert"/>
+
+ <number id="z" type="slider" arg="-observer-z %"
+ _label="Zoom" _low-label="Near" _high-label="Far"
+ low="1.125" high="10.0" default="3.0"/>
+
+ <boolean id="showfps" _label="Show frame rate" arg-set="-fps"/>
+ </vgroup>
+
+ <vgroup>
+ <number id="xw" type="slider" arg="-xw %"
+ _label="XW rotation" _low-label="Slow" _high-label="Fast"
+ low="0" high="20" default="0"/>
+ <number id="xy" type="slider" arg="-xy %"
+ _label="XY rotation" _low-label="Slow" _high-label="Fast"
+ low="0" high="20" default="3"/>
+ <number id="xz" type="slider" arg="-xz %"
+ _label="XZ rotation" _low-label="Slow" _high-label="Fast"
+ low="0" high="20" default="5"/>
+ </vgroup>
+ <vgroup>
+ <number id="yw" type="slider" arg="-yw %"
+ _label="YW rotation" _low-label="Slow" _high-label="Fast"
+ low="0" high="20" default="10"/>
+ <number id="yz" type="slider" arg="-yz %"
+ _label="YZ rotation" _low-label="Slow" _high-label="Fast"
+ low="0" high="20" default="0"/>
+ <number id="zw" type="slider" arg="-zw %"
+ _label="ZW rotation" _low-label="Slow" _high-label="Fast"
+ low="0" high="20" default="0"/>
+ </vgroup>
+ </hgroup>
+
+ <!-- #### -color0 [magenta] -->
+ <!-- #### -color1 [yellow] -->
+ <!-- #### -color2 [#FF9300] -->
+ <!-- #### -color3 [#FF0093] -->
+ <!-- #### -color4 [green] -->
+ <!-- #### -color5 [#8080FF] -->
+ <!-- #### -color6 [#00D0FF] -->
+ <!-- #### -color7 [#00FFD0] -->
+
+ <xscreensaver-updater />
+
+ <_description>
+This screen saver was removed from the XScreenSaver distribution as of
+version 5.10. It has been replaced by the more general "Polytopes"
+screen saver, which can display this object as well as others.
+
+This displays 2D projections of the sequence of 3D objects which are
+the projections of the 4D analog to the cube: as a square is composed
+of four lines, each touching two others; and a cube is composed of
+six squares, each touching four others; a hypercube is composed of
+eight cubes, each touching six others. To make it easier to
+visualize the rotation, it uses a different color for the edges of
+each face. Don't think about it too long, or your brain will melt.
+
+https://en.wikipedia.org/wiki/Hypercube
+https://en.wikipedia.org/wiki/Tesseract
+https://en.wikipedia.org/wiki/Regular_polytope
+
+Written by Joe Keane, Fritz Mueller, and Jamie Zawinski; 1992.
+ </_description>
+</screensaver>
diff --git a/hacks/config/hypertorus.xml b/hacks/config/hypertorus.xml
new file mode 100644
index 0000000..a82e090
--- /dev/null
+++ b/hacks/config/hypertorus.xml
@@ -0,0 +1,116 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="hypertorus" _label="Hypertorus" gl="yes">
+
+ <command arg="-root"/>
+
+ <video href="https://www.youtube.com/watch?v=KJWe4G4Qa1Q"/>
+
+ <hgroup>
+ <number id="delay" type="slider" arg="-delay %"
+ _label="Frame rate" _low-label="Low" _high-label="High"
+ low="0" high="100000" default="25000"
+ convert="invert"/>
+ <boolean id="showfps" _label="Show frame rate" arg-set="-fps"/>
+ </hgroup>
+
+ <hgroup>
+ <select id="display-mode">
+ <option id="wire" _label="Wireframe"
+ arg-set="-mode wireframe"/>
+ <option id="surface" _label="Solid"/>
+ <option id="transparent" _label="Transparent"
+ arg-set="-mode transparent"/>
+ </select>
+
+ <select id="appearance">
+ <option id="solid" _label="Solid object"
+ arg-set="-appearance solid"/>
+ <option id="bands" _label="Transparent bands"/>
+ <option id="bands" _label="1 transparent spiral"
+ arg-set="-appearance spirals-1"/>
+ <option id="bands" _label="2 transparent spirals"
+ arg-set="-appearance spirals-2"/>
+ <option id="bands" _label="4 transparent spirals"
+ arg-set="-appearance spirals-4"/>
+ <option id="bands" _label="8 transparent spirals"
+ arg-set="-appearance spirals-8"/>
+ <option id="bands" _label="16 Transparent spirals"
+ arg-set="-appearance spirals-16"/>
+ </select>
+
+ <select id="colors">
+ <option id="twosided" _label="Two-sided" arg-set="-twosided"/>
+ <option id="colorwheel" _label="Color wheel"/>
+ </select>
+
+ <select id="projection3d">
+ <option id="perspective-3d" _label="Perspective 3D"/>
+ <option id="orthographic-3d" _label="Orthographic 3D"
+ arg-set="-orthographic-3d"/>
+ </select>
+
+ <select id="projection4d">
+ <option id="perspective-4d" _label="Perspective 4D"/>
+ <option id="orthographic-4d" _label="Orthographic 4D"
+ arg-set="-orthographic-4d"/>
+ </select>
+ </hgroup>
+
+ <hgroup>
+
+ <vgroup>
+
+ <number id="speed-wx" type="slider" arg="-speed-wx %"
+ _label="WX rotation speed"
+ _low-label="-4.0" _high-label="4.0"
+ low="-4.0" high="4.0" default="1.1"/>
+
+ <number id="speed-wy" type="slider" arg="-speed-wy %"
+ _label="WY rotation speed"
+ _low-label="-4.0" _high-label="4.0"
+ low="-4.0" high="4.0" default="1.3"/>
+
+ <number id="speed-wz" type="slider" arg="-speed-wz %"
+ _label="WZ rotation speed"
+ _low-label="-4.0" _high-label="4.0"
+ low="-4.0" high="4.0" default="1.5"/>
+
+ </vgroup>
+
+ <vgroup>
+
+ <number id="speed-xy" type="slider" arg="-speed-xy %"
+ _label="XY rotation speed"
+ _low-label="-4.0" _high-label="4.0"
+ low="-4.0" high="4.0" default="1.7"/>
+
+ <number id="speed-xz" type="slider" arg="-speed-xz %"
+ _label="XZ rotation speed"
+ _low-label="-4.0" _high-label="4.0"
+ low="-4.0" high="4.0" default="1.9"/>
+
+ <number id="speed-yz" type="slider" arg="-speed-yz %"
+ _label="YZ rotation speed"
+ _low-label="-4.0" _high-label="4.0"
+ low="-4.0" high="4.0" default="2.1"/>
+
+ </vgroup>
+
+ </hgroup>
+
+ <xscreensaver-updater />
+
+ <_description>
+A Clifford Torus: a torus lying on the "surface" of a 4D hypersphere.
+Inspired by Thomas Banchoff's book "Beyond the Third Dimension:
+Geometry, Computer Graphics, and Higher Dimensions", Scientific
+American Library, 1990.
+
+https://en.wikipedia.org/wiki/N-sphere
+https://en.wikipedia.org/wiki/Clifford_torus
+https://en.wikipedia.org/wiki/Regular_polytope
+
+Written by Carsten Steger; 2003.
+ </_description>
+</screensaver>
diff --git a/hacks/config/hypnowheel.xml b/hacks/config/hypnowheel.xml
new file mode 100644
index 0000000..ae8975c
--- /dev/null
+++ b/hacks/config/hypnowheel.xml
@@ -0,0 +1,54 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="hypnowheel" _label="Hypnowheel" gl="yes">
+
+ <command arg="-root"/>
+
+ <video href="https://www.youtube.com/watch?v=QcJnc9EKJrI"/>
+
+ <hgroup>
+ <vgroup>
+ <number id="delay" type="slider" arg="-delay %"
+ _label="Frame rate" _low-label="Slow" _high-label="Fast"
+ low="0" high="100000" default="20000"
+ convert="invert"/>
+
+ <number id="speed" type="slider" arg="-speed %"
+ _label="Speed" _low-label="Slow" _high-label="Fast"
+ low="0.1" high="20.0" default="1.0"/>
+
+ <hgroup>
+ <boolean id="wander" _label="Wander" arg-set="-wander"/>
+ <boolean id="symmetric" _label="Symmetric twisting" arg-set="-symmetric"/>
+ </hgroup>
+
+ <boolean id="showfps" _label="Show frame rate" arg-set="-fps"/>
+
+ </vgroup>
+ <vgroup>
+
+ <number id="layers" type="slider" arg="-layers %"
+ _label="Layers" _low-label="1" _high-label="50"
+ low="1" high="50" default="4"/>
+
+ <number id="count" type="slider" arg="-count %"
+ _label="Arms" _low-label="2" _high-label="50"
+ low="2" high="50" default="13"/>
+
+ <number id="twistiness" type="slider" arg="-twistiness %"
+ _label="Twistiness" _low-label="Low" _high-label="High"
+ low="0.2" high="10.0" default="4.0"/>
+ </vgroup>
+ </hgroup>
+
+ <xscreensaver-updater />
+
+ <_description>
+A overlapping, translucent spiral patterns.
+The tightness of their spirals fluctuates in and out.
+
+https://en.wikipedia.org/wiki/Moire_pattern
+
+Written by Jamie Zawinski; 2008.
+ </_description>
+</screensaver>
diff --git a/hacks/config/ifs.xml b/hacks/config/ifs.xml
new file mode 100644
index 0000000..14999f4
--- /dev/null
+++ b/hacks/config/ifs.xml
@@ -0,0 +1,65 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="ifs" _label="IFS">
+
+ <command arg="-root"/>
+
+ <video href="https://www.youtube.com/watch?v=0uOIrVFsECM"/>
+
+ <number id="delay" type="slider" arg="-delay %"
+ _label="Frame rate" _low-label="Low" _high-label="High"
+ low="0" high="100000" default="20000"
+ convert="invert"/>
+
+ <number id="functions" type="slider" arg="-functions %"
+ _label="Number of functions" _low-label="2" _high-label="6"
+ low="2" high="6" default="3"/>
+
+ <number id="detail" type="slider" arg="-detail %"
+ _label="Detail" _low-label="Low" _high-label="High"
+ low="4" high="14" default="9"/>
+
+<!--
+ On a 2.93 gHz iMac i7, I get these rates with -delay 0:
+
+ detail 3: invisible
+ detail 4: barely visible
+ detail 5: 1000+ fps, looks like noise at -delay 0, ok at -delay 20000
+ detail 8: ~700+ fps
+ detail 9: ~400 fps
+ detail 10: ~300 fps
+ detail 11: ~100 fps
+ detail 12: ~50 fps
+ detail 13: ~17 fps
+ detail 14: ~8 fps
+ detail 15: ~2 fps
+
+ With the default -delay, CPU load only starts causing the frame rate
+ to drop below 30 fps detail 12 or higher.
+-->
+
+ <number id="colors" type="slider" arg="-colors %"
+ _label="Number of colors" _low-label="2" _high-label="Many"
+ low="2" high="255" default="200" />
+
+ <hgroup>
+ <boolean id="translate" _label="Translate" arg-unset="-no-translate"/>
+ <boolean id="scale" _label="Scale" arg-unset="-no-scale"/>
+ <boolean id="rotate" _label="Rotate" arg-unset="-no-rotate"/>
+ <boolean id="showfps" _label="Show frame rate" arg-set="-fps"/>
+ </hgroup>
+
+ <xscreensaver-updater />
+
+ <_description>
+
+Clouds of iterated function systems spin and collide.
+
+Note that the "Detail" parameter is exponential. Number of points
+drawn is functions^detail.
+
+https://en.wikipedia.org/wiki/Iterated_function_system
+
+Written by Chris Le Sueur and Robby Griffin; 1997.
+ </_description>
+</screensaver>
diff --git a/hacks/config/imsmap.xml b/hacks/config/imsmap.xml
new file mode 100644
index 0000000..f3d3cb2
--- /dev/null
+++ b/hacks/config/imsmap.xml
@@ -0,0 +1,46 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="imsmap" _label="IMSMap">
+
+ <command arg="-root"/>
+
+ <video href="https://www.youtube.com/watch?v=FP8YJzFkdoQ"/>
+
+ <number id="delay2" type="slider" arg="-delay2 %"
+ _label="Frame rate" _low-label="Low" _high-label="High"
+ low="0" high="100000" default="20000"
+ convert="invert"/>
+
+ <number id="delay" type="slider" arg="-delay %"
+ _label="Linger" _low-label="1 Second" _high-label="1 Minute"
+ low="1" high="60" default="5"/>
+
+ <number id="iterations" type="slider" arg="-iterations %"
+ _label="Density" _low-label="Sparse" _high-label="Dense"
+ low="1" high="7" default="7"/>
+
+ <number id="ncolors" type="slider" arg="-ncolors %"
+ _label="Number of colors" _low-label="Two" _high-label="Many"
+ low="1" high="255" default="50"/>
+
+ <select id="mode">
+ <option id="random" _label="Random coloration"/>
+ <option id="h" _label="Hue gradients" arg-set="-mode h"/>
+ <option id="s" _label="Saturation gradients" arg-set="-mode s"/>
+ <option id="v" _label="Brightness gradients" arg-set="-mode v"/>
+ </select>
+
+ <boolean id="showfps" _label="Show frame rate" arg-set="-fps"/>
+
+ <xscreensaver-updater />
+
+ <_description>
+Cloud-like patterns. The idea is to take four points on the edge of
+the image, and assign each a random "elevation". Then find the point
+between them, and give it a value which is the average of the other
+four, plus some small random offset. Coloration is done based on
+elevation.
+
+Written by Juergen Nickelsen and Jamie Zawinski; 1992.
+ </_description>
+</screensaver>
diff --git a/hacks/config/interaggregate.xml b/hacks/config/interaggregate.xml
new file mode 100644
index 0000000..c1ce7f3
--- /dev/null
+++ b/hacks/config/interaggregate.xml
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="interaggregate" _label="Interaggregate">
+
+ <command arg="-root"/>
+
+ <video href="https://www.youtube.com/watch?v=wqPOZiuj4RI"/>
+
+ <number id="speed" type="slider" arg="-growth-delay %"
+ _label="Frame rate" _low-label="Low" _high-label="High"
+ low="0" high="100000" default="18000" convert="invert"/>
+
+ <number id="init" type="slider" arg="-num-circles %"
+ _label="Number of discs" _low-label="Few" _high-label="Many"
+ low="50" high="400" default="100"/>
+
+ <boolean id="showfps" _label="Show frame rate" arg-set="-fps"/>
+
+ <xscreensaver-updater />
+
+ <_description>
+Pale pencil-like scribbles slowly fill the screen.
+
+A surface is filled with a hundred medium to small sized circles.
+Each circle has a different size and direction, but moves at the same
+slow rate. Displays the instantaneous intersections of the circles as
+well as the aggregate intersections of the circles.
+
+Though actually it doesn't look like circles at all!
+
+Written by Casey Reas, William Ngan, Robert Hodgin, and Jamie Zawinski; 2004.
+ </_description>
+</screensaver>
diff --git a/hacks/config/interference.xml b/hacks/config/interference.xml
new file mode 100644
index 0000000..969d10c
--- /dev/null
+++ b/hacks/config/interference.xml
@@ -0,0 +1,57 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="interference" _label="Interference">
+
+ <command arg="-root"/>
+
+ <video href="https://www.youtube.com/watch?v=nEmvx4l1sHI"/>
+
+ <hgroup>
+ <vgroup>
+ <number id="delay" type="slider" arg="-delay %"
+ _label="Frame rate" _low-label="Low" _high-label="High"
+ low="0" high="100000" default="30000"
+ convert="invert"/>
+
+ <number id="wspeed" type="slider" arg="-speed %"
+ _label="Wave speed" _low-label="Slow" _high-label="Fast"
+ low="1" high="100" default="30"/>
+
+ <number id="radius" type="slider" arg="-radius %"
+ _label="Wave size" _low-label="Small" _high-label="Large"
+ low="50" high="1500" default="800"/>
+
+ <number id="count" type="slider" arg="-count %"
+ _label="Number of waves" _low-label="Few" _high-label="Many"
+ low="0" high="20" default="3"/>
+
+ </vgroup>
+ <vgroup>
+ <number id="gridsize" type="slider" arg="-gridsize %"
+ _label="Magnification" _low-label="Low" _high-label="High"
+ low="1" high="20" default="2"/>
+
+ <number id="ncolors" type="slider" arg="-ncolors %"
+ _label="Number of colors" _low-label="Two" _high-label="Many"
+ low="1" high="255" default="192"/>
+
+ <number id="color_contrast" type="slider" arg="-color-shift %"
+ _label="Color contrast" _low-label="Low" _high-label="High"
+ low="0" high="100" default="60"/>
+
+ <number id="hue" type="slider" arg="-hue %"
+ _label="Hue" _low-label="0" _high-label="360"
+ low="0" high="360" default="0"/>
+ </vgroup>
+ </hgroup>
+
+ <boolean id="showfps" _label="Show frame rate" arg-set="-fps"/>
+
+ <xscreensaver-updater />
+
+ <_description>
+Color field based on computing decaying sinusoidal waves.
+
+Written by Hannu Mallat; 1998.
+ </_description>
+</screensaver>
diff --git a/hacks/config/intermomentary.xml b/hacks/config/intermomentary.xml
new file mode 100644
index 0000000..6db1424
--- /dev/null
+++ b/hacks/config/intermomentary.xml
@@ -0,0 +1,37 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="intermomentary" _label="Intermomentary">
+
+ <command arg="-root"/>
+
+ <video href="https://www.youtube.com/watch?v=pH-ykepPopw"/>
+
+ <number id="speed" type="slider" arg="-draw-delay %"
+ _label="Frame rate" _low-label="Low" _high-label="High"
+ low="0" high="100000" default="30000" convert="invert"/>
+
+ <number id="init" type="slider" arg="-num-discs %"
+ _label="Number of discs" _low-label="50" _high-label="400"
+ low="50" high="400" default="85"/>
+
+ <boolean id="showfps" _label="Show frame rate" arg-set="-fps"/>
+
+ <xscreensaver-updater />
+
+ <_description>
+Blinking dots interact with each other circularly.
+
+A surface is filled with a hundred medium to small sized circles.
+Each circle has a different size and direction, but moves at the same
+slow rate. Displays the instantaneous intersections of the circles as
+well as the aggregate intersections of the circles.
+
+The circles begin with a radius of 1 pixel and slowly increase to some
+arbitrary size. Circles are drawn with small moving points along the
+perimeter. The intersections are rendered as glowing orbs. Glowing
+orbs are rendered only when a perimeter point moves past the
+intersection point.
+
+Written by Casey Reas, William Ngan, Robert Hodgin, and Jamie Zawinski; 2004.
+ </_description>
+</screensaver>
diff --git a/hacks/config/jigglypuff.xml b/hacks/config/jigglypuff.xml
new file mode 100644
index 0000000..832bbef
--- /dev/null
+++ b/hacks/config/jigglypuff.xml
@@ -0,0 +1,95 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="jigglypuff" _label="JigglyPuff" gl="yes">
+
+ <command arg="-root"/>
+
+ <video href="https://www.youtube.com/watch?v=60vfs2WcDtE"/>
+
+ <hgroup>
+ <boolean id="random" _label="Randomize almost everything" arg-unset="-no-random"/>
+
+ <select id="color">
+ <option id="cycle" _label="Cycle" />
+ <option id="flowerbox" _label="Flower box" arg-set="-color flowerbox"/>
+ <option id="clownbarf" _label="Clown barf" arg-set="-color clownbarf"/>
+ <option id="chrome" _label="Chrome" arg-set="-color chrome"/>
+ </select>
+
+ <select id="start">
+ <option id="sphere" _label="Sphere" />
+ <option id="tetrahedron" _label="Tetrahedron" arg-set="-tetra"/>
+ </select>
+
+ <boolean id="wireframe" _label="Wireframe" arg-set="-wireframe"/>
+ <boolean id="showfps" _label="Show frame rate" arg-set="-fps"/>
+
+ </hgroup>
+
+ <hgroup>
+ <vgroup>
+ <number id="delay" type="slider" arg="-delay %"
+ _label="Frame rate" _low-label="Low" _high-label="High"
+ low="0" high="100000" default="20000"
+ convert="invert"/>
+
+ <number id="speed" type="slider" arg="-speed %"
+ _label="Rotation speed" _low-label="Slow" _high-label="Fast"
+ low="50" high="1000" default="500"/>
+
+ <number id="damping" type="slider" arg="-damping %"
+ _label="Inertial damping" _low-label="Low" _high-label="High"
+ low="10" high="1000" default="500" convert="invert"/>
+ </vgroup>
+
+ <vgroup>
+ <number id="hold" type="slider" arg="-hold %"
+ _label="Vertex-vertex force" _low-label="None" _high-label="Strong"
+ low="0" high="1000" default="800"/>
+
+ <number id="complexity" type="slider" arg="-complexity %"
+ _label="Complexity" _low-label="Low" _high-label="High"
+ low="1" high="3" default="2"/>
+
+ <number id="spherism" type="slider" arg="-spherism %"
+ _label="Sphere strength" _low-label="None" _high-label="Strong"
+ low="0" high="1000" default="75"/>
+ </vgroup>
+
+ <vgroup>
+ <number id="distance" type="slider" arg="-distance %"
+ _label="Vertex-vertex behavior" _low-label="Expand"
+ _high-label="Collapse" low="0" high="1000" default="100"/>
+
+ <number id="spooky" type="slider" arg="-spooky %"
+ _label="Spookiness" _low-label="None" _high-label="Spoooooky"
+ low="0" high="12" default="0"/>
+
+ </vgroup>
+ </hgroup>
+
+ <xscreensaver-updater />
+
+ <_description>
+Quasi-spherical objects are distorted.
+
+You have a tetrahedron with tesselated faces. The vertices on these
+faces have forces on them: one proportional to the distance from the
+surface of a sphere; and one proportional to the distance from the
+neighbors. They also have inertia. The resulting effect can range
+from a shape that does nothing, to a frenetic polygon storm.
+Somewhere in between there it usually manifests as a blob that jiggles
+in a kind of disturbing manner.
+
+Written by Keith Macleod; 2003.
+ </_description>
+
+</screensaver>
+
+
+
+
+
+
+
+
diff --git a/hacks/config/jigsaw.xml b/hacks/config/jigsaw.xml
new file mode 100644
index 0000000..219a534
--- /dev/null
+++ b/hacks/config/jigsaw.xml
@@ -0,0 +1,51 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="jigsaw" _label="Jigsaw" gl="yes">
+
+ <command arg="-root"/>
+
+ <video href="https://www.youtube.com/watch?v=T5_hiY2eEeo"/>
+
+ <hgroup>
+ <vgroup>
+ <number id="delay" type="slider" arg="-delay %"
+ _label="Frame rate" _low-label="Low" _high-label="High"
+ low="0" high="100000" default="20000"
+ convert="invert"/>
+
+ <number id="speed" type="slider" arg="-speed %"
+ _label="Speed" _low-label="Slow" _high-label="Fast"
+ low="0.1" high="8.0" default="1.0"/>
+ </vgroup>
+ <vgroup>
+ <number id="density" type="slider" arg="-complexity %"
+ _label="Puzzle pieces" _low-label="Few" _high-label="Many"
+ low="1.0" high="4.0" default="1.0"/>
+
+ <number id="resolution" type="slider" arg="-resolution %"
+ _label="Resolution" _low-label="Chunky" _high-label="Smooth"
+ low="50" high="300" default="100"/>
+ </vgroup>
+ </hgroup>
+
+ <hgroup>
+ <vgroup>
+ <xscreensaver-image />
+ </vgroup>
+ <vgroup>
+ <boolean id="wobble" _label="Tilt" arg-unset="-no-wobble"/>
+ <boolean id="showfps" _label="Show frame rate" arg-set="-fps"/>
+ </vgroup>
+ </hgroup>
+
+ <xscreensaver-updater />
+
+ <_description>
+Carves an image up into a jigsaw puzzle, shuffles it, and solves it.
+
+https://en.wikipedia.org/wiki/Jigsaw_puzzle
+https://en.wikipedia.org/wiki/Tessellation
+
+Written by Jamie Zawinski; 1997.
+ </_description>
+</screensaver>
diff --git a/hacks/config/juggle.xml b/hacks/config/juggle.xml
new file mode 100644
index 0000000..8c8c05a
--- /dev/null
+++ b/hacks/config/juggle.xml
@@ -0,0 +1,60 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="juggle" _label="Juggle">
+
+ <command arg="-root"/>
+
+ <video href="https://www.youtube.com/watch?v=E3Ae7uQtWP0"/>
+
+ <hgroup>
+ <vgroup>
+ <number id="delay" type="slider" arg="-delay %"
+ _label="Frame rate" _low-label="Low" _high-label="High"
+ low="0" high="100000" default="10000"
+ convert="invert"/>
+
+ <number id="count" type="slider" arg="-count %"
+ _label="Speed" _low-label="Slow" _high-label="Fast"
+ low="50" high="1000" default="200"
+ convert="invert"/>
+ </vgroup>
+ <vgroup>
+ <number id="cycles" type="slider" arg="-cycles %"
+ _label="Performance length" _low-label="Short" _high-label="Long"
+ low="50" high="1000" default="1000"/>
+
+ <number id="tail" type="slider" arg="-tail %"
+ _label="Trail length" _low-label="None" _high-label="Long"
+ low="0" high="100" default="1"/>
+ </vgroup>
+ </hgroup>
+
+ <hgroup>
+ <vgroup>
+ <boolean id="balls" _label="Balls" arg-unset="-no-balls"/>
+ <boolean id="clubs" _label="Clubs" arg-unset="-no-clubs"/>
+ </vgroup>
+ <vgroup>
+ <boolean id="rings" _label="Rings" arg-unset="-no-rings"/>
+ <boolean id="knives" _label="Knives" arg-unset="-no-knives"/>
+ </vgroup>
+ <vgroup>
+ <boolean id="torches" _label="Flaming torches" arg-unset="-no-torches"/>
+ <boolean id="bballs" _label="Bowling balls" arg-unset="-no-bballs"/>
+ </vgroup>
+ </hgroup>
+
+ <boolean id="describe" _label="Print Cambridge juggling pattern descriptions" arg-unset="-no-describe"/>
+ <string id="pattern" _label="Juggle this pattern" arg="-pattern %" />
+
+ <boolean id="showfps" _label="Show frame rate" arg-set="-fps"/>
+
+ <xscreensaver-updater />
+
+ <_description>
+This screen saver was removed from the XScreenSaver distribution as of
+version 5.09. It has been replaced by the "Juggler3D" screen saver.
+
+Written by Tim Auckland; 2002.
+ </_description>
+</screensaver>
diff --git a/hacks/config/juggler3d.xml b/hacks/config/juggler3d.xml
new file mode 100644
index 0000000..0e136f2
--- /dev/null
+++ b/hacks/config/juggler3d.xml
@@ -0,0 +1,55 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="juggler3d" _label="Juggler3D" gl="yes">
+ <command arg="-root"/>
+
+ <video href="https://www.youtube.com/watch?v=TJkKaXBOvCA"/>
+
+ <hgroup>
+ <vgroup>
+ <number id="delay" type="slider" arg="-delay %"
+ _label="Frame rate" _low-label="Low" _high-label="High"
+ low="0" high="100000" default="10000"
+ convert="invert"/>
+
+ <number id="count" type="slider" arg="-count %"
+ _label="Speed" _low-label="Slow" _high-label="Fast"
+ low="50" high="1000" default="200"
+ convert="invert"/>
+ </vgroup>
+ <vgroup>
+ <number id="cycles" type="slider" arg="-cycles %"
+ _label="Performance length" _low-label="Short" _high-label="Long"
+ low="50" high="1000" default="1000"/>
+
+ <number id="tail" type="slider" arg="-tail %"
+ _label="Trail length" _low-label="None" _high-label="Long"
+ low="0" high="100" default="1"/>
+ </vgroup>
+ </hgroup>
+
+ <hgroup>
+ <boolean id="balls" _label="Balls" arg-unset="-no-balls"/>
+ <boolean id="clubs" _label="Clubs" arg-unset="-no-clubs"/>
+ <boolean id="rings" _label="Rings" arg-unset="-no-rings"/>
+ <boolean id="knives" _label="Knives" arg-unset="-no-knives"/>
+<!--<boolean id="torches" _label="Flaming torches" arg-unset="-no-torches"/>-->
+ <boolean id="bballs" _label="Bowling balls" arg-unset="-no-bballs"/>
+ </hgroup>
+
+ <boolean id="describe" _label="Print Cambridge juggling pattern descriptions" arg-unset="-no-describe"/>
+ <string id="pattern" _label="Juggle this pattern" arg="-pattern %" />
+
+ <boolean id="showfps" _label="Show frame rate" arg-set="-fps"/>
+
+ <xscreensaver-updater />
+
+ <_description>
+A 3D juggling stick-man, with Cambridge juggling pattern
+notation used to describe the patterns he juggles.
+
+https://en.wikipedia.org/wiki/Siteswap
+
+Written by Tim Auckland and Jamie Zawinski; 2002.
+ </_description>
+</screensaver>
diff --git a/hacks/config/julia.xml b/hacks/config/julia.xml
new file mode 100644
index 0000000..f648197
--- /dev/null
+++ b/hacks/config/julia.xml
@@ -0,0 +1,39 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="julia" _label="Julia">
+
+ <command arg="-root"/>
+
+ <video href="https://www.youtube.com/watch?v=cA4Rgq-rmy8"/>
+
+ <number id="delay" type="slider" arg="-delay %"
+ _label="Frame rate" _low-label="Low" _high-label="High"
+ low="0" high="100000" default="10000"
+ convert="invert"/>
+
+ <number id="count" type="slider" arg="-count %"
+ _label="Count" _low-label="Few" _high-label="Lots"
+ low="10" high="20000" default="1000"/>
+
+ <number id="cycles" type="slider" arg="-cycles %"
+ _label="Iterations" _low-label="Small" _high-label="Large"
+ low="1" high="100" default="20"/>
+
+ <number id="ncolors" type="slider" arg="-ncolors %"
+ _label="Number of colors" _low-label="Two" _high-label="Many"
+ low="1" high="255" default="200"/>
+
+ <boolean id="showfps" _label="Show frame rate" arg-set="-fps"/>
+
+ <xscreensaver-updater />
+
+ <_description>
+The Julia set is a close relative of the Mandelbrot set. The
+small moving dot indicates the control point from which the rest of
+the image was generated. See also the "Discrete" screen saver.
+
+https://en.wikipedia.org/wiki/Julia_set
+
+Written by Sean McCullough; 1997.
+ </_description>
+</screensaver>
diff --git a/hacks/config/kaleidescope.xml b/hacks/config/kaleidescope.xml
new file mode 100644
index 0000000..ccfc18f
--- /dev/null
+++ b/hacks/config/kaleidescope.xml
@@ -0,0 +1,42 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="kaleidescope" _label="Kaleidescope">
+
+ <command arg="-root"/>
+
+ <video href="https://www.youtube.com/watch?v=mGplFlx1y3M"/>
+
+ <number id="delay" type="slider" arg="-delay %"
+ _label="Frame rate" _low-label="Low" _high-label="High"
+ low="0" high="100000" default="20000"
+ convert="invert"/>
+
+ <number id="nsegments" type="slider" arg="-nsegments %"
+ _label="Segments" _low-label="Few" _high-label="Many"
+ low="1" high="100" default="7"/>
+
+ <number id="symmetry" type="slider" arg="-symmetry %"
+ _label="Symmetry" _low-label="3" _high-label="32"
+ low="3" high="32" default="11"/>
+
+ <number id="ntrails" type="slider" arg="-ntrails %"
+ _label="Trails" _low-label="Few" _high-label="Many"
+ low="1" high="1000" default="100"/>
+
+ <!-- #### -local_rotation [-59] -->
+ <!-- #### -global_rotation [1] -->
+ <!-- #### -spring_constant [5] -->
+
+ <boolean id="showfps" _label="Show frame rate" arg-set="-fps"/>
+
+ <xscreensaver-updater />
+
+ <_description>
+A simple kaleidoscope made of line segments. See "GLeidescope"
+for a more sophisticated take.
+
+https://en.wikipedia.org/wiki/Kaleidoscope
+
+Written by Ron Tapia; 1997.
+ </_description>
+</screensaver>
diff --git a/hacks/config/kaleidocycle.xml b/hacks/config/kaleidocycle.xml
new file mode 100644
index 0000000..06228d2
--- /dev/null
+++ b/hacks/config/kaleidocycle.xml
@@ -0,0 +1,57 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="kaleidocycle" _label="Kaleidocycle" gl="yes">
+
+ <command arg="-root"/>
+
+ <video href="https://www.youtube.com/watch?v=SJqRaCCy_vo"/>
+
+ <hgroup>
+ <vgroup>
+ <number id="delay" type="slider" arg="-delay %"
+ _label="Frame rate" _low-label="Low" _high-label="High"
+ low="0" high="100000" default="30000"
+ convert="invert"/>
+
+ <number id="count" type="slider" arg="-count %"
+ _label="Count" _low-label="8" _high-label="64"
+ low="8" high="64" default="16"/>
+
+ <number id="speed" type="slider" arg="-speed %"
+ _label="Speed" _low-label="Slow" _high-label="Fast"
+ low="0.1" high="8.0" default="1.0"/>
+ </vgroup>
+
+ <vgroup>
+ <select id="rotation">
+ <option id="no" _label="Don't rotate" arg-set="-spin 0"/>
+ <option id="x" _label="Rotate around X axis" arg-set="-spin X"/>
+ <option id="y" _label="Rotate around Y axis" arg-set="-spin Y"/>
+ <option id="z" _label="Rotate around Z axis"/>
+ <option id="xy" _label="Rotate around X and Y axes" arg-set="-spin XY"/>
+ <option id="xz" _label="Rotate around X and Z axes" arg-set="-spin XZ"/>
+ <option id="yz" _label="Rotate around Y and Z axes" arg-set="-spin YZ"/>
+ <option id="xyz" _label="Rotate around all three axes" arg-set="-spin XYZ"/>
+ </select>
+
+ <boolean id="wander" _label="Wander" arg-set="-wander"/>
+
+ <boolean id="wire" _label="Wireframe" arg-set="-wireframe"/>
+ <boolean id="showfps" _label="Show frame rate" arg-set="-fps"/>
+ </vgroup>
+ </hgroup>
+
+ <xscreensaver-updater />
+
+ <_description>
+Draw a ring composed of tetrahedra connected at the edges that twists
+and rotates toroidally.
+
+When a series of tetrahedra are joined at the edges in a loop, it is
+possible for them to rotate continously through the center without
+deforming. This only works with an even number of tetrahedra, and
+there must be eight or more, or they don't fit.
+
+Written by Jamie Zawinski; 2013.
+ </_description>
+</screensaver>
diff --git a/hacks/config/klein.xml b/hacks/config/klein.xml
new file mode 100644
index 0000000..8a93c9e
--- /dev/null
+++ b/hacks/config/klein.xml
@@ -0,0 +1,131 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="klein" _label="Klein" gl="yes">
+
+ <command arg="-root"/>
+
+ <video href="https://www.youtube.com/watch?v=c2gvyGVNG80"/>
+
+ <hgroup>
+ <select id="kleinbottle">
+ <option id="random" _label="Random shape"/>
+ <option id="figure-8" _label="Figure 8" arg-set="-klein-bottle figure-8"/>
+ <option id="squeezed-torus" _label="Squeezed torus" arg-set="-klein-bottle squeezed-torus"/>
+ <option id="lawson" _label="Lawson" arg-set="-klein-bottle lawson"/>
+ </select>
+
+ <select id="view-mode">
+ <option id="walk" _label="Random motion"/>
+ <option id="walk" _label="Walk" arg-set="-view-mode walk"/>
+ <option id="turn" _label="Turn" arg-set="-view-mode turn"/>
+ <option id="walk-turn" _label="Walk and turn" arg-set="-view-mode walk-turn"/>
+ </select>
+
+ <boolean id="orientation-marks" _label="Show orientation marks"
+ arg-set="-orientation-marks"/>
+ </hgroup>
+
+ <hgroup>
+ <select id="display-mode">
+ <option id="random" _label="Random surface"/>
+ <option id="wire" _label="Wireframe mesh" arg-set="-mode wireframe"/>
+ <option id="surface" _label="Solid surface" arg-set="-mode surface"/>
+ <option id="transparent" _label="Transparent surface" arg-set="-mode transparent"/>
+ </select>
+
+ <select id="appearance">
+ <option id="random" _label="Random pattern"/>
+ <option id="solid" _label="Solid object" arg-set="-appearance solid"/>
+ <option id="bands" _label="See-through bands" arg-set="-appearance bands"/>
+ </select>
+
+ <select id="colors">
+ <option id="random" _label="Random coloration"/>
+ <option id="twosided" _label="Two-sided" arg-set="-colors two-sided"/>
+ <option id="rainbow" _label="Rainbow colors" arg-set="-colors rainbow"/>
+ <option id="depth" _label="4d depth colors" arg-set="-colors depth"/>
+ </select>
+
+ <select id="projection3d">
+ <option id="random" _label="Random 3D"/>
+ <option id="perspective-3d" _label="Perspective 3D" arg-set="-projection-3d perspective"/>
+ <option id="orthographic-3d" _label="Orthographic 3D" arg-set="-projection-3d orthographic"/>
+ </select>
+
+ <select id="projection4d">
+ <option id="random" _label="Random 4D"/>
+ <option id="perspective-4d" _label="Perspective 4D" arg-set="-projection-4d perspective"/>
+ <option id="orthographic-4d" _label="Orthographic 4D" arg-set="-projection-4d orthographic"/>
+ </select>
+ </hgroup>
+
+ <hgroup>
+ <vgroup>
+ <number id="speed-wx" type="slider" arg="-speed-wx %"
+ _label="WX rotation speed"
+ _low-label="-4.0" _high-label="4.0"
+ low="-4.0" high="4.0" default="1.1"/>
+
+ <number id="speed-wy" type="slider" arg="-speed-wy %"
+ _label="WY rotation speed"
+ _low-label="-4.0" _high-label="4.0"
+ low="-4.0" high="4.0" default="1.3"/>
+
+ <number id="speed-wz" type="slider" arg="-speed-wz %"
+ _label="WZ rotation speed"
+ _low-label="-4.0" _high-label="4.0"
+ low="-4.0" high="4.0" default="1.5"/>
+ </vgroup>
+
+ <vgroup>
+ <number id="speed-xy" type="slider" arg="-speed-xy %"
+ _label="XY rotation speed"
+ _low-label="-4.0" _high-label="4.0"
+ low="-4.0" high="4.0" default="1.7"/>
+
+ <number id="speed-xz" type="slider" arg="-speed-xz %"
+ _label="XZ rotation speed"
+ _low-label="-4.0" _high-label="4.0"
+ low="-4.0" high="4.0" default="1.9"/>
+
+ <number id="speed-yz" type="slider" arg="-speed-yz %"
+ _label="YZ rotation speed"
+ _low-label="-4.0" _high-label="4.0"
+ low="-4.0" high="4.0" default="2.1"/>
+ </vgroup>
+
+ <vgroup>
+ <number id="walk-direction" type="slider" arg="-walk-direction %"
+ _label="Walking direction"
+ _low-label="-180.0" _high-label="180.0"
+ low="-180.0" high="180.0" default="7.0"/>
+
+ <number id="walk-speed" type="slider" arg="-walk-speed %"
+ _label="Walking speed"
+ _low-label="1.0" _high-label="100.0"
+ low="1.0" high="100.0" default="20.0"/>
+
+ <number id="delay" type="slider" arg="-delay %"
+ _label="Frame rate" _low-label="Low" _high-label="High"
+ low="0" high="100000" default="10000"
+ convert="invert"/>
+
+ <boolean id="showfps" _label="Show frame rate" arg-set="-fps"/>
+ </vgroup>
+ </hgroup>
+
+ <xscreensaver-updater />
+
+ <_description>
+A Klein bottle is the 4D analog of a moebius strip.
+
+You can walk on the surface of the bottle or rotate it in 4D or walk
+on it while it rotates in 4D. Inspired by Thomas Banchoff's book
+"Beyond the Third Dimension: Geometry, Computer Graphics, and Higher
+Dimensions", Scientific American Library, 1990.
+
+https://en.wikipedia.org/wiki/Klein_bottle
+
+Written by Carsten Steger; 2008.
+ </_description>
+</screensaver>
diff --git a/hacks/config/kumppa.xml b/hacks/config/kumppa.xml
new file mode 100644
index 0000000..85f7ee2
--- /dev/null
+++ b/hacks/config/kumppa.xml
@@ -0,0 +1,32 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="kumppa" _label="Kumppa">
+
+ <command arg="-root"/>
+
+ <video href="https://www.youtube.com/watch?v=64ULSfxhkDY"/>
+
+ <number id="delay" type="slider" arg="-delay %"
+ _label="Frame rate" _low-label="Low" _high-label="High"
+ low="0" high="100000" default="10000"
+ convert="invert"/>
+
+ <number id="density" type="slider" arg="-speed %"
+ _label="Density" _low-label="Low" _high-label="High"
+ low="0.0001" high="0.2" default="0.1"/>
+
+ <boolean id="random" _label="Randomize" arg-unset="-no-random"/>
+<!-- <boolean id="db" _label="Double buffer" arg-set="-db"/> -->
+
+
+ <boolean id="showfps" _label="Show frame rate" arg-set="-fps"/>
+
+ <xscreensaver-updater />
+
+ <_description>
+Spiraling, spinning, and very, very fast splashes of color rush
+toward the screen.
+
+Written by Teemu Suutari; 1998.
+ </_description>
+</screensaver>
diff --git a/hacks/config/lament.xml b/hacks/config/lament.xml
new file mode 100644
index 0000000..7f0de9d
--- /dev/null
+++ b/hacks/config/lament.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="lament" _label="Lament" gl="yes">
+
+ <command arg="-root"/>
+
+ <video href="https://www.youtube.com/watch?v=-TBqI4YKOKI"/>
+
+ <number id="delay" type="slider" arg="-delay %"
+ _label="Frame rate" _low-label="Low" _high-label="High"
+ low="0" high="100000" default="20000"
+ convert="invert"/>
+
+ <boolean id="tex" _label="Textured" arg-unset="-no-texture"/>
+ <boolean id="wire" _label="Wireframe" arg-set="-wireframe"/>
+ <boolean id="showfps" _label="Show frame rate" arg-set="-fps"/>
+
+ <xscreensaver-updater />
+
+ <_description>
+Lemarchand's Box, the Lament Configuration.
+
+Warning: occasionally opens doors.
+
+https://en.wikipedia.org/wiki/Lemarchand%27s_box
+
+Written by Jamie Zawinski; 1998.
+ </_description>
+</screensaver>
diff --git a/hacks/config/laser.xml b/hacks/config/laser.xml
new file mode 100644
index 0000000..4694cca
--- /dev/null
+++ b/hacks/config/laser.xml
@@ -0,0 +1,38 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="laser" _label="Laser">
+
+ <command arg="-root"/>
+
+ <video href="https://www.youtube.com/watch?v=QjPEa3KDlsw"/>
+
+ <number id="delay" type="slider" arg="-delay %"
+ _label="Frame rate" _low-label="Low" _high-label="High"
+ low="0" high="100000" default="40000"
+ convert="invert"/>
+
+ <number id="count" type="spinbutton" arg="-count %"
+ _label="Count" low="0" high="20" default="10"/>
+
+ <number id="cycles" type="slider" arg="-cycles %"
+ _label="Duration" _low-label="Short" _high-label="Long"
+ low="0" high="2000" default="200"/>
+
+ <number id="ncolors" type="slider" arg="-ncolors %"
+ _label="Number of colors" _low-label="Two" _high-label="Many"
+ low="1" high="255" default="64"/>
+
+ <boolean id="showfps" _label="Show frame rate" arg-set="-fps"/>
+
+ <xscreensaver-updater />
+
+ <_description>
+This screen saver was removed from the XScreenSaver distribution as of
+version 5.08.
+
+Moving radiating lines, that look vaguely like scanning laser beams.
+(Frankie say relax.)
+
+Written by Pascal Pensa; 1997.
+ </_description>
+</screensaver>
diff --git a/hacks/config/lavalite.xml b/hacks/config/lavalite.xml
new file mode 100644
index 0000000..5e7d4f7
--- /dev/null
+++ b/hacks/config/lavalite.xml
@@ -0,0 +1,90 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="lavalite" _label="Lavalite" gl="yes">
+
+ <command arg="-root"/>
+
+ <video href="https://www.youtube.com/watch?v=XKbtdHL35u0"/>
+
+ <hgroup>
+ <vgroup>
+ <number id="delay" type="slider" arg="-delay %"
+ _label="Frame rate" _low-label="Low" _high-label="High"
+ low="0" high="100000" default="30000"
+ convert="invert"/>
+
+ <number id="speed" type="slider" arg="-speed %"
+ _label="Activity" _low-label="Sparse" _high-label="Dense"
+ low="0.001" high="0.01" default="0.003"/>
+ </vgroup>
+ <vgroup>
+ <number id="count" type="slider" arg="-count %"
+ _label="Max blobs" _low-label="1" _high-label="10"
+ low="1" high="10" default="3"/>
+
+ <number id="resolution" type="slider" arg="-resolution %"
+ _label="Resolution" _low-label="Low" _high-label="High"
+ low="10" high="120" default="40"/>
+ </vgroup>
+ </hgroup>
+
+ <hgroup>
+ <vgroup>
+
+ <hgroup>
+ <boolean id="impatient" _label="Impatient" arg-set="-impatient"/>
+ <boolean id="smooth" _label="Smooth" arg-unset="-no-smooth"/>
+ <boolean id="wander" _label="Wander" arg-set="-wander"/>
+ </hgroup>
+
+ <hgroup>
+ <boolean id="wire" _label="Wireframe" arg-set="-wireframe"/>
+ <boolean id="showfps" _label="Show frame rate" arg-set="-fps"/>
+ </hgroup>
+
+ </vgroup>
+ <vgroup>
+
+ <select id="style">
+ <option id="classic" _label="Classic Lavalite" arg-set="-style classic"/>
+ <option id="giant" _label="Giant Lavalite" arg-set="-style giant"/>
+ <option id="cone" _label="Cone Lavalite" arg-set="-style cone"/>
+ <option id="rocket" _label="Rocket Lavalite" arg-set="-style rocket"/>
+ <option id="random" _label="Random Lamp Style"/>
+ </select>
+
+ <select id="rotation">
+ <option id="no" _label="Don't Rotate" arg-set="-spin 0"/>
+ <option id="x" _label="Rotate around X axis" arg-set="-spin X"/>
+ <option id="y" _label="Rotate around Y axis" arg-set="-spin Y"/>
+ <option id="z" _label="Rotate around Z axis"/>
+ <option id="xy" _label="Rotate around X and Y axes" arg-set="-spin XY"/>
+ <option id="xz" _label="Rotate around X and Z axes" arg-set="-spin XZ"/>
+ <option id="yz" _label="Rotate around Y and Z axes" arg-set="-spin YZ"/>
+ <option id="xyz" _label="Rotate around all three axes" arg-set="-spin XYZ"/>
+ </select>
+
+ </vgroup>
+ </hgroup>
+
+ <xscreensaver-updater />
+
+ <_description>
+A Simulation a Lava Lite(r). Odd-shaped blobs of a mysterious
+substance are heated, slowly rise to the top of the bottle, and then
+drop back down as they cool. This simulation requires a fairly fast
+machine (both CPU and 3D performance.)
+
+"LAVA LITE(r) and the configuration of the LAVA(r) brand motion lamp are
+registered trademarks of Haggerty Enterprises, Inc. The configuration
+of the globe and base of the motion lamp are registered trademarks of
+Haggerty Enterprises, Inc. in the U.S.A. and in other countries around
+the world."
+
+https://en.wikipedia.org/wiki/Lava_lamp
+https://en.wikipedia.org/wiki/Metaballs
+https://en.wikipedia.org/wiki/Lavarand
+
+Written by Jamie Zawinski; 2002.
+ </_description>
+</screensaver>
diff --git a/hacks/config/lcdscrub.xml b/hacks/config/lcdscrub.xml
new file mode 100644
index 0000000..c92b125
--- /dev/null
+++ b/hacks/config/lcdscrub.xml
@@ -0,0 +1,58 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="lcdscrub" _label="LCDscrub">
+
+ <command arg="-root"/>
+
+ <video href="https://www.youtube.com/watch?v=aWtHHBOkO4w"/>
+
+ <number id="delay" type="slider" arg="-delay %"
+ _label="Frame rate" _low-label="Low" _high-label="High"
+ low="0" high="5000000" default="100000"
+ convert="invert"/>
+
+ <hgroup>
+ <vgroup>
+ <number id="spread" type="spinbutton" arg="-spread %"
+ _label="Line spread" low="2" high="8192" default="8"/>
+ <number id="cycles" type="spinbutton" arg="-cycles %"
+ _label="Cycles" low="1" high="600" default="60"/>
+ <boolean id="showfps" _label="Show frame rate" arg-set="-fps"/>
+ </vgroup>
+ <vgroup>
+ <boolean id="hw" _label="Horizontal white" arg-unset="-no-hw"/>
+ <boolean id="vw" _label="Vertical white" arg-unset="-no-vw"/>
+ <boolean id="dw" _label="Diagonal white" arg-unset="-no-dw"/>
+ </vgroup>
+ <vgroup>
+ <boolean id="w" _label="Solid white" arg-unset="-no-w"/>
+ <boolean id="rgb" _label="Primary colors" arg-unset="-no-rgb"/>
+ <boolean id="hb" _label="Horizontal black" arg-unset="-no-hb"/>
+ </vgroup>
+ <vgroup>
+ <boolean id="vb" _label="Vertical black" arg-unset="-no-vb"/>
+ <boolean id="db" _label="Diagonal black" arg-unset="-no-db"/>
+ <boolean id="b" _label="Solid black" arg-unset="-no-b"/>
+ </vgroup>
+ </hgroup>
+
+ <xscreensaver-updater />
+
+ <_description>
+repairs burn-in on LCD monitors. This saver is functional,
+rather than pretty.
+
+Believe it or not, screen burn is not a thing of the past.
+It can happen to LCD screens pretty easily, even in this modern age.
+However, leaving the screen on and displaying high contrast images
+can often repair the damage. That's what this screen saver does.
+
+See also:
+http://docs.info.apple.com/article.html?artnum=88343
+http://toastycode.com/blog/2008/02/05/lcd-scrub/
+
+Inspired by the like-named program by Daniel Sandler.
+
+Written by Jamie Zawinski; 2008.
+ </_description>
+</screensaver>
diff --git a/hacks/config/lightning.xml b/hacks/config/lightning.xml
new file mode 100644
index 0000000..8e602fe
--- /dev/null
+++ b/hacks/config/lightning.xml
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="lightning" _label="Lightning">
+
+ <command arg="-root"/>
+
+ <video href="https://www.youtube.com/watch?v=lUUdHtPvp5Y"/>
+
+ <number id="delay" type="slider" arg="-delay %"
+ _label="Frame rate" _low-label="Low" _high-label="High"
+ low="0" high="100000" default="10000"
+ convert="invert"/>
+
+ <number id="ncolors" type="slider" arg="-ncolors %"
+ _label="Number of colors" _low-label="Two" _high-label="Many"
+ low="1" high="255" default="64"/>
+
+ <boolean id="showfps" _label="Show frame rate" arg-set="-fps"/>
+
+ <xscreensaver-updater />
+
+ <_description>
+This screen saver was removed from the XScreenSaver distribution as of
+version 5.08.
+
+Crackling fractal lightning bolts.
+
+Written by Keith Romberg; 1997.
+ </_description>
+</screensaver>
diff --git a/hacks/config/lisa.xml b/hacks/config/lisa.xml
new file mode 100644
index 0000000..d142fad
--- /dev/null
+++ b/hacks/config/lisa.xml
@@ -0,0 +1,50 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="lisa" _label="Lisa">
+
+ <command arg="-root"/>
+
+ <video href="https://www.youtube.com/watch?v=AUbAuARmlnE"/>
+
+ <hgroup>
+ <vgroup>
+ <number id="delay" type="slider" arg="-delay %"
+ _label="Frame rate" _low-label="Low" _high-label="High"
+ low="0" high="50000" default="17000"
+ convert="invert"/>
+
+ <number id="cycles" type="slider" arg="-cycles %"
+ _label="Steps" _low-label="Few" _high-label="Many"
+ low="1" high="1000" default="768"/>
+
+ <number id="ncolors" type="slider" arg="-ncolors %"
+ _label="Number of colors" _low-label="Two" _high-label="Many"
+ low="1" high="255" default="64"/>
+ </vgroup>
+
+ <vgroup>
+ <number id="size" type="slider" arg="-size %"
+ _label="Size" _low-label="Small" _high-label="Large"
+ low="10" high="500" default="500"/>
+
+ <number id="count" type="slider" arg="-count %"
+ _label="Count" _low-label="1" _high-label="20"
+ low="0" high="20" default="1"/>
+
+ <boolean id="showfps" _label="Show frame rate" arg-set="-fps"/>
+ </vgroup>
+ </hgroup>
+
+ <xscreensaver-updater />
+
+ <_description>
+This screen saver was removed from the XScreenSaver distribution as of
+version 5.08.
+
+Lissajous loops.
+
+https://en.wikipedia.org/wiki/Lissajous_curve
+
+Written by Caleb Cullen; 1997.
+ </_description>
+</screensaver>
diff --git a/hacks/config/lissie.xml b/hacks/config/lissie.xml
new file mode 100644
index 0000000..ca165a4
--- /dev/null
+++ b/hacks/config/lissie.xml
@@ -0,0 +1,52 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="lissie" _label="Lissie">
+
+ <command arg="-root"/>
+
+ <video href="https://www.youtube.com/watch?v=6EBNCXcD9f0"/>
+
+ <hgroup>
+ <vgroup>
+ <number id="delay" type="slider" arg="-delay %"
+ _label="Frame rate" _low-label="Low" _high-label="High"
+ low="0" high="100000" default="10000"
+ convert="invert"/>
+
+ <number id="cycles" type="slider" arg="-cycles %"
+ _label="Timeout" _low-label="Small" _high-label="Large"
+ low="0" high="80000" default="20000"/>
+ </vgroup>
+
+ <vgroup>
+ <number id="ncolors" type="slider" arg="-ncolors %"
+ _label="Number of colors" _low-label="Two" _high-label="Many"
+ low="1" high="255" default="200"/>
+
+ <number id="count" type="slider" arg="-count %"
+ _label="Count" _low-label="1" _high-label="20"
+ low="0" high="20" default="1"/>
+ </vgroup>
+ </hgroup>
+
+ <hgroup>
+ <vgroup>
+ <number id="size" type="spinbutton" arg="-size %"
+ _label="Size" low="-500" high="500" default="-200"/>
+ </vgroup>
+ <boolean id="showfps" _label="Show frame rate" arg-set="-fps"/>
+ </hgroup>
+
+ <xscreensaver-updater />
+
+ <_description>
+This screen saver was removed from the XScreenSaver distribution as of
+version 5.08.
+
+Lissajous loops. This one draws the progress of circular shapes along a path.
+
+https://en.wikipedia.org/wiki/Lissajous_curve
+
+Written by Alexander Jolk; 1997.
+ </_description>
+</screensaver>
diff --git a/hacks/config/lmorph.xml b/hacks/config/lmorph.xml
new file mode 100644
index 0000000..f0920b3
--- /dev/null
+++ b/hacks/config/lmorph.xml
@@ -0,0 +1,51 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="lmorph" _label="LMorph">
+
+ <command arg="-root"/>
+
+ <video href="https://www.youtube.com/watch?v=yMbMB7xQMkA"/>
+
+ <hgroup>
+ <vgroup>
+ <number id="delay" type="slider" arg="-delay %"
+ _label="Frame rate" _low-label="Low" _high-label="High"
+ low="0" high="100000" default="70000"
+ convert="invert"/>
+
+ <number id="points" type="slider" arg="-points %"
+ _label="Control points" _low-label="Few" _high-label="Many"
+ low="10" high="1000" default="200"/>
+ </vgroup>
+
+ <vgroup>
+ <number id="steps" type="slider" arg="-steps %"
+ _label="Interpolation steps" _low-label="Less" _high-label="More"
+ low="100" high="500" default="150"/>
+
+ <number id="thickness" type="slider" arg="-linewidth %"
+ _label="Lines" _low-label="Thin" _high-label="Thick"
+ low="1" high="50" default="5"/>
+ </vgroup>
+ </hgroup>
+
+ <select id="type">
+ <option id="random" _label="Open and closed figures"/>
+ <option id="open" _label="Open figures" arg-set="-figtype open"/>
+ <option id="closed" _label="Closed figures" arg-set="-figtype closed"/>
+ </select>
+
+ <boolean id="showfps" _label="Show frame rate" arg-set="-fps"/>
+
+ <xscreensaver-updater />
+
+ <_description>
+This screen saver was removed from the XScreenSaver distribution as of
+version 5.08.
+
+This generates random spline-ish line drawings and morphs between
+them.
+
+Written by Sverre H. Huseby and Glenn T. Lines; 1995.
+ </_description>
+</screensaver>
diff --git a/hacks/config/lockward.xml b/hacks/config/lockward.xml
new file mode 100644
index 0000000..1a44ddd
--- /dev/null
+++ b/hacks/config/lockward.xml
@@ -0,0 +1,67 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="lockward" _label="Lockward" gl="yes">
+
+ <command arg="-root" />
+
+ <video href="https://www.youtube.com/watch?v=MGwySGVQZ2M"/>
+
+ <number id="delay" type="slider" arg="-delay %"
+ _label="Frame rate" _low-label="Low" _high-label="High"
+ low="0" high="100000" default="20000"
+ convert="invert"/>
+
+ <hgroup>
+ <vgroup>
+ <number id="rotateidle-min" type="slider"
+ _label="Miniumum rotator idle time"
+ _low-label="Low" _high-label="High"
+ low="500" high="10000" default="1000" arg="-rotateidle-min %" />
+
+ <number id="blinkidle-min" type="slider"
+ _label="Minimum blink idle time"
+ _low-label="Low" _high-label="High"
+ low="500" high="20000" default="1000" arg="-blinkidle-min %" />
+
+ <number id="blinkdwell-min" type="slider"
+ _label="Minimum blink dwell time"
+ _low-label="Low" _high-label="High"
+ low="50" high="1500" default="100" arg="-blinkdwell-min %" />
+
+ <hgroup>
+ <boolean id="blink"
+ _label="Blinking effects"
+ arg-unset="-no-blink" />
+ <boolean id="showfps" _label="Show frame rate" arg-set="-fps"/>
+ </hgroup>
+
+ </vgroup>
+ <vgroup>
+
+ <number id="rotateidle-max" type="slider"
+ _label="Maximum rotator idle time"
+ _low-label="Low" _high-label="High"
+ low="500" high="10000" default="6000" arg="-rotateidle-max %" />
+
+ <number id="blinkidle-max" type="slider"
+ _label="Maximum blink idle time"
+ _low-label="Low" _high-label="High"
+ low="500" high="20000" default="9000" arg="-blinkidle-max %" />
+
+ <number id="blinkdwell-max" type="slider"
+ _label="Maximum blink dwell time"
+ _low-label="Low" _high-label="High"
+ low="50" high="1500" default="600" arg="-blinkdwell-max %" />
+ </vgroup>
+ </hgroup>
+
+ <xscreensaver-updater />
+
+ <_description>
+A translucent spinning, blinking thing. Sort of a cross between the wards
+in an old combination lock and those old backlit information displays that
+animated and changed color via polarized light.
+
+Written by Leo L. Schwab; 2007.
+ </_description>
+</screensaver>
diff --git a/hacks/config/loop.xml b/hacks/config/loop.xml
new file mode 100644
index 0000000..65571c0
--- /dev/null
+++ b/hacks/config/loop.xml
@@ -0,0 +1,37 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="loop" _label="Loop">
+
+ <command arg="-root"/>
+
+ <video href="https://www.youtube.com/watch?v=_kTMO7oEN8U"/>
+
+ <number id="delay" type="slider" arg="-delay %"
+ _label="Frame rate" _low-label="Low" _high-label="High"
+ low="0" high="200000" default="100000"
+ convert="invert"/>
+
+ <number id="cycles" type="slider" arg="-cycles %"
+ _label="Timeout" _low-label="Small" _high-label="Large"
+ low="0" high="8000" default="1600"/>
+
+ <number id="ncolors" type="slider" arg="-ncolors %"
+ _label="Number of colors" _low-label="Two" _high-label="Many"
+ low="1" high="255" default="15"/>
+
+ <number id="size" type="spinbutton" arg="-size %"
+ _label="Size" low="-50" high="50" default="-12"/>
+
+ <boolean id="showfps" _label="Show frame rate" arg-set="-fps"/>
+
+ <xscreensaver-updater />
+
+ <_description>
+A cellular automaton that generates loop-shaped colonies that spawn,
+age, and eventually die.
+
+https://en.wikipedia.org/wiki/Langton%27s_loops
+
+Written by David Bagley; 1999.
+ </_description>
+</screensaver>
diff --git a/hacks/config/m6502.xml b/hacks/config/m6502.xml
new file mode 100644
index 0000000..5738921
--- /dev/null
+++ b/hacks/config/m6502.xml
@@ -0,0 +1,55 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="m6502" _label="m6502">
+
+ <command arg="-root" />
+
+ <video href="https://www.youtube.com/watch?v=KlDw0nYwUe4"/>
+
+ <file id="file" _label="Assembly file" arg="-file %"/>
+
+ <boolean id="showfps" _label="Show frame rate" arg-set="-fps"/>
+
+ <hgroup>
+ <vgroup>
+ <number id="displaytime" type="slider" arg="-displaytime %"
+ _label="Display time for each program"
+ _low-label="5 seconds" _high-label="2 minutes"
+ low="5.0" high="120.0" default="30.0" />
+ <number id="tvcolor" type="slider" arg="-tv-color %"
+ _label="Color Knob" _low-label="Low" _high-label="High"
+ low="0" high="400" default="70"/>
+ <number id="tvtint" type="slider" arg="-tv-tint %"
+ _label="Tint Knob" _low-label="Low" _high-label="High"
+ low="0" high="360" default="5"/>
+ </vgroup>
+ <vgroup>
+ <number id="ips" type="slider" arg="-ips %"
+ _label="Instructions per second"
+ _low-label="500" _high-label="120000"
+ low="500" high="120000" default="15000" />
+ <number id="tvbrightness" type="slider" arg="-tv-brightness %"
+ _label="Brightness Knob" _low-label="Low" _high-label="High"
+ low="-75.0" high="100.0" default="3.0"/>
+ <number id="tvcontrast" type="slider" arg="-tv-contrast %"
+ _label="Contrast Knob" _low-label="Low" _high-label="High"
+ low="0" high="500" default="150"/>
+ </vgroup>
+ </hgroup>
+
+ <xscreensaver-updater />
+
+ <_description>
+Emulates a 6502 microprocessor, and runs some example programs on it.
+
+The family of 6502 chips were used throughout the 70's and 80's in
+machines such as the Atari 2600, Commodore PET, VIC20 and C64, Apple
+][, and the NES. Some example programs are included, and it can also
+read in an assembly file as input.
+
+Original JavaScript Version by Stian Soreng: http://www.6502asm.com/.
+Ported to XScreenSaver by Jeremy English.
+
+Written by Stian Soreng and Jeremy English; 2007.
+ </_description>
+</screensaver>
diff --git a/hacks/config/maze.xml b/hacks/config/maze.xml
new file mode 100644
index 0000000..83b5b92
--- /dev/null
+++ b/hacks/config/maze.xml
@@ -0,0 +1,71 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="maze" _label="Maze">
+
+ <command arg="-root"/>
+
+ <video href="https://www.youtube.com/watch?v=-u4neMXIRA8"/>
+
+ <hgroup>
+ <vgroup>
+ <number id="delay" type="slider" arg="-solve-delay %"
+ _label="Frame rate" _low-label="Low" _high-label="High"
+ low="0" high="100000" default="10000"
+ convert="invert"/>
+
+ <select id="generator">
+ <option id="mrandom" _label="Random maze generator"/>
+ <option id="m0" _label="Depth-first backtracking maze generator"
+ arg-set="-generator 0"/>
+ <option id="m1" _label="Wall-building maze generator (Prim)"
+ arg-set="-generator 1"/>
+ <option id="m2" _label="Set-joining maze generator (Kruskal)"
+ arg-set="-generator 2"/>
+ </select>
+
+ <hgroup>
+ <select id="ignorance">
+ <option id="smart" _label="Head toward exit"/>
+ <option id="dumb" _label="Ignorant of exit direction"
+ arg-set="-ignorant"/>
+ </select>
+
+ </hgroup>
+
+ <hgroup>
+ <number id="grid-size" type="spinbutton" arg="-grid-size %"
+ _label="Grid size" low="0" high="100" default="0"/>
+ <boolean id="showfps" _label="Show frame rate" arg-set="-fps"/>
+ </hgroup>
+
+ </vgroup>
+
+ <vgroup>
+ <number id="pre-delay" type="slider" arg="-pre-delay %"
+ _label="Linger before solving"
+ _low-label="0 seconds" _high-label="10 seconds"
+ low="0" high="10000000" default="2000000"/>
+
+ <number id="post-delay" type="slider" arg="-post-delay %"
+ _label="Linger after solving"
+ _low-label="0 seconds" _high-label="10 seconds"
+ low="0" high="10000000" default="4000000"/>
+
+ <xscreensaver-updater />
+
+ </vgroup>
+ </hgroup>
+
+
+ <_description>
+Generates random mazes, with three different algorithms: Kruskal,
+Prim, and a depth-first recursive backtracker. It also solves them.
+Backtracking and look-ahead paths are displayed in different colors.
+
+https://en.wikipedia.org/wiki/Maze_generation_algorithm
+https://en.wikipedia.org/wiki/Maze_solving_algorithm
+
+Written by Martin Weiss, Dave Lemke, Jim Randell, Jamie Zawinski,
+Johannes Keukelaar, and Zack Weinberg; 1985.
+ </_description>
+</screensaver>
diff --git a/hacks/config/maze3d.xml b/hacks/config/maze3d.xml
new file mode 100755
index 0000000..ac578da
--- /dev/null
+++ b/hacks/config/maze3d.xml
@@ -0,0 +1,122 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="maze3d" _label="Maze3D" gl="yes">
+
+ <command arg="-root"/>
+
+ <video href="https://www.youtube.com/watch?v=VTAwxTVdyLc"/>
+
+ <number id="speed" type="slider" arg="-speed %"
+ _label="Speed" _low-label="Slow" _high-label="Fast"
+ low="0.02" high="4.0" default="1.0"/>
+ <number id="delay" type="slider" arg="-delay %"
+ _label="Frame rate" _low-label="Low" _high-label="High"
+ low="0" high="100000" default="20000"
+ convert="invert"/>
+ <hgroup>
+ <boolean id="showOverlay" _label="Show Overlay" arg-set="-overlay"/>
+ <boolean id="acid" _label="Acid" arg-set="-drop-acid"/>
+ <boolean id="showfps" _label="Show frame rate" arg-set="-fps"/>
+ </hgroup>
+
+ <hgroup>
+ <number id="numRows" type="spinbutton" arg="-rows %"
+ _label="Rows" low="2" high="24" default="12"/>
+ <number id="numColumns" type="spinbutton" arg="-columns %"
+ _label="Columns" low="2" high="24" default="12"/>
+ </hgroup>
+
+<!--
+ <hgroup>
+ <file id="wallTextureFile" _label="Wall Texture" arg="-wall-texture %"/>
+ <select id="wallTextureSelect">
+ <option id="wallTextureBrickWall" _label="Brick Wall"/>
+ <option id="wallTextureWoodFloor" _label="Wood Floor"
+ arg-set="-wall-texture wood-floor"/>
+ <option id="wallTextureCeilingTiles" _label="Ceiling Tiles"
+ arg-set="-wall-texture ceiling-tiles"/>
+ <option id="wallTextureFractal1" _label="Fractal 1"
+ arg-set="-wall-texture fractal-1"/>
+ <option id="wallTextureFractal2" _label="Fractal 2"
+ arg-set="-wall-texture fractal-2"/>
+ <option id="wallTextureFractal3" _label="Fractal 3"
+ arg-set="-wall-texture fractal-3"/>
+ <option id="wallTextureFractal4" _label="Fractal 4"
+ arg-set="-wall-texture fractal-4"/>
+ </select>
+ <boolean id="dropAcidWalls" _label="Drop acid"
+ arg-set="-drop-acid-walls"/>
+ </hgroup>
+
+ <hgroup>
+ <file id="floorTextureFile" _label="Floor Texture"
+ arg="-floor-texture %"/>
+ <select id="floorTextureSelect">
+ <option id="floorTextureWoodFloor" _label="Wood Floor"/>
+ <option id="floorTextureBrickWall" _label="Brick Wall"
+ arg-set="-floor-texture brick-wall"/>
+ <option id="floorTextureCeilingTiles" _label="Ceiling Tiles"
+ arg-set="-floor-texture ceiling-tiles"/>
+ <option id="floorTextureFractal1" _label="Fractal 1"
+ arg-set="-floor-texture fractal-1"/>
+ <option id="floorTextureFractal2" _label="Fractal 2"
+ arg-set="-floor-texture fractal-2"/>
+ <option id="floorTextureFractal3" _label="Fractal 3"
+ arg-set="-floor-texture fractal-3"/>
+ <option id="floorTextureFractal4" _label="Fractal 4"
+ arg-set="-floor-texture fractal-4"/>
+ </select>
+ <boolean id="dropAcidFloor" _label="Drop acid"
+ arg-set="-drop-acid-floor"/>
+ </hgroup>
+
+ <hgroup>
+ <file id="ceilingTextureFile" _label="Ceiling Texture"
+ arg="-ceiling-texture %"/>
+ <select id="ceilingTextureSelect">
+ <option id="ceilingTextureCeilingTiles" _label="Ceiling Tiles"/>
+ <option id="ceilingTextureBrickWall" _label="Brick Wall"
+ arg-set="-ceiling-texture brick-wall"/>
+ <option id="ceilingTextureWoodFloor" _label="Wood Floor"
+ arg-set="-ceiling-texture wood-floor"/>
+ <option id="ceilingTextureFractal1" _label="Fractal 1"
+ arg-set="-ceiling-texture fractal-1"/>
+ <option id="ceilingTextureFractal2" _label="Fractal 2"
+ arg-set="-ceiling-texture fractal-2"/>
+ <option id="ceilingTextureFractal3" _label="Fractal 3"
+ arg-set="-ceiling-texture fractal-3"/>
+ <option id="ceilingTextureFractal4" _label="Fractal 4"
+ arg-set="-ceiling-texture fractal-4"/>
+ </select>
+ <boolean id="dropAcidCeiling" _label="Drop acid"
+ arg-set="-drop-acid-ceiling"/>
+ </hgroup>
+-->
+
+ <hgroup>
+ <number id="numInverters" type="spinbutton"
+ arg="-inverters %" _label="Inverters" low="0"
+ high="100" default="10"/>
+ <number id="numRats" type="spinbutton"
+ arg="-rats %" _label="Rats" low="0" high="100"
+ default="1"/>
+
+<!--
+ <vgroup>
+ <number id="numGl3dTexts" type="spinbutton"
+ arg="-gl-3d-texts %" _label="OpenGL"
+ low="0" high="100" default="3"/>
+ <number id="numGlRedbooks" type="spinbutton"
+ arg="-gl-redbooks %" _label="Redbooks"
+ low="0" high="100" default="3"/>
+ </vgroup>
+-->
+ </hgroup>
+
+ <xscreensaver-updater />
+
+ <_description>
+A re-creation of the 3D Maze screensaver from Windows 95.
+Written by Sudoer; 2018.
+</_description>
+</screensaver>
diff --git a/hacks/config/memscroller.xml b/hacks/config/memscroller.xml
new file mode 100644
index 0000000..ccb6c0a
--- /dev/null
+++ b/hacks/config/memscroller.xml
@@ -0,0 +1,35 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="memscroller" _label="MemScroller">
+
+ <command arg="-root"/>
+
+ <video href="https://www.youtube.com/watch?v=DQJRNlTKCdA"/>
+
+ <number id="delay" type="slider" arg="-delay %"
+ _label="Frame rate" _low-label="Low" _high-label="High"
+ low="0" high="100000" default="10000"
+ convert="invert"/>
+
+ <hgroup>
+ <select id="seedMode">
+ <option id="ram" _label="Dump memory"/>
+ <option id="random" _label="Draw random numbers" arg-set="-random"/>
+ </select>
+
+ <select id="drawMode">
+ <option id="color" _label="Draw in RGB"/>
+ <option id="mono" _label="Draw green" arg-set="-mono"/>
+ </select>
+ </hgroup>
+
+ <boolean id="showfps" _label="Show frame rate" arg-set="-fps"/>
+
+ <xscreensaver-updater />
+
+ <_description>
+Scrolls a dump of its own memory in three windows at three different rates.
+
+Written by Jamie Zawinski; 2004.
+ </_description>
+</screensaver>
diff --git a/hacks/config/menger.xml b/hacks/config/menger.xml
new file mode 100644
index 0000000..760167e
--- /dev/null
+++ b/hacks/config/menger.xml
@@ -0,0 +1,51 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="menger" _label="Menger" gl="yes">
+
+ <command arg="-root"/>
+
+ <video href="https://www.youtube.com/watch?v=qpnuNJH9cLw"/>
+
+ <number id="delay" type="slider" arg="-delay %"
+ _label="Frame rate" _low-label="Low" _high-label="High"
+ low="0" high="100000" default="30000"
+ convert="invert"/>
+
+ <number id="descent" type="slider" arg="-speed %"
+ _label="Duration" _low-label="Short" _high-label="Long"
+ low="2" high="500" default="150"
+ convert="invert"/>
+
+ <number id="depth" type="spinbutton" arg="-depth %"
+ _label="Max depth" low="1" high="6" default="3"/>
+
+ <!-- #### -no-optimize -->
+
+ <boolean id="wander" _label="Wander" arg-unset="-no-wander"/>
+
+ <select id="rotation">
+ <option id="no" _label="Don't rotate" arg-set="-spin 0"/>
+ <option id="x" _label="Rotate around X axis" arg-set="-spin X"/>
+ <option id="y" _label="Rotate around Y axis" arg-set="-spin Y"/>
+ <option id="z" _label="Rotate around Z axis" arg-set="-spin Z"/>
+ <option id="xy" _label="Rotate around X and Y axes" arg-set="-spin XY"/>
+ <option id="xz" _label="Rotate around X and Z axes" arg-set="-spin XZ"/>
+ <option id="yz" _label="Rotate around Y and Z axes" arg-set="-spin YZ"/>
+ <option id="xyz" _label="Rotate around all three axes"/>
+ </select>
+
+ <boolean id="wire" _label="Wireframe" arg-set="-wireframe"/>
+ <boolean id="showfps" _label="Show frame rate" arg-set="-fps"/>
+
+ <xscreensaver-updater />
+
+ <_description>
+The Menger Gasket is a cube-based recursive fractal object
+analagous to the Sierpinski Tetrahedron.
+
+https://en.wikipedia.org/wiki/Menger_sponge
+https://en.wikipedia.org/wiki/Sierpinski_carpet
+
+Written by Jamie Zawinski; 2001.
+ </_description>
+</screensaver>
diff --git a/hacks/config/metaballs.xml b/hacks/config/metaballs.xml
new file mode 100644
index 0000000..0d1a218
--- /dev/null
+++ b/hacks/config/metaballs.xml
@@ -0,0 +1,53 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="metaballs" _label="MetaBalls">
+
+ <command arg="-root"/>
+
+ <video href="https://www.youtube.com/watch?v=wcdKHCp9foY"/>
+
+ <!-- #### -color [random] -->
+
+ <hgroup>
+ <vgroup>
+ <number id="delay" type="slider" arg="-delay %"
+ _label="Frame rate" _low-label="Low" _high-label="High"
+ low="0" high="100000" default="10000"
+ convert="invert"/>
+
+ <number id="cycles" type="slider" arg="-cycles %"
+ _label="Duration" _low-label="Short" _high-label="Long"
+ low="100" high="3000" default="1000"/>
+
+ <number id="ncolors" type="slider" arg="-ncolors %"
+ _label="Number of colors" _low-label="Two" _high-label="Many"
+ low="2" high="256" default="256"/>
+
+ </vgroup>
+ <vgroup>
+
+ <number id="count" type="slider" arg="-count %"
+ _label="Metaball count" _low-label="Two" _high-label="Many"
+ low="2" high="255" default="10"/>
+
+ <number id="radius" type="slider" arg="-radius %"
+ _label="MetaBall Radius" _low-label="Small" _high-label="Big" low="2" high="100" default="100"/>
+
+ <number id="delta" type="slider" arg="-delta %"
+ _label="MetaBall Movement" _low-label="Small" _high-label="Big" low="1" high="20" default="3"/>
+
+ </vgroup>
+ </hgroup>
+
+ <boolean id="showfps" _label="Show frame rate" arg-set="-fps"/>
+
+ <xscreensaver-updater />
+
+ <_description>
+2D meta-balls: overlapping and merging balls with fuzzy edges.
+
+https://en.wikipedia.org/wiki/Metaballs
+
+Written by W.P. van Paassen; 2003.
+ </_description>
+</screensaver>
diff --git a/hacks/config/mirrorblob.xml b/hacks/config/mirrorblob.xml
new file mode 100644
index 0000000..74b1015
--- /dev/null
+++ b/hacks/config/mirrorblob.xml
@@ -0,0 +1,75 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="mirrorblob" _label="MirrorBlob" gl="yes">
+
+ <command arg="-root"/>
+
+ <video href="https://www.youtube.com/watch?v=o4GTO18KHe8"/>
+
+ <hgroup>
+ <vgroup>
+ <number id="delay" type="slider" arg="-delay %"
+ _label="Frame rate" _low-label="Low" _high-label="High"
+ low="0" high="100000" default="10000"
+ convert="invert"/>
+
+ <number id="zoom" type="slider" arg="-zoom %"
+ _label="Zoom"
+ _low-label="0.1x" _high-label="3.0x"
+ low="0.1" high="3.0" default="1.0"/>
+
+ <number id="hold_time" type="slider" arg="-hold-time %"
+ _label="Time until loading a new image"
+ _low-label="5 sec" _high-label="5 min"
+ low="5.0" high="300.0" default="30.0"/>
+
+ <number id="fade_speed" type="slider" arg="-fade-time %"
+ _label="Transition duration"
+ _low-label="None" _high-label="30 sec"
+ low="0.0" high="30.0" default="5.0"/>
+ </vgroup>
+ <vgroup>
+ <number id="resolution" type="slider" arg="-resolution %"
+ _low-label="Low" _high-label="High"
+ _label="Resolution" low="4" high="50" default="30"/>
+
+ <number id="bumps" type="slider" arg="-bumps %"
+ _low-label="None" _high-label="50 bumps"
+ _label="Bumps" low="0" high="50" default="10"/>
+
+ <number id="blend" type="slider" arg="-blend %"
+ _low-label="Clear" _high-label="Opaque"
+ _label="Transparency" low="0.1" high="1.0" default="1.0"/>
+ </vgroup>
+ </hgroup>
+
+ <hgroup>
+ <vgroup>
+ <boolean id="walls" _label="Enable walls" arg-set="-walls"/>
+ <boolean id="colour" _label="Enable colouring" arg-set="-colour"/>
+ <boolean id="texture" _label="Enable reflected image" arg-unset="-no-texture"/>
+ </vgroup>
+ <vgroup>
+ <boolean id="backgound" _label="Show image on background" arg-unset="-no-paint-background"/>
+ <boolean id="offset_texture" _label="Offset texture coordinates" arg-set="-offset-texture"/>
+ <boolean id="showfps" _label="Show frame rate" arg-set="-fps"/>
+ </vgroup>
+
+ <vgroup>
+ <select id="render">
+ <option id="wire" _label="Wireframe" arg-set="-wire"/>
+ <option id="solid" _label="Solid surface"/>
+ </select>
+ </vgroup>
+
+ </hgroup>
+
+ <xscreensaver-image />
+ <xscreensaver-updater />
+
+ <_description>
+A wobbly blob distorts images behind it.
+
+Written by Jon Dowdall; 2003.
+ </_description>
+</screensaver>
diff --git a/hacks/config/mismunch.xml b/hacks/config/mismunch.xml
new file mode 100644
index 0000000..02a258f
--- /dev/null
+++ b/hacks/config/mismunch.xml
@@ -0,0 +1,44 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="mismunch" _label="Mismunch">
+
+ <command arg="-root"/>
+
+ <video href="https://www.youtube.com/watch?v=aXNIYpdh8Ug"/>
+
+ <number id="delay" type="slider" arg="-delay %"
+ _label="Frame rate" _low-label="Low" _high-label="High"
+ low="0" high="100000" default="10000"
+ convert="invert"/>
+
+ <number id="duration" type="slider" arg="-clear %"
+ _label="Duration" _low-label="Short" _high-label="Long"
+ low="1" high="200" default="65"/>
+
+ <number id="simultaneous" type="slider" arg="-simul %"
+ _label="Simultaneous squares" _low-label="One" _high-label="Many"
+ low="1" high="20" default="5"/>
+
+ <select id="mode">
+ <option id="xor" _label="XOR"/>
+ <option id="solid" _label="Solid" arg-set="-no-xor"/>
+ </select>
+
+ <boolean id="showfps" _label="Show frame rate" arg-set="-fps"/>
+
+ <xscreensaver-updater />
+
+ <_description>
+This screen saver was removed from the XScreenSaver distribution as of
+version 5.08. It was merged with the "Munch" screen saver.
+
+Munching errors! This is a creatively broken misimplementation of the
+classic munching squares graphics hack. See the "Munch" screen saver
+for the original.
+
+https://en.wikipedia.org/wiki/HAKMEM
+https://en.wikipedia.org/wiki/Munching_square
+
+Written by Steven Hazel; 2004.
+ </_description>
+</screensaver>
diff --git a/hacks/config/moebius.xml b/hacks/config/moebius.xml
new file mode 100644
index 0000000..324c527
--- /dev/null
+++ b/hacks/config/moebius.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="moebius" _label="Moebius" gl="yes">
+
+ <command arg="-root"/>
+
+ <video href="https://www.youtube.com/watch?v=77Nib6jQrXc"/>
+
+ <number id="delay" type="slider" arg="-delay %"
+ _label="Frame rate" _low-label="Low" _high-label="High"
+ low="0" high="100000" default="20000"
+ convert="invert"/>
+
+ <boolean id="solid" _label="Solid floor" arg-set="-solidmoebius"/>
+ <boolean id="ants" _label="Draw ants" arg-unset="-no-ants"/>
+ <boolean id="showfps" _label="Show frame rate" arg-set="-fps"/>
+
+ <xscreensaver-updater />
+
+ <_description>
+M. C. Escher's "Moebius Strip II", an image of ants walking along the
+surface of a moebius strip.
+
+https://en.wikipedia.org/wiki/Moebius_strip
+https://en.wikipedia.org/wiki/Maurits_Cornelis_Escher
+
+Written by Marcelo F. Vianna; 1997.
+ </_description>
+</screensaver>
diff --git a/hacks/config/moebiusgears.xml b/hacks/config/moebiusgears.xml
new file mode 100644
index 0000000..9233f91
--- /dev/null
+++ b/hacks/config/moebiusgears.xml
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="moebiusgears" _label="MoebiusGears" gl="yes">
+
+ <command arg="-root"/>
+
+ <video href="https://www.youtube.com/watch?v=kpT6j2-9b40"/>
+
+ <number id="delay" type="slider" arg="-delay %"
+ _label="Frame rate" _low-label="Low" _high-label="High"
+ low="0" high="100000" default="30000"
+ convert="invert"/>
+
+ <number id="speed" type="slider" arg="-speed %"
+ _label="Speed" _low-label="Slow" _high-label="Fast"
+ low="0.01" high="5.0" default="1.0"/>
+
+ <hgroup>
+ <number id="count" type="spinbutton" arg="-count %"
+ _label="Number of gears" low="13" high="99" default="17"/>
+
+ <number id="teeth" type="spinbutton" arg="-teeth %"
+ _label="Number of teeth" low="7" high="49" default="15"/>
+ </hgroup>
+
+ <hgroup>
+ <boolean id="wander" _label="Wander" arg-unset="-no-wander"/>
+ <boolean id="spin" _label="Spin" arg-unset="-no-spin"/>
+ <boolean id="roll" _label="Roll" arg-unset="-no-roll"/>
+ <boolean id="wire" _label="Wireframe" arg-set="-wireframe"/>
+ </hgroup>
+
+ <boolean id="showfps" _label="Show frame rate" arg-set="-fps"/>
+
+ <xscreensaver-updater />
+
+ <_description>
+An interlinked loop of rotating gears. The layout of the gears
+follows the path of a moebius strip. See also the "Pinion" and
+"Gears" screen savers.
+
+https://en.wikipedia.org/wiki/Involute_gear
+https://en.wikipedia.org/wiki/Moebius_strip
+
+Written by Jamie Zawinski; 2007.
+ </_description>
+</screensaver>
diff --git a/hacks/config/moire.xml b/hacks/config/moire.xml
new file mode 100644
index 0000000..9c3f558
--- /dev/null
+++ b/hacks/config/moire.xml
@@ -0,0 +1,38 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="moire" _label="Moire">
+
+ <command arg="-root"/>
+
+ <video href="https://www.youtube.com/watch?v=S50zFVcUe4s"/>
+
+ <number id="delay" type="slider" arg="-delay %"
+ _label="Duration" _low-label="1 second" _high-label="1 minute"
+ low="1" high="60" default="5"/>
+
+ <number id="ncolors" type="slider" arg="-ncolors %"
+ _label="Number of colors" _low-label="Two" _high-label="Many"
+ low="1" high="255" default="64"/>
+
+ <number id="offset" type="slider" arg="-offset %"
+ _label="Offset" _low-label="Small" _high-label="Large"
+ low="1" high="200" default="50"/>
+
+ <!-- #### -no-random -->
+
+<!-- <boolean id="shm" _label="Use shared memory" arg-unset="-no-shm"/> -->
+
+ <boolean id="showfps" _label="Show frame rate" arg-set="-fps"/>
+
+ <xscreensaver-updater />
+
+ <_description>
+ When the lines on the screen
+ Make more lines in between,
+ That's a moire'!
+
+https://en.wikipedia.org/wiki/Moire_pattern
+
+Written by Jamie Zawinski and Michael Bayne; 1997.
+ </_description>
+</screensaver>
diff --git a/hacks/config/moire2.xml b/hacks/config/moire2.xml
new file mode 100644
index 0000000..1785df3
--- /dev/null
+++ b/hacks/config/moire2.xml
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="moire2" _label="Moire2">
+
+ <command arg="-root"/>
+
+ <video href="https://www.youtube.com/watch?v=7iBNbYCo8so"/>
+
+ <number id="delay" type="slider" arg="-delay %"
+ _label="Frame rate" _low-label="Low" _high-label="High"
+ low="0" high="100000" default="50000"
+ convert="invert"/>
+
+ <number id="ncolors" type="slider" arg="-ncolors %"
+ _label="Number of colors" _low-label="Two" _high-label="Many"
+ low="1" high="255" default="150"/>
+
+ <number id="thickness" type="spinbutton" arg="-thickness %"
+ _label="Thickness" low="0" high="100" default="0"/>
+
+ <boolean id="showfps" _label="Show frame rate" arg-set="-fps"/>
+
+ <xscreensaver-updater />
+
+ <_description>
+Generates fields of concentric circles or ovals, and combines the
+planes with various operations. The planes are moving independently
+of one another, causing the interference lines to spray.
+
+https://en.wikipedia.org/wiki/Moire_pattern
+
+Written by Jamie Zawinski; 1998.
+ </_description>
+</screensaver>
diff --git a/hacks/config/molecule.xml b/hacks/config/molecule.xml
new file mode 100644
index 0000000..fe1129b
--- /dev/null
+++ b/hacks/config/molecule.xml
@@ -0,0 +1,60 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="molecule" _label="Molecule" gl="yes">
+
+ <command arg="-root"/>
+
+ <video href="https://www.youtube.com/watch?v=D1A0tNcPL4M"/>
+
+ <number id="delay" type="slider" arg="-delay %"
+ _label="Frame rate" _low-label="Low" _high-label="High"
+ low="0" high="100000" default="10000"
+ convert="invert"/>
+
+ <number id="timeout" type="slider" arg="-timeout %"
+ _label="Duration" _low-label="5 seconds" _high-label="2 minutes"
+ low="5" high="120" default="20"/>
+
+ <hgroup>
+ <vgroup>
+ <boolean id="labels" _label="Label atoms" arg-unset="-no-labels"/>
+ <boolean id="titles" _label="Describe molecule" arg-unset="-no-titles"/>
+ <boolean id="bbox" _label="Draw bounding box" arg-set="-bbox"/>
+ <boolean id="wire" _label="Wireframe" arg-set="-wireframe"/>
+ </vgroup>
+ <vgroup>
+ <boolean id="atoms" _label="Draw atomic nuclei" arg-unset="-no-atoms"/>
+ <boolean id="bonds" _label="Draw atomic bonds" arg-unset="-no-bonds"/>
+ <boolean id="shells" _label="Draw electron shells" arg-unset="-no-shells"/>
+ <boolean id="showfps" _label="Show frame rate" arg-set="-fps"/>
+ </vgroup>
+ </hgroup>
+
+ <hgroup>
+ <boolean id="wander" _label="Wander" arg-set="-wander"/>
+
+ <select id="rotation">
+ <option id="no" _label="Don't rotate" arg-set="-spin 0"/>
+ <option id="x" _label="Rotate around X axis" arg-set="-spin X"/>
+ <option id="y" _label="Rotate around Y axis" arg-set="-spin Y"/>
+ <option id="z" _label="Rotate around Z axis" arg-set="-spin Z"/>
+ <option id="xy" _label="Rotate around X and Y axes" arg-set="-spin XY"/>
+ <option id="xz" _label="Rotate around X and Z axes" arg-set="-spin XZ"/>
+ <option id="yz" _label="Rotate around Y and Z axes" arg-set="-spin YZ"/>
+ <option id="xyz" _label="Rotate around all three axes"/>
+ </select>
+ </hgroup>
+
+ <file id="molecule" _label="PDB file or directory" arg="-molecule %"/>
+
+ <xscreensaver-updater />
+
+ <_description>
+Some interesting molecules. Several molecules are built in, and it can
+also read PDB (Protein Data Bank) files as input.
+
+https://en.wikipedia.org/wiki/Protein_Data_Bank_%28file_format%29
+
+Written by Jamie Zawinski; 2001.
+ </_description>
+</screensaver>
diff --git a/hacks/config/morph3d.xml b/hacks/config/morph3d.xml
new file mode 100644
index 0000000..0122fb7
--- /dev/null
+++ b/hacks/config/morph3d.xml
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="morph3d" _label="Morph3D" gl="yes">
+
+ <command arg="-root"/>
+
+ <video href="https://www.youtube.com/watch?v=lNtDppjOli4"/>
+
+ <number id="delay" type="slider" arg="-delay %"
+ _label="Frame rate" _low-label="Low" _high-label="High"
+ low="0" high="100000" default="40000"
+ convert="invert"/>
+
+ <select id="object">
+ <option id="random" _label="Random object"/>
+ <option id="tetra" _label="Tetrahedron" arg-set="-count 1"/>
+ <option id="cube" _label="Cube" arg-set="-count 2"/>
+ <option id="octa" _label="Octahedron" arg-set="-count 3"/>
+ <option id="dodeca" _label="Dodecahedron" arg-set="-count 4"/>
+ <option id="icosa" _label="Icosahedron" arg-set="-count 5"/>
+ </select>
+
+ <boolean id="showfps" _label="Show frame rate" arg-set="-fps"/>
+
+ <xscreensaver-updater />
+
+ <_description>
+Platonic solids that turn inside out and get spikey.
+
+https://en.wikipedia.org/wiki/Platonic_solid
+
+Written by Marcelo Vianna; 1997.
+ </_description>
+</screensaver>
diff --git a/hacks/config/mountain.xml b/hacks/config/mountain.xml
new file mode 100644
index 0000000..de0eb4d
--- /dev/null
+++ b/hacks/config/mountain.xml
@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="mountain" _label="Mountain">
+
+ <command arg="-root"/>
+
+ <video href="https://www.youtube.com/watch?v=knqnPcZGqkA"/>
+
+ <number id="delay" type="slider" arg="-delay %"
+ _label="Frame rate" _low-label="Low" _high-label="High"
+ low="0" high="100000" default="20000"
+ convert="invert"/>
+
+ <number id="count" type="slider" arg="-count %"
+ _label="Peaks" _low-label="One" _high-label="Lots"
+ low="1" high="100" default="30"/>
+
+ <number id="ncolors" type="slider" arg="-ncolors %"
+ _label="Number of colors" _low-label="Two" _high-label="Many"
+ low="1" high="255" default="64"/>
+
+ <boolean id="showfps" _label="Show frame rate" arg-set="-fps"/>
+
+ <xscreensaver-updater />
+
+ <_description>
+Generates random 3D plots that look vaguely mountainous.
+
+Written by Pascal Pensa; 1997.
+ </_description>
+</screensaver>
diff --git a/hacks/config/munch.xml b/hacks/config/munch.xml
new file mode 100644
index 0000000..9875838
--- /dev/null
+++ b/hacks/config/munch.xml
@@ -0,0 +1,63 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="munch" _label="Munch">
+
+ <command arg="-root"/>
+
+ <video href="https://www.youtube.com/watch?v=aXNIYpdh8Ug"/>
+
+ <hgroup>
+ <vgroup>
+ <number id="delay" type="slider" arg="-delay %"
+ _label="Frame rate" _low-label="Low" _high-label="High"
+ low="0" high="100000" default="10000"
+ convert="invert"/>
+
+ <number id="duration" type="slider" arg="-clear %"
+ _label="Duration" _low-label="Short" _high-label="Long"
+ low="1" high="200" default="65"/>
+
+ <number id="simultaneous" type="slider" arg="-simul %"
+ _label="Simultaneous squares" _low-label="One" _high-label="Many"
+ low="1" high="20" default="5"/>
+ </vgroup>
+ <vgroup>
+ <select id="mismunch">
+ <option id="random" _label="Munch or mismunch"/>
+ <option id="munch" _label="Munch only" arg-set="-classic"/>
+ <option id="mismunch" _label="Mismunch only" arg-set="-mismunch"/>
+ </select>
+
+ <select id="mode">
+ <option id="xor" _label="XOR"/>
+ <option id="solid" _label="Solid" arg-set="-no-xor"/>
+ </select>
+
+ <boolean id="showfps" _label="Show frame rate" arg-set="-fps"/>
+
+ <xscreensaver-updater />
+
+ </vgroup>
+ </hgroup>
+
+ <_description>
+ DATAI 2
+ ADDB 1,2
+ ROTC 2,-22
+ XOR 1,2
+ JRST .-4
+
+As reported by HAKMEM (MIT AI Memo 239, 1972), Jackson Wright wrote
+the above PDP-1 code in 1962. That code still lives on here, some 46
+years later.
+
+In "mismunch" mode, it displays a creatively broken misimplementation
+of the classic munching squares algorithm instead.
+
+https://en.wikipedia.org/wiki/HAKMEM
+https://en.wikipedia.org/wiki/Munching_square
+
+Written by Jackson Wright, Tim Showalter, Jamie Zawinski and
+Steven Hazel; 1997.
+ </_description>
+</screensaver>
diff --git a/hacks/config/nerverot.xml b/hacks/config/nerverot.xml
new file mode 100644
index 0000000..ef6db85
--- /dev/null
+++ b/hacks/config/nerverot.xml
@@ -0,0 +1,62 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="nerverot" _label="NerveRot">
+
+ <command arg="-root"/>
+
+ <video href="https://www.youtube.com/watch?v=oUfgDnyGqHM"/>
+
+ <hgroup>
+ <vgroup>
+ <number id="delay" type="slider" arg="-delay %"
+ _label="Frame rate" _low-label="Low" _high-label="High"
+ low="0" high="100000" default="10000"
+ convert="invert"/>
+
+ <number id="iters" type="slider" arg="-max-iters %"
+ _label="Duration" _low-label="Short" _high-label="Long"
+ low="100" high="8000" default="1200"/>
+
+ <number id="count" type="slider" arg="-count %"
+ _label="Blot count" _low-label="Few" _high-label="Many"
+ low="1" high="1000" default="250"/>
+
+ <number id="ncolors" type="slider" arg="-colors %"
+ _label="Colors" _low-label="Two" _high-label="Many"
+ low="1" high="255" default="4"/>
+ </vgroup>
+ <vgroup>
+ <number id="event" type="slider" arg="-event-chance %"
+ _label="Changes" _low-label="Seldom" _high-label="Frequent"
+ low="0.0" high="1.0" default="0.2"/>
+
+ <number id="nervous" type="slider" arg="-nervousness %"
+ _label="Nervousness" _low-label="Calm" _high-label="Spastic"
+ low="0.0" high="1.0" default="0.3"/>
+
+ <number id="mnr" type="slider" arg="-max-nerve-radius %"
+ _label="Crunchiness" _low-label="Low" _high-label="High"
+ low="0.0" high="1.0" default="0.7"/>
+
+ <number id="linewidth" type="spinbutton" arg="-line-width %"
+ _label="Line thickness" low="0" high="100" default="0"/>
+
+ <boolean id="showfps" _label="Show frame rate" arg-set="-fps"/>
+
+ </vgroup>
+ </hgroup>
+
+ <!-- #### -iter-amt [0.01] -->
+ <!-- #### -min-scale [0.6] -->
+ <!-- #### -max-scale [1.75] -->
+ <!-- #### -min-radius [3] -->
+ <!-- #### -max-radius [25] -->
+
+ <xscreensaver-updater />
+
+ <_description>
+Nervously vibrating squiggles.
+
+Written by Dan Bornstein; 2000.
+ </_description>
+</screensaver>
diff --git a/hacks/config/noof.xml b/hacks/config/noof.xml
new file mode 100644
index 0000000..3e2b0fc
--- /dev/null
+++ b/hacks/config/noof.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="noof" _label="Noof" gl="yes">
+
+ <command arg="-root"/>
+
+ <video href="https://www.youtube.com/watch?v=x5DQjgYqmn0"/>
+
+ <number id="delay" type="slider" arg="-delay %"
+ _label="Frame rate" _low-label="Low" _high-label="High"
+ low="0" high="100000" default="10000"
+ convert="invert"/>
+
+ <boolean id="showfps" _label="Show frame rate" arg-set="-fps"/>
+
+ <xscreensaver-updater />
+
+ <_description>
+Flowery, rotatey patterns.
+
+Written by Bill Torzewski; 2004.
+ </_description>
+</screensaver>
diff --git a/hacks/config/noseguy.xml b/hacks/config/noseguy.xml
new file mode 100644
index 0000000..bfc1674
--- /dev/null
+++ b/hacks/config/noseguy.xml
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="noseguy" _label="NoseGuy">
+
+ <command arg="-root"/>
+
+ <video href="https://www.youtube.com/watch?v=ONJlg9Y_TLI"/>
+
+ <xscreensaver-text />
+ <boolean id="showfps" _label="Show frame rate" arg-set="-fps"/>
+
+ <xscreensaver-updater />
+
+ <_description>
+A little man with a big nose wanders around your screen saying things.
+
+Written by Dan Heller and Jamie Zawinski; 1992.
+ </_description>
+</screensaver>
diff --git a/hacks/config/pacman.xml b/hacks/config/pacman.xml
new file mode 100644
index 0000000..5ef77d5
--- /dev/null
+++ b/hacks/config/pacman.xml
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="pacman" _label="Pacman">
+
+ <command arg="-root"/>
+
+ <video href="https://www.youtube.com/watch?v=G-pdjis0ECw"/>
+
+ <number id="delay" type="slider" arg="-delay %"
+ _label="Frame rate" _low-label="Low" _high-label="High"
+ low="0" high="100000" default="10000"
+ convert="invert"/>
+
+ <number id="size" type="spinbutton" arg="-size %"
+ _label="Player size" low="0" high="200" default="0"/>
+
+ <boolean id="showfps" _label="Show frame rate" arg-set="-fps"/>
+
+ <xscreensaver-updater />
+
+ <_description>
+Simulates a game of Pac-Man on a randomly-created level.
+
+https://en.wikipedia.org/wiki/Pac-Man
+
+Written by Edwin de Jong and Jamie Zawinski; 2004.
+ </_description>
+</screensaver>
diff --git a/hacks/config/pedal.xml b/hacks/config/pedal.xml
new file mode 100644
index 0000000..5ddb6e1
--- /dev/null
+++ b/hacks/config/pedal.xml
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="pedal" _label="Pedal">
+
+ <command arg="-root"/>
+
+ <video href="https://www.youtube.com/watch?v=VFibXcP1JH0"/>
+
+ <number id="delay" type="slider" arg="-delay %"
+ _label="Duration" _low-label="1 second" _high-label="1 minute"
+ low="1" high="60" default="5"/>
+
+ <number id="lines" type="slider" arg="-maxlines %"
+ _label="Lines" _low-label="Few" _high-label="Many"
+ low="100" high="5000" default="1000"/>
+
+ <!-- #### -fadedelay [200000] -->
+ <!-- #### -foreground [white] -->
+ <!-- #### -background [black] -->
+
+ <boolean id="showfps" _label="Show frame rate" arg-set="-fps"/>
+
+ <xscreensaver-updater />
+
+ <_description>
+The even-odd winding rule.
+
+https://en.wikipedia.org/wiki/Even-odd_rule
+https://en.wikipedia.org/wiki/Nonzero-rule
+
+Written by Dale Moore; 1995.
+ </_description>
+</screensaver>
diff --git a/hacks/config/peepers.xml b/hacks/config/peepers.xml
new file mode 100644
index 0000000..300c389
--- /dev/null
+++ b/hacks/config/peepers.xml
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="peepers" _label="Peepers" gl="yes">
+
+ <command arg="-root"/>
+
+ <video href="https://www.youtube.com/watch?v=9xwPoLRKff8"/>
+
+ <hgroup>
+ <vgroup>
+ <number id="delay" type="slider" arg="-delay %"
+ _label="Frame rate" _low-label="Low" _high-label="High"
+ low="0" high="100000" default="30000"
+ convert="invert"/>
+
+ <number id="speed" type="slider" arg="-speed %"
+ _label="Speed" _low-label="Slow" _high-label="Fast"
+ low="0.05" high="2.0" default="1.0"/>
+
+ <number id="count" type="slider" arg="-count %"
+ _label="Number of eyes" _low-label="Few" _high-label="Many"
+ low="0" high="50" default="0"/>
+ </vgroup>
+
+ <vgroup>
+
+ <select id="mode">
+ <option id="bounce" _label="Bounce" arg-set="-mode bounce"/>
+ <option id="scroll" _label="Scroll" arg-set="-mode scroll"/>
+ <option id="random" _label="Bounce or scroll"/>
+ <option id="xeyes" _label="Grid" arg-set="-mode xeyes"/>
+ <option id="beholder" _label="Beholder" arg-set="-mode beholder"/>
+ </select>
+
+ <boolean id="wire" _label="Wireframe" arg-set="-wireframe"/>
+ <boolean id="showfps" _label="Show frame rate" arg-set="-fps"/>
+
+ <xscreensaver-updater />
+ </vgroup>
+ </hgroup>
+
+ <_description>
+Floating eyeballs. Anatomically correct, and they also track the pointer.
+
+Written by Jamie Zawinski; 2018.
+ </_description>
+</screensaver>
diff --git a/hacks/config/penetrate.xml b/hacks/config/penetrate.xml
new file mode 100644
index 0000000..a7f6de9
--- /dev/null
+++ b/hacks/config/penetrate.xml
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="penetrate" _label="Penetrate">
+
+ <command arg="-root"/>
+
+ <video href="https://www.youtube.com/watch?v=iuutzMOVYgI"/>
+
+ <number id="bgrowth" type="slider" arg="-bgrowth %"
+ _label="Explosions" _low-label="Slow" _high-label="Fast"
+ low="1" high="20" default="5"/>
+
+ <number id="lrate" type="slider" arg="-lrate %"
+ _label="Lasers" _low-label="Slow" _high-label="Fast"
+ low="10" high="200" default="80"
+ convert="invert"/>
+
+ <select id="mode">
+ <option id="dumb" _label="Start badly, but learn"/>
+ <option id="smart" _label="Always play well" arg-set="-smart"/>
+ </select>
+
+ <boolean id="showfps" _label="Show frame rate" arg-set="-fps"/>
+
+ <xscreensaver-updater />
+
+ <_description>
+Simulates (something like) the classic arcade game Missile Command.
+
+https://en.wikipedia.org/wiki/Missile_Command
+
+Written by Adam Miller; 1999.
+ </_description>
+</screensaver>
diff --git a/hacks/config/penrose.xml b/hacks/config/penrose.xml
new file mode 100644
index 0000000..aa70323
--- /dev/null
+++ b/hacks/config/penrose.xml
@@ -0,0 +1,55 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="penrose" _label="Penrose">
+
+ <command arg="-root"/>
+
+ <video href="https://www.youtube.com/watch?v=atlkrWkbYHk"/>
+
+ <hgroup>
+ <vgroup>
+ <number id="delay" type="slider" arg="-delay %"
+ _label="Frame rate" _low-label="Low" _high-label="High"
+ low="0" high="100000" default="10000"
+ convert="invert"/>
+
+ <number id="ncolors" type="slider" arg="-ncolors %"
+ _label="Number of colors" _low-label="Two" _high-label="Many"
+ low="1" high="255" default="64"/>
+ </vgroup>
+ <vgroup>
+ <number id="size" type="slider" arg="-size %"
+ _label="Tile size" _low-label="Small" _high-label="Large"
+ low="1" high="100" default="40"/>
+
+ <boolean id="ammann" _label="Draw ammann lines" arg-set="-ammann"/>
+ <boolean id="showfps" _label="Show frame rate" arg-set="-fps"/>
+ </vgroup>
+ </hgroup>
+
+
+ <xscreensaver-updater />
+
+ <_description>
+Quasiperiodic tilings.
+
+In April 1997, Sir Roger Penrose, a British math professor who has
+worked with Stephen Hawking on such topics as relativity, black
+holes, and whether time has a beginning, filed a
+copyright-infringement lawsuit against the Kimberly-Clark
+Corporation, which Penrose said copied a pattern he created (a
+pattern demonstrating that "a nonrepeating pattern could exist in
+nature") for its Kleenex quilted toilet paper. Penrose said he
+doesn't like litigation but, "When it comes to the population of
+Great Britain being invited by a multinational to wipe their bottoms
+on what appears to be the work of a Knight of the Realm, then a last
+stand must be taken."
+
+As reported by News of the Weird #491, 4-Jul-1997.
+
+https://en.wikipedia.org/wiki/Penrose_tiling
+https://en.wikipedia.org/wiki/Tessellation
+
+Written by Timo Korvola; 1997.
+ </_description>
+</screensaver>
diff --git a/hacks/config/petri.xml b/hacks/config/petri.xml
new file mode 100644
index 0000000..eff9373
--- /dev/null
+++ b/hacks/config/petri.xml
@@ -0,0 +1,83 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="petri" _label="Petri">
+
+ <command arg="-root"/>
+
+ <video href="https://www.youtube.com/watch?v=QkJ9cN0QQd8"/>
+
+ <hgroup>
+ <number id="delay" type="slider" arg="-delay %"
+ _label="Frame rate" _low-label="Low" _high-label="High"
+ low="0" high="100000" default="10000"
+ convert="invert"/>
+ <boolean id="showfps" _label="Show frame rate" arg-set="-fps"/>
+ </hgroup>
+
+ <hgroup>
+ <vgroup>
+ <number id="diaglim" type="slider" arg="-diaglim %"
+ _label="Colony shape" _low-label="Square" _high-label="Diamond"
+ low="1.0" high="2.0" default="1.414"
+ convert="invert"/>
+
+ <number id="anychan" type="slider" arg="-anychan %"
+ _label="Fertility" _low-label="Low" _high-label="High"
+ low="0.0" high="0.25" default="0.0015"/>
+
+ <number id="minorchan" type="slider" arg="-minorchan %"
+ _label="Offspring" _low-label="Few" _high-label="Many"
+ low="0.0" high="1.0" default="0.5"/>
+
+ <number id="instantdeathchan" type="slider" arg="-instantdeathchan %"
+ _label="Death comes" _low-label="Slowly" _high-label="Quickly"
+ low="0.0" high="1.0" default="0.2"/>
+ </vgroup>
+
+ <vgroup>
+ <number id="minlifespeed" type="slider" arg="-minlifespeed %"
+ _label="Minimum rate of growth" _low-label="Slow" _high-label="Fast"
+ low="0.0" high="1.0" default="0.04"/>
+
+ <number id="maxlifespeed" type="slider" arg="-maxlifespeed %"
+ _label="Maximum rate of growth" _low-label="Slow" _high-label="Fast"
+ low="0.0" high="1.0" default="0.13"/>
+
+ <number id="mindeathspeed" type="slider" arg="-mindeathspeed %"
+ _label="Minimum rate of death" _low-label="Slow" _high-label="Fast"
+ low="0.0" high="1.0" default="0.42"/>
+
+ <number id="maxdeathspeed" type="slider" arg="-maxdeathspeed %"
+ _label="Maximum rate of death" _low-label="Slow" _high-label="Fast"
+ low="0.0" high="1.0" default="0.46"/>
+ </vgroup>
+
+ <vgroup>
+ <number id="minlifespan" type="slider" arg="-minlifespan %"
+ _label="Minimum lifespan" _low-label="Short" _high-label="Long"
+ low="0" high="3000" default="500"/>
+
+ <number id="maxlifespan" type="slider" arg="-maxlifespan %"
+ _label="Maximum lifespan" _low-label="Short" _high-label="Long"
+ low="0" high="3000" default="1500"/>
+
+ <number id="size" type="spinbutton" arg="-size %"
+ _label="Cell size" low="0" high="100" default="2"/>
+
+ <number id="count" type="spinbutton" arg="-count %"
+ _label="Mold varieties" low="0" high="20" default="20"/>
+
+ </vgroup>
+ </hgroup>
+
+ <!-- #### -mem-throttle [22M] -->
+
+ <xscreensaver-updater />
+
+ <_description>
+Colonies of mold grow in a petri dish. Growing colored circles
+overlap and leave spiral interference in their wake.
+
+Written by Dan Bornstein; 1999.
+ </_description>
+</screensaver>
diff --git a/hacks/config/phosphor.xml b/hacks/config/phosphor.xml
new file mode 100644
index 0000000..484cf88
--- /dev/null
+++ b/hacks/config/phosphor.xml
@@ -0,0 +1,49 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="phosphor" _label="Phosphor">
+
+ <command arg="-root"/>
+
+ <video href="https://www.youtube.com/watch?v=G6ZWTrl7pV0"/>
+
+ <hgroup>
+ <vgroup>
+ <number id="delay" type="slider" arg="-delay %"
+ _label="Frame rate" _low-label="Low" _high-label="High"
+ low="0" high="100000" default="50000"
+ convert="invert"/>
+
+ <number id="scale" type="spinbutton" arg="-scale %"
+ _label="Font scale" low="1" high="20" default="6"/>
+
+ <number id="fade" type="slider" arg="-ticks %"
+ _label="Fade" _low-label="Slow" _high-label="Fast"
+ low="1" high="100" default="20"
+ convert="invert"/>
+
+ <select id="fg">
+ <option id="green" _label="Green" />
+ <!-- DarkOrange is probably the closest named color. -->
+ <option id="DarkOrange" _label="Amber" arg-set="-fg #ff7900" />
+ <option id="white" _label="White" arg-set="-fg white" />
+ </select>
+
+ <boolean id="showfps" _label="Show frame rate" arg-set="-fps"/>
+ </vgroup>
+ <vgroup>
+ <xscreensaver-text />
+ </vgroup>
+ </hgroup>
+
+ <xscreensaver-updater />
+
+ <_description>
+An old terminal with large pixels and long-sustain phosphor.
+
+On MacOS and Linux, this program is also a fully-functional VT100
+emulator! Run it as an application instead of as a screen saver and
+you can use it as a terminal.
+
+Written by Jamie Zawinski; 1999.
+ </_description>
+</screensaver>
diff --git a/hacks/config/photopile.xml b/hacks/config/photopile.xml
new file mode 100644
index 0000000..a174afd
--- /dev/null
+++ b/hacks/config/photopile.xml
@@ -0,0 +1,65 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="photopile" _label="Photopile" gl="yes">
+
+ <command arg="-root"/>
+
+ <video href="https://www.youtube.com/watch?v=snm7o95AR8E"/>
+
+ <hgroup>
+ <vgroup>
+
+ <number id="scale" type="slider" arg="-scale %"
+ _label="Image size"
+ _low-label="Small" _high-label="Large"
+ low="0.1" high="0.9" default="0.4"/>
+
+ <number id="tilt" type="slider" arg="-maxTilt %"
+ _label="Maximum angle from vertical"
+ _low-label="0 deg" _high-label="90 deg"
+ low="0" high="90" default="50"/>
+
+ <number id="count" type="spinbutton" arg="-count %"
+ _label="Number of images" low="1" high="20" default="7"/>
+
+ <boolean id="polaroid" _label="Simulate instant film" arg-unset="-no-polaroid"/>
+
+ <boolean id="clip" _label="Instant film theme" arg-unset="-no-clip"/>
+
+ <boolean id="shadows" _label="Draw drop shadows" arg-unset="-no-shadows"/>
+
+ </vgroup>
+ <vgroup>
+
+ <number id="speed" type="slider" arg="-speed %"
+ _label="Animation speed" _low-label="Slow" _high-label="Fast"
+ low="0.1" high="8.0" default="1.0"/>
+
+ <number id="delay" type="slider" arg="-delay %"
+ _label="Frame rate" _low-label="Low" _high-label="High"
+ low="0" high="100000" default="10000"
+ convert="invert"/>
+
+ <number id="duration" type="slider" arg="-duration %"
+ _label="Time until loading a new image"
+ _low-label="Short" _high-label="Long"
+ low="1" high="60" default="5"/>
+
+ <boolean id="titles" _label="Show file names" arg-unset="-no-titles"/>
+
+ <boolean id="showfps" _label="Show frame rate" arg-set="-fps"/>
+
+ </vgroup>
+ </hgroup>
+
+ <xscreensaver-image />
+ <xscreensaver-updater />
+
+ <_description>
+Loads several random images, and displays them as if lying in a random pile.
+The pile is periodically reshuffled, with new images coming in and old ones
+being thrown out.
+
+Written by Jens Kilian and Jamie Zawinski; 2008.
+ </_description>
+</screensaver>
diff --git a/hacks/config/piecewise.xml b/hacks/config/piecewise.xml
new file mode 100644
index 0000000..fb6990a
--- /dev/null
+++ b/hacks/config/piecewise.xml
@@ -0,0 +1,45 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="piecewise" _label="Piecewise">
+
+ <command arg="-root"/>
+
+ <video href="https://www.youtube.com/watch?v=3gQr1FxFSe0"/>
+
+ <hgroup>
+ <vgroup>
+ <number id="delay" type="slider" arg="-delay %"
+ _label="Frame rate" _low-label="Low" _high-label="High"
+ low="0" high="100000" default="10000"
+ convert="invert"/>
+
+ <number id="count" type="slider" arg="-count %"
+ _label="Count" _low-label="Few" _high-label="Many"
+ low="4" high="100" default="32"/>
+
+ <number id="colorspeed" type="slider" arg="-colorspeed %"
+ _label="Color shift" _low-label="Slow" _high-label="Fast"
+ low="0" high="100" default="10"/>
+ </vgroup>
+ <vgroup>
+
+ <number id="minradius" type="slider" arg="-minradius %"
+ _label="Minimum radius" _low-label="Small" _high-label="Large"
+ low="0.01" high="0.5" default="0.05"/>
+
+ <number id="maxradius" type="slider" arg="-maxradius %"
+ _label="Maximum radius" _low-label="Small" _high-label="Large"
+ low="0.01" high="0.5" default="0.2"/>
+ </vgroup>
+ </hgroup>
+
+ <boolean id="showfps" _label="Show frame rate" arg-set="-fps"/>
+
+ <xscreensaver-updater />
+
+ <_description>
+Moving circles switch from visibility to invisibility at intersection points.
+
+Written by Geoffrey Irving; 2003.
+ </_description>
+</screensaver>
diff --git a/hacks/config/pinion.xml b/hacks/config/pinion.xml
new file mode 100644
index 0000000..edb4f0e
--- /dev/null
+++ b/hacks/config/pinion.xml
@@ -0,0 +1,49 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="pinion" _label="Pinion" gl="yes">
+
+ <command arg="-root"/>
+
+ <video href="https://www.youtube.com/watch?v=rHY8dR1urQk"/>
+
+ <hgroup>
+ <vgroup>
+ <number id="delay" type="slider" arg="-delay %"
+ _label="Frame rate" _low-label="Low" _high-label="High"
+ low="0" high="100000" default="15000"
+ convert="invert"/>
+
+ <number id="spin" type="slider" arg="-spin %"
+ _label="Rotation speed" _low-label="Slow" _high-label="Fast"
+ low="0.1" high="7.0" default="1.0"/>
+
+ <number id="scroll" type="slider" arg="-scroll %"
+ _label="Scrolling speed" _low-label="Slow" _high-label="Fast"
+ low="0.1" high="8.0" default="1.0"/>
+
+ </vgroup>
+ <vgroup>
+ <number id="size" type="slider" arg="-size %"
+ _label="Gear size" _low-label="Tiny" _high-label="Huge"
+ low="0.1" high="3.0" default="1.0"/>
+
+ <number id="max-rpm" type="slider" arg="-max-rpm %"
+ _label="Max RPM" _low-label="100" _high-label="2000"
+ low="100" high="2000" default="900"/>
+
+ <boolean id="wire" _label="Wireframe" arg-set="-wireframe"/>
+ <boolean id="showfps" _label="Show frame rate" arg-set="-fps"/>
+ </vgroup>
+ </hgroup>
+
+ <xscreensaver-updater />
+
+ <_description>
+A gear system marches across the screen.
+See also the "Gears" and "MoebiusGears" screen savers.
+
+https://en.wikipedia.org/wiki/Involute_gear
+
+Written by Jamie Zawinski; 2004.
+ </_description>
+</screensaver>
diff --git a/hacks/config/pipes.xml b/hacks/config/pipes.xml
new file mode 100644
index 0000000..ba2deff
--- /dev/null
+++ b/hacks/config/pipes.xml
@@ -0,0 +1,49 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="pipes" _label="Pipes" gl="yes">
+
+ <command arg="-root"/>
+
+ <video href="https://www.youtube.com/watch?v=UsUGENa7jvE"/>
+
+ <number id="delay" type="slider" arg="-delay %"
+ _label="Frame rate" _low-label="Low" _high-label="High"
+ low="0" high="100000" default="10000"
+ convert="invert"/>
+
+ <number id="cycles" type="slider" arg="-cycles %"
+ _label="Number of pipes" _low-label="One" _high-label="A hundred"
+ low="1" high="100" default="5"/>
+
+ <number id="size" type="slider" arg="-size %"
+ _label="Pipe length" _low-label="Short" _high-label="Long"
+ low="0" high="3000" default="500"/>
+
+ <number id="factory" type="slider" arg="-factory %"
+ _label="Gadgetry" _low-label="None" _high-label="Lots"
+ low="0" high="10" default="2"/>
+
+ <hgroup>
+ <boolean id="fisheye" _label="Fisheye lens" arg-unset="-no-fisheye"/>
+ <boolean id="tight" _label="Allow tight turns" arg-set="-tightturns"/>
+ <select id="style">
+ <option id="curves" _label="Curved pipes" arg-set="-count 3"/>
+ <option id="balls" _label="Ball joints" arg-set="-count 1"/>
+ <option id="fit" _label="Bolted fittings"/>
+ <option id="random" _label="Random style" arg-set="-count 0"/>
+ </select>
+ </hgroup>
+
+ <hgroup>
+ <boolean id="showfps" _label="Show frame rate" arg-set="-fps"/>
+ <boolean id="wire" _label="Wireframe" arg-set="-wireframe"/>
+ </hgroup>
+
+ <xscreensaver-updater />
+
+ <_description>
+A growing plumbing system, with bolts and valves.
+
+Written by Marcelo Vianna and Jamie Zawinski; 1997.
+ </_description>
+</screensaver>
diff --git a/hacks/config/polyhedra.xml b/hacks/config/polyhedra.xml
new file mode 100644
index 0000000..0780999
--- /dev/null
+++ b/hacks/config/polyhedra.xml
@@ -0,0 +1,201 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="polyhedra" _label="Polyhedra" gl="yes">
+
+ <command arg="-root"/>
+
+ <video href="https://www.youtube.com/watch?v=gYb-3EErLJE"/>
+
+ <number id="delay" type="slider" arg="-delay %"
+ _label="Frame rate" _low-label="Low" _high-label="High"
+ low="0" high="100000" default="30000"
+ convert="invert"/>
+
+ <number id="speed" type="slider" arg="-speed %"
+ _label="Speed" _low-label="Slow" _high-label="Fast"
+ low="0.01" high="5.0" default="1.0"/>
+
+ <number id="duration" type="slider" arg="-duration %"
+ _label="Duration" _low-label="1 second" _high-label="30 seconds"
+ low="1" high="30" default="12"/>
+
+ <select id="object">
+<option id="random" _label="Display random polyhedron"/>
+<option _label="Pentagonal prism" arg-set="-which pentagonal_prism"/>
+<option _label="Pentagonal dipyramid" arg-set="-which pentagonal_dipyramid"/>
+<option _label="Pentagonal antiprism" arg-set="-which pentagonal_antiprism"/>
+<option _label="Pentagonal deltohedron" arg-set="-which pentagonal_deltohedron"/>
+<option _label="Pentagrammic prism" arg-set="-which pentagrammic_prism"/>
+<option _label="Pentagrammic dipyramid" arg-set="-which pentagrammic_dipyramid"/>
+<option _label="Pentagrammic antiprism" arg-set="-which pentagrammic_antiprism"/>
+<option _label="Pentagrammic deltohedron" arg-set="-which pentagrammic_deltohedron"/>
+<option _label="Pentagrammic crossed antiprism" arg-set="-which pentagrammic_crossed_antiprism"/>
+<option _label="Pentagrammic concave deltohedron" arg-set="-which pentagrammic_concave_deltohedron"/>
+<option _label="Tetrahedron" arg-set="-which tetrahedron"/>
+<option _label="Truncated tetrahedron" arg-set="-which truncated_tetrahedron"/>
+<option _label="Triakistetrahedron" arg-set="-which triakistetrahedron"/>
+<option _label="Octahemioctahedron" arg-set="-which octahemioctahedron"/>
+<option _label="Octahemioctacron" arg-set="-which octahemioctacron"/>
+<option _label="Tetrahemihexahedron" arg-set="-which tetrahemihexahedron"/>
+<option _label="Tetrahemihexacron" arg-set="-which tetrahemihexacron"/>
+<option _label="Octahedron" arg-set="-which octahedron"/>
+<option _label="Cube" arg-set="-which cube"/>
+<option _label="Cuboctahedron" arg-set="-which cuboctahedron"/>
+<option _label="Rhombic dodecahedron" arg-set="-which rhombic_dodecahedron"/>
+<option _label="Truncated octahedron" arg-set="-which truncated_octahedron"/>
+<option _label="Tetrakishexahedron" arg-set="-which tetrakishexahedron"/>
+<option _label="Truncated cube" arg-set="-which truncated_cube"/>
+<option _label="Triakisoctahedron" arg-set="-which triakisoctahedron"/>
+<option _label="Rhombicuboctahedron" arg-set="-which rhombicuboctahedron"/>
+<option _label="Deltoidal icositetrahedron" arg-set="-which deltoidal_icositetrahedron"/>
+<option _label="Truncated cuboctahedron" arg-set="-which truncated_cuboctahedron"/>
+<option _label="Disdyakisdodecahedron" arg-set="-which disdyakisdodecahedron"/>
+<option _label="Snub cube" arg-set="-which snub_cube"/>
+<option _label="Pentagonal icositetrahedron" arg-set="-which pentagonal_icositetrahedron"/>
+<option _label="Small cubicuboctahedron" arg-set="-which small_cubicuboctahedron"/>
+<option _label="Small hexacronic icositetrahedron" arg-set="-which small_hexacronic_icositetrahedron"/>
+<option _label="Great cubicuboctahedron" arg-set="-which great_cubicuboctahedron"/>
+<option _label="Great hexacronic icositetrahedron" arg-set="-which great_hexacronic_icositetrahedron"/>
+<option _label="Cubohemioctahedron" arg-set="-which cubohemioctahedron"/>
+<option _label="Hexahemioctacron" arg-set="-which hexahemioctacron"/>
+<option _label="Cubitruncated cuboctahedron" arg-set="-which cubitruncated_cuboctahedron"/>
+<option _label="Tetradyakishexahedron" arg-set="-which tetradyakishexahedron"/>
+<option _label="Great rhombicuboctahedron" arg-set="-which great_rhombicuboctahedron"/>
+<option _label="Great deltoidal icositetrahedron" arg-set="-which great_deltoidal_icositetrahedron"/>
+<option _label="Small rhombihexahedron" arg-set="-which small_rhombihexahedron"/>
+<option _label="Small rhombihexacron" arg-set="-which small_rhombihexacron"/>
+<option _label="Stellated truncated hexahedron" arg-set="-which stellated_truncated_hexahedron"/>
+<option _label="Great triakisoctahedron" arg-set="-which great_triakisoctahedron"/>
+<option _label="Great truncated cuboctahedron" arg-set="-which great_truncated_cuboctahedron"/>
+<option _label="Great disdyakisdodecahedron" arg-set="-which great_disdyakisdodecahedron"/>
+<option _label="Great rhombihexahedron" arg-set="-which great_rhombihexahedron"/>
+<option _label="Great rhombihexacron" arg-set="-which great_rhombihexacron"/>
+<option _label="Icosahedron" arg-set="-which icosahedron"/>
+<option _label="Dodecahedron" arg-set="-which dodecahedron"/>
+<option _label="Icosidodecahedron" arg-set="-which icosidodecahedron"/>
+<option _label="Rhombic triacontahedron" arg-set="-which rhombic_triacontahedron"/>
+<option _label="Truncated icosahedron" arg-set="-which truncated_icosahedron"/>
+<option _label="Pentakisdodecahedron" arg-set="-which pentakisdodecahedron"/>
+<option _label="Truncated dodecahedron" arg-set="-which truncated_dodecahedron"/>
+<option _label="Triakisicosahedron" arg-set="-which triakisicosahedron"/>
+<option _label="Rhombicosidodecahedron" arg-set="-which rhombicosidodecahedron"/>
+<option _label="Deltoidal hexecontahedron" arg-set="-which deltoidal_hexecontahedron"/>
+<option _label="Truncated icosidodecahedron" arg-set="-which truncated_icosidodecahedron"/>
+<option _label="Disdyakistriacontahedron" arg-set="-which disdyakistriacontahedron"/>
+<option _label="Snub dodecahedron" arg-set="-which snub_dodecahedron"/>
+<option _label="Pentagonal hexecontahedron" arg-set="-which pentagonal_hexecontahedron"/>
+<option _label="Small ditrigonal icosidodecahedron" arg-set="-which small_ditrigonal_icosidodecahedron"/>
+<option _label="Small triambic icosahedron" arg-set="-which small_triambic_icosahedron"/>
+<option _label="Small icosicosidodecahedron" arg-set="-which small_icosicosidodecahedron"/>
+<option _label="Small icosacronic hexecontahedron" arg-set="-which small_icosacronic_hexecontahedron"/>
+<option _label="Small snub icosicosidodecahedron" arg-set="-which small_snub_icosicosidodecahedron"/>
+<option _label="Small hexagonal hexecontahedron" arg-set="-which small_hexagonal_hexecontahedron"/>
+<option _label="Small dodecicosidodecahedron" arg-set="-which small_dodecicosidodecahedron"/>
+<option _label="Small dodecacronic hexecontahedron" arg-set="-which small_dodecacronic_hexecontahedron"/>
+<option _label="Small stellated dodecahedron" arg-set="-which small_stellated_dodecahedron"/>
+<option _label="Great dodecahedron" arg-set="-which great_dodecahedron"/>
+<option _label="Great dodecadodecahedron" arg-set="-which great_dodecadodecahedron"/>
+<option _label="Medial rhombic triacontahedron" arg-set="-which medial_rhombic_triacontahedron"/>
+<option _label="Truncated great dodecahedron" arg-set="-which truncated_great_dodecahedron"/>
+<option _label="Small stellapentakisdodecahedron" arg-set="-which small_stellapentakisdodecahedron"/>
+<option _label="Rhombidodecadodecahedron" arg-set="-which rhombidodecadodecahedron"/>
+<option _label="Medial deltoidal hexecontahedron" arg-set="-which medial_deltoidal_hexecontahedron"/>
+<option _label="Small rhombidodecahedron" arg-set="-which small_rhombidodecahedron"/>
+<option _label="Small rhombidodecacron" arg-set="-which small_rhombidodecacron"/>
+<option _label="Snub dodecadodecahedron" arg-set="-which snub_dodecadodecahedron"/>
+<option _label="Medial pentagonal hexecontahedron" arg-set="-which medial_pentagonal_hexecontahedron"/>
+<option _label="Ditrigonal dodecadodecahedron" arg-set="-which ditrigonal_dodecadodecahedron"/>
+<option _label="Medial triambic icosahedron" arg-set="-which medial_triambic_icosahedron"/>
+<option _label="Great ditrigonal dodecicosidodecahedron" arg-set="-which great_ditrigonal_dodecicosidodecahedron"/>
+<option _label="Great ditrigonal dodecacronic hexecontahedron" arg-set="-which great_ditrigonal_dodecacronic_hexecontahedron"/>
+<option _label="Small ditrigonal dodecicosidodecahedron" arg-set="-which small_ditrigonal_dodecicosidodecahedron"/>
+<option _label="Small ditrigonal dodecacronic hexecontahedron" arg-set="-which small_ditrigonal_dodecacronic_hexecontahedron"/>
+<option _label="Icosidodecadodecahedron" arg-set="-which icosidodecadodecahedron"/>
+<option _label="Medial icosacronic hexecontahedron" arg-set="-which medial_icosacronic_hexecontahedron"/>
+<option _label="Icositruncated dodecadodecahedron" arg-set="-which icositruncated_dodecadodecahedron"/>
+<option _label="Tridyakisicosahedron" arg-set="-which tridyakisicosahedron"/>
+<option _label="Snub icosidodecadodecahedron" arg-set="-which snub_icosidodecadodecahedron"/>
+<option _label="Medial hexagonal hexecontahedron" arg-set="-which medial_hexagonal_hexecontahedron"/>
+<option _label="Great ditrigonal icosidodecahedron" arg-set="-which great_ditrigonal_icosidodecahedron"/>
+<option _label="Great triambic icosahedron" arg-set="-which great_triambic_icosahedron"/>
+<option _label="Great icosicosidodecahedron" arg-set="-which great_icosicosidodecahedron"/>
+<option _label="Great icosacronic hexecontahedron" arg-set="-which great_icosacronic_hexecontahedron"/>
+<option _label="Small icosihemidodecahedron" arg-set="-which small_icosihemidodecahedron"/>
+<option _label="Small icosihemidodecacron" arg-set="-which small_icosihemidodecacron"/>
+<option _label="Small dodecicosahedron" arg-set="-which small_dodecicosahedron"/>
+<option _label="Small dodecicosacron" arg-set="-which small_dodecicosacron"/>
+<option _label="Small dodecahemidodecahedron" arg-set="-which small_dodecahemidodecahedron"/>
+<option _label="Small dodecahemidodecacron" arg-set="-which small_dodecahemidodecacron"/>
+<option _label="Great stellated dodecahedron" arg-set="-which great_stellated_dodecahedron"/>
+<option _label="Great icosahedron" arg-set="-which great_icosahedron"/>
+<option _label="Great icosidodecahedron" arg-set="-which great_icosidodecahedron"/>
+<option _label="Great rhombic triacontahedron" arg-set="-which great_rhombic_triacontahedron"/>
+<option _label="Great truncated icosahedron" arg-set="-which great_truncated_icosahedron"/>
+<option _label="Great stellapentakisdodecahedron" arg-set="-which great_stellapentakisdodecahedron"/>
+<option _label="Rhombicosahedron" arg-set="-which rhombicosahedron"/>
+<option _label="Rhombicosacron" arg-set="-which rhombicosacron"/>
+<option _label="Great snub icosidodecahedron" arg-set="-which great_snub_icosidodecahedron"/>
+<option _label="Great pentagonal hexecontahedron" arg-set="-which great_pentagonal_hexecontahedron"/>
+<option _label="Small stellated truncated dodecahedron" arg-set="-which small_stellated_truncated_dodecahedron"/>
+<option _label="Great pentakisdodecahedron" arg-set="-which great_pentakisdodecahedron"/>
+<option _label="Truncated dodecadodecahedron" arg-set="-which truncated_dodecadodecahedron"/>
+<option _label="Medial disdyakistriacontahedron" arg-set="-which medial_disdyakistriacontahedron"/>
+<option _label="Inverted snub dodecadodecahedron" arg-set="-which inverted_snub_dodecadodecahedron"/>
+<option _label="Medial inverted pentagonal hexecontahedron" arg-set="-which medial_inverted_pentagonal_hexecontahedron"/>
+<option _label="Great dodecicosidodecahedron" arg-set="-which great_dodecicosidodecahedron"/>
+<option _label="Great dodecacronic hexecontahedron" arg-set="-which great_dodecacronic_hexecontahedron"/>
+<option _label="Small dodecahemicosahedron" arg-set="-which small_dodecahemicosahedron"/>
+<option _label="Small dodecahemicosacron" arg-set="-which small_dodecahemicosacron"/>
+<option _label="Great dodecicosahedron" arg-set="-which great_dodecicosahedron"/>
+<option _label="Great dodecicosacron" arg-set="-which great_dodecicosacron"/>
+<option _label="Great snub dodecicosidodecahedron" arg-set="-which great_snub_dodecicosidodecahedron"/>
+<option _label="Great hexagonal hexecontahedron" arg-set="-which great_hexagonal_hexecontahedron"/>
+<option _label="Great dodecahemicosahedron" arg-set="-which great_dodecahemicosahedron"/>
+<option _label="Great dodecahemicosacron" arg-set="-which great_dodecahemicosacron"/>
+<option _label="Great stellated truncated dodecahedron" arg-set="-which great_stellated_truncated_dodecahedron"/>
+<option _label="Great triakisicosahedron" arg-set="-which great_triakisicosahedron"/>
+<option _label="Great rhombicosidodecahedron" arg-set="-which great_rhombicosidodecahedron"/>
+<option _label="Great deltoidal hexecontahedron" arg-set="-which great_deltoidal_hexecontahedron"/>
+<option _label="Great truncated icosidodecahedron" arg-set="-which great_truncated_icosidodecahedron"/>
+<option _label="Great disdyakistriacontahedron" arg-set="-which great_disdyakistriacontahedron"/>
+<option _label="Great inverted snub icosidodecahedron" arg-set="-which great_inverted_snub_icosidodecahedron"/>
+<option _label="Great inverted pentagonal hexecontahedron" arg-set="-which great_inverted_pentagonal_hexecontahedron"/>
+<option _label="Great dodecahemidodecahedron" arg-set="-which great_dodecahemidodecahedron"/>
+<option _label="Great dodecahemidodecacron" arg-set="-which great_dodecahemidodecacron"/>
+<option _label="Great icosihemidodecahedron" arg-set="-which great_icosihemidodecahedron"/>
+<option _label="Great icosihemidodecacron" arg-set="-which great_icosihemidodecacron"/>
+<option _label="Small retrosnub icosicosidodecahedron" arg-set="-which small_retrosnub_icosicosidodecahedron"/>
+<option _label="Small hexagrammic hexecontahedron" arg-set="-which small_hexagrammic_hexecontahedron"/>
+<option _label="Great rhombidodecahedron" arg-set="-which great_rhombidodecahedron"/>
+<option _label="Great rhombidodecacron" arg-set="-which great_rhombidodecacron"/>
+<option _label="Great retrosnub icosidodecahedron" arg-set="-which great_retrosnub_icosidodecahedron"/>
+<option _label="Great pentagrammic hexecontahedron" arg-set="-which great_pentagrammic_hexecontahedron"/>
+<option _label="Great dirhombicosidodecahedron" arg-set="-which great_dirhombicosidodecahedron"/>
+<option _label="Great dirhombicosidodecacron" arg-set="-which great_dirhombicosidodecacron"/>
+<option _label="Utah teapotahedron" arg-set="-which utah_teapotahedron"/>
+ </select>
+
+ <hgroup>
+ <boolean id="spin" _label="Spin" arg-unset="-no-spin"/>
+ <boolean id="wander" _label="Wander" arg-unset="-no-wander"/>
+ <boolean id="wire" _label="Wireframe" arg-set="-wireframe"/>
+ </hgroup>
+ <hgroup>
+ <boolean id="titles" _label="Show description" arg-unset="-no-titles"/>
+ <boolean id="showfps" _label="Show frame rate" arg-set="-fps"/>
+ </hgroup>
+
+ <xscreensaver-updater />
+
+ <_description>
+The 75 uniform polyhedra and their duals, plus 5 prisms
+and antiprisms, and some information about each.
+
+https://en.wikipedia.org/wiki/Uniform_polyhedra
+https://en.wikipedia.org/wiki/Stellation
+https://en.wikipedia.org/wiki/Dual_polyhedron
+https://en.wikipedia.org/wiki/Antiprism
+
+Written by Dr. Zvi Har'El and Jamie Zawinski; 2004.
+ </_description>
+</screensaver>
diff --git a/hacks/config/polyominoes.xml b/hacks/config/polyominoes.xml
new file mode 100644
index 0000000..74b05f2
--- /dev/null
+++ b/hacks/config/polyominoes.xml
@@ -0,0 +1,36 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="polyominoes" _label="Polyominoes">
+
+ <command arg="-root"/>
+
+ <video href="https://www.youtube.com/watch?v=6j2H2gL8cws"/>
+
+ <boolean id="identical" _label="Identical pieces" arg-set="-identical"/>
+
+ <number id="delay" type="slider" arg="-delay %"
+ _label="Frame rate" _low-label="Low" _high-label="High"
+ low="0" high="100000" default="10000"
+ convert="invert"/>
+
+ <number id="cycles" type="slider" arg="-cycles %"
+ _label="Duration" _low-label="Short" _high-label="Long"
+ low="500" high="5000" default="2000"/>
+
+ <number id="ncolors" type="slider" arg="-ncolors %"
+ _label="Number of colors" _low-label="Two" _high-label="Many"
+ low="2" high="255" default="64"/>
+
+ <boolean id="showfps" _label="Show frame rate" arg-set="-fps"/>
+
+ <xscreensaver-updater />
+
+ <_description>
+Repeatedly attempts to completely fill a rectangle with
+irregularly-shaped puzzle pieces.
+
+https://en.wikipedia.org/wiki/Polyomino
+
+Written by Stephen Montgomery-Smith; 2002.
+ </_description>
+</screensaver>
diff --git a/hacks/config/polytopes.xml b/hacks/config/polytopes.xml
new file mode 100644
index 0000000..1e6f1f3
--- /dev/null
+++ b/hacks/config/polytopes.xml
@@ -0,0 +1,112 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="polytopes" _label="Polytopes" gl="yes">
+
+ <command arg="-root"/>
+
+ <video href="https://www.youtube.com/watch?v=MKZQ5Q7QINM"/>
+
+ <hgroup>
+ <vgroup>
+ <select id="display-mode">
+ <option id="wire" _label="Wireframe mesh"
+ arg-set="-mode wireframe"/>
+ <option id="surface" _label="Solid surface"
+ arg-set="-mode surface"/>
+ <option id="transparent" _label="Transparent surface"/>
+ </select>
+
+ <select id="polytope">
+ <option id="random" _label="Random object"/>
+ <option id="cell-5" _label="5-cell (hyper-tetrahedron)"
+ arg-set="-polytope 5-cell"/>
+ <option id="cell-8" _label="8-cell (hypercube / tesseract)"
+ arg-set="-polytope 8-cell"/>
+ <option id="cell-16" _label="16-cell (hyper-octahedron)"
+ arg-set="-polytope 16-cell"/>
+ <option id="cell-24" _label="24-cell"
+ arg-set="-polytope 24-cell"/>
+ <option id="cell-120" _label="120-cell"
+ arg-set="-polytope 120-cell"/>
+ <option id="cell-600" _label="600-cell"
+ arg-set="-polytope 600-cell"/>
+ </select>
+
+ <select id="colors">
+ <option id="single" _label="Single color" arg-set="-single-color"/>
+ <option id="depth" _label="Colors By 4D Depth"/>
+ </select>
+
+ <select id="projection3d">
+ <option id="perspective-3d" _label="Perspective 3D"/>
+ <option id="orthographic-3d" _label="Orthographic 3D"
+ arg-set="-orthographic-3d"/>
+ </select>
+
+ <select id="projection4d">
+ <option id="perspective-4d" _label="Perspective 4D"/>
+ <option id="orthographic-4d" _label="Orthographic 4D"
+ arg-set="-orthographic-4d"/>
+ </select>
+
+ <boolean id="showfps" _label="Show frame rate" arg-set="-fps"/>
+
+ </vgroup>
+
+ <vgroup>
+ <number id="speed-wx" type="slider" arg="-speed-wx %"
+ _label="WX rotation speed"
+ _low-label="-4.0" _high-label="4.0"
+ low="-4.0" high="4.0" default="1.1"/>
+
+ <number id="speed-wy" type="slider" arg="-speed-wy %"
+ _label="WY rotation speed"
+ _low-label="-4.0" _high-label="4.0"
+ low="-4.0" high="4.0" default="1.3"/>
+
+ <number id="speed-wz" type="slider" arg="-speed-wz %"
+ _label="WZ rotation speed"
+ _low-label="-4.0" _high-label="4.0"
+ low="-4.0" high="4.0" default="1.5"/>
+
+ <number id="delay" type="slider" arg="-delay %"
+ _label="Frame rate" _low-label="Low" _high-label="High"
+ low="0" high="100000" default="25000"
+ convert="invert"/>
+ </vgroup>
+
+ <vgroup>
+ <number id="speed-xy" type="slider" arg="-speed-xy %"
+ _label="XY rotation speed"
+ _low-label="-4.0" _high-label="4.0"
+ low="-4.0" high="4.0" default="1.7"/>
+
+ <number id="speed-xz" type="slider" arg="-speed-xz %"
+ _label="XZ rotation speed"
+ _low-label="-4.0" _high-label="4.0"
+ low="-4.0" high="4.0" default="1.9"/>
+
+ <number id="speed-yz" type="slider" arg="-speed-yz %"
+ _label="YZ rotation speed"
+ _low-label="-4.0" _high-label="4.0"
+ low="-4.0" high="4.0" default="2.1"/>
+ </vgroup>
+ </hgroup>
+
+ <xscreensaver-updater />
+
+ <_description>
+The six regular 4D polytopes rotating in 4D.
+
+Inspired by H.S.M Coxeter's book "Regular Polytopes", 3rd Edition,
+Dover Publications, Inc., 1973, and Thomas Banchoff's book "Beyond the
+Third Dimension: Geometry, Computer Graphics, and Higher Dimensions",
+Scientific American Library, 1990.
+
+https://en.wikipedia.org/wiki/Hypercube
+https://en.wikipedia.org/wiki/Tesseract
+https://en.wikipedia.org/wiki/Regular_polytope
+
+Written by Carsten Steger; 2003.
+ </_description>
+</screensaver>
diff --git a/hacks/config/pong.xml b/hacks/config/pong.xml
new file mode 100644
index 0000000..6ae353a
--- /dev/null
+++ b/hacks/config/pong.xml
@@ -0,0 +1,46 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="pong" _label="Pong">
+
+ <command arg="-root"/>
+
+ <video href="https://www.youtube.com/watch?v=2jPmisDwwi0"/>
+
+ <hgroup>
+ <vgroup>
+ <number id="speed" type="slider" arg="-speed %"
+ _label="Game speed" _low-label="Slow" _high-label="Fast"
+ low="1" high="20" default="6"/>
+
+ <number id="noise" type="slider" arg="-noise %"
+ _label="Noise" _low-label="Crisp" _high-label="Noisy"
+ low="0.00" high="5.00" default="0.04"/>
+
+ <hgroup>
+ <boolean id="clock" _label="Clock mode" arg-set="-clock"/>
+ <boolean id="showfps" _label="Show frame rate" arg-set="-fps"/>
+ </hgroup>
+ </vgroup>
+
+ <vgroup>
+ <number id="tvbrightness" type="slider" arg="-tv-brightness %"
+ _label="Brightness Knob" _low-label="Low" _high-label="High"
+ low="-75.0" high="100.0" default="3.0"/>
+ <number id="tvcontrast" type="slider" arg="-tv-contrast %"
+ _label="Contrast Knob" _low-label="Low" _high-label="High"
+ low="0" high="500" default="150"/>
+ </vgroup>
+ </hgroup>
+
+ <xscreensaver-updater />
+
+ <_description>
+The 1971 Pong home video game, including artifacts of an old color TV set.
+
+In clock mode, the score keeps track of the current time.
+
+https://en.wikipedia.org/wiki/Pong
+
+Written by Jeremy English, Trevor Blackwell and Jamie Zawinski; 2003.
+ </_description>
+</screensaver>
diff --git a/hacks/config/popsquares.xml b/hacks/config/popsquares.xml
new file mode 100644
index 0000000..8bc519a
--- /dev/null
+++ b/hacks/config/popsquares.xml
@@ -0,0 +1,56 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="popsquares" _label="PopSquares">
+
+ <command arg="-root"/>
+
+ <video href="https://www.youtube.com/watch?v=99Aweq7Nypc"/>
+
+ <number id="delay" type="slider" arg="-delay %"
+ _label="Frame rate" _low-label="Low" _high-label="High"
+ low="0" high="100000" default="25000"
+ convert="invert"/>
+
+ <number id="subdivision" type="spinbutton" arg="-subdivision %"
+ _label="Subdivision"
+ low="1" high="64" default="5"/>
+
+ <number id="border" type="spinbutton" arg="-border %"
+ _label="Border"
+ low="0" high="5" default="1"/>
+
+ <number id="ncolors" type="spinbutton" arg="-ncolors %"
+ _label="Number of colors" low="1" high="512" default="128"/>
+
+ <hgroup>
+ <select id="bg">
+ <option id="lred" _label="Light red" arg-set="-bg #FF0000"/>
+ <option id="lyellow" _label="Light yellow" arg-set="-bg #FFFF00"/>
+ <option id="lgreen" _label="Light green" arg-set="-bg #00FF00"/>
+ <option id="lcyan" _label="Light cyan" arg-set="-bg #00FFFF"/>
+ <option id="lblue" _label="Light blue"/>
+ <option id="lmagenta" _label="Light magenta" arg-set="-bg #FF00FF"/>
+ </select>
+
+ <select id="fg">
+ <option id="dred" _label="Dark red" arg-set="-fg #8C0000"/>
+ <option id="dyellow" _label="Dark yellow" arg-set="-fg #8C8C00"/>
+ <option id="dgreen" _label="Dark green" arg-set="-fg #008C00"/>
+ <option id="dcyan" _label="Dark cyan" arg-set="-fg #008C8C"/>
+ <option id="dblue" _label="Dark blue"/>
+ <option id="dmagenta" _label="Dark magenta" arg-set="-fg #8C008C"/>
+ </select>
+ </hgroup>
+
+ <boolean id="twitch" _label="Twitch" arg-set="-twitch"/>
+
+ <boolean id="showfps" _label="Show frame rate" arg-set="-fps"/>
+
+ <xscreensaver-updater />
+
+ <_description>
+A pop-art-ish looking grid of pulsing colors.
+
+Written by Levi Burton; 2003.
+ </_description>
+</screensaver>
diff --git a/hacks/config/projectiveplane.xml b/hacks/config/projectiveplane.xml
new file mode 100644
index 0000000..fa9dfb8
--- /dev/null
+++ b/hacks/config/projectiveplane.xml
@@ -0,0 +1,153 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="projectiveplane" _label="ProjectivePlane" gl="yes">
+
+ <command arg="-root"/>
+
+ <video href="https://www.youtube.com/watch?v=Zg6ONPUTwUQ"/>
+
+ <hgroup>
+ <select id="display-mode">
+ <option id="random" _label="Random surface"/>
+ <option id="wire" _label="Wireframe mesh" arg-set="-mode wireframe"/>
+ <option id="surface" _label="Solid surface" arg-set="-mode surface"/>
+ <option id="transparent" _label="Transparent surface" arg-set="-mode transparent"/>
+ </select>
+
+ <select id="appearance">
+ <option id="random" _label="Random pattern"/>
+ <option id="solid" _label="Solid object" arg-set="-appearance solid"/>
+ <option id="bands" _label="Distance bands" arg-set="-appearance distance-bands"/>
+ <option id="bands" _label="Direction bands" arg-set="-appearance direction-bands"/>
+ </select>
+
+ <select id="colors">
+ <option id="random" _label="Random coloration"/>
+ <option id="twosided" _label="Two-sided" arg-set="-colors two-sided"/>
+ <option id="rainbow" _label="Distance colors" arg-set="-colors distance"/>
+ <option id="rainbow" _label="Direction colors" arg-set="-colors direction"/>
+ <option id="depth" _label="4d depth colors" arg-set="-colors depth"/>
+ </select>
+
+ <select id="projection3d">
+ <option id="random" _label="Random 3D"/>
+ <option id="perspective-3d" _label="Perspective 3D" arg-set="-projection-3d perspective"/>
+ <option id="orthographic-3d" _label="Orthographic 3D" arg-set="-projection-3d orthographic"/>
+ </select>
+
+ <select id="projection4d">
+ <option id="random" _label="Random 4D"/>
+ <option id="perspective-4d" _label="Perspective 4D" arg-set="-projection-4d perspective"/>
+ <option id="orthographic-4d" _label="Orthographic 4D" arg-set="-projection-4d orthographic"/>
+ </select>
+ </hgroup>
+
+ <hgroup>
+ <vgroup>
+ <hgroup>
+ <number id="speed-wx" type="slider" arg="-speed-wx %"
+ _label="WX speed"
+ _low-label="-4" _high-label="4"
+ low="-4.0" high="4.0" default="1.1"/>
+ </hgroup>
+
+ <hgroup>
+ <number id="speed-wy" type="slider" arg="-speed-wy %"
+ _label="WY speed"
+ _low-label="-4" _high-label="4"
+ low="-4.0" high="4.0" default="1.3"/>
+ </hgroup>
+
+ <hgroup>
+ <number id="speed-wz" type="slider" arg="-speed-wz %"
+ _label="WZ speed"
+ _low-label="-4" _high-label="4"
+ low="-4.0" high="4.0" default="1.5"/>
+ </hgroup>
+ </vgroup>
+
+ <vgroup>
+ <hgroup>
+ <number id="speed-xy" type="slider" arg="-speed-xy %"
+ _label="XY speed"
+ _low-label="-4" _high-label="4"
+ low="-4.0" high="4.0" default="1.7"/>
+ </hgroup>
+
+ <hgroup>
+ <number id="speed-xz" type="slider" arg="-speed-xz %"
+ _label="XZ speed"
+ _low-label="-4" _high-label="4"
+ low="-4.0" high="4.0" default="1.9"/>
+ </hgroup>
+
+ <hgroup>
+ <number id="speed-yz" type="slider" arg="-speed-yz %"
+ _label="YZ speed"
+ _low-label="-4" _high-label="4"
+ low="-4.0" high="4.0" default="2.1"/>
+ </hgroup>
+ </vgroup>
+
+ <vgroup>
+ <hgroup>
+ <number id="walk-direction" type="slider" arg="-walk-direction %"
+ _label="Walk dir "
+ _low-label="-180" _high-label="180"
+ low="-180.0" high="180.0" default="83.0"/>
+ </hgroup>
+
+ <hgroup>
+ <number id="walk-speed" type="slider" arg="-walk-speed %"
+ _label="Walk speed"
+ _low-label="1" _high-label="100"
+ low="1.0" high="100.0" default="20.0"/>
+ </hgroup>
+
+ <hgroup>
+ <number id="delay" type="slider" arg="-delay %"
+ _label="Frame rate" _low-label="Low" _high-label="High"
+ low="0" high="100000" default="10000"
+ convert="invert"/>
+ </hgroup>
+ </vgroup>
+ </hgroup>
+
+ <hgroup>
+ <select id="view-mode">
+ <option id="walk" _label="Random motion"/>
+ <option id="walk" _label="Walk" arg-set="-view-mode walk"/>
+ <option id="turn" _label="Turn" arg-set="-view-mode turn"/>
+ <option id="walk-turn" _label="Walk and turn" arg-set="-view-mode walk-turn"/>
+ </select>
+
+ <boolean id="orientation-marks" _label="Show orientation marks"
+ arg-set="-orientation-marks"/>
+
+ <boolean id="showfps" _label="Show frame rate" arg-set="-fps"/>
+
+ <xscreensaver-updater />
+ </hgroup>
+
+
+
+ <_description>
+A 4D embedding of the real projective plane.
+
+You can walk on the surface of the real projective plane or rotate it
+in 4D or walk on it while it rotates in 4D. Inspired by Thomas
+Banchoff's book "Beyond the Third Dimension: Geometry, Computer
+Graphics, and Higher Dimensions", Scientific American Library, 1990.
+
+https://en.wikipedia.org/wiki/Real_projective_plane
+https://en.wikipedia.org/wiki/Roman_surface
+https://en.wikipedia.org/wiki/Cross_cap
+https://en.wikipedia.org/wiki/Moebius_strip
+http://mathworld.wolfram.com/RealProjectivePlane.html
+http://mathworld.wolfram.com/RomanSurface.html
+http://mathworld.wolfram.com/Cross-Cap.html
+http://mathworld.wolfram.com/MoebiusStrip.html
+
+Written by Carsten Steger; 2014.
+ </_description>
+</screensaver>
diff --git a/hacks/config/providence.xml b/hacks/config/providence.xml
new file mode 100644
index 0000000..0156dc0
--- /dev/null
+++ b/hacks/config/providence.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="providence" _label="Providence" gl="yes">
+
+ <command arg="-root"/>
+
+ <video href="https://www.youtube.com/watch?v=bnwRPPMopWc"/>
+
+ <number id="speed" type="slider" arg="-delay %"
+ _label="Frame rate" _low-label="Low" _high-label="High"
+ low="0" high="100000" default="20000"
+ convert="invert"/>
+
+ <boolean id="eye" _label="Draw eye" arg-unset="-no-eye"/>
+
+ <boolean id="wire" _label="Wireframe" arg-set="-wireframe"/>
+ <boolean id="showfps" _label="Show frame rate" arg-set="-fps"/>
+
+ <xscreensaver-updater />
+
+ <_description>
+"A pyramid unfinished. In the zenith an eye in a triangle, surrounded
+by a glory, proper."
+
+https://en.wikipedia.org/wiki/Eye_of_Providence
+
+Written by Blair Tennessy; 2004.
+ </_description>
+</screensaver>
diff --git a/hacks/config/pulsar.xml b/hacks/config/pulsar.xml
new file mode 100644
index 0000000..64be3bf
--- /dev/null
+++ b/hacks/config/pulsar.xml
@@ -0,0 +1,42 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="pulsar" _label="Pulsar" gl="yes">
+
+ <command arg="-root"/>
+
+ <video href="https://www.youtube.com/watch?v=pR0lpvOAbUo"/>
+
+ <number id="delay" type="slider" arg="-delay %"
+ _label="Frame rate" _low-label="Low" _high-label="High"
+ low="0" high="100000" default="10000"
+ convert="invert"/>
+
+ <number id="quads" type="spinbutton" arg="-quads %"
+ _label="Quad count" low="1" high="50" default="5"/>
+
+ <hgroup>
+ <vgroup>
+ <boolean id="light" _label="Enable lighting" arg-set="-light"/>
+ <boolean id="fog" _label="Enable fog" arg-set="-fog"/>
+ <boolean id="texture" _label="Enable texturing" arg-set="-texture"/>
+ <boolean id="mipmap" _label="Enable texture mipmaps" arg-set="-mipmap"/>
+ </vgroup>
+ <vgroup>
+ <boolean id="no-blend" _label="Enable blending" arg-unset="-no-blend"/>
+ <boolean id="antialias" _label="Anti-alias lines" arg-set="-antialias"/>
+ <boolean id="texture_quality" _label="Enable texture filtering"
+ arg-set="-texture_quality"/>
+ <boolean id="do_depth" _label="Enable depth buffer" arg-set="-do_depth"/>
+ </vgroup>
+ </hgroup>
+
+ <boolean id="showfps" _label="Show frame rate" arg-set="-fps"/>
+
+ <xscreensaver-updater />
+
+ <_description>
+Intersecting planes, with alpha blending, fog, textures, and mipmaps.
+
+Written by David Konerding; 1999.
+ </_description>
+</screensaver>
diff --git a/hacks/config/pyro.xml b/hacks/config/pyro.xml
new file mode 100644
index 0000000..ca81c3d
--- /dev/null
+++ b/hacks/config/pyro.xml
@@ -0,0 +1,37 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="pyro" _label="Pyro">
+
+ <command arg="-root"/>
+
+ <video href="https://www.youtube.com/watch?v=JJqVfnMstuw"/>
+
+ <number id="delay" type="slider" arg="-delay %"
+ _label="Frame rate" _low-label="Slow" _high-label="Fast"
+ low="0" high="100000" default="10000"
+ convert="invert"/>
+
+ <number id="count" type="slider" arg="-count %"
+ _label="Particle density" _low-label="Sparse" _high-label="Dense"
+ low="10" high="2000" default="600"/>
+
+ <number id="launch" type="slider" arg="-frequency %"
+ _label="Launch frequency" _low-label="Seldom" _high-label="Often"
+ low="1" high="100" default="30"
+ convert="invert"/>
+
+ <number id="scatter" type="slider" arg="-scatter %"
+ _label="Explosive yield" _low-label="Low" _high-label="High"
+ low="1" high="400" default="100"/>
+
+ <boolean id="showfps" _label="Show frame rate" arg-set="-fps"/>
+
+ <xscreensaver-updater />
+
+ <_description>
+Exploding fireworks. See also the "Fireworkx", "Eruption", and
+"XFlame" screen savers.
+
+Written by Jamie Zawinski; 1992.
+ </_description>
+</screensaver>
diff --git a/hacks/config/qix.xml b/hacks/config/qix.xml
new file mode 100644
index 0000000..a2a4ea2
--- /dev/null
+++ b/hacks/config/qix.xml
@@ -0,0 +1,74 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="qix" _label="Qix">
+
+ <command arg="-root"/>
+
+ <video href="https://www.youtube.com/watch?v=GPqDtJ0vF8U"/>
+
+ <hgroup>
+ <vgroup>
+ <number id="delay" type="slider" arg="-delay %"
+ _label="Frame rate" _low-label="Low" _high-label="High"
+ low="0" high="100000" default="10000"
+ convert="invert"/>
+
+ <number id="segments" type="slider" arg="-segments %"
+ _label="Segments" _low-label="Few" _high-label="Many"
+ low="10" high="500" default="250"/>
+
+ <number id="spread" type="slider" arg="-spread %"
+ _label="Density" _low-label="Sparse" _high-label="Dense"
+ low="1" high="50" default="8"
+ convert="invert"/>
+
+ <number id="color_contrast" type="slider" arg="-color-shift %"
+ _label="Color contrast" _low-label="Low" _high-label="High"
+ low="0" high="25" default="3"/>
+ </vgroup>
+ <vgroup>
+ <select id="fill">
+ <option id="lines" _label="Line segments" arg-set="-hollow"/>
+ <option id="solid" _label="Solid objects"/>
+ </select>
+
+ <select id="motion">
+ <option id="linear" _label="Linear motion"/>
+ <option id="random" _label="Random motion" arg-set="-random"/>
+ </select>
+
+ <select id="color-mode">
+ <option id="additive" _label="Additive colors"/>
+ <option id="subtractive" _label="Subtractive colors"
+ arg-set="-subtractive"/>
+ </select>
+
+ <number id="count" type="spinbutton" arg="-count %"
+ _label="Count" low="0" high="20" default="4"/>
+ <number id="size" type="spinbutton" arg="-size %"
+ _label="Max size" low="200" high="1000" default="200"/>
+ <number id="poly" type="spinbutton" arg="-poly %"
+ _label="Poly corners" low="2" high="100" default="2"/>
+ </vgroup>
+ </hgroup>
+
+ <hgroup>
+ <boolean id="transparent" _label="Transparent" arg-unset="-non-transparent"/>
+ <boolean id="xor" _label="XOR" arg-set="-xor"/>
+ <boolean id="gravity" _label="Gravity" arg-set="-gravity"/>
+ <boolean id="showfps" _label="Show frame rate" arg-set="-fps"/>
+ </hgroup>
+
+ <xscreensaver-updater />
+
+ <_description>
+Bounces a series of line segments around the screen, and uses
+variations on this basic motion pattern to produce all sorts of
+different presentations: line segments, filled polygons, and
+overlapping translucent areas.
+
+https://en.wikipedia.org/wiki/Qix
+
+Written by Jamie Zawinski; 1992.
+ </_description>
+</screensaver>
diff --git a/hacks/config/quasicrystal.xml b/hacks/config/quasicrystal.xml
new file mode 100644
index 0000000..0823c89
--- /dev/null
+++ b/hacks/config/quasicrystal.xml
@@ -0,0 +1,56 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="quasicrystal" _label="QuasiCrystal" gl="yes">
+
+ <command arg="-root"/>
+
+ <video href="https://www.youtube.com/watch?v=JsGf65d5TfM"/>
+
+ <hgroup>
+ <vgroup>
+ <number id="delay" type="slider" arg="-delay %"
+ _label="Frame rate" _low-label="Low" _high-label="High"
+ low="0" high="100000" default="30000"
+ convert="invert"/>
+
+ <number id="speed" type="slider" arg="-speed %"
+ _label="Speed" _low-label="Slow" _high-label="Fast"
+ low="0.1" high="5.0" default="1.0"/>
+ </vgroup>
+ <vgroup>
+ <number id="count" type="slider" arg="-count %"
+ _label="Density" _low-label="Low" _high-label="High"
+ low="7" high="37" default="17"
+ convert="invert"/>
+
+ <number id="contrast" type="slider" arg="-contrast %"
+ _label="Contrast" _low-label="Low" _high-label="High"
+ low="0" high="100" default="30"/>
+ </vgroup>
+ </hgroup>
+
+ <hgroup>
+ <boolean id="wander" _label="Displacement" arg-unset="-no-wander"/>
+ <boolean id="spin" _label="Rotation" arg-unset="-no-spin"/>
+ <boolean id="symmetric" _label="Symmetry" arg-unset="-no-symmetry"/>
+ <boolean id="showfps" _label="Show frame rate" arg-set="-fps"/>
+ </hgroup>
+
+ <xscreensaver-updater />
+
+ <_description>
+A quasicrystal is a structure that is ordered but aperiodic.
+Two-dimensional quasicrystals can be generated by adding a set of
+planes where x is the sine of y. Different complex aperiodic plane
+tilings are produced depending on the period, position, and rotation
+of the component planes, and whether the rotation of the planes is
+evenly distributed around the circle (the "symmetry" option, above)
+or random.
+
+See also the "RD-Bomb", "CWaves" and "Penrose" screen savers.
+
+https://en.wikipedia.org/wiki/Quasicrystal
+
+Written by Jamie Zawinski; 2013.
+ </_description>
+</screensaver>
diff --git a/hacks/config/queens.xml b/hacks/config/queens.xml
new file mode 100644
index 0000000..aa949fd
--- /dev/null
+++ b/hacks/config/queens.xml
@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="queens" _label="Queens" gl="yes">
+
+ <command arg="-root"/>
+
+ <video href="https://www.youtube.com/watch?v=Ssy0ldFDeAs"/>
+
+ <number id="delay" type="slider" arg="-delay %"
+ _label="Frame rate" _low-label="Low" _high-label="High"
+ low="0" high="100000" default="20000"
+ convert="invert"/>
+
+ <hgroup>
+ <boolean id="wire" _label="Wireframe" arg-set="-wireframe"/>
+ <boolean id="showfps" _label="Show frame rate" arg-set="-fps"/>
+ </hgroup>
+
+ <xscreensaver-updater />
+
+ <_description>
+The N-Queens problem: how to place N queens on an NxN chessboard
+such that no queen can attack a sister?
+
+See also the "Endgame" screen saver.
+
+https://en.wikipedia.org/wiki/Eight_queens_puzzle
+
+Written by Blair Tennessy and Jamie Zawinski; 2002.
+ </_description>
+</screensaver>
diff --git a/hacks/config/raverhoop.xml b/hacks/config/raverhoop.xml
new file mode 100644
index 0000000..4932255
--- /dev/null
+++ b/hacks/config/raverhoop.xml
@@ -0,0 +1,54 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="raverhoop" _label="RaverHoop" gl="yes">
+
+ <command arg="-root"/>
+
+ <video href="https://www.youtube.com/watch?v=0k2sP_Imb80" />
+
+ <hgroup>
+ <vgroup>
+ <number id="delay" type="slider" arg="-delay %"
+ _label="Frame rate" _low-label="Low" _high-label="High"
+ low="0" high="100000" default="20000"
+ convert="invert"/>
+
+ <number id="ncolors" type="slider" arg="-ncolors %"
+ _label="Colors" _low-label="1" _high-label="64"
+ low="1" high="64" default="12"/>
+
+ <number id="lights" type="slider" arg="-lights %"
+ _label="Lights" _low-label="Sparse" _high-label="Dense"
+ low="3" high="512" default="200"/>
+
+ </vgroup>
+ <vgroup>
+
+ <number id="speed" type="slider" arg="-speed %"
+ _label="Speed, motion" _low-label="Slow" _high-label="Fast"
+ low="0.1" high="5.0" default="1.0"/>
+
+ <number id="light-speed" type="slider" arg="-light-speed %"
+ _label="Speed, lights" _low-label="Slow" _high-label="Fast"
+ low="0.1" high="5.0" default="1.0"/>
+
+ <number id="sustain" type="slider" arg="-sustain %"
+ _label="Sustain" _low-label="Brief" _high-label="Long"
+ low="0.1" high="5.0" default="1.0"/>
+ </vgroup>
+ </hgroup>
+
+ <hgroup>
+ <boolean id="wander" _label="Wander" arg-set="-wander"/>
+ <boolean id="spin" _label="Spin" arg-set="-spin"/>
+ <boolean id="showfps" _label="Show frame rate" arg-set="-fps"/>
+ </hgroup>
+
+ <xscreensaver-updater />
+
+ <_description>
+Simulates an LED hula hoop in a dark room. Oontz oontz oontz.
+
+Written by Jamie Zawinski; 2016.
+ </_description>
+</screensaver>
diff --git a/hacks/config/razzledazzle.xml b/hacks/config/razzledazzle.xml
new file mode 100644
index 0000000..1af07df
--- /dev/null
+++ b/hacks/config/razzledazzle.xml
@@ -0,0 +1,66 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="razzledazzle" _label="RazzleDazzle" gl="yes">
+
+ <command arg="-root"/>
+
+ <video href="https://www.youtube.com/watch?v=tV_70VxJFfs" />
+
+ <hgroup>
+ <vgroup>
+ <number id="delay" type="slider" arg="-delay %"
+ _label="Frame rate" _low-label="Low" _high-label="High"
+ low="0" high="100000" default="30000"
+ convert="invert"/>
+
+ <number id="speed" type="slider" arg="-speed %"
+ _label="Speed" _low-label="Slow" _high-label="Fast"
+ low="0.1" high="10" default="1.0"/>
+
+ <number id="ncolors" type="slider" arg="-ncolors %"
+ _label="Colors" _low-label="Mono" _high-label="Many"
+ low="2" high="200" default="2"/>
+
+ </vgroup>
+ <vgroup>
+
+ <number id="density" type="slider" arg="-density %"
+ _label="Density" _low-label="Sparse" _high-label="Dense"
+ low="1.0" high="10.0" default="5.0"/>
+
+ <number id="thickness" type="slider" arg="-thickness %"
+ _label="Lines" _low-label="Thick" _high-label="Thin"
+ low="0.05" high="1.0" default="0.1"/>
+
+ <select id="object">
+ <option _label="Ship Outlines" arg-set="-mode ships"/>
+ <option _label="Flat Pattern" arg-set="-mode flat"/>
+ <option id="random" _label="Ships or flat pattern"/>
+ </select>
+
+ <boolean id="showfps" _label="Show frame rate" arg-set="-fps"/>
+
+ </vgroup>
+ </hgroup>
+
+ <xscreensaver-updater />
+
+ <_description>
+Generates an infinitely-scrolling sequence of dazzle camouflage patterns.
+
+Dazzle Ships, in addition to being the best album by Orchestral
+Manoeuvres in the Dark, were military vessels during World War I and
+early in World War II that were painted not to conceal but to confuse:
+with these Cubist overlapping stripes, it was very hard to estimate
+their size, range and heading. This was a big deal before the
+invention of Radar.
+
+https://en.wikipedia.org/wiki/Dazzle_camouflage
+https://en.wikipedia.org/wiki/Cubism
+https://en.wikipedia.org/wiki/Dazzle_Ships_%28album%29
+https://en.wikipedia.org/wiki/Acoustic_mirror
+https://en.wikipedia.org/wiki/Radar
+
+Written by Jamie Zawinski; 2018.
+ </_description>
+</screensaver>
diff --git a/hacks/config/rd-bomb.xml b/hacks/config/rd-bomb.xml
new file mode 100644
index 0000000..c8a656d
--- /dev/null
+++ b/hacks/config/rd-bomb.xml
@@ -0,0 +1,67 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="rd-bomb" _label="RDbomb">
+
+ <command arg="-root"/>
+
+ <video href="https://www.youtube.com/watch?v=xiooDyrZSsY"/>
+
+ <hgroup>
+ <vgroup>
+ <number id="delay" type="slider" arg="-delay %"
+ _label="Frame rate" _low-label="Slow" _high-label="Fast"
+ low="0" high="250000" default="30000"
+ convert="invert"/>
+
+ <number id="speed" type="slider" arg="-speed %"
+ _label="Wander speed" _low-label="Slow" _high-label="Fast"
+ low="0.0" high="10.0" default="0.0"/>
+
+ <number id="size" type="slider" arg="-size %"
+ _label="Fill screen" _low-label="1%" _high-label="100%"
+ low="0.01" high="1.0" default="1.0"/>
+ </vgroup>
+ <vgroup>
+ <number id="epoch" type="slider" arg="-epoch %"
+ _label="Epoch" _low-label="Small" _high-label="Large"
+ low="1000" high="300000" default="40000"/>
+
+ <number id="ncolors" type="slider" arg="-ncolors %"
+ _label="Number of colors" _low-label="Two" _high-label="Many"
+ low="1" high="255" default="255"/>
+
+ <boolean id="showfps" _label="Show frame rate" arg-set="-fps"/>
+
+ <xscreensaver-updater />
+
+ </vgroup>
+ </hgroup>
+
+ <hgroup>
+ <vgroup>
+ <number id="width" type="spinbutton" arg="-width %"
+ _label="X tile size" low="0" high="500" default="0"/>
+ <number id="pixheight" type="spinbutton" arg="-height %"
+ _label="Y tile size" low="0" high="500" default="0"/>
+ </vgroup>
+ <vgroup>
+ <number id="reaction" type="spinbutton" arg="-reaction %"
+ _label="Reaction" low="-1" high="2" default="-1"/>
+ <number id="diffusion" type="spinbutton" arg="-diffusion %"
+ _label="Diffusion" low="-1" high="2" default="-1"/>
+
+ <!-- #### default is wrong -->
+ <number id="radius" type="spinbutton" arg="-radius %"
+ _label="Seed radius" low="-1" high="60" default="-1"/>
+
+ </vgroup>
+
+ </hgroup>
+
+ <_description>
+Reaction-diffusion: draws a grid of growing square-like shapes that,
+once they overtake each other, react in unpredictable ways.
+
+Written by Scott Draves; 1997.
+ </_description>
+</screensaver>
diff --git a/hacks/config/rdbomb.xml b/hacks/config/rdbomb.xml
new file mode 120000
index 0000000..b70f7a7
--- /dev/null
+++ b/hacks/config/rdbomb.xml
@@ -0,0 +1 @@
+rd-bomb.xml \ No newline at end of file
diff --git a/hacks/config/ripples.xml b/hacks/config/ripples.xml
new file mode 100644
index 0000000..191e041
--- /dev/null
+++ b/hacks/config/ripples.xml
@@ -0,0 +1,55 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="ripples" _label="Ripples">
+
+ <command arg="-root"/>
+
+ <video href="https://www.youtube.com/watch?v=w8YXAalnRzc"/>
+
+ <hgroup>
+ <vgroup>
+ <number id="delay" type="slider" arg="-delay %"
+ _label="Frame rate" _low-label="Low" _high-label="High"
+ low="0" high="100000" default="50000"
+ convert="invert"/>
+
+ <number id="duration" type="slider" arg="-duration %"
+ _label="Duration" _low-label="10 seconds" _high-label="10 minutes"
+ low="10" high="600" default="120"/>
+
+ <number id="rate" type="slider" arg="-rate %"
+ _label="Drippiness" _low-label="Drizzle" _high-label="Storm"
+ low="1" high="100" default="5"
+ convert="invert"/>
+
+ <number id="fluidity" type="slider" arg="-fluidity %"
+ _label="Fluidity" _low-label="Small drops" _high-label="Big drops"
+ low="0" high="16" default="6"
+ convert="invert"/>
+ </vgroup>
+ <vgroup>
+
+ <hgroup>
+ <boolean id="stir" _label="Moving splashes" arg-set="-stir"/>
+ <boolean id="oily" _label="Psychedelic colors" arg-set="-oily"/>
+ <boolean id="gray" _label="Grayscale" arg-set="-grayscale"/>
+ </hgroup>
+
+ <xscreensaver-image />
+
+ <number id="light" type="spinbutton" arg="-light %"
+ _label="Magic lighting effect" low="0" high="8" default="4"/>
+ <boolean id="showfps" _label="Show frame rate" arg-set="-fps"/>
+
+ <xscreensaver-updater />
+
+ </vgroup>
+ </hgroup>
+
+ <_description>
+Rippling interference patterns reminiscent of splashing water
+distort a loaded image.
+
+Written by Tom Hammersley; 1999.
+ </_description>
+</screensaver>
diff --git a/hacks/config/rocks.xml b/hacks/config/rocks.xml
new file mode 100644
index 0000000..964de82
--- /dev/null
+++ b/hacks/config/rocks.xml
@@ -0,0 +1,45 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="rocks" _label="Rocks">
+
+ <command arg="-root"/>
+
+ <video href="https://www.youtube.com/watch?v=7x7PMI7LFK0"/>
+
+ <number id="delay" type="slider" arg="-delay %"
+ _label="Frame rate" _low-label="Low" _high-label="High"
+ low="0" high="100000" default="50000"
+ convert="invert"/>
+
+ <number id="count" type="slider" arg="-count %"
+ _label="Count" _low-label="Few" _high-label="Many"
+ low="0" high="200" default="100"/>
+
+ <number id="speed" type="slider" arg="-speed %"
+ _label="Velocity" _low-label="Slow" _high-label="Fast"
+ low="1" high="100" default="100"/>
+
+ <hgroup>
+ <boolean id="rotate" _label="Rotation" arg-unset="-no-rotate"/>
+ <boolean id="steer" _label="Steering" arg-unset="-no-move"/>
+ <boolean id="3d" _label="Do Red/Blue 3D separation" arg-set="-3d"/>
+ </hgroup>
+
+ <number id="ncolors" type="slider" arg="-colors %"
+ _label="Number of colors" _low-label="Two" _high-label="Many"
+ low="1" high="255" default="5"/>
+
+ <!-- #### -delta3d [1.5] -->
+ <!-- #### -left3d [Blue] -->
+ <!-- #### -right3d [Red] -->
+
+ <boolean id="showfps" _label="Show frame rate" arg-set="-fps"/>
+
+ <xscreensaver-updater />
+
+ <_description>
+An asteroid field zooms by.
+
+Written by Jamie Zawinski; 1992.
+ </_description>
+</screensaver>
diff --git a/hacks/config/romanboy.xml b/hacks/config/romanboy.xml
new file mode 100644
index 0000000..b2f6cb4
--- /dev/null
+++ b/hacks/config/romanboy.xml
@@ -0,0 +1,128 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<screensaver name="romanboy" _label="RomanBoy" gl="yes">
+
+ <video href="https://www.youtube.com/watch?v=KEW5TuPbWyg"/>
+
+ <command arg="-root"/>
+
+ <hgroup>
+ <select id="view-mode">
+ <option id="walk" _label="Random motion"/>
+ <option id="walk" _label="Walk" arg-set="-view-mode walk"/>
+ <option id="turn" _label="Turn" arg-set="-view-mode turn"/>
+ </select>
+
+ <number id="surface-order" type="spinbutton" arg="-surface-order %"
+ _label="Order of the surface" low="2" high="9" default="3"/>
+
+ <boolean id="orientation-marks" _label="Show orientation marks"
+ arg-set="-orientation-marks"/>
+ </hgroup>
+
+ <hgroup>
+ <boolean id="deform" _label="Deform the projective plane"
+ arg-unset="-no-deform"/>
+
+ <number id="deform-speed" type="slider" arg="-deformation-speed %"
+ _label="Deformation speed"
+ _low-label="1.0" _high-label="100.0"
+ low="1.0" high="100.0" default="10.0"/>
+
+ <number id="init-deform" type="slider" arg="-initial-deformation %"
+ _label="Initial deformation"
+ _low-label="0.0" _high-label="1000.0"
+ low="0.0" high="1000.0" default="1000.0"/>
+ </hgroup>
+
+
+ <hgroup>
+
+ <vgroup>
+ <select id="display-mode">
+ <option id="random" _label="Random surface"/>
+ <option id="wire" _label="Wireframe mesh" arg-set="-mode wireframe"/>
+ <option id="surface" _label="Solid surface" arg-set="-mode surface"/>
+ <option id="transparent" _label="Transparent surface" arg-set="-mode transparent"/>
+ </select>
+
+ <select id="appearance">
+ <option id="random" _label="Random pattern"/>
+ <option id="solid" _label="Solid object" arg-set="-appearance solid"/>
+ <option id="bands" _label="Distance bands" arg-set="-appearance distance-bands"/>
+ <option id="bands" _label="Direction bands" arg-set="-appearance direction-bands"/>
+ </select>
+
+ <select id="colors">
+ <option id="random" _label="Random coloration"/>
+ <option id="twosided" _label="Two-sided" arg-set="-colors two-sided"/>
+ <option id="rainbow" _label="Distance colors" arg-set="-colors distance"/>
+ <option id="rainbow" _label="Direction colors" arg-set="-colors direction"/>
+ </select>
+
+ <select id="projection">
+ <option id="random" _label="Random Projection"/>
+ <option id="perspective" _label="Perspective" arg-set="-projection perspective"/>
+ <option id="orthographic" _label="Orthographic" arg-set="-projection orthographic"/>
+ </select>
+ </vgroup>
+
+ <vgroup>
+ <number id="speed-x" type="slider" arg="-speed-x %"
+ _label="X rotation speed"
+ _low-label="-4.0" _high-label="4.0"
+ low="-4.0" high="4.0" default="1.1"/>
+
+ <number id="speed-y" type="slider" arg="-speed-y %"
+ _label="Y rotation speed"
+ _low-label="-4.0" _high-label="4.0"
+ low="-4.0" high="4.0" default="1.3"/>
+
+ <number id="speed-z" type="slider" arg="-speed-z %"
+ _label="Z rotation speed"
+ _low-label="-4.0" _high-label="4.0"
+ low="-4.0" high="4.0" default="1.5"/>
+ </vgroup>
+
+ <vgroup>
+ <number id="walk-direction" type="slider" arg="-walk-direction %"
+ _label="Walking direction"
+ _low-label="-180.0" _high-label="180.0"
+ low="-180.0" high="180.0" default="83.0"/>
+
+ <number id="walk-speed" type="slider" arg="-walk-speed %"
+ _label="Walking speed"
+ _low-label="1.0" _high-label="100.0"
+ low="1.0" high="100.0" default="20.0"/>
+
+ <number id="delay" type="slider" arg="-delay %"
+ _label="Frame rate" _low-label="Low" _high-label="High"
+ low="0" high="100000" default="10000"
+ convert="invert"/>
+ </vgroup>
+
+ <vgroup>
+ <xscreensaver-updater />
+ <boolean id="showfps" _label="Show frame rate" arg-set="-fps"/>
+ </vgroup>
+
+ </hgroup>
+
+ <_description>
+A 3D immersion of the real projective plane that smoothly deforms
+between the Roman surface and the Boy surface.
+
+You can walk on the surface of the real projective plane or rotate it
+in 3D. Furthermore, it is possible to smoothly deform the real
+projective plane between the Roman surface and the Boy surface while
+turning it or walking on it. Inspired by François Apéry's book
+"Models of the Real Projective Plane", Vieweg, 1987.
+
+https://en.wikipedia.org/wiki/Boy%27s_surface
+https://en.wikipedia.org/wiki/Roman_surface
+http://mathworld.wolfram.com/BoySurface.html
+http://mathworld.wolfram.com/RomanSurface.html
+
+Written by Carsten Steger; 2014.
+ </_description>
+</screensaver>
diff --git a/hacks/config/rorschach.xml b/hacks/config/rorschach.xml
new file mode 100644
index 0000000..e4f0207
--- /dev/null
+++ b/hacks/config/rorschach.xml
@@ -0,0 +1,36 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="rorschach" _label="Rorschach">
+
+ <command arg="-root"/>
+
+ <video href="https://www.youtube.com/watch?v=G1OLn4Mdk5Y"/>
+
+ <number id="iterations" type="slider" arg="-iterations %"
+ _label="Iterations" _low-label="Small" _high-label="Large"
+ low="0" high="10000" default="4000"/>
+
+ <number id="offset" type="slider" arg="-offset %"
+ _label="Offset" _low-label="Small" _high-label="Large"
+ low="0" high="50" default="7"/>
+
+ <boolean id="xsymmetry" _label="With X symmetry" arg-unset="-no-xsymmetry"/>
+ <boolean id="ysymmetry" _label="With Y symmetry" arg-set="-ysymmetry"/>
+
+ <number id="delay" type="slider" arg="-delay %"
+ _label="Linger" _low-label="1 second" _high-label="1 minute"
+ low="1" high="60" default="5"/>
+
+ <boolean id="showfps" _label="Show frame rate" arg-set="-fps"/>
+
+ <xscreensaver-updater />
+
+ <_description>
+Inkblot patterns via a reflected random walk.
+
+https://en.wikipedia.org/wiki/Rorschach_inkblot_test
+https://en.wikipedia.org/wiki/Random_walk
+
+Written by Jamie Zawinski; 1992.
+ </_description>
+</screensaver>
diff --git a/hacks/config/rotor.xml b/hacks/config/rotor.xml
new file mode 100644
index 0000000..2ffddf1
--- /dev/null
+++ b/hacks/config/rotor.xml
@@ -0,0 +1,40 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="rotor" _label="Rotor">
+
+ <command arg="-root"/>
+
+ <video href="https://www.youtube.com/watch?v=HWcEvT1keDA"/>
+
+ <number id="delay" type="slider" arg="-delay %"
+ _label="Frame rate" _low-label="Low" _high-label="High"
+ low="0" high="100000" default="10000"
+ convert="invert"/>
+
+ <number id="cycles" type="slider" arg="-cycles %"
+ _label="Length" _low-label="Short" _high-label="Long"
+ low="2" high="100" default="20"/>
+
+ <number id="ncolors" type="slider" arg="-ncolors %"
+ _label="Number of colors" _low-label="Two" _high-label="Many"
+ low="1" high="255" default="200"/>
+
+ <number id="count" type="spinbutton" arg="-count %"
+ _label="Count" low="0" high="20" default="4"/>
+
+ <number id="size" type="spinbutton" arg="-size %"
+ _label="Size" low="-50" high="50" default="-6"/>
+
+ <boolean id="showfps" _label="Show frame rate" arg-set="-fps"/>
+
+ <xscreensaver-updater />
+
+ <_description>
+This screen saver was removed from the XScreenSaver distribution as of
+version 5.08.
+
+Draws a line segment moving along a complex spiraling curve.
+
+Written by Tom Lawrence; 1997.
+ </_description>
+</screensaver>
diff --git a/hacks/config/rotzoomer.xml b/hacks/config/rotzoomer.xml
new file mode 100644
index 0000000..d610fcb
--- /dev/null
+++ b/hacks/config/rotzoomer.xml
@@ -0,0 +1,43 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="rotzoomer" _label="RotZoomer">
+
+ <command arg="-root"/>
+
+ <video href="https://www.youtube.com/watch?v=ecl8ykLswX8"/>
+
+ <number id="delay" type="slider" arg="-delay %"
+ _label="Frame rate" _low-label="Low" _high-label="High"
+ low="0" high="100000" default="10000" convert="invert"/>
+
+ <number id="duration" type="slider" arg="-duration %"
+ _label="Duration" _low-label="10 seconds" _high-label="10 minutes"
+ low="10" high="600" default="120"/>
+
+ <number id="n" type="spinbutton" arg="-n %"
+ _label="Rectangle count" low="1" high="20" default="2"/>
+
+ <select id="mode">
+ <option id="random" _label="Random"/>
+ <option id="stationary" _label="Stationary rectangles" arg-set="-mode stationary"/>
+ <option id="move" _label="Wandering rectangles" arg-set="-mode move"/>
+ <option id="sweep" _label="Sweeping arcs" arg-set="-mode sweep"/>
+ <option id="circle" _label="Rotating discs" arg-set="-mode circle"/>
+ </select>
+
+ <boolean id="anim" _label="Animate" arg-unset="-no-anim"/>
+
+<!-- <boolean id="shm" _label="Use shared memory" arg-unset="-no-shm"/> -->
+
+ <xscreensaver-image />
+
+ <boolean id="showfps" _label="Show frame rate" arg-set="-fps"/>
+
+ <xscreensaver-updater />
+
+ <_description>
+Distorts an image by rotating and scaling random sections of it.
+
+Written by Claudio Matsuoka and Jamie Zawinski; 2001.
+ </_description>
+</screensaver>
diff --git a/hacks/config/rubik.xml b/hacks/config/rubik.xml
new file mode 100644
index 0000000..f48668b
--- /dev/null
+++ b/hacks/config/rubik.xml
@@ -0,0 +1,39 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="rubik" _label="Rubik" gl="yes">
+
+ <command arg="-root"/>
+
+ <video href="https://www.youtube.com/watch?v=AQdJgvyVkXU"/>
+
+ <number id="delay" type="slider" arg="-delay %"
+ _label="Frame rate" _low-label="Low" _high-label="High"
+ low="0" high="100000" default="20000"
+ convert="invert"/>
+
+ <number id="count" type="spinbutton" arg="-count %"
+ _label="Count" low="-100" high="100" default="-30"/>
+
+ <number id="cycles" type="slider" arg="-cycles %"
+ _label="Rotation" _low-label="Slow" _high-label="Fast"
+ low="3" high="200" default="20"
+ convert="invert"/>
+
+ <number id="size" type="spinbutton" arg="-size %"
+ _label="Size" low="-20" high="20" default="-6"/>
+
+ <boolean id="shuffle" _label="Hide shuffling" arg-set="-hideshuffling"/>
+
+ <boolean id="showfps" _label="Show frame rate" arg-set="-fps"/>
+
+ <xscreensaver-updater />
+
+ <_description>
+A Rubik's Cube that repeatedly shuffles and solves itself.
+See also the "GLSnake" and "Cube21" screen savers.
+
+https://en.wikipedia.org/wiki/Rubik%27s_Cube
+
+Written by Marcelo Vianna; 1997.
+ </_description>
+</screensaver>
diff --git a/hacks/config/rubikblocks.xml b/hacks/config/rubikblocks.xml
new file mode 100644
index 0000000..de96caf
--- /dev/null
+++ b/hacks/config/rubikblocks.xml
@@ -0,0 +1,67 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="rubikblocks" _label="RubikBlocks" gl="yes">
+
+ <command arg="-root"/>
+
+ <video href="https://www.youtube.com/watch?v=B2sGaRLWz-A"/>
+
+ <hgroup>
+ <vgroup>
+
+ <number id="speed" type="slider" arg="-delay %"
+ _label="Frame rate" _low-label="Low" _high-label="High"
+ low="0" high="100000" default="20000" convert="invert"/>
+
+ <number id="cubesize" type="slider" arg="-cubesize %"
+ _label="Cube size" _low-label="Small" _high-label="Large"
+ low="0.4" high="2.0" default="1.0"/>
+
+ <number id="rotspeed" type="slider" arg="-rotspeed %"
+ _label="Rotation" _low-label="Slow" _high-label="Fast"
+ low="1.0" high="10.0" default="3.0"/>
+
+ <select id="start">
+ <option id="cube" _label="Start as cube"/>
+ <option id="shuffle" _label="Start as random shape" arg-set="-randomize"/>
+ </select>
+
+ </vgroup>
+ <vgroup>
+
+ <number id="spinspeed" type="slider" arg="-spinspeed %"
+ _label="Spin" _low-label="Slow" _high-label="Fast"
+ low="0.01" high="4.0" default="0.1"/>
+
+ <number id="wanderspeed" type="slider" arg="-wanderspeed %"
+ _label="Wander" _low-label="Slow" _high-label="Fast"
+ low="0.001" high="0.1" default="0.005"/>
+
+ <number id="wait" type="slider" arg="-wait %"
+ _label="Linger" _low-label="Short" _high-label="Long"
+ low="10.0" high="100.0" default="40.0"/>
+
+ <hgroup>
+ <boolean id="spin" _label="Spin" arg-unset="-no-spin"/>
+ <boolean id="wander" _label="Wander" arg-unset="-no-wander"/>
+ <boolean id="tex" _label="Outlines" arg-unset="-no-texture"/>
+ </hgroup>
+ <hgroup>
+ <boolean id="wire" _label="Wireframe" arg-set="-wireframe"/>
+ <boolean id="showfps" _label="Show frame rate" arg-set="-fps"/>
+ </hgroup>
+
+ </vgroup>
+ </hgroup>
+
+ <xscreensaver-updater />
+
+ <_description>
+The "Rubik's Mirror Blocks" puzzle.
+See also the "Rubik", "Cube21", and "GLSnake" screen savers.
+
+https://en.wikipedia.org/wiki/Combination_puzzles#Irregular_cuboids
+
+Written by Vasek Potocek; 2009.
+ </_description>
+</screensaver>
diff --git a/hacks/config/sballs.xml b/hacks/config/sballs.xml
new file mode 100644
index 0000000..6a72def
--- /dev/null
+++ b/hacks/config/sballs.xml
@@ -0,0 +1,37 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="sballs" _label="SBalls" gl="yes">
+
+ <command arg="-root"/>
+
+ <video href="https://www.youtube.com/watch?v=pcfqdvvPG8k"/>
+
+ <number id="delay" type="slider" arg="-delay %"
+ _label="Frame rate" _low-label="Low" _high-label="High"
+ low="0" high="100000" default="30000"
+ convert="invert"/>
+
+ <select id="object">
+ <option id="random" _label="Random"/>
+ <option id="tetra" _label="Tetrahedron" arg-set="-object 1"/>
+ <option id="cube" _label="Cube" arg-set="-object 2"/>
+ <option id="octa" _label="Octahedron" arg-set="-object 3"/>
+ <option id="dodeca" _label="Dodecahedron" arg-set="-object 4"/>
+ <option id="icosa" _label="Icosahedron" arg-set="-object 5"/>
+ <option id="plane" _label="Plane" arg-set="-object 6"/>
+ <option id="pyramid" _label="Pyramid" arg-set="-object 7"/>
+ <option id="star" _label="Star" arg-set="-object 8"/>
+ </select>
+
+ <boolean id="tex" _label="Textured" arg-unset="-no-texture"/>
+ <boolean id="wire" _label="Wireframe" arg-set="-wireframe"/>
+ <boolean id="showfps" _label="Show frame rate" arg-set="-fps"/>
+
+ <xscreensaver-updater />
+
+ <_description>
+Textured balls spinning like crazy.
+
+Written by Eric Lassauge; 2002.
+ </_description>
+</screensaver>
diff --git a/hacks/config/shadebobs.xml b/hacks/config/shadebobs.xml
new file mode 100644
index 0000000..f34c5b9
--- /dev/null
+++ b/hacks/config/shadebobs.xml
@@ -0,0 +1,38 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="shadebobs" _label="ShadeBobs">
+
+ <command arg="-root"/>
+
+ <video href="https://www.youtube.com/watch?v=gJtxnQ5_8Zk"/>
+
+ <number id="delay" type="slider" arg="-delay %"
+ _label="Frame rate" _low-label="Low" _high-label="High"
+ low="0" high="20000" default="10000"
+ convert="invert"/>
+
+ <!-- #### -degrees [0] -->
+ <!-- #### -color [random] -->
+
+ <number id="ncolors" type="slider" arg="-ncolors %"
+ _label="Number of colors" _low-label="Two" _high-label="Many"
+ low="1" high="255" default="64"/>
+
+ <number id="count" type="slider" arg="-count %"
+ _label="Count" _low-label="One" _high-label="Many"
+ low="1" high="20" default="4"/>
+
+ <number id="cycles" type="slider" arg="-cycles %"
+ _label="Duration" _low-label="Short" _high-label="Long"
+ low="0" high="100" default="10"/>
+
+ <boolean id="showfps" _label="Show frame rate" arg-set="-fps"/>
+
+ <xscreensaver-updater />
+
+ <_description>
+Oscillating oval patterns that look something like vapor trails or neon tubes.
+
+Written by Shane Smit; 1999.
+ </_description>
+</screensaver>
diff --git a/hacks/config/sierpinski.xml b/hacks/config/sierpinski.xml
new file mode 100644
index 0000000..3aec43d
--- /dev/null
+++ b/hacks/config/sierpinski.xml
@@ -0,0 +1,37 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="sierpinski" _label="Sierpinski">
+
+ <command arg="-root"/>
+
+ <video href="https://www.youtube.com/watch?v=m0zdPWuFhjA"/>
+
+ <number id="delay" type="slider" arg="-delay %"
+ _label="Frame rate" _low-label="Low" _high-label="High"
+ low="0" high="1000000" default="400000"
+ convert="invert"/>
+
+ <number id="count" type="slider" arg="-count %"
+ _label="Points" _low-label="Few" _high-label="Many"
+ low="10" high="10000" default="2000"/>
+
+ <number id="cycles" type="slider" arg="-cycles %"
+ _label="Timeout" _low-label="Small" _high-label="Large"
+ low="0" high="1000" default="100"/>
+
+ <number id="ncolors" type="slider" arg="-ncolors %"
+ _label="Number of colors" _low-label="Two" _high-label="Many"
+ low="1" high="255" default="64"/>
+
+ <boolean id="showfps" _label="Show frame rate" arg-set="-fps"/>
+
+ <xscreensaver-updater />
+
+ <_description>
+The 2D Sierpinski triangle fractal. See also the "Sierpinski3D" screen saver.
+
+https://en.wikipedia.org/wiki/Sierpinski_triangle
+
+Written by Desmond Daignault; 1997.
+ </_description>
+</screensaver>
diff --git a/hacks/config/sierpinski3d.xml b/hacks/config/sierpinski3d.xml
new file mode 100644
index 0000000..782fe9d
--- /dev/null
+++ b/hacks/config/sierpinski3d.xml
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="sierpinski3d" _label="Sierpinski3D" gl="yes">
+
+ <command arg="-root"/>
+
+ <video href="https://www.youtube.com/watch?v=TGQRLAhDLv0"/>
+
+ <number id="delay" type="slider" arg="-delay %"
+ _label="Frame rate" _low-label="Low" _high-label="High"
+ low="0" high="100000" default="20000"
+ convert="invert"/>
+
+ <number id="descent" type="slider" arg="-speed %"
+ _label="Duration" _low-label="Short" _high-label="Long"
+ low="2" high="500" default="150"
+ convert="invert"/>
+
+ <number id="depth" type="spinbutton" arg="-depth %"
+ _label="Max depth" low="1" high="6" default="5"/>
+
+ <boolean id="wire" _label="Wireframe" arg-set="-wireframe"/>
+ <boolean id="showfps" _label="Show frame rate" arg-set="-fps"/>
+
+ <xscreensaver-updater />
+
+ <_description>
+The recursive Sierpinski tetrahedron fractal.
+
+https://en.wikipedia.org/wiki/Sierpinski_triangle#Analogs_in_higher_dimension
+
+Written by Jamie Zawinski and Tim Robinson; 1999.
+ </_description>
+</screensaver>
diff --git a/hacks/config/skytentacles.xml b/hacks/config/skytentacles.xml
new file mode 100644
index 0000000..e6d1b5b
--- /dev/null
+++ b/hacks/config/skytentacles.xml
@@ -0,0 +1,71 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="skytentacles" _label="SkyTentacles" gl="yes">
+
+ <command arg="-root"/>
+
+ <video href="https://www.youtube.com/watch?v=iCjtXUSQv1A"/>
+
+ <hgroup>
+ <vgroup>
+ <number id="count" type="slider" arg="-count %"
+ _label="Tentacles" _low-label="1" _high-label="20"
+ low="1" high="20" default="9"/>
+
+ <number id="length" type="slider" arg="-length %"
+ _label="Length" _low-label="Short" _high-label="Long"
+ low="1.0" high="20.0" default="9.0"/>
+
+ <number id="thickness" type="slider" arg="-thickness %"
+ _label="Thickness" _low-label="Thin" _high-label="Thick"
+ low="0.1" high="5.0" default="1.0"/>
+
+ <number id="flexibility" type="slider" arg="-flexibility %"
+ _label="Flexibility" _low-label="Low" _high-label="High"
+ low="0.1" high="1.0" default="0.35"/>
+
+ <number id="wiggliness" type="slider" arg="-wiggliness %"
+ _label="Wiggliness" _low-label="Low" _high-label="High"
+ low="0.1" high="1.0" default="0.35"/>
+
+ </vgroup>
+
+ <vgroup>
+ <number id="delay" type="slider" arg="-delay %"
+ _label="Frame rate" _low-label="Slow" _high-label="Fast"
+ low="0" high="100000" default="30000"
+ convert="invert"/>
+
+ <number id="speed" type="slider" arg="-speed %"
+ _label="Speed" _low-label="Slow" _high-label="Fast"
+ low="0.1" high="8.0" default="1.0"/>
+
+ <number id="slices" type="slider" arg="-slices %"
+ _label="X resolution" _low-label="Low" _high-label="High"
+ low="3" high="50" default="16"/>
+ <number id="segments" type="slider" arg="-segments %"
+ _label="Y resolution" _low-label="Low" _high-label="High"
+ low="2" high="50" default="24"/>
+
+ <hgroup>
+ <boolean id="skin" _label="Draw skin" arg-unset="-no-texture"/>
+ <boolean id="cel" _label="Cartoony" arg-set="-cel"/>
+ <boolean id="intersect" _label="Tentacles can intersect" arg-set="-intersect"/>
+ </hgroup>
+ <hgroup>
+ <boolean id="smooth" _label="Smooth" arg-unset="-no-smooth"/>
+ <boolean id="showfps" _label="Show frame rate" arg-set="-fps"/>
+ </hgroup>
+
+ </vgroup>
+ </hgroup>
+
+
+ <xscreensaver-updater />
+
+ <_description>
+There is a tentacled abomination in the sky. From above you it devours.
+
+Written by Jamie Zawinski; 2008.
+ </_description>
+</screensaver>
diff --git a/hacks/config/slidescreen.xml b/hacks/config/slidescreen.xml
new file mode 100644
index 0000000..3018998
--- /dev/null
+++ b/hacks/config/slidescreen.xml
@@ -0,0 +1,54 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="slidescreen" _label="SlideScreen">
+
+ <command arg="-root"/>
+
+ <video href="https://www.youtube.com/watch?v=uKNE4xCdlno"/>
+
+ <hgroup>
+ <vgroup>
+ <number id="delay" type="slider" arg="-delay %"
+ _label="Frame rate" _low-label="Low" _high-label="High"
+ low="0" high="100000" default="50000"
+ convert="invert"/>
+
+ <number id="delay2" type="slider" arg="-delay2 %"
+ _label="Pause" _low-label="Short" _high-label="Long"
+ low="0" high="2000000" default="1000000"/>
+
+ <number id="duration" type="slider" arg="-duration %"
+ _label="Duration" _low-label="10 seconds" _high-label="10 minutes"
+ low="10" high="600" default="120"/>
+
+ <xscreensaver-image />
+
+ </vgroup>
+ <vgroup>
+ <number id="increment" type="slider" arg="-increment %"
+ _label="Slide speed" _low-label="Slow" _high-label="Fast"
+ low="1" high="30" default="10"/>
+
+ <number id="grid-size" type="slider" arg="-grid-size %"
+ _label="Cell size" _low-label="Small" _high-label="Large"
+ low="12" high="500" default="70"/>
+
+ <number id="ibw" type="spinbutton" arg="-ibw %"
+ _label="Gutter size" low="0" high="50" default="4"/>
+
+ <boolean id="showfps" _label="Show frame rate" arg-set="-fps"/>
+
+ <xscreensaver-updater />
+
+ </vgroup>
+ </hgroup>
+
+ <_description>
+A variant on a "fifteen puzzle", operating on the screen or an image.
+It divides the image into a grid and randomly shuffles the squares.
+
+https://en.wikipedia.org/wiki/Fifteen_puzzle
+
+Written by Jamie Zawinski; 1994.
+ </_description>
+</screensaver>
diff --git a/hacks/config/slip.xml b/hacks/config/slip.xml
new file mode 100644
index 0000000..5a656f3
--- /dev/null
+++ b/hacks/config/slip.xml
@@ -0,0 +1,43 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="slip" _label="Slip">
+
+ <command arg="-root"/>
+
+ <video href="https://www.youtube.com/watch?v=BgzNvBm4MuE"/>
+
+ <hgroup>
+ <vgroup>
+ <number id="delay" type="slider" arg="-delay %"
+ _label="Frame rate" _low-label="Low" _high-label="High"
+ low="0" high="100000" default="50000"
+ convert="invert"/>
+
+ <number id="count" type="slider" arg="-count %"
+ _label="Count" _low-label="Few" _high-label="Many"
+ low="0" high="100" default="35"/>
+ </vgroup>
+
+ <vgroup>
+ <number id="cycles" type="slider" arg="-cycles %"
+ _label="Timeout" _low-label="Small" _high-label="Large"
+ low="0" high="100" default="50"/>
+
+ <number id="ncolors" type="slider" arg="-ncolors %"
+ _label="Number of colors" _low-label="Two" _high-label="Many"
+ low="1" high="255" default="200"/>
+ </vgroup>
+ </hgroup>
+
+ <xscreensaver-image />
+
+ <boolean id="showfps" _label="Show frame rate" arg-set="-fps"/>
+
+ <xscreensaver-updater />
+
+ <_description>
+A jet engine consumes the screen, then puts it through a spin cycle.
+
+Written by Scott Draves and Jamie Zawinski; 1997.
+ </_description>
+</screensaver>
diff --git a/hacks/config/sonar.xml b/hacks/config/sonar.xml
new file mode 100644
index 0000000..e459c51
--- /dev/null
+++ b/hacks/config/sonar.xml
@@ -0,0 +1,85 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="sonar" _label="Sonar" gl="yes">
+
+ <command arg="-root"/>
+
+ <video href="https://www.youtube.com/watch?v=XEL8g3qbthE"/>
+
+ <hgroup>
+ <vgroup>
+ <number id="delay" type="slider" arg="-delay %"
+ _label="Frame rate" _low-label="Low" _high-label="High"
+ low="0" high="100000" default="30000"
+ convert="invert"/>
+
+ <number id="speed" type="slider" arg="-speed %"
+ _label="Speed" _low-label="Slow" _high-label="Fast"
+ low="0.1" high="8.0" default="1.0"/>
+
+ <select id="ping">
+ <option id="sn" _label="Ping local subnet"/>
+<!--
+ <option id="24" _label="Ping subnet/24 (254 hosts)" arg-set="-ping subnet/24"/>
+ <option id="25" _label="Ping subnet/25 (126 hosts)" arg-set="-ping subnet/25"/>
+ <option id="26" _label="Ping subnet/26 (62 hosts)" arg-set="-ping subnet/26"/>
+ <option id="27" _label="Ping subnet/27 (31 hosts)" arg-set="-ping subnet/27"/>
+ <option id="28" _label="Ping subnet/28 (14 hosts)"/>
+ <option id="29" _label="Ping subnet/29 (6 hosts)" arg-set="-ping subnet/29"/>
+ <option id="30" _label="Ping subnet/30 (2 hosts)" arg-set="-ping subnet/30"/>
+-->
+
+ <option id="ssh" _label="Ping known SSH hosts" arg-set="-ping /etc/hosts,$HOME/.ssh/known_hosts,$HOME/.ssh/known_hosts2"/>
+
+ <option id="popular" _label="Ping Google, Facebook, etc." arg-set="-ping google.com,facebook.com,twitter.com,yahoo.com,flickr.com,www.apple.com,wikipedia.org,linux.org,youtube.com,disqus.com,blogger.com,wordpress.com,tumblr.com,whitehouse.gov"/>
+
+ <option id="sim" _label="Simulation (don't ping)" arg-set="-ping simulation"/>
+ </select>
+ </vgroup>
+
+ <vgroup>
+ <number id="font" type="slider" arg="-font-size %"
+ _label="Font size" _low-label="Tiny" _high-label="Huge"
+ low="6.0" high="24.0" default="12"/>
+
+ <number id="sweep" type="slider" arg="-sweep-size %"
+ _label="Trail length" _low-label="Short" _high-label="Long"
+ low="0.02" high="0.7" default="0.3"/>
+ </vgroup>
+ </hgroup>
+
+
+ <hgroup>
+ <string id="aname" _label="Simulation team A name" arg="-team-a-name %"/>
+ <number id="acount" type="spinbutton" arg="-team-a-count %"
+ _label="A count" low="1" high="100" default="4"/>
+ </hgroup>
+
+ <hgroup>
+ <string id="bname" _label="Simulation team B name" arg="-team-b-name %"/>
+ <number id="bcount" type="spinbutton" arg="-team-b-count %"
+ _label="B count" low="1" high="100" default="4"/>
+ </hgroup>
+
+ <hgroup>
+ <boolean id="dns" _label="Resolve host names" arg-unset="-no-dns"/>
+ <boolean id="times" _label="Show ping times" arg-unset="-no-times"/>
+ <boolean id="wobble" _label="Tilt" arg-unset="-no-wobble"/>
+ <boolean id="showfps" _label="Show frame rate" arg-set="-fps"/>
+ </hgroup>
+
+ <xscreensaver-updater />
+
+ <_description>
+A sonar display pings (get it?) the hosts on your local network, and
+plots their distance (response time) from you. The three rings
+represent ping times of approximately 2.5, 70 and 2,000 milliseconds
+respectively.
+
+Alternately, it can run a simulation that doesn't involve hosts.
+
+https://en.wikipedia.org/wiki/Ping#History
+
+Written by Jamie Zawinski and Stephen Martin; 1998.
+ </_description>
+</screensaver>
diff --git a/hacks/config/speedmine.xml b/hacks/config/speedmine.xml
new file mode 100644
index 0000000..cf7b88a
--- /dev/null
+++ b/hacks/config/speedmine.xml
@@ -0,0 +1,62 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="speedmine" _label="SpeedMine">
+
+ <command arg="-root"/>
+
+ <video href="https://www.youtube.com/watch?v=awOnhCxRD_c"/>
+
+ <hgroup>
+ <vgroup>
+ <number id="delay" type="slider" arg="-delay %"
+ _label="Frame rate" _low-label="Low" _high-label="High"
+ low="0" high="100000" default="30000"
+ convert="invert"/>
+
+ <number id="velocity" type="slider" arg="-maxspeed %"
+ _label="Max velocity" _low-label="Slow" _high-label="Fast"
+ low="1" high="1000" default="700"/>
+
+ <number id="thrust" type="slider" arg="-thrust %"
+ _label="Thrust" _low-label="Slow" _high-label="Fast"
+ low="0.0" high="4.0" default="1.0"/>
+
+ <number id="gravity" type="slider" arg="-gravity %"
+ _label="Gravity" _low-label="Low" _high-label="High"
+ low="0.0" high="25.0" default="9.8"/>
+ </vgroup>
+ <vgroup>
+
+ <select id="mode">
+ <option id="speedmine" _label="Tunnel"/>
+ <option id="speedworm" _label="Worm" arg-set="-worm"/>
+ </select>
+
+ <boolean id="terrain" _label="Rocky walls" arg-unset="-no-terrain"/>
+ <boolean id="bump" _label="Allow wall collisions" arg-unset="-no-bumps"/>
+ <boolean id="bonus" _label="Present bonuses" arg-unset="-no-bonuses"/>
+ <boolean id="xhair" _label="Display crosshair" arg-unset="-no-crosshair"/>
+ <boolean id="wire" _label="Wireframe" arg-set="-wireframe"/>
+
+ <boolean id="showfps" _label="Show frame rate" arg-set="-fps"/>
+ </vgroup>
+ </hgroup>
+
+ <!-- #### -vertigo [1.0] -->
+ <!-- #### -darkground [#101010] -->
+ <!-- #### -lightground [#a0a0a0] -->
+ <!-- #### -tunnelend [#000000] -->
+ <!-- #### -smoothness [6] -->
+ <!-- #### -curviness [1.0] -->
+ <!-- #### -twistiness [1.0] -->
+ <!-- #### -no-widening -->
+ <!-- #### -psychedelic -->
+
+ <xscreensaver-updater />
+
+ <_description>
+Simulates speeding down a rocky mineshaft, or a funky dancing worm.
+
+Written by Conrad Parker; 2001.
+ </_description>
+</screensaver>
diff --git a/hacks/config/sphere.xml b/hacks/config/sphere.xml
new file mode 100644
index 0000000..55a5d79
--- /dev/null
+++ b/hacks/config/sphere.xml
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="sphere" _label="Sphere">
+
+ <command arg="-root"/>
+
+ <video href="https://www.youtube.com/watch?v=FswhxIVXdt8"/>
+
+ <number id="delay" type="slider" arg="-delay %"
+ _label="Frame rate" _low-label="Low" _high-label="High"
+ low="0" high="100000" default="20000"
+ convert="invert"/>
+
+ <number id="ncolors" type="slider" arg="-ncolors %"
+ _label="Number of colors" _low-label="Two" _high-label="Many"
+ low="1" high="255" default="64"/>
+
+ <boolean id="showfps" _label="Show frame rate" arg-set="-fps"/>
+
+ <xscreensaver-updater />
+
+ <_description>
+This screen saver was removed from the XScreenSaver distribution as of
+version 5.08.
+
+Draws shaded spheres in multiple colors.
+
+Written by Tom Duff and Jamie Zawinski; 1982, 1997.
+ </_description>
+</screensaver>
diff --git a/hacks/config/spheremonics.xml b/hacks/config/spheremonics.xml
new file mode 100644
index 0000000..fc4fa92
--- /dev/null
+++ b/hacks/config/spheremonics.xml
@@ -0,0 +1,60 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="spheremonics" _label="Spheremonics" gl="yes">
+
+ <command arg="-root"/>
+
+ <video href="https://www.youtube.com/watch?v=KrNVwyWi0io"/>
+
+ <hgroup>
+ <vgroup>
+ <number id="delay" type="slider" arg="-delay %"
+ _label="Frame rate" _low-label="Low" _high-label="High"
+ low="0" high="100000" default="30000"
+ convert="invert"/>
+
+ <number id="duration" type="slider" arg="-duration %"
+ _label="Duration" _low-label="Short" _high-label="Long"
+ low="5" high="1000" default="100"/>
+
+ <number id="resolution" type="slider" arg="-resolution %"
+ _label="Resolution" _low-label="Low" _high-label="High"
+ low="5" high="100" default="64"/>
+
+ </vgroup>
+ <vgroup>
+ <boolean id="wander" _label="Wander" arg-set="-wander"/>
+
+ <select id="rotation">
+ <option id="no" _label="Don't rotate" arg-set="-spin 0"/>
+ <option id="x" _label="Rotate around X axis" arg-set="-spin X"/>
+ <option id="y" _label="Rotate around Y axis" arg-set="-spin Y"/>
+ <option id="z" _label="Rotate around Z axis" arg-set="-spin Z"/>
+ <option id="xy" _label="Rotate around X and Y axes" arg-set="-spin XY"/>
+ <option id="xz" _label="Rotate around X and Z axes" arg-set="-spin XZ"/>
+ <option id="yz" _label="Rotate around Y and Z axes" arg-set="-spin YZ"/>
+ <option id="xyz" _label="Rotate around all three axes"/>
+ </select>
+
+ <boolean id="smooth" _label="Smoothed lines" arg-unset="-no-smooth"/>
+ <boolean id="grid" _label="Draw grid" arg-unset="-no-grid"/>
+ <boolean id="bbox" _label="Draw bounding box" arg-set="-bbox"/>
+
+ <boolean id="wire" _label="Wireframe" arg-set="-wireframe"/>
+ <boolean id="showfps" _label="Show frame rate" arg-set="-fps"/>
+ </vgroup>
+ </hgroup>
+
+ <xscreensaver-updater />
+
+ <_description>
+These closed objects are commonly called spherical harmonics,
+although they are only remotely related to the mathematical
+definition found in the solution to certain wave functions, most
+notably the eigenfunctions of angular momentum operators.
+
+https://en.wikipedia.org/wiki/Spherical_harmonics#Visualization_of_the_spherical_harmonics
+
+Written by Paul Bourke and Jamie Zawinski; 2002.
+ </_description>
+</screensaver>
diff --git a/hacks/config/spiral.xml b/hacks/config/spiral.xml
new file mode 100644
index 0000000..71e78c7
--- /dev/null
+++ b/hacks/config/spiral.xml
@@ -0,0 +1,38 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="spiral" _label="Spiral">
+
+ <command arg="-root"/>
+
+ <video href="https://www.youtube.com/watch?v=8Ov2SxnO_Kg"/>
+
+ <number id="delay" type="slider" arg="-delay %"
+ _label="Frame rate" _low-label="Low" _high-label="High"
+ low="0" high="100000" default="50000"
+ convert="invert"/>
+
+ <number id="count" type="slider" arg="-count %"
+ _label="Count" _low-label="Few" _high-label="Many"
+ low="0" high="100" default="40"/>
+
+ <number id="cycles" type="slider" arg="-cycles %"
+ _label="Cycles" _low-label="Low" _high-label="High"
+ low="10" high="800" default="350"/>
+
+ <number id="ncolors" type="slider" arg="-ncolors %"
+ _label="Number of colors" _low-label="Two" _high-label="Many"
+ low="1" high="255" default="64"/>
+
+ <boolean id="showfps" _label="Show frame rate" arg-set="-fps"/>
+
+ <xscreensaver-updater />
+
+ <_description>
+This screen saver was removed from the XScreenSaver distribution as of
+version 5.08.
+
+Moving circular moire patterns.
+
+Written by Peter Schmitzberger; 1997.
+ </_description>
+</screensaver>
diff --git a/hacks/config/splitflap.xml b/hacks/config/splitflap.xml
new file mode 100644
index 0000000..265c9b6
--- /dev/null
+++ b/hacks/config/splitflap.xml
@@ -0,0 +1,72 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="splitflap" _label="SplitFlap" gl="yes">
+
+ <command arg="-root"/>
+
+ <video href="https://www.youtube.com/watch?v=rZOL2jyDey0"/>
+
+ <hgroup>
+ <vgroup>
+ <number id="delay" type="slider" arg="-delay %"
+ _label="Frame rate" _low-label="Low" _high-label="High"
+ low="0" high="100000" default="20000"
+ convert="invert"/>
+
+ <number id="speed" type="slider" arg="-speed %"
+ _label="Speed" _low-label="Slow" _high-label="Fast"
+ low="0.01" high="8.0" default="1.0"/>
+
+ <number id="width" type="spinbutton" arg="-width %"
+ _label="Columns" low="1" high="120" default="22"/>
+ <number id="height" type="spinbutton" arg="-height %"
+ _label="Rows" low="1" high="40" default="8"/>
+
+ <select id="text">
+ <option id="text" _label="Display text" />
+ <option id="c12" _label="Display 12-hour clock" arg-set="-mode clock12" />
+ <option id="c24" _label="Display 24-hour clock" arg-set="-mode clock24" />
+ </select>
+
+ <select id="facing">
+ <option id="front" _label="Always face front"/>
+ <option id="nofront" _label="Spin all the way around" arg-set="-no-front"/>
+ </select>
+
+ <select id="rotation">
+ <option id="no" _label="Don't rotate" arg-set="-spin 0"/>
+ <option id="x" _label="Rotate around X axis" arg-set="-spin X"/>
+ <option id="y" _label="Rotate around Y axis" arg-set="-spin Y"/>
+ <option id="z" _label="Rotate around Z axis" arg-set="-spin Z"/>
+ <option id="xy" _label="Rotate around X and Y axes" arg-set="-spin XY"/>
+ <option id="xz" _label="Rotate around X and Z axes" arg-set="-spin XZ"/>
+ <option id="yz" _label="Rotate around Y and Z axes" arg-set="-spin YZ"/>
+ <option id="xyz" _label="Rotate around all three axes"/>
+ </select>
+
+ </vgroup>
+
+ <vgroup>
+ <xscreensaver-text />
+
+ <hgroup>
+ <boolean id="wander" _label="Wander" arg-unset="-no-wander"/>
+ <boolean id="wire" _label="Wireframe" arg-set="-wireframe"/>
+ <boolean id="showfps" _label="Show frame rate" arg-set="-fps"/>
+ </hgroup>
+ <xscreensaver-updater />
+
+ </vgroup>
+ </hgroup>
+
+ <_description>
+Simulates a split-flap display, an old style of electromechanical
+sign as seen in airports and train stations, and commonly used in
+alarm clocks in the 1960s and 1970s.
+
+https://en.wikipedia.org/wiki/Split-flap_display
+https://en.wikipedia.org/wiki/Flip_clock
+
+Written by Jamie Zawinski; 2015.
+ </_description>
+</screensaver>
diff --git a/hacks/config/splodesic.xml b/hacks/config/splodesic.xml
new file mode 100644
index 0000000..0970fd3
--- /dev/null
+++ b/hacks/config/splodesic.xml
@@ -0,0 +1,32 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="splodesic" _label="Splodesic" gl="yes">
+
+ <command arg="-root"/>
+
+ <video href="https://www.youtube.com/watch?v=pwpTs1pEQmM"/>
+
+ <number id="delay" type="slider" arg="-delay %"
+ _label="Frame rate" _low-label="Low" _high-label="High"
+ low="0" high="100000" default="30000"
+ convert="invert"/>
+ <number id="speed" type="slider" arg="-speed %"
+ _label="Eruption frequency" _low-label="Seldom" _high-label="Often"
+ low="0.01" high="5.0" default="1.0"/>
+
+ <hgroup>
+ <number id="freq" type="spinbutton" arg="-depth %"
+ _label="Depth" low="0" high="5" default="4"/>
+ <boolean id="wander" _label="Wander" arg-unset="-no-wander"/>
+ <boolean id="spin" _label="Spin" arg-unset="-no-spin"/>
+ <boolean id="showfps" _label="Show frame rate" arg-set="-fps"/>
+ </hgroup>
+
+ <xscreensaver-updater />
+
+ <_description>
+A geodesic sphere experiences a series of eruptions.
+
+Written by Jamie Zawinski; 2016.
+ </_description>
+</screensaver>
diff --git a/hacks/config/spotlight.xml b/hacks/config/spotlight.xml
new file mode 100644
index 0000000..24bfb9a
--- /dev/null
+++ b/hacks/config/spotlight.xml
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="spotlight" _label="Spotlight">
+
+ <command arg="-root"/>
+
+ <video href="https://www.youtube.com/watch?v=av29CVh2UeM"/>
+
+ <number id="delay" type="slider" arg="-delay %"
+ _label="Frame rate" _low-label="Low" _high-label="High"
+ low="0" high="100000" default="10000"
+ convert="invert"/>
+
+ <number id="duration" type="slider" arg="-duration %"
+ _label="Duration" _low-label="10 seconds" _high-label="10 minutes"
+ low="10" high="600" default="120"/>
+
+ <number id="radius" type="slider" arg="-radius %"
+ _label="Spotlight size" _low-label="Small" _high-label="Large"
+ low="5" high="350" default="125"/>
+
+ <xscreensaver-image />
+
+ <boolean id="showfps" _label="Show frame rate" arg-set="-fps"/>
+
+ <xscreensaver-updater />
+
+ <_description>
+A spotlight scanning across a black screen, illuminating a loaded
+image when it passes.
+
+Written by Rick Schultz and Jamie Zawinski; 1999.
+ </_description>
+</screensaver>
diff --git a/hacks/config/sproingies.xml b/hacks/config/sproingies.xml
new file mode 100644
index 0000000..1d16ff0
--- /dev/null
+++ b/hacks/config/sproingies.xml
@@ -0,0 +1,36 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="sproingies" _label="Sproingies" gl="yes">
+
+ <command arg="-root"/>
+
+ <video href="https://www.youtube.com/watch?v=fmHl17ppgc0"/>
+
+ <number id="delay" type="slider" arg="-delay %"
+ _label="Frame rate" _low-label="Low" _high-label="High"
+ low="0" high="100000" default="30000"
+ convert="invert"/>
+
+ <number id="count" type="slider" arg="-count %"
+ _label="Sproingies" _low-label="One" _high-label="Lots"
+ low="1" high="30" default="8"/>
+
+ <hgroup>
+ <boolean id="nofall" _label="Fall off edge" arg-set="-fall"/>
+ <boolean id="wire" _label="Wireframe" arg-set="-wireframe"/>
+ <boolean id="showfps" _label="Show frame rate" arg-set="-fps"/>
+ </hgroup>
+
+ <xscreensaver-updater />
+
+ <_description>
+Slinky-like creatures walk down an infinite staircase and
+occasionally explode!
+
+https://en.wikipedia.org/wiki/Slinky
+https://en.wikipedia.org/wiki/Q%2Abert
+https://en.wikipedia.org/wiki/Marble_Madness
+
+Written by Ed Mackey; 1997.
+ </_description>
+</screensaver>
diff --git a/hacks/config/squiral.xml b/hacks/config/squiral.xml
new file mode 100644
index 0000000..1cc7e44
--- /dev/null
+++ b/hacks/config/squiral.xml
@@ -0,0 +1,51 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="squiral" _label="Squiral">
+
+ <command arg="-root"/>
+
+ <video href="https://www.youtube.com/watch?v=WPhqyM9Bb4o"/>
+
+ <hgroup>
+ <vgroup>
+ <number id="delay" type="slider" arg="-delay %"
+ _label="Frame rate" _low-label="Low" _high-label="High"
+ low="0" high="100000" default="10000"
+ convert="invert"/>
+
+ <number id="disorder" type="slider" arg="-disorder %"
+ _label="Randomness" _low-label="Low" _high-label="High"
+ low="0.0" high="0.5" default="0.005"/>
+
+ <number id="count" type="spinbutton" arg="-count %"
+ _label="Seeds" low="0" high="200" default="0"/>
+
+ </vgroup>
+ <vgroup>
+ <number id="handedness" type="slider" arg="-handedness %"
+ _label="Handedness" _low-label="Left" _high-label="Right"
+ low="0.0" high="1.0" default="0.5"/>
+
+ <number id="fill" type="slider" arg="-fill %"
+ _label="Density" _low-label="Sparse" _high-label="Dense"
+ low="0" high="100" default="75"/>
+
+ <number id="ncolors" type="slider" arg="-ncolors %"
+ _label="Number of colors" _low-label="Two" _high-label="Many"
+ low="1" high="255" default="100"/>
+ </vgroup>
+ </hgroup>
+
+ <!-- #### -cycle -->
+
+ <boolean id="showfps" _label="Show frame rate" arg-set="-fps"/>
+
+ <xscreensaver-updater />
+
+ <_description>
+Square-spiral-producing automata. The spirals grow outward until they
+hit something, then they go around it.
+
+Written by Jeff Epler; 1999.
+ </_description>
+</screensaver>
diff --git a/hacks/config/stairs.xml b/hacks/config/stairs.xml
new file mode 100644
index 0000000..099f963
--- /dev/null
+++ b/hacks/config/stairs.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="stairs" _label="Stairs" gl="yes">
+
+ <command arg="-root"/>
+
+ <video href="https://www.youtube.com/watch?v=Y1ceRT30qr0"/>
+
+ <number id="delay" type="slider" arg="-delay %"
+ _label="Frame rate" _low-label="Low" _high-label="High"
+ low="0" high="100000" default="20000"
+ convert="invert"/>
+
+ <boolean id="showfps" _label="Show frame rate" arg-set="-fps"/>
+
+ <xscreensaver-updater />
+
+ <_description>
+Escher's infinite staircase.
+
+https://en.wikipedia.org/wiki/Maurits_Cornelis_Escher
+
+Written by Marcelo Vianna and Jamie Zawinski; 1998.
+ </_description>
+</screensaver>
diff --git a/hacks/config/starfish.xml b/hacks/config/starfish.xml
new file mode 100644
index 0000000..006bc00
--- /dev/null
+++ b/hacks/config/starfish.xml
@@ -0,0 +1,43 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="starfish" _label="Starfish">
+
+ <command arg="-root"/>
+
+ <video href="https://www.youtube.com/watch?v=atwc7IJHuLo"/>
+
+ <select id="mode">
+ <option id="random" _label="Random"/>
+ <option id="zoom" _label="Color gradients" arg-set="-mode zoom"/>
+ <option id="blob" _label="Pulsating blob" arg-set="-mode blob"/>
+ </select>
+
+ <number id="delay" type="slider" arg="-delay %"
+ _label="Frame rate" _low-label="Low" _high-label="High"
+ low="0" high="100000" default="10000"
+ convert="invert"/>
+
+ <number id="duration" type="slider" arg="-duration %"
+ _label="Duration" _low-label="1 second" _high-label="30 seconds"
+ low="1" high="60" default="30"/>
+
+ <number id="thickness" type="slider" arg="-thickness %"
+ _label="Lines" _low-label="Thin" _high-label="Thick"
+ low="0" high="150" default="0"/>
+
+ <number id="ncolors" type="slider" arg="-colors %"
+ _label="Number of colors" _low-label="Two" _high-label="Many"
+ low="1" high="255" default="200"/>
+
+ <boolean id="showfps" _label="Show frame rate" arg-set="-fps"/>
+
+ <xscreensaver-updater />
+
+ <_description>
+Undulating, throbbing, star-like patterns pulsate, rotate, and turn
+inside out. Another display mode uses these shapes to lay down a
+field of colors, which are then cycled. The motion is very organic.
+
+Written by Jamie Zawinski; 1997.
+ </_description>
+</screensaver>
diff --git a/hacks/config/starwars.xml b/hacks/config/starwars.xml
new file mode 100644
index 0000000..caa005e
--- /dev/null
+++ b/hacks/config/starwars.xml
@@ -0,0 +1,63 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="starwars" _label="StarWars" gl="yes">
+
+ <command arg="-root"/>
+
+ <video href="https://www.youtube.com/watch?v=UUjC-6e7y_U"/>
+
+ <hgroup>
+ <vgroup>
+ <number id="delay" type="slider" arg="-delay %"
+ _low-label=" Frame rate Low" _high-label="High"
+ low="0" high="100000" default="40000"
+ convert="invert"/>
+ <number id="steps" type="slider" arg="-steps %"
+ _low-label="Scroll speed Slow" _high-label="Fast"
+ low="1" high="100" default="35"
+ convert="invert"/>
+ <number id="spin" type="slider" arg="-spin %"
+ _low-label=" Stars speed Slow" _high-label="Fast"
+ low="0.0" high="0.2" default="0.03"/>
+
+ <xscreensaver-text />
+ </vgroup>
+
+ <vgroup>
+ <select id="align">
+ <option id="left" _label="Flush left text" arg-set="-alignment left"/>
+ <option id="center" _label="Centered text"/>
+ <option id="right" _label="Flush right text" arg-set="-alignment right"/>
+ </select>
+
+ <boolean id="wrap" _label="Wrap long lines" arg-unset="-no-wrap"/>
+ <boolean id="texture" _label="Texture-mapped font" arg-unset="-no-textures"/>
+ <boolean id="smooth" _label="Anti-aliased lines" arg-unset="-no-smooth"/>
+ <hgroup>
+ <boolean id="thick" _label="Thick lines" arg-unset="-no-thick"/>
+ <boolean id="fade" _label="Fade out" arg-unset="-no-fade"/>
+ </hgroup>
+ <boolean id="showfps" _label="Show frame rate" arg-set="-fps"/>
+
+ <number id="lines" type="spinbutton" arg="-lines %"
+ _label="Text lines" low="4" high="1000" default="125"/>
+ <number id="size" type="spinbutton" arg="-size %"
+ _label="Font point size" low="-1" high="10" default="-1"/>
+ <number id="columns" type="spinbutton" arg="-columns %"
+ _label="or, Text columns" low="-1" high="200" default="-1"/>
+
+ </vgroup>
+ </hgroup>
+
+ <xscreensaver-updater />
+
+ <_description>
+A stream of text slowly scrolling into the distance at an
+angle, over a star field, like at the beginning of the movie of the
+same name.
+
+https://en.wikipedia.org/wiki/Star_Wars_opening_crawl
+
+Written by Jamie Zawinski and Claudio Matsuoka; 2001.
+ </_description>
+</screensaver>
diff --git a/hacks/config/stonerview.xml b/hacks/config/stonerview.xml
new file mode 100644
index 0000000..5db55f5
--- /dev/null
+++ b/hacks/config/stonerview.xml
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="stonerview" _label="StonerView" gl="yes">
+
+ <command arg="-root"/>
+
+ <video href="https://www.youtube.com/watch?v=xvDK_wwnXWs"/>
+
+ <number id="delay" type="slider" arg="-delay %"
+ _label="Frame rate" _low-label="Low" _high-label="High"
+ low="0" high="100000" default="20000"
+ convert="invert"/>
+
+ <boolean id="wire" _label="Wireframe" arg-set="-wireframe"/>
+ <boolean id="trans" _label="Translucent" arg-unset="-no-transparent"/>
+ <boolean id="showfps" _label="Show frame rate" arg-set="-fps"/>
+
+ <xscreensaver-updater />
+
+ <_description>
+Chains of colorful squares dance around each other in complex spiral
+patterns. Inspired by David Tristram's `electropaint' screen saver,
+originally written for SGI computers in the late 1980s or early 1990s.
+
+Written by Andrew Plotkin; 2001.
+ </_description>
+</screensaver>
diff --git a/hacks/config/strange.xml b/hacks/config/strange.xml
new file mode 100644
index 0000000..fcaeb63
--- /dev/null
+++ b/hacks/config/strange.xml
@@ -0,0 +1,58 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="strange" _label="Strange">
+
+ <command arg="-root"/>
+
+ <video href="https://www.youtube.com/watch?v=F1qna7UAxC0"/>
+
+ <hgroup>
+ <vgroup>
+ <number id="delay" type="slider" arg="-delay %"
+ _label="Frame rate" _low-label="Low" _high-label="High"
+ low="0" high="100000" default="10000"
+ convert="invert"/>
+
+ <number id="curve" type="slider" arg="-curve %"
+ _label="Curviness" _low-label="Low" _high-label="High"
+ low="1" high="50" default="10"/>
+
+ <number id="points" type="slider" arg="-points %"
+ _label="Number of points" _low-label="1k" _high-label="500k"
+ low="1000" high="500000" default="5500"/>
+
+ <number id="pointSize" type="slider" arg="-point-size %"
+ _label="Point size" _low-label="1" _high-label="8"
+ low="1" high="8" default="1"/>
+ </vgroup>
+ <vgroup>
+ <number id="zoom" type="slider" arg="-zoom %"
+ _label="Zoom" _low-label="10%" _high-label="400%"
+ low="0.1" high="4.0" default="0.9"/>
+
+ <number id="brightness" type="slider" arg="-brightness %"
+ _label="Brightness" _low-label="10%" _high-label="400%"
+ low="0.1" high="4.0" default="1.0"/>
+
+ <number id="motionBlur" type="slider" arg="-motion-blur %"
+ _label="Motion blur" _low-label="1" _high-label="10"
+ low="1.0" high="10.0" default="3.0"/>
+
+ <number id="ncolors" type="slider" arg="-ncolors %"
+ _label="Number of colors" _low-label="Two" _high-label="Many"
+ low="1" high="255" default="100"/>
+
+ <boolean id="showfps" _label="Show frame rate" arg-set="-fps"/>
+ </vgroup>
+ </hgroup>
+
+ <xscreensaver-updater />
+
+ <_description>
+Strange attractors: a swarm of dots swoops and twists around.
+
+https://en.wikipedia.org/wiki/Attractor#Strange_attractor
+
+Written by Massimino Pascal; 1997.
+ </_description>
+</screensaver>
diff --git a/hacks/config/substrate.xml b/hacks/config/substrate.xml
new file mode 100644
index 0000000..11e8ccc
--- /dev/null
+++ b/hacks/config/substrate.xml
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="substrate" _label="Substrate">
+
+ <command arg="-root"/>
+
+ <video href="https://www.youtube.com/watch?v=dCCVgBOVD0E"/>
+
+ <hgroup>
+ <vgroup>
+ <number id="speed" type="slider" arg="-growth-delay %"
+ _label="Frame rate" _low-label="Low" _high-label="High"
+ low="0" high="100000" default="18000" convert="invert"/>
+
+ <number id="maxcyc" type="slider" arg="-max-cycles %"
+ _label="Duration" _low-label="Short" _high-label="Long"
+ low="2000" high="25000" default="10000" />
+
+ <number id="sandg" type="slider" arg="-sand-grains %"
+ _label="Sand grains" _low-label="Few" _high-label="Lots"
+ low="16" high="128" default="64" />
+
+ <number id="curve" type="slider" arg="-circle-percent %"
+ _label="Circle percentage" _low-label="0%" _high-label="100%"
+ low="0" high="100" default="33" />
+ </vgroup>
+ <vgroup>
+ <number id="init" type="spinbutton" arg="-initial-cracks %"
+ _label="Initial cracks" low="3" high="15" default="3"/>
+
+ <boolean id="wire" _label="Wireframe only" arg-set="-wireframe" />
+
+ <boolean id="seamless" _label="Seamless mode" arg-set="-seamless" />
+
+ <boolean id="showfps" _label="Show frame rate" arg-set="-fps"/>
+ </vgroup>
+ </hgroup>
+
+ <xscreensaver-updater />
+
+ <_description>
+Crystalline lines grow on a computational substrate. A simple
+perpendicular growth rule creates intricate city-like structures.
+
+Written by J. Tarbell and Mike Kershaw; 2004.
+ </_description>
+</screensaver>
diff --git a/hacks/config/superquadrics.xml b/hacks/config/superquadrics.xml
new file mode 100644
index 0000000..642125c
--- /dev/null
+++ b/hacks/config/superquadrics.xml
@@ -0,0 +1,36 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="superquadrics" _label="Superquadrics" gl="yes">
+
+ <command arg="-root"/>
+
+ <video href="https://www.youtube.com/watch?v=Mjlc7iPA1N4"/>
+
+ <number id="delay" type="slider" arg="-delay %"
+ _label="Frame rate" _low-label="Low" _high-label="High"
+ low="0" high="100000" default="40000"
+ convert="invert"/>
+
+ <number id="spinspeed" type="slider" arg="-spinspeed %"
+ _label="Spin speed" _low-label="Slow" _high-label="Fast"
+ low="0.1" high="15.0" default="5.0"/>
+
+ <number id="count" type="slider" arg="-count %"
+ _label="Density" _low-label="Low" _high-label="High"
+ low="0" high="100" default="25"/>
+
+ <number id="cycles" type="slider" arg="-cycles %"
+ _label="Duration" _low-label="Short" _high-label="Long"
+ low="0" high="100" default="40"/>
+
+ <boolean id="wire" _label="Wireframe" arg-set="-wireframe"/>
+ <boolean id="showfps" _label="Show frame rate" arg-set="-fps"/>
+
+ <xscreensaver-updater />
+
+ <_description>
+Morphing 3D shapes.
+
+Written by Ed Mackey; 1987, 1997.
+ </_description>
+</screensaver>
diff --git a/hacks/config/surfaces.xml b/hacks/config/surfaces.xml
new file mode 100644
index 0000000..92a184a
--- /dev/null
+++ b/hacks/config/surfaces.xml
@@ -0,0 +1,75 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="surfaces" _label="Surfaces" gl="yes">
+
+ <command arg="-root"/>
+
+ <video href="https://www.youtube.com/watch?v=Q412lxz3fTg"/>
+
+ <hgroup>
+ <vgroup>
+ <number id="delay" type="slider" arg="-delay %"
+ _label="Frame rate" _low-label="Low" _high-label="High"
+ low="0" high="100000" default="20000"
+ convert="invert"/>
+
+ <number id="descent" type="slider" arg="-speed %"
+ _label="Duration" _low-label="Short" _high-label="Long"
+ low="2" high="2000" default="300"
+ convert="invert"/>
+ </vgroup>
+
+ <vgroup>
+ <select id="surface">
+ <option id="random" _label="Random Surface"/>
+ <option id="dini" _label="Dini's Surface" arg-set="-surface dini"/>
+ <option id="enneper" _label="Enneper's Surface" arg-set="-surface enneper"/>
+ <option id="kuen" _label="Kuen Surface" arg-set="-surface kuen"/>
+ <option id="moebius" _label="Moebius Strip" arg-set="-surface moebius"/>
+ <option id="seashell" _label="Seashell" arg-set="-surface seashell"/>
+ <option id="swallow" _label="Swallowtail" arg-set="-surface swallowtail"/>
+ <option id="bohemian" _label="Bohemian Dome" arg-set="-surface bohemian"/>
+ <option id="whitney" _label="Whitney Umbrella" arg-set="-surface whitney"/>
+ <option id="pluecker" _label="Pluecker's Conoid" arg-set="-surface pluecker"/>
+ <option id="henneberg" _label="Henneberg's Surface" arg-set="-surface henneberg"/>
+ <option id="catalan" _label="Catalan's Surface" arg-set="-surface catalan"/>
+ <option id="corkscrew" _label="Corkscrew Surface" arg-set="-surface corkscrew"/>
+ </select>
+
+ <select id="mode">
+ <option id="random" _label="Random Display Mode"/>
+ <option id="points" _label="Points" arg-set="-mode points"/>
+ <option id="lines" _label="Lines" arg-set="-mode lines"/>
+ <option id="line_loop" _label="Line Loops" arg-set="-mode line-loops"/>
+ </select>
+
+ <hgroup>
+ <boolean id="wander" _label="Wander" arg-set="-wander"/>
+ <boolean id="spin" _label="Spin" arg-unset="-no-spin"/>
+ <boolean id="showfps" _label="Show frame rate" arg-set="-fps"/>
+ </hgroup>
+ </vgroup>
+ </hgroup>
+
+ <xscreensaver-updater />
+
+ <_description>
+Parametric surfaces.
+
+http://mathworld.wolfram.com/DinisSurface.html
+https://en.wikipedia.org/wiki/Enneper_surface
+http://mathworld.wolfram.com/EnnepersMinimalSurface.html
+http://mathworld.wolfram.com/KuenSurface.html
+https://en.wikipedia.org/wiki/Moebius_strip
+http://mathworld.wolfram.com/Seashell.html
+http://mathworld.wolfram.com/SwallowtailCatastrophe.html
+http://mathworld.wolfram.com/BohemianDome.html
+https://en.wikipedia.org/wiki/Whitney_umbrella
+http://mathworld.wolfram.com/PlueckersConoid.html
+http://mathworld.wolfram.com/HennebergsMinimalSurface.html
+http://mathworld.wolfram.com/CatalansSurface.html
+http://mathworld.wolfram.com/CorkscrewSurface.html
+
+Written by Andrey Mirtchovski and Carsten Steger; 2003.
+ </_description>
+</screensaver>
diff --git a/hacks/config/swirl.xml b/hacks/config/swirl.xml
new file mode 100644
index 0000000..199bdb7
--- /dev/null
+++ b/hacks/config/swirl.xml
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="swirl" _label="Swirl">
+
+ <command arg="-root"/>
+
+ <video href="https://www.youtube.com/watch?v=o_VRQxPCB7w"/>
+
+ <number id="delay" type="slider" arg="-delay %"
+ _label="Frame rate" _low-label="Low" _high-label="High"
+ low="0" high="100000" default="10000"
+ convert="invert"/>
+
+ <number id="count" type="slider" arg="-count %"
+ _label="Count" _low-label="Few" _high-label="Many"
+ low="0" high="20" default="5"/>
+
+ <number id="ncolors" type="slider" arg="-ncolors %"
+ _label="Number of colors" _low-label="Two" _high-label="Many"
+ low="1" high="255" default="200"/>
+
+<!-- <boolean id="shm" _label="Use shared memory" arg-unset="-no-shm"/> -->
+
+ <boolean id="showfps" _label="Show frame rate" arg-set="-fps"/>
+
+ <xscreensaver-updater />
+
+ <_description>
+Flowing, swirly patterns.
+
+Written by M. Dobie and R. Taylor; 1997.
+ </_description>
+</screensaver>
diff --git a/hacks/config/t3d.xml b/hacks/config/t3d.xml
new file mode 100644
index 0000000..d1fd19b
--- /dev/null
+++ b/hacks/config/t3d.xml
@@ -0,0 +1,60 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="t3d" _label="T3D">
+
+ <command arg="-root"/>
+
+ <video href="https://www.youtube.com/watch?v=5UohH7U2CAI"/>
+
+ <hgroup>
+ <vgroup>
+ <number id="delay" type="slider" arg="-delay %"
+ _label="Frame rate" _low-label="Low" _high-label="High"
+ low="0" high="100000" default="40000"
+ convert="invert"/>
+
+ <number id="move" type="slider" arg="-move %"
+ _label="Turn side-to-side" _low-label="0 deg" _high-label="90 deg"
+ low="0.0" high="3.0" default="0.5"/>
+
+ <number id="wobble" type="slider" arg="-wobble %"
+ _label="Wobbliness" _low-label="Low" _high-label="High"
+ low="0.0" high="3.0" default="2.0"/>
+ </vgroup>
+
+ <vgroup>
+ <number id="cycle" type="slider" arg="-cycle %"
+ _label="Cycle seconds" _low-label="Low" _high-label="High"
+ low="0.0" high="60.0" default="10.0"/>
+
+ <number id="mag" type="slider" arg="-mag %"
+ _label="Magnification" _low-label="Smaller" _high-label="Bigger"
+ low="0.1" high="4.0" default="1.0"/>
+
+ <select id="mins">
+ <option id="min2" _label="Minute tick marks" arg-set="-minutes"/>
+ <option id="min5" _label="5 minute tick marks"/>
+ </select>
+
+ <boolean id="showfps" _label="Show frame rate" arg-set="-fps"/>
+
+ </vgroup>
+ </hgroup>
+
+ <!-- #### -fast [50] -->
+ <!-- #### -colcycle [?] -->
+ <!-- #### -hsvcycle [0.0] -->
+ <!-- #### -rgb [?] -->
+ <!-- #### -hsv [?] -->
+
+ <xscreensaver-updater />
+
+ <_description>
+This screen saver was removed from the XScreenSaver distribution as of
+version 5.08.
+
+Draws a working analog clock composed of floating, throbbing bubbles.
+
+Written by Bernd Paysan; 1999.
+ </_description>
+</screensaver>
diff --git a/hacks/config/tangram.xml b/hacks/config/tangram.xml
new file mode 100644
index 0000000..11b8f71
--- /dev/null
+++ b/hacks/config/tangram.xml
@@ -0,0 +1,45 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="tangram" _label="Tangram" gl="yes">
+
+ <command arg="-root"/>
+
+ <video href="https://www.youtube.com/watch?v=JgJ-OsgCCJ4"/>
+
+ <number id="delay" type="slider" arg="-delay %"
+ _label="Frame rate" _low-label="Low" _high-label="High"
+ low="0" high="100000" default="10000"/>
+
+ <number id="viewing_time" type="slider" arg="-viewing_time %"
+ _label="Linger" _low-label="Brief" _high-label="Long"
+ low="0" high="30" default="5" />
+
+ <number id="x_camera_rotate" type="slider" arg="-x_camera_rotate %"
+ _label="X rotation" _low-label="Slow" _high-label="Fast"
+ low="0.0" high="1.0" default="0.2" />
+
+ <number id="y_camera_rotate" type="slider" arg="-y_camera_rotate %"
+ _label="Y rotation" _low-label="Slow" _high-label="Fast"
+ low="0.0" high="1.0" default="0.5" />
+
+ <number id="z_camera_rotate" type="slider" arg="-z_camera_rotate %"
+ _label="Z rotation" _low-label="Slow" _high-label="Fast"
+ low="0.0" high="1.0" default="0" />
+
+ <hgroup>
+ <boolean id="labels" _label="Draw labels" arg-unset="-no-labels"/>
+ <boolean id="wire" _label="Wireframe" arg-set="-wireframe"/>
+ <boolean id="rotate" _label="Rotate" arg-unset="-no-rotate"/>
+ <boolean id="showfps" _label="Show frame rate" arg-set="-fps"/>
+ </hgroup>
+
+ <xscreensaver-updater />
+
+ <_description>
+Solves tangram puzzles.
+
+https://en.wikipedia.org/wiki/Tangram
+
+Written by Jeremy English; 2005.
+ </_description>
+</screensaver>
diff --git a/hacks/config/tessellimage.xml b/hacks/config/tessellimage.xml
new file mode 100644
index 0000000..f6e1a3c
--- /dev/null
+++ b/hacks/config/tessellimage.xml
@@ -0,0 +1,66 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="tessellimage" _label="Tessellimage">
+
+ <command arg="-root"/>
+
+ <video href="https://www.youtube.com/watch?v=JNgybysnYU8"/>
+
+ <hgroup>
+ <vgroup>
+ <number id="delay" type="slider" arg="-delay %"
+ _label="Frame rate" _low-label="Low" _high-label="High"
+ low="0" high="100000" default="30000"
+ convert="invert"/>
+
+ <number id="duration2" type="slider" arg="-duration2 %"
+ _label="Speed" _low-label="0.1 second" _high-label="4 seconds"
+ low="0.1" high="4.0" default="0.4"/>
+
+ <number id="duration" type="slider" arg="-duration %"
+ _label="Duration" _low-label="10 seconds" _high-label="10 minutes"
+ low="10" high="600" default="120"/>
+
+ <number id="depth" type="slider" arg="-max-depth %"
+ _label="Complexity" _low-label="Shallow" _high-label="Deep"
+ low="1000" high="100000" default="30000"/>
+ </vgroup>
+
+ <vgroup>
+
+ <select id="mode">
+ <option id="random" _label="Delaunay or voronoi"/>
+ <option _label="Delaunay" arg-set="-mode delaunay"/>
+ <option _label="Voronoi" arg-set="-mode voronoi"/>
+ </select>
+
+ <xscreensaver-image />
+
+ <boolean id="fill" _label="Fill screen" arg-unset="-no-fill-screen"/>
+ <boolean id="outline" _label="Outline triangles" arg-unset="-no-outline"/>
+ <boolean id="showfps" _label="Show frame rate" arg-set="-fps"/>
+
+ <xscreensaver-updater />
+ </vgroup>
+ </hgroup>
+
+ <_description>
+Converts an image to triangles using Delaunay tessellation, or to
+polygons using Voronoi tesselation, and animates the result at
+various depths.
+
+More polygons are allocated to visually complex parts of the image.
+This is accomplished by first computing the first derivative of the
+image: the distance between each pixel and its neighbors (which is
+essentially edge detection or embossing). Then the Delaunay or
+Voronoi control points are chosen by selecting those pixels whose
+distance value is above a certain threshold: those are the pixels that
+have the largest change in color/brightness.
+
+https://en.wikipedia.org/wiki/Delaunay_triangulation
+https://en.wikipedia.org/wiki/Voronoi_diagram
+https://en.wikipedia.org/wiki/Tessellation
+
+Written by Jamie Zawinski; 2014.
+ </_description>
+</screensaver>
diff --git a/hacks/config/testx11.xml b/hacks/config/testx11.xml
new file mode 100644
index 0000000..aaf85a7
--- /dev/null
+++ b/hacks/config/testx11.xml
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<screensaver name="testx11" _label="TestX11">
+
+ <command arg="-root"/>
+
+ <boolean id="showfps" _label="Show frame rate" arg-set="-fps"/>
+
+ <xscreensaver-updater />
+
+ <_description>
+Test platform for JWXYZ - the X11 compatibility shim for OS X and iOS.
+End users shouldn't normally see this one.
+
+Written by Dave Odell; 2015.
+ </_description>
+</screensaver>
diff --git a/hacks/config/thornbird.xml b/hacks/config/thornbird.xml
new file mode 100644
index 0000000..8bbd1ab
--- /dev/null
+++ b/hacks/config/thornbird.xml
@@ -0,0 +1,37 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="thornbird" _label="Thornbird">
+
+ <command arg="-root"/>
+
+ <video href="https://www.youtube.com/watch?v=rfGfPezVnac"/>
+
+ <number id="delay" type="slider" arg="-delay %"
+ _label="Frame rate" _low-label="Low" _high-label="High"
+ low="0" high="100000" default="10000"
+ convert="invert"/>
+
+ <number id="count" type="slider" arg="-count %"
+ _label="Points" _low-label="Few" _high-label="Many"
+ low="10" high="1000" default="100"/>
+
+ <number id="cycles" type="slider" arg="-cycles %"
+ _label="Thickness" _low-label="Thin" _high-label="Thick"
+ low="2" high="1000" default="400"/>
+
+<!--
+ <number id="ncolors" type="slider" arg="-ncolors %"
+ _label="Number of colors" _low-label="Two" _high-label="Many"
+ low="2" high="255" default="64"/>
+-->
+
+ <boolean id="showfps" _label="Show frame rate" arg-set="-fps"/>
+
+ <xscreensaver-updater />
+
+ <_description>
+Displays a view of the "Bird in a Thornbush" fractal.
+
+Written by Tim Auckland; 2002.
+ </_description>
+</screensaver>
diff --git a/hacks/config/timetunnel.xml b/hacks/config/timetunnel.xml
new file mode 100644
index 0000000..caab9fc
--- /dev/null
+++ b/hacks/config/timetunnel.xml
@@ -0,0 +1,42 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="timetunnel" _label="TimeTunnel" gl="yes">
+
+ <command arg="-root"/>
+
+ <video href="https://www.youtube.com/watch?v=GZe5rk_7TnA"/>
+
+ <number id="start" type="slider" arg="-start %"
+ _label="Start sequence time" _low-label="0 sec" _high-label="30 sec"
+ low="0.00" high="27.79" default="0.00"/>
+
+ <number id="end" type="slider" arg="-end %"
+ _label="End sequence time" _low-label="0 sec" _high-label="30 sec"
+ low="0.00" high="27.79" default="27.79"/>
+
+ <hgroup>
+ <vgroup>
+ <boolean id="logo" _label="Draw logo" arg-unset="-no-logo"/>
+ <boolean id="reverse" _label="Run backward" arg-set="-reverse"/>
+ <boolean id="showfps" _label="Show frame rate" arg-set="-fps"/>
+ </vgroup>
+ <vgroup>
+<!--
+ <string id="tardis" _label="Tardis image " arg="-tardis %"/>
+ <string id="head" _label="Head image " arg="-head %"/>
+ <string id="marquee" _label="Marquee image " arg="-marquee %"/>
+ <string id="tun1" _label="Tardis tunnel image " arg="-tun1 %"/>
+ <string id="tun2" _label="Middle tunnel image" arg="-tun2 %"/>
+ <string id="tun3" _label="Final tunnel image " arg="-tun3 %"/>
+-->
+ </vgroup>
+ </hgroup>
+
+ <xscreensaver-updater />
+
+ <_description>
+An animation similar to the title sequence of Dr. Who in the 70s.
+
+Written by Sean P. Brennan; 2005.
+ </_description>
+</screensaver>
diff --git a/hacks/config/topblock.xml b/hacks/config/topblock.xml
new file mode 100644
index 0000000..df498bc
--- /dev/null
+++ b/hacks/config/topblock.xml
@@ -0,0 +1,64 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="topblock" _label="TopBlock" gl="yes">
+
+ <command arg="-root"/>
+
+ <video href="https://www.youtube.com/watch?v=zj0FHFJgQJ8"/>
+
+ <hgroup>
+ <vgroup>
+ <number id="delay" type="slider" arg="-delay %"
+ _label="Frame rate" _low-label="Low" _high-label="High"
+ low="0" high="100000" default="10000"
+ convert="invert"/>
+
+ <number id="dropspeed" type="slider" arg="-dropSpeed %"
+ _label="Drop speed" _low-label="Slow" _high-label="Fast"
+ low="1" high="9" default="4"/>
+
+ <number id="size" type="slider" arg="-size %"
+ _label="Carpet size" _low-label="Small" _high-label="Large"
+ low="1" high="10" default="2"/>
+
+ <number id="spawn" type="slider" arg="-spawn %"
+ _label="Spawn likelyhood" _low-label="Low" _high-label="High"
+ low="4" high="1000" default="50"
+ convert="invert"/>
+
+ </vgroup>
+ <vgroup>
+ <number id="resolution" type="slider" arg="-resolution %"
+ _label="Polygon count" _low-label="Low" _high-label="High"
+ low="4" high="20" default="4"/>
+
+ <number id="maxColors" type="slider" arg="-maxColors %"
+ _label="Colors" _low-label="Few" _high-label="Many"
+ low="1" high="32" default="7"/>
+
+ <number id="rotatespeed" type="slider" arg="-rotateSpeed %"
+ _label="Rotation" _low-label="Slow" _high-label="Fast"
+ low="1" high="1000" default="10"/>
+ </vgroup>
+ </hgroup>
+
+ <hgroup>
+ <boolean id="rotate" _label="Rotate" arg-unset="-no-rotate"/>
+ <boolean id="follow" _label="Follow" arg-set="-follow"/>
+ <boolean id="blob" _label="Blob mode" arg-set="-blob"/>
+ <boolean id="override" _label="Tunnel mode" arg-set="-override"/>
+ <boolean id="carpet" _label="Carpet" arg-unset="-no-carpet"/>
+ </hgroup>
+ <hgroup>
+ <boolean id="nipples" _label="Nipples" arg-unset="-no-nipples"/>
+ <boolean id="wire" _label="Wireframe" arg-set="-wireframe"/>
+ <boolean id="showfps" _label="Show frame rate" arg-set="-fps"/>
+ </hgroup>
+
+ <xscreensaver-updater />
+
+ <_description>
+Creates a 3D world with dropping blocks that build up and up.
+Written by rednuht; 2006.
+ </_description>
+</screensaver>
diff --git a/hacks/config/triangle.xml b/hacks/config/triangle.xml
new file mode 100644
index 0000000..70d9949
--- /dev/null
+++ b/hacks/config/triangle.xml
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="triangle" _label="Triangle">
+
+ <command arg="-root"/>
+
+ <video href="https://www.youtube.com/watch?v=GXrzjY-Flro"/>
+
+ <number id="delay" type="slider" arg="-delay %"
+ _label="Frame rate" _low-label="Low" _high-label="High"
+ low="0" high="100000" default="10000"
+ convert="invert"/>
+
+ <number id="ncolors" type="slider" arg="-ncolors %"
+ _label="Number of colors" _low-label="Two" _high-label="Many"
+ low="1" high="255" default="128"/>
+
+ <boolean id="showfps" _label="Show frame rate" arg-set="-fps"/>
+
+ <xscreensaver-updater />
+
+ <_description>
+Generates random mountain ranges using iterative subdivision of
+triangles.
+
+Written by Tobias Gloth; 1997.
+ </_description>
+</screensaver>
diff --git a/hacks/config/tronbit.xml b/hacks/config/tronbit.xml
new file mode 100644
index 0000000..965d333
--- /dev/null
+++ b/hacks/config/tronbit.xml
@@ -0,0 +1,41 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="tronbit" _label="TronBit" gl="yes">
+
+ <command arg="-root"/>
+
+ <video href="https://www.youtube.com/watch?v=dIF4fodt-L8"/>
+
+ <number id="delay" type="slider" arg="-delay %"
+ _label="Frame rate" _low-label="Low" _high-label="High"
+ low="0" high="100000" default="30000"
+ convert="invert"/>
+
+ <number id="speed" type="slider" arg="-speed %"
+ _label="Animation speed" _low-label="Slow" _high-label="Fast"
+ low="0.05" high="10.0" default="1.0"/>
+
+ <hgroup>
+ <boolean id="spin" _label="Spin" arg-unset="-no-spin"/>
+ <boolean id="wander" _label="Wander" arg-unset="-no-wander"/>
+ <boolean id="wire" _label="Wireframe" arg-set="-wireframe"/>
+ <boolean id="showfps" _label="Show frame rate" arg-set="-fps"/>
+ </hgroup>
+
+ <xscreensaver-updater />
+
+ <_description>
+The character "Bit" from the film, "Tron".
+
+The "yes" state is a tetrahedron; the "no" state is the second
+stellation of an icosahedron; and the idle state oscillates between
+a small triambic icosahedron and the compound of an icosahedron and
+a dodecahedron.
+
+https://en.wikipedia.org/wiki/List_of_Tron_characters#Bit
+https://en.wikipedia.org/wiki/Uniform_polyhedra
+https://en.wikipedia.org/wiki/Stellation
+
+Written by Jamie Zawinski; 2011.
+ </_description>
+</screensaver>
diff --git a/hacks/config/truchet.xml b/hacks/config/truchet.xml
new file mode 100644
index 0000000..c20a3f8
--- /dev/null
+++ b/hacks/config/truchet.xml
@@ -0,0 +1,41 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="truchet" _label="Truchet">
+
+ <command arg="-root"/>
+
+ <video href="https://www.youtube.com/watch?v=hoJ23JSsUD8"/>
+
+ <number id="delay" type="slider" arg="-delay %"
+ _label="Frame rate" _low-label="Low" _high-label="High"
+ low="0" high="1000000" default="400000"
+ convert="invert"/>
+
+ <!-- #### -min-width [40] -->
+ <!-- #### -max-height [150] -->
+ <!-- #### -max-width [150] -->
+ <!-- #### -min-height [40] -->
+ <!-- #### -max-linewidth [25] -->
+ <!-- #### -min-linewidth [2] -->
+ <!-- #### -no-erase -->
+ <!-- #### -erase-count [25] -->
+ <!-- #### -not-square -->
+ <!-- #### -no-angles -->
+ <!-- #### -no-curves -->
+ <!-- #### -scroll -->
+ <!-- #### -scroll-overlap [400] -->
+ <!-- #### -anim-delay [100] -->
+ <!-- #### -anim-step-size [3] -->
+
+ <boolean id="showfps" _label="Show frame rate" arg-set="-fps"/>
+
+ <xscreensaver-updater />
+
+ <_description>
+Line- and arc-based truchet patterns that tile the screen.
+
+https://en.wikipedia.org/wiki/Tessellation
+
+Written by Adrian Likins; 1998.
+ </_description>
+</screensaver>
diff --git a/hacks/config/twang.xml b/hacks/config/twang.xml
new file mode 100644
index 0000000..3eefded
--- /dev/null
+++ b/hacks/config/twang.xml
@@ -0,0 +1,61 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="twang" _label="Twang">
+
+ <command arg="-root"/>
+
+ <video href="https://www.youtube.com/watch?v=7pxDMSduQoU"/>
+
+ <hgroup>
+ <vgroup>
+
+ <number id="delay" type="slider" arg="-delay %"
+ _label="Frame rate" _low-label="Low" _high-label="High"
+ low="0" high="100000" default="10000"
+ convert="invert"/>
+
+ <number id="duration" type="slider" arg="-duration %"
+ _label="Duration" _low-label="10 seconds" _high-label="10 minutes"
+ low="10" high="600" default="120"/>
+
+ <number id="event-chance" type="slider" arg="-event-chance %"
+ _label="Randomness" _low-label="Slow" _high-label="Jumpy"
+ low="0.0" high="0.1" default="0.01"/>
+
+ <number id="friction" type="slider" arg="-friction %"
+ _label="Friction" _low-label="Low" _high-label="High"
+ low="0.0" high="0.2" default="0.05"/>
+
+ </vgroup>
+ <vgroup>
+
+ <number id="springiness" type="slider" arg="-springiness %"
+ _label="Springiness" _low-label="Low" _high-label="High"
+ low="0.0" high="1.0" default="0.1"/>
+
+ <number id="transference" type="slider" arg="-transference %"
+ _label="Transference" _low-label="Low" _high-label="High"
+ low="0.0" high="0.1" default="0.025"/>
+
+ <number id="tile-size" type="slider" arg="-tile-size %"
+ _label="Tile size" _low-label="Small" _high-label="Large"
+ low="10" high="512" default="120"/>
+
+ <number id="border-width" type="spinbutton" arg="-border-width %"
+ _label="Border width" low="0" high="20" default="3"/>
+
+ <boolean id="showfps" _label="Show frame rate" arg-set="-fps"/>
+
+ </vgroup>
+ </hgroup>
+
+ <xscreensaver-image />
+
+ <xscreensaver-updater />
+
+ <_description>
+Divides the screen into a grid, and plucks them.
+
+Written by Dan Bornstein; 2002.
+ </_description>
+</screensaver>
diff --git a/hacks/config/unicrud.xml b/hacks/config/unicrud.xml
new file mode 100644
index 0000000..327e033
--- /dev/null
+++ b/hacks/config/unicrud.xml
@@ -0,0 +1,44 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="unicrud" _label="Unicrud" gl="yes">
+
+ <command arg="-root"/>
+
+ <video href="https://www.youtube.com/watch?v=prEzdYMZ7xA"/>
+
+ <number id="delay" type="slider" arg="-delay %"
+ _label="Frame rate" _low-label="Low" _high-label="High"
+ low="0" high="100000" default="20000"
+ convert="invert"/>
+
+ <number id="speed" type="slider" arg="-speed %"
+ _label="Animation speed" _low-label="Slow" _high-label="Fast"
+ low="0.05" high="10.0" default="1.0"/>
+
+ <hgroup>
+ <boolean id="wander" _label="Wander" arg-unset="-no-wander"/>
+ <boolean id="spin" _label="Spin" arg-unset="-no-spin"/>
+ <boolean id="showfps" _label="Show frame rate" arg-set="-fps"/>
+ <boolean id="titles" _label="Show titles" arg-unset="-no-titles"/>
+ </hgroup>
+
+ <select id="block">
+ <option _label="Display everything"/>
+ <option _label="Display Latin1" arg-set="-block Latin1,Latin_Extended-A,Latin_Extended-B,Spacing_Modifier_Letters"/>
+ <option _label="Display simple characters" arg-set="-block Latin1,Latin_Extended-A,Latin_Extended-B,Spacing_Modifier_Letters,Phonetic_Extensions,Latin_Extended_Additional,Greek_Extended,General_Punctuation,Superscripts_and_Subscripts,Currency_Symbols,Letterlike_Symbols,Number_Forms"/>
+ <option _label="Display mathematical symbols" arg-set="-block Greek_and_Coptic,Mathematical_Operators,Miscellaneous_Mathematical_Symbols-A,Supplemental_Arrows-A,Supplemental_Arrows-B,Miscellaneous_Mathematical_Symbols-B,Supplemental_Mathematical_Operators,Miscellaneous_Symbols_and_Arrows"/>
+ <option _label="Display emoticons" arg-set="-block Currency_Symbols,Miscellaneous_Technical,Box_Drawing,Geometric_Shapes,Miscellaneous_Symbols,Dingbats,Mahjong_Tiles,Domino_Tiles,Playing_Cards,Miscellaneous_Symbols_and_Pictographs,Emoticons,Ornamental_Dingbats,Transport_and_Map_Symbols,Alchemical_Symbols,Geometric_Shapes_Extended,Supplemental_Symbols_and_Pictographs,Egyptian_Hieroglyphs"/>
+ <option _label="Display hieroglyphs" arg-set="-block Egyptian_Hieroglyphs"/>
+ </select>
+
+ <xscreensaver-updater />
+
+ <_description>
+Chooses a random Unicode character and displays it full screen,
+along with some information about it.
+
+https://en.wikipedia.org/wiki/Unicode
+
+Written by Jamie Zawinski; 2016.
+ </_description>
+</screensaver>
diff --git a/hacks/config/unknownpleasures.xml b/hacks/config/unknownpleasures.xml
new file mode 100644
index 0000000..7ef79ac
--- /dev/null
+++ b/hacks/config/unknownpleasures.xml
@@ -0,0 +1,57 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="unknownpleasures" _label="UnknownPleasures" gl="yes">
+
+ <command arg="-root"/>
+
+ <video href="https://www.youtube.com/watch?v=vuWhUxBq99E"/>
+
+ <hgroup>
+ <vgroup>
+ <number id="delay" type="slider" arg="-delay %"
+ _label="Frame rate" _low-label="Low" _high-label="High"
+ low="0" high="100000" default="30000"
+ convert="invert"/>
+
+ <number id="count" type="slider" arg="-count %"
+ _label="Scanlines" _low-label="Few" _high-label="Many"
+ low="3" high="200" default="80"/>
+ </vgroup>
+
+ <vgroup>
+ <number id="speed" type="slider" arg="-speed %"
+ _label="Speed" _low-label="Slow" _high-label="Fast"
+ low="0.1" high="3.0" default="1.0"/>
+
+ <number id="resolution" type="slider" arg="-resolution %"
+ _label="Resolution" _low-label="Low" _high-label="High"
+ low="5" high="300" default="100"/>
+ </vgroup>
+ </hgroup>
+
+ <hgroup>
+ <boolean id="ortho" _label="Orthographic Projection" arg-unset="-no-ortho"/>
+ <boolean id="wire" _label="Wireframe" arg-set="-wireframe"/>
+ <boolean id="showfps" _label="Show frame rate" arg-set="-fps"/>
+ </hgroup>
+
+ <xscreensaver-updater />
+
+ <_description>
+PSR B1919+21 (AKA CP 1919) was the first pulsar ever discovered:
+a spinning neutron star emitting a periodic lighthouse-like beacon.
+An illustration of the signal received from it was published in
+Scientific American in 1971, and later in The Cambridge Encyclopedia
+of Astronomy in 1977, where it was seen by Stephen Morris, the
+drummer of Joy Division, and was consequently appropriated by
+Peter Saville for the cover of the band's album "Unknown Pleasures".
+
+https://en.wikipedia.org/wiki/Pulsar
+https://en.wikipedia.org/wiki/PSR_B1919%2B21
+https://en.wikipedia.org/wiki/Unknown_Pleasures
+https://en.wikipedia.org/wiki/Peter_Saville_%28graphic_designer%29
+https://en.wikipedia.org/wiki/Joy_Division
+
+Written by Jamie Zawinski; 2013.
+ </_description>
+</screensaver>
diff --git a/hacks/config/vermiculate.xml b/hacks/config/vermiculate.xml
new file mode 100644
index 0000000..7d82ab0
--- /dev/null
+++ b/hacks/config/vermiculate.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="vermiculate" _label="Vermiculate">
+
+ <command arg="-root"/>
+
+ <video href="https://www.youtube.com/watch?v=YSg9KY-qw5o"/>
+
+ <number id="speed" type="slider" arg="-speed %"
+ _label="Duration" _low-label="Short" _high-label="Long"
+ low="1" high="1000" default="1" />
+
+ <boolean id="showfps" _label="Show frame rate" arg-set="-fps"/>
+
+ <xscreensaver-updater />
+
+ <_description>
+Squiggly worm-like paths.
+
+Written by Tyler Pierce; 2001.
+ </_description>
+</screensaver>
diff --git a/hacks/config/vfeedback.xml b/hacks/config/vfeedback.xml
new file mode 100644
index 0000000..2accd19
--- /dev/null
+++ b/hacks/config/vfeedback.xml
@@ -0,0 +1,39 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="vfeedback" _label="VFeedback">
+
+ <command arg="-root"/>
+
+ <video href="https://www.youtube.com/watch?v=I_MkW0CW4QM"/>
+
+ <hgroup>
+ <vgroup>
+ <number id="tvcolor" type="slider" arg="-tv-color %"
+ _label="Color Knob" _low-label="Low" _high-label="High"
+ low="0" high="400" default="70"/>
+ <number id="tvtint" type="slider" arg="-tv-tint %"
+ _label="Tint Knob" _low-label="Low" _high-label="High"
+ low="0" high="360" default="5"/>
+ <number id="noise" type="slider" arg="-noise %"
+ _label="Noise" _low-label="Low" _high-label="High"
+ low="0.0" high="0.2" default="0.02"/>
+ </vgroup>
+ <vgroup>
+ <number id="tvbrightness" type="slider" arg="-tv-brightness %"
+ _label="Brightness Knob" _low-label="Low" _high-label="High"
+ low="-75.0" high="100.0" default="1.5"/>
+ <number id="tvcontrast" type="slider" arg="-tv-contrast %"
+ _label="Contrast Knob" _low-label="Low" _high-label="High"
+ low="0" high="500" default="150"/>
+ <boolean id="showfps" _label="Show frame rate" arg-set="-fps"/>
+ </vgroup>
+ </hgroup>
+
+ <xscreensaver-updater />
+
+ <_description>
+Simulates video feedback: pointing a video camera at an NTSC television.
+
+Written by Jamie Zawinski; 2018.
+ </_description>
+</screensaver>
diff --git a/hacks/config/vidwhacker.xml b/hacks/config/vidwhacker.xml
new file mode 100644
index 0000000..e1fade1
--- /dev/null
+++ b/hacks/config/vidwhacker.xml
@@ -0,0 +1,32 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="vidwhacker" _label="VidWhacker">
+
+ <command arg="-root"/>
+
+ <video href="https://www.youtube.com/watch?v=u8esWjcR4eI"/>
+
+ <number id="delay" type="slider" arg="-delay %"
+ _label="Duration" _low-label="2 seconds" _high-label="2 minutes"
+ low="2" high="120" default="5"/>
+
+ <file id="directory" _label="Image directory" arg="-directory %"/>
+
+ <boolean id="showfps" _label="Show frame rate" arg-set="-fps"/>
+
+ <xscreensaver-updater />
+
+ <_description>
+Displays a distorted frame video.
+
+This is a shell script that grabs a frame of video from the system's
+video input, and then uses some PBM filters (chosen at random) to
+manipulate and recombine the video frame in various ways (edge
+detection, subtracting the image from a rotated version of itself,
+etc.) Then it displays that image for a few seconds, and does it
+again. This works really well if you just feed broadcast television
+into it.
+
+Written by Jamie Zawinski; 1998.
+ </_description>
+</screensaver>
diff --git a/hacks/config/vigilance.xml b/hacks/config/vigilance.xml
new file mode 100644
index 0000000..ea9962e
--- /dev/null
+++ b/hacks/config/vigilance.xml
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="vigilance" _label="Vigilance" gl="yes">
+
+ <command arg="-root"/>
+
+ <video href="https://www.youtube.com/watch?v=b7y35gr3WZ0"/>
+
+ <number id="delay" type="slider" arg="-delay %"
+ _label="Frame rate" _low-label="Low" _high-label="High"
+ low="0" high="100000" default="20000"
+ convert="invert"/>
+
+ <number id="speed" type="slider" arg="-speed %"
+ _label="Speed" _low-label="Slow" _high-label="Fast"
+ low="0.01" high="8.0" default="1.0"/>
+
+ <number id="count" type="slider" arg="-count %"
+ _label="Number of cameras" _low-label="One" _high-label="Lots"
+ low="1" high="30" default="5"/>
+
+ <xscreensaver-updater />
+
+ <_description>
+Security cameras keep careful track of their surroundings.
+You can trust them. Everything is completely under control.
+
+Written by Jamie Zawinski; 2017.
+ </_description>
+</screensaver>
diff --git a/hacks/config/vines.xml b/hacks/config/vines.xml
new file mode 100644
index 0000000..0299d77
--- /dev/null
+++ b/hacks/config/vines.xml
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="vines" _label="Vines">
+
+ <command arg="-root"/>
+
+ <video href="https://www.youtube.com/watch?v=IaVfFCIAUn8"/>
+
+ <number id="delay" type="slider" arg="-delay %"
+ _label="Frame rate" _low-label="Low" _high-label="High"
+ low="0" high="250000" default="200000"
+ convert="invert"/>
+
+ <number id="ncolors" type="slider" arg="-ncolors %"
+ _label="Number of colors" _low-label="Two" _high-label="Many"
+ low="1" high="255" default="64"/>
+
+ <boolean id="showfps" _label="Show frame rate" arg-set="-fps"/>
+
+ <xscreensaver-updater />
+
+ <_description>
+This screen saver was removed from the XScreenSaver distribution as of
+version 5.08.
+
+Generates a continuous sequence of small, curvy geometric patterns.
+
+Written by Tracy Camp and David Hansen; 1997.
+ </_description>
+</screensaver>
diff --git a/hacks/config/voronoi.xml b/hacks/config/voronoi.xml
new file mode 100644
index 0000000..9e0ef2e
--- /dev/null
+++ b/hacks/config/voronoi.xml
@@ -0,0 +1,63 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="voronoi" _label="Voronoi" gl="yes">
+
+ <command arg="-root"/>
+
+ <video href="https://www.youtube.com/watch?v=hD_8cBvknUM"/>
+
+ <hgroup>
+ <vgroup>
+ <number id="delay" type="slider" arg="-delay %"
+ _label="Frame rate" _low-label="Slow" _high-label="Fast"
+ low="0" high="100000" default="20000"
+ convert="invert"/>
+
+ <number id="points" type="slider" arg="-points %"
+ _label="Points" _low-label="Few" _high-label="Many"
+ low="1" high="100" default="25"/>
+
+ <number id="pointSize" type="slider" arg="-point-size %"
+ _label="Point size" _low-label="0" _high-label="50 pixels"
+ low="0" high="50" default="9"/>
+
+ <boolean id="showfps" _label="Show frame rate" arg-set="-fps"/>
+ </vgroup>
+
+ <vgroup>
+ <number id="pointSpeed" type="slider" arg="-point-speed %"
+ _label="Wander speed" _low-label="Slow" _high-label="Fast"
+ low="0.0" high="10.0" default="1.0"/>
+
+ <number id="pointDelay" type="slider" arg="-point-delay %"
+ _label="Insertion speed" _low-label="Slow" _high-label="Fast"
+ low="0.0" high="3.0" default="0.05"
+ convert="invert"/>
+
+ <number id="zoomSpeed" type="slider" arg="-zoom-speed %"
+ _label="Zoom speed" _low-label="Slow" _high-label="Fast"
+ low="0.1" high="10.0" default="1.0"/>
+
+ <number id="zoomDelay" type="slider" arg="-zoom-delay %"
+ _label="Zoom frequency" _low-label="0" _high-label="60 seconds"
+ low="0" high="60" default="15"/>
+ </vgroup>
+ </hgroup>
+
+ <xscreensaver-updater />
+
+ <_description>
+A Voronoi tessellation. Periodically zooms in and adds new points.
+The existing points also wander around.
+
+There are a set of control points on the plane, each at the center of
+a colored cell. Every pixel within that cell is closer to that cell's
+control point than to any other control point. That is what
+determines the cell's shapes.
+
+https://en.wikipedia.org/wiki/Voronoi_diagram
+https://en.wikipedia.org/wiki/Tessellation
+
+Written by Jamie Zawinski; 2007.
+ </_description>
+</screensaver>
diff --git a/hacks/config/wander.xml b/hacks/config/wander.xml
new file mode 100644
index 0000000..ad72fe8
--- /dev/null
+++ b/hacks/config/wander.xml
@@ -0,0 +1,55 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="wander" _label="Wander">
+
+ <command arg="-root"/>
+
+ <video href="https://www.youtube.com/watch?v=2ZZC46Z9wJE"/>
+
+ <hgroup>
+ <vgroup>
+ <number id="delay" type="slider" arg="-delay %"
+ _label="Frame rate" _low-label="Low" _high-label="High"
+ low="0" high="100000" default="20000"
+ convert="invert"/>
+
+ <number id="density" type="slider" arg="-density %"
+ _label="Density" _low-label="Low" _high-label="High"
+ low="1" high="30" default="2"
+ convert="invert"/>
+
+ <number id="reset" type="slider" arg="-reset %"
+ _label="Duration" _low-label="Short" _high-label="Long"
+ low="10000" high="3000000" default="2500000"/>
+ </vgroup>
+
+ <vgroup>
+ <number id="length" type="slider" arg="-length %"
+ _label="Length" _low-label="Short" _high-label="Long"
+ low="100" high="100000" default="25000"/>
+
+ <number id="advance" type="slider" arg="-advance %"
+ _label="Color contrast" _low-label="Low" _high-label="High"
+ low="1" high="100" default="1"/>
+
+ <hgroup>
+ <boolean id="circles" _label="Draw spots" arg-set="-circles"/>
+
+ <number id="size" type="spinbutton" arg="-size %"
+ _label="Size" low="0" high="100" default="1"/>
+ </hgroup>
+
+ <boolean id="showfps" _label="Show frame rate" arg-set="-fps"/>
+ </vgroup>
+ </hgroup>
+
+ <xscreensaver-updater />
+
+ <_description>
+A colorful random-walk.
+
+https://en.wikipedia.org/wiki/Random_walk
+
+Written by Rick Campbell; 1999.
+ </_description>
+</screensaver>
diff --git a/hacks/config/webcollage.xml b/hacks/config/webcollage.xml
new file mode 100644
index 0000000..c26ea98
--- /dev/null
+++ b/hacks/config/webcollage.xml
@@ -0,0 +1,56 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="webcollage" _label="WebCollage">
+
+ <command arg="-root"/>
+
+ <video href="https://www.youtube.com/watch?v=u8esWjcR4eI"/>
+
+ <hgroup>
+ <vgroup>
+ <number id="delay" type="slider" arg="-delay %"
+ _label="Delay between images" _low-label="None" _high-label="30 secs"
+ low="0" high="30" default="2"/>
+
+ <number id="timeout" type="slider" arg="-timeout %"
+ _label="Network timeout" _low-label="2 secs" _high-label="2 min"
+ low="2" high="120" default="30"/>
+ </vgroup>
+ <vgroup>
+ <number id="opacity" type="slider" arg="-opacity %"
+ _label="Image opacity" _low-label="Transparent" _high-label="Opaque"
+ low="0.1" high="1.0" default="0.85"/>
+
+ <boolean id="showfps" _label="Show frame rate" arg-set="-fps"/>
+
+ </vgroup>
+ </hgroup>
+
+<!--
+ <string id="filter" _label="Per-image filter program" arg="-filter %"/>
+ <string id="filter2" _label="Overall filter program" arg="-filter2 %"/>
+ <file id="dictionary" _label="Dictionary file" arg="-dictionary %"/>
+ <file id="dir" _label="Image directory" arg="-directory %"/>
+ -->
+
+ <xscreensaver-updater />
+
+ <_description>
+This is what the Internet looks like.
+
+This creates collages out of random images from the World Wide Web.
+It finds the images by feeding random words into various search
+engines, and pulling images (or sections of images) out of the pages
+returned.
+
+WARNING: THE INTERNET SOMETIMES CONTAINS PORNOGRAPHY.
+
+The Internet being what it is, absolutely anything might show up in the
+collage including -- quite possibly -- pornography, or even nudity.
+Please act accordingly.
+
+See also https://www.jwz.org/webcollage/
+
+Written by Jamie Zawinski; 1999.
+ </_description>
+</screensaver>
diff --git a/hacks/config/whirlwindwarp.xml b/hacks/config/whirlwindwarp.xml
new file mode 100644
index 0000000..7cd774e
--- /dev/null
+++ b/hacks/config/whirlwindwarp.xml
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="whirlwindwarp" _label="WhirlWindWarp">
+
+ <command arg="-root"/>
+
+ <video href="https://www.youtube.com/watch?v=eWrRhSYzimY"/>
+
+ <number id="points" type="slider" arg="-points %"
+ _label="Particles" _low-label="Few" _high-label="Many"
+ low="10" high="1000" default="400"/>
+
+ <number id="tails" type="slider" arg="-tails %"
+ _label="Trail size" _low-label="Short" _high-label="Long"
+ low="1" high="50" default="8"/>
+
+ <boolean id="showfps" _label="Show frame rate" arg-set="-fps"/>
+
+ <xscreensaver-updater />
+
+ <_description>
+Floating stars are acted upon by a mixture of simple 2D
+force fields. The strength of each force field changes
+continuously, and it is also switched on and off at random.
+
+Written by Paul 'Joey' Clark; 2001.
+ </_description>
+</screensaver>
diff --git a/hacks/config/whirlygig.xml b/hacks/config/whirlygig.xml
new file mode 100644
index 0000000..d7842db
--- /dev/null
+++ b/hacks/config/whirlygig.xml
@@ -0,0 +1,90 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="whirlygig" _label="Whirlygig">
+
+ <command arg="-root"/>
+
+ <video href="https://www.youtube.com/watch?v=Y2JTY7bssPM"/>
+
+ <hgroup>
+ <number id="whirlies" type="spinbutton" arg="-whirlies %"
+ _label="Whirlies" low="-1" high="50" default="-1"/>
+
+ <number id="lines" type="spinbutton" arg="-nlines %"
+ _label="Lines" low="-1" high="50" default="-1"/>
+ </hgroup>
+
+ <hgroup>
+ <vgroup>
+ <number id="xspeed" type="slider" arg="-xspeed %"
+ _label="X speed" _low-label="Low" _high-label="High"
+ low="0.0" high="10.0" default="1.0"/>
+ <number id="yspeed" type="slider" arg="-yspeed %"
+ _label="Y speed" _low-label="Low" _high-label="High"
+ low="0.0" high="10.0" default="1.0"/>
+ </vgroup>
+
+ <vgroup>
+ <number id="xamplitude" type="slider" arg="-xamplitude %"
+ _label="X amplitude" _low-label="Low" _high-label="High"
+ low="0.0" high="10.0" default="1.0"/>
+ <number id="yamplitude" type="slider" arg="-yamplitude %"
+ _label="Y amplitude" _low-label="Low" _high-label="High"
+ low="0.0" high="10.0" default="1.0"/>
+ </vgroup>
+ </hgroup>
+
+
+ <!-- #### -xmode [change] -->
+
+ <hgroup>
+ <select id="xmode">
+ <option id="randomx" _label="X random" />
+ <option id="spinx" _label="X spin" arg-set="-xmode spin"/>
+ <option id="funkyx" _label="X funky" arg-set="-xmode funky"/>
+ <option id="circlex" _label="X circle" arg-set="-xmode circle"/>
+ <option id="linearx" _label="X linear" arg-set="-xmode linear"/>
+ <option id="testx" _label="X test" arg-set="-xmode test"/>
+ <option id="funx" _label="X fun" arg-set="-xmode fun"/>
+ <option id="inniex" _label="X innie" arg-set="-xmode innie"/>
+ <option id="lissajousx" _label="X lissajous" arg-set="-xmode lissajous"/>
+ </select>
+
+ <select id="ymode">
+ <option id="randomy" _label="Y random" />
+ <option id="spiny" _label="Y spin" arg-set="-ymode spin"/>
+ <option id="funkyy" _label="Y funky" arg-set="-ymode funky"/>
+ <option id="circley" _label="Y circle" arg-set="-ymode circle"/>
+ <option id="lineary" _label="Y linear" arg-set="-ymode linear"/>
+ <option id="testy" _label="Y test" arg-set="-ymode test"/>
+ <option id="funy" _label="Y fun" arg-set="-ymode fun"/>
+ <option id="inniey" _label="Y innie" arg-set="-ymode innie"/>
+ <option id="lissajousy" _label="Y lissajous" arg-set="-ymode lissajous"/>
+ </select>
+ </hgroup>
+
+ <!-- #### -speed [1] -->
+ <!-- #### -color_modifier [-1] -->
+ <!-- #### -start_time [-1] -->
+ <!-- #### -xoffset [1.0] -->
+ <!-- #### -yoffset [1.0] -->
+ <!-- #### -offset_period [1] -->
+
+ <hgroup>
+ <boolean id="trail" _label="Leave a trail" arg-set="-trail"/>
+ <boolean id="explain" _label="Explain modes" arg-set="-explain"/>
+ <boolean id="wrap" _label="Wrap the screen" arg-set="-wrap"/>
+ <boolean id="showfps" _label="Show frame rate" arg-set="-fps"/>
+ </hgroup>
+
+ <xscreensaver-updater />
+
+ <_description>
+This screen saver was removed from the XScreenSaver distribution as of
+version 5.08.
+
+Zooming chains of sinusoidal spots.
+
+Written by Ashton Trey Belew; 2001.
+ </_description>
+</screensaver>
diff --git a/hacks/config/winduprobot.xml b/hacks/config/winduprobot.xml
new file mode 100644
index 0000000..0aaf78a
--- /dev/null
+++ b/hacks/config/winduprobot.xml
@@ -0,0 +1,62 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="winduprobot" _label="WindupRobot" gl="yes">
+
+ <command arg="-root"/>
+
+ <video href="https://www.youtube.com/watch?v=RmpsDx9MuUM"/>
+
+ <hgroup>
+ <vgroup>
+ <number id="delay" type="slider" arg="-delay %"
+ _label="Frame rate" _low-label="Low" _high-label="High"
+ low="0" high="100000" default="20000"
+ convert="invert"/>
+
+ <number id="speed" type="slider" arg="-speed %"
+ _label="Robot speed" _low-label="Slow" _high-label="Fast"
+ low="0.01" high="8.0" default="1.0"/>
+
+ <number id="count" type="slider" arg="-count %"
+ _label="Number of robots" _low-label="One" _high-label="Lots"
+ low="1" high="100" default="25"/>
+
+ <number id="size" type="slider" arg="-size %"
+ _label="Robot size" _low-label="Tiny" _high-label="Huge"
+ low="0.1" high="10.0" default="1.0"/>
+
+ <number id="opacity" type="slider" arg="-opacity %"
+ _label="Robot skin transparency" _low-label="Invisible" _high-label="Solid"
+ low="0.0" high="1.0" default="1.0"/>
+
+ </vgroup>
+
+ <vgroup>
+ <number id="talk" type="slider" arg="-talk %"
+ _label="Word bubbles" _low-label="Never" _high-label="Often"
+ low="0.0" high="1.0" default="0.2"/>
+
+ <xscreensaver-text />
+
+ <hgroup>
+ <boolean id="texture" _label="Chrome" arg-unset="-no-texture"/>
+ <boolean id="fade" _label="Fade opacity" arg-unset="-no-fade"/>
+ <boolean id="showfps" _label="Show frame rate" arg-set="-fps"/>
+ </hgroup>
+
+ </vgroup>
+
+ </hgroup>
+
+ <xscreensaver-updater />
+
+ <_description>
+A swarm of wind-up toy robots wander around the table-top, bumping
+into each other. Each robot contains a mechanically accurate gear
+system inside, which you can see when the robot's shell occasionally
+fades to transparency. Also, sometimes a cartoony word bubble pops up
+above a robot, full of random text.
+
+Written by Jamie Zawinski; 2014.
+ </_description>
+</screensaver>
diff --git a/hacks/config/worm.xml b/hacks/config/worm.xml
new file mode 100644
index 0000000..9678f29
--- /dev/null
+++ b/hacks/config/worm.xml
@@ -0,0 +1,39 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="worm" _label="Worm">
+
+ <command arg="-root"/>
+
+ <video href="https://www.youtube.com/watch?v=-S26J2Ja11g"/>
+
+ <number id="delay" type="slider" arg="-delay %"
+ _label="Frame rate" _low-label="Low" _high-label="High"
+ low="0" high="100000" default="17000"
+ convert="invert"/>
+
+ <number id="ncolors" type="slider" arg="-ncolors %"
+ _label="Number of colors" _low-label="Two" _high-label="Many"
+ low="1" high="255" default="150"/>
+
+ <number id="count" type="spinbutton" arg="-count %"
+ _label="Count" low="-100" high="100" default="-20"/>
+
+ <number id="size" type="spinbutton" arg="-size %"
+ _label="Size" low="-20" high="20" default="-3"/>
+
+ <!-- #### -cycles [10] -->
+ <!-- #### -3d -->
+
+ <boolean id="showfps" _label="Show frame rate" arg-set="-fps"/>
+
+ <xscreensaver-updater />
+
+ <_description>
+This screen saver was removed from the XScreenSaver distribution as of
+version 5.08.
+
+Draws multicolored worms that crawl around the screen.
+
+Written by Brad Taylor, Dave Lemke, Boris Putanec, and Henrik Theiling; 1991.
+ </_description>
+</screensaver>
diff --git a/hacks/config/wormhole.xml b/hacks/config/wormhole.xml
new file mode 100644
index 0000000..387afa1
--- /dev/null
+++ b/hacks/config/wormhole.xml
@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="wormhole" _label="Wormhole">
+
+ <command arg="-root"/>
+
+ <video href="https://www.youtube.com/watch?v=jGuJU8JKxlI"/>
+
+ <number id="delay" type="slider" arg="-delay %"
+ _label="Frame rate" _low-label="Low" _high-label="High"
+ low="0" high="100000" default="10000"
+ convert="invert"/>
+
+ <number id="zspeed" type="slider" arg="-zspeed %"
+ _label="Star speed" _low-label="Slow" _high-label="Fast"
+ low="1" high="30" default="10"/>
+
+ <number id="stars" type="slider" arg="-stars %"
+ _label="Stars created" _low-label="Few" _high-label="Lots"
+ low="1" high="100" default="20"/>
+
+ <boolean id="showfps" _label="Show frame rate" arg-set="-fps"/>
+
+ <xscreensaver-updater />
+
+ <_description>
+Flying through a colored wormhole in space.
+
+Written by Jon Rafkind; 2004.
+ </_description>
+</screensaver>
diff --git a/hacks/config/xanalogtv.xml b/hacks/config/xanalogtv.xml
new file mode 100644
index 0000000..5064ca1
--- /dev/null
+++ b/hacks/config/xanalogtv.xml
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="xanalogtv" _label="XAnalogTV">
+
+ <command arg="-root"/>
+
+ <video href="https://www.youtube.com/watch?v=VmM1KkFsry0"/>
+
+ <hgroup>
+ <vgroup>
+ <xscreensaver-image />
+ </vgroup>
+ <vgroup>
+ <boolean id="showfps" _label="Show frame rate" arg-set="-fps"/>
+ <boolean id="colorbars" _label="Colorbars only" arg-set="-colorbars-only"/>
+ </vgroup>
+ </hgroup>
+
+ <hgroup>
+ <vgroup>
+ <number id="tvcolor" type="slider" arg="-tv-color %"
+ _label="Color Knob" _low-label="Low" _high-label="High"
+ low="0" high="400" default="70"/>
+ <number id="tvtint" type="slider" arg="-tv-tint %"
+ _label="Tint Knob" _low-label="Low" _high-label="High"
+ low="0" high="360" default="5"/>
+ </vgroup>
+ <vgroup>
+ <number id="tvbrightness" type="slider" arg="-tv-brightness %"
+ _label="Brightness Knob" _low-label="Low" _high-label="High"
+ low="-75.0" high="100.0" default="3.0"/>
+ <number id="tvcontrast" type="slider" arg="-tv-contrast %"
+ _label="Contrast Knob" _low-label="Low" _high-label="High"
+ low="0" high="1500" default="1000"/>
+ </vgroup>
+ </hgroup>
+
+ <xscreensaver-updater />
+
+ <_description>
+An old TV set, including artifacts like snow, bloom, distortion,
+ghosting, and hash noise. It also simulates the TV warming up. It
+will cycle through 12 channels, some with images you give it, and some
+with color bars or nothing but static.
+
+Written by Trevor Blackwell; 2003.
+ </_description>
+</screensaver>
diff --git a/hacks/config/xflame.xml b/hacks/config/xflame.xml
new file mode 100644
index 0000000..783dcab
--- /dev/null
+++ b/hacks/config/xflame.xml
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="xflame" _label="XFlame">
+
+ <command arg="-root"/>
+
+ <video href="https://www.youtube.com/watch?v=jUJiULU4i0k"/>
+
+ <number id="delay" type="slider" arg="-delay %"
+ _label="Frame rate" _low-label="Low" _high-label="High"
+ low="0" high="100000" default="10000"
+ convert="invert"/>
+
+<!-- <file id="bitmap" _label="Bitmap file" arg="-bitmap %"/> -->
+
+ <!-- #### -baseline [20] -->
+ <!-- #### -hspread [30] -->
+ <!-- #### -vspread [97] -->
+ <!-- #### -residual [99] -->
+ <!-- #### -variance [50] -->
+ <!-- #### -vartrend [20] -->
+
+ <boolean id="bloom" _label="Enable blooming" arg-unset="-no-bloom"/>
+
+ <boolean id="showfps" _label="Show frame rate" arg-set="-fps"/>
+
+ <xscreensaver-updater />
+
+ <_description>
+Pulsing fire. It can also take an arbitrary image and set it on fire too.
+
+Written by Carsten Haitzler and many others; 1999.
+ </_description>
+</screensaver>
diff --git a/hacks/config/xjack.xml b/hacks/config/xjack.xml
new file mode 100644
index 0000000..542d19f
--- /dev/null
+++ b/hacks/config/xjack.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="xjack" _label="XJack">
+
+ <command arg="-root"/>
+
+ <video href="https://www.youtube.com/watch?v=wSOiSrEbxu4"/>
+
+ <number id="delay" type="slider" arg="-delay %"
+ _label="Speed" _low-label="Slow" _high-label="Fast"
+ low="0" high="200000" default="50000"
+ convert="invert"/>
+
+ <!-- #### -font [] -->
+
+ <boolean id="showfps" _label="Show frame rate" arg-set="-fps"/>
+
+ <xscreensaver-updater />
+
+ <_description>
+This behaves schizophrenically and makes a lot of typos.
+
+Written by Jamie Zawinski; 1997.
+ </_description>
+</screensaver>
diff --git a/hacks/config/xlyap.xml b/hacks/config/xlyap.xml
new file mode 100644
index 0000000..1d2e176
--- /dev/null
+++ b/hacks/config/xlyap.xml
@@ -0,0 +1,52 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="xlyap" _label="XLyap">
+
+ <command arg="-root"/>
+
+ <video href="https://www.youtube.com/watch?v=5MrEaXnhEPg"/>
+
+ <number id="delay" type="slider" arg="-delay %"
+ _label="Frame rate" _low-label="Low" _high-label="High"
+ low="0" high="100000" default="10000"
+ convert="invert"/>
+
+ <number id="linger" type="slider" arg="-linger %"
+ _label="Linger" _low-label="Brief" _high-label="Long"
+ low="0" high="10" default="5" />
+
+ <!-- #### -builtin [-1] -->
+ <!-- #### -C [1] -->
+ <!-- #### -D [50] -->
+ <!-- #### -L -->
+ <!-- #### -M [1.0] -->
+ <!-- #### -O [0] -->
+ <!-- #### -R [] -->
+ <!-- #### -S [50] -->
+ <!-- #### -a [2.0] -->
+ <!-- #### -b [2.0] -->
+ <!-- #### -c [7] -->
+ <!-- #### -F [10101010] -->
+ <!-- #### -f [abbabaab] -->
+ <!-- #### -h [] -->
+ <!-- #### -i [0.65] -->
+ <!-- #### -m [] -->
+ <!-- #### -o [] -->
+ <!-- #### -p -->
+ <!-- #### -r [65000] -->
+ <!-- #### -s [256] -->
+ <!-- #### -v -->
+ <!-- #### -w [] -->
+
+ <boolean id="showfps" _label="Show frame rate" arg-set="-fps"/>
+
+ <xscreensaver-updater />
+
+ <_description>
+The Lyapunov exponent makes pretty fractal pictures.
+
+https://en.wikipedia.org/wiki/Lyapunov_exponent
+
+Written by Ron Record; 1997.
+ </_description>
+</screensaver>
diff --git a/hacks/config/xmatrix.xml b/hacks/config/xmatrix.xml
new file mode 100644
index 0000000..b1afe9c
--- /dev/null
+++ b/hacks/config/xmatrix.xml
@@ -0,0 +1,68 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="xmatrix" _label="XMatrix">
+
+ <command arg="-root"/>
+
+ <video href="https://www.youtube.com/watch?v=dSJQHm-YoWc"/>
+
+ <hgroup>
+ <select id="size">
+ <option id="font1" _label="Small font" arg-set="-small"/>
+ <option id="font2" _label="Large font"/>
+ </select>
+
+ <select id="mode">
+ <option id="matrix" _label="Matrix encoding"/>
+ <option id="binary" _label="Binary encoding" arg-set="-mode binary"/>
+ <option id="hex" _label="Hexadecimal encoding" arg-set="-mode hex"/>
+ <option id="dna" _label="Genetic encoding" arg-set="-mode dna"/>
+ <option id="pipe" _label="Piped ASCII text" arg-set="-mode pipe"/>
+ </select>
+
+ <select id="fill">
+ <option id="both" _label="Synergistic algorithm"/>
+ <option id="top" _label="Slider algorithm" arg-set="-insert top"/>
+ <option id="bottom" _label="Expansion algorithm" arg-set="-insert bottom"/>
+ </select>
+ </hgroup>
+
+ <hgroup>
+ <boolean id="trace" _label="Run trace program" arg-unset="-no-trace"/>
+ <boolean id="knock" _label="Knock knock" arg-unset="-no-knock-knock"/>
+ <string id="phone" _label="Phone number" arg="-phone %"/>
+ </hgroup>
+
+ <hgroup>
+ <vgroup>
+ <number id="delay" type="slider" arg="-delay %"
+ _label="Frame rate" _low-label="Low" _high-label="High"
+ low="0" high="100000" default="10000"
+ convert="invert"/>
+
+ <number id="density" type="slider" arg="-density %"
+ _label="Density" _low-label="Sparse" _high-label="Full"
+ low="1" high="100" default="75"/>
+
+ <boolean id="showfps" _label="Show frame rate" arg-set="-fps"/>
+
+ <xscreensaver-updater />
+
+ </vgroup>
+ <vgroup>
+ <xscreensaver-text />
+ </vgroup>
+ </hgroup>
+
+ <_description>
+The "digital rain" effect, as seen on the computer monitors in
+"The Matrix".
+
+See also "GLMatrix" for a 3D rendering of the similar effect that
+appeared in the movie's title sequence.
+
+https://en.wikipedia.org/wiki/Matrix_digital_rain
+
+Written by Jamie Zawinski; 1999.
+ </_description>
+</screensaver>
diff --git a/hacks/config/xrayswarm.xml b/hacks/config/xrayswarm.xml
new file mode 100644
index 0000000..5aaf815
--- /dev/null
+++ b/hacks/config/xrayswarm.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="xrayswarm" _label="XRaySwarm">
+
+ <command arg="-root"/>
+
+ <video href="https://www.youtube.com/watch?v=e_E-k37b4Vc"/>
+
+ <number id="delay" type="slider" arg="-delay %"
+ _label="Frame rate" _low-label="Low" _high-label="High"
+ low="0" high="100000" default="20000"
+ convert="invert"/>
+
+ <boolean id="showfps" _label="Show frame rate" arg-set="-fps"/>
+
+ <xscreensaver-updater />
+
+ <_description>
+Worm-like swarms of particles with vapor trails.
+
+Written by Chris Leger; 2000.
+ </_description>
+</screensaver>
diff --git a/hacks/config/xspirograph.xml b/hacks/config/xspirograph.xml
new file mode 100644
index 0000000..6be28f0
--- /dev/null
+++ b/hacks/config/xspirograph.xml
@@ -0,0 +1,32 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="xspirograph" _label="XSpirograph">
+
+ <command arg="-root"/>
+
+ <video href="https://www.youtube.com/watch?v=XWCeQqzNavY"/>
+
+ <number id="delay" type="slider" arg="-subdelay %"
+ _label="Frame rate" _low-label="Low" _high-label="High"
+ low="0" high="100000" default="20000"
+ convert="invert"/>
+
+ <number id="delay" type="slider" arg="-delay %"
+ _label="Linger" _low-label="1 second" _high-label="1 minute"
+ low="1" high="60" default="5"/>
+
+ <number id="layers" type="spinbutton" arg="-layers %"
+ _label="Layers" low="1" high="10" default="2"/>
+
+ <boolean id="showfps" _label="Show frame rate" arg-set="-fps"/>
+
+ <xscreensaver-updater />
+
+ <_description>
+Simulates that pen-in-nested-plastic-gears toy from your childhood.
+
+https://en.wikipedia.org/wiki/Spirograph
+
+Written by Rohit Singh; 2000.
+ </_description>
+</screensaver>
diff --git a/hacks/config/xss.dtd b/hacks/config/xss.dtd
new file mode 100644
index 0000000..212d53d
--- /dev/null
+++ b/hacks/config/xss.dtd
@@ -0,0 +1,109 @@
+<!-- xscreensaver, Copyright (c) 2001-2012 Jamie Zawinski <jwz@jwz.org> -->
+<!--
+ Permission to use, copy, modify, distribute, and sell this software and its
+ documentation for any purpose is hereby granted without fee, provided that
+ the above copyright notice appear in all copies and that both that
+ copyright notice and this permission notice appear in supporting
+ documentation. No representations are made about the suitability of this
+ software for any purpose. It is provided "as is" without express or
+ implied warranty.
+-->
+<!--
+This DTD validates the format of the XScreenSaver configuration files.
+
+The DTD will not be devloped further, as the .XSD style validation
+can already check more of the details of the config files.
+
+DTD written by Andrew Thompson <andrewthommo@gmail.com>
+-->
+<!-- XScreenSaver settings config file. - DTD version 1.0 -->
+<!ELEMENT screensaver
+ ((command|fullcommand)*,
+ (boolean|number|select|string|file|hgroup|vgroup|xscreensaver-text|xscreensaver-image)*,
+ _description)>
+<!ATTLIST screensaver
+ name CDATA #REQUIRED
+ _label CDATA #REQUIRED
+ gl CDATA #IMPLIED
+ >
+
+<!-- Every XScreenSaver hack has exactly one of either command or fullcommand -->
+<!ELEMENT command EMPTY>
+<!ATTLIST command
+ arg CDATA #IMPLIED
+ >
+
+<!-- Checkbox -->
+<!-- One of either arg-set or arg-unset is required -->
+<!ELEMENT boolean EMPTY>
+<!ATTLIST boolean
+ id ID #IMPLIED
+ _label CDATA #REQUIRED
+ arg-set CDATA #IMPLIED
+ arg-unset CDATA #IMPLIED
+ >
+
+<!-- Slider and Spin Button -->
+<!-- _low/high-label not required for type spinbutton -->
+<!-- arg must end with ' %' -->
+<!ELEMENT number EMPTY>
+<!ATTLIST number
+ id ID #IMPLIED
+ type (slider|spinbutton) #REQUIRED
+ _label CDATA #REQUIRED
+ _low-label CDATA #IMPLIED
+ _high-label CDATA #IMPLIED
+ arg CDATA #REQUIRED
+ low CDATA #REQUIRED
+ high CDATA #REQUIRED
+ default CDATA #REQUIRED
+ convert (invert) #IMPLIED
+ >
+
+<!-- Drop-down list -->
+<!ELEMENT select (option+)>
+<!ATTLIST select
+ id ID #IMPLIED
+ >
+
+<!-- List item -->
+<!ELEMENT option EMPTY>
+<!ATTLIST option
+ id ID #IMPLIED
+ _label CDATA #REQUIRED
+ arg-set CDATA #IMPLIED
+ >
+
+<!-- String or Textual input -->
+<!-- arg must end with ' %' -->
+<!ELEMENT string EMPTY>
+<!ATTLIST string
+ id ID #IMPLIED
+ _label CDATA #REQUIRED
+ arg CDATA #REQUIRED
+ >
+
+<!-- File browser. -->
+<!-- arg must end with ' %' -->
+<!ELEMENT file EMPTY>
+<!ATTLIST file
+ id ID #IMPLIED
+ _label CDATA #REQUIRED
+ arg CDATA #REQUIRED
+ >
+
+<!ELEMENT xscreensaver-text EMPTY>
+<!ELEMENT xscreensaver-image EMPTY>
+
+<!-- Free Text. The description of the Screen Saver. -->
+<!ELEMENT _description (#PCDATA)>
+
+<!-- Horizontal grouping element, a row of widgets.
+Unimplemented in SaverBeans as of API 0.2. -->
+<!ELEMENT hgroup ((boolean|number|select|string|file|vgroup)*)> <!-- Undocumented -->
+
+<!-- Vertical grouping element, a column of widgets.
+Since the widgets are normally arranged in a column,
+this is only of use within an hgroup.
+Unimplemented in SaverBeans as of API 0.2. -->
+<!ELEMENT vgroup ((boolean|number|select|string|file|hgroup)*)> <!-- Undocumented --> \ No newline at end of file
diff --git a/hacks/config/xss.xsd b/hacks/config/xss.xsd
new file mode 100644
index 0000000..fac1fe3
--- /dev/null
+++ b/hacks/config/xss.xsd
@@ -0,0 +1,375 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- xscreensaver, Copyright (c) 2001-2005 Jamie Zawinski <jwz@jwz.org> -->
+<!--
+ Permission to use, copy, modify, distribute, and sell this software and its
+ documentation for any purpose is hereby granted without fee, provided that
+ the above copyright notice appear in all copies and that both that
+ copyright notice and this permission notice appear in supporting
+ documentation. No representations are made about the suitability of this
+ software for any purpose. It is provided "as is" without express or
+ implied warranty.
+-->
+<!-- XScreenSaver schema version 0.5
+
+This schema validates the format of the XScreenSaver configuration files.
+
+The notices shown above, appear at the top of the source of 'demo-Gtk-conf.c'.
+Since this schema (attempts to) describe the format of the existing
+XScreenSaver configuration files, it seems appropriate to reproduce them here.
+If it is not appropriate, please ignore/remove them rather than sue me.
+
+To check a savername.xml, reference this XSD from the file and validate it at
+ http://www.w3.org/2001/03/webdata/xsv
+
+** Background
+Andrew Thompson defined a DTD based on his understanding of the
+XScreenSaver configuration files after examining the files..
+xscreensaver-4.22
+ |- hacks
+ | |- config
+ | README
+ | *.xml
+ |- driver
+ demo-Gtk-conf.c
+
+Paul Dennis generated an XSD file (xscreensaver.xsd) from the DTD.
+This is a stricter version of that XSD, with more comments and
+documentation by Andrew Thompson.
+
+Note that Andrew does not program in c, and has not had the
+opportunity to see XScreenSaver in action (he runs Windows),
+so some of the details of the schema may be incorrect. It aims
+to be cautious, and thus might be more strict than is actually
+required.
+
+** .XSD started as version 0.1
+- generated from the DTD.
+- checked parameter types
+ - mostly as xs:string, except for..
+ - ID's - checked as xs:ID.
+- provided grouping parse logic, but specified elements
+ with maxOccurs 'unbounded'
+
+** Tightened parsing in 0.2
+- The only field still defined as xs:string is the _description.
+- A substitutionArgumentType has been introduced to lock the form of
+ the arg to '-lettersandnumbers %'
+- An argumentType has been introduced to ensure other
+ arg/arg-set/arg-unset attributes begin with '-' and
+ are followed by at least one letter or number.
+- Float and integer numeric values (low/high/default) are checked as xs:decimal
+- Remaining attributes were tightened from xs:string to xs:token.
+
+** Tightened parsing in 0.3
+ * Note that no maximums at all are stated in the XScreenSaver README!
+- maxOccurs lowered from 'unbounded' to
+ - screensaver: '200' components/groups
+ - screensaver: '40' commands/fullcommands
+ - select: '100' options
+ - hgroup: '6' components/groups per row
+ - vgroup: '40' components/groups per column
+- maxLength of _description set to '2000' chars.
+
+** Changes in version 0.4 - Strict
+ After testing against the configuration files of the XScreenSaver
+ hacks, the following changes were made..
+- Added (+ _ / $) to allowable characters for substitutionArgumentType
+ & argumentType, but tightened baseType to xs:token
+- maxOccurs changed to
+ - screensaver: '200' -> '30' components/groups
+ (xmountains.xml has 24)
+ - screensaver: '40' -> '10' commands/fullcommands
+ - select: '100' -> '200' options
+ (to account for polyhedra.xml, which has 152 options!)
+ - hgroup: '6' -> '4' components/groups per row
+ (glplanet.xml has 4)
+ - vgroup: '40' -> '10' components/groups per column
+ (bsod.xml has 9)
+- maxLength of _description changed from '2000' to '3000' chars,
+ (covers the largest _description, 'jigglypuff.xml', at 852 chars,
+ 'magicrainbow.xml', at 2837 chars.)
+- introduced idType to facilitate maintenance between the
+ strict and loose schemas.
+
+** Changes in version 0.4 - Loose
+- made _label of number element optional (when using sliders, some
+ developers put what would normally appear in the _label, as a
+ prefix to _low-label instead)
+- widens the idType base type from xs:ID to xs:token. Since the ID is
+ unimplemented and will most likely remain so, it makes little
+ sense to ensure they are unique & valid ID's.
+
+** Changes in 0.5 - Strict
+- Minor typos. to 0.4 docs fixed.
+- Since both the XScreenSaver code and Saverbeans SettingsDialog
+seem tolerant to the _label of the number element missing, it is
+marked as 'optional' now, even in the strict version.
+
+** Limits: This version
+- specifies the 'arg-set'/'arg-unset' of 'boolean' as optional, whereas it
+ requires exactly one of either 'arg-set' or 'arg-unset'.
+- cannot properly distinguish between the 'slider' and 'spinbutton' types
+ of the 'number' element. As a result of that, '_low-label'/'_high-label'
+ are specified as not required, whereas they are actually undefined for
+ 'spinbutton' and required for 'slider'.
+- has no checks to ensure that 'default' values of ranges in the
+ number element fall between 'low' & 'high' values.
+- Selects can have no more than one option missing an arg-set attribute.
+- Arguments must be unique, but this schema does not check that.
+- _label is effectively optional for the slider type of the number element,
+ since this info can be preprended to the _low-label, but no checks are
+ done to ensure that the spinbutton type has the _label.
+
+** Undocumented.
+'undocumented' means that the element/feature was not mentioned in the
+official documentation of the format available in the -
+xscreensaver-4.22/hacks/config/README.
+-->
+<xs:schema
+ xmlns:xs="http://www.w3.org/2001/XMLSchema"
+ elementFormDefault="qualified">
+
+ <!-- The root element of any XScreenSaver configuration file. -->
+ <xs:element name="screensaver">
+ <xs:complexType>
+ <xs:sequence>
+ <!-- Every XScreenSaver hack has exactly one of either
+ command or fullcommand, but my understanding is that
+ demo-Gtk-conf.c chains them together.
+ This specifies a maximum numner of commands. -->
+ <xs:choice minOccurs="0" maxOccurs="10">
+ <xs:element ref="command"/>
+ <xs:element ref="fullcommand"/>
+ </xs:choice>
+ <!-- A maximum number of components/groups is specified. -->
+ <xs:choice minOccurs="0" maxOccurs="30">
+ <xs:element ref="boolean"/>
+ <xs:element ref="number"/>
+ <xs:element ref="select"/>
+ <xs:element ref="string"/>
+ <xs:element ref="file"/>
+ <xs:element ref="hgroup"/>
+ <xs:element ref="vgroup"/>
+ </xs:choice>
+ <xs:element ref="_description"/>
+ </xs:sequence>
+ <xs:attribute name="name" type="xs:token" use="required"/>
+ <xs:attribute name="_label" type="xs:token" use="required"/>
+ </xs:complexType>
+ </xs:element>
+
+ <!-- Added to the command line when invoked. -->
+ <xs:element name="command">
+ <xs:complexType>
+ <xs:attribute name="arg" type="argumentType"/>
+ </xs:complexType>
+ </xs:element>
+
+ <!-- Unimplemented in SaverBeans as of API 0.2.
+ Used only by cosmos.xml. Undocumented. -->
+ <xs:element name="fullcommand">
+ <xs:complexType>
+ <xs:attribute name="arg" type="argumentType"/>
+ </xs:complexType>
+ </xs:element>
+
+ <!-- Checkbox -->
+ <xs:element name="boolean">
+ <xs:complexType>
+ <xs:attribute name="id" type="idType"/>
+ <xs:attribute name="_label" type="xs:token" use="required"/>
+ <!-- Exactly one of either arg-set or arg-unset is required -->
+ <xs:attribute name="arg-set" type="argumentType"/>
+ <xs:attribute name="arg-unset" type="argumentType"/>
+ </xs:complexType>
+ </xs:element>
+
+ <!-- Slider and Spinbutton -->
+ <xs:element name="number">
+ <xs:complexType>
+ <xs:attribute name="id" type="idType"/>
+ <xs:attribute name="type" use="required">
+ <xs:simpleType>
+ <xs:restriction base="xs:NMTOKEN">
+ <xs:enumeration value="slider"/>
+ <xs:enumeration value="spinbutton"/>
+ </xs:restriction>
+ </xs:simpleType>
+ </xs:attribute>
+ <!-- Listed as 'required' in the documentation, though XScreenSaver is
+ tolerant to it being left out. A number of hacks deliberately exclude it
+ for formatting purposes, and put the _label as prefix to _low-label -->
+ <xs:attribute name="_label" type="xs:token" />
+ <!-- _low/_high-label not defined for type spinbutton,
+ but required for slider -->
+ <xs:attribute name="_low-label" type="xs:token"/>
+ <xs:attribute name="_high-label" type="xs:token"/>
+ <xs:attribute name="arg" type="substitutionArgumentType" use="required"/>
+ <xs:attribute name="low" type="xs:decimal" use="required"/>
+ <xs:attribute name="high" type="xs:decimal" use="required"/>
+ <!-- Must logically fall between low and high, but not checked. -->
+ <xs:attribute name="default" type="xs:decimal" use="required"/>
+ <xs:attribute name="convert">
+ <xs:simpleType>
+ <xs:restriction base="xs:NMTOKEN">
+ <xs:enumeration value="invert"/>
+ </xs:restriction>
+ </xs:simpleType>
+ </xs:attribute>
+ </xs:complexType>
+ </xs:element>
+
+ <!-- Drop-down list -->
+ <xs:element name="select">
+ <xs:complexType>
+ <xs:sequence>
+ <!-- A maximum number of options is specified, as a longer
+ drop down becomes kludgy and difficult to use. -->
+ <xs:element ref="option" maxOccurs="200"/>
+ </xs:sequence>
+ <xs:attribute name="id" type="idType"/>
+ </xs:complexType>
+ </xs:element>
+
+ <!-- List item -->
+ <xs:element name="option">
+ <xs:complexType>
+ <xs:attribute name="id" type="idType"/>
+ <xs:attribute name="_label" type="xs:token" use="required"/>
+ <xs:attribute name="arg-set" type="argumentType"/>
+ </xs:complexType>
+ </xs:element>
+
+ <!-- String or textual input -->
+ <xs:element name="string">
+ <xs:complexType>
+ <xs:attribute name="id" type="idType"/>
+ <xs:attribute name="_label" type="xs:token" use="required"/>
+ <xs:attribute name="arg" type="substitutionArgumentType" use="required"/>
+ </xs:complexType>
+ </xs:element>
+
+ <!-- File browser. -->
+ <xs:element name="file">
+ <xs:complexType>
+ <xs:attribute name="id" type="idType"/>
+ <xs:attribute name="_label" type="xs:token" use="required"/>
+ <xs:attribute name="arg" type="substitutionArgumentType" use="required"/>
+ </xs:complexType>
+ </xs:element>
+
+ <!-- Free Text. The description of the Screen Saver. -->
+ <xs:element name="_description">
+ <!-- The _description must contain text only, with no HTML formatting.
+
+ Character entities are also valid, which suggests that..
+ http://www.w3.org/TR/REC-html40/sgml/entities.html
+ ..are valid entities, though this, ..
+ http://www.w3.org/TR/1998/REC-html40-19980424/sgml/entities.html#h-24.4.1
+ ..may represent a safer sub-set.
+
+ The main entities you might require (none of which are allowed
+ in textual content in an XML file) are..
+ &lt; (= <)
+ &gt; (= >)
+ &amp; (= &)
+
+ XScreenSaver itself will probably* turn any URL enclosed in
+ &lt; / &gt; into a clickable link.
+
+ Conversion to an URL is unimplemented in SaverBeans as of API 0.2.
+
+ It might be possible to implement this in SaverBeans with the help of
+ BrowserLauncher, though that would require about 20Kb (AFAIR) of extra
+ classes in the core API distributable.
+
+ * This is based solely on the use of the delimiters in many of the
+ XScreenSaver hacks, but has not been investigated in any depth.
+ -->
+ <xs:simpleType>
+ <xs:restriction base="xs:string">
+ <xs:maxLength value="3000"/>
+ </xs:restriction>
+ </xs:simpleType>
+ </xs:element>
+
+ <!-- Horizontal grouping element, a row of components or groups.
+ Unimplemented in SaverBeans as of API 0.2,
+ components inside groups do not appear. -->
+ <xs:element name="hgroup">
+ <xs:complexType>
+ <!-- A maximum number of components/groups per row is specified. -->
+ <xs:choice minOccurs="0" maxOccurs="4">
+ <xs:element ref="boolean"/>
+ <xs:element ref="number"/>
+ <xs:element ref="select"/>
+ <xs:element ref="string"/>
+ <xs:element ref="file"/>
+ <xs:element ref="vgroup"/>
+ </xs:choice>
+ </xs:complexType>
+ </xs:element>
+
+ <!-- Vertical grouping element, a column of components or groups.
+ Since the components are normally arranged in a column,
+ this is only of use within an hgroup.
+ Unimplemented in SaverBeans as of API 0.2,
+ components inside groups do not appear. -->
+ <xs:element name="vgroup">
+ <xs:complexType>
+ <!-- A maximum number of components/groups per column is specified. -->
+ <xs:choice minOccurs="0" maxOccurs="10">
+ <xs:element ref="boolean"/>
+ <xs:element ref="number"/>
+ <xs:element ref="select"/>
+ <xs:element ref="string"/>
+ <xs:element ref="file"/>
+ <xs:element ref="hgroup"/>
+ </xs:choice>
+ </xs:complexType>
+ </xs:element>
+
+ <!-- Checks that the command arguments (non substitution arg, as
+ well as arg-set/arg-unset) are of a logical (and restricted) form.
+ This determines that the type must start with '-', and contain at
+ least one letter, number or the other characters shown in the RegEx.
+ It is stricter than the XScreenSaver documentation suggests. -->
+ <xs:simpleType name="argumentType">
+ <xs:restriction base="xs:token">
+ <xs:minLength value="2"/>
+ <xs:pattern value="-([a-zA-Z0-9 .,;:+_$#%?/\\\-])*"/>
+ </xs:restriction>
+ </xs:simpleType>
+
+ <!-- Checks that the command arguments that use substitution are of
+ a logical (and quite restricted) form. This determines that the
+ type must start with '-', contain at least one letter, number
+ or the other characters shown in the RegEx.
+ It is stricter than the XScreenSaver documentation suggests. -->
+ <xs:simpleType name="substitutionArgumentType">
+ <xs:restriction base="xs:token">
+ <xs:minLength value="4"/>
+ <xs:pattern value="-([a-zA-Z0-9.,;:+_$#%?/\\\-])* %"/>
+ </xs:restriction>
+ </xs:simpleType>
+
+ <!-- idType is used to validate the ID's
+ Many ID's do not parse as type xs:ID, so this type was created to
+ allow easy maintenance between the strict and loose versions of the schema.
+ The base type should be
+ - xs:ID in the strict schema, and
+ - xs:token in the loose schema.
+ Note that the base type of xs:ID overrides the minLength value of '0'
+ -->
+ <xs:simpleType name="idType">
+ <!-- strict -->
+ <xs:restriction base="xs:ID">
+ <!-- loose -->
+ <!--
+ <xs:restriction base="xs:token">
+ -->
+ <xs:minLength value="0"/>
+ </xs:restriction>
+ </xs:simpleType>
+
+</xs:schema>
diff --git a/hacks/config/zoom.xml b/hacks/config/zoom.xml
new file mode 100644
index 0000000..c538bb8
--- /dev/null
+++ b/hacks/config/zoom.xml
@@ -0,0 +1,54 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="zoom" _label="Zoom">
+
+ <command arg="-root"/>
+
+ <video href="https://www.youtube.com/watch?v=LeQa9inGEKc"/>
+
+ <number id="delay" type="slider" arg="-delay %"
+ _label="Frame rate" _low-label="Low" _high-label="High"
+ low="0" high="100000" default="10000"
+ convert="invert"/>
+
+ <number id="duration" type="slider" arg="-duration %"
+ _label="Duration" _low-label="10 seconds" _high-label="10 minutes"
+ low="10" high="600" default="120"/>
+
+ <hgroup>
+ <vgroup>
+ <number id="pixwidth" type="spinbutton" arg="-pixwidth %"
+ _label="X mag" low="2" high="100" default="40" />
+ <number id="pixspacex" type="spinbutton" arg="-pixspacex %"
+ _label=" X border" low="0" high="10" default="2" />
+ <number id="lensoffsetx" type="spinbutton" arg="-lensoffsetx %"
+ _label=" X lens" low="1" high="100" default="5" />
+ </vgroup>
+ <vgroup>
+ <number id="pixheight" type="spinbutton" arg="-pixheight %"
+ _label="Y mag" low="2" high="100" default="40" />
+ <number id="pixspacey" type="spinbutton" arg="-pixspacey %"
+ _label=" Y border" low="0" high="10" default="2" />
+ <number id="lensoffsety" type="spinbutton" arg="-lensoffsety %"
+ _label=" Y lens" low="1" high="100" default="5" />
+ </vgroup>
+
+ <vgroup>
+ <boolean id="lenses" _label="Lenses" arg-unset="-no-lenses"/>
+ <boolean id="showfps" _label="Show frame rate" arg-set="-fps"/>
+ </vgroup>
+
+ </hgroup>
+
+ <xscreensaver-image />
+
+ <xscreensaver-updater />
+
+ <_description>
+Fatbits! Zooms in on a part of the screen and then moves around.
+With the "Lenses" option, the result is like looking through many
+overlapping lenses rather than just a simple zoom.
+
+Written by James Macnicol; 2001.
+ </_description>
+</screensaver>