├── .github └── ISSUE_TEMPLATE │ └── bug_report.md ├── .gitignore ├── LICENSE.md ├── README.md ├── README.zh_CN.md ├── airootfs └── etc │ ├── X11 │ └── xorg.conf.d │ │ └── 30-touchpad.conf │ ├── holoinstall │ ├── post_install │ │ ├── amd-perf-fix │ │ ├── amd-perf-fix.service │ │ ├── chroot_holoiso.sh │ │ ├── flathub-beta.flatpakrepo │ │ ├── install_holoiso.sh │ │ ├── mkinitcpio_presets │ │ │ └── linux-neptune.preset │ │ └── pacman.conf │ ├── pre_install │ │ ├── iso_build_deps.sh │ │ └── mkinitcpio.conf │ └── steamos-gamemode.desktop │ ├── hostname │ ├── locale.conf │ ├── localtime │ ├── mkinitcpio.conf │ ├── mkinitcpio.d │ └── linux-neptune.preset │ ├── modprobe.d │ └── broadcom-wl.conf │ ├── pacman.conf │ ├── pacman.d │ ├── holo_mirrorlist │ ├── hooks │ │ ├── 40-locale-gen.hook │ │ ├── 50-fiveeighteen-depmod.hook │ │ ├── 51-fiveeighteen-rebuild.hook │ │ └── zzzz99-remove-custom-hooks-from-airootfs.hook │ └── mirrorlist │ ├── polkit-1 │ └── rules.d │ │ └── 99_holoiso_installuser.rules │ ├── sddm.conf.d │ └── autologin.conf │ ├── skel │ ├── .bashrc │ └── Desktop │ │ ├── chroot.desktop │ │ ├── ime-kb.desktop │ │ └── install.desktop │ ├── ssh │ └── sshd_config │ ├── sudoers.d │ └── g_wheel │ └── systemd │ ├── network │ ├── 20-ethernet.network │ ├── 20-wlan.network │ └── 20-wwan.network │ └── system │ ├── amd-perf-fix.service │ ├── cloud-init.target.wants │ ├── cloud-config.service │ ├── cloud-final.service │ ├── cloud-init-local.service │ └── cloud-init.service │ ├── dbus-org.freedesktop.ModemManager1.service │ ├── dbus-org.freedesktop.network1.service │ ├── dbus-org.freedesktop.nm-dispatcher.service │ ├── dbus-org.freedesktop.resolve1.service │ ├── default.target │ ├── etc-pacman.d-gnupg.mount │ ├── multi-user.target.wants │ ├── ModemManager.service │ ├── NetworkManager.service │ ├── choose-mirror.service │ ├── iwd.service │ ├── reflector.service │ ├── sshd.service │ ├── systemd-networkd.service │ └── systemd-resolved.service │ ├── network-online.target.wants │ ├── NetworkManager-wait-online.service │ └── systemd-networkd-wait-online.service │ ├── sockets.target.wants │ └── systemd-networkd.socket │ └── system ├── bootstrap_packages.x86_64 ├── efiboot └── loader │ └── loader.conf ├── gen_entries.sh ├── kernel_list.bootstrap ├── packages.x86_64 ├── pacman.conf └── profiledef.sh /.github/ISSUE_TEMPLATE/bug_report.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Bug report 3 | about: Create a report to help me improve HoloISO 4 | title: "[Report]" 5 | labels: '' 6 | assignees: '' 7 | 8 | --- 9 | 10 | ## Your Issue: 11 | ``` 12 | *type your problem here* 13 | ``` 14 | 15 | ## Your device's full specs 16 | ``` 17 | CPU: *Your thing here* 18 | GPU: *Your thing here* 19 | ``` 20 | 21 | ## Your OS version (`cat /etc/os-release | grep VARIANT_ID | cut -d '"' -f 2`): 22 | ``` 23 | snapshotxxxxxxxxxxx_xxxx 24 | ``` 25 | 26 | ## (Only for SteamOS Session loading issues) Have you tried launching `gamescope-session` from terminal? If yes, provide a log. 27 | ``` 28 | *Please put anything here if you tried to launch session separately* 29 | ``` 30 | 31 | ## Have you updated your installation recently? 32 | ``` 33 | *yes or no* 34 | ``` 35 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | work/ 2 | out/ 3 | steamdeck-20230323.1000-snapshot.manifest.pacman 4 | pkglist.x86_64.txt 5 | test2.sh 6 | test 7 | efiboot/loader/entries/* 8 | -------------------------------------------------------------------------------- /LICENSE.md: -------------------------------------------------------------------------------- 1 | DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE 2 | Version 2, December 2004 3 | 4 | Copyright (C) 2004 Sam Hocevar 5 | 22 rue de Plaisance, 75014 Paris, France 6 | Everyone is permitted to copy and distribute verbatim or modified 7 | copies of this license document, and changing it is allowed as long 8 | as the name is changed. 9 | 10 | DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE 11 | TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 12 | 13 | 0. You just DO WHAT THE FUCK YOU WANT TO 14 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # All work is being done on: https://github.com/holoiso-staging/releases. This version is completely EOL and is no longer supported. 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | [![Build ISO](https://github.com/theVakhovskeIsTaken/holoiso/actions/workflows/build.yml/badge.svg)](https://github.com/theVakhovskeIsTaken/holoiso/actions/workflows/build.yml) 10 | 11 | ![image](https://user-images.githubusercontent.com/97450182/167457908-07be1a60-7e86-4bef-b7f0-6bd19efd8b24.png) 12 | # HoloISO 13 | SteamOS 3 (Holo) archiso configuration. 14 | 15 | ***Yes, Gabe. SteamOS functions well on a toaster.*** 16 | 17 | This project attempts to bring the Steam Deck's SteamOS Holo redistribution into a generic, installable format, and provide a close-to-official SteamOS experience. 18 | Main point of this project focuses in re-implementing proprietary (as in runs-only-on-deck) components that Steam client, OS itself, gamescope and user-created applications for Deck rely on and making me learn Linux in a fun and unique way. 19 | 20 | Click [here](https://t.me/HoloISO) to join **HoloISO** Telegram update channel; 21 | 22 | **Common Questions** 23 | 24 | - Is this official? 25 | > No, but it may as well be 99% of the way there. Most of the code and packages, are straight from Valve, with zero possible edits, and the ISO is being built same rootfs bootstrap as all HoloISO installations run 26 | - I have an NVIDIA G- 27 | > No. Not even questionable. If you have an NVIDIA GPU, You're on your own. Latest Valve updates for Steam client including normal and Jupiter bootstraps have broken gamepadui on NVIDIA GPUs, and if so, no support will be provided for you. 28 | 29 | Hardware Support: 30 | - 31 | **CPU:** 32 | - Mostly all CPUs work fine. But people report inoperable experience on 7xxx series. (Should be working in later builds with linux-zen package included) 33 | 34 | **WLAN/PCIe additional cards:** 35 | - Any pre-2021 WLAN Card works fine on Valve's 5.13 Neptune kernel, but linux-zen provides support for ALL current cards 36 | 37 | **Sound:** 38 | - Everything mostly works fine(tm) 39 | 40 | **GPU:** 41 | - AMD GPUs with RADV support (Guaranteed to work fully stable. 7xxx requires testing) 42 | - NVIDIA GPUs (Unfunctional, but might work. No support will be provided to you, don't ask about it) 43 | - Intel GPUs (Random experience) 44 | 45 | Progress: 46 | - 47 | **Working stuff:** 48 | - Bootup 49 | - SteamOS OOBE (Steam Deck UI First Boot Experience) 50 | - Deck UI (separate session) 51 | - Deck UI (-gamepadui) 52 | - ~~TDP/FPS limiting~~ (*0) 53 | - Global FSR 54 | - Shader Pre-Caching 55 | - Switch to Desktop from plasma/to plasma without user interference. 56 | - Valve's exclusive *Vapor* appearance for KDE Plasma 57 | - Steam Deck pacman mirrors 58 | - Cool-looking neofetch? 59 | - System updates 60 | 61 | **Working stuff on Steam Deck compared to other distributions:** 62 | - Dock Firmware updater (additionally installable in desktop by running sudo pacman -S jupiter-dock-updater-bin) 63 | - Steam Deck BIOS, Controller firmware, OS firmware updater, support for thumbstick and haptic motor calibration, native amplifier (CS35L41) support 64 | - New fan curve control 65 | - TDP/Clock control 66 | 67 | (*0) Disabled for ALL systems except for Steam Deck (Valve Jupiter 1) due to VERY LOW hardcoded TDP/Clock values, especially for dGPUs. 68 | 69 | Installation process: 70 | - 71 | **Prerequistes:** 72 | - 4GB flash drive 73 | - More than 8 GB RAM if you plan to use "Copy-To-RAM" option to install 74 | - AMD GPU that supports RADV Drivers instead of Radeon (Southern Islands and Sea Islands require additional kernel cmdline property) 75 | - UEFI-enabled device 76 | - Disabled secure boot 77 | 78 | **Installation:** 79 | - Flash the ISO from [releases](https://github.com/bhaiest/holoiso/releases/latest) using [BalenaEtcher](https://www.balena.io/etcher/), [Rufus](https://rufus.ie) with DD mode, or by typing `sudo dd if=SteamOS.iso of=/dev/sd(your flash drive) bs=4M status=progress oflag=sync`, or by simply throwing ISO into Ventoy drive 80 | - Boot into ISO 81 | - Click on "Install SteamOS on this device" 82 | - Follow on-screen instructions 83 | - Take your favourite hot beverage, and wait 'till it installs :3 84 | 85 | Upon booting, you'll be greeted with Steam Deck's OOBE screen, from where you'll connect to your network, and login to your Steam account, from there, you can exit to KDE Plasma seamlessly by choosing *Switch to desktop* in the power menu, [like so](https://www.youtube.com/watch?v=smfwna2iHho). 86 | 87 | Screenshots: 88 | - 89 | ![Screenshot_20220508_133916](https://user-images.githubusercontent.com/97450182/167292656-1679e007-4701-4a3c-89ee-2104b5eb12cd.png) 90 | ![Screenshot_20220508_133737](https://user-images.githubusercontent.com/97450182/167292672-8bc9032d-4a21-4528-ab7e-b9dbc25a0664.png) 91 | ![Screenshot_20220508_133746](https://user-images.githubusercontent.com/97450182/167292722-a68806c1-5768-4790-a8e7-108d7c72bb08.png) 92 | ![Screenshot_20220508_133822](https://user-images.githubusercontent.com/97450182/167292731-86fed590-0260-4c5e-ac13-05d284b5fd24.png) 93 | ![Screenshot_20220508_134038](https://user-images.githubusercontent.com/97450182/167292734-90036b5f-2571-438e-8951-8d731cd4ae93.png) 94 | ![Screenshot_20220508_134051](https://user-images.githubusercontent.com/97450182/167292738-a70d266f-814d-4352-8d38-b920ae3f3381.png) 95 | 96 | Credits: 97 | - 98 | (Too much people xD, to be filled later!!!) 99 | 100 | Notes: 101 | - 102 | 103 | This configuration includes Valve's pacman.conf repositories, `holoinstall` script and `holoinstall` post-installation binaries. 104 | 105 | This configuration builds a *releng-based ISO*, which is the default Arch Linux redistribution flavor. 106 | -------------------------------------------------------------------------------- /README.zh_CN.md: -------------------------------------------------------------------------------- 1 | [![Build ISO](https://github.com/theVakhovskeIsTaken/holoiso/actions/workflows/build.yml/badge.svg)](https://github.com/theVakhovskeIsTaken/holoiso/actions/workflows/build.yml) 2 | 3 | ![image](https://user-images.githubusercontent.com/97450182/167457908-07be1a60-7e86-4bef-b7f0-6bd19efd8b24.png) 4 | 5 | # ENGLISH Version 6 | Click [here](https://github.com/theVakhovskeIsTaken/holoiso) to access the English version. 7 | 8 | # HoloISO 9 | 10 | ArchLinux 的 SteamOS 3 (Holo) 配置文件。 11 | 12 | ***是的,V社宣称你甚至可以在面包机上运行SteamOS。*** 13 | 本项目试图将 Steam Desk 的 SteamOS Holo 重新更改为通用、可安装的发布版本,并提供类似于官方的 SteamOS 体验。本项目的重点在于实现 Steam 客户端、操作系统本身、 Gamescope 组件和用户为 Deck 创建的应用程序所依赖的专有运行库(例如 Steam Desk 专有运行库。)。 14 | 15 | 点击 [这里](https://t.me/HoloISO) 来加入 **HoloISO** 的官方 **Telegram** 更新频道 ; 16 | 17 | 点击 [这里](https://steamdeck.community/forums/holoiso.29/) 来访问 **Steam Deck** 官方社区论坛上对 **HoloISO** 的讨论。 18 | 19 | **常见问题:** 20 | 21 | - 本项目是V社官方的吗? 22 | > 不是,但它 99% 的部分已经和官方是一样的。它的原代码和软件包没有经过任何修改,都源自 Valve ,并且所有被构建的 ISO 有 HoloISO 安装运行后相同的 rootfs 引导程序。 23 | - 我有一个 NVIDIA G- 系列显卡 24 | > 不,甚至不值得提问。如果您有 NVIDIA 显卡,您就靠自己了。Steam 客户端的最新 Valve 更新包括普通和 Jupiter 引导程序已经破坏了 NVIDIA 显卡的 gamepadui。因此,你将不会获得任何技术支持。 25 | 26 | 27 | **项目计划:** 28 | - 成功启动 29 | - SteamOS OOBE(Steam Deck UI 首次启动时的欢迎界面) 30 | - Deck UI (桌面模式) 31 | - Deck UI (-游戏模式) 32 | - ~~TDP 控制/FPS 限制~~ (*0) 33 | - 全局 FSR 34 | - 着色器预缓存 35 | - 在没有用户干扰的情况下切换桌面模式从Plasma/到Plasma。 36 | - Valve 为 KDE Plasma 桌面独家打造的 *Vapor* 主题 37 | - Steam Deck pacman 镜像源 38 | - 看起来很酷的 neofetch ? 39 | - 系统更新 40 | 41 | 42 | **Steam Deck 上的程序内容与发行版的比较::** 43 | 44 | - Dock 固件更新程序(可通过运行 sudo pacman -S jupiter-dock-updater-bin 在桌面上额外安装) 45 | - Steam Deck BIOS、控制器固件、操作系统固件更新程序 46 | - 新的风扇曲线控制 47 | - TDP/时钟控制 48 | 49 | (*0) 由于 Steam Deck 默认的 TDP 功耗和 GPU 频率都很低,特别是 dGPUs ,无法匹配大部分通用配置,所以该功能禁用。 50 | 51 | # 安装说明: 52 | **最低需求:** 53 | - 4GB 存储介质 54 | - 如果您需要使用“复制到内存”选项进行安装,则需要 8 GB 以上的内存 55 | - 支持 RADV 驱动而非 Radeon 系列的 AMD GPU(Southern Islands 和 Sea Islands 需要额外的内核 cmdline 属性); Intel iGPU 支持到 11 代 Iris Xe(暂不支持 Arc 显卡) 56 | - 支持 UEFI 启动 57 | - 禁用安全启动(secure boot) 58 | 59 | **安装步骤:** 60 | - 从 [release](https://github.com/bhaiest/holoiso/releases/latest) 或者兼容 NVIDIA 显卡的 [actions](https://nightly.link/theVakhovskeIsTaken/holoiso/workflows/build/stable/holoiso) 下载并使用 DD 模式的 [BalenaEtcher](https://www.balena.io/etcher/) 或 [Rufus](https://rufus.ie) ,或使用命令 `sudo dd if=SteamOS.iso of=/dev/sd(你的存储介质) bs=4M status=progress oflag=sync` 刷入ISO镜像,或者将 ISO 文件直接放入 Ventoy 设备。 61 | - 引导到 ISO 镜像 62 | - 选择 "Install SteamOS on this device" 63 | - 按照屏幕上的提示进行操作 64 | - 喝点饮料,等他安装完毕 :3 65 | 66 | 在启动时,你会看到 Steam Deck 的初始设置界面。设置你的网络,并登录你的 Steam 帐户,然后你在电源菜单选择`切换到桌面`来退出到 KDE Plasma 桌面。[像这样](https://www.youtube.com/watch?v=smfwna2iHho)。 67 | 68 | # 截屏: 69 | - 70 | ![Screenshot_20220508_133916](https://user-images.githubusercontent.com/97450182/167292656-1679e007-4701-4a3c-89ee-2104b5eb12cd.png) 71 | ![Screenshot_20220508_133737](https://user-images.githubusercontent.com/97450182/167292672-8bc9032d-4a21-4528-ab7e-b9dbc25a0664.png) 72 | ![Screenshot_20220508_133746](https://user-images.githubusercontent.com/97450182/167292722-a68806c1-5768-4790-a8e7-108d7c72bb08.png) 73 | ![Screenshot_20220508_133822](https://user-images.githubusercontent.com/97450182/167292731-86fed590-0260-4c5e-ac13-05d284b5fd24.png) 74 | ![Screenshot_20220508_134038](https://user-images.githubusercontent.com/97450182/167292734-90036b5f-2571-438e-8951-8d731cd4ae93.png) 75 | ![Screenshot_20220508_134051](https://user-images.githubusercontent.com/97450182/167292738-a70d266f-814d-4352-8d38-b920ae3f3381.png) 76 | 77 | # 致谢: 78 | 79 | (人太多 xD ,待会再补!!!) 80 | 81 | # 备注: 82 | 83 | 本项目配置包含 Valve 的 pacman.conf 镜像库、 `holoinstall` 脚本和 `holoinstall` 编译后的二进制文件。 84 | 85 | 该项目生成了一个基于 releng-based 的 ISO ,使用了默认的 Arch Linux 再发行版。 86 | 87 | # 如何生成 ISO: 88 | 通过执行以下命令进行构建: 89 | ``` 90 | pacman -Sy archiso 91 | git clone https://github.com/bhaiest/holoiso/ 92 | mv holoiso/mkarchiso-holoiso /usr/bin 93 | chmod +x /usr/bin/mkarchiso-holoiso 94 | sudo mkarchiso-holoiso -v holoiso 95 | ``` 96 | 编译结束后,你的生成的 ISO 文件生成再 `out` 文件夹中。 97 | -------------------------------------------------------------------------------- /airootfs/etc/X11/xorg.conf.d/30-touchpad.conf: -------------------------------------------------------------------------------- 1 | Section "InputClass" 2 | Identifier "MyTouchpad" 3 | MatchIsTouchpad "on" 4 | Driver "libinput" 5 | Option "Tapping" "on" 6 | EndSection 7 | -------------------------------------------------------------------------------- /airootfs/etc/holoinstall/post_install/amd-perf-fix: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | if (( UID != 0 )); then 4 | echo "$0: needs to run as root!" 1>&2 5 | exit 1 6 | fi 7 | 8 | for device in /sys/class/drm/card?/device; do 9 | if [[ -e "$device"/pp_power_profile_mode ]]; then 10 | 11 | echo manual > "$device"/power_dpm_force_performance_level 12 | echo 1 > "$device"/pp_power_profile_mode 13 | 14 | # The other power profile modes are: 15 | # 0 = BOOTUP_DEFAULT 16 | # 1 = 3D_FULL_SCREEN 17 | # 2 = POWER_SAVING 18 | # 3 = VIDEO 19 | # 4 = VR 20 | # 5 = COMPUTE 21 | fi 22 | done 23 | -------------------------------------------------------------------------------- /airootfs/etc/holoinstall/post_install/amd-perf-fix.service: -------------------------------------------------------------------------------- 1 | /etc/systemd/system/amd-perf-fix.service -------------------------------------------------------------------------------- /airootfs/etc/holoinstall/post_install/chroot_holoiso.sh: -------------------------------------------------------------------------------- 1 | #!/bin/zsh 2 | # Simple chrooter for stuff 3 | 4 | # Define mountpoint 5 | MOUNT_DIR=/tmp/mount_chroot 6 | 7 | # Detect holo partitions 8 | ROOTPART=$(sudo blkid | grep holo-root | cut -d ':' -f 1 | head -n 1) 9 | if [ -n "${ROOTPART}" ]; then 10 | echo "Valid HoloISO Installation found" 11 | else 12 | echo "HoloISO Installation wasn't found on this device" 13 | echo "Exiting..." 14 | sleep 5 15 | exit 1 16 | fi 17 | 18 | HOMEPART=$(sudo blkid | grep holo-home | cut -d ':' -f 1 | head -n 1) 19 | EFIPART=$(sudo blkid | grep HOLOEFI | cut -d ':' -f 1 | head -n 1) 20 | 21 | # Re-mount stuff before proceeding 22 | CHK_MNT=$(lsblk | grep -e ${MOUNT_DIR} -e /mnt) 23 | if [ -n "${CHK_MNT}" ]; then 24 | sudo umount -l ${ROOTPART} 2>&1 25 | fi 26 | 27 | # Create an mountpoint 28 | sudo rm -rf ${MOUNT_DIR} 29 | sudo mkdir -p ${MOUNT_DIR} 30 | 31 | # Inform user about partition location 32 | echo "Your HoloISO EFI Partition is located in ${EFIPART} partition." 33 | echo "Your HoloISO Root Partition is located in ${ROOTPART} partition." 34 | if [ -n "${HOMEPART}" ]; then 35 | echo "Your HoloISO Home Partition is located in ${HOMEPART} partition." 36 | fi 37 | 38 | # Mount partitions 39 | sudo mount ${ROOTPART} ${MOUNT_DIR} 40 | if [ -n "${HOMEPART}" ]; then 41 | sudo mount ${HOMEPART} ${MOUNT_DIR}/home 42 | fi 43 | sudo mount ${EFIPART} ${MOUNT_DIR}/boot/efi 44 | 45 | # Check for version 46 | echo "Your HoloISO Installation version: $(cat ${MOUNT_DIR}/etc/os-release | grep VARIANT_ID | cut -d '"' -f 2)\n" 47 | echo "Currently installed kernel versions: $(cat ${MOUNT_DIR}/usr/src/linux*/version)" 48 | echo "Most used commands:" 49 | echo "steamos-update [check|now] -- Checks for OS updates and applies them\nholoiso-[enable|disable]-sessions -- Disables session autologin\nholoiso-grub-update -- Reinstalls and updates grub configuration\n\nCommands available for logged-in user:\n" 50 | 51 | # Chroot! 52 | sudo arch-chroot ${MOUNT_DIR} -------------------------------------------------------------------------------- /airootfs/etc/holoinstall/post_install/flathub-beta.flatpakrepo: -------------------------------------------------------------------------------- 1 | [Flatpak Repo] 2 | Title=Flathub Beta 3 | Url=https://dl.flathub.org/beta-repo/ 4 | Homepage=https://flathub.org/ 5 | Comment=Beta builds of Flatpak applications 6 | Description=Beta builds of Flatpak applications 7 | Icon=https://dl.flathub.org/repo/logo.svg 8 | GPGKey=mQINBFlD2sABEADsiUZUOYBg1UdDaWkEdJYkTSZD68214m8Q1fbrP5AptaUfCl8KYKFMNoAJRBXn9FbE6q6VBzghHXj/rSnA8WPnkbaEWR7xltOqzB1yHpCQ1l8xSfH5N02DMUBSRtD/rOYsBKbaJcOgW0K21sX+BecMY/AI2yADvCJEjhVKrjR9yfRX+NQEhDcbXUFRGt9ZT+TI5yT4xcwbvvTu7aFUR/dH7+wjrQ7lzoGlZGFFrQXSs2WI0WaYHWDeCwymtohXryF8lcWQkhH8UhfNJVBJFgCY8Q6UHkZG0FxMu8xnIDBMjBmSZKwKQn0nwzwM2afskZEnmNPYDI8nuNsSZBZSAw+ThhkdCZHZZRwzmjzyRuLLVFpOj3XryXwZcSefNMPDkZAuWWzPYjxS80cm2hG1WfqrG0Gl8+iX69cbQchb7gbEb0RtqNskTo9DDmO0bNKNnMbzmIJ3/rTbSahKSwtewklqSP/01o0WKZiy+n/RAkUKOFBprjJtWOZkc8SPXV/rnoS2dWsJWQZhuPPtv3tefdDiEyp7ePrfgfKxuHpZES0IZRiFI4J/nAUP5bix+srcIxOVqAam68CbAlPvWTivRUMRVbKjJiGXIOJ78wAMjqPg3QIC0GQ0EPAWwAOzzpdgbnG7TCQetaVV8rSYCuirlPYN+bJIwBtkOC9SWLoPMVZTwQARAQABtC5GbGF0aHViIFJlcG8gU2lnbmluZyBLZXkgPGZsYXRodWJAZmxhdGh1Yi5vcmc+iQJUBBMBCAA+FiEEblwF2XnHba+TwIE1QYTdTZB6fK4FAllD2sACGwMFCRLMAwAFCwkIBwIGFQgJCgsCBBYCAwECHgECF4AACgkQQYTdTZB6fK5RJQ/+Ptd4sWxaiAW91FFk7+wmYOkEe1NY2UDNJjEEz34PNP/1RoxveHDt43kYJQ23OWaPJuZAbu+fWtjRYcMBzOsMCaFcRSHFiDIC9aTp4ux/mo+IEeyarYt/oyKb5t5lta6xaAqg7rwt65jW5/aQjnS4h7eFZ+dAKta7Y/fljNrOznUp81/SMcx4QA5G2Pw0hs4Xrxg59oONOTFGBgA6FF8WQghrpR7SnEe0FSEOVsAjwQ13Cfkfa7b70omXSWp7GWfUzgBKyoWxKTqzMN3RQHjjhPJcsQnrqH5enUu4Pcb2LcMFpzimHnUgb9ft72DP5wxfzHGAWOUiUXHbAekfq5iFks8cha/RST6wkxG3Rf44Zn09aOxh1btMcGL+5xb1G0BuCQnA0fP/kDYIPwh9z22EqwRQOspIcvGeLVkFeIfubxpcMdOfQqQnZtHMCabV5Q/Rk9K1ZGc8M2hlg8gHbXMFch2xJ0Wu72eXbA/UY5MskEeBgawTQnQOK/vNm7t0AJMpWK26Qg6178UmRghmeZDj9uNRc3EI1nSbgvmGlpDmCxaAGqaGL1zW4KPW5yN25/qeqXcgCvUjZLI9PNq3Kvizp1lUrbx7heRiSoazCucvHQ1VHUzcPVLUKKTkoTP8okThnRRRsBcZ1+jI4yMWIDLOCT7IW3FePr+3xyuy5eEo9a25Ag0EWUPa7AEQALT/CmSyZ8LWlRYQZKYw417p7Z2hxqd6TjwkwM3IQ1irumkWcTZBZIbBgrSOg6CcXD2oWydCQHWi9qaxhuhEl2bJL5LskmBcMxVdQeD0LLHd8QUnbnnIby8ocvWN1alPfvJFjCUTrmD22U1ycOzRw2lIe4kiQONbOZtdWrVImQQSndjFlisitbmlWHvHm2lOOYy8+GJB7YffVV193hmnBSJffCy4bvkuLxsI+n1DhOzc7MPV3z6HGk4HiEcF0yyt9tCYhpsxHFdBoq2h771HfAcS0s98EVAqYMFnf9em+4cnYpdI6mhIfS1FQiKl6DBAYA8tT3ggla00DurPo0JwX/zN+PaO5h/6O9aCZwV7G6rbkgMuqMergXaf8oP38gr0z+MqWnkfM63Bodq68GP4l4hd02BoFBbDf38TMuGQB14+twJMdfbAxo2MbgluvQgfwHfZ2ca6gyEY+9s/YD1gugLjV+S6CB51WkFNe1z4tAPgJZNxUcKCbeaHNbthl8Hks/pY9RCEseX/EdfzF18epbSjJMPh4DPQXbUoFwmyuYcoBOPmvZHNl9hK7B/1RP8w1ZrXk8qdupC0SNbafX7270B7lMMVImzZetGsM9ypXJ6llhp3FwW09iseNyGJGPsr/dvTMGDXqOPfU/9SAS1LSTY4K9PbRtdrBE318YX8mIk5ABEBAAGJBHIEGAEIACYWIQRuXAXZecdtr5PAgTVBhN1NkHp8rgUCWUPa7AIbAgUJEswDAAJACRBBhN1NkHp8rsF0IAQZAQgAHRYhBFSmzd2JGfsgQgDYrFYnAunj7X7oBQJZQ9rsAAoJEFYnAunj7X7oR6AP/0KYmiAFeqx14Z43/6s2gt3VhxlSd8bmcVV7oJFbMhdHBIeWBp2BvsUf00I0Zl14ZkwCKfLwbbORC2eIxvzJ+QWjGfPhDmS4XUSmhlXxWnYEveSek5Tde+fmu6lqKM8CHg5BNx4GWIX/vdLi1wWJZyhrUwwICAxkuhKxuP2Z1An48930eslTD2GGcjByc27+9cIZjHKa07I/aLffo04V+oMT9/tgzoquzgpVV4jwekADo2MJjhkkPveSNI420bgT+Q7Fi1l0X1aFUniBvQMsaBa27PngWm6xE2ZYvh7nWCdd5g0c0eLIHxWwzV1lZ4Ryx4ITO/VL25ItECcjhTRdYa64sA62MYSaB0x3eR+SihpgP3wSNPFu3MJo6FKTFdi4CBAEmpWHFW7FcRmd+cQXeFrHLN3iNVWryy0HK/CUEJmiZEmpNiXecl4vPIIuyF0zgSCztQtKoMr+injpmQGC/rF/ELBVZTUSLNB350S0Ztvw0FKWDAJSxFmoxt3xycqvvt47rxTrhi78nkk6jATKGyvP55sO+K7Q7Wh0DXA69hvPrYW2eu8jGCdVGxi6HX7L1qcfEd0378S71dZ3g9o6KKl1OsDWWQ6MJ6FGBZedl/ibRfs8p5+sbCX3lQSjEFy3rx6n0rUrXx8U2qb+RCLzJlmC5MNBOTDJwHPcX6gKsUcXZrEQALmRHoo3SrewO41RCr+5nUlqiqV3AohBMhnQbGzyHf2+drutIaoh7Rj80XRh2bkkuPLwlNPf+bTXwNVGse4bej7B3oV6Ae1N7lTNVF4Qh+1OowtGjmfJPWo0z1s6HFJVxoIof9z58Msvgao0zrKGqaMWaNQ6LUeC9g9Aj/9Uqjbo8X54aLiYs8Z1WNc06jKP+gv8AWLtv6CR+l2kLez1YMDucjm7v6iuCMVAmZdmxhg5I/X2+OM3vBsqPDdQpr2TPDLX3rCrSBiS0gOQ6DwN5N5QeTkxmY/7QO8bgLo/Wzu1iilH4vMKW6LBKCaRx5UEJxKpL4wkgITsYKneIt3NTHo5EOuaYk+y2+Dvt6EQFiuMsdbfUjs3seIHsghX/cbPJa4YUqZAL8C4OtVHaijwGo0ymt9MWvS9yNKMyT0JhN2/BdeOVWrHk7wXXJn/ZjpXilicXKPx4udCF76meE+6N2u/T+RYZ7fP1QMEtNZNmYDOfA6sViuPDfQSHLNbauJBo/n1sRYAsL5mcG22UDchJrlKvmK3EOADCQg+myrm8006LltubNB4wWNzHDJ0Ls2JGzQZCd/xGyVmUiidCBUrD537WdknOYE4FD7P0cHaM9brKJ/M8LkEH0zUlo73bY4XagbnCqve6PvQb5G2Z55qhWphd6f4B6DGed86zJEa/RhS -------------------------------------------------------------------------------- /airootfs/etc/holoinstall/post_install/install_holoiso.sh: -------------------------------------------------------------------------------- 1 | #!/bin/zsh 2 | # HoloISO Installer v2 3 | # This defines all of the current variables. 4 | HOLO_INSTALL_DIR="${HOLO_INSTALL_DIR:-/mnt}" 5 | IS_WIN600=$(cat /sys/devices/virtual/dmi/id/product_name | grep Win600) 6 | IS_STEAMDECK=$(cat /sys/devices/virtual/dmi/id/product_name | grep Jupiter) 7 | 8 | if [ -n "${IS_WIN600}" ]; then 9 | GAMEPAD_DRV="1" 10 | fi 11 | 12 | if [ -n "${IS_STEAMDECK}" ]; then 13 | FIRMWARE_INSTALL="1" 14 | fi 15 | 16 | check_mount(){ 17 | if [ $1 != 0 ]; then 18 | echo "\nError: Something went wrong when mounting $2 partitions. Please try again!\n" 19 | echo 'Press any key to exit...'; read -k1 -s 20 | exit 1 21 | fi 22 | } 23 | 24 | check_download(){ 25 | if [ $1 != 0 ]; then 26 | echo "\nError: Something went wrong when $2.\nPlease make sure you have a stable internet connection!\n" 27 | echo 'Press any key to exit...'; read -k1 -s 28 | exit 1 29 | fi 30 | } 31 | 32 | partitioning(){ 33 | echo "Select your drive in popup:" 34 | 35 | DRIVEDEVICE=$(lsblk -d -o NAME | sed "1d" | awk '{ printf "FALSE""\0"$0"\0" }' | \ 36 | xargs -0 zenity --list --width=600 --height=512 --title="Select disk" --text="Select your disk to install HoloISO in below:\n\n $(lsblk -d -o NAME,MAJ:MIN,RM,SIZE,RO,TYPE,VENDOR,MODEL,SERIAL,MOUNTPOINT)" \ 37 | --radiolist --multiple --column ' ' --column 'Disks') 38 | 39 | DEVICE="/dev/${DRIVEDEVICE}" 40 | 41 | INSTALLDEVICE="${DEVICE}" 42 | 43 | if [ ! -b $DEVICE ]; then 44 | echo "$DEVICE not found! Installation Aborted!" 45 | exit 1 46 | fi 47 | lsblk $DEVICE | head -n2 | tail -n1 | grep disk > /dev/null 2>&1 48 | if [ $? != 0 ]; then 49 | echo "$DEVICE is not disk type! Installation Aborted!" 50 | echo "\nNote: If you wish to perform partitioned installation,\nPlease specify the disk drive node first then select \"2\" for partition install." 51 | exit 1 52 | fi 53 | echo "\nChoose your partitioning type:" 54 | install=$(zenity --list --title="Choose your installation type:" --column="Type" --column="Name" 1 "Erase entire drive" \2 "Install alongside existing OS/Partition (Requires at least 50 GB of FREE and UNFORMATTED space from the end)" --width=700 --height=220) 55 | if [[ -n "$(sudo blkid | grep holo-home | cut -d ':' -f 1 | head -n 1)" ]]; then 56 | HOME_REUSE_TYPE=$(zenity --list --title="Warning" --text="HoloISO home partition was detected at $(sudo blkid | grep holo-home | cut -d ':' -f 1 | head -n 1). Please select an appropriate action below:" --column="Type" --column="Name" 1 "Format it and start over" \2 "Reuse partition" --width=500 --height=220) 57 | if [[ "$HOME_REUSE_TYPE" == "2" ]]; then 58 | mkdir -p /tmp/home 59 | mount $(sudo blkid | grep holo-home | cut -d ':' -f 1 | head -n 1) /tmp/home 60 | mkdir -p /tmp/rootpart 61 | mount $(sudo blkid | grep holo-root | cut -d ':' -f 1 | head -n 1) /tmp/rootpart 62 | if [[ -d "/tmp/home/.steamos" ]]; then 63 | echo "Migration data found. Proceeding" 64 | umount -l $(sudo blkid | grep holo-home | cut -d ':' -f 1 | head -n 1) 65 | HOLOUSER=$(cat /tmp/rootpart/etc/passwd | grep home | cut -d ':' -f 1) 66 | MIGRATEDINSTALL="1" 67 | umount -l $(sudo blkid | grep holo-root | cut -d ':' -f 1 | head -n 1) 68 | else 69 | ( 70 | sleep 2 71 | echo "10" 72 | HOLOUSER=$(cat /tmp/rootpart/etc/passwd | grep home | cut -d ':' -f 1) 73 | MIGRATEDINSTALL="1" 74 | mkdir -p /tmp/home/.steamos/ /tmp/home/.steamos/offload/opt /tmp/home/.steamos/offload/root /tmp/home/.steamos/offload/srv /tmp/home/.steamos/offload/usr/lib/debug /tmp/home/.steamos/offload/usr/local /tmp/home/.steamos/offload/var/lib/flatpak /tmp/home/.steamos/offload/var/cache/pacman /tmp/home/.steamos/offload/var/lib/docker /tmp/home/.steamos/offload/var/lib/systemd/coredump /tmp/home/.steamos/offload/var/log /tmp/home/.steamos/offload/var/tmp 75 | echo "15" ; sleep 1 76 | mv /tmp/rootpart/opt/* /tmp/home/.steamos/offload/opt 77 | mv /tmp/rootpart/root/* /tmp/home/.steamos/offload/root 78 | mv /tmp/rootpart/srv/* /tmp/home/.steamos/offload/srv 79 | mv /tmp/rootpart/usr/lib/debug/* /tmp/home/.steamos/offload/usr/lib/debug 80 | mv /tmp/rootpart/usr/local/* /tmp/home/.steamos/offload/usr/local 81 | mv /tmp/rootpart/var/cache/pacman/* /tmp/home/.steamos/offload/var/cache/pacman 82 | mv /tmp/rootpart/var/lib/docker/* /tmp/home/.steamos/offload/var/lib/docker 83 | mv /tmp/rootpart/var/lib/systemd/coredump/* /tmp/home/.steamos/offload/var/lib/systemd/coredump 84 | mv /tmp/rootpart/var/log/* /tmp/home/.steamos/offload/var/log 85 | mv /tmp/rootpart/var/tmp/* /tmp/home/.steamos/offload/var/tmp 86 | echo "System directory moving complete. Preparing to move flatpak content." 87 | echo "30" ; sleep 1 88 | echo "Starting flatpak data migration.\nThis may take 2 to 10 minutes to complete." 89 | rsync -axHAWXS --numeric-ids --info=progress2 --no-inc-recursive /tmp/rootpart/var/lib/flatpak /tmp/home/.steamos/offload/var/lib/ | tr '\r' '\n' | awk '/^ / { print int(+$2) ; next } $0 { print "# " $0 }' 90 | echo "Finished." 91 | ) | 92 | zenity --progress --title="Preparing to reuse home at $(sudo blkid | grep holo-home | cut -d ':' -f 1 | head -n 1)" --text="Your installation will reuse following user: ${HOLOUSER} \n\nStarting to move following directories to target offload:\n\n- /opt\n- /root\n- /srv\n- /usr/lib/debug\n- /usr/local\n- /var/cache/pacman\n- /var/lib/docker\n- /var/lib/systemd/coredump\n- /var/log\n- /var/tmp\n" --width=500 --no-cancel --percentage=0 --auto-close 93 | umount -l $(sudo blkid | grep holo-home | cut -d ':' -f 1 | head -n 1) 94 | umount -l $(sudo blkid | grep holo-root | cut -d ':' -f 1 | head -n 1) 95 | fi 96 | fi 97 | fi 98 | # Setup password for root 99 | while true; do 100 | ROOTPASS=$(zenity --forms --title="Account configuration" --text="Set root/system administrator password" --add-password="Password for user root") 101 | if [ -z $ROOTPASS ]; then 102 | zenity --warning --text "No password was set for user \"root\"!" --width=300 103 | break 104 | fi 105 | echo 106 | ROOTPASS_CONF=$(zenity --forms --title="Account configuration" --text="Confirm your root password" --add-password="Password for user root") 107 | echo 108 | if [ $ROOTPASS = $ROOTPASS_CONF ]; then 109 | break 110 | fi 111 | zenity --warning --text "Passwords not match." --width=300 112 | done 113 | # Create user 114 | NAME_REGEX="^[a-z][-a-z0-9_]*\$" 115 | if [[ "$MIGRATEDINSTALL" -ne "1" ]]; then 116 | while true; do 117 | HOLOUSER=$(zenity --entry --title="Account creation" --text "Enter username for this installation:") 118 | if [ $HOLOUSER = "root" ]; then 119 | zenity --warning --text "User root already exists." --width=300 120 | elif [ -z $HOLOUSER ]; then 121 | zenity --warning --text "Please create a user!" --width=300 122 | elif [ ${#HOLOUSER} -gt 32 ]; then 123 | zenity --warning --text "Username length must not exceed 32 characters!" --width=400 124 | elif [[ ! $HOLOUSER =~ $NAME_REGEX ]]; then 125 | zenity --warning --text "Invalid username \"$HOLOUSER\"\nUsername needs to follow these rules:\n\n- Must start with a lowercase letter.\n- May only contain lowercase letters, digits, hyphens, and underscores." --width=500 126 | else 127 | break 128 | fi 129 | done 130 | fi 131 | # Setup password for user 132 | while true; do 133 | HOLOPASS=$(zenity --forms --title="Account configuration" --text="Set password for $HOLOUSER" --add-password="Password for user $HOLOUSER") 134 | echo 135 | HOLOPASS_CONF=$(zenity --forms --title="Account configuration" --text="Confirm password for $HOLOUSER" --add-password="Password for user $HOLOUSER") 136 | echo 137 | if [ -z $HOLOPASS ]; then 138 | zenity --warning --text "Please type password for user \"$HOLOUSER\"!" --width=300 139 | HOLOPASS_CONF=unmatched 140 | fi 141 | if [ $HOLOPASS = $HOLOPASS_CONF ]; then 142 | break 143 | fi 144 | zenity --warning --text "Passwords do not match." --width=300 145 | done 146 | case $install in 147 | 1) 148 | destructive=true 149 | # Umount twice to fully umount the broken install of steam os 3 before installing. 150 | umount $INSTALLDEVICE* > /dev/null 2>&1 151 | umount $INSTALLDEVICE* > /dev/null 2>&1 152 | $INST_MSG1 153 | if zenity --question --text "WARNING: The following drive is going to be fully erased. ALL DATA ON DRIVE ${DEVICE} WILL BE LOST! \n\n$(lsblk -o NAME,MAJ:MIN,RM,SIZE,RO,TYPE,VENDOR,MODEL,SERIAL,MOUNTPOINT ${DEVICE} | sed "1d")\n\nErase ${DEVICE} and begin installation?" --width=700 154 | then 155 | echo "\nWiping partitions..." 156 | sfdisk --delete ${DEVICE} 157 | wipefs -a ${DEVICE} 158 | echo "\nCreating new gpt partitions..." 159 | parted ${DEVICE} mklabel gpt 160 | else 161 | echo "\nNothing has been written.\nYou canceled the destructive install, please try again" 162 | echo 'Press any key to exit...'; read -k1 -s 163 | exit 1 164 | fi 165 | ;; 166 | 2) 167 | echo "\nHoloISO will be installed alongside existing OS/Partition.\nPlease make sure there are more than 24 GB on the >>END<< of free(unallocate) space available\n" 168 | parted $DEVICE print free 169 | echo "HoloISO will be installed on the following free (unallocated) space.\n" 170 | parted $DEVICE print free | tail -n2 | grep "Free Space" 171 | if [ $? != 0 ]; then 172 | echo "Error! No Free Space found on the end of the disk.\nNothing has been written.\nYou canceled the non-destructive install, please try again" 173 | exit 1 174 | echo 'Press any key to exit...'; read -k1 -s 175 | fi 176 | $INST_MSG1 177 | if zenity --question --text "HoloISO will be installed on the following free (unallocated) space.\nDoes this look reasonable?\n$(sudo parted ${DEVICE} print free | tail -n2 | grep "Free Space")" --width=500 178 | then 179 | echo "\nBeginning installation..." 180 | else 181 | echo "\nNothing has been written.\nYou canceled the non-destructive install, please try again" 182 | echo 'Press any key to exit...'; read -k1 -s 183 | exit 1 184 | fi 185 | ;; 186 | esac 187 | 188 | numPartitions=$(grep -c ${DRIVEDEVICE}'[0-9]' /proc/partitions) 189 | 190 | echo ${DEVICE} | grep -q -P "^/dev/(nvme|loop|mmcblk)" 191 | if [ $? -eq 0 ]; then 192 | INSTALLDEVICE="${DEVICE}p" 193 | numPartitions=$(grep -c ${DRIVEDEVICE}p /proc/partitions) 194 | fi 195 | 196 | efiPartNum=$(expr $numPartitions + 1) 197 | rootPartNum=$(expr $numPartitions + 2) 198 | homePartNum=$(expr $numPartitions + 3) 199 | 200 | echo "\nCalculating start and end of free space..." 201 | diskSpace=$(awk '/'${DRIVEDEVICE}'/ {print $3; exit}' /proc/partitions) 202 | # <= 60GB: typical flash drive 203 | if [ $diskSpace -lt 60000000 ]; then 204 | digitMB=8 205 | realDiskSpace=$(parted ${DEVICE} unit MB print free|head -n2|tail -n1|cut -c 16-20) 206 | # <= 500GB: typical 512GB hard drive 207 | elif [ $diskSpace -lt 500000000 ]; then 208 | digitMB=8 209 | realDiskSpace=$(parted ${DEVICE} unit MB print free|head -n2|tail -n1|cut -c 20-25) 210 | # anything else: typical 1024GB hard drive 211 | else 212 | digitMB=9 213 | realDiskSpace=$(parted ${DEVICE} unit MB print free|head -n2|tail -n1|cut -c 20-26) 214 | fi 215 | 216 | if [ $destructive ]; then 217 | efiStart=2 218 | else 219 | efiStart=$(parted ${DEVICE} unit MB print free|tail -n2|sed s/' '//|cut -c1-$digitMB|sed s/MB//|sed s/' '//g) 220 | fi 221 | efiEnd=$(expr $efiStart + 256) 222 | rootStart=$efiEnd 223 | rootEnd=$(expr $rootStart + 24000) 224 | 225 | if [ $efiEnd -gt $realDiskSpace ]; then 226 | echo "Not enough space available, please choose another disk and try again" 227 | exit 1 228 | echo 'Press any key to exit...'; read -k1 -s 229 | fi 230 | 231 | echo "\nCreating partitions..." 232 | parted ${DEVICE} mkpart primary fat32 ${efiStart}M ${efiEnd}M 233 | parted ${DEVICE} set ${efiPartNum} boot on 234 | parted ${DEVICE} set ${efiPartNum} esp on 235 | # If the available storage is less than 64GB, don't create /home. 236 | # If the boot device is mmcblk0, don't create an ext4 partition or it will break steamOS versions 237 | # released after May 20. 238 | if [[ "${DEVICE}" =~ mmcblk0 ]]; then 239 | parted ${DEVICE} mkpart primary btrfs ${rootStart}M 100% 240 | else 241 | parted ${DEVICE} mkpart primary btrfs ${rootStart}M ${rootEnd}M 242 | parted ${DEVICE} mkpart primary ext4 ${rootEnd}M 100% 243 | home=true 244 | fi 245 | root_partition="${INSTALLDEVICE}${rootPartNum}" 246 | mkfs -t vfat ${INSTALLDEVICE}${efiPartNum} 247 | efi_partition="${INSTALLDEVICE}${efiPartNum}" 248 | fatlabel ${INSTALLDEVICE}${efiPartNum} HOLOEFI 249 | mkfs -t btrfs -f ${root_partition} 250 | btrfs filesystem label ${root_partition} holo-root 251 | if [ $home ]; then 252 | if [[ -n "$(sudo blkid | grep holo-home | cut -d ':' -f 1 | head -n 1)" ]]; then 253 | if [[ "${HOME_REUSE_TYPE}" == "1" ]]; then 254 | mkfs -t ext4 -F -O casefold ${INSTALLDEVICE}${homePartNum} 255 | home_partition="${INSTALLDEVICE}${homePartNum}" 256 | e2label "${INSTALLDEVICE}${homePartNum}" holo-home 257 | elif [[ "${HOME_REUSE_TYPE}" == "2" ]]; then 258 | echo "Home partition will be reused at $(sudo blkid | grep holo-home | cut -d ':' -f 1 | head -n 1)" 259 | home_partition="$(sudo blkid | grep holo-home | cut -d ':' -f 1 | head -n 1)" 260 | fi 261 | else 262 | mkfs -t ext4 -F -O casefold ${INSTALLDEVICE}${homePartNum} 263 | home_partition="${INSTALLDEVICE}${homePartNum}" 264 | e2label "${INSTALLDEVICE}${homePartNum}" holo-home 265 | fi 266 | fi 267 | echo "\nPartitioning complete, mounting and installing." 268 | } 269 | 270 | base_os_install() { 271 | sleep 1 272 | clear 273 | partitioning 274 | echo "${UCODE_INSTALL_MSG}" 275 | sleep 1 276 | clear 277 | mount -t btrfs -o subvol=/,compress-force=zstd:1,discard,noatime,nodiratime ${root_partition} ${HOLO_INSTALL_DIR} 278 | check_mount $? root 279 | ${CMD_MOUNT_BOOT} 280 | check_mount $? boot 281 | if [ $home ]; then 282 | mkdir -p ${HOLO_INSTALL_DIR}/home 283 | mount -t ext4 ${home_partition} ${HOLO_INSTALL_DIR}/home 284 | check_mount $? home 285 | fi 286 | rsync -axHAWXS --numeric-ids --info=progress2 --no-inc-recursive / ${HOLO_INSTALL_DIR} | tr '\r' '\n' | awk '/^ / { print int(+$2) ; next } $0 { print "# " $0 }' | zenity --progress --title="Installing base OS..." --text="Bootstrapping root filesystem...\nThis may take more than 10 minutes.\n" --width=500 --no-cancel --auto-close 287 | arch-chroot ${HOLO_INSTALL_DIR} install -Dm644 "$(find /usr/lib | grep vmlinuz | grep neptune)" "/boot/vmlinuz-$(cat /usr/lib/modules/*neptune*/pkgbase)" 288 | arch-chroot ${HOLO_INSTALL_DIR} rm /etc/polkit-1/rules.d/99_holoiso_installuser.rules 289 | cp -r /etc/holoinstall/post_install/pacman.conf ${HOLO_INSTALL_DIR}/etc/pacman.conf 290 | arch-chroot ${HOLO_INSTALL_DIR} pacman-key --init 291 | arch-chroot ${HOLO_INSTALL_DIR} pacman -Rdd --noconfirm $(cat /etc/holoinstall/post_install/kernel_list.bootstrap) 292 | arch-chroot ${HOLO_INSTALL_DIR} mkinitcpio -P 293 | arch-chroot ${HOLO_INSTALL_DIR} pacman -U --noconfirm $(find /etc/holoinstall/post_install/kernels | grep pkg.tar.zst) 294 | 295 | arch-chroot ${HOLO_INSTALL_DIR} userdel -r liveuser 296 | check_download $? "installing base package" 297 | sleep 2 298 | clear 299 | 300 | sleep 1 301 | clear 302 | echo "\nBase system installation done, generating fstab..." 303 | genfstab -U -p /mnt >> /mnt/etc/fstab 304 | sleep 1 305 | clear 306 | 307 | echo "Configuring first boot user accounts..." 308 | rm ${HOLO_INSTALL_DIR}/etc/skel/Desktop/* 309 | arch-chroot ${HOLO_INSTALL_DIR} rm /etc/sddm.conf.d/* 310 | mv /etc/holoinstall/post_install_shortcuts/steam.desktop ${HOLO_INSTALL_DIR}/etc/xdg/autostart 311 | mv /etc/holoinstall/post_install_shortcuts/steamos-gamemode.desktop ${HOLO_INSTALL_DIR}/etc/skel/Desktop 312 | echo "\nCreating user ${HOLOUSER}..." 313 | echo -e "${ROOTPASS}\n${ROOTPASS}" | arch-chroot ${HOLO_INSTALL_DIR} passwd root 314 | arch-chroot ${HOLO_INSTALL_DIR} useradd --create-home ${HOLOUSER} 315 | echo -e "${HOLOPASS}\n${HOLOPASS}" | arch-chroot ${HOLO_INSTALL_DIR} passwd ${HOLOUSER} 316 | echo "${HOLOUSER} ALL=(ALL) ALL" > ${HOLO_INSTALL_DIR}/etc/sudoers.d/${HOLOUSER} 317 | chmod 0440 ${HOLO_INSTALL_DIR}/etc/sudoers.d/${HOLOUSER} 318 | echo "127.0.1.1 ${HOLOHOSTNAME}" >> ${HOLO_INSTALL_DIR}/etc/hosts 319 | sleep 1 320 | clear 321 | 322 | echo "\nInstalling bootloader..." 323 | mkdir -p ${HOLO_INSTALL_DIR}/boot/efi 324 | mount -t vfat ${efi_partition} ${HOLO_INSTALL_DIR}/boot/efi 325 | arch-chroot ${HOLO_INSTALL_DIR} holoiso-grub-update 326 | mount -o remount,rw -t efivarfs efivarfs /sys/firmware/efi/efivars 327 | arch-chroot ${HOLO_INSTALL_DIR} efibootmgr -c -d ${DEVICE} -p ${efiPartNum} -L "HoloISO" -l '\EFI\BOOT\BOOTX64.efi' 328 | sleep 1 329 | clear 330 | } 331 | full_install() { 332 | if [[ "${GAMEPAD_DRV}" == "1" ]]; then 333 | echo "You're running this on Anbernic Win600. A suitable gamepad driver will be installed." 334 | arch-chroot ${HOLO_INSTALL_DIR} pacman -U --noconfirm $(find /etc/holoinstall/post_install/pkgs_addon | grep win600-xpad-dkms) 335 | fi 336 | if [[ "${FIRMWARE_INSTALL}" == "1" ]]; then 337 | echo "You're running this on a Steam Deck. linux-firmware-neptune will be installed to ensure maximum kernel-side compatibility." 338 | arch-chroot ${HOLO_INSTALL_DIR} pacman -Rdd --noconfirm linux-firmware 339 | arch-chroot ${HOLO_INSTALL_DIR} pacman -U --noconfirm $(find /etc/holoinstall/post_install/pkgs_addon | grep linux-firmware-neptune) 340 | arch-chroot ${HOLO_INSTALL_DIR} mkinitcpio -P 341 | fi 342 | 343 | mv /etc/holoinstall/post_install/amd-perf-fix "${HOLO_INSTALL_DIR}"/usr/bin/amd-perf-fix 344 | chmod +x "${HOLO_INSTALL_DIR}"/usr/bin/amd-perf-fix 345 | 346 | # if [[ -n "$(lspci -nn | grep -i vga | grep -Po "10de:[a-z0-9]{4}")" ]]; then 347 | # echo "NVIDIA GPU detected. Installing NVIDIA Drivers." 348 | # arch-chroot ${HOLO_INSTALL_DIR} pacman -U --noconfirm $(find /etc/holoinstall/post_install/pkgs/nv | grep pkg.tar.zst) 349 | # arch-chroot ${HOLO_INSTALL_DIR} mkinitcpio -P 350 | # fi 351 | echo "\nConfiguring Steam Deck UI by default..." 352 | ln -s /usr/share/applications/steam.desktop ${HOLO_INSTALL_DIR}/etc/skel/Desktop/steam.desktop 353 | echo -e "[General]\nDisplayServer=wayland\n\n[Autologin]\nUser=${HOLOUSER}\nSession=gamescope-wayland.desktop\nRelogin=true\n\n[X11]\n# Janky workaround for wayland sessions not stopping in sddm, kills\n# all active sddm-helper sessions on teardown\nDisplayStopCommand=/usr/bin/gamescope-wayland-teardown-workaround" >> ${HOLO_INSTALL_DIR}/etc/sddm.conf.d/autologin.conf 354 | arch-chroot ${HOLO_INSTALL_DIR} usermod -a -G rfkill ${HOLOUSER} 355 | arch-chroot ${HOLO_INSTALL_DIR} usermod -a -G wheel ${HOLOUSER} 356 | echo "Preparing Steam OOBE..." 357 | arch-chroot ${HOLO_INSTALL_DIR} sudo -u ${HOLOUSER} mkdir -p ~/.local/share/Steam 358 | arch-chroot ${HOLO_INSTALL_DIR} sudo -u ${HOLOUSER} tar xf /usr/lib/steam/bootstraplinux_ubuntu12_32.tar.xz -C ~/.local/share/Steam 359 | arch-chroot ${HOLO_INSTALL_DIR} sudo -u ${HOLOUSER} touch ~/.steam/steam/.cef-enable-remote-debugging 360 | arch-chroot ${HOLO_INSTALL_DIR} touch /etc/holoiso-oobe 361 | echo "Cleaning up..." 362 | cp /etc/skel/.bashrc ${HOLO_INSTALL_DIR}/home/${HOLOUSER} 363 | arch-chroot ${HOLO_INSTALL_DIR} rm -rf /etc/holoinstall 364 | arch-chroot ${HOLO_INSTALL_DIR} systemctl enable amd-perf-fix 365 | sudo rm -rf ${HOLO_INSTALL_DIR}/etc/sudoers.d/g_wheel 366 | sudo rm -rf ${HOLO_INSTALL_DIR}/etc/sudoers.d/liveuser 367 | sleep 1 368 | clear 369 | if zenity --question --text="Would you like to have a 2GB Swap?" 370 | then 371 | arch-chroot ${HOLO_INSTALL_DIR} dd if=/dev/zero of=/home/.steamos/swapfile bs=1M count=2k status=progress 372 | arch-chroot ${HOLO_INSTALL_DIR} chmod 0600 /home/.steamos/swapfile 373 | arch-chroot ${HOLO_INSTALL_DIR} mkswap -U clear /home/.steamos/swapfile 374 | arch-chroot ${HOLO_INSTALL_DIR} swapon /home/.steamos/swapfile 375 | echo -e "/home/.steamos/swapfile none swap defaults 0 0" >> ${HOLO_INSTALL_DIR}/etc/fstab 376 | fi 377 | } 378 | 379 | 380 | # The installer itself. Good wuck. 381 | echo "SteamOS 3 Installer" 382 | echo "Start time: $(date)" 383 | echo "Please choose installation type:" 384 | HOLO_INSTALL_TYPE=$(zenity --list --title="Choose your installation type:" --column="Type" --column="Name" 1 "Install HoloISO, version $(cat /etc/os-release | grep VARIANT_ID | cut -d "=" -f 2 | sed 's/"//g') " \2 "Exit installer" --width=700 --height=220) 385 | if [[ "${HOLO_INSTALL_TYPE}" == "1" ]] || [[ "${HOLO_INSTALL_TYPE}" == "barebones" ]]; then 386 | echo "Installing SteamOS, barebones configuration..." 387 | base_os_install 388 | full_install 389 | zenity --warning --text="Installation finished! You may reboot now, or type arch-chroot /mnt to make further changes" --width=700 --height=50 390 | else 391 | zenity --warning --text="Exiting installer..." --width=120 --height=50 392 | fi 393 | 394 | echo "End time: $(date)" 395 | -------------------------------------------------------------------------------- /airootfs/etc/holoinstall/post_install/mkinitcpio_presets/linux-neptune.preset: -------------------------------------------------------------------------------- 1 | # mkinitcpio preset file for the 'linux-neptune' package 2 | 3 | ALL_config="/etc/mkinitcpio.conf" 4 | ALL_kver="/boot/vmlinuz-linux-neptune" 5 | 6 | PRESETS=('default' 'fallback') 7 | 8 | #default_config="/etc/mkinitcpio.conf" 9 | default_image="/boot/initramfs-linux-neptune.img" 10 | #default_options="" 11 | 12 | #fallback_config="/etc/mkinitcpio.conf" 13 | fallback_image="/boot/initramfs-linux-neptune-fallback.img" 14 | fallback_options="-S autodetect" 15 | -------------------------------------------------------------------------------- /airootfs/etc/holoinstall/post_install/pacman.conf: -------------------------------------------------------------------------------- 1 | # 2 | # /etc/pacman.conf 3 | # 4 | # See the pacman.conf(5) manpage for option and repository directives 5 | 6 | # 7 | # GENERAL OPTIONS 8 | # 9 | [options] 10 | # The following paths are commented out with their default values listed. 11 | # If you wish to use different paths, uncomment and update the paths. 12 | #RootDir = / 13 | #DBPath = /var/lib/pacman/ 14 | #CacheDir = /var/cache/pacman/pkg/ 15 | #LogFile = /var/log/pacman.log 16 | #GPGDir = /etc/pacman.d/gnupg/ 17 | #HookDir = /etc/pacman.d/hooks/ 18 | HoldPkg = pacman glibc 19 | #XferCommand = /usr/bin/curl -L -C - -f -o %o %u 20 | #XferCommand = /usr/bin/wget --passive-ftp -c -O %o %u 21 | #CleanMethod = KeepInstalled 22 | Architecture = auto 23 | 24 | # Pacman won't upgrade packages listed in IgnorePkg and members of IgnoreGroup 25 | IgnorePkg = linux-firmware-neptune linux-firmware-neptune-rtw-debug 26 | #IgnoreGroup = 27 | 28 | #NoUpgrade = 29 | #NoExtract = 30 | 31 | # Misc options 32 | #UseSyslog 33 | #Color 34 | #TotalDownload 35 | # We cannot check disk space from within a chroot environment 36 | #CheckSpace 37 | #VerbosePkgLists 38 | ParallelDownloads = 5 39 | 40 | # By default, pacman accepts packages signed by keys that its local keyring 41 | # trusts (see pacman-key and its man page), as well as unsigned packages. 42 | SigLevel = Required DatabaseOptional 43 | LocalFileSigLevel = Optional 44 | #RemoteFileSigLevel = Required 45 | 46 | # NOTE: You must run `pacman-key --init` before first using pacman; the local 47 | # keyring can then be populated with the keys of all official Arch Linux 48 | # packagers with `pacman-key --populate archlinux`. 49 | 50 | # 51 | # REPOSITORIES 52 | # - can be defined here or included from another file 53 | # - pacman will search repositories in the order defined here 54 | # - local/custom mirrors can be added here or in separate files 55 | # - repositories listed first will take precedence when packages 56 | # have identical names, regardless of version number 57 | # - URLs will have $repo replaced by the name of the current repo 58 | # - URLs will have $arch replaced by the name of the architecture 59 | # 60 | # Repository entries are of the format: 61 | # [repo-name] 62 | # Server = ServerName 63 | # Include = IncludePath 64 | # 65 | # The header [repo-name] is crucial - it must be present and 66 | # uncommented to enable the repo. 67 | # 68 | 69 | # The testing repositories are disabled by default. To enable, uncomment the 70 | # repo name header and Include lines. You can add preferred servers immediately 71 | # after the header, and they will be used before the default mirrors. 72 | 73 | #[testing-main] 74 | #Include = /etc/pacman.d/mirrorlist 75 | 76 | [holoiso-next] 77 | Server = https://cd2.holoiso.ru.eu.org/pkg/$repo/os/$arch 78 | SigLevel = Never 79 | 80 | [holostaging] 81 | Server = https://cd2.holoiso.ru.eu.org/pkg/$repo/os/$arch 82 | SigLevel = Never 83 | 84 | [jupiter-main] 85 | Include = /etc/pacman.d/mirrorlist 86 | SigLevel = Never 87 | 88 | [holo-main] 89 | Include = /etc/pacman.d/mirrorlist 90 | SigLevel = Never 91 | 92 | [core-main] 93 | Include = /etc/pacman.d/mirrorlist 94 | SigLevel = Never 95 | 96 | [extra-main] 97 | Include = /etc/pacman.d/mirrorlist 98 | SigLevel = Never 99 | 100 | #[community-testing-main] 101 | #Include = /etc/pacman.d/mirrorlist 102 | 103 | [community-main] 104 | Include = /etc/pacman.d/mirrorlist 105 | SigLevel = Never 106 | 107 | [multilib-main] 108 | Include = /etc/pacman.d/mirrorlist 109 | SigLevel = Never 110 | 111 | # An example of a custom package repository. See the pacman manpage for 112 | # tips on creating your own repositories. 113 | #[custom] 114 | #SigLevel = Optional TrustAll 115 | #Server = file:///home/custompkgs 116 | -------------------------------------------------------------------------------- /airootfs/etc/holoinstall/pre_install/iso_build_deps.sh: -------------------------------------------------------------------------------- 1 | #!/bin/zsh 2 | # Prepares ISO for packaging 3 | 4 | # Prepare thyself 5 | chmod +x /etc/holoinstall/post_install/install_holoiso.sh 6 | chmod +x /etc/holoinstall/post_install/chroot_holoiso.sh 7 | chmod +x /etc/skel/Desktop/install.desktop 8 | chmod 755 /etc/skel/Desktop/install.desktop 9 | # Begin coreOS bootstrapping below: 10 | 11 | # Init pacman keys 12 | pacman-key --init 13 | pacman -Sy 14 | 15 | # Install desktop suite 16 | pacman -Rcns --noconfirm pulseaudio xfce4-pulseaudio-plugin pulseaudio-alsa 17 | pacman -Rdd --noconfirm sddm syslinux xorg-xwayland 18 | pacman --overwrite="*" --noconfirm -S holoiso-main 19 | 20 | # Remove useless shortcuts for now 21 | mkdir /etc/holoinstall/post_install_shortcuts 22 | mv /etc/skel/Desktop/Return.desktop /etc/holoinstall/post_install_shortcuts 23 | # Add a liveOS user 24 | ROOTPASS="holoconfig" 25 | LIVEOSUSER="liveuser" 26 | 27 | echo -e "${ROOTPASS}\n${ROOTPASS}" | passwd root 28 | useradd --create-home ${LIVEOSUSER} 29 | echo -e "${ROOTPASS}\n${ROOTPASS}" | passwd ${LIVEOSUSER} 30 | echo "${LIVEOSUSER} ALL=(root) NOPASSWD:ALL" > /etc/sudoers.d/${LIVEOSUSER} 31 | chmod 0440 /etc/sudoers.d/${LIVEOSUSER} 32 | usermod -a -G rfkill ${LIVEOSUSER} 33 | usermod -a -G wheel ${LIVEOSUSER} 34 | mkdir -p /var/cache/pacman/ 35 | mv /.steamos/offload/var/cache/pacman/pkg /var/cache/pacman/ 36 | mv /etc/pacman.conf /etc/pacold 37 | cp /etc/holoinstall/post_install/pacman.conf /etc/pacman.conf 38 | pacman -Rdd --noconfirm sddm 39 | pacman --overwrite="*" --noconfirm -S holoiso-updateclient wireplumber flatpak packagekit-qt5 rsync unzip sddm-wayland dkms steam-im-modules systemd-swap ttf-twemoji-default ttf-hack ttf-dejavu pkgconf pavucontrol partitionmanager gamemode lib32-gamemode cpupower bluez-plugins bluez-utils 40 | mv /etc/xdg/autostart/steam.desktop /etc/skel/Desktop/steamos-gamemode.desktop /etc/holoinstall/post_install_shortcuts 41 | pacman --noconfirm -S base-devel 42 | sed -i 's/base udev modconf/base udev plymouth modconf/g' /etc/mkinitcpio.conf 43 | pacman --overwrite="*" --noconfirm -S handygccs-git extra-main/mesa extra-main/vulkan-radeon extra-main/vulkan-intel multilib-main/lib32-mesa multilib-main/lib32-vulkan-radeon multilib-main/lib32-vulkan-intel 44 | plymouth-set-default-theme -R steamos 45 | mkinitcpio -P 46 | 47 | # Enable stuff 48 | systemctl enable sddm NetworkManager systemd-timesyncd bluetooth sshd 49 | 50 | # Download extra stuff 51 | # mkdir -p /etc/holoinstall/post_install/pkgs/nv 52 | mkdir -p /etc/holoinstall/post_install/kernels 53 | wget $(pacman -Sp linux-firmware-neptune) -P /etc/holoinstall/post_install/pkgs_addon 54 | wget $(pacman -Sp win600-xpad-dkms) -P /etc/holoinstall/post_install/pkgs_addon 55 | 56 | for kernel in $(cat /etc/holoinstall/post_install/kernel_list.bootstrap) 57 | do 58 | cp $(pacman -Sp $kernel | cut -c8-) /etc/holoinstall/post_install/kernels 59 | done 60 | 61 | # wget $(pacman -Sp extra-main/nvidia-dkms) -P /etc/holoinstall/post_install/pkgs/nv 62 | # wget $(pacman -Sp extra-main/nvidia-utils) -P /etc/holoinstall/post_install/pkgs/nv 63 | # wget $(pacman -Sp multilib-main/lib32-nvidia-utils) -P /etc/holoinstall/post_install/pkgs/nv 64 | # wget $(pacman -Sp egl-wayland) -P /etc/holoinstall/post_install/pkgs/nv 65 | # wget $(pacman -Sp egl-external-platform) -P /etc/holoinstall/post_install/pkgs/nv 66 | # wget $(pacman -Sp extra-main/opencl-nvidia) -P /etc/holoinstall/post_install/pkgs/nv 67 | # wget $(pacman -Sp multilib-main/lib32-opencl-nvidia) -P /etc/holoinstall/post_install/pkgs/nv 68 | # wget $(pacman -Sp extra-main/nvtop) -P /etc/holoinstall/post_install/pkgs/nv 69 | # wget $(pacman -Sp extra-main/nvidia-settings) -P /etc/holoinstall/post_install/pkgs/nv 70 | # wget $(pacman -Sp extra-main/nvidia-prime) -P /etc/holoinstall/post_install/pkgs/nv 71 | # rm -rf /etc/holoinstall/post_install/pkgs/nv/*.zst.* && rm -rf /etc/holoinstall/post_install/pkgs/nv/*515* 72 | 73 | # Workaround mkinitcpio bullshit so that i don't KMS after rebuilding ISO each time and having users reinstalling their fucking OS bullshit every goddamn time. 74 | rm /etc/mkinitcpio.conf 75 | mv /etc/holoinstall/pre_install/mkinitcpio.conf /etc/mkinitcpio.conf 76 | rm /etc/mkinitcpio.d/* # This removes shitty unasked presets so that this thing can't overwrite it next time 77 | mkdir -p /etc/mkinitcpio.d 78 | 79 | # Remove this shit from post-build 80 | rm -rf /etc/holoinstall/pre_install 81 | rm /etc/pacman.conf 82 | mv /etc/pacold /etc/pacman.conf 83 | rm -rf /etc/xdg/powermanagementprofilesrc 84 | rm -rf /home/liveuser/Desktop/steamos-gamemode.desktop 85 | rm -rf /home/liveuser/Desktop/Return.desktop 86 | systemctl disable qemu-guest-agent 87 | -------------------------------------------------------------------------------- /airootfs/etc/holoinstall/pre_install/mkinitcpio.conf: -------------------------------------------------------------------------------- 1 | # vim:set ft=sh 2 | # MODULES 3 | # The following modules are loaded before any boot hooks are 4 | # run. Advanced users may wish to specify all system modules 5 | # in this array. For instance: 6 | # MODULES=(usbhid xhci_hcd) 7 | MODULES=(amdgpu i915) 8 | 9 | # BINARIES 10 | # This setting includes any additional binaries a given user may 11 | # wish into the CPIO image. This is run last, so it may be used to 12 | # override the actual binaries included by a given hook 13 | # BINARIES are dependency parsed, so you may safely ignore libraries 14 | BINARIES=() 15 | 16 | # FILES 17 | # This setting is similar to BINARIES above, however, files are added 18 | # as-is and are not parsed in any way. This is useful for config files. 19 | FILES=() 20 | 21 | # HOOKS 22 | # This is the most important setting in this file. The HOOKS control the 23 | # modules and scripts added to the image, and what happens at boot time. 24 | # Order is important, and it is recommended that you do not change the 25 | # order in which HOOKS are added. Run 'mkinitcpio -H ' for 26 | # help on a given hook. 27 | # 'base' is _required_ unless you know precisely what you are doing. 28 | # 'udev' is _required_ in order to automatically load modules 29 | # 'filesystems' is _required_ unless you specify your fs modules in MODULES 30 | # Examples: 31 | ## This setup specifies all modules in the MODULES setting above. 32 | ## No RAID, lvm2, or encrypted root is needed. 33 | # HOOKS=(base) 34 | # 35 | ## This setup will autodetect all modules for your system and should 36 | ## work as a sane default 37 | # HOOKS=(base udev autodetect modconf block filesystems fsck) 38 | # 39 | ## This setup will generate a 'full' image which supports most systems. 40 | ## No autodetection is done. 41 | # HOOKS=(base udev modconf block filesystems fsck) 42 | # 43 | ## This setup assembles a mdadm array with an encrypted root file system. 44 | ## Note: See 'mkinitcpio -H mdadm_udev' for more information on RAID devices. 45 | # HOOKS=(base udev modconf keyboard keymap consolefont block mdadm_udev encrypt filesystems fsck) 46 | # 47 | ## This setup loads an lvm2 volume group. 48 | # HOOKS=(base udev modconf block lvm2 filesystems fsck) 49 | # 50 | ## NOTE: If you have /usr on a separate partition, you MUST include the 51 | # usr and fsck hooks. 52 | HOOKS=(base udev autodetect modconf kms keyboard keymap consolefont block filesystems fsck plymouth) 53 | 54 | # COMPRESSION 55 | # Use this to compress the initramfs image. By default, zstd compression 56 | # is used. Use 'cat' to create an uncompressed image. 57 | #COMPRESSION="zstd" 58 | #COMPRESSION="gzip" 59 | #COMPRESSION="bzip2" 60 | #COMPRESSION="lzma" 61 | #COMPRESSION="xz" 62 | #COMPRESSION="lzop" 63 | #COMPRESSION="lz4" 64 | 65 | # COMPRESSION_OPTIONS 66 | # Additional options for the compressor 67 | #COMPRESSION_OPTIONS=() 68 | 69 | # MODULES_DECOMPRESS 70 | # Decompress kernel modules during initramfs creation. 71 | # Enable to speedup boot process, disable to save RAM 72 | # during early userspace. Switch (yes/no). 73 | #MODULES_DECOMPRESS="yes" 74 | -------------------------------------------------------------------------------- /airootfs/etc/holoinstall/steamos-gamemode.desktop: -------------------------------------------------------------------------------- 1 | [Desktop Entry] 2 | Comment[en_US]= 3 | Comment= 4 | Exec=steamos-session-select 5 | GenericName[en_US]= 6 | GenericName= 7 | Icon=steamdeck-gaming-return 8 | MimeType= 9 | Name[en_US]=Return to Gaming mode 10 | Name[zh_CN]=返回游戏模式 11 | Name=Return to Gaming mode 12 | Path=/usr/bin/ 13 | StartupNotify=true 14 | Terminal=false 15 | TerminalOptions= 16 | Type=Application 17 | X-DBUS-ServiceName= 18 | X-DBUS-StartupType= 19 | X-KDE-SubstituteUID=false 20 | X-KDE-Username= 21 | -------------------------------------------------------------------------------- /airootfs/etc/hostname: -------------------------------------------------------------------------------- 1 | holoiso 2 | -------------------------------------------------------------------------------- /airootfs/etc/locale.conf: -------------------------------------------------------------------------------- 1 | LANG=en_US.UTF-8 2 | -------------------------------------------------------------------------------- /airootfs/etc/localtime: -------------------------------------------------------------------------------- 1 | /usr/share/zoneinfo/UTC -------------------------------------------------------------------------------- /airootfs/etc/mkinitcpio.conf: -------------------------------------------------------------------------------- 1 | # vim:set ft=sh 2 | # MODULES 3 | # The following modules are loaded before any boot hooks are 4 | # run. Advanced users may wish to specify all system modules 5 | # in this array. For instance: 6 | # MODULES=(piix ide_disk reiserfs) 7 | MODULES=() 8 | 9 | # BINARIES 10 | # This setting includes any additional binaries a given user may 11 | # wish into the CPIO image. This is run last, so it may be used to 12 | # override the actual binaries included by a given hook 13 | # BINARIES are dependency parsed, so you may safely ignore libraries 14 | BINARIES=() 15 | 16 | # FILES 17 | # This setting is similar to BINARIES above, however, files are added 18 | # as-is and are not parsed in any way. This is useful for config files. 19 | FILES=() 20 | 21 | # HOOKS 22 | # This is the most important setting in this file. The HOOKS control the 23 | # modules and scripts added to the image, and what happens at boot time. 24 | # Order is important, and it is recommended that you do not change the 25 | # order in which HOOKS are added. Run 'mkinitcpio -H ' for 26 | # help on a given hook. 27 | # 'base' is _required_ unless you know precisely what you are doing. 28 | # 'udev' is _required_ in order to automatically load modules 29 | # 'filesystems' is _required_ unless you specify your fs modules in MODULES 30 | # Examples: 31 | ## This setup specifies all modules in the MODULES setting above. 32 | ## No raid, lvm2, or encrypted root is needed. 33 | # HOOKS=(base) 34 | # 35 | ## This setup will autodetect all modules for your system and should 36 | ## work as a sane default 37 | # HOOKS=(base udev autodetect block filesystems) 38 | # 39 | ## This setup will generate a 'full' image which supports most systems. 40 | ## No autodetection is done. 41 | # HOOKS=(base udev block filesystems) 42 | # 43 | ## This setup assembles a pata mdadm array with an encrypted root FS. 44 | ## Note: See 'mkinitcpio -H mdadm' for more information on raid devices. 45 | # HOOKS=(base udev block mdadm encrypt filesystems) 46 | # 47 | ## This setup loads an lvm2 volume group on a usb device. 48 | # HOOKS=(base udev block lvm2 filesystems) 49 | # 50 | ## NOTE: If you have /usr on a separate partition, you MUST include the 51 | # usr, fsck and shutdown hooks. 52 | HOOKS=(base udev modconf memdisk archiso archiso_loop_mnt archiso_pxe_common archiso_pxe_nbd archiso_pxe_http archiso_pxe_nfs archiso_kms block filesystems keyboard) 53 | 54 | # COMPRESSION 55 | # Use this to compress the initramfs image. By default, gzip compression 56 | # is used. Use 'cat' to create an uncompressed image. 57 | #COMPRESSION="gzip" 58 | #COMPRESSION="bzip2" 59 | #COMPRESSION="lzma" 60 | COMPRESSION="xz" 61 | #COMPRESSION="lzop" 62 | #COMPRESSION="lz4" 63 | #COMPRESSION="zstd" 64 | 65 | # COMPRESSION_OPTIONS 66 | # Additional options for the compressor 67 | #COMPRESSION_OPTIONS=() 68 | -------------------------------------------------------------------------------- /airootfs/etc/mkinitcpio.d/linux-neptune.preset: -------------------------------------------------------------------------------- 1 | # mkinitcpio preset file for the 'linux-neptune' package on archiso 2 | 3 | PRESETS=('archiso') 4 | 5 | ALL_kver='/boot/vmlinuz-linux-neptune' 6 | ALL_config='/etc/mkinitcpio.conf' 7 | 8 | archiso_image="/boot/initramfs-linux-neptune.img" 9 | -------------------------------------------------------------------------------- /airootfs/etc/modprobe.d/broadcom-wl.conf: -------------------------------------------------------------------------------- 1 | # The broadcom-wl package requires some modules to be disabled in order to use 2 | # wl. Since the ISO image needs to cover many hardware cases, this file 3 | # overrides the default blacklist in /usr/lib/modprobe.d/ 4 | # 5 | # If you need to use wl, you may need to delete this file, then `rmmod` any 6 | # already-loaded modules that are now blacklisted before proceeding to modprobe 7 | # wl itself. 8 | -------------------------------------------------------------------------------- /airootfs/etc/pacman.conf: -------------------------------------------------------------------------------- 1 | # 2 | # /etc/pacman.conf 3 | # 4 | # See the pacman.conf(5) manpage for option and repository directives 5 | 6 | # 7 | # GENERAL OPTIONS 8 | # 9 | [options] 10 | # The following paths are commented out with their default values listed. 11 | # If you wish to use different paths, uncomment and update the paths. 12 | #RootDir = / 13 | #DBPath = /var/lib/pacman/ 14 | #CacheDir = /var/cache/pacman/pkg/ 15 | #LogFile = /var/log/pacman.log 16 | #GPGDir = /etc/pacman.d/gnupg/ 17 | #HookDir = /etc/pacman.d/hooks/ 18 | HoldPkg = pacman glibc 19 | #XferCommand = /usr/bin/curl -L -C - -f -o %o %u 20 | #XferCommand = /usr/bin/wget --passive-ftp -c -O %o %u 21 | #CleanMethod = KeepInstalled 22 | Architecture = auto 23 | 24 | # Pacman won't upgrade packages listed in IgnorePkg and members of IgnoreGroup 25 | IgnorePkg = linux-firmware-neptune linux-firmware-neptune-rtw-debug 26 | #IgnoreGroup = 27 | 28 | #NoUpgrade = 29 | #NoExtract = 30 | 31 | # Misc options 32 | #UseSyslog 33 | #Color 34 | #TotalDownload 35 | # We cannot check disk space from within a chroot environment 36 | #CheckSpace 37 | #VerbosePkgLists 38 | ParallelDownloads = 5 39 | 40 | # By default, pacman accepts packages signed by keys that its local keyring 41 | # trusts (see pacman-key and its man page), as well as unsigned packages. 42 | SigLevel = Required DatabaseOptional 43 | LocalFileSigLevel = Optional 44 | #RemoteFileSigLevel = Required 45 | 46 | # NOTE: You must run `pacman-key --init` before first using pacman; the local 47 | # keyring can then be populated with the keys of all official Arch Linux 48 | # packagers with `pacman-key --populate archlinux`. 49 | 50 | # 51 | # REPOSITORIES 52 | # - can be defined here or included from another file 53 | # - pacman will search repositories in the order defined here 54 | # - local/custom mirrors can be added here or in separate files 55 | # - repositories listed first will take precedence when packages 56 | # have identical names, regardless of version number 57 | # - URLs will have $repo replaced by the name of the current repo 58 | # - URLs will have $arch replaced by the name of the architecture 59 | # 60 | # Repository entries are of the format: 61 | # [repo-name] 62 | # Server = ServerName 63 | # Include = IncludePath 64 | # 65 | # The header [repo-name] is crucial - it must be present and 66 | # uncommented to enable the repo. 67 | # 68 | 69 | # The testing repositories are disabled by default. To enable, uncomment the 70 | # repo name header and Include lines. You can add preferred servers immediately 71 | # after the header, and they will be used before the default mirrors. 72 | 73 | #[testing-main] 74 | #Include = /etc/pacman.d/mirrorlist 75 | 76 | [holoiso-next] 77 | Server = https://cd2.holoiso.ru.eu.org/pkg/$repo/os/$arch 78 | SigLevel = Never 79 | 80 | [holostaging] 81 | Server = https://cd2.holoiso.ru.eu.org/pkg/$repo/os/$arch 82 | SigLevel = Never 83 | 84 | [jupiter-main] 85 | Include = /etc/pacman.d/mirrorlist 86 | SigLevel = Never 87 | 88 | [holo-main] 89 | Include = /etc/pacman.d/mirrorlist 90 | SigLevel = Never 91 | 92 | [core-main] 93 | Include = /etc/pacman.d/mirrorlist 94 | SigLevel = Never 95 | 96 | [extra-main] 97 | Include = /etc/pacman.d/mirrorlist 98 | SigLevel = Never 99 | 100 | #[community-testing-main] 101 | #Include = /etc/pacman.d/mirrorlist 102 | 103 | [community-main] 104 | Include = /etc/pacman.d/mirrorlist 105 | SigLevel = Never 106 | 107 | [multilib-main] 108 | Include = /etc/pacman.d/mirrorlist 109 | SigLevel = Never 110 | 111 | # An example of a custom package repository. See the pacman manpage for 112 | # tips on creating your own repositories. 113 | #[custom] 114 | #SigLevel = Optional TrustAll 115 | #Server = file:///home/custompkgs 116 | -------------------------------------------------------------------------------- /airootfs/etc/pacman.d/holo_mirrorlist: -------------------------------------------------------------------------------- 1 | # HoloISO Mirrorlist 2 | # 1 - RU Server 3 | # 2 - CN/HK Server 4 | # 3 - IT/EU Server 5 | 6 | Server = http://dlcdn2.thevakhovske.pw/$repo/os/$arch 7 | Server = http://dl.thevakhovske.pw/$repo/os/$arch 8 | Server = http://holoiso.itsvixano.me/$repo/os/$arch -------------------------------------------------------------------------------- /airootfs/etc/pacman.d/hooks/40-locale-gen.hook: -------------------------------------------------------------------------------- 1 | # remove from airootfs! 2 | [Trigger] 3 | Operation = Install 4 | Type = Package 5 | Target = glibc 6 | 7 | [Action] 8 | Description = Uncommenting en_US.UTF-8 locale and running locale-gen... 9 | When = PostTransaction 10 | Depends = glibc 11 | Depends = sed 12 | Depends = sh 13 | Exec = /bin/sh -c "sed -i 's/#\(en_US\.UTF-8\)/\1/' /etc/locale.gen && locale-gen" 14 | -------------------------------------------------------------------------------- /airootfs/etc/pacman.d/hooks/50-fiveeighteen-depmod.hook: -------------------------------------------------------------------------------- 1 | # remove from airootfs! 2 | [Trigger] 3 | Operation = Install 4 | Operation = Upgrade 5 | Type = Package 6 | Target = usr/lib/modules/*/vmlinuz 7 | Target = usr/lib/initcpio/* 8 | 9 | [Action] 10 | Description = Rebuilding kernel modules... 11 | When = PostTransaction 12 | Exec = /usr/bin/sh -c 'depmod -a 5.18.1-arch1_testHoloISO_20220606.1500' 13 | NeedsTargets 14 | -------------------------------------------------------------------------------- /airootfs/etc/pacman.d/hooks/51-fiveeighteen-rebuild.hook: -------------------------------------------------------------------------------- 1 | # remove from airootfs! 2 | [Trigger] 3 | Operation = Install 4 | Operation = Upgrade 5 | Type = Package 6 | Target = usr/lib/modules/*/vmlinuz 7 | Target = usr/lib/initcpio/* 8 | 9 | [Action] 10 | Description = Rebuilding initial cpio.... 11 | When = PostTransaction 12 | Exec = /usr/bin/sh -c 'mkinitcpio -P' 13 | NeedsTargets -------------------------------------------------------------------------------- /airootfs/etc/pacman.d/hooks/zzzz99-remove-custom-hooks-from-airootfs.hook: -------------------------------------------------------------------------------- 1 | # remove from airootfs! 2 | # As a workaround for https://bugs.archlinux.org/task/49347 , remove pacman hooks specific to the ISO build process. 3 | # If not, they would be used when pacstrap is run in the live environment. 4 | 5 | [Trigger] 6 | Operation = Install 7 | Operation = Upgrade 8 | Operation = Remove 9 | Type = Package 10 | Target = * 11 | 12 | [Action] 13 | Description = Work around FS#49347 by removing custom pacman hooks that are only required during ISO build... 14 | When = PostTransaction 15 | Depends = sh 16 | Depends = coreutils 17 | Depends = grep 18 | Exec = /bin/sh -c "rm -- $(grep -Frl 'remove from airootfs' /etc/pacman.d/hooks/)" 19 | -------------------------------------------------------------------------------- /airootfs/etc/pacman.d/mirrorlist: -------------------------------------------------------------------------------- 1 | # Valve SteamOS 2 | Server = https://steamdeck-packages.steamos.cloud/archlinux-mirror/$repo/os/$arch -------------------------------------------------------------------------------- /airootfs/etc/polkit-1/rules.d/99_holoiso_installuser.rules: -------------------------------------------------------------------------------- 1 | /* Allow members of the wheel group to execute any actions 2 | * without password authentication, similar to "sudo NOPASSWD:" This is an awful workaround but needed for live experience user 3 | */ 4 | polkit.addRule(function(action, subject) { 5 | if (subject.isInGroup("wheel")) { 6 | return polkit.Result.YES; 7 | } 8 | }); -------------------------------------------------------------------------------- /airootfs/etc/sddm.conf.d/autologin.conf: -------------------------------------------------------------------------------- 1 | [General] 2 | DisplayServer=wayland 3 | 4 | [Autologin] 5 | User=liveuser 6 | Session=plasma.desktop 7 | Relogin=true 8 | 9 | [X11] 10 | # Janky workaround for wayland sessions not stopping in sddm, kills 11 | # all active sddm-helper sessions on teardown 12 | DisplayStopCommand=/usr/bin/gamescope-wayland-teardown-workaround -------------------------------------------------------------------------------- /airootfs/etc/skel/.bashrc: -------------------------------------------------------------------------------- 1 | # SPDX-License-Identifier: MIT 2 | # 3 | # Copyright © 2020-2021 Collabora Ltd. 4 | # Copyright © 2020-2021 Valve Corporation. 5 | # 6 | # This file is part of steamos-image-recipes. 7 | # 8 | # steamos-image-recipes is free software; you can redistribute it and/or modify 9 | # it under the terms of the GNU Lesser General Public License as published 10 | # by the Free Software Foundation; either version 2.1 of the License, or 11 | # (at your option) any later version. 12 | 13 | # 14 | # ~/.bashrc 15 | # 16 | 17 | # If not running interactively, don't do anything 18 | [[ $- != *i* ]] && return 19 | 20 | alias ls='ls --color=auto' 21 | if command -v grep >/dev/null 22 | then 23 | alias grep='grep --color=auto' 24 | fi 25 | PS1='(\u@\h \W)\$ ' 26 | 27 | # Hack for the Qemu serial 28 | if [[ $(tty) == /dev/ttyS0 ]] 29 | then 30 | TERM=linux 31 | eval "$(resize)" 32 | fi 33 | 34 | ischroot() { 35 | local proc_root 36 | local root 37 | 38 | if ! proc_root="$(stat --printf "%d %i" /proc/1/root/ 2>/dev/null)" || 39 | ! root="$(stat --printf "%d %i" / 2>/dev/null)" 40 | then 41 | return 1 42 | fi 43 | 44 | test "$proc_root" != "$root" 45 | } 46 | 47 | isremovable() { 48 | local devname 49 | local devpath 50 | local name 51 | 52 | if ! devname="$(realpath "$1")" 53 | then 54 | return 1 55 | fi 56 | 57 | if ! devpath="$(realpath "/sys/class/block/${devname##*/}")" 58 | then 59 | return 1 60 | fi 61 | 62 | if ! test -e "$devpath/removable" 63 | then 64 | devpath="${devpath%/*}" 65 | fi 66 | 67 | if ! test -e "$devpath/removable" 68 | then 69 | return 1 70 | fi 71 | 72 | if grep -q 0 "$devpath/removable" 73 | then 74 | return 1 75 | fi 76 | 77 | mapfile -t name < <(cat "$devpath/device/vendor" "$devpath/device/model" 2>/dev/null) 78 | name=("${name[@]// /}") 79 | name=("${name[@]%% }") 80 | name=("${name[@]## }") 81 | echo "${name[@]}" 82 | } 83 | 84 | __steamos_ps1() { 85 | local read_only 86 | local partset 87 | local root 88 | local name 89 | local args 90 | local arg 91 | 92 | PS1="$1" 93 | 94 | # Check if user is root 95 | if [[ "$EUID" -ne 0 ]] 96 | then 97 | return 98 | fi 99 | 100 | # Set partition set to prompt 101 | read root partlabel < <(findmnt --noheading --output SOURCE,PARTLABEL /) 102 | if [[ "$root" ]] 103 | then 104 | # Set removable media name to prompt 105 | if name=$(isremovable "$root") 106 | then 107 | PS1="(\[\033[36;1m\]$name\[\033[0m\])$PS1" 108 | fi 109 | 110 | # Extract the color from the file os-release 111 | eval "$(. /etc/os-release; echo local ANSI_COLOR=\"$ANSI_COLOR\")" 112 | partset="${partlabel#rootfs-}" 113 | if steamos-readonly status | grep -q "enabled" 114 | then 115 | read_only=1 116 | fi 117 | if [[ "$partset" ]] && [[ ! "$read_only" ]] 118 | then 119 | partset+="+" 120 | fi 121 | if [[ "$partset" ]] 122 | then 123 | PS1="(\[\033[${ANSI_COLOR}m\]$partset\[\033[0m\])$PS1" 124 | fi 125 | fi 126 | } 127 | 128 | __steamos_prompt_command() { 129 | # Preserve return code 130 | local rc="$?" 131 | local ps1="$1" 132 | local partset 133 | 134 | # Set chroot to prompt 135 | if ischroot 136 | then 137 | partset="$(findmnt -no partlabel /)" 138 | partset="${partset#rootfs-}" 139 | ps1="(\[\033[33;1m\]chroot[$partset]\[\033[0m\])$ps1" 140 | fi 141 | 142 | # Set return code to prompt 143 | if [[ "$rc" -ne 0 ]] 144 | then 145 | ps1="(\[\033[31;1m\]$rc\[\033[0m\])$ps1" 146 | fi 147 | 148 | # Set PS1 149 | PS1="$ps1" 150 | 151 | return "$rc" 152 | } 153 | 154 | __steamos_ps1 '(\[\033[1;32m\]\u@\h\[\033[1;34m\] \W\[\033[0m\])\$ ' 155 | PROMPT_COMMAND="__steamos_prompt_command '$PS1'${PROMPT_COMMAND:+; $PROMPT_COMMAND; }" 156 | -------------------------------------------------------------------------------- /airootfs/etc/skel/Desktop/chroot.desktop: -------------------------------------------------------------------------------- 1 | [Desktop Entry] 2 | Comment[en_US]= 3 | Comment= 4 | Exec=sudo /etc/holoinstall/post_install/chroot_holoiso.sh 5 | GenericName[en_US]= 6 | GenericName= 7 | Icon=run-install 8 | MimeType= 9 | Name[en_US]=Chroot to valid HoloISO Installation 10 | Name=Opens terminal window with mounted HoloISO partitions 11 | Path= 12 | StartupNotify=true 13 | Terminal=true 14 | TerminalOptions= 15 | Type=Application 16 | X-DBUS-ServiceName= 17 | X-DBUS-StartupType= 18 | X-KDE-SubstituteUID=false 19 | X-KDE-Username= -------------------------------------------------------------------------------- /airootfs/etc/skel/Desktop/ime-kb.desktop: -------------------------------------------------------------------------------- 1 | [Desktop Entry] 2 | Comment[en_US]= 3 | Comment= 4 | Exec=onboard 5 | GenericName[en_US]= 6 | GenericName= 7 | Icon=input-keyboard-symbolic 8 | MimeType= 9 | Name[en_US]=Show on-screen keyboard 10 | Name[zh_CN]=打开屏幕键盘 11 | Name=Show on-screen keyboard 12 | Path= 13 | StartupNotify=true 14 | Terminal=false 15 | TerminalOptions= 16 | Type=Application 17 | X-DBUS-ServiceName= 18 | X-DBUS-StartupType= 19 | X-KDE-SubstituteUID=false 20 | X-KDE-Username= 21 | -------------------------------------------------------------------------------- /airootfs/etc/skel/Desktop/install.desktop: -------------------------------------------------------------------------------- 1 | [Desktop Entry] 2 | Comment[en_US]= 3 | Comment= 4 | Exec=sudo /etc/holoinstall/post_install/install_holoiso.sh 5 | GenericName[en_US]= 6 | GenericName= 7 | Icon=run-install 8 | MimeType= 9 | Name[en_US]=Install SteamOS on this machine 10 | Name=Installs HoloISO on this device 11 | Path= 12 | StartupNotify=true 13 | Terminal=true 14 | TerminalOptions= 15 | Type=Application 16 | X-DBUS-ServiceName= 17 | X-DBUS-StartupType= 18 | X-KDE-SubstituteUID=false 19 | X-KDE-Username= -------------------------------------------------------------------------------- /airootfs/etc/ssh/sshd_config: -------------------------------------------------------------------------------- 1 | # $OpenBSD: sshd_config,v 1.103 2018/04/09 20:41:22 tj Exp $ 2 | 3 | # This is the sshd server system-wide configuration file. See 4 | # sshd_config(5) for more information. 5 | 6 | # This sshd was compiled with PATH=/usr/local/sbin:/usr/local/bin:/usr/bin 7 | 8 | # The strategy used for options in the default sshd_config shipped with 9 | # OpenSSH is to specify options with their default value where 10 | # possible, but leave them commented. Uncommented options override the 11 | # default value. 12 | 13 | #Port 22 14 | #AddressFamily any 15 | #ListenAddress 0.0.0.0 16 | #ListenAddress :: 17 | 18 | #HostKey /etc/ssh/ssh_host_rsa_key 19 | #HostKey /etc/ssh/ssh_host_ecdsa_key 20 | #HostKey /etc/ssh/ssh_host_ed25519_key 21 | 22 | # Ciphers and keying 23 | #RekeyLimit default none 24 | 25 | # Logging 26 | #SyslogFacility AUTH 27 | #LogLevel INFO 28 | 29 | # Authentication: 30 | 31 | #LoginGraceTime 2m 32 | PermitRootLogin yes 33 | #StrictModes yes 34 | #MaxAuthTries 6 35 | #MaxSessions 10 36 | 37 | #PubkeyAuthentication yes 38 | 39 | # The default is to check both .ssh/authorized_keys and .ssh/authorized_keys2 40 | # but this is overridden so installations will only check .ssh/authorized_keys 41 | AuthorizedKeysFile .ssh/authorized_keys 42 | 43 | #AuthorizedPrincipalsFile none 44 | 45 | #AuthorizedKeysCommand none 46 | #AuthorizedKeysCommandUser nobody 47 | 48 | # For this to work you will also need host keys in /etc/ssh/ssh_known_hosts 49 | #HostbasedAuthentication no 50 | # Change to yes if you don't trust ~/.ssh/known_hosts for 51 | # HostbasedAuthentication 52 | #IgnoreUserKnownHosts no 53 | # Don't read the user's ~/.rhosts and ~/.shosts files 54 | #IgnoreRhosts yes 55 | 56 | # To disable tunneled clear text passwords, change to no here! 57 | #PasswordAuthentication yes 58 | #PermitEmptyPasswords no 59 | 60 | # Change to no to disable s/key passwords 61 | ChallengeResponseAuthentication no 62 | 63 | # Kerberos options 64 | #KerberosAuthentication no 65 | #KerberosOrLocalPasswd yes 66 | #KerberosTicketCleanup yes 67 | #KerberosGetAFSToken no 68 | 69 | # GSSAPI options 70 | #GSSAPIAuthentication no 71 | #GSSAPICleanupCredentials yes 72 | 73 | # Set this to 'yes' to enable PAM authentication, account processing, 74 | # and session processing. If this is enabled, PAM authentication will 75 | # be allowed through the ChallengeResponseAuthentication and 76 | # PasswordAuthentication. Depending on your PAM configuration, 77 | # PAM authentication via ChallengeResponseAuthentication may bypass 78 | # the setting of "PermitRootLogin without-password". 79 | # If you just want the PAM account and session checks to run without 80 | # PAM authentication, then enable this but set PasswordAuthentication 81 | # and ChallengeResponseAuthentication to 'no'. 82 | UsePAM yes 83 | 84 | #AllowAgentForwarding yes 85 | #AllowTcpForwarding yes 86 | #GatewayPorts no 87 | #X11Forwarding no 88 | #X11DisplayOffset 10 89 | #X11UseLocalhost yes 90 | #PermitTTY yes 91 | PrintMotd no # pam does that 92 | #PrintLastLog yes 93 | #TCPKeepAlive yes 94 | #PermitUserEnvironment no 95 | #Compression delayed 96 | #ClientAliveInterval 0 97 | #ClientAliveCountMax 3 98 | #UseDNS no 99 | #PidFile /run/sshd.pid 100 | #MaxStartups 10:30:100 101 | #PermitTunnel no 102 | #ChrootDirectory none 103 | #VersionAddendum none 104 | 105 | # no default banner path 106 | #Banner none 107 | 108 | # override default of no subsystems 109 | Subsystem sftp /usr/lib/ssh/sftp-server 110 | 111 | # Example of overriding settings on a per-user basis 112 | #Match User anoncvs 113 | # X11Forwarding no 114 | # AllowTcpForwarding no 115 | # PermitTTY no 116 | # ForceCommand cvs server 117 | -------------------------------------------------------------------------------- /airootfs/etc/sudoers.d/g_wheel: -------------------------------------------------------------------------------- 1 | %wheel ALL=(ALL) NOPASSWD: ALL 2 | -------------------------------------------------------------------------------- /airootfs/etc/systemd/network/20-ethernet.network: -------------------------------------------------------------------------------- 1 | # 2 | # SPDX-License-Identifier: GPL-3.0-or-later 3 | 4 | [Match] 5 | Type=ether 6 | 7 | [Network] 8 | DHCP=yes 9 | IPv6PrivacyExtensions=yes 10 | 11 | [DHCPv4] 12 | RouteMetric=512 13 | 14 | [DHCPv6] 15 | RouteMetric=512 16 | -------------------------------------------------------------------------------- /airootfs/etc/systemd/network/20-wlan.network: -------------------------------------------------------------------------------- 1 | # 2 | # SPDX-License-Identifier: GPL-3.0-or-later 3 | 4 | [Match] 5 | Type=wlan 6 | 7 | [Network] 8 | DHCP=yes 9 | IPv6PrivacyExtensions=yes 10 | 11 | [DHCPv4] 12 | RouteMetric=1024 13 | 14 | [DHCPv6] 15 | RouteMetric=1024 16 | -------------------------------------------------------------------------------- /airootfs/etc/systemd/network/20-wwan.network: -------------------------------------------------------------------------------- 1 | # 2 | # SPDX-License-Identifier: GPL-3.0-or-later 3 | 4 | [Match] 5 | Type=wwan 6 | 7 | [Network] 8 | DHCP=yes 9 | IPv6PrivacyExtensions=yes 10 | 11 | [DHCPv4] 12 | RouteMetric=2048 13 | 14 | [DHCPv6] 15 | RouteMetric=2048 16 | -------------------------------------------------------------------------------- /airootfs/etc/systemd/system/amd-perf-fix.service: -------------------------------------------------------------------------------- 1 | [Unit] 2 | Description=Set proper AMD GPU power profile 3 | 4 | [Service] 5 | ExecStart=/usr/bin/amd-perf-fix 6 | 7 | [Install] 8 | WantedBy=multi-user.target 9 | -------------------------------------------------------------------------------- /airootfs/etc/systemd/system/cloud-init.target.wants/cloud-config.service: -------------------------------------------------------------------------------- 1 | /usr/lib/systemd/system/cloud-config.service -------------------------------------------------------------------------------- /airootfs/etc/systemd/system/cloud-init.target.wants/cloud-final.service: -------------------------------------------------------------------------------- 1 | /usr/lib/systemd/system/cloud-final.service -------------------------------------------------------------------------------- /airootfs/etc/systemd/system/cloud-init.target.wants/cloud-init-local.service: -------------------------------------------------------------------------------- 1 | /usr/lib/systemd/system/cloud-init-local.service -------------------------------------------------------------------------------- /airootfs/etc/systemd/system/cloud-init.target.wants/cloud-init.service: -------------------------------------------------------------------------------- 1 | /usr/lib/systemd/system/cloud-init.service -------------------------------------------------------------------------------- /airootfs/etc/systemd/system/dbus-org.freedesktop.ModemManager1.service: -------------------------------------------------------------------------------- 1 | /usr/lib/systemd/system/ModemManager.service -------------------------------------------------------------------------------- /airootfs/etc/systemd/system/dbus-org.freedesktop.network1.service: -------------------------------------------------------------------------------- 1 | /usr/lib/systemd/system/systemd-networkd.service -------------------------------------------------------------------------------- /airootfs/etc/systemd/system/dbus-org.freedesktop.nm-dispatcher.service: -------------------------------------------------------------------------------- 1 | /usr/lib/systemd/system/NetworkManager-dispatcher.service -------------------------------------------------------------------------------- /airootfs/etc/systemd/system/dbus-org.freedesktop.resolve1.service: -------------------------------------------------------------------------------- 1 | /usr/lib/systemd/system/systemd-resolved.service -------------------------------------------------------------------------------- /airootfs/etc/systemd/system/default.target: -------------------------------------------------------------------------------- 1 | /usr/lib/systemd/system/graphical.target -------------------------------------------------------------------------------- /airootfs/etc/systemd/system/etc-pacman.d-gnupg.mount: -------------------------------------------------------------------------------- 1 | # 2 | # SPDX-License-Identifier: GPL-3.0-or-later 3 | 4 | [Unit] 5 | Description=Temporary /etc/pacman.d/gnupg directory 6 | 7 | [Mount] 8 | What=tmpfs 9 | Where=/etc/pacman.d/gnupg 10 | Type=tmpfs 11 | Options=mode=0755 12 | -------------------------------------------------------------------------------- /airootfs/etc/systemd/system/multi-user.target.wants/ModemManager.service: -------------------------------------------------------------------------------- 1 | /usr/lib/systemd/system/ModemManager.service -------------------------------------------------------------------------------- /airootfs/etc/systemd/system/multi-user.target.wants/NetworkManager.service: -------------------------------------------------------------------------------- 1 | /usr/lib/systemd/system/NetworkManager.service -------------------------------------------------------------------------------- /airootfs/etc/systemd/system/multi-user.target.wants/choose-mirror.service: -------------------------------------------------------------------------------- 1 | ../choose-mirror.service -------------------------------------------------------------------------------- /airootfs/etc/systemd/system/multi-user.target.wants/iwd.service: -------------------------------------------------------------------------------- 1 | /usr/lib/systemd/system/iwd.service -------------------------------------------------------------------------------- /airootfs/etc/systemd/system/multi-user.target.wants/reflector.service: -------------------------------------------------------------------------------- 1 | /usr/lib/systemd/system/reflector.service -------------------------------------------------------------------------------- /airootfs/etc/systemd/system/multi-user.target.wants/sshd.service: -------------------------------------------------------------------------------- 1 | /usr/lib/systemd/system/sshd.service -------------------------------------------------------------------------------- /airootfs/etc/systemd/system/multi-user.target.wants/systemd-networkd.service: -------------------------------------------------------------------------------- 1 | /usr/lib/systemd/system/systemd-networkd.service -------------------------------------------------------------------------------- /airootfs/etc/systemd/system/multi-user.target.wants/systemd-resolved.service: -------------------------------------------------------------------------------- 1 | /usr/lib/systemd/system/systemd-resolved.service -------------------------------------------------------------------------------- /airootfs/etc/systemd/system/network-online.target.wants/NetworkManager-wait-online.service: -------------------------------------------------------------------------------- 1 | /usr/lib/systemd/system/NetworkManager-wait-online.service -------------------------------------------------------------------------------- /airootfs/etc/systemd/system/network-online.target.wants/systemd-networkd-wait-online.service: -------------------------------------------------------------------------------- 1 | /usr/lib/systemd/system/systemd-networkd-wait-online.service -------------------------------------------------------------------------------- /airootfs/etc/systemd/system/sockets.target.wants/systemd-networkd.socket: -------------------------------------------------------------------------------- 1 | /usr/lib/systemd/system/systemd-networkd.socket -------------------------------------------------------------------------------- /airootfs/etc/systemd/system/system: -------------------------------------------------------------------------------- 1 | /usr/lib/systemd/system/ -------------------------------------------------------------------------------- /bootstrap_packages.x86_64: -------------------------------------------------------------------------------- 1 | arch-install-scripts 2 | base 3 | -------------------------------------------------------------------------------- /efiboot/loader/loader.conf: -------------------------------------------------------------------------------- 1 | timeout 15 -------------------------------------------------------------------------------- /gen_entries.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | PROFILEDIR=$1 3 | count=1 4 | for kernel in $(cat ${PROFILEDIR}/kernel_list.bootstrap) 5 | do 6 | kernel=$(echo $kernel | sed 's/.*linux/linux/g' | sed 's/.*headers//g') 7 | if [ -z "$kernel" ]; then 8 | continue 9 | fi 10 | if [[ "$kernel" != "linux-neptune" ]]; then 11 | echo -e "title HoloISO installer (${kernel}, NVIDIA/Zen 3+/RZ608 or Unverified devices, Copy to RAM)\nlinux /%INSTALL_DIR%/boot/x86_64/vmlinuz-${kernel}\ninitrd /%INSTALL_DIR%/boot/intel-ucode.img\ninitrd /%INSTALL_DIR%/boot/amd-ucode.img\ninitrd /%INSTALL_DIR%/boot/x86_64/initramfs-${kernel}.img\noptions splash plymouth.nolog archisobasedir=%INSTALL_DIR% archisolabel=%ARCHISO_LABEL% cow_spacesize=10G copytoram" > ${PROFILEDIR}/efiboot/loader/entries/$count-$kernel-copytoram.conf 12 | count=$((count+1)) 13 | echo -e "title HoloISO installer (${kernel}, NVIDIA/Zen 3+/RZ608 or Unverified devices)\nlinux /%INSTALL_DIR%/boot/x86_64/vmlinuz-${kernel}\ninitrd /%INSTALL_DIR%/boot/intel-ucode.img\ninitrd /%INSTALL_DIR%/boot/amd-ucode.img\ninitrd /%INSTALL_DIR%/boot/x86_64/initramfs-${kernel}.img\noptions splash plymouth.nolog archisobasedir=%INSTALL_DIR% archisolabel=%ARCHISO_LABEL%" > ${PROFILEDIR}/efiboot/loader/entries/$count-$kernel.conf 14 | count=$((count+1)) 15 | else 16 | echo -e "title HoloISO installer (${kernel}, Deck kernel, Copy to RAM)\nlinux /%INSTALL_DIR%/boot/x86_64/vmlinuz-${kernel}\ninitrd /%INSTALL_DIR%/boot/intel-ucode.img\ninitrd /%INSTALL_DIR%/boot/amd-ucode.img\ninitrd /%INSTALL_DIR%/boot/x86_64/initramfs-${kernel}.img\noptions splash plymouth.nolog archisobasedir=%INSTALL_DIR% archisolabel=%ARCHISO_LABEL% cow_spacesize=10G copytoram" > ${PROFILEDIR}/efiboot/loader/entries/$count-$kernel-copytoram.conf 17 | count=$((count+1)) 18 | echo -e "title HoloISO installer (${kernel}, Deck kernel)\nlinux /%INSTALL_DIR%/boot/x86_64/vmlinuz-${kernel}\ninitrd /%INSTALL_DIR%/boot/intel-ucode.img\ninitrd /%INSTALL_DIR%/boot/amd-ucode.img\ninitrd /%INSTALL_DIR%/boot/x86_64/initramfs-${kernel}.img\noptions splash plymouth.nolog archisobasedir=%INSTALL_DIR% archisolabel=%ARCHISO_LABEL%" > ${PROFILEDIR}/efiboot/loader/entries/$count-$kernel.conf 19 | count=$((count+1)) 20 | fi 21 | done -------------------------------------------------------------------------------- /kernel_list.bootstrap: -------------------------------------------------------------------------------- 1 | linux-zen linux-zen-headers -------------------------------------------------------------------------------- /packages.x86_64: -------------------------------------------------------------------------------- 1 | alsa-utils 2 | amd-ucode 3 | arch-install-scripts 4 | b43-fwcutter 5 | base 6 | bind-tools 7 | brltty 8 | broadcom-wl 9 | btrfs-progs 10 | clonezilla 11 | cloud-init 12 | crda 13 | cryptsetup 14 | darkhttpd 15 | ddrescue 16 | dhclient 17 | dhcpcd 18 | diffutils 19 | dmraid 20 | dnsmasq 21 | dosfstools 22 | e2fsprogs 23 | edk2-shell 24 | efibootmgr 25 | espeakup 26 | ethtool 27 | exfatprogs 28 | f2fs-tools 29 | fatresize 30 | fsarchiver 31 | gnu-netcat 32 | gpart 33 | gpm 34 | gptfdisk 35 | grml-zsh-config 36 | grub 37 | hdparm 38 | intel-ucode 39 | irssi 40 | iw 41 | jfsutils 42 | kitty-terminfo 43 | less 44 | lftp 45 | libfido2 46 | libusb-compat 47 | linux-atm 48 | core-main/linux-firmware 49 | core-main/linux-firmware-marvell 50 | core-main/linux-firmware-whence 51 | livecd-sounds 52 | lsscsi 53 | lvm2 54 | lynx 55 | man-db 56 | man-pages 57 | mc 58 | mdadm 59 | memtest86+ 60 | mkinitcpio 61 | mkinitcpio-archiso 62 | mkinitcpio-nfs-utils 63 | modemmanager 64 | mtools 65 | nano 66 | nbd 67 | ndisc6 68 | nfs-utils 69 | nilfs-utils 70 | nmap 71 | ntfs-3g 72 | nvme-cli 73 | openconnect 74 | openssh 75 | openvpn 76 | partclone 77 | parted 78 | partimage 79 | pcsclite 80 | ppp 81 | pptpclient 82 | pv 83 | qemu-guest-agent 84 | refind 85 | reiserfsprogs 86 | rp-pppoe 87 | rsync 88 | rxvt-unicode-terminfo 89 | screen 90 | sdparm 91 | sg3_utils 92 | smartmontools 93 | sof-firmware 94 | squashfs-tools 95 | sudo 96 | syslinux 97 | systemd-resolvconf 98 | tcpdump 99 | terminus-font 100 | testdisk 101 | tmux 102 | tpm2-tss 103 | udftools 104 | usb_modeswitch 105 | usbmuxd 106 | usbutils 107 | vim 108 | virtualbox-guest-utils-nox 109 | vpnc 110 | wget 111 | wireless-regdb 112 | wireless_tools 113 | wpa_supplicant 114 | wvdial 115 | xfsprogs 116 | xl2tpd 117 | zsh 118 | 119 | # GUI 120 | holo-keyring 121 | plasma 122 | plasma-nm 123 | plasma-meta 124 | xorg-server 125 | vim 126 | xdg-user-dirs 127 | bash-completion 128 | networkmanager 129 | network-manager-applet 130 | mousepad 131 | gvfs 132 | neofetch 133 | xfce4-pulseaudio-plugin 134 | pulseaudio-alsa 135 | noto-fonts 136 | onboard 137 | zenity 138 | dialog 139 | dolphin 140 | spectacle 141 | konsole 142 | # rz608-fix-git - Unrequired since we use LNX6+ for machines that include it 143 | 144 | # Another HoloISO addons -- BETA 145 | btop 146 | dos2unix 147 | gptfdisk 148 | iotop 149 | lib32-mesa-vdpau 150 | libva-mesa-driver 151 | mesa-vdpau 152 | okular 153 | opencl-mesa 154 | p7zip 155 | paru 156 | powertop 157 | steam_notif_daemon 158 | tk 159 | unrar 160 | xorg-xhost 161 | zip -------------------------------------------------------------------------------- /pacman.conf: -------------------------------------------------------------------------------- 1 | # 2 | # /etc/pacman.conf 3 | # 4 | # See the pacman.conf(5) manpage for option and repository directives 5 | 6 | # 7 | # GENERAL OPTIONS 8 | # 9 | [options] 10 | # The following paths are commented out with their default values listed. 11 | # If you wish to use different paths, uncomment and update the paths. 12 | #RootDir = / 13 | #DBPath = /var/lib/pacman/ 14 | #CacheDir = /var/cache/pacman/pkg/ 15 | #LogFile = /var/log/pacman.log 16 | #GPGDir = /etc/pacman.d/gnupg/ 17 | #HookDir = /etc/pacman.d/hooks/ 18 | HoldPkg = pacman glibc 19 | #XferCommand = /usr/bin/curl -L -C - -f -o %o %u 20 | #XferCommand = /usr/bin/wget --passive-ftp -c -O %o %u 21 | #CleanMethod = KeepInstalled 22 | Architecture = auto 23 | 24 | # Pacman won't upgrade packages listed in IgnorePkg and members of IgnoreGroup 25 | #IgnorePkg = 26 | #IgnoreGroup = 27 | 28 | #NoUpgrade = 29 | #NoExtract = 30 | 31 | # Misc options 32 | #UseSyslog 33 | #Color 34 | #TotalDownload 35 | # We cannot check disk space from within a chroot environment 36 | CheckSpace 37 | #VerbosePkgLists 38 | ParallelDownloads = 5 39 | 40 | # By default, pacman accepts packages signed by keys that its local keyring 41 | # trusts (see pacman-key and its man page), as well as unsigned packages. 42 | SigLevel = Required DatabaseOptional 43 | LocalFileSigLevel = Optional 44 | #RemoteFileSigLevel = Required 45 | 46 | # NOTE: You must run `pacman-key --init` before first using pacman; the local 47 | # keyring can then be populated with the keys of all official Arch Linux 48 | # packagers with `pacman-key --populate archlinux`. 49 | 50 | # 51 | # REPOSITORIES 52 | # - can be defined here or included from another file 53 | # - pacman will search repositories in the order defined here 54 | # - local/custom mirrors can be added here or in separate files 55 | # - repositories listed first will take precedence when packages 56 | # have identical names, regardless of version number 57 | # - URLs will have $repo replaced by the name of the current repo 58 | # - URLs will have $arch replaced by the name of the architecture 59 | # 60 | # Repository entries are of the format: 61 | # [repo-name] 62 | # Server = ServerName 63 | # Include = IncludePath 64 | # 65 | # The header [repo-name] is crucial - it must be present and 66 | # uncommented to enable the repo. 67 | # 68 | 69 | # The testing repositories are disabled by default. To enable, uncomment the 70 | # repo name header and Include lines. You can add preferred servers immediately 71 | # after the header, and they will be used before the default mirrors. 72 | 73 | #[testing] 74 | #Include = /etc/pacman.d/mirrorlist 75 | 76 | [holoiso-next] 77 | Server = https://cd2.holoiso.ru.eu.org/pkg/$repo/os/$arch 78 | SigLevel = Never 79 | 80 | [holostaging] 81 | Server = https://cd2.holoiso.ru.eu.org/pkg/$repo/os/$arch 82 | SigLevel = Never 83 | 84 | [jupiter-main] 85 | Server = https://steamdeck-packages.steamos.cloud/archlinux-mirror/$repo/os/$arch 86 | SigLevel = Never 87 | 88 | [holo-main] 89 | Server = https://steamdeck-packages.steamos.cloud/archlinux-mirror/$repo/os/$arch 90 | SigLevel = Never 91 | 92 | [core-main] 93 | Server = https://steamdeck-packages.steamos.cloud/archlinux-mirror/$repo/os/$arch 94 | SigLevel = Never 95 | 96 | [extra-main] 97 | Server = https://steamdeck-packages.steamos.cloud/archlinux-mirror/$repo/os/$arch 98 | SigLevel = Never 99 | 100 | #[community-testing] 101 | #Include = /etc/pacman.d/mirrorlist 102 | 103 | [community-main] 104 | Server = https://steamdeck-packages.steamos.cloud/archlinux-mirror/$repo/os/$arch 105 | SigLevel = Never 106 | 107 | [multilib-main] 108 | Server = https://steamdeck-packages.steamos.cloud/archlinux-mirror/$repo/os/$arch 109 | SigLevel = Never 110 | 111 | # An example of a custom package repository. See the pacman manpage for 112 | # tips on creating your own repositories. 113 | #[custom] 114 | #SigLevel = Optional TrustAll 115 | #Server = file:///home/custompkgs 116 | -------------------------------------------------------------------------------- /profiledef.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | # shellcheck disable=SC2034 3 | 4 | iso_name="$(cat /tmp/isobuildname)" 5 | iso_label="HOLO_$(date +%Y%m)" 6 | iso_publisher="theVakhovske " 7 | iso_application="HoloISO" 8 | iso_version="1" 9 | install_dir="arch" 10 | buildmodes=('iso') 11 | bootmodes=('uefi-x64.systemd-boot.esp' 'uefi-x64.systemd-boot.eltorito') 12 | arch="x86_64" 13 | pacman_conf="pacman.conf" 14 | airootfs_image_type="squashfs" 15 | airootfs_image_tool_options=('-comp' 'xz' '-Xbcj' 'x86' '-b' '1M' '-Xdict-size' '1M') 16 | file_permissions=( 17 | ["/etc/skel/Desktop/ime-kb.desktop"]="0:0:755" 18 | ["/etc/skel/Desktop/chroot.desktop"]="0:0:755" 19 | ["/etc/skel/Desktop/install.desktop"]="0:0:755" 20 | ) 21 | --------------------------------------------------------------------------------