I recently bought a Digilent Nexys 2 board, and after a few days of research got to the point where I can successfully program it over USB from a Linux host without the use of a separate (and expensive!) JTAG interface. Google told me even before I purchased the board that this is a very common requirement; it seems that I'm not the only one interested in linux-hosted FPGA development. The pieces to make this work were all there, happily (see the README in the download below for details -- the chain of responsibility here is long); it just took work to assemble them correctly.
For those interested, I wrote a quick perl script to automate the process, available at: http://plausible.org/andy/nexys2prog.tar.gz
This wraps the multi-step mess (device detection/configuration, SVF generation, and JTAG download) as fully as possible, most importantly by doing the USB bus enumeration and dynamically reprogramming the Nexys 2 with a patched usb_jtag firmware blob in the script itself. The user just specifies the Xilinx bitstream file as the sole argument.
Installation is as simple as I could make it, requiring only Xilinx ISE, two binary packages (fxload and libftdi -- both available via apt-get on Ubuntu Intrepid) and one source install (UrJTAG -- just a simple "./configure;make;make install" will do).
Hopefully this will help other newbies with the learning curve. Let me know if something doesn't work, or if there are questions.