Skip to content

Latest commit

 

History

History
198 lines (135 loc) · 4.38 KB

readme.md

File metadata and controls

198 lines (135 loc) · 4.38 KB

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.