New features
- Add optional file encryption for user credentials configuration by @svartkanin in #3391
- Store password as hash instead of plaintext by @svartkanin in #3276
- Added labwc, niri, river and xmonad by @killertofus in #3323 and @James-Kni in #3395
- Additional post-installation menu options #1747 by @svartkanin in #3393
Bug fixes
- Fixed broken application launcher in sway:
dmenu
->wmenu
by @ncdm-stldr in #3442 - replace GTK theme package for Budgie build with an active one by @EK-92 in #3327
- UWSM for Hyprland by @TSEPLNK in #3455
- Fix GPT end by @codefiles in #3390
- Fix btrfs subvolume creation by @codefiles in #3446
- Fix #3298 - Add package groups to selection by @svartkanin in #3322
- Force to make pipewire symlinks (#2585) by @utuhiro78 in #3328
- Start the boot partition at 1MiB by default on MBR too by @mintsuki in #3344
- Improve partition type detection, assignment, and misconfig handling by @mintsuki in #3336
- Fix disk config validation regression by @codefiles in #3355
- Fix a circular import #3362 by @svartkanin in #3377
- Fix #3376 - header alignment by @svartkanin in #3414
- Fix #3412 - Take optional repositories into account by @svartkanin in #3427
- fix(installer): use platform.machine() for target architecture in grub-install by @wszqkzqk in #3320
- Fix Header on the network-interfaces mode screen mentions disallowed skip shortcut #3334 by @svartkanin in #3359
- Fix locale issue by using
en_US.UTF-8
as the default locale #3350 by @svartkanin in #3358 - Fix "Save configuration" is changed to "Abort" after switching language #3330 by @svartkanin in #3360
- Fixes for release by @svartkanin in #3432
- Fixes --silent in conjuction with --config-url by @Torxed in #3465
Other various changes
- Use assert_never to fix some possibly-undefined mypy warnings by @correctmost in #3333
- Use default EFI boot app path for Limine if installing to USB by @mintsuki in #3331
- Actually prevent installing if the config is invalid by @mintsuki in #3335
- Enable possibly-undefined warnings in mypy by @correctmost in #3340
- Use curses.window instead of curses._CursesWindow in annotations by @correctmost in #3341
- Add ruff auto sort imports hook by @svartkanin in #3342
- Case insensitive sorting of profiles by @svartkanin in #3329
- Remove check for sphinx and pylint modules by @codefiles in #3353
- Move system info logging to function by @codefiles in #3356
- Remove unused description fields from profiles by @correctmost in #3357
- Remove unused imports reported by Pyright by @correctmost in #3367
- Remove unused variable reported by Pyright by @correctmost in #3368
- Remove some Any instances from the codebase by @correctmost in #3372
- Remove unused SysCommand and SysCommandWorker fields by @correctmost in #3374
- Replace an Any instance with a TypedDict by @correctmost in #3375
- Remove some unnecessary type unions by @correctmost in #3378
- Split out Result and ResultType to break import cycle by @correctmost in #3387
- Split out unicode_ljust and unicode_rjust to break import cycle by @correctmost in #3388
- Swapping to python-uv for building and distribution by @Torxed in #3407
- Removed the @.snapshots volume in order to support both Snapper and Timeshift #3363 by @Torxed in #3408
- Specify menu return types using generics instead of Any by @correctmost in #3400
- Remove a reference to twine by @correctmost in #3416
- Avoid using generics with EditMenu by @correctmost in #3415
- Remove extraneous inline type annotations by @correctmost in #3418
- Enable tracebacks when running mypy by @correctmost in #3425
- Add an inline annotation to avoid a crash with mypy 1.15.0 by @correctmost in #3434
- Remove unused pydantic-settings dependency from pre-commit config by @correctmost in #3437
- Break an import cycle between lib/luks and lib/disk/device_handler by @correctmost in #3438
- Update catalan locales by @Odyssey in #3447
- Disable the loop-iterator-mutation rule in ruff by @correctmost in #3450
- Convert bytes to str by @svartkanin in #3457
- Ruff use tabs for formatting by @svartkanin in #3458
Translation updates
- i18n(zh-TW): re-Update base.po (20250401) by @neko0xff in #3324 and #3384
- Update hungarian translation by @summoner001 in #3321
- Update Japanese translation by @utuhiro78 in #3326
- Update Italian translation by @vanmatten in #3347
- Fix #3313 translation file by @svartkanin in #3361
- Update Japanese translation (100%) by @utuhiro78 in #3366
- Update hungarian translation by @summoner001 in #3369
- Update Italian translation by @vanmatten in #3371
- Update Spanish translation by @castillofrancodamian in #3405
- Update zh-CN translation by @clsty in #3404
- Update zh-CN translation, fix locales/README.md by @clsty in #3409
- Update Japanese translation by @utuhiro78 in #3410
- Update Italian translation by @vanmatten in #3428
- Another Italian translation update by @vanmatten in #3436
- Update hungarian translation by @summoner001 in #3440
- Update Japanese translation by @utuhiro78 in #3451
- Update Polish translation by @acuteenvy in #3454
- Czech localization update by @walken11 in #3461
- Updated urdu translation by @mfgbhatti in #3462
- Better Ukrainian by @TSEPLNK in #3364, #3365, #3439, #3441 and #3445
- French language update by @roxfr in #3386
New Contributors
- @EK-92 made their first contribution in #3327
- @wszqkzqk made their first contribution in #3320
- @TSEPLNK made their first contribution in #3364
- @James-Kni made their first contribution in #3395
- @ncdm-stldr made their first contribution in #3442
Full Changelog: 3.0.4...3.0.5