25 Commits

Author SHA1 Message Date
03f7403cdd Add migration to fix XCompose in Typora 2025-07-13 18:02:19 -07:00
3d060c384e Fix XCompose use in Typora 2025-07-13 18:01:08 -07:00
c9b1935054 Improve boot screen transition (#140)
* Working concept with SDDM

* Working concept without SDDM dep

* Working concept w/o SDDM and w/ UWSM

* Cleanup and UWSM tweaks

* Cleanup

* Remove call to seamless-login.sh

* Don't allow the progress to go backwards

* Add refresh to migration
2025-07-13 17:51:03 -07:00
2035790817 Fix indention 2025-07-13 17:45:21 -07:00
0caeeeed73 Merge branch 'master' into dev 2025-07-13 17:45:03 -07:00
1f0b8eb923 format(waybar): fix wrong indentation for config file (#131) 2025-07-13 17:44:25 -07:00
e50780e5bd Add collapsing tray to waybar (#130)
Co-authored-by: David Heinemeier Hansson <david@hey.com>
2025-07-13 17:40:13 -07:00
7af3230825 Automatically reload waybar style on changes (#91) 2025-07-13 17:31:07 -07:00
dc0032c9c3 Revert "Update keyboard shortcuts script to show all runtime keybinds (#70)"
This reverts commit 6433511873.
2025-07-13 17:27:33 -07:00
59b59807a9 Revert "We have F11 for this"
This reverts commit 4f60ac6797.
2025-07-13 17:27:30 -07:00
4f60ac6797 We have F11 for this 2025-07-13 17:24:49 -07:00
6433511873 Update keyboard shortcuts script to show all runtime keybinds (#70)
* feat: Add a keyboard shortcuts helper

This commit:

* Changes keybinds to use `bindd` and adds descriptions for each one
* Changes the keybinds script to use `hyprctl binds` to inspect runtime keybinds
and generate a wofi menu to search/inspect keybinds

* Rely on 'order defined' for sorting

Using `hyprctl binds` lets us get the binds in the order they're
defined. This lets us be deliberate about what keybinds we want to show
up at the top of the presented window.

* Skip cache file for keybinds

* Strip extra newline causing double spacing
2025-07-13 17:17:48 -07:00
41b5893d32 Just a slight indication of the current audio volume with 3 diffrent icons (#158)
* install: explicitly install iwd

When archinstall is run using an ethernet connection, iwd will not be
installed. Explicitly install and enable the service

* Just a slight indication of the current audio volume with 3 diffrent icons

---------

Co-authored-by: Tim Culverhouse <tim@timculverhouse.com>
Co-authored-by: David Heinemeier Hansson <david@hey.com>
2025-07-13 16:50:22 -07:00
920e236fc7 Focus on active window to solve the problem that opening URLs wouldnt focus browser if on a different workspace
Closes #152
2025-07-13 16:45:33 -07:00
745a16f2a4 Catch up with new spacing and improve color 2025-07-13 16:31:05 -07:00
bde3d915c2 Excess CR 2025-07-13 16:29:33 -07:00
13bc31ad0f Improve matte black lock screen colors 2025-07-13 16:29:24 -07:00
fb3aaaba5f Merge pull request #160 from ryanrhughes/Add-margin-to-notification-box
Add margin to notifications box
2025-07-13 19:27:18 -04:00
83877298b7 We use Liberation Sans for these 2025-07-13 15:45:44 -07:00
1df035864d Bring Matte Black mako.ini in line with the rest 2025-07-13 15:45:05 -07:00
dd207232e1 Add margin to notifications 2025-07-13 17:25:00 -04:00
adc506f053 Merge pull request #128 from basecamp/dev
Omarchy v1.3.2
2025-07-10 21:56:56 -04:00
42e53500b4 Merge pull request #125 from basecamp/dev
Omarchy v1.3.1
2025-07-10 20:12:51 -04:00
e22b3db049 Merge pull request #122 from rockorager/explicit-iwd-install
install: explicitly install iwd
2025-07-10 14:47:24 -04:00
1cf9492e57 install: explicitly install iwd
When archinstall is run using an ethernet connection, iwd will not be
installed. Explicitly install and enable the service
2025-07-10 13:45:17 -05:00
21 changed files with 388 additions and 141 deletions

View File

@ -0,0 +1,10 @@
[Desktop Entry]
Name=Typora
GenericName=Markdown Editor
Exec=typora --enable-wayland-ime %U
Icon=typora
Type=Application
StartupNotify=true
Categories=Office;WordProcessor;
MimeType=text/markdown;text/x-markdown;

View File

@ -15,7 +15,7 @@ show_power_menu() {
case "$selection" in
*Lock*) hyprlock ;;
*Suspend*) systemctl suspend ;;
*Relaunch*) hyprctl dispatch exit ;;
*Relaunch*) uwsm stop ;;
*Restart*) systemctl reboot ;;
*Shutdown*) systemctl poweroff ;;
esac

View File

@ -1,5 +1,4 @@
INPUT_METHOD=fcitx
GTK_IM_MODULE=fcitx
QT_IM_MODULE=fcitx
XMODIFIERS=@im=fcitx
SDL_IM_MODULE=fcitx

View File

@ -1,4 +1,5 @@
{
"reload_style_on_change": true,
"layer": "top",
"position": "top",
"spacing": 0,
@ -10,6 +11,7 @@
"clock"
],
"modules-right": [
"group/tray-expander",
"bluetooth",
"network",
"pulseaudio",
@ -40,6 +42,89 @@
"5": []
}
},
"cpu": {
"interval": 5,
"format": "󰍛",
"on-click": "alacritty -e btop"
},
"clock": {
"format": "{:%A %H:%M}",
"format-alt": "{:%d %B W%V %Y}",
"tooltip": false
},
"network": {
"format-icons": ["󰤯","󰤟","󰤢","󰤥","󰤨"],
"format" : "{icon}",
"format-wifi" : "{icon}",
"format-ethernet" : "󰀂",
"format-disconnected" : "󰖪",
"tooltip-format-wifi": "{essid} ({frequency} GHz)\n⇣{bandwidthDownBytes} ⇡{bandwidthUpBytes}",
"tooltip-format-ethernet": "⇣{bandwidthDownBytes} ⇡{bandwidthUpBytes}",
"tooltip-format-disconnected": "Disconnected",
"interval": 3,
"nospacing": 1,
"on-click": "alacritty --class=Impala -e impala"
},
"battery": {
"format": "{capacity}% {icon}",
"format-discharging": "{icon}",
"format-charging": "{icon}",
"format-plugged": "",
"format-icons": {
"charging": [
"󰢜", "󰂆", "󰂇", "󰂈", "󰢝", "󰂉", "󰢞", "󰂊", "󰂋", "󰂅"
],
"default": [
"󰁺", "󰁻", "󰁼", "󰁽", "󰁾", "󰁿", "󰂀", "󰂁", "󰂂", "󰁹"
]
},
"format-full": "󰂅",
"tooltip-format-discharging": "{power:>1.0f}W↓ {capacity}%",
"tooltip-format-charging": "{power:>1.0f}W↑ {capacity}%",
"interval": 5,
"states": {
"warning": 20,
"critical": 10
}
},
"bluetooth": {
"format": "",
"format-disabled": "󰂲",
"format-connected": "",
"tooltip-format": "Devices connected: {num_connections}",
"on-click": "GTK_THEME=Adwaita-dark blueberry"
},
"pulseaudio": {
"format": "{icon}",
"on-click": "GTK_THEME=Adwaita-dark pavucontrol",
"on-click-right": "pamixer -t",
"tooltip-format": "Playing at {volume}%",
"scroll-step": 5,
"format-muted": "󰝟",
"format-icons": {
"default": ["", "", ""]
}
},
"group/tray-expander": {
"orientation": "inherit",
"drawer": {
"transition-duration": 600,
"children-class": "tray-group-item"
},
"modules": [
"custom/expand-icon",
"tray"
]
},
"custom/expand-icon": {
"format": " ",
"tooltip": false
},
"tray": {
"icon-size": 12,
"spacing": 12
}
},
"cpu": {
"interval": 5,
"format": "󰍛",

View File

@ -17,6 +17,7 @@
}
#custom-dropbox,
#tray,
#cpu,
#battery,
#network,
@ -28,6 +29,10 @@
margin-right: 13px;
}
#custom-expand-icon {
margin-right: 12px;
}
tooltip {
padding: 2px;
}

