Add Omarchy-style Hyprland desktop for straylight
Ports the classic dotfiles Omarchy setup to a no-home-manager NixOS
system module (configs/omarchy.nix), scoped to straylight only so the
other desktop hosts keep i3.
- Hyprland (programs.hyprland) becomes the default lightdm session; i3
stays enabled and selectable as a fallback.
- Omarchy config layout under ~/.config/{hypr,waybar,rofi,wlogout,
swayosd,alacritty} symlinked from the store; mutable theme/wallpaper
state in ~/.config/omarchy/current.
- omarchy-dots generates 8 themes (hyprland/hyprlock/waybar/rofi/
swayosd/wlogout/alacritty/mako colour files) from each theme's
palette, with wallpapers fetched from the Omarchy v3.8.4 tag.
- Helper scripts: omarchy-theme-set/bg-next/bg-set/apply, omarchy-menu
(rofi power/theme/background menus), waybar toggle, screenshot, lock.
- Shared desktop modules (desktop.nix / desktop-light.nix) untouched.
This commit is contained in:
@@ -0,0 +1,14 @@
|
||||
# Autostart for the Hyprland session (Omarchy v3 autostart, adapted:
|
||||
# no uwsm, no omarchy-* first-run/hook machinery).
|
||||
|
||||
exec-once = hypridle
|
||||
exec-once = mako
|
||||
exec-once = swayosd-server
|
||||
exec-once = clipse -listen
|
||||
exec-once = swaybg -i ~/.config/omarchy/current/background -m fill
|
||||
|
||||
# Waybar honours `omarchy-toggle-waybar` (toggles hyprland layer autostart off)
|
||||
exec-once = sh -c 'omarchy-waybar-enabled && waybar'
|
||||
|
||||
# Slow app launch fix -- set systemd vars
|
||||
exec-once = dbus-update-activation-environment --systemd --all
|
||||
@@ -0,0 +1,116 @@
|
||||
# Keybindings — ported from Omarchy v3 (bindings/tiling-v2, utilities and
|
||||
# application bindings), with omarchy-* helpers replaced by the small set of
|
||||
# scripts shipped in ~/.local/share/omarchy/bin. Launcher is rofi (Omarchy
|
||||
# v3 shipped walker; rofi-wayland is used here per request).
|
||||
|
||||
# ---- Applications ----
|
||||
bindd = SUPER, RETURN, Terminal, exec, alacritty
|
||||
bindd = SUPER ALT, RETURN, Tmux, exec, alacritty -e tmux new -A -s Work
|
||||
bindd = SUPER SHIFT, RETURN, Browser, exec, ungoogled-chromium
|
||||
bindd = SUPER SHIFT, F, File manager, exec, nautilus --new-window
|
||||
bindd = SUPER, SPACE, Launch apps, exec, rofi -show drun -show-icons
|
||||
bindd = SUPER CTRL, E, Emoji picker, exec, rofi -show emoji
|
||||
bindd = SUPER CTRL, C, Capture menu, exec, omarchy-menu capture
|
||||
bindd = SUPER ALT, SPACE, Omarchy menu, exec, omarchy-menu
|
||||
bindd = SUPER, K, Show key bindings, exec, omarchy-menu keybindings
|
||||
bindd = , XF86Calculator, Calculator, exec, gnome-calculator
|
||||
|
||||
# ---- Close / control windows ----
|
||||
bindd = SUPER, W, Close window, killactive,
|
||||
bindd = SUPER, BACKSPACE, Close window, killactive,
|
||||
bindd = SUPER, J, Toggle window split, layoutmsg, togglesplit
|
||||
bindd = SUPER, P, Pseudo window, pseudo,
|
||||
bindd = SUPER, T, Toggle floating/tiling, togglefloating,
|
||||
bindd = SUPER, F, Full screen, fullscreen, 0
|
||||
bindd = SUPER ALT, F, Full width, fullscreen, 1
|
||||
bindd = SUPER, Q, Toggle window transparency, exec, hyprctl setprop active opaque toggle
|
||||
|
||||
# ---- Focus ----
|
||||
bindd = SUPER, LEFT, Focus left, movefocus, l
|
||||
bindd = SUPER, RIGHT, Focus right, movefocus, r
|
||||
bindd = SUPER, UP, Focus up, movefocus, u
|
||||
bindd = SUPER, DOWN, Focus down, movefocus, d
|
||||
bindd = ALT, TAB, Focus next window, cyclenext
|
||||
bindd = ALT SHIFT, TAB, Focus previous window, cyclenext, prev
|
||||
|
||||
# ---- Swap / move windows ----
|
||||
bindd = SUPER SHIFT, LEFT, Swap window left, swapwindow, l
|
||||
bindd = SUPER SHIFT, RIGHT, Swap window right, swapwindow, r
|
||||
bindd = SUPER SHIFT, UP, Swap window up, swapwindow, u
|
||||
bindd = SUPER SHIFT, DOWN, Swap window down, swapwindow, d
|
||||
|
||||
# ---- Workspaces ----
|
||||
bindd = SUPER, code:10, Workspace 1, workspace, 1
|
||||
bindd = SUPER, code:11, Workspace 2, workspace, 2
|
||||
bindd = SUPER, code:12, Workspace 3, workspace, 3
|
||||
bindd = SUPER, code:13, Workspace 4, workspace, 4
|
||||
bindd = SUPER, code:14, Workspace 5, workspace, 5
|
||||
bindd = SUPER, code:15, Workspace 6, workspace, 6
|
||||
bindd = SUPER, code:16, Workspace 7, workspace, 7
|
||||
bindd = SUPER, code:17, Workspace 8, workspace, 8
|
||||
bindd = SUPER, code:18, Workspace 9, workspace, 9
|
||||
bindd = SUPER, code:19, Workspace 10, workspace, 10
|
||||
|
||||
bindd = SUPER SHIFT, code:10, Move window to workspace 1, movetoworkspace, 1
|
||||
bindd = SUPER SHIFT, code:11, Move window to workspace 2, movetoworkspace, 2
|
||||
bindd = SUPER SHIFT, code:12, Move window to workspace 3, movetoworkspace, 3
|
||||
bindd = SUPER SHIFT, code:13, Move window to workspace 4, movetoworkspace, 4
|
||||
bindd = SUPER SHIFT, code:14, Move window to workspace 5, movetoworkspace, 5
|
||||
bindd = SUPER SHIFT, code:15, Move window to workspace 6, movetoworkspace, 6
|
||||
bindd = SUPER SHIFT, code:16, Move window to workspace 7, movetoworkspace, 7
|
||||
bindd = SUPER SHIFT, code:17, Move window to workspace 8, movetoworkspace, 8
|
||||
bindd = SUPER SHIFT, code:18, Move window to workspace 9, movetoworkspace, 9
|
||||
bindd = SUPER SHIFT, code:19, Move window to workspace 10, movetoworkspace, 10
|
||||
|
||||
bindd = SUPER, TAB, Next workspace, workspace, e+1
|
||||
bindd = SUPER SHIFT, TAB, Previous workspace, workspace, e-1
|
||||
bindd = SUPER CTRL, TAB, Former workspace, workspace, previous
|
||||
bindd = SUPER, mouse_down, Next workspace, workspace, e+1
|
||||
bindd = SUPER, mouse_up, Previous workspace, workspace, e-1
|
||||
|
||||
# ---- Scratchpad ----
|
||||
bindd = SUPER, S, Toggle scratchpad, togglespecialworkspace, scratchpad
|
||||
bindd = SUPER ALT, S, Move window to scratchpad, movetoworkspacesilent, special:scratchpad
|
||||
|
||||
# ---- Resize ----
|
||||
bindd = SUPER, code:20, Shrink window width, resizeactive, -100 0
|
||||
bindd = SUPER, code:21, Expand window width, resizeactive, 100 0
|
||||
bindd = SUPER SHIFT, code:20, Shrink window height, resizeactive, 0 -100
|
||||
bindd = SUPER SHIFT, code:21, Expand window height, resizeactive, 0 100
|
||||
|
||||
bindmd = SUPER, mouse:272, Move window, movewindow
|
||||
bindmd = SUPER, mouse:273, Resize window, resizewindow
|
||||
|
||||
# ---- Aesthetics ----
|
||||
bindd = SUPER SHIFT, SPACE, Toggle top bar, exec, omarchy-toggle-waybar
|
||||
bindd = SUPER CTRL, SPACE, Next background, exec, omarchy-theme-bg-next
|
||||
bindd = SUPER SHIFT CTRL, SPACE, Theme menu, exec, omarchy-menu theme
|
||||
|
||||
# ---- Screenshots / capture ----
|
||||
bindd = , PRINT, Screenshot region, exec, omarchy-capture-screenshot region
|
||||
bindd = SHIFT, PRINT, Screenshot window, exec, omarchy-capture-screenshot window
|
||||
bindd = CTRL, PRINT, Screenshot output, exec, omarchy-capture-screenshot output
|
||||
bindd = SUPER, PRINT, Color picker, exec, pkill hyprpicker || hyprpicker -a
|
||||
|
||||
# ---- Clipboard ----
|
||||
bindd = SUPER CTRL, V, Clipboard history, exec, clipse
|
||||
|
||||
# ---- Multimedia / brightness ----
|
||||
bindl = , XF86AudioRaiseVolume, exec, wpctl set-volume -l 1 @DEFAULT_AUDIO_SINK@ 5%+
|
||||
bindl = , XF86AudioLowerVolume, exec, wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%-
|
||||
bindl = , XF86AudioMute, exec, wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle
|
||||
bindl = , XF86AudioMicMute, exec, wpctl set-mute @DEFAULT_AUDIO_SOURCE@ toggle
|
||||
bindl = , XF86MonBrightnessUp, exec, brightnessctl -e4 -n2 set 5%+
|
||||
bindl = , XF86MonBrightnessDown, exec, brightnessctl -e4 -n2 set 5%-
|
||||
bindl = , XF86AudioNext, exec, playerctl next
|
||||
bindl = , XF86AudioPrev, exec, playerctl previous
|
||||
bindl = , XF86AudioPlay, exec, playerctl play-pause
|
||||
bindl = , XF86AudioPause, exec, playerctl play-pause
|
||||
|
||||
# ---- Session / power ----
|
||||
bindd = SUPER CTRL, L, Lock system, exec, omarchy-system-lock
|
||||
bindd = SUPER, ESCAPE, Power menu, exec, omarchy-menu system
|
||||
bindld = , XF86PowerOff, Power menu, exec, omarchy-menu system
|
||||
bindd = SUPER SHIFT, ESCAPE, Log out, exit,
|
||||
bindd = SUPER CTRL, ESCAPE, Reboot, exec, systemctl reboot
|
||||
bindd = SUPER SHIFT CTRL, ESCAPE, Shut down, exec, systemctl poweroff
|
||||
@@ -0,0 +1,27 @@
|
||||
# Environment for Hyprland sessions (Omarchy v3 default/hypr/envs.conf).
|
||||
# GUM env source dropped (not installed); XCOMPOSEFILE dropped (no ~/.XCompose).
|
||||
|
||||
# Cursor size
|
||||
env = XCURSOR_SIZE,24
|
||||
env = HYPRCURSOR_SIZE,24
|
||||
|
||||
# Force all apps to use Wayland
|
||||
env = GDK_BACKEND,wayland,x11,*
|
||||
env = QT_QPA_PLATFORM,wayland;xcb
|
||||
env = MOZ_ENABLE_WAYLAND,1
|
||||
env = ELECTRON_OZONE_PLATFORM_HINT,wayland
|
||||
env = OZONE_PLATFORM,wayland
|
||||
env = XDG_SESSION_TYPE,wayland
|
||||
|
||||
# Allow better support for screen sharing (Google Meet, Discord, etc)
|
||||
env = XDG_CURRENT_DESKTOP,Hyprland
|
||||
env = XDG_SESSION_DESKTOP,Hyprland
|
||||
|
||||
xwayland {
|
||||
force_zero_scaling = true
|
||||
}
|
||||
|
||||
# Don't show update on first launch
|
||||
ecosystem {
|
||||
no_update_news = true
|
||||
}
|
||||
@@ -0,0 +1,18 @@
|
||||
# hypridle — adapted from Omarchy v3. Locks at 5 min, screen off at ~5.5 min.
|
||||
general {
|
||||
lock_cmd = hyprlock
|
||||
before_sleep_cmd = loginctl lock-session
|
||||
after_sleep_cmd = sleep 1 && hyprctl dispatch dpms on
|
||||
inhibit_sleep = 3
|
||||
}
|
||||
|
||||
listener {
|
||||
timeout = 300
|
||||
on-timeout = loginctl lock-session
|
||||
}
|
||||
|
||||
listener {
|
||||
timeout = 330
|
||||
on-timeout = hyprctl dispatch dpms off
|
||||
on-resume = hyprctl dispatch dpms on && brightnessctl -r
|
||||
}
|
||||
@@ -0,0 +1,15 @@
|
||||
# Omarchy-style Hyprland configuration (ported to NixOS for straylight).
|
||||
# Mirrors Omarchy v3 ~/.config/hypr/hyprland.conf: a set of sourced
|
||||
# fragments plus the active theme's colour overrides.
|
||||
|
||||
source = ~/.config/hypr/envs.conf
|
||||
source = ~/.config/hypr/looknfeel.conf
|
||||
source = ~/.config/hypr/input.conf
|
||||
source = ~/.config/hypr/windows.conf
|
||||
source = ~/.config/hypr/autostart.conf
|
||||
source = ~/.config/hypr/monitors.conf
|
||||
source = ~/.config/hypr/bindings.conf
|
||||
|
||||
# Active Omarchy theme. Sourced last so its border colours win over the
|
||||
# defaults in looknfeel.conf. Managed by omarchy-theme-set.
|
||||
source = ~/.config/omarchy/current/theme/hyprland.conf
|
||||
@@ -0,0 +1,44 @@
|
||||
# hyprlock — Omarchy v3 config/hypr/hyprlock.conf.
|
||||
source = ~/.config/omarchy/current/theme/hyprlock.conf
|
||||
|
||||
general {
|
||||
ignore_empty_input = true
|
||||
}
|
||||
|
||||
background {
|
||||
monitor =
|
||||
color = $color
|
||||
path = ~/.config/omarchy/current/background
|
||||
blur_passes = 3
|
||||
}
|
||||
|
||||
animations {
|
||||
enabled = false
|
||||
}
|
||||
|
||||
input-field {
|
||||
monitor =
|
||||
size = 650, 100
|
||||
position = 0, 0
|
||||
halign = center
|
||||
valign = center
|
||||
|
||||
inner_color = $inner_color
|
||||
outer_color = $outer_color
|
||||
outline_thickness = 4
|
||||
|
||||
font_family = JetBrainsMono Nerd Font
|
||||
font_color = $font_color
|
||||
|
||||
placeholder_text = Enter Password
|
||||
check_color = $check_color
|
||||
fail_text = <i>$FAIL ($ATTEMPTS)</i>
|
||||
|
||||
rounding = 0
|
||||
shadow_passes = 0
|
||||
fade_on_empty = false
|
||||
}
|
||||
|
||||
auth {
|
||||
fingerprint:enabled = false
|
||||
}
|
||||
@@ -0,0 +1,28 @@
|
||||
# Input devices. kb_options matches Kyle's existing i3 xkb settings
|
||||
# (ctrl:swapcaps + right-alt compose) so muscle memory carries over.
|
||||
|
||||
input {
|
||||
kb_layout = us
|
||||
kb_options = ctrl:swapcaps,compose:ralt
|
||||
|
||||
repeat_rate = 40
|
||||
repeat_delay = 250
|
||||
|
||||
numlock_by_default = true
|
||||
|
||||
follow_mouse = 1
|
||||
sensitivity = 0
|
||||
|
||||
touchpad {
|
||||
clickfinger_behavior = true
|
||||
scroll_factor = 0.4
|
||||
natural_scroll = false
|
||||
}
|
||||
}
|
||||
|
||||
# Scroll nicely in the terminal
|
||||
windowrule = match:class (Alacritty|kitty|foot|com.mitchellh.ghostty), scroll_touchpad 1.5
|
||||
|
||||
gestures {
|
||||
workspace_swipe = false
|
||||
}
|
||||
@@ -0,0 +1,131 @@
|
||||
# Omarchy v3 default/hypr/looknfeel.conf.
|
||||
# Default border colours here are overridden by the active theme's
|
||||
# hyprland.conf (sourced last from hyprland.conf).
|
||||
|
||||
# Variables
|
||||
$activeBorderColor = rgba(33ccffee) rgba(00ff99ee) 45deg
|
||||
$inactiveBorderColor = rgba(595959aa)
|
||||
|
||||
general {
|
||||
gaps_in = 5
|
||||
gaps_out = 10
|
||||
|
||||
border_size = 2
|
||||
|
||||
col.active_border = $activeBorderColor
|
||||
col.inactive_border = $inactiveBorderColor
|
||||
|
||||
# Set to true enable resizing windows by clicking and dragging on borders and gaps
|
||||
resize_on_border = false
|
||||
|
||||
# Please see https://wiki.hypr.land/Configuring/Advanced-and-Cool/Tearing/ before you turn this on
|
||||
allow_tearing = false
|
||||
|
||||
layout = dwindle
|
||||
}
|
||||
|
||||
decoration {
|
||||
rounding = 0
|
||||
|
||||
shadow {
|
||||
enabled = true
|
||||
range = 2
|
||||
render_power = 3
|
||||
color = rgba(1a1a1aee)
|
||||
}
|
||||
|
||||
blur {
|
||||
enabled = true
|
||||
size = 2
|
||||
passes = 2
|
||||
special = true
|
||||
brightness = 0.60
|
||||
contrast = 0.75
|
||||
}
|
||||
}
|
||||
|
||||
group {
|
||||
col.border_active = $activeBorderColor
|
||||
col.border_inactive = $inactiveBorderColor
|
||||
col.border_locked_active = $activeBorderColor
|
||||
col.border_locked_inactive = $inactiveBorderColor
|
||||
|
||||
groupbar {
|
||||
font_size = 12
|
||||
font_family = monospace
|
||||
font_weight_active = ultraheavy
|
||||
font_weight_inactive = normal
|
||||
|
||||
indicator_height = 0
|
||||
indicator_gap = 5
|
||||
height = 22
|
||||
gaps_in = 5
|
||||
gaps_out = 0
|
||||
|
||||
text_color = rgb(ffffff)
|
||||
text_color_inactive = rgba(ffffff90)
|
||||
col.active = rgba(00000040)
|
||||
col.inactive = rgba(00000020)
|
||||
|
||||
gradients = true
|
||||
gradient_rounding = 0
|
||||
gradient_round_only_edges = false
|
||||
}
|
||||
}
|
||||
|
||||
animations {
|
||||
enabled = yes, please :)
|
||||
|
||||
bezier = easeOutQuint,0.23,1,0.32,1
|
||||
bezier = easeInOutCubic,0.65,0.05,0.36,1
|
||||
bezier = linear,0,0,1,1
|
||||
bezier = almostLinear,0.5,0.5,0.75,1.0
|
||||
bezier = quick,0.15,0,0.1,1
|
||||
|
||||
animation = global, 1, 10, default
|
||||
animation = border, 1, 5.39, easeOutQuint
|
||||
animation = windows, 1, 3.79, easeOutQuint
|
||||
animation = windowsIn, 1, 4.1, easeOutQuint, popin 87%
|
||||
animation = windowsOut, 1, 1.49, linear, popin 87%
|
||||
animation = fadeIn, 1, 1.73, almostLinear
|
||||
animation = fadeOut, 1, 1.46, almostLinear
|
||||
animation = fade, 1, 3.03, quick
|
||||
animation = layers, 1, 3.81, easeOutQuint
|
||||
animation = layersIn, 1, 4, easeOutQuint, fade
|
||||
animation = layersOut, 1, 1.5, linear, fade
|
||||
animation = fadeLayersIn, 1, 1.79, almostLinear
|
||||
animation = fadeLayersOut, 1, 1.39, almostLinear
|
||||
animation = workspaces, 0, 0, ease
|
||||
animation = specialWorkspace, 1, 3, easeOutQuint, slidevert
|
||||
}
|
||||
|
||||
dwindle {
|
||||
preserve_split = true
|
||||
force_split = 2
|
||||
}
|
||||
|
||||
scrolling {
|
||||
column_width = 0.49
|
||||
}
|
||||
|
||||
master {
|
||||
new_status = master
|
||||
}
|
||||
|
||||
misc {
|
||||
disable_hyprland_logo = true
|
||||
disable_splash_rendering = true
|
||||
disable_scale_notification = true
|
||||
focus_on_activate = true
|
||||
anr_missed_pings = 3
|
||||
on_focus_under_fullscreen = 1
|
||||
}
|
||||
|
||||
cursor {
|
||||
hide_on_key_press = true
|
||||
warp_on_change_workspace = 1
|
||||
}
|
||||
|
||||
binds {
|
||||
hide_special_on_workspace_change = true
|
||||
}
|
||||
@@ -0,0 +1,10 @@
|
||||
# Monitors. Edit with `hyprctl monitors` for current names/resolutions.
|
||||
# Format: monitor = [port], resolution, position, scale
|
||||
|
||||
# Safe default: preferred resolution, auto position, no forced scale.
|
||||
monitor = , preferred, auto, auto
|
||||
|
||||
# Examples (uncomment / adjust as needed):
|
||||
# monitor = DP-1, 3840x2160@60, auto, 1.5
|
||||
# monitor = eDP-1, preferred, auto, 1, transform, 1
|
||||
# monitor = HDMI-A-1, disable
|
||||
@@ -0,0 +1,26 @@
|
||||
# Window / layer rules. Omarchy v3 default/hypr/windows.conf with the
|
||||
# app-specific apps.conf inlined (no separate apps.conf here).
|
||||
|
||||
windowrule = suppress_event maximize, match:class .*
|
||||
|
||||
# Tag all windows for default opacity (apps can override by clearing the tag)
|
||||
windowrule = tag +default-opacity, match:class .*
|
||||
|
||||
# Float common utility windows
|
||||
windowrule = float, match:class ^(org.pulseaudio.pavucontrol|blueberry.py|nm-connection-editor|blueman-manager)$
|
||||
windowrule = float, match:class ^(org.gnome.Calculator|gnome-calculator)$
|
||||
|
||||
# Fix some dragging issues with XWayland
|
||||
windowrule = no_focus on, match:class ^$, match:title ^$, match:xwayland 1, match:float 1, match:fullscreen 0, match:pin 0
|
||||
|
||||
# clipse clipboard manager floats in the middle
|
||||
windowrule = float, match:class (clipse)
|
||||
windowrule = size 622 652, match:class (clipse)
|
||||
windowrule = stay_focused, match:class (clipse)
|
||||
|
||||
# Apply default opacity after apps have had a chance to opt out
|
||||
windowrule = opacity 0.97 0.9, match:tag default-opacity
|
||||
|
||||
# Proper background blur for rofi + waybar
|
||||
layerrule = blur, rofi
|
||||
layerrule = blur, waybar
|
||||
Reference in New Issue
Block a user