GithubHelp home page GithubHelp logo

atomic-studio-org / boxes Goto Github PK

View Code? Open in Web Editor NEW
0.0 1.0 0.0 176 KB

Toolboxes for Atomic Studio usage

License: Apache License 2.0

Nix 23.62% Dockerfile 67.88% Shell 8.50%
toolboxes containers distrobox

boxes's Introduction

toolboxes

Centralized repository of containers designed for Toolbox/Distrobox with batteries included. These toolboxes strive for:

  • Instant launch
  • Include quadlets and systemd service units for management
  • Intended to be used as general purpose toolboxes for "daily driver" usage
  • Can be used with boxkit as base images to manage your own custom setup

Images

  • ubuntu-toolbox - an Ubuntu base image
  • fedora-toolbox - a Fedora base image
  • wolfi-toolbox - a WolfiOS base image
  • bluefin-cli - a WolfiOS based image with Homebrew and a strongly opinionated default experience

It is strongly recommended that the Prompt terminal be used with these toolboxes and is the default experience in both Bazzite and Bluefin.

Automatic Toolbox Startup

Quadlets

Podman supports starting containers via a systemd generator. Quadlets replaced the podman generate systemd command and provide a method to create a systemd service for managing your container. The generated unit file can automatically start your container on login, automatically check for updates from the registry, and automatically clean-up the container and any transient volumes when the container stops. This provides an ideal way to have a clean slate on each login.

Inside the quadlets directory are example quadlets each of the toolboxes listed above. Distrobox and Toolbox provide a convenient way to integrate the containers into your host.ubuntu-toolbox and fedora-toolbox can use either toolbox or distrobox. wolfi-toolbox and bluefin-cli are currently only compatible with distrobox.

The quadlets mimic the create and enter commands to setup the container. You can use these by copying them to ~/.config/containers/systemd. When using the Prompt terminal, they will appear in the menu as available containers. The Exec= line of the distrobox quadlets can be modified to include additional packages.

To get automatic updates you will need to enable podman-auto-update.timer which by default will auto-update at midnight. Quadlets support creating volumes using a .volume unit. These volumes can be accessed by other containers by prepending the name of .volume with systemd.

Systemd one-shots

An alternative method for having automatic toolbox startup is to leverage systemd one-shot services and distrobox assemble commands.

Distrobox assemble enables the user to declare a setup without going through the process of creating a customized image. Instead, an ini style file can be used with distrobox-assemble and distrobox-enter to setup and enter a modified container. Example assemble files are available here and on the universal-blue discourse.

To utilize these, place the user service file in ~/.config/systemd/user and make sure the assemble file is in place. The ones inside the repo are set to replace the existing container of the same to behave similar to the quadlet. Again you can access .volume by using the name of the volume unit prepended with systemd.

Bluefin-CLI

bluefin-cli is built from wolfi-toolbox. It contains Homebrew configured out of the box. The brew state is bind mounted to a directory from your $HOME. Unlike the other toolboxes, bluefin-cli is intended for CLI applications only.

It's primary purpose is to be the command line companion to Flathub-enabled systems by providing access to one of the largest command line repositories in the world via homebrew. Developer dependencies should be managed seperately via devcontainers.

The default configuration destroys and updates this container daily so that the toolbox is built from scratch.

Updates to brew itself happen automatically when the container rebuilds. Brew will automatically upgrade packages as you use it. Brew's state is also volume mounted to a file in your home directory so your container is fresh but your packages remain untouched. At this time it is strongly recommended to maintain a backup of your brew package list via the brew bundle subcommand.

The WolfiOS apk package manager is preferred for fully declarative setups with boxkit. You can file package requests on the WolfiOS repository for packages that you may need. We are working on a way to do this locally as well.

The intended endstate of bluefin-cli is a fully automated declarative config managed via git using Wolfi packages for clean rebuilds daily. brew is used to fill out the "long tail" of existing software.

Both bluefin-cli and wolfi-toolbox have Wolfi developer variants built from the Wolfi SDK image, intended for Wolfi package and image development. They include utilities such as melange, wolfictl, and apko. These images are labelled bluefin-dx-cli and wolfi-dx-toolbox.

Stats

Star History

Alt

Star History Chart

boxes's People

Contributors

castrojo avatar m2giles avatar eyecantcu avatar tulilirockz avatar dependabot[bot] avatar bketelsen avatar bsherman avatar p5 avatar hirnidrin avatar

Watchers

 avatar

boxes's Issues

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.