{"id":17436123,"url":"https://github.com/jnsgruk/architect","last_synced_at":"2025-03-01T08:32:44.952Z","repository":{"id":55089254,"uuid":"321967098","full_name":"jnsgruk/architect","owner":"jnsgruk","description":"Simple Arch Linux bootstrap project","archived":true,"fork":false,"pushed_at":"2022-10-20T19:15:22.000Z","size":43,"stargazers_count":5,"open_issues_count":0,"forks_count":2,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-02-12T22:17:34.433Z","etag":null,"topics":["arch","archlinux","automation","bash","installer","jnsgruk","script"],"latest_commit_sha":null,"homepage":"","language":"Shell","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/jnsgruk.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2020-12-16T11:53:02.000Z","updated_at":"2024-09-08T15:16:25.000Z","dependencies_parsed_at":"2023-01-20T07:01:05.523Z","dependency_job_id":null,"html_url":"https://github.com/jnsgruk/architect","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jnsgruk%2Farchitect","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jnsgruk%2Farchitect/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jnsgruk%2Farchitect/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jnsgruk%2Farchitect/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/jnsgruk","download_url":"https://codeload.github.com/jnsgruk/architect/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":241341373,"owners_count":19947097,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["arch","archlinux","automation","bash","installer","jnsgruk","script"],"created_at":"2024-10-17T10:03:06.703Z","updated_at":"2025-03-01T08:32:44.545Z","avatar_url":"https://github.com/jnsgruk.png","language":"Shell","funding_links":[],"categories":[],"sub_categories":[],"readme":"## Architect\n\n\u003e Yet-Another-Arch-Installer\n\nThis project not finished, but currently a simple set of shell scripts/templated files to bootstrap an Arch Linux system. It is fairly minimal, and quite opinionated.\n\nMy primary use case for this is building my own machines, but also quickly building virtual machines with different configs for testing new desktop releases etc. I tend to use libvirt and virt-manager, so any VM detection is based on that assumption.\n\nBy default, the script will:\n\n- Partition a disk (ext4 or btrfs, optionally encrypted with LVM-on-LUKS)\n- Install a few basic packages\n- Install and configure `systemd-boot` (UEFI systems) or `grub` (BIOS systems)\n- Configure locale/timezone/keyboard layout\n- Detect requirement for, and if necessary install microcode packages\n- Create a non-root user and enable `sudo` access\n- Install and enable NetworkManager\n- Install [yay](https://github.com/Jguer/yay)\n- Install a Desktop Environment (Gnome, Plasma, XFCE or Mate)\n- Install and configure Plymouth with flicker-free boot\n\n## Getting Started\n\nTo use this script, boot into the Arch ISO and run:\n\n```bash\n# Download the stage1.sh script\n$ curl -sLo architect.sh https://jnsgr.uk/architect\n# Install using defaults\n$ /bin/bash architect.sh\n```\n\nTo install with other configuration files or presets:\n\n```bash\n# Install using config file downloaded to live ISO environment\n$ /bin/bash architect.sh /path/to/config.yml\n\n# Install using config file available at a URL\n$ /bin/bash architect.sh https://somedomain.com/your_config.yml\n```\n\nWith no arguments, the installer will use the [default preset](./presets/default.yml). Default values are:\n\n```yml\n---\nhostname: archie\nusername: user\n\nregional:\n  locale: en_GB.UTF-8\n  timezone: Europe/London\n  keymap: uk\n\npartitioning:\n  disk: /dev/vda\n  # Choose either ext4 or btrfs\n  filesystem: btrfs\n  # If set to true, disk is encrypted with LVM-on-LUKS\n  encrypted: false\n  # Swapfile size in MiB. Set to zero to disable swap\n  swap: 1024\n\nprovisioning:\n  # Desktop environment. Options: none, gnome, plasma, xfce, mate\n  desktop: gnome\n  # Install appropriate desktop extras like gnome-extra, kde-applications, xfce4-goodies\n  desktop-extras: true\n  # Choose to install the Plymouth boot-splash\n  plymouth: true\n  # Install a collection of extra fonts for the desktop\n  fonts: true\n  # Install bluetooth and bluetooth audio support\n  bluetooth: true\n  # List of packages to install\n  packages:\n    - git\n    - base-devel\n\narchitect:\n  # Choose the branch of Architect to clone during install\n  branch: master\n  # Option to disable the provisioning stage\n  disable_stage3: false\n  # Enable \"set -x\" in scripts for debugging\n  debug: false\n  # Unmount drives and reboot after install\n  reboot: true\n```\n\nIt is possible to specify a smaller config file to just override specific values in the defaults, for example:\n\n```yml\n---\nusername: bob\nhostname: archbox\n```\n\n## Install Stages Description\n\n### Stage 1\n\nStage 1 is the pre-chroot setup. It includes the following:\n\n- Keyboard layout setup\n- Partitioning and disk encryption if enabled\n- Mounting new filesystem under `/mnt`\n- Running `pacstrap` to install base packages into new filesystem\n- Runs `arch-chroot` and invokes stage 2\n\n### Stage 2\n\nStage 2 happens inside the `chroot` environment. It includes the following:\n\n- Setup locale\n- Set hostname\n- Configure and generate `initramfs`\n- Install processor microcode if required\n- Configure a swapfile\n- Install and configure bootloader\n- Change root password\n- Create a non-root user\n- Configure `sudo` for non-root user\n- Invoke stage 3 if enabled\n\nOnce stage 2 is complete, the bare minimum install is complete. You can disable stage 3, reboot and enjoy your very minimal Arch Linux setup.\n\n### Stage 3\n\nStage 3 aims to raise the install from \"minimum viable arch\" to a more usable system:\n\n- Install more packages\n- Install and configure the `yay` AUR helper\n- Install and configure a desktop environment (Gnome, Plasma, XFCE or Mate)\n- Install and configure Plymouth\n\n## TODO/Contributing\n\nI'm planning to keep this project relatively minimal, but will consider adding features if requested through Github Issues or otherwise. Feel free to submit pull requests!\n\nCurrently planned features...\n\n- [ ] Add option to provide URL to post-provision script\n- [x] Install a sane set of fonts, cursors, themes, etc. if desktop if specified\n- [x] Configure bluetooth and audio properly if desktop specified\n- [x] Install and configure Plymouth with flicker-free boot\n- Configure TRIM properly if on a supported SSD\n  - [x] Detect SSD and TRIM support\n  - [x] Enable the `fstrim` weekly timer\n- Update disk partitioning to include:\n  - [x] btrfs\n  - [x] LVM/LUKS with btrfs\n  - [x] LVM/LUKS with ext4\n- Presets for desktop environments:\n  - [x] Configure/detect display drivers\n  - [x] Gnome\n  - [x] Plasma\n  - [x] XFCE\n  - [x] MATE\n- [x] Migrate to `systemd` hooks in `mkinitcpio`?\n- [x] Configure a less ugly lightdm greeter and sddm theme\n- [x] Configure a swapfile\n- [x] Non-EFI bootloader install with GRUB\n- [x] Enable option settings with a JSON/YAML file\n- [x] Enable customisation of installed packages\n- [x] Install and configure `yay`\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjnsgruk%2Farchitect","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjnsgruk%2Farchitect","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjnsgruk%2Farchitect/lists"}