Skip to main content

The fun cross-platform package manager!

Project description

Funstall

This is my own custom software installer (well, mostly it's a wrapper around other package managers) that keeps my Linux and Mac machines up-to-date.

Usage

NOTE Since this tool currently requires pyenv it does not run on Windows.

Installation

NOTE This tool uses pyenv to install itself and other software that runs on Python. The installer will install pyenv if it is not available.

(
  ^curl
    --silent
    --show-error
    --location
    https://raw.githubusercontent.com/hbibel/funstall/refs/heads/main/install.nu
    -o /tmp/install-funstall.nu
)
nu /tmp/install-funstall.nu  # Add flags as required
rm /tmp/install-funstall.nu

A link to the executable will be placed at ~/.local/bin. Make sure this is on your PATH.

Invokation

Run funstall --help or funstall <COMMAND> --help for usage instructions.

Why?

I use multiple operating systems on multiple machines, requiring me to switch between package managers (mainly pacman and brew). My goal is to have a consistent, personal workflow no matter which machine I use, so I need a wrapper around platform-specific package managers.

As a side note, I also don't agree with how some AUR packages are implemented, so I'm hesitant to use yay on Arch. Implementing my own installation scripts based on AUR implementations also makes me feel safer from supply-chain attacks.

About Sources

Funstall can pull packages using various other tools, e.g. pip or brew, which are called "sources". Generally the source closest to the original developer's control is selected, e.g. PyPI or NPM are usually more directly managed by the developers, and thus tend to be more up-to-date. The preferred order of sources is implemented in funstall/installation/source_priorities.py.

Implementation Considerations

Initially I planned to implement this in nushell within my dotfiles. However I started to feel uneasy with the rather simplistic typing system in nushell as data models surpassed a certain level of complexity. Therefore I decided to reach for another programming language.

I started this project using Python because I want to avoid writing a GitHub action for now to distribute this project across my computers. While I quickly realized that I cannot easily get around a build step I stuck with Python because I'm most productive with it. Generally I prefer compiled languages for CLI applications though so I may rewrite in Rust™ in the future (or in another language).

Development

Publish a new version:

First create a PyPI API key with access to the repository. Then save it in .pypi-token.secret.

uv build --sdist
uv publish --token $(cat .pypi-token.secret)

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

funstall-0.1.5.tar.gz (43.9 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

funstall-0.1.5-py3-none-any.whl (30.9 kB view details)

Uploaded Python 3

File details

Details for the file funstall-0.1.5.tar.gz.

File metadata

  • Download URL: funstall-0.1.5.tar.gz
  • Upload date:
  • Size: 43.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.8.14

File hashes

Hashes for funstall-0.1.5.tar.gz
Algorithm Hash digest
SHA256 5d0b94d37ad3982230f16c3f97e41e0036b4c0aaad204c961170bad30b019bd5
MD5 de392f6256fd3d44e2fd835a430dfc67
BLAKE2b-256 51c256e6e096e7e3ac2bbc8e079984566ef2541d9a203a0902c8d82e123b46c1

See more details on using hashes here.

File details

Details for the file funstall-0.1.5-py3-none-any.whl.

File metadata

  • Download URL: funstall-0.1.5-py3-none-any.whl
  • Upload date:
  • Size: 30.9 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.8.14

File hashes

Hashes for funstall-0.1.5-py3-none-any.whl
Algorithm Hash digest
SHA256 487d09912e7971ca918ace284593db43d3e30ff905f2596ab97bb6cdfb6b65c5
MD5 6427c6568b68d300a215ba97b9857f1f
BLAKE2b-256 64a803ea79fc57d532a8736baf7e8fb2b13fea30eca50081e7fbff2e8ccb455d

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page