mirror of
https://github.com/basecamp/omarchy.git
synced 2026-02-17 15:25:37 +00:00
* Change lazyvim and asdcontrol to packages * Remove asdcontrol and lazyvim * Add lazyvim setup * Don't trigger rebuild. We already rebuild later. * Add new pacman.conf after install * Update config to keep mirrors in mirrorlist * Add lazyvim setup back * Make webapp installer work with local images * Update tuis to work offline * Update pacman config situation * Extract the reboot segment into its own file * Explainer * Can't return in executed scripts * Add post-install * Extract the reboot segment into its own file * Fix rebase doubling up * Add run wrapper function for feedback * Redirect output to log * Move gnome updates to first-run * Add theme to first-run * Updat to try to get logging working * Create the file and give permissions * Test gsettings * Revert "Test gsettings" This reverts commit 49c27d319407f6c95fcbb4c5a2646e54b50c9ab4. * Stop logging * Add time outputs to end of logs * Rearrange some scripts to cleanup * Cleanup * Add timing to run script * Don't enable multilib for offline * Add prebuild ruby * Try spinner setup * Prevent exit 1 due to grep not matching * Update limine config to work for USB installs as well * Add offline install to env report * Fix grep pipefailure * Update logs exports to work with subshells * Fix backward logic * Attempt to fix logging again * Export chrootable for subshells * Clean up outputs * Move chrootable up * Source chroot instead * Changes for logging * Center up reboot notice * Update fixed paths * Update trap * Revert reverting precompiled ruby due to issues * Revert "Revert reverting precompiled ruby due to issues" This reverts commit c159e7dc51cfdd2fb750c49c66bc4468e1208446. * Remove junk to cleanup fixed paths now that we have relative * Add git branch check to transition beta to main * Log output * Add time output on summary screen * We don't need sudo here * Add ansi helpers to make code cleaner * Add dry-run helpers for testing * Split out some common / reused items * Add log output function * Use gum log to output cleaner * Cleanup * Update trap with options * Fix reboot and pad it * Cleanup * Add dry-run for testing * Use default $PADDING for gum * More styles * Styles and really exit * Update to new format * Add ansi vars * Update log output to prevent flickering * Fix logo exporting * Trap updates * Add exit handler * Prevent double-trapping * Update traps * Consolidate logic * Update reboot to work in chroot * Eliminate double-guard * Attempt to speed up by removing mkinitcpio hooks * Add multilib for nvidia users * Add back wireless-regdom * Remove dryrun items * Fix to be offline * Set fonts for plymouth to solve freetype2 issue * Required -y to run * Update omarchy-refresh-plymouth to account for limine changes * Update omarchy-refresh-plymouth to account for limine changes (#1575) * Required -y to run * Update omarchy-refresh-plymouth to account for limine changes --------- Co-authored-by: David Heinemeier Hansson <david@hey.com> * Update modes * Remove direct executions of .sh files * Add variable safety * Add omarchy-upload-log * Add broadcome fix for MBP * Prevent printing on screen when rebooting * Make packages list universal * Rename * Remove retry message * Fix packages target * Add system info to upload * Update variable name * Remove unnecessary executable statuses * Remove gesture default * Add bcm4360 fix to install * Add useful debug info * Add OMARCHY_PATH * Only look locally offline * Rename / rearrange files * Export so they're available to subshells * Update for alternate * Rearrange * Log install time if no arch * Add limine to packages list * Update comments * Update sizing method * Update mode switcher * Move icons to be embedded in installer * Set install mode to online * shebang and sudo * Remove deleted branch check * Elim banners * Elim verbosity * Rename LOG_FILE * Multilib on by default * Flip to positive * Switch to gnome-theme.sh for first run * Elim ansi-codes helper * Move guard up to be the first thing that's hit * Extract a couple of functions * Trim * Trim * Move back to trap * Update to single gum file * Just show total * Pulled function to a helper * Extract explaining function * Use complete conditional flows where possible * Reference variable close to its use * Use modern bash conditional syntax * Comment before function * Use a simpler shared exit headline Doesn't matter how we stopped, just that we did * CRs * Keep constants together * Style on comment * Explain QR Code * Modern bash conditional and use lowercase for all local variables * Use bash calculation syntax for numbers * Use calculation syntax where possible * cleanup was not intention revealing enough imo * Spacing * Retry won't produce something different in offline mode * Not needed * Use modern bash conditional style * String-wrapping not needed in [[ ]] * Might as well use constants for all of these * Don't need the wrapping * Move the output saving into where we're working with it * Not needed as long as we just source this * Gum is a helper * Slim down logging setup * Reflect broader scope of work * Everything should live in file * Simpler * Ordering * Style * Better separation of concerns * Stop pretending these are meant to run directly * Move all packaging execution together * No longer used in an offline centric setup * None of these are directly executable any more either * Modern bash conditional * Better name * Explain what's going on * Use modern bash conditional * Use modern bash styule * No need for bashing --------- Co-authored-by: David Heinemeier Hansson <david@hey.com> Co-authored-by: DoppioJP <jakub@doppio.jp>
152 lines
4.4 KiB
Bash
152 lines
4.4 KiB
Bash
# Hyprland launched via UWSM and login directly as user, rely on disk encryption + hyprlock for security
|
|
|
|
# ==============================================================================
|
|
# PLYMOUTH SETUP
|
|
# ==============================================================================
|
|
|
|
if [ "$(plymouth-set-default-theme)" != "omarchy" ]; then
|
|
sudo cp -r "$HOME/.local/share/omarchy/default/plymouth" /usr/share/plymouth/themes/omarchy/
|
|
sudo plymouth-set-default-theme omarchy
|
|
fi
|
|
|
|
# ==============================================================================
|
|
# SEAMLESS LOGIN
|
|
# ==============================================================================
|
|
|
|
if [ ! -x /usr/local/bin/seamless-login ]; then
|
|
# Compile the seamless login helper -- needed to prevent seeing terminal between loader and desktop
|
|
cat <<'CCODE' >/tmp/seamless-login.c
|
|
/*
|
|
* Seamless Login - Minimal SDDM-style Plymouth transition
|
|
* Replicates SDDM's VT management for seamless auto-login
|
|
*/
|
|
#include <stdio.h>
|
|
#include <stdlib.h>
|
|
#include <unistd.h>
|
|
#include <fcntl.h>
|
|
#include <sys/ioctl.h>
|
|
#include <linux/kd.h>
|
|
#include <linux/vt.h>
|
|
#include <sys/wait.h>
|
|
#include <string.h>
|
|
|
|
int main(int argc, char *argv[]) {
|
|
int vt_fd;
|
|
int vt_num = 1; // TTY1
|
|
char vt_path[32];
|
|
|
|
if (argc < 2) {
|
|
fprintf(stderr, "Usage: %s <session_command>\n", argv[0]);
|
|
return 1;
|
|
}
|
|
|
|
// Open the VT (simple approach like SDDM)
|
|
snprintf(vt_path, sizeof(vt_path), "/dev/tty%d", vt_num);
|
|
vt_fd = open(vt_path, O_RDWR);
|
|
if (vt_fd < 0) {
|
|
perror("Failed to open VT");
|
|
return 1;
|
|
}
|
|
|
|
// Activate the VT
|
|
if (ioctl(vt_fd, VT_ACTIVATE, vt_num) < 0) {
|
|
perror("VT_ACTIVATE failed");
|
|
close(vt_fd);
|
|
return 1;
|
|
}
|
|
|
|
// Wait for VT to be active
|
|
if (ioctl(vt_fd, VT_WAITACTIVE, vt_num) < 0) {
|
|
perror("VT_WAITACTIVE failed");
|
|
close(vt_fd);
|
|
return 1;
|
|
}
|
|
|
|
// Critical: Set graphics mode to prevent console text
|
|
if (ioctl(vt_fd, KDSETMODE, KD_GRAPHICS) < 0) {
|
|
perror("KDSETMODE KD_GRAPHICS failed");
|
|
close(vt_fd);
|
|
return 1;
|
|
}
|
|
|
|
// Clear VT and close (like SDDM does)
|
|
const char *clear_seq = "\33[H\33[2J";
|
|
if (write(vt_fd, clear_seq, strlen(clear_seq)) < 0) {
|
|
perror("Failed to clear VT");
|
|
}
|
|
|
|
close(vt_fd);
|
|
|
|
// Set working directory to user's home
|
|
const char *home = getenv("HOME");
|
|
if (home) chdir(home);
|
|
|
|
// Now execute the session command
|
|
execvp(argv[1], &argv[1]);
|
|
perror("Failed to exec session");
|
|
return 1;
|
|
}
|
|
CCODE
|
|
|
|
gcc -o /tmp/seamless-login /tmp/seamless-login.c
|
|
sudo mv /tmp/seamless-login /usr/local/bin/seamless-login
|
|
sudo chmod +x /usr/local/bin/seamless-login
|
|
rm /tmp/seamless-login.c
|
|
fi
|
|
|
|
if [ ! -f /etc/systemd/system/omarchy-seamless-login.service ]; then
|
|
cat <<EOF | sudo tee /etc/systemd/system/omarchy-seamless-login.service
|
|
[Unit]
|
|
Description=Omarchy Seamless Auto-Login
|
|
Documentation=https://github.com/basecamp/omarchy
|
|
Conflicts=getty@tty1.service
|
|
After=systemd-user-sessions.service getty@tty1.service plymouth-quit.service systemd-logind.service
|
|
PartOf=graphical.target
|
|
|
|
[Service]
|
|
Type=simple
|
|
ExecStart=/usr/local/bin/seamless-login uwsm start -- hyprland.desktop
|
|
Restart=always
|
|
RestartSec=2
|
|
StartLimitIntervalSec=30
|
|
StartLimitBurst=2
|
|
User=$USER
|
|
TTYPath=/dev/tty1
|
|
TTYReset=yes
|
|
TTYVHangup=yes
|
|
TTYVTDisallocate=yes
|
|
StandardInput=tty
|
|
StandardOutput=journal
|
|
StandardError=journal+console
|
|
PAMName=login
|
|
|
|
[Install]
|
|
WantedBy=graphical.target
|
|
EOF
|
|
fi
|
|
|
|
if [ ! -f /etc/systemd/system/plymouth-quit.service.d/wait-for-graphical.conf ]; then
|
|
# Make plymouth remain until graphical.target
|
|
sudo mkdir -p /etc/systemd/system/plymouth-quit.service.d
|
|
sudo tee /etc/systemd/system/plymouth-quit.service.d/wait-for-graphical.conf <<'EOF'
|
|
[Unit]
|
|
After=multi-user.target
|
|
EOF
|
|
fi
|
|
|
|
# Mask plymouth-quit-wait.service only if not already masked
|
|
if ! systemctl is-enabled plymouth-quit-wait.service | grep -q masked; then
|
|
sudo systemctl mask plymouth-quit-wait.service
|
|
sudo systemctl daemon-reload
|
|
fi
|
|
|
|
# Enable omarchy-seamless-login.service only if not already enabled
|
|
if ! systemctl is-enabled omarchy-seamless-login.service | grep -q enabled; then
|
|
sudo systemctl enable omarchy-seamless-login.service
|
|
fi
|
|
|
|
# Disable getty@tty1.service only if not already disabled
|
|
if ! systemctl is-enabled getty@tty1.service | grep -q disabled; then
|
|
sudo systemctl disable getty@tty1.service
|
|
fi
|