You cannot select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
	
	
		
			63 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			Python
		
	
			
		
		
	
	
			63 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			Python
		
	
#!/usr/bin/env python2
 | 
						|
"""
 | 
						|
A simple script to create a symlinks in your home directory for every filename
 | 
						|
in this directory.
 | 
						|
 | 
						|
For example:
 | 
						|
    ~/.bashrc -> dot-files/bashrc
 | 
						|
"""
 | 
						|
 | 
						|
from os import getcwd, listdir, getenv, symlink, remove
 | 
						|
from os.path import (dirname, basename, join, expanduser, lexists, exists,
 | 
						|
                     relpath, normpath, isfile, islink, realpath, abspath)
 | 
						|
 | 
						|
def log(filename, message):
 | 
						|
    """Simple logging function"""
 | 
						|
    name = "'{0}':".format(filename).ljust(30, ' ')
 | 
						|
    print "{0}\t{0}".format(name, message)
 | 
						|
 | 
						|
def dir_filter(file_name):
 | 
						|
    return file_name != basename(__file__) and \
 | 
						|
           file_name != 'README.md' and \
 | 
						|
           file_name[0] != '.'
 | 
						|
 | 
						|
def main():
 | 
						|
    """Create the symlinks"""
 | 
						|
    dir_path = dirname(__file__)
 | 
						|
    base_name = dirname(normpath(join(getenv('PWD'), __file__)))
 | 
						|
    home_dir = expanduser('~')
 | 
						|
    rel_path = normpath(relpath(base_name, home_dir))
 | 
						|
 | 
						|
    for filename in filter(dir_filter, listdir(dirname(abspath(__file__)))):
 | 
						|
        config_path = join(home_dir, ".{0}".format(filename))
 | 
						|
        file_path = join(rel_path, filename)
 | 
						|
 | 
						|
        # If the current file is going to be linked deeper in the
 | 
						|
        # home directory, for example, we want to link
 | 
						|
        # `~/.ssh/config` instead of the whole `~/.ssh` directory.
 | 
						|
        if filename[0] == '_':
 | 
						|
            deep_dirs = filename[1:].split('_')
 | 
						|
            link_file = deep_dirs[-1]
 | 
						|
            dir_name = join(*deep_dirs[:-1])
 | 
						|
            config_path = join(home_dir, ".{0}".format(dir_name), link_file)
 | 
						|
            file_path = join("..", file_path)
 | 
						|
 | 
						|
        if lexists(config_path):
 | 
						|
            if not exists(config_path):
 | 
						|
                # If it does not exists but lexists is true, that means this
 | 
						|
                # is a broken symlink
 | 
						|
                remove(config_path)
 | 
						|
            elif islink(config_path):
 | 
						|
                if realpath(config_path) != file_path:
 | 
						|
                    continue
 | 
						|
            elif isfile(config_path):
 | 
						|
                log(config_path, 'existing file, consider merge')
 | 
						|
                continue
 | 
						|
 | 
						|
        log(config_path, "now linking to '{0}'".format(file_path))
 | 
						|
        symlink(file_path, config_path)
 | 
						|
 | 
						|
if __name__ == '__main__':
 | 
						|
    main()
 | 
						|
 |