Commit Graph

288 Commits

Author SHA1 Message Date
Christoph Heiss
ea15ca43bb tui: read and save reboot-after-install checkbox into options
Signed-off-by: Christoph Heiss <c.heiss@proxmox.com>
2023-06-15 13:28:30 +02:00
Christoph Heiss
fbfd1838a6 tui: rename SetupInfo::product_cfg -> ::config
Signed-off-by: Christoph Heiss <c.heiss@proxmox.com>
2023-06-15 13:10:52 +02:00
Christoph Heiss
81f9348c14 tui: add preliminary install progress dialog
Signed-off-by: Christoph Heiss <c.heiss@proxmox.com>
2023-06-15 12:58:41 +02:00
Christoph Heiss
82cc9fc480 tui: fix bootdisk dialog for zfs/btrfs
This was broken when adding the usage caveats at the top of the advanced
dialog; the wrong child views were selected.

Fixes: 7f27373 ("tui: add notices for zfs/btrfs bootdisk and their caveats")
Signed-off-by: Christoph Heiss <c.heiss@proxmox.com>
2023-06-15 12:18:01 +02:00
Christoph Heiss
1353d6cf91 tui: implement both PartialOrd and Ord for KeyboardMapping
Otherwise, clippy (correctly) complains that you should always implement
both if you implement one.

