Stage 8: developer profile with dprofile (0.6.0)

dprofile (das-helpers 0.2.0) installs profiles listed in
/usr/share/das/profiles: packages from the Void repository between a
snapper pre/post pair, their services and groups, subordinate IDs and a
shared root mount for rootless Podman, and optional IDEs from Flathub.
The installed system can't see the Das OS repository yet, so a das-dev
metapackage could not be installed there; Void packages always can.

The dev profile: Go, Python, Node.js, Git, Docker, Podman and command-line
tools everywhere, VS Code (code-oss), Meld and Flatpak on a desktop, with
Android Studio and JetBrains IDEs on demand. Questions come before sudo.

das-welcome (das-tools 0.4.0) gets a developer profile row that runs
dprofile in a terminal; das-server-install mentions it at the end.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
das
2026-10-20 08:49:53 +03:00
co-authored by Claude Opus 5.5
parent acb7532a4f
commit fe043711a0
13 changed files with 572 additions and 23 deletions
@@ -1,5 +1,5 @@
// Command das-welcome is the Das OS first-login window: interface language,
// home folder names, updates, settings and help.
// home folder names, updates, the developer profile, settings and help.
//
// das-welcome show the window
// das-welcome --autostart show it only if the user did not turn that off
@@ -207,6 +207,9 @@ func newWindow(app *gtk.Application) (*gtk.ApplicationWindow, error) {
row, _ := b.row("software-update-available", i18n.T("welcome.update"), i18n.T("welcome.update.desc"),
b.button(i18n.T("welcome.update.open"), func() { launch("das-update") }))
add(row)
if row := profileRow(b); row != nil {
add(row)
}
}
row, _ := b.row("preferences-desktop", i18n.T("welcome.settings"), i18n.T("welcome.settings.desc"),
b.button(i18n.T("welcome.open"), func() { launch("xfce4-settings-manager") }))
@@ -249,6 +252,23 @@ func launch(name string, args ...string) {
}
}
// profileRow installs the developer profile in a terminal, where dprofile
// asks for the password and which IDEs to add. It returns nil without dprofile.
func profileRow(b *builder) *gtk.Box {
if _, err := exec.LookPath("dprofile"); err != nil {
return nil
}
desc, label := i18n.T("welcome.dev.desc"), i18n.T("welcome.dev.install")
if exec.Command("dprofile", "check", "dev").Run() == nil {
desc, label = i18n.T("welcome.dev.installed"), i18n.T("welcome.dev.apps")
}
row, _ := b.row("applications-development", i18n.T("welcome.dev"), desc,
b.button(label, func() {
launch("xfce4-terminal", "--hold", "--title", i18n.T("welcome.dev"), "-x", "dprofile", "install", "dev")
}))
return row
}
// languageRow offers the UTF-8 locales the system has built. It returns nil
// when there is nothing to choose from.
func languageRow(b *builder) *gtk.Box {
@@ -111,6 +111,11 @@ var messages = map[string]message{
"welcome.update": {"Оновлення", "Updates"},
"welcome.update.desc": {"Перед кожним оновленням створюється знімок системи для відкату.", "A system snapshot is taken before every update so it can be rolled back."},
"welcome.update.open": {"Перевірити", "Check"},
"welcome.dev": {"Профіль розробника", "Developer profile"},
"welcome.dev.desc": {"Go, Python, Node.js, Git, Docker і Podman, VS Code; за бажанням JetBrains і Android Studio з Flathub.", "Go, Python, Node.js, Git, Docker and Podman, VS Code; JetBrains IDEs and Android Studio from Flathub if you like."},
"welcome.dev.installed": {"Встановлено. Середовища JetBrains і Android Studio можна додати з Flathub.", "Installed. JetBrains IDEs and Android Studio can be added from Flathub."},
"welcome.dev.install": {"Встановити", "Install"},
"welcome.dev.apps": {"Додати середовища", "Add IDEs"},
"welcome.settings": {"Налаштування", "Settings"},
"welcome.settings.desc": {"Тема, екран, клавіатура, принтери та інше.", "Theme, display, keyboard, printers and more."},
"welcome.open": {"Відкрити", "Open"},