Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/jaredks/rumps

Ridiculously Uncomplicated macOS Python Statusbar apps
https://github.com/jaredks/rumps

Last synced: 2 days ago
JSON representation

Ridiculously Uncomplicated macOS Python Statusbar apps

Awesome Lists containing this project

README

        

rumps
=====

**R**\ idiculously **U**\ ncomplicated **m**\ acOS **P**\ ython **S**\ tatusbar apps.

.. image:: https://raw.github.com/jaredks/rumps/master/examples/rumps_example.png

.. code-block:: python

import rumps

class AwesomeStatusBarApp(rumps.App):
@rumps.clicked("Preferences")
def prefs(self, _):
rumps.alert("jk! no preferences available!")

@rumps.clicked("Silly button")
def onoff(self, sender):
sender.state = not sender.state

@rumps.clicked("Say hi")
def sayhi(self, _):
rumps.notification("Awesome title", "amazing subtitle", "hi!!1")

if __name__ == "__main__":
AwesomeStatusBarApp("Awesome App").run()

How fun!?

``rumps`` can greatly shorten the code required to generate a working app. No ``PyObjC`` underscore syntax required!

Use case
--------

``rumps`` is for any console-based program that would benefit from a simple configuration toolbar or launch menu.

Good for:

* Notification-center-based app
* Controlling daemons / launching separate programs
* Updating simple info from web APIs on a timer

Not good for:

* Any app that is first and foremost a GUI application

Required
--------

* PyObjC
* Python 2.6+

Mac OS X 10.6 was shipped with Python 2.6 as the default version and PyObjC has been included in the default Python
since Mac OS X 10.5. If you're using Mac OS X 10.6+ and the default Python that came with it, then ``rumps`` should be
good to go!

Recommended
-----------

* py2app

For creating standalone apps, just make sure to include ``rumps`` in the ``packages`` list. Most simple statusbar-based
apps are just "background" apps (no icon in the dock; inability to tab to the application) so it is likely that you
would want to set ``'LSUIElement'`` to ``True``. A basic ``setup.py`` would look like,

.. code-block:: python

from setuptools import setup

APP = ['example_class.py']
DATA_FILES = []
OPTIONS = {
'argv_emulation': True,
'plist': {
'LSUIElement': True,
},
'packages': ['rumps'],
}

setup(
app=APP,
data_files=DATA_FILES,
options={'py2app': OPTIONS},
setup_requires=['py2app'],
)

With this you can then create a standalone,

.. code-block:: bash

python setup.py py2app

Installation
------------

Using pip,

.. code-block:: bash

pip install rumps

Or from source,

.. code-block:: bash

python setup.py install

Both of which will require ``sudo`` if installing in a system-wide location.

Virtual Environments
--------------------

There are issues with using ``virtualenv`` because of the way the Python
executable is copied. Although ``rumps`` attempts to apply a fix (hack) during
the install process, it is not suggested to use ``virtualenv``.

To ensure proper functionality, either use ``venv`` (packaged with Python 3) or
create a standalone app using ``py2app``.

.. code-block:: bash

python3 -m venv env

Documentation
-------------

Documentation is available at http://rumps.readthedocs.org

License
-------

"Modified BSD License". See LICENSE for details. Copyright Jared Suttles, 2020.

Works Made With rumps
---------------------

`20twenty20 - eohomegrownapps
`_

`42-CanITakeCoffee - avallete
`_

`air-quality-app - grtfou
`_

`Airplane - C-Codes
`_

`allbar - raphaelhuefner
`_

`allofthelights - kenkeiter
`_

`attendee-tool-mlh - Bucknalla
`_

`Auroratain - Matt-McConway
`_

`AutoSSP - viktyz
`_

`AutoVPN - shadyabhi
`_

`BackgroundsForReddit - karlaugsten
`_

`bink - e40
`_

`bitracker - JZChen
`_

`BluetoothEvent - lostman-github
`_

`break-timer - jjmojojjmojo
`_

`breaker - amloewi
`_

`bundle-checker - jeffgodwyll
`_

`c1t1 - e9t
`_

`CamAlert - MrBananaPants
`_

`camsketch - pdubroy
`_

`casita - david-kuehn
`_

`ChargeMon - RhetTbull
`_

`ComicStreamer - beville
`_

`commitwatch - chrisfosterelli
`_

`ComMute - cwverhey
`_

`computer-time - rbrich
`_

`crypto-ticker-macOS - mqulateen
`_

`cryptocoin-quotes - Sayan98
`_

`cuco - jjuanda
`_

`currency-converter - ahmedelgohary
`_

`dns.app - damln
`_

`Dokky - rogierkn
`_

`dolar_bitcoin - celis
`_

`duplicati - duplicati
`_

`dysonMacOS - fhenwood
`_

`earth - nickrobson
`_

`ForceNapClone - hroftgit
`_

`freelan-bar - privacee
`_

`g-assistant-mac - agucova
`_

