var twit = require( 'twit' ),
	irc = require( 'irc' ),
	rss = require( 'feed-poll' )( [ 'http://www.reddit.com/r/all/new/.rss' ] ),
	colors = require( 'colors' ),
	nconf = require( 'nconf' );

nconf.file( { file: __dirname + '/creds.json' } ); 

var creds = nconf.get( 'twitter' );

var twitter = new twit( creds );
var irc_client = new irc.Client( 'irc.freenode.net', 'shiftysnifty', {
	channels: [ '#devious' ]
});

function gather_data( type, obj ) {
	var msg = '';
	var color = 'red';

	if ( type === 'tweet' ) {
		msg = obj.text;
		color = 'cyan';
	}

	if ( type === 'irc' ) {
		msg = obj.msg;
		color = 'blue';
	}

	if ( type === 'rss' ) {
		msg = obj.content;
		color = 'green';
	}

	console.log( "new data from '%s': %s", type[color], msg );
}

twitter.stream( 'statuses/filter', { track: 'twss' }, function( str ) {
	str.on( 'tweet', function( tw ) {
		gather_data( 'tweet', tw );
	});
});

rss.on( 'article', function( article ) {
	if ( article.content.match( /twss/i ) ) {
		gather_data( 'rss', article );
	}
});
rss.start();

irc_client.addListener( 'message', function( from, to, msg ) {
	if ( msg.match( /twss/i ) ) {
		gather_data( 'irc', { from: from, to: to, msg: msg } );
	}
});

@@ -28,105 +28,267 @@
 ),%0A%09
-i
+data_sou
 rc
+e
  = 
-require( 'irc' ),%0A%09rss = require( 'feed-poll' )( %5B 'http://www.reddit.com/r/all/new/.rss' %5D
+%7B%0A%09%09twitter: 'twss',%0A%09%09irc: %7B %0A%09%09%09server: 'irc.freenode.net',%0A%09%09%09channels: %5B '#devious' %5D,%0A%09%09%09nick: 'shiftysnifty'%0A%09%09%7D,%0A%09%09rss: %5B 'http://www.reddit.com/r/all/new/.rss' %5D%0A%09%7D,%0A%09irc = require( 'irc' ),%0A%09rss = require( 'feed-poll' )( data_source.rss
  ),%0A
@@ -508,71 +508,91 @@
 nt( 
-'irc.freenode.net', 'shiftysnifty', %7B%0A%09channels: %5B '#devious' %5D
+data_source.irc.server, data_source.irc.nick, %7B%0A%09channels: data_source.irc.channels
 %0A%7D);
@@ -972,22 +972,35 @@
  track: 
-'twss'
+data_source.twitter
  %7D, func

move sources to one place