Coder Social home page Coder Social logo

pedrohlc / niemeyer Goto Github PK

View Code? Open in Web Editor NEW
16.0 4.0 2.0 1.12 MB

An ArchLinux GUI installer that focuses on generating a customizable mkrootfs script.

License: GNU General Public License v2.0

QMake 0.62% Shell 3.39% QML 61.30% C++ 34.69%
eglfs archlinux installer qt5 kiss setup-wizard hacktoberfest

niemeyer's Introduction

niemeyer's People

Contributors

ahmubashshir avatar pedrohlc avatar sugayaa avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar

Forkers

vagrantsn sugayaa

niemeyer's Issues

[Feature] Timezone picking screen

A new screen is required to select the new computer timezone (/etc/localtime), for that one may query the directory /usr/share/timezone recursively, listing only TZif2 files.

The user has to be able to select one and only one timezone from the list, a RadioButton in a ListView is recommended to achieve that.

It's not necessary to create a symlink in /etc/localtime as that will be appended to the setup script so the user can review it on later steps. So only saving which file was chosen is enough.

For layout/design inspirations, one can consult other screens like KeyboardPicker and LocaleSelect.

Estimated complexity: 100 lines of C code + 100 lines of QML.

Files that may be created:

  • src/lib/timezone.hpp
  • src/lib/timezone.cpp
  • qml/TimePicker.qml

Files that have to be modified:

  • src/main.cpp: Add include, instantiate new class, connect to a QML property.
  • qml/MainContainer.qml: Needs to instantiate the new component and assign an id to it.
  • chaotic-installer.pro Add new cpp and hpp to the build system.

[EPIC] Initial Release ROADMAP

For a complete experience we're mimicking AnarchyLinux's installer, which is split into these parts:

  • set_lang (Finished in #3)
  • set_keys (Finished in #4)
  • update_mirrors (Finished in #5)
  • check_connection (Finished in #5)
    • wifi-menu
  • set_locale (Finished in #6)
  • set_zone (#7)
  • prepare_drives (this will have a completely different approach, discussing at #9 )
  • set_hostname + set_user (#8)
  • install_options + add_software (#10)
  • install_base + configure_system + add_user (completely different approach)
    • Partitioning script review screen (bash script text area with what will be executed during partitioning)
    • Install script review screen (bash script text area with what will be executed during setup)
    • Partitioning console view
    • Install console view
  • umount, sync, exit and reboot!

Before that:

  • Minimal language abstration (Solved in #2)

After that:

  • Add all translations
  • Allow searching through lists (keymap, mirrors, locales, timezone)
  • Mirrors automatic operations
  • Require one mirror server to be selected before continuing

[Feature] Set hostname, set first user and set root password.

A new screen is required where the user can insert a valid hostname to the new machine, the first user's username, the first user's password, and the root's password.

A double field with matching assertion is desired, but not required. Passwords shouldn't echo. It's recommended to use TextFields and present the input in at least three separate rows.

t's not necessary to create the user, set the password or set/write the hostname, as that will be appended to the setup script so the user can review it on later steps. So only keeping each field in memory is enough.

For layout/design inspirations, one can consult other screens, especially WifiMenu.

Estimated complexity: 100 lines of C code + 130 lines of QML.

Files that may be created:

  • src/lib/users.hpp
  • src/lib/users.cpp
  • qml/UserSetup.qml

Files that have to be modified:

  • src/main.cpp: Add include, instantiate new class, connect to a QML property.
  • qml/MainContainer.qml: Needs to instantiate the new component and assign an id to it.
  • chaotic-installer.pro Add new cpp and hpp to the build system.

[Discussion] Hard drivers / partitioning / boot entries

The following work should cover at least these scenarios:

  1. A user with an empty driver, installing Linux for the first time, creating partitions and selecting mount points.
  2. A user with other oses installed, wanting to open space (delete/resize/move partition) and install arch.
  3. A user who wants to remove an already installed Linux setup and replace it.
  4. Someone who has an MBR or GPT disk and want to convert its disk to the other one before installing.
  5. Someone searching for security and wanting cryptographic setups.
  6. UEFI scenarios where /boot can be a new EFI partition or share the same used by another os. Also, I've seen laptops who only support NTFS as EFI partitions, and when reusing the user must be notified about the empty space needed for setup.
  7. An advanced user who likes to use ZFS or another volume-based filesystem.

So, I thought about a multiple-steps wizard presenting these steps:

  1. The users first have to select if he'll be using ZFS, LUKS or none.
  2. On this screen, the user is presented with all partitions/volumes on all disks, picking which ones he wants to remove.
  3. On this screen, the user is requested about converting its disks' partitions tables (MBR->GPT, GPT-MBR, Nothing->{MBR, GPT})
  4. The user may shrink partitions/vol
  5. The user may move partitions/vol
  6. The user may grow partitions/vol
  7. The user may create new partitions (here we can ask him about using dm-crypt or volumes)
  8. The user may set partitions types and flags
  9. The user may format partitions (mkfs)
  10. The user can pick mount points

NOTE: The ZFS work can be delayed, but it's better to count it in when deciding how to do the implementation, making it easy to be added later...

[Feature] Package selecting screen

A new screen is required to select which packages will be installed during setup time.

The user has to be able to select toggle each package individually or entire groups.
I'll recommend using TreeView with CheckBoxes.
Now that base is a metapackage we better show it, but not allow it to be disabled.
Packages list may be hardcoded, or a JSON can be grabbed remotely from a fileserver/GitHub/Gist.

These are the recommended hierarchy/sort to be presented:

  • Kernels (linux, linux-lts, linux-zen & headers)
  • Filesystem & utilities
  • Bootloaders
  • sudo
  • CLI text editors (Nano, VI, VIM, NeoVim, Emacs)
  • Network related
  • Shell (Dash, ZSH, Fish, ...) & utilities (tmux, screen, oh-my-zsh)
  • Xorg server & Xorg-Drivers
  • DEs
  • DMs
  • Proprietary graphics drivers
  • Audio daemons & utilities
  • Common daemons: Bluez, CUPS, SANE
  • Web Browsers
  • GUI file managers
  • GUI terminal emulators
  • GUI text editors

Estimated complexity: 150 lines of C code + 300 lines of QML.

Files that may be created:

  • src/lib/packages.hpp
  • src/lib/packages.cpp
  • qml/PackageSelect.qml

Files that have to be modified:

  • src/main.cpp: Add include, instantiate new class, connect to a QML property.
  • qml/MainContainer.qml: Needs to instantiate the new component and assign an id to it.
  • chaotic-installer.pro Add new cpp and hpp to the build system.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.