Fixes: 86dac56 ("tui: use whole keyboard mapping in select view as value")
Signed-off-by: Christoph Heiss <c.heiss@proxmox.com>
2023-06-15 12:09:17 +02:00
Christoph Heiss
5b9842244f tui: apply keyboard layout immediately after selecting it
Signed-off-by: Christoph Heiss <c.heiss@proxmox.com>
2023-06-15 11:51:24 +02:00
Christoph Heiss
86dac562e8 tui: use whole keyboard mapping in select view as value
Thus all its values can easily be used later on. Involves making
`KeyboardMapping` partial-orderable, just use the human-readable name
here (as that's what displayed to the user).

Signed-off-by: Christoph Heiss <c.heiss@proxmox.com>
2023-06-15 11:49:55 +02:00
Christoph Heiss
cae155237b tui: make test mode indicator into global installer state
This will later be needed in other parts of the installer as well.

Signed-off-by: Christoph Heiss <c.heiss@proxmox.com>
2023-06-15 11:47:45 +02:00
Christoph Heiss
6ab6af4cb3 tui: track previous screens so that that each is only created once
Until now, if the user navigated back and then forward again, the screen
would be constructed & added again to the stack. This would result in
missing values and broken "Previous" button behaviour.

Fix it by tracking their screen ids and simply switch to them as needed.

Signed-off-by: Christoph Heiss <c.heiss@proxmox.com>
2023-06-15 10:49:24 +02:00
Christoph Heiss
b107a892a8 tui: display proper keyboard layout name in summary
Signed-off-by: Christoph Heiss <c.heiss@proxmox.com>
2023-06-15 10:22:35 +02:00
Christoph Heiss
06908b6ff7 tui: implement proper keyboard layout selection
Signed-off-by: Christoph Heiss <c.heiss@proxmox.com>
2023-06-15 10:12:13 +02:00
Christoph Heiss
4e61d6cc83 tui: save user-selected country in options
Signed-off-by: Christoph Heiss <c.heiss@proxmox.com>
2023-06-15 10:04:14 +02:00
Christoph Heiss
e1a11f794b tui: move timezone dialog into custom view
Signed-off-by: Christoph Heiss <c.heiss@proxmox.com>
2023-06-15 10:04:14 +02:00
Christoph Heiss
67c8d5d079 tui: rename LocaleInfo::country -> ::countries
It's a map of all the countries, thus make the name plural too to match
its content.

Signed-off-by: Christoph Heiss <c.heiss@proxmox.com>
2023-06-15 10:04:14 +02:00
Christoph Heiss
90c0ea37be tui: display correct logo & title depending on product info
Signed-off-by: Christoph Heiss <c.heiss@proxmox.com>
2023-06-14 12:53:58 +02:00
Christoph Heiss
d445e54aa3 tui: ignore testdir here as well
Signed-off-by: Christoph Heiss <c.heiss@proxmox.com>
2023-06-14 12:53:58 +02:00
Christoph Heiss
a6e00ea66d tui: rename InstallerData -> InstallerState
It was kind of ambigous anyway - naming is hard.

Signed-off-by: Christoph Heiss <c.heiss@proxmox.com>
2023-06-14 12:53:58 +02:00
Christoph Heiss
4296d2004c tui: implement initial parsing for setup & locale info
Signed-off-by: Christoph Heiss <c.heiss@proxmox.com>
2023-06-14 12:53:58 +02:00
Christoph Heiss
7f273738d7 tui: add notices for zfs/btrfs bootdisk and their caveats
Signed-off-by: Christoph Heiss <c.heiss@proxmox.com>
2023-06-14 10:39:56 +02:00
Christoph Heiss
95c490081d tui: introduce proper type for handling FQDNs
Signed-off-by: Christoph Heiss <c.heiss@proxmox.com>
2023-06-14 10:39:56 +02:00
Christoph Heiss
74e3a21e4a tui: remove cargo lockfile
We don't commit that anywhere; so remove it here as well.

Signed-off-by: Christoph Heiss <c.heiss@proxmox.com>
2023-06-14 10:39:56 +02:00
Christoph Heiss
130fb96a09 tui: add simple system cpu/memory check, similar to gui installer
Signed-off-by: Christoph Heiss <c.heiss@proxmox.com>
2023-06-14 10:39:56 +02:00
Christoph Heiss
b82fff5d48 tui: add some more field validation checks
Signed-off-by: Christoph Heiss <c.heiss@proxmox.com>
2023-06-14 10:39:56 +02:00
Christoph Heiss
b977af78c3 tui: fix target bootdisk display for zfs/btrfs
Signed-off-by: Christoph Heiss <c.heiss@proxmox.com>
2023-06-14 10:39:56 +02:00
Christoph Heiss
ce0b586528 tui: drop some unneeded type annotations
Signed-off-by: Christoph Heiss <c.heiss@proxmox.com>
2023-06-14 10:39:56 +02:00
Christoph Heiss
78eda7b55f tui: drop now-obsolete form types
Signed-off-by: Christoph Heiss <c.heiss@proxmox.com>
2023-06-14 10:39:56 +02:00
Christoph Heiss
66baa275b4 tui: rewrite bootdisk & fstype selector to use FormView
Signed-off-by: Christoph Heiss <c.heiss@proxmox.com>
2023-06-14 10:39:56 +02:00
Christoph Heiss
d36c96af33 tui: rewrite zfs & btrfs bootdisk options dialog using FormView
Signed-off-by: Christoph Heiss <c.heiss@proxmox.com>
2023-06-14 10:39:56 +02:00
Christoph Heiss
cd6d2d240a tui: rewrite LVM bootdisk dialog using FormView
Signed-off-by: Christoph Heiss <c.heiss@proxmox.com>
2023-06-14 10:39:56 +02:00
Christoph Heiss
617f25340b tui: rewrite network dialog using new FormView
Signed-off-by: Christoph Heiss <c.heiss@proxmox.com>
2023-06-14 10:39:56 +02:00
Christoph Heiss
15832d1872 tui: rewrite password using new FormView
Signed-off-by: Christoph Heiss <c.heiss@proxmox.com>
2023-06-14 10:39:56 +02:00
Christoph Heiss
767843f940 tui: rewrite timezone dialog using new FormView
Signed-off-by: Christoph Heiss <c.heiss@proxmox.com>
2023-06-14 10:39:56 +02:00
Christoph Heiss
26cdaacff4 tui: introduce new FormView compomenent to unify all form inputs
Signed-off-by: Christoph Heiss <c.heiss@proxmox.com>
2023-06-14 10:39:56 +02:00
Christoph Heiss
e95f4f1a2d tui: error out in network dialog if option retrieval failed
Signed-off-by: Christoph Heiss <c.heiss@proxmox.com>
2023-06-14 10:39:56 +02:00
Christoph Heiss
ef4957e89a tui: implement password dialog options retrieval and validation
Signed-off-by: Christoph Heiss <c.heiss@proxmox.com>
2023-06-14 10:39:56 +02:00
Christoph Heiss
ee1437bbfc tui: refactor and unify btrfs and zfs bootdisk options view
Signed-off-by: Christoph Heiss <c.heiss@proxmox.com>
2023-06-14 10:39:56 +02:00
Christoph Heiss
56a304d59f tui: implement btrfs bootdisk selection option
Signed-off-by: Christoph Heiss <c.heiss@proxmox.com>
2023-06-14 10:39:56 +02:00
Christoph Heiss
2a344f499d tui: format disk size as GiB for now, instead of bytes
Signed-off-by: Christoph Heiss <c.heiss@proxmox.com>
2023-06-14 10:39:56 +02:00
Christoph Heiss
2a65d9f46e tui: fix disksize-input unit
Previously, the size was displayed in MiB, although it should have been
GiB.

Signed-off-by: Christoph Heiss <c.heiss@proxmox.com>
2023-06-14 10:39:56 +02:00
Christoph Heiss
7393ed8840 tui: implement zfs bootdisk selection option
Signed-off-by: Christoph Heiss <c.heiss@proxmox.com>
2023-06-14 10:39:56 +02:00
Christoph Heiss
2d6187f192 tui: implement FormInputViewGetValue for custom NumericEditViews
Signed-off-by: Christoph Heiss <c.heiss@proxmox.com>
2023-06-14 10:39:56 +02:00
Christoph Heiss
ed191e60dd tui: refactor bootdisk dialog; advanced options into separate dialog
This also reworks the whole installer state. The main type is now
`InstallerData`, which holds info about the machine (such as info about
the disks), as well as all the user options.

Signed-off-by: Christoph Heiss <c.heiss@proxmox.com>
2023-06-14 10:39:56 +02:00
Christoph Heiss
36c6b9bddd tui: make FormInputViewGetValue<SelectView> fully generic
`SelectView` can hold values of other types than string.

Signed-off-by: Christoph Heiss <c.heiss@proxmox.com>
2023-06-14 10:39:56 +02:00
Christoph Heiss
13c919bb2a tui: refactor some option bits
Signed-off-by: Christoph Heiss <c.heiss@proxmox.com>
2023-06-14 10:39:56 +02:00
Christoph Heiss
af0dfe0e72 tui: move bootdisk dialog into own module
Signed-off-by: Christoph Heiss <c.heiss@proxmox.com>
2023-06-14 10:39:56 +02:00
Christoph Heiss
de0e2eaa6a tui: combine all use directives into one block
Signed-off-by: Christoph Heiss <c.heiss@proxmox.com>
2023-06-14 10:39:56 +02:00
Christoph Heiss
6cff279466 tui: add rustdoc for CidrAddress type
Signed-off-by: Christoph Heiss <c.heiss@proxmox.com>
2023-06-14 10:39:56 +02:00
Christoph Heiss
a04201354d tui: add proper IPv6 support to CidrAddress
Signed-off-by: Christoph Heiss <c.heiss@proxmox.com>
2023-06-14 10:39:56 +02:00
Christoph Heiss
8807d54726 tui: add top content padding for all installer views
Signed-off-by: Christoph Heiss <c.heiss@proxmox.com>
2023-06-14 10:39:56 +02:00
Christoph Heiss
75c7c30362 tui: add README describing some debugging specifics
Signed-off-by: Christoph Heiss <c.heiss@proxmox.com>
2023-06-14 10:39:56 +02:00
Christoph Heiss
e7a529aecc tui: implement scrolling for (summary) table view
Signed-off-by: Christoph Heiss <c.heiss@proxmox.com>
2023-06-14 10:39:56 +02:00
Christoph Heiss
a7965322ec tui: unify option labels spelling/formatting in summary view
Signed-off-by: Christoph Heiss <c.heiss@proxmox.com>
2023-06-14 10:39:56 +02:00
Christoph Heiss
9d89d3ad49 tui: fix invalid starting value for integer input views
Fixes: b0a3beb ("tui: introduce separate views types for float & integer inputs")
Signed-off-by: Christoph Heiss <c.heiss@proxmox.com>
2023-06-14 10:39:56 +02:00
Christoph Heiss
fc18719600 tui: introduce CidrAddress type for ip address + mask tuples
Signed-off-by: Christoph Heiss <c.heiss@proxmox.com>
2023-06-14 10:39:56 +02:00
Christoph Heiss
b7828c87ce tui: move installer options defintions into separate module
Signed-off-by: Christoph Heiss <c.heiss@proxmox.com>
2023-06-14 10:39:56 +02:00
Christoph Heiss
e5dc9a491b tui: simplify FormInputViewGetValue impl's
Signed-off-by: Christoph Heiss <c.heiss@proxmox.com>
2023-06-14 10:39:56 +02:00
Christoph Heiss
bb95150055 tui: fix warning about unused function
yes_no_dialog() is not used in debug builds; due to it's only usage in
trigger_abort_install_dialog() being only enabled in release builds for
brevity reasons.

Signed-off-by: Christoph Heiss <c.heiss@proxmox.com>
2023-06-14 10:39:56 +02:00
Christoph Heiss
5e73fcfeaf tui: simplify add_next_screen() by taking a siv directly
Suggested-by: Wolfgang Bumiller <w.bumiller@proxmox.com>
Signed-off-by: Christoph Heiss <c.heiss@proxmox.com>
2023-06-14 10:39:56 +02:00
Christoph Heiss
cd383717e8 tui: implement value retrieval for network options dialog
Signed-off-by: Christoph Heiss <c.heiss@proxmox.com>
2023-06-14 10:39:56 +02:00
Christoph Heiss
56c6bac76a tui: introduce trait to retrieve input values wrapped by FormInputView
Signed-off-by: Christoph Heiss <c.heiss@proxmox.com>
2023-06-14 10:39:56 +02:00
Christoph Heiss
1065dad78c tui: introduce separate views types for float & integer inputs
This having to conditionalize everything on the `.ints_only` member,
making things a lot cleaner and easier to expand as needed.

Signed-off-by: Christoph Heiss <c.heiss@proxmox.com>
2023-06-14 10:39:56 +02:00
Christoph Heiss
947fe36045 tui: add preliminary summary dialog
Signed-off-by: Christoph Heiss <c.heiss@proxmox.com>
2023-06-14 10:39:56 +02:00
Christoph Heiss
29c4d84e77 tui: add TableView component for displaying tabular data
Signed-off-by: Christoph Heiss <c.heiss@proxmox.com>
2023-06-14 10:39:56 +02:00
Christoph Heiss
17a3026765 tui: move utility views into own module directory
.. in preparation for adding additional modules.

Signed-off-by: Christoph Heiss <c.heiss@proxmox.com>
2023-06-14 10:39:56 +02:00
Christoph Heiss
fbccf72c1a tui: avoid open-coding add_next_screen()
Signed-off-by: Christoph Heiss <c.heiss@proxmox.com>
2023-06-14 10:39:56 +02:00
Christoph Heiss
1397feec4f tui: fix typo in network dialog label
Signed-off-by: Christoph Heiss <c.heiss@proxmox.com>
2023-06-14 10:39:56 +02:00
Christoph Heiss
fb27f7ebb5 tui: separate CIDR input into own view
Signed-off-by: Christoph Heiss <c.heiss@proxmox.com>
2023-06-14 10:39:56 +02:00
Christoph Heiss
de97681bc6 tui: DiskSizeFormInputView: simplify using direct if let Some(..)
Signed-off-by: Christoph Heiss <c.heiss@proxmox.com>
2023-06-14 10:39:56 +02:00
Christoph Heiss
ccd34284b3 tui: add preliminary network dialog
Signed-off-by: Christoph Heiss <c.heiss@proxmox.com>
2023-06-14 10:39:56 +02:00
Christoph Heiss
93ebe7bd0d tui: display error dialog on invalid values instead of panicking
Signed-off-by: Christoph Heiss <c.heiss@proxmox.com>
2023-06-14 10:39:56 +02:00
Christoph Heiss
ba8987656c tui: fix panic in NumericEditView if the cursor is at the last position
Signed-off-by: Christoph Heiss <c.heiss@proxmox.com>
2023-06-14 10:39:56 +02:00
Christoph Heiss
468030fc87 tui: implement DiskSizeFormInputView::content() callback-free
See also commit 1a26aef, which does the same for `NumericEditView`.

Signed-off-by: Christoph Heiss <c.heiss@proxmox.com>
2023-06-14 10:39:56 +02:00
Christoph Heiss
938259acb1 tui: implement NumericEditView::content() callback-free
.set_content() returns a callback which must be called in a `Cursive`
context, which for the chainable variant is never really on option.
Avoid that and do it properly.

Signed-off-by: Christoph Heiss <c.heiss@proxmox.com>
2023-06-14 10:39:56 +02:00
Christoph Heiss
c2eee46862 tui: add basic email/root password dialog
Signed-off-by: Christoph Heiss <c.heiss@proxmox.com>
2023-06-14 10:39:56 +02:00
Christoph Heiss
a142f45783 tui: add simple location/timezone dialog
Signed-off-by: Christoph Heiss <c.heiss@proxmox.com>
2023-06-14 10:39:56 +02:00
Christoph Heiss
f522afb14c tui: move abort/previous/next buttons into InstallerView
Signed-off-by: Christoph Heiss <c.heiss@proxmox.com>
2023-06-14 10:39:56 +02:00
Christoph Heiss
48ce057c89 tui: add missing FS_TYPES definition
Fixes: e09b55a ("tui: add bootdisk selection screen")
Signed-off-by: Christoph Heiss <c.heiss@proxmox.com>
2023-06-14 10:39:56 +02:00
Christoph Heiss
52e6b3373c tui: introduce generic FormInputView
Signed-off-by: Christoph Heiss <c.heiss@proxmox.com>
2023-06-14 10:39:56 +02:00
Christoph Heiss
64220ff188 tui: add bootdisk selection screen
Only LVM boodisks (read: ext4 and xfs) are supported for now; zfs/btrfs
will come later.

Signed-off-by: Christoph Heiss <c.heiss@proxmox.com>
2023-06-14 10:39:56 +02:00
Christoph Heiss
83071f3542 tui: add NumericEditView and DiskSizeInputView components
Signed-off-by: Christoph Heiss <c.heiss@proxmox.com>
2023-06-14 10:39:56 +02:00
Christoph Heiss
e9557e6210 tui: add LVM disk structures and some mocking data
Signed-off-by: Christoph Heiss <c.heiss@proxmox.com>
2023-06-14 10:39:56 +02:00
Christoph Heiss
e70f1b2fed tui: pass Cursive instance to installer view constructors
Signed-off-by: Christoph Heiss <c.heiss@proxmox.com>
2023-06-14 10:39:56 +02:00
Christoph Heiss
806820740f tui: add missing Panel import
Fixes: 3403ed9 ("tui: limit the maximum installer view size to something reasonable")
Signed-off-by: Christoph Heiss <c.heiss@proxmox.com>
2023-06-14 10:39:56 +02:00
Christoph Heiss
8b43c2d383 tui: limit the maximum installer view size to something reasonable
Signed-off-by: Christoph Heiss <c.heiss@proxmox.com>
2023-06-14 10:39:56 +02:00
Christoph Heiss
8f5fdd2110 tui: simplify get_eula() logic a bit
Signed-off-by: Christoph Heiss <c.heiss@proxmox.com>
2023-06-14 10:39:56 +02:00
Christoph Heiss
5886924326 tui: disable "abort installation?" dialog in debug builds
Lot more convienent for testing.

Signed-off-by: Christoph Heiss <c.heiss@proxmox.com>
2023-06-14 10:39:56 +02:00
Christoph Heiss
ccf3b0755d tui: add proper ^C handler
Signed-off-by: Christoph Heiss <c.heiss@proxmox.com>
2023-06-14 10:39:56 +02:00
Christoph Heiss
183e2a7641 tui: add initial proof-of-concept
Signed-off-by: Christoph Heiss <c.heiss@proxmox.com>
2023-06-14 10:39:56 +02:00