aboutsummaryrefslogtreecommitdiff
path: root/.config/kbuild/vf2/install.sh
diff options
context:
space:
mode:
authorMiquel Sabaté Solà <mssola@mssola.com>2025-10-24 11:59:28 +0200
committerMiquel Sabaté Solà <mssola@mssola.com>2025-10-24 11:59:28 +0200
commit7e52878f0aaad5256a01581f11338c47d69d5fbb (patch)
tree22a2a56cf93260b9370438a548c2e772c83ad238 /.config/kbuild/vf2/install.sh
parentcd2a1bb748ad0f8ba255f136e81afb6676ffad4c (diff)
downloaddotfiles-7e52878f0aaad5256a01581f11338c47d69d5fbb.tar.gz
dotfiles-7e52878f0aaad5256a01581f11338c47d69d5fbb.zip
kbuild: move profiles into .config/kbuild
Instead of inlining shell scripts inside of the `kbuild` one, move them into subdirectories inside of the new $HOME/.config/kbuild directory. Each subdirectory will match a profile (i.e. no more hacky hardcoded values on `kbuild`), and it will contain the relevant install.sh/uninstall.sh files which matter for that profile. This also allows us more flexibility when it comes to GRUB configuration (e.g. picking the right UUID value without having to re-invent the wheel via esoteric new parameters). Signed-off-by: Miquel Sabaté Solà <mssola@mssola.com>
Diffstat (limited to '.config/kbuild/vf2/install.sh')
-rw-r--r--.config/kbuild/vf2/install.sh78
1 files changed, 78 insertions, 0 deletions
diff --git a/.config/kbuild/vf2/install.sh b/.config/kbuild/vf2/install.sh
new file mode 100644
index 0000000..355e5dd
--- /dev/null
+++ b/.config/kbuild/vf2/install.sh
@@ -0,0 +1,78 @@
+#!/usr/bin/env bash
+# Copyright (C) 2025-Ω Miquel Sabaté Solà <mikisabate@gmail.com>
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+set -ex
+
+##
+# Ensure you are root and dependencies are met.
+
+if [ "$EUID" -ne 0 ];then
+ echo "kbuild (error): run this as root."
+ exit 1
+fi
+
+if [ ! -f /usr/bin/dracut ]; then
+ echo "kbuild (error): you need either 'dracut'."
+ exit 1
+fi
+
+##
+# Copy files into filesystem and generate initramfs.
+
+# Regular installs.
+cp -rv usr /
+cp -rv boot /
+
+# Some environments like 'update-initramfs' on Ubuntu expect files to be placed
+# under a special directory in /usr/lib/firmware. Pull this trick now.
+mkdir -p /usr/lib/firmware/$name/device-tree/
+cp -rv boot/dtbs/$name/* /usr/lib/firmware/$name/device-tree/
+
+# And run dracut/update-initramfs.
+dracut --kver=$name -f
+
+##
+# Provide hints on how to configure the bootloader.
+
+if [ -z "$EDITOR" ]; then
+ EDITOR=vi
+fi
+
+cat <<EXT >/etc/grub.d/40_custom
+#!/bin/sh
+exec tail -n +3 \$0
+
+###
+### NOTE: generated by kbuild.
+###
+
+menuentry 'openSUSE on Linux $name' --class opensuse --class gnu-linux --class gnu --class os \$menuentry_id_option 'gnulinux-simple-22391c4c-ad76-c05c-84b3-535dc2efaf97' {
+ load_video
+ set gfxpayload=keep
+ insmod gzio
+ insmod part_gpt
+ insmod btrfs
+ search --no-floppy --fs-uuid --set=root 22391c4c-ad76-c05c-84b3-535dc2efaf97
+ echo 'Loading Linux $name ...'
+ linux /boot/vmlinuz-$name root=UUID=22391c4c-ad76-c05c-84b3-535dc2efaf97 \${extra_cmdline} security=selinux selinux=1 loglevel=3 splash=silent systemd.show_status=1
+ echo 'Loading initial ramdisk ...'
+ initrd /boot/initrd-$name
+}
+EXT
+
+# Edit the configuration file we just produced just in case and update it.
+$EDITOR /etc/grub.d/40_custom
+grub2-mkconfig -o /boot/grub2/grub.cfg