I recently gave talks at Flock in Krakow and GUADEC in Karlsruhe:
The topics were different but related: The Flock talk talked about how to make things better for a developer using Fedora Workstation as their development workstation, while the GUADEC talk was about the work we are doing to move Fedora to a model where the OS is immutable and separate from applications. A shared idea of the two talks is that your workstation is not your development environment environment. Installing development tools, language runtimes, and header files as part of your base operating system implies that every project you are developing wants the same development environment, and that simply is not the case.
At both talks, I demo’ed a small project I’ve been working on with codename of PurpleEgg (I didn’t have that codename yet at Flock – the talk instead talks about “NewTerm” and “fedenv”.) PurpleEgg is about creating easily creating containerized environments dedicated to a project, and about integrating those projects into the desktop user interface in a natural, slick way.
The command line client to PurpleEgg is called pegg:
[otaylor@localhost ~]$ pegg create django mydjangosite [otaylor@localhost ~]$ cd ~/Projects/mydjangosite [otaylor@localhost mydangjosite]$ pegg shell [[mydjangosite]]$ python manage.py runserver August 24, 2016 - 19:11:36 Django version 1.9.8, using settings 'mydjangosite.settings' Starting development server at http://127.0.0.1:8000/ Quit the server with CONTROL-C.
“pegg create” step did the following steps:
- Created a directory ~/Projects/mydjangosite
- Created a file pegg.yaml with the following contents:
base: fedora:24 packages: - python3-virtualenv - python3-django
- Created a Docker image is the Fedora 24 base image plus the specified packages
- Created a
venv/directory in the specified directory and initialized a virtual environment there
- Ran ‘
django-admin startproject’ to create the standard Django project
- Checked to see if the Docker image needed updating
- Ran a bash prompt inside the Docker image with a customized prompt
- Activated the virtual environment
The end result is that, without changing the configuration of the host machine at all, in a few simple commands we got to a place where we can work on a Django project just as it is documented upstream.
But with the PurpleEgg application installed, you get more: you get search results in the GNOME Activities Overview for your projects, and when you activate a search result, you see a window like:
We have a terminal interface specialized for our project:
- We already have the pegg environment activated
- New tabs also open within that environment
- The prompt is uncluttered with relevant information moved to the header bar
- If the project is checked into Git, the header bar also tracks the Git branch
There’s a fair bit more that could be done: a GUI for creating and importing projects as in GNOME Builder, GUI integration for Vagrant and Docker, configuring frequently used commands in
At the most basic, the idea is that server-side development is terminal-centric and also somewhat specialized – different languages and frameworks have different ways of doing things. PurpleEgg embraces working like that, but adds just enough conventions so that we can make things better for the developer – just because the developer wants a terminal doesn’t mean that all we can give them is a big pile of terminals.
PurpleEgg codedump is here. Not warrantied to be fit for any purpose.