Sync your packages with your dotfiles (and vice versa).
Project description
Sync your packages with your dotfiles (and vice versa)
======================================================
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, docker and guix.
}
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 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
===============
- auto commit
- auto-recognize a virtualenv ?
- allow for more than a requirement file for one package manager.
- ask all and apply
- more tests
Bust most of all... use `Guix <https://gnu.org/software/guix/>`__ !
======================================================
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, docker and guix.
}
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 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
===============
- auto commit
- auto-recognize a virtualenv ?
- allow for more than a requirement file for one package manager.
- ask all and apply
- more tests
Bust most of all... use `Guix <https://gnu.org/software/guix/>`__ !
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
syp-0.1.6.tar.gz
(8.3 kB
view hashes)
Built Distributions
syp-0.1.6-py2.7.egg
(23.2 kB
view hashes)
syp-0.1.6-py2-none-any.whl
(17.8 kB
view hashes)