Files

146 lines
7.5 KiB
Markdown
Raw Permalink Normal View History

---
title: Development
layout: default
nav_order: 8
---
# Development
## Repository structure
```
euri-iso/
├── buildiso # Modified buildiso with --overwrite='*' and branding
├── iso-profiles/
2026-08-21 21:34:51 +02:00
│ ├── euri/
│ │ ├── profile.yaml # Packages, services (rootfs + livefs), compression
│ │ ├── root-overlay/ # Merged into rootfs → live session + offline install
│ │ └── live-overlay/ # Merged into live environment only
│ └── common/
│ └── common.yaml # Shared base packages (kernel, firmware, filesystem)
├── pacman.conf.d/
2026-08-21 21:34:51 +02:00
│ └── iso-x86_64.conf # Pacman config for ISO build with [euri-pkgs]
└── .github/workflows/
├── build.yml # ISO build (IA upload step disabled)
├── ai-moderator.yml # Groq-powered community moderator
└── pages.yml # Docs deployment to GitHub Pages
```
## Building locally
```bash
export WORKSPACE_DIR="$PWD"
2026-08-21 21:34:51 +02:00
sudo -E ./buildiso -p euri
```
See [Building the ISO](building) for full setup instructions and troubleshooting.
## Critical gotchas
### `./buildiso` vs `buildiso`
2026-08-21 21:34:51 +02:00
Always use the repo's `./buildiso`, **not** the system Artix `/usr/bin/buildiso`. The system version lacks `--overwrite='*'` and will fail with file conflicts between `calamares` and `calamares-branding-euri`.
### `sudo -E` is required
Without `-E`, `WORKSPACE_DIR` is stripped and `load_profile()` returns empty `HAS_LIVE`/`LIVEUSER`, causing build failures immediately.
### Pacman config must be user-overridden
2026-08-21 21:34:51 +02:00
`buildiso` reads from `~/.config/artools/pacman.conf.d/iso-x86_64.conf`. If missing, it falls back to the Artix default at `/usr/share/artools/pacman.conf.d/iso-x86_64.conf` which lacks `[euri-pkgs]`.
```bash
mkdir -p ~/.config/artools/pacman.conf.d
cp pacman.conf.d/iso-x86_64.conf ~/.config/artools/pacman.conf.d/
```
CI does this automatically.
### Repo order in iso-x86_64.conf
2026-08-21 21:34:51 +02:00
`[euri-pkgs]` must be listed **first** in `iso-x86_64.conf` so custom packages (calamares, branding) take priority over Artix's. If Artix repos are first, our custom packages won't be installed.
### Package order matters in profile.yaml
2026-08-21 21:34:51 +02:00
`basestrap` uses `--overwrite='*'`. The **last** package to claim a file wins. Package order in `profile.yaml` should list `calamares` BEFORE `calamares-branding-euri`, so branding files overwrite Calamares defaults, not the other way around.
2026-08-21 21:34:51 +02:00
### `euri-release` must be in basestrap.conf operations
2026-08-21 21:34:51 +02:00
The `filesystem` package owns `/usr/lib/os-release` with "Artix Linux". To replace it with "Euri Linux", `euri-release` must be listed in the `operations` list in `iso-profiles/euri/live-overlay/etc/calamares/modules/basestrap.conf`. This ensures it's installed during bootstrapping with `--overwrite`. If it's missing from operations, the installed system will show "Artix Linux" in `/usr/lib/os-release`.
### Squashfs compression
If `$COMPRESSION` is unset in `profile.yaml`, `mksquashfs` produces a sparse zero file instead of a valid squashfs. The ISO will be tiny and unbootable. Always verify compression is set, or remove stale images before retrying.
### Calamares module precedence
`/etc/calamares/modules/` overrides `/usr/share/calamares/modules/`. The `calamares-next` launcher copies the online settings file to `/etc/calamares/settings.conf`, and the `modules-search: [ local ]` directive in that file resolves modules from `/etc/calamares/modules/`. Both `calamares/modules/` and `calamares-online/modules/` in the live-overlay are for the **online** installer — there is no offline Calamares config. Module configs placed in `calamares-online/modules/` are not loaded directly during installation — only `calamares/modules/` is consulted at runtime; the `calamares-online/modules/` tree is the self-contained companion copy.
### GRUB config overwrite must be enabled
The Artix `grub` package ships a default `/etc/default/grub` file. When Calamares's `grubcfg` module runs during installation, this file already exists on the target system. With `overwrite: false`, the module reads the existing file and only modifies `GRUB_CMDLINE_LINUX_DEFAULT` and `GRUB_DISTRIBUTOR` — all other keys from the `defaults` block (including `GRUB_THEME` and `GRUB_TERMINAL_OUTPUT`) are silently ignored.
The active configuration at `live-overlay/etc/calamares/modules/grubcfg.conf` **must** set `overwrite: true` to replace Artix's shipped defaults with the distribution's intended values. Without this, the installed system will use the bare Artix GRUB configuration with no theme.
### `GRUB_TERMINAL_OUTPUT` must be "gfxterm" for themed GRUB
Setting `GRUB_TERMINAL_OUTPUT: "console"` in `grubcfg.conf` forces GRUB into text mode and disables the graphical theme. The theme requires `GRUB_TERMINAL_OUTPUT: "gfxterm"` to render.
### Live-overlay is not overlay-mounted
Live-overlay files are copied via `cp -LR` in `make_livefs()`. Deleting a file from live-overlay exposes the package version underneath. Use `NoDisplay=true` in `.desktop` files to hide entries.
### `plasma-wayland-session` does not exist on Artix
Artix bundles the Wayland session into `plasma-workspace` itself. Do not add it to package lists.
### SDDM theme
2026-08-21 21:34:51 +02:00
The installed system uses the **pixie** theme (`pixie-sddm-git`). The `euri-layan-theme` package vendors its own `kde_settings.conf` at `/etc/sddm.conf.d/kde_settings.conf` with `Current=pixie` plus dinit halt/reboot commands — this overrides KDE's SDDM KCM setting. The live session deliberately uses `breeze` for autologin.
> The `euri-sddm-theme` PKGBUILD still exists in `euri-packages` but is **not built** (not in `packages.yaml`) and not used.
### Pipewire launcher on dinit
2026-08-21 21:34:51 +02:00
`artix-pipewire-launcher` detects the init system and only proceeds on supported ones. For dinit, the upstream script returns `SUPPORT=''` (unsupported). The forked version in `[euri-pkgs]` patches this to `dinit|runit|s6) SUPPORT='YES'`. The XDG autostart entry (`pipewire.desktop` at `/etc/xdg/autostart/`) then starts pipewire on login.
### File conflicts
2026-08-21 21:34:51 +02:00
- `calamares` and `calamares-branding-euri` both install to `/usr/share/calamares/branding/default/` — handled by `--overwrite='*'`
- `filesystem` and `euri-release` both claim `/usr/lib/os-release` — handled by including `euri-release` in basestrap operations
### `calamares-next.sh SetConfig()`
2026-07-16 20:32:23 +02:00
Must `rm -f` the existing file before `cp`, otherwise `cp` follows any existing symlink to the settings file.
### CI does not trigger on push
The `build.yml` workflow only runs on `workflow_dispatch` (manual trigger from GitHub Actions tab). This prevents accidental ISO builds on every push.
### Internet Archive bucket naming
2026-08-21 21:34:51 +02:00
ISO identifier format: `euri-YYYYMMDD-<run_number>`. The `-<run_number>` ensures uniqueness even for multiple builds on the same day.
## Testing a build
Boot the resulting ISO in a VM. Verify:
- Wayland is the default display server (SDDM session is `plasma.desktop`)
- No "Install Artix Linux" entry in the app menu
- Wallpaper is set on first login
2026-07-16 20:32:23 +02:00
- DE selector works
- Slideshow renders correctly
- Audio works after installation (pipewire should auto-start)
2026-08-21 21:34:51 +02:00
- After install, `/usr/lib/os-release` shows "Euri Linux"
- SDDM shows the Euri theme, not Breeze
## Custom packages repo
Custom PKGBUILDs live in the companion [euri-packages](https://antergos-nas.taild4360b.ts.net/Euri-Linux/euri-packages) repo. The CI there builds them and publishes to the package server as a pacman repository:
```ini
2026-08-21 21:34:51 +02:00
[euri-pkgs]
SigLevel = Optional TrustAll
Server = https://antergos-nas.taild4360b.ts.net/pkgs
```