{"id":39595971,"url":"https://github.com/adamstimb/nimbusinator","last_synced_at":"2026-01-18T07:48:40.455Z","repository":{"id":57446211,"uuid":"221475537","full_name":"adamstimb/nimbusinator","owner":"adamstimb","description":"The project has been superceded by Nimgobus (https://github.com/adamstimb/nimgobus)","archived":false,"fork":false,"pushed_at":"2020-03-13T16:22:21.000Z","size":7491,"stargazers_count":0,"open_issues_count":2,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-09-25T00:41:37.882Z","etag":null,"topics":["gui","python","retrocomputing"],"latest_commit_sha":null,"homepage":"","language":"HTML","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/adamstimb.png","metadata":{"files":{"readme":"readme.md","changelog":null,"contributing":null,"funding":null,"license":"license.txt","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2019-11-13T14:16:16.000Z","updated_at":"2020-04-30T18:21:04.000Z","dependencies_parsed_at":"2022-09-02T23:40:55.533Z","dependency_job_id":null,"html_url":"https://github.com/adamstimb/nimbusinator","commit_stats":null,"previous_names":[],"tags_count":4,"template":false,"template_full_name":null,"purl":"pkg:github/adamstimb/nimbusinator","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/adamstimb%2Fnimbusinator","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/adamstimb%2Fnimbusinator/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/adamstimb%2Fnimbusinator/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/adamstimb%2Fnimbusinator/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/adamstimb","download_url":"https://codeload.github.com/adamstimb/nimbusinator/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/adamstimb%2Fnimbusinator/sbom","scorecard":{"id":165582,"data":{"date":"2025-08-11","repo":{"name":"github.com/adamstimb/nimbusinator","commit":"a7bb7e282b8322c1a97bffc3c40ab0541f746615"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":3,"checks":[{"name":"Code-Review","score":0,"reason":"Found 0/15 approved changesets -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#code-review"}},{"name":"Packaging","score":-1,"reason":"packaging workflow not detected","details":["Warn: no GitHub/GitLab publishing workflow detected."],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#packaging"}},{"name":"Maintained","score":0,"reason":"0 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"Dangerous-Workflow","score":-1,"reason":"no workflows found","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#dangerous-workflow"}},{"name":"Token-Permissions","score":-1,"reason":"No tokens found","details":null,"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#token-permissions"}},{"name":"Binary-Artifacts","score":10,"reason":"no binaries found in the repo","details":null,"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#binary-artifacts"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#cii-best-practices"}},{"name":"Security-Policy","score":0,"reason":"security policy file not detected","details":["Warn: no security policy file detected","Warn: no security file to analyze","Warn: no security file to analyze","Warn: no security file to analyze"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#security-policy"}},{"name":"Pinned-Dependencies","score":-1,"reason":"no dependencies found","details":null,"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#pinned-dependencies"}},{"name":"Vulnerabilities","score":10,"reason":"0 existing vulnerabilities detected","details":null,"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#fuzzing"}},{"name":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: license.txt:0","Info: FSF or OSI recognized license: MIT License: license.txt:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"Signed-Releases","score":-1,"reason":"no releases found","details":null,"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"Branch-Protection","score":0,"reason":"branch protection not enabled on development/release branches","details":["Warn: branch protection not enabled for branch 'master'"],"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#branch-protection"}},{"name":"SAST","score":0,"reason":"SAST tool is not run on all commits -- score normalized to 0","details":["Warn: 0 commits out of 18 are checked with a SAST tool"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}}]},"last_synced_at":"2025-08-16T14:44:18.923Z","repository_id":57446211,"created_at":"2025-08-16T14:44:18.923Z","updated_at":"2025-08-16T14:44:18.923Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28533172,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-18T00:39:45.795Z","status":"online","status_checked_at":"2026-01-18T02:00:07.578Z","response_time":98,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["gui","python","retrocomputing"],"created_at":"2026-01-18T07:48:39.780Z","updated_at":"2026-01-18T07:48:40.440Z","avatar_url":"https://github.com/adamstimb.png","language":"HTML","funding_links":[],"categories":[],"sub_categories":[],"readme":"# ![Nimbusinator](nimbusinator.png)\n\nRM Nimbus GUI for Python\n\n## About\n\nNimbusinator is a graphical user-interface package for Python that mimicks the graphics and text drivers of the RM Nimbus PC186.  It is _not_ an emulation of the Nimbus itself.  This means you get the best of both worlds:  Cutting-edge Python computing power, beautifully presented in up to 16 colours!\n\n![Quick Start Animation](quickstart_animation.gif)\n\nDisclaimer: Nimbusinator is a tribute project and is in no way linked to or endorsed by RM plc.\n\n[Read the docs for full details](https://nimbusinator.readthedocs.io/)\n\n## Usage\n\nTo implement a Nimbus user interface all you need to do is import the `Nimbus` and `Command` classes, like this:\n\n```python\nfrom nimbusinator.nimbus import Nimbus\nfrom nimbusinator.command import Command\n```\n\nThen create one object of each, and bind the `Command` object to the `Nimbus` object:\n\n```python\nnim = Nimbus()\ncmd = Command(nim)\n```\n\nTo display the screen, call the `boot` method on the `Nimbus` object.  By default, you'll see the famous blue \"Welcome Screen\" before control is released back to your program.  To skip the Welcome Screen simply pass the argument `skip_welcome_screen=True` when calling `boot`, like this:\n\n```python\n# Boot the Nimbus with Welcome Screen\nnim.boot()\n# Boot the Nimbus without Welcome Screen  \nnim.boot(skip_welcome_screen=True)\n```\n\nNote that the original Welcome Screen reported the memory status of the computer (in kilobytes!), alongside the RM firmware version and machine serial number.  Nimbusinator also displays memory status (but in units of Megabytes) and uses your Python version as the firmware version and your OS release number as the serial number.  It also uses information from your runtime environment to simulate a short DOS-like boot sequence before finally releasing control back to your application.  All the while you can enjoy the dulcet tones of an imaginary floppy drive.\n\nTo bring the Nimbus programming experience into the 21st century, the API - although Pythonic - has been modelled on the syntax of RM Basic.  For example, in RM Basic to write a greeting in big, red letters in the bottom-left corner of the screen you would use the `PLOT` command:\n\n```basic\nPLOT \"Hi kittens!\", 10, 10 BRUSH 2 SIZE 4\n```\n\nAnd in Python with Nimbusinator you can write the same instruction like this:\n\n```python\ncmd.plot('Hi kittens!', (10, 10), brush=2, size=4)\n```\n\nIt is recommended to read the RM Basic manual to get familiar with the original commands and how graphics and text were handled on the Nimbus (see links below).\n\nTo cleanly exit your application, call the `shutdown` method on the `Nimbus` object:\n\n```python\n# Always do this before your app quits:\nnim.shutdown()\n```\n\n## Installation\n\nNimbusinator is technically cross-platform but there are differences in the way PyGame's dependencies are installed between operating systems.  So far I have only tested installation on Ubuntu 19.04 (see below).  If you have tested PyGame successfully on other platforms please drop the magic formula in [the issues](https://github.com/adamstimb/nimbusinator/issues) and I'll add it below.\n\n### Ubuntu 19.04\n\n```bash\n# Install dependencies for pygame and simpleaudio:\nsudo apt-get install -y python3-dev libasound2-dev python3-setuptools python3-numpy python3-opengl libsdl-image1.2-dev libsdl-mixer1.2-dev libsdl-ttf2.0-dev libsmpeg-dev libsdl1.2-dev libportmidi-dev libswscale-dev libavformat-dev libavcodec-dev libtiff5-dev libx11-6 libx11-dev fluid-soundfont-gm timgm6mb-soundfont xfonts-base xfonts-100dpi xfonts-75dpi xfonts-cyrillic fontconfig fonts-freefont-ttf libfreetype6-dev\n\n# Then activate your Python env and install:\npip install nimbusinator\n```\n\n## Quick-start\n\n\n```python\nfrom nimbusinator.nimbus import Nimbus\nfrom nimbusinator.command import Command\n\nif __name__ == '__main__': \n    # Create and bind nimbusinator objects:\n    nim = Nimbus()\n    cmd = Command(nim)\n    nim.boot()          # Boot the Nimbus\n    cmd.set_mode(40)    # Low resolution mode\n    cmd.set_border(1)   # Dark blue border\n    cmd.set_paper(9)    # Light blue paper\n    cmd.cls()           # Clear screen\n    cmd.plonk_logo((8, 110))    # Show Nimbus logo\n    # Display a message in cyan with shadowing\n    cmd.plot('Greetings!!!', (65, 155), size=2, brush=0)\n    cmd.plot('Greetings!!!', (66, 156), size=2, brush=13)\n    # Wait 5 seconds then shutdown\n    nim.sleep(5)\n    nim.shutdown()\n```\n\n## Links\n\n- [Read the Docs](https://nimbusinator.readthedocs.io/) - Full documentation\n- [Facebook](https://www.facebook.com/RMNimbus/) - RM Nimbus facebook group\n- [Center for Computing History](http://www.computinghistory.org.uk/) - original RM Nimbus manuals and technical data\n- [Center for Computing History - RM Nimbus PC (Later Beige Model)](http://www.computinghistory.org.uk/det/41537/RM-Nimbus-PC-(Later-Beige-Model)/) - online exhibit\n- [The Nimbus Museum](https://thenimbus.co.uk/) - online museum that looks like the Welcome Disk!\n- [RM Nimbus](https://en.wikipedia.org/wiki/RM_Nimbus) - Wikipedia article\n- [mame](https://www.mamedev.org/) - comprehensive retro computer emulation project\n- [Freesound pack: Floppy disk drive](https://freesound.org/people/MrAuralization/packs/15891/) - source of the floppy drive sounds\n- [Ironstone Innovation](https://ironstoneinnovation.eu) - what I do for a living","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fadamstimb%2Fnimbusinator","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fadamstimb%2Fnimbusinator","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fadamstimb%2Fnimbusinator/lists"}