dotme 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +15 -0
- data/LICENSE +28 -0
- data/README.md +42 -0
- data/bin/dotme +4 -0
- data/dotme.gemspec +22 -0
- data/lib/dotme/actions/create.rb +54 -0
- data/lib/dotme/actions/install.rb +7 -0
- data/lib/dotme/commander.rb +57 -0
- data/lib/dotme/dsl.rb +50 -0
- data/lib/dotme/errors.rb +3 -0
- data/lib/dotme/incubator.rb +43 -0
- data/lib/dotme/incubators/file.rb +16 -0
- data/lib/dotme/incubators/folder.rb +21 -0
- data/lib/dotme/loader.rb +13 -0
- data/lib/dotme/version.rb +3 -0
- metadata +59 -0
checksums.yaml
ADDED
@@ -0,0 +1,15 @@
|
|
1
|
+
---
|
2
|
+
!binary "U0hBMQ==":
|
3
|
+
metadata.gz: !binary |-
|
4
|
+
YWZjNzlmOWU5NDFhZmIxZjMyY2FmNGU4MWMzYTZhNDAxOWY5NjZiMg==
|
5
|
+
data.tar.gz: !binary |-
|
6
|
+
MzMxNDFkYTY4NTA1M2ZiZTFkYWQ3ZTUzNGU2ZDczOTg0N2YzMjQ1Yg==
|
7
|
+
!binary "U0hBNTEy":
|
8
|
+
metadata.gz: !binary |-
|
9
|
+
OWY3MDNmMTUwODVhZjY0N2VjZmJjY2EyNmYyOGZkYzQzYTdjYTY0YjA3Yjhj
|
10
|
+
YjE2MzAwMTcyNTQ1ZWRhMGEzZWI2MDFjMGJkY2ZkYmRkODc2OWJiNWYyNmU3
|
11
|
+
ZGVjNDgyMTAwNmVkMGZmZDNiMjNlZjIwODdkZWFmYzE0Yjc0Y2Y=
|
12
|
+
data.tar.gz: !binary |-
|
13
|
+
ZmRlNDhhMTI5YTFiM2UxNjhlZWY4ZmJmY2EyNTcyMTk4ZDM2NGZmN2Q3Zjhl
|
14
|
+
MWM3ODZmYzgxYTIwYWYxODZmZTI2Yjg5ZGY2NDEwY2ZkZGUwMzZmNTRlOTMw
|
15
|
+
ZTg2ZmFlYzZjYmY4NjA2ZjUxOTA3MGU1MzBiZjY0OGRlYjM5N2I=
|
data/LICENSE
ADDED
@@ -0,0 +1,28 @@
|
|
1
|
+
Software License Agreement (BSD License)
|
2
|
+
|
3
|
+
Copyright (c) 2013, Simone Margaritelli <evilsocket at gmail dot com>
|
4
|
+
All rights reserved.
|
5
|
+
|
6
|
+
Redistribution and use in source and binary forms, with or without
|
7
|
+
modification, are permitted provided that the following conditions are met:
|
8
|
+
|
9
|
+
* Redistributions of source code must retain the above copyright notice,
|
10
|
+
this list of conditions and the following disclaimer.
|
11
|
+
* Redistributions in binary form must reproduce the above copyright
|
12
|
+
notice, this list of conditions and the following disclaimer in the
|
13
|
+
documentation and/or other materials provided with the distribution.
|
14
|
+
* Neither the name of DotMe nor the names of its contributors may be used
|
15
|
+
to endorse or promote products derived from this software without
|
16
|
+
specific prior written permission.
|
17
|
+
|
18
|
+
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
19
|
+
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
20
|
+
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
21
|
+
ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
|
22
|
+
LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
23
|
+
CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
24
|
+
SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
25
|
+
INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
26
|
+
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
27
|
+
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
28
|
+
POSSIBILITY OF SUCH DAMAGE.
|
data/README.md
ADDED
@@ -0,0 +1,42 @@
|
|
1
|
+
DotMe [](http://badge.fury.io/rb/dotme)
|
2
|
+
========================
|
3
|
+
|
4
|
+
DotMe is a dot files management system for human beings.
|
5
|
+
|
6
|
+
<http://rubygems.org/gems/dotme>
|
7
|
+
|
8
|
+
Installation and Usage
|
9
|
+
------------------------
|
10
|
+
|
11
|
+
You can verify your installation using this piece of code:
|
12
|
+
|
13
|
+
gem install dotme
|
14
|
+
|
15
|
+
And
|
16
|
+
|
17
|
+
# dotme --help
|
18
|
+
|
19
|
+
You will be presented with the following output:
|
20
|
+
|
21
|
+
Usage: dotme ACTION [options]
|
22
|
+
|
23
|
+
Actions:
|
24
|
+
create Create your dot files archive.
|
25
|
+
install Use the Dotfile in current directory to install your dot files, this is the default action.
|
26
|
+
|
27
|
+
Options:
|
28
|
+
-T, --targets TARGETS Files and folders to backup. DEFAULT: .oh-my-zsh, .vimrc, .vim, .zshrc, .bashrc
|
29
|
+
-O, --output FOLDER Directory to store your dot files in. DEFAULT: dotfiles
|
30
|
+
-B, --backup FOLDER Backup directory to store existing dot files. DEFAULT: ~/dotfiles.backup
|
31
|
+
-P, --prepend COMMAND Prepend a custom command to the Dotfile, can be use multiple times.
|
32
|
+
-A, --append COMMAND Append a custom command to the Dotfile, can be use multiple times.
|
33
|
+
|
34
|
+
License
|
35
|
+
---
|
36
|
+
|
37
|
+
Released under the BSD license.
|
38
|
+
Copyright © 2013, Simone Margaritelli
|
39
|
+
<evilsocket@gmail.com>
|
40
|
+
|
41
|
+
<http://www.evilsocket.net/>
|
42
|
+
All rights reserved.
|
data/bin/dotme
ADDED
data/dotme.gemspec
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
require './lib/dotme/version'
|
2
|
+
|
3
|
+
Gem::Specification.new do |s|
|
4
|
+
s.name = %q{dotme}
|
5
|
+
s.version = DotMe::VERSION
|
6
|
+
s.license = "BSD"
|
7
|
+
|
8
|
+
s.authors = ["Simone Margaritelli"]
|
9
|
+
s.description = %q{A gem to handle dot files easily.}
|
10
|
+
s.email = %q{evilsocket@gmail.com}
|
11
|
+
s.files = Dir.glob("lib/**/*") + Dir.glob("bin/*") + [
|
12
|
+
"LICENSE",
|
13
|
+
"README.md",
|
14
|
+
"dotme.gemspec"
|
15
|
+
]
|
16
|
+
s.executables = %w(dotme)
|
17
|
+
s.homepage = %q{http://evilsocket.net/}
|
18
|
+
s.rdoc_options = ["--charset=UTF-8"]
|
19
|
+
s.require_paths = ["lib"]
|
20
|
+
s.summary = %q{A gem to handle dot files easily.}
|
21
|
+
end
|
22
|
+
|
@@ -0,0 +1,54 @@
|
|
1
|
+
require 'fileutils'
|
2
|
+
require 'dotme/incubator'
|
3
|
+
require 'dotme/loader'
|
4
|
+
|
5
|
+
if ::File.exist? $options[:output]
|
6
|
+
print "Folder '#{$options[:output]}' already exists, overwrite ? [y/N] "
|
7
|
+
overwrite = $stdin.gets.chop
|
8
|
+
exit unless overwrite == 'y' or overwrite == 'Y'
|
9
|
+
FileUtils.rm_rf $options[:output]
|
10
|
+
end
|
11
|
+
|
12
|
+
DotMe::Loader.load!
|
13
|
+
|
14
|
+
$options[:targets].each do |item|
|
15
|
+
begin
|
16
|
+
DotMe::Incubator.incubate item, $options[:output]
|
17
|
+
rescue DotMe::NoIncubator
|
18
|
+
puts "No suitable incubator for #{item}, skipping ..."
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
File.open( "#{$options[:output]}/Dotfile", 'w+t' ) do |dotfile|
|
23
|
+
dotfile << "backup #{$options[:targets]}, \"#{$options[:backup]}\"\n"
|
24
|
+
$options[:prepend].each do |command|
|
25
|
+
dotfile << "sh \"#{command}\"\n"
|
26
|
+
end
|
27
|
+
DotMe::Incubator.cells.each do |cell|
|
28
|
+
op, to, what, where = cell.keys + cell.values
|
29
|
+
dotfile << "#{op} \"#{what}\", \"#{where}\"\n"
|
30
|
+
end
|
31
|
+
$options[:append].each do |command|
|
32
|
+
dotfile << "sh \"#{command}\"\n"
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
File.open( "#{$options[:output]}/README.md", 'w+t' ) do |readme|
|
37
|
+
readme << <<README
|
38
|
+
DotMe - My personal dot files.
|
39
|
+
===
|
40
|
+
|
41
|
+
This is my personal dot files archive easily generated with [DotMe](http://rubygems.org/gems/dotme) using the following command line:
|
42
|
+
|
43
|
+
dotme #{$options[:cmdline]}
|
44
|
+
|
45
|
+
## Requirements
|
46
|
+
|
47
|
+
In order to install this archive to your system, you will need ruby installed and the dotme gem.
|
48
|
+
|
49
|
+
## Installation
|
50
|
+
|
51
|
+
cd path-to/#{$options[:output]} && dotme
|
52
|
+
|
53
|
+
README
|
54
|
+
end
|
@@ -0,0 +1,57 @@
|
|
1
|
+
require 'optparse'
|
2
|
+
|
3
|
+
module DotMe
|
4
|
+
class Commander
|
5
|
+
def self.dispatch!(argv)
|
6
|
+
# make this global to let load-ed actions use it
|
7
|
+
$options = {
|
8
|
+
:cmdline => ARGV.join(' '),
|
9
|
+
:action => argv[0] || 'install',
|
10
|
+
:verbose => true,
|
11
|
+
:targets => [ '.oh-my-zsh', '.fonts', '.vimrc', '.vim', '.zshrc', '.bashrc' ],
|
12
|
+
:output => 'dotfiles',
|
13
|
+
:backup => '~/dotfiles.backup',
|
14
|
+
:prepend => [],
|
15
|
+
:append => []
|
16
|
+
}
|
17
|
+
|
18
|
+
OptionParser.new do |opts|
|
19
|
+
opts.banner = <<HELP
|
20
|
+
Usage: dotme ACTION [options]
|
21
|
+
|
22
|
+
Actions:
|
23
|
+
create Create your dot files archive.
|
24
|
+
install Use the Dotfile in current directory to install your dot files, this is the default action.
|
25
|
+
|
26
|
+
Options:
|
27
|
+
HELP
|
28
|
+
opts.on( '-T', '--targets TARGETS', "Files and folders to backup. DEFAULT: #{$options[:targets].join(', ')}" ) do |targets|
|
29
|
+
$options[:targets] = targets.split ' '
|
30
|
+
end
|
31
|
+
|
32
|
+
opts.on( '-O', '--output FOLDER', "Directory to store your dot files in. DEFAULT: #{$options[:output]}" ) do |folder|
|
33
|
+
$options[:output] = folder
|
34
|
+
end
|
35
|
+
|
36
|
+
opts.on( '-B', '--backup FOLDER', "Backup directory to store existing dot files. DEFAULT: #{$options[:backup]}" ) do |folder|
|
37
|
+
$options[:backup] = folder
|
38
|
+
end
|
39
|
+
|
40
|
+
opts.on( '-P', '--prepend COMMAND', "Prepend a custom command to the Dotfile, can be use multiple times." ) do |command|
|
41
|
+
$options[:prepend] << command
|
42
|
+
end
|
43
|
+
|
44
|
+
opts.on( '-A', '--append COMMAND', "Append a custom command to the Dotfile, can be use multiple times." ) do |command|
|
45
|
+
$options[:append] << command
|
46
|
+
end
|
47
|
+
|
48
|
+
end.parse!
|
49
|
+
|
50
|
+
begin
|
51
|
+
load ::File.join ::File.dirname(__FILE__), "actions/#{$options[:action]}.rb"
|
52
|
+
rescue LoadError
|
53
|
+
puts "#{$options[:action]} - No such action."
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
data/lib/dotme/dsl.rb
ADDED
@@ -0,0 +1,50 @@
|
|
1
|
+
require 'fileutils'
|
2
|
+
require 'etc'
|
3
|
+
|
4
|
+
module DotMe
|
5
|
+
class Dsl
|
6
|
+
def self.run( filename )
|
7
|
+
self.new.instance_eval( ::File.read(filename), filename )
|
8
|
+
end
|
9
|
+
|
10
|
+
def _backup( what, where )
|
11
|
+
FileUtils.rm_rf where unless !::File.directory? where
|
12
|
+
Dir.mkdir where, 0700
|
13
|
+
|
14
|
+
what.each do |file|
|
15
|
+
from = ::File.join Etc.getpwuid.dir, file
|
16
|
+
unless file[0] != '.'
|
17
|
+
file = file[1..-1]
|
18
|
+
end
|
19
|
+
if File.exists? from
|
20
|
+
puts "Backupping #{from} to #{where} ..."
|
21
|
+
FileUtils.mv from, ::File.join( where, file )
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
def _link( what, where )
|
27
|
+
puts "Symlinking #{what} to #{where} ..."
|
28
|
+
what = File.absolute_path what
|
29
|
+
File.symlink what, where
|
30
|
+
end
|
31
|
+
|
32
|
+
def method_missing( name, *args )
|
33
|
+
name = "_#{name}"
|
34
|
+
if respond_to? name
|
35
|
+
args.each_with_index do |arg,i|
|
36
|
+
args[i] = arg.is_a?(String) ? arg.gsub( '~', Etc.getpwuid.dir ) : arg.map { |v| v.gsub( '~', Etc.getpwuid.dir ) }
|
37
|
+
end
|
38
|
+
send name.to_sym, *args
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
def git_clone( repo, where )
|
43
|
+
puts "GIT CLONE #{repo} #{where}"
|
44
|
+
end
|
45
|
+
|
46
|
+
def sh( cmd )
|
47
|
+
system cmd
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
data/lib/dotme/errors.rb
ADDED
@@ -0,0 +1,43 @@
|
|
1
|
+
require 'etc'
|
2
|
+
require 'dotme/errors'
|
3
|
+
|
4
|
+
module DotMe
|
5
|
+
class Incubator
|
6
|
+
@@incubators = []
|
7
|
+
@@cells = []
|
8
|
+
|
9
|
+
def initialize(path)
|
10
|
+
@path = path
|
11
|
+
@relative = @path.gsub( Etc.getpwuid.dir, '~' )
|
12
|
+
@basename = ::File.basename @path
|
13
|
+
unless @basename[0] != '.'
|
14
|
+
@basename = @basename[1..-1]
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
def self.register!(c)
|
19
|
+
raise TypeError, 'Not an Incubator derived class.' unless c.respond_to? :incubates?
|
20
|
+
@@incubators << c
|
21
|
+
end
|
22
|
+
|
23
|
+
def self.incubate(path,to)
|
24
|
+
path = ::File.join( Etc.getpwuid.dir, path ) unless ::File.exists? path
|
25
|
+
|
26
|
+
Dir.mkdir to, 0700 unless ::File.directory? to
|
27
|
+
|
28
|
+
puts "Incubating #{::File.basename path} to #{to}"
|
29
|
+
incubator = nil
|
30
|
+
# get the last valid incubator
|
31
|
+
@@incubators.each { |c| if c.incubates? path then incubator = c end }
|
32
|
+
unless incubator
|
33
|
+
raise NoIncubator
|
34
|
+
end
|
35
|
+
|
36
|
+
@@cells << incubator.new(path).incubate(to)
|
37
|
+
end
|
38
|
+
|
39
|
+
def self.cells
|
40
|
+
@@cells
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
require 'fileutils'
|
2
|
+
|
3
|
+
module DotMe
|
4
|
+
class File < Incubator
|
5
|
+
def incubate(to)
|
6
|
+
FileUtils.cp_r @path, ::File.join( to, @basename )
|
7
|
+
|
8
|
+
{ :link => @basename, :to => @relative }
|
9
|
+
end
|
10
|
+
|
11
|
+
def self.incubates?(path)
|
12
|
+
::File.file? path
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
@@ -0,0 +1,21 @@
|
|
1
|
+
module DotMe
|
2
|
+
class Folder < Incubator
|
3
|
+
def incubate(*to)
|
4
|
+
begin
|
5
|
+
require 'git'
|
6
|
+
|
7
|
+
{ :git_clone => Git.open( @path ).config['remote.origin.url'], :to => @relative }
|
8
|
+
rescue
|
9
|
+
FileUtils.cp_r @path, ::File.join( to, @basename )
|
10
|
+
|
11
|
+
{ :link => @basename, :to => @relative }
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
def self.incubates?(path)
|
16
|
+
::File.directory? path
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
|
data/lib/dotme/loader.rb
ADDED
@@ -0,0 +1,13 @@
|
|
1
|
+
module DotMe
|
2
|
+
class Loader
|
3
|
+
def self.load!
|
4
|
+
Dir[ ::File.join ::File.dirname(__FILE__), 'incubators/*.rb' ].each do |file|
|
5
|
+
begin
|
6
|
+
require file
|
7
|
+
clazz = DotMe.const_get file.gsub( /^.*incubators\/(.+)\.rb$/, '\1' ).capitalize
|
8
|
+
DotMe::Incubator.register! clazz
|
9
|
+
rescue; end
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
metadata
ADDED
@@ -0,0 +1,59 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: dotme
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Simone Margaritelli
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2013-08-20 00:00:00.000000000 Z
|
12
|
+
dependencies: []
|
13
|
+
description: A gem to handle dot files easily.
|
14
|
+
email: evilsocket@gmail.com
|
15
|
+
executables:
|
16
|
+
- dotme
|
17
|
+
extensions: []
|
18
|
+
extra_rdoc_files: []
|
19
|
+
files:
|
20
|
+
- lib/dotme/actions/create.rb
|
21
|
+
- lib/dotme/actions/install.rb
|
22
|
+
- lib/dotme/commander.rb
|
23
|
+
- lib/dotme/dsl.rb
|
24
|
+
- lib/dotme/errors.rb
|
25
|
+
- lib/dotme/incubator.rb
|
26
|
+
- lib/dotme/incubators/file.rb
|
27
|
+
- lib/dotme/incubators/folder.rb
|
28
|
+
- lib/dotme/loader.rb
|
29
|
+
- lib/dotme/version.rb
|
30
|
+
- bin/dotme
|
31
|
+
- LICENSE
|
32
|
+
- README.md
|
33
|
+
- dotme.gemspec
|
34
|
+
homepage: http://evilsocket.net/
|
35
|
+
licenses:
|
36
|
+
- BSD
|
37
|
+
metadata: {}
|
38
|
+
post_install_message:
|
39
|
+
rdoc_options:
|
40
|
+
- --charset=UTF-8
|
41
|
+
require_paths:
|
42
|
+
- lib
|
43
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - ! '>='
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '0'
|
48
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
49
|
+
requirements:
|
50
|
+
- - ! '>='
|
51
|
+
- !ruby/object:Gem::Version
|
52
|
+
version: '0'
|
53
|
+
requirements: []
|
54
|
+
rubyforge_project:
|
55
|
+
rubygems_version: 2.0.6
|
56
|
+
signing_key:
|
57
|
+
specification_version: 4
|
58
|
+
summary: A gem to handle dot files easily.
|
59
|
+
test_files: []
|