Awesome
Remote dotfiles
Describe your dotfiles configuration, have it automatically tuned for every server and then automatically deploy to all your servers.
var config = dotfiles()
.bash(__dirname + '/bash/*.sh')
.bin(__dirname + '/bin/*')
.servers([
{
alias: 'prod',
host: 'production.example.com'
},
{
alias: 'gate',
forwardAgent: true,
host: 'gateway.example.com',
port: 3133
}
])
.proxies(function(from, to){
if (to === 'prod') return 'gate';
})
.ssh('ServerAliveInterval 30')
.custom({
// Deploy any custom files
// Make sure a custom file has a string 'remote-dotfiles' in it to enable overwriting
'.gitignore': __dirname + '/gitconfig',
'.welcome': 'Custom contents can be passed as a string'
});
You can investigate the resulting config file set:
// Get a stream of Vinyl files for local machine
config.stream();
// Get a stream of Vinyl files for machine aliased prod
config.stream('prod');
// Or use a pretty printer in the console
config.stream()
.pipe(dotfiles.pretty())
.pipe(process.stdout, {end: false});
Now you should deploy it:
config.deploy().done();
config.deploy(function(progress){
console.log(Math.round(progress * 100) + '% done.');
}).done();
config.deploy({
// Limit the parallel deployments over SSH
parallelLimit: 3,
progress: function(){},
// Only deploy to one server
target: 'host-alias'
})
Or, for quicker iterating, you can temporarily only deploy locally:
config.deploy.local().done();
CLI
You can also deploy from the CLI, if you module.exports
your config:
remote-dotfiles deploy ./my-config.js local
remote-dotfiles deploy ./my-config.js all
remote-dotfiles deploy ./my-config.js server-alias
.bash
// Short call
config.bash(__dirname + '/*.sh');
// Use a list
config.bash([
__dirname + '/*.sh',
__dirname + '/*.bash'
]);
// Use separate arguments
config.bash(
__dirname + '/*.sh',
__dirname + '/*.bash'
);
// Use raw data
config.bash(
'alias foo=bar',
__dirname + '/*.bash'
);
// Use functions
config.bash(
// server will be an empty object if generating for localhost
function(server){
return 'echo Welcome to ' + server.alias;
}
);
.bin
// Short call
config.bin(__dirname + '/*.py');
// Use a list
config.bin([
__dirname + '/foo.py',
__dirname + '/bar.py'
]);
// Use separate arguments
config.bin(
__dirname + '/foo.py',
__dirname + '/bar.py'
);
As a result, added files will be added to PATH
with their extensions stripped.