View File

@ -95,5 +95,5 @@ master {
misc {
disable_hyprland_logo = true
disable_splash_rendering = true
focus_on_activate = true
}

View File

@ -20,6 +20,7 @@ global.fake_progress_active = 0; # 0 / 1 boolean
global.animation_frame = 0;
global.fake_progress_start_time = 0; # Track when fake progress started
global.password_shown = 0; # Track if password dialog has been shown
global.max_progress = 0.0; # Track the maximum progress reached to prevent backwards movement
fun refresh_callback ()
{
@ -55,12 +56,17 @@ Plymouth.SetRefreshFunction (refresh_callback);
fun update_progress_bar(progress)
{
# Only update if progress is moving forward
if (progress > global.max_progress)
{
global.max_progress = progress;
width = Math.Int(progress_bar.original_image.GetWidth() * progress);
if (width < 1) width = 1; # Ensure minimum width of 1 pixel
progress_bar.image = progress_bar.original_image.Scale(width, progress_bar.original_image.GetHeight());
progress_bar.sprite.SetImage(progress_bar.image);
}
}
fun show_progress_bar()
{
@ -89,12 +95,16 @@ fun hide_password_dialog()
}
fun start_fake_progress()
{
# Don't reset if we already have progress
if (global.max_progress == 0.0)
{
global.fake_progress = 0.0;
global.real_progress = 0.0;
update_progress_bar(0.0);
}
global.fake_progress_active = 1;
global.animation_frame = 0;
update_progress_bar(0.0);
}
fun stop_fake_progress()
@ -149,8 +159,12 @@ fun display_password_callback (prompt, bullets)
{
global.password_shown = 1; # Mark that password dialog has been shown
# Reset progress when password dialog appears
stop_fake_progress();
hide_progress_bar();
global.max_progress = 0.0;
global.fake_progress = 0.0;
global.real_progress = 0.0;
show_password_dialog();
# Clear all bullets first

View File

@ -7,14 +7,6 @@ mkdir -p ~/.local/share/applications
# Use default bashrc from Omarchy
echo "source ~/.local/share/omarchy/default/bash/rc" >~/.bashrc
# Login directly as user, rely on disk encryption + hyprlock for security
sudo mkdir -p /etc/systemd/system/getty@tty1.service.d
sudo tee /etc/systemd/system/getty@tty1.service.d/override.conf >/dev/null <<EOF
[Service]
ExecStart=
ExecStart=-/usr/bin/agetty --autologin $USER --noclear %I \$TERM
EOF
# Set common git aliases
git config --global alias.co checkout
git config --global alias.br branch

View File

@ -2,6 +2,3 @@ yay -S --noconfirm --needed \
hyprland hyprshot hyprpicker hyprlock hypridle polkit-gnome hyprland-qtutils \
wofi waybar mako swaybg \
xdg-desktop-portal-hyprland xdg-desktop-portal-gtk
# Start Hyprland on first session
echo "[[ -z \$DISPLAY && \$(tty) == /dev/tty1 ]] && exec Hyprland" >~/.bash_profile

115
install/login.sh Normal file
View File

@ -0,0 +1,115 @@
#!/bin/bash
# Hyprland launched via UWSM and login directly as user, rely on disk encryption + hyprlock for security
yay -S --noconfirm --needed uwsm
# 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
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
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
sudo systemctl daemon-reload
sudo systemctl enable omarchy-seamless-login.service
# Disable getty@tty1 to prevent conflicts
sudo systemctl disable getty@tty1.service

4
migrations/.sh Normal file
View File

@ -0,0 +1,4 @@
echo "Fix XCompose use in Typora"
if command -v typora &>/dev/null; then
cp ~/.local/share/omarchy/applications/xtras/typora.desktop ~/.local/share/applications/
fi

18
migrations/1752292967.sh Normal file
View File

@ -0,0 +1,18 @@
echo "Update to use UWSM and seamless login"
sudo rm /etc/systemd/system/getty@tty1.service.d/override.conf
sudo rmdir /etc/systemd/system/getty@tty1.service.d/ 2>/dev/null || true
if [ -f "$HOME/.bash_profile" ]; then
# Remove the specific line
sed -i '/^\[\[ -z \$DISPLAY && \$(tty) == \/dev\/tty1 \]\] && exec Hyprland$/d' "$HOME/.bash_profile"
echo "Cleaned up .bash_profile"
fi
if [ -f "$HOME/.config/environment.d/fcitx.conf" ]; then
echo "Removing GTK_IM_MODULE from fcitx config for Wayland..."
sed -i 's/^GTK_IM_MODULE=fcitx$//' "$HOME/.config/environment.d/fcitx.conf"
fi
omarchy-refresh-plymouth
source ~/.local/share/omarchy/install/login.sh

View File

@ -7,6 +7,7 @@ padding=10
border-size=2
font=Liberation Sans 11
anchor=top-right
outer-margin=20
default-timeout=5000
max-icon-size=32

View File

@ -7,6 +7,7 @@ padding=10
border-size=2
font=Liberation Sans 11
anchor=top-right
outer-margin=20
default-timeout=5000
max-icon-size=32

View File

@ -7,6 +7,7 @@ padding=10
border-size=2
font=Liberation Sans 11
anchor=top-right
outer-margin=20
default-timeout=5000
max-icon-size=32

View File

@ -7,6 +7,7 @@ padding=10
border-size=2
font=Liberation Sans 11
anchor=top-right
outer-margin=20
default-timeout=5000
max-icon-size=32

View File

@ -1,10 +1,9 @@
$color = rgba(46,52,64,1.0) # #2e3440 solid color
$color = rgba(12,12,12,1.0) # #333333 matte black
$inner_color = rgba(136,136,136,0.3) #rgb(136, 136, 136) with opacity
$outer_color = rgba(216,222,233,0.5) # #d8dee9
$inner_color = rgba(138,138,141,0.3) # #8a8a8d with opacity
$outer_color = rgba(234,234,234,0.5) # #EAEAEA
$font_color = rgba(216,222,233,1.0)
$placeholder_color = rgba(216,222,233,0.6)
$check_color = rgba(136, 192, 208, 1.0)
$font_color = rgba(234,234,234,1.0) # #EAEAEA
$placeholder_color = rgba(234,234,234,0.6) # #EAEAEA with opacity
$check_color = rgba(245,158,11,1.0) # #f59e0b amber accent

View File

@ -1,18 +1,21 @@
text-color=#8a8a8d
border-color=#8A8A8D
background-color=#1e1e1e
border-radius=10
width=420
height=110
padding=10
font=CaskaydiaMono Nerd Font
border-size=0
border-size=2
font=Liberation Sans 11
anchor=top-right
default-timeout=3000
outer-margin=20
default-timeout=5000
max-icon-size=32
[app-name=Spotify]
invisible=1
[urgency=high]
background-color=#660d0d
text-color=#ffffff
[mode=do-not-disturb]
invisible=true
[mode=do-not-disturb app-name=notify-send]
invisible=false

View File

@ -7,6 +7,7 @@ padding=10
border-size=2
font=Liberation Sans 11
anchor=top-right
outer-margin=20
default-timeout=5000
max-icon-size=32

View File

@ -7,6 +7,7 @@ padding=10
border-size=2
font=Liberation Sans 11
anchor=top-right
outer-margin=20
default-timeout=5000
max-icon-size=32