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.4.tar.gz
(8.3 kB
view details)
Built Distributions
syp-0.1.4-py2.7.egg
(23.2 kB
view details)
syp-0.1.4-py2-none-any.whl
(17.8 kB
view details)
File details
Details for the file syp-0.1.4.tar.gz
.
File metadata
- Download URL: syp-0.1.4.tar.gz
- Upload date:
- Size: 8.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 064a45d8c1b3a749615f89a119545366e2180e53199657b44ad436b99214776d |
|
MD5 | b2890b60bc9050db04a105d46b7e5af1 |
|
BLAKE2b-256 | 46176ad2ef51a8733da41bb870cf5ff2e5f0ca44fd07b04e100f4ff3ab81c187 |
File details
Details for the file syp-0.1.4-py2.7.egg
.
File metadata
- Download URL: syp-0.1.4-py2.7.egg
- Upload date:
- Size: 23.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 2e3c72747959d8ff389e0ed8c584b07ad80ed07f261641bced83c43054826d04 |
|
MD5 | 32abb5c0f610ae30766ea9890b819c1c |
|
BLAKE2b-256 | 837ff2048ba8b288f5ff709175e69a125a46f25ae4aeb24e845b105f89a7e476 |
File details
Details for the file syp-0.1.4-py2-none-any.whl
.
File metadata
- Download URL: syp-0.1.4-py2-none-any.whl
- Upload date:
- Size: 17.8 kB
- Tags: Python 2
- Uploaded using Trusted Publishing? No
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | c63979bf2aecfe562a6195751586210a4fa5c3346061b4bb9324c8d1cf438b1d |
|
MD5 | adacf360639c28d0bce61806133498aa |
|
BLAKE2b-256 | 781d2e14230269496f2abc8ad941e15a070db9c521b945426d97695ff86e735f |