Cross-platform application management aggregator


License
MIT
Install
pip install appman==0.2.0a1

Documentation

appman

appman is cross-platform application management aggregator

Build Status

Requirements

  • Python 3.8
  • Git

Installation

You can install appman from PyPI:

> pip install appman

Background

While working on my dotfiles repository, I realized that I also wanted to have a way to handle not just configuration files but also my installed applications. That way I'd be able to define which applications I want to have installed on any new environment, have those under version control, and run a script to install/uninstall applications on any new personal or work computer, server, etc.

Goals

The main goal for appman is to be flexible and extensible. In that context the goals are:

  • Cross-platform: handle multiple OS and devices. Currently appman handles Ubuntu and Windows (desktop).
  • Multi-profile: define different profiles with a unique list of applications for different environments (e.g., work and personal computers).
  • Supported Packages: aside from desktop and command line applications, support software like: device drivers, software plugins and extensions (e.g., vscode extensions), backend libraries (e.g., python libraries), fonts, etc.
  • Package Management: support any package manager (e.g., apt, brew, scoop) or custom formulas to define how to install, uninstall and upgrade packages.
  • Package definitions source: the source for package definitions is a git repository, which allows you to fork and use your own repository.

How to use

Set up your user package list

  • Add a package to your user packages list

    Using interactive mode:

    $ appman add
    
    [?] Select the package type: (Use arrow keys)
    >app
     font
     driver
     provisioned
     backend
     extension
    
    [?] Select app packages to add: (<up>, <down> to move, <space> to select, <a> to toggle, <i> to invert)
     β—‹ curl
     β—‹ fzf
    >● git
     β—‹ jq
     β—‹ python
     β—‹ ...
    
    Added git package

    or directly passing parameters:

    $ appman add -pt app -id git
  • Remove a previously added package

    Using interactive mode:

    $ appman remove
    
    [?] Select the package type: (Use arrow keys)
    >app
     font
     driver
     provisioned
     backend
     extension
    
    [?] Select app packages to remove: (<up>, <down> to move, <space> to select, <a> to toggle, <i> to invert)
     β—‹ 7zip
     β—‹ curl
    >● git
     β—‹ ...
    
    Removed git package

    Directly passing parameters:

    $ appman remove -pt app -id git
  • Show your user packages list

    Using interactive mode:

    $ appman list
    
    [?] Select the package type: (Use arrow keys)
    >app
    
     β€’ 7zip (cli, utils)
     β€’ curl (cli, utils)

    Directly passing parameters:

    $ appman list -pt app
  • Search all available packages to add

    Using interactive mode:

    $ appman search
    
    [?] Select the package type: (Use arrow keys)
    >app
    
     β€’ 7zip
     β€’ ack
     β€’ apache2
     β€’ aria2
     β€’ bottom
     β€’ broot
     β€’ cookiecutter
     β€’ curl
    ...

    Directly passing parameters:

    $ appman search -pt app -id 7zip

Install/Uninstall packages in your user packages list

Using interactive mode:

$ appman install

[?] Select the package type: (Use arrow keys)
>app

Installing 7zip...
Installing ack...
...

Directly passing parameters:

$ appman install -pt app -id 7zip

Change the package definitions repository source

$ appman repo https://github.com/basiliskus/appman-main

Update the package definitions repository source

$ appman update

Using labels

All packages have pre-defined labels (e.g. for apps: 'cli' & 'gui'), but you can also add your own labels by passing the --labels/-l parameter to the 'add' command.

$ appman add -pt app -id 7zip -l server

You can also filter by labels when using the 'list', 'search', 'remove', 'install' or 'uninstall' commands

$ appman list -pt app -l server

License

Β© Basilio Bogado. Distributed under the MIT License.