`gapa - ozlerhakan
`_

`GitSyncApp - jachin
`_

`Gumpy - RobGraham
`_

`Habitus - kmundnic
`_

`HalfCaff - dougn
`_

`happymac - laffra
`_

`harmenubar - vekkt0r
`_

`hatarake - kfdm-archive
`_

`HipStatus - jamfit
`_

`hp-lorem - jamesrampton
`_

`hs100-status-bar - craig-davis
`_

`iBatteryStats - saket13
`_

`iBrew - Tristan79
`_

`idiot - snare
`_

`interlocking - jrauch
`_

`istat - Lingdu0
`_

`keynote_snap - sasn0
`_

`Keypad - jelmer04
`_

`keyringo - tokenizecx
`_

`kizkiz - TkTech
`_

`koinex-status-ticker - kirantambe
`_

`leaguefriend - pandarison
`_

`LifxController - mitchmcdee
`_

`lil_ip_toolbar - mchlrtkwski
`_

`mac-shrew - mejmo
`_

`MacFaceID - vkalia602
`_

`majo-v - r4lv
`_

`MBatteryApp - Elliot-Potts
`_

`McBing - bagabont
`_

`Memcode - aroraenterprise
`_

`memdam - joshalbrecht
`_

`MenuBarGmail - rcmdnk
`_

`MenuPing - Julien Bordet
`_

`midi2dmx - davidbistolas
`_

`monero-ticker - Cisplatin
`_

`MoodLight - kretash
`_

`MoonTicker - skxu
`_

`musicbar - russelg
`_

`narcissist - helmholtz
`_

`Noise-Line - Dnncha
`_

`nowplaying_statusbar - MataiulS
`_

`obmenka - vlakin
`_

`OnAir - henrik242
`_

`org-clock-dashboard - srid
`_

`osx-bamboo-plan-status - spalter
`_

`osx-myair - CameronEx
`_

`PennAppsX - yousufmsoliman
`_

`phd - ChrisCummins
`_

`pokemon-go-status - pboardman
`_

`polly - interrogator
`_

`pompy - camilopayan
`_

`project_screen_to_lifx - emiraga
`_

`PSPEWC-mac - jacquesCedric
`_

`py-Timey - asakasinsky
`_

`pymodoro - volflow
`_

`pySplash - Egregors
`_

`quick-grayscale - shubhamjain
`_

`quiet - hiroshi
`_

`Radio-Crowd - EliMendelson
`_

`RadioBar - wass3r
`_

`RadioBar (fork) - mdbraber
`_

`rescuetime_statusbar - MauriceZ
`_

`rideindegochecker - josepvalls
`_

`RitsWifi - fang2hou
`_

`safety-bar - pyupio
`_

`SAT-Vocab-Quizzer - Legoben
`_

`sb-translate - leandroltavares
`_

`sharfoo - furqan-shakoor
`_

`ShortyURLShortener - Naktrem
`_

`shotput - amussey
`_

`SingMenuData - ponyfleisch
`_

`slack-status-bar - ericwb
`_

`slackify - nikodraca
`_

`Snapgrid - VladUsatii
`_

`snippets - quillford
`_

`sonostus - sarkkine
`_

`Spaceapi-Desktop - UrLab
`_

`SpaceSwitcher - SankaitLaroiya
`_

`Speck - misternate
`_

`SpotifyLyrics - yask123
`_

`Statusbar Converter - mindaugasw
`_

`steemticker-osx - ZachC16
`_

`Timebar - devonkong
`_

`Timebox - visini
`_

`Telkom-ADSL-Data-Usage - parautenbach
`_

`Telton - Yywww
`_

`Textinator - RhetTbull
`_

`these-days - hahayes
`_

`time-tracking - willsgrigg
`_

`timerbar - uberalex
`_

`tracker - jtxx000
`_

`TrojanA - chrisxiao
`_

`umma - mankoff
`_

`upbrew - stchris
`_

`uptimeIndicator - paulaborde
`_

`urstatus - kysely
`_

`uStatus - kdungs
`_

`VagrantBar - kingsdigitallab
`_

`voiceplay - tb0hdan
`_

`volsbb - akigugale
`_

`Volumio_bar - volderette
`_

`votingpowerbar - therealwolf42
`_

`VPN Handler - tsarenkotxt
`_

`WakeTime App - dleicht
`_

`WallpDesk - L3rchal
`_

`webcronic - josselinauguste
`_

`Whale - amka
`_

`WhyFi - OzTamir
`_

`WordTime - Demonstrandum
`_

`work_time_percent_applet - Benhgift
`_

`WorkWise - 8ern4ard
`_

`xCodea - lowne
`_

`yaca - drproteus
`_

`Zero - beejhuff
`_

Submit a pull request to add your own!
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

Contributing
------------

If you've submitted a pull request and need it reviewed, please request a review from `@daredoes
`_ (contributing in free time, so please be patient)