Metadata-Version: 2.0
Name: syp
Version: 0.1.3
Summary: Sync your packages with your dotfiles (and vice versa).
Home-page: https://github.com/vindarel/syp
Author: vindarel
Author-email: ehvince@mailz.org
License: GNU GPLv3
Keywords: utility packages shell
Platform: UNKNOWN
Classifier: Environment :: Console
Classifier: License :: Public Domain
Classifier: Topic :: Utilities
Requires-Dist: addict
Requires-Dist: clize
Requires-Dist: future
Requires-Dist: six
Requires-Dist: termcolor

Sync your packages with your dotfiles
=====================================

When we use a package manager (be it apt, pip, npm,…), we want to sync
the list of installed packages in requirement files. We then declare a
mapping that links a package manager to its requirements file:

.. code:: python

    REQUIREMENTS_ROOT_DIR = "~/dotfiles/"
    REQUIREMENTS_FILES = {
        "apt": {
            "file": "apt.txt", # => ~/dotfiles/apt.txt
            "pacman": "apt-get",
            "install": "install -y --force-yes",
            "uninstall": "remove",
            },
        # and so on for pip, pip3, gem, npm, etc
    }

and we call

.. code:: example

    syp --pm apt foo bar

to add the two packages "foo" and "bar" in ``~/dotfiles/apt.txt`` and at
the same time, to check if this list has been edited manually (with
packages added or removed) and act accordingly (we make diffs against
the cache at ``~/.syp/apt.txt``).

See the command ``syp --init`` and the Settings section below.

Tested on python 2.7 and 3.4.

Usage
-----

The basic usage is to check all of the package managers, and install and
remove what's necessary:

Example:

.. code:: example

    syp

can output:

.. raw:: html

    <img src="http://i.imgur.com/NXiddZB.png" </img>

We set the package manager with ``--pm`` and **give one or many packages
to install**:

.. code:: example

    syp --pm pip syp foo bar

will append "syp", "foo" and "bar" at the bottom of
``~/dotfiles/pip.txt`` (if they are not there yet), check if pip.txt was
manually edited, and suggest a list of packages to install and remove.

So a suggested alias is

.. code:: example

    alias sypip="syp --pm pip "

If no package manager is specified, **we use apt by default** (see
Settings below).

To **remove packages**, use ``--rm``:

.. code:: example

    syp --pm pip foo --rm

We can **add a message** with ``-m``. It will be appended on the same
line:

.. code:: example

    syp --pm pip foo -m "foo is a cool package"

We can **edit the list** of packages for that package manager before the
operations with ``-e`` (``--editor``):

.. code:: example

    syp --pm pip foo --rm -e

Settings
========

The default settings come with a configuration for ``apt``, ``pip``,
``pip3``, ``gem``, ``npm``, ``docker`` and ``guix``.

The user settings, stored at ``~/.syp/settings.py``, is a regular python
file that will be ``exec``'ed on startup. So, if you want to add or
overide a package manager settings, edit the ``REQUIREMENTS_FILES``
dictionnary accordingly. Only the key "file" is required:

.. code:: python

    REQUIREMENTS_FILES['apt'] = {
        "file": "requirements-apt.txt", # required. appended to REQUIREMENTS_ROOT_DIR
        "pacman": "aptitude",           # by default, same as the package manager name, here 'apt'
        "install": "install -y",        # 'install' by default
        "uninstall": "remove",          # 'uninstall' by default.
    }

See also

.. code:: python

    #: The base directory where lies the configuration files.
    REQUIREMENTS_ROOT_DIR = "~/dotfiles/"

    #: System package manager, as a default.
    SYSTEM_PACMAN = "apt-get"

Develop
=======

.. code:: example

    pip install -e .

TODOs and ideas
===============

-  more tests
-  auto-recognize a virtualenv
-  undo last action
-  auto commit
-  allow for more than a requirement file for one package manager.

   Bust most of all... use `Guix <https://gnu.org/software/guix/>`__ !




