remote-dotfiles
v2.0.0
Published
Deploy your dotfiles
Downloads
18
Readme
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.