Giter VIP home page Giter VIP logo

toda's Introduction

Toda

Toda (תודה) gives you the power to safely deploy files using symlinks on any operating system with Python installed.

Toda requires only core Python, supporting versions 3.4+ and 2.7. Toda has multi-platform support for POSIX-compliant systems, Linux (Debian, Ubuntu, etc), Windows, macOS and BSDs in that order of priority.

Catch22: Toda requires admin rights on Windows. See #8

toda

usage: toda [-h] [-n] [-m MANIFEST] [-f] [-v]
                   [{install,purge,inspect}] [section [section ...]]

creates symlinks described by a manifest

positional arguments:
  {install,purge,inspect}
  section               manifest target

optional arguments:
  -h, --help            show this help message and exit
  -n, --dry-run         nop out all syscalls, verbose
  -m MANIFEST, --manifest MANIFEST
                        path to custom manifest file
  -f, --force           allow clobbering files in target paths
  -v, --verbose

MANIFEST file syntax

  • ~/bin/destination_link: ./section/source_file

    • destination-to-source mapping, with the two arguments delimited by a colon
  • $ bin

    • defines the bin section
  • /bin/sh: @delete deletes /bin/sh

  • @include: bin default

    • includes bin and default
    • in each run of manifest.py includes are resolved recursively so that they are only processed once

Why did you roll your own dotfiles management script?

See the wiki

toda's People

Contributors

ypcrts avatar

Stargazers

 avatar

Watchers

 avatar  avatar

toda's Issues

`@include` order hard to predict in complicated manifests

@include resolves recursively, but order is hard to grok in complicated manifests

this makes overriding one with another hard.

either: overriding within the same manifest in nested sections must be verboten; preflight panic
or: new destination macro, @force is an include you run in order, and ordering must matter, so refactor to use ordered sets for everything (for this i would use an ordered dict because builtin); and you must record @force sections recursively (implement using a queue because python recursion depth limit trash) to prevent a cycle

@force sounds like a lot of work for little. it sounds like poor design. maybe it is.

using different sections that can be manually constructed to cause a force is cooler.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.