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:
2026-10-14 01:18:23 -07:00
parent 93a052eab1
commit 3e564d57db
31 changed files with 1316 additions and 0 deletions
+344
View File
@@ -0,0 +1,344 @@
# Omarchy-style Hyprland desktop (classic dotfiles Omarchy, ported to a
# no-home-manager NixOS system module). Imported ONLY by hw/straylight, so
# the other desktop hosts (imladris, ono-sendai) keep i3.
#
# Layout mirrors Omarchy v3:
# ~/.config/{hypr,waybar,rofi,wlogout,swayosd,alacritty} -> read-only store links
# ~/.local/share/omarchy -> store payload (themes/, bin/)
# ~/.config/omarchy/current/ -> mutable state
# (theme + background)
#
# Theme colours are generated at build time from each theme's palette
# (Omarchy themes/<name>/colors.toml) into themes/<name>/{hyprland.conf,
# hyprlock.conf,waybar.css,rofi.rasi,swayosd.css,wlogout.css,alacritty.toml,
# mako.ini}. Wallpapers are fetched from the Omarchy v3.8.4 tag.
{ config, lib, pkgs, ... }:
let
inherit (lib) mkForce mapAttrsToList concatMapStrings;
user = "kyle";
home = "/home/${user}";
omarchyPath = "${home}/.local/share/omarchy";
current = "${home}/.config/omarchy/current";
defaultTheme = "tokyo-night";
# ---- Omarchy themes/*/colors.toml ----
themes = {
tokyo-night = {
accent = "#7aa2f7"; cursor = "#c0caf5"; foreground = "#a9b1d6"; background = "#1a1b26";
selection_foreground = "#c0caf5"; selection_background = "#7aa2f7";
color0 = "#32344a"; color1 = "#f7768e"; color2 = "#9ece6a"; color3 = "#e0af68";
color4 = "#7aa2f7"; color5 = "#ad8ee6"; color6 = "#449dab"; color7 = "#787c99";
color8 = "#444b6a"; color9 = "#ff7a93"; color10 = "#b9f27c"; color11 = "#ff9e64";
color12 = "#7da6ff"; color13 = "#bb9af7"; color14 = "#0db9d7"; color15 = "#acb0d0";
};
catppuccin = {
accent = "#89b4fa"; cursor = "#f5e0dc"; foreground = "#cdd6f4"; background = "#1e1e2e";
selection_foreground = "#1e1e2e"; selection_background = "#f5e0dc";
color0 = "#45475a"; color1 = "#f38ba8"; color2 = "#a6e3a1"; color3 = "#f9e2af";
color4 = "#89b4fa"; color5 = "#f5c2e7"; color6 = "#94e2d5"; color7 = "#bac2de";
color8 = "#585b70"; color9 = "#f38ba8"; color10 = "#a6e3a1"; color11 = "#f9e2af";
color12 = "#89b4fa"; color13 = "#f5c2e7"; color14 = "#94e2d5"; color15 = "#a6adc8";
};
gruvbox = {
accent = "#7daea3"; cursor = "#bdae93"; foreground = "#d4be98"; background = "#282828";
selection_foreground = "#ebdbb2"; selection_background = "#d65d0e";
color0 = "#3c3836"; color1 = "#ea6962"; color2 = "#a9b665"; color3 = "#d8a657";
color4 = "#7daea3"; color5 = "#d3869b"; color6 = "#89b482"; color7 = "#d4be98";
color8 = "#3c3836"; color9 = "#ea6962"; color10 = "#a9b665"; color11 = "#d8a657";
color12 = "#7daea3"; color13 = "#d3869b"; color14 = "#89b482"; color15 = "#d4be98";
};
kanagawa = {
accent = "#7e9cd8"; cursor = "#c8c093"; foreground = "#dcd7ba"; background = "#1f1f28";
selection_foreground = "#c8c093"; selection_background = "#2d4f67";
color0 = "#090618"; color1 = "#c34043"; color2 = "#76946a"; color3 = "#c0a36e";
color4 = "#7e9cd8"; color5 = "#957fb8"; color6 = "#6a9589"; color7 = "#c8c093";
color8 = "#727169"; color9 = "#e82424"; color10 = "#98bb6c"; color11 = "#e6c384";
color12 = "#7fb4ca"; color13 = "#938aa9"; color14 = "#7aa89f"; color15 = "#dcd7ba";
};
everforest = {
accent = "#7fbbb3"; cursor = "#d3c6aa"; foreground = "#d3c6aa"; background = "#2d353b";
selection_foreground = "#2d353b"; selection_background = "#d3c6aa";
color0 = "#475258"; color1 = "#e67e80"; color2 = "#a7c080"; color3 = "#dbbc7f";
color4 = "#7fbbb3"; color5 = "#d699b6"; color6 = "#83c092"; color7 = "#d3c6aa";
color8 = "#475258"; color9 = "#e67e80"; color10 = "#a7c080"; color11 = "#dbbc7f";
color12 = "#7fbbb3"; color13 = "#d699b6"; color14 = "#83c092"; color15 = "#d3c6aa";
};
nord = {
accent = "#81a1c1"; cursor = "#d8dee9"; foreground = "#d8dee9"; background = "#2e3440";
selection_foreground = "#d8dee9"; selection_background = "#4c566a";
color0 = "#3b4252"; color1 = "#bf616a"; color2 = "#a3be8c"; color3 = "#ebcb8b";
color4 = "#81a1c1"; color5 = "#b48ead"; color6 = "#88c0d0"; color7 = "#e5e9f0";
color8 = "#4c566a"; color9 = "#bf616a"; color10 = "#a3be8c"; color11 = "#ebcb8b";
color12 = "#81a1c1"; color13 = "#b48ead"; color14 = "#8fbcbb"; color15 = "#eceff4";
};
rose-pine = {
accent = "#56949f"; cursor = "#cecacd"; foreground = "#575279"; background = "#faf4ed";
selection_foreground = "#575279"; selection_background = "#dfdad9";
color0 = "#f2e9e1"; color1 = "#b4637a"; color2 = "#286983"; color3 = "#ea9d34";
color4 = "#56949f"; color5 = "#907aa9"; color6 = "#d7827e"; color7 = "#575279";
color8 = "#9893a5"; color9 = "#b4637a"; color10 = "#286983"; color11 = "#ea9d34";
color12 = "#56949f"; color13 = "#907aa9"; color14 = "#d7827e"; color15 = "#575279";
};
hackerman = {
accent = "#82FB9C"; cursor = "#ddf7ff"; foreground = "#ddf7ff"; background = "#0B0C16";
selection_foreground = "#0B0C16"; selection_background = "#ddf7ff";
color0 = "#3E4058"; color1 = "#50f872"; color2 = "#4fe88f"; color3 = "#50f7d4";
color4 = "#829dd4"; color5 = "#86a7df"; color6 = "#7cf8f7"; color7 = "#85E1FB";
color8 = "#6a6e95"; color9 = "#85ff9d"; color10 = "#9cf7c2"; color11 = "#a4ffec";
color12 = "#c4d2ed"; color13 = "#cddbf4"; color14 = "#d1fffe"; color15 = "#ddf7ff";
};
};
# ---- Omarchy themes/<name>/backgrounds/<file> (v3.8.4) ----
wallpapers = {
tokyo-night = [
{ file = "1-sunset-lake.png"; hash = "sha256-Bt+5/OAp7DWttA6jk5KWd3wrFA0SMrWhaXsVBS1XU2I="; }
{ file = "2-pawel-czerwinski.jpg"; hash = "sha256-acxN1KQHwH9VRgD549BP7AKTuMiF3dhR/lg+/C6ty1I="; }
{ file = "4-oma-cityscape.jpg"; hash = "sha256-IuHWOXIrM/pvDTrCczRQtLrpYbSB9WZcsWOXvF9xTlw="; }
];
catppuccin = [
{ file = "1-totoro.png"; hash = "sha256-O8+rFOjnsEEwfLd9cAxpWRYP5/bV3mMbFb0C3gz42f8="; }
{ file = "2-waves.png"; hash = "sha256-VjGQ35WJvrLVEX1A2wLGSSMqtrw8Py622Xqfs1haDP0="; }
];
gruvbox = [
{ file = "1-the-backwater.jpg"; hash = "sha256-E8/GrjcK+YTAioIP+BtWoP67D7/pcSptsSi5TRTsqsY="; }
{ file = "4-idyllic-procession.jpg"; hash = "sha256-vgrnMmOl62lBb7E1R4JqYIBoWaoxuwMQU6/HPeYKVcU="; }
{ file = "5-leaves.jpg"; hash = "sha256-zb0817NKLI5+dIGK9RAahTF4aHiwo6/Lj2mFsnOU9m0="; }
];
kanagawa = [
{ file = "1-kanagawa.jpg"; hash = "sha256-m4F9cXaIU58NuHYDtmGZKDnDy7XUkYoCpO/AXJ+Isn0="; }
];
everforest = [
{ file = "1-tree-tops.jpg"; hash = "sha256-DwCl4tD3jV51x6L0gQH23uaRecbZTp9OvG+3wPOUYr8="; }
];
nord = [
{ file = "1-city-view.png"; hash = "sha256-sRhvp+5OnZAIe4aTTE3jGoZ9qkojxAGIUYGwe6Ev/3U="; }
{ file = "2-night-hawks.png"; hash = "sha256-YaS8ScE3ERId6H9ffyQH/4I1BRzRf5ze1+IOFbGdVpI="; }
];
rose-pine = [
{ file = "1-funky-shapes.jpg"; hash = "sha256-b1qeo9wiP76RBGfMc5Z7pt2ffoCn2Aa8FemFVj0V/gM="; }
];
hackerman = [
{ file = "1-synth-scape.jpg"; hash = "sha256-x9JZSTXyBODfG0Pf56EjieocHT/Y5XqSqfCEl/J6N34="; }
];
};
# ---- helpers ----
hexDigits = {
"0" = 0; "1" = 1; "2" = 2; "3" = 3; "4" = 4; "5" = 5; "6" = 6; "7" = 7;
"8" = 8; "9" = 9; "a" = 10; "b" = 11; "c" = 12; "d" = 13; "e" = 14; "f" = 15;
};
hexToRgb = hex:
let
s = lib.toLower (lib.removePrefix "#" hex);
dig = i: hexDigits.${builtins.substring i 1 s};
byte = i: (dig (i * 2)) * 16 + (dig (i * 2 + 1));
in "${toString (byte 0)},${toString (byte 1)},${toString (byte 2)}";
strip = hex: lib.removePrefix "#" hex;
mkFile = name: text: pkgs.writeText name text;
themeDir = name: t:
let
bgs = wallpapers.${name} or [ ];
hyprlandConf = mkFile "hyprland.conf" ''
$activeBorderColor = rgb(${strip t.accent})
general {
col.active_border = $activeBorderColor
}
group {
col.border_active = $activeBorderColor
}
'';
hyprlockConf = mkFile "hyprlock.conf" ''
$color = rgba(${hexToRgb t.background}, 1.0)
$inner_color = rgba(${hexToRgb t.background}, 0.8)
$outer_color = rgba(${hexToRgb t.foreground}, 1.0)
$font_color = rgba(${hexToRgb t.foreground}, 1.0)
$check_color = rgba(${hexToRgb t.accent}, 1.0)
'';
waybarCss = mkFile "waybar.css" ''
@define-color foreground ${t.foreground};
@define-color background ${t.background};
'';
swayosdCss = mkFile "swayosd.css" ''
@define-color background ${t.background};
@define-color border-color ${t.foreground};
@define-color label ${t.foreground};
@define-color image ${t.foreground};
@define-color progress ${t.accent};
'';
wlogoutCss = mkFile "wlogout.css" ''
@define-color background ${t.background};
@define-color foreground ${t.foreground};
@define-color accent ${t.accent};
'';
rofiRasi = mkFile "rofi.rasi" ''
* {
bg: ${t.background};
fg: ${t.foreground};
accent: ${t.accent};
background-color: @bg;
text-color: @fg;
border: 2px;
border-color: @accent;
border-radius: 0;
padding: 8px;
spacing: 6px;
font: "JetBrainsMono Nerd Font 12";
}
window { width: 40%; background-color: @bg; border: 2px; border-color: @accent; }
inputbar { background-color: @bg; text-color: @fg; }
listview { lines: 10; background-color: @bg; }
element { padding: 4px; }
element selected { background-color: @accent; text-color: @bg; }
'';
alacrittyToml = mkFile "alacritty.toml" ''
[colors.primary]
background = "${t.background}"
foreground = "${t.foreground}"
[colors.cursor]
text = "${t.background}"
cursor = "${t.cursor}"
[colors.vi_mode_cursor]
text = "${t.background}"
cursor = "${t.cursor}"
[colors.selection]
text = "${t.selection_foreground}"
background = "${t.selection_background}"
[colors.normal]
black = "${t.color0}"
red = "${t.color1}"
green = "${t.color2}"
yellow = "${t.color3}"
blue = "${t.color4}"
magenta = "${t.color5}"
cyan = "${t.color6}"
white = "${t.color7}"
[colors.bright]
black = "${t.color8}"
red = "${t.color9}"
green = "${t.color10}"
yellow = "${t.color11}"
blue = "${t.color12}"
magenta = "${t.color13}"
cyan = "${t.color14}"
white = "${t.color15}"
'';
makoIni = mkFile "mako.ini" ''
text-color=${t.foreground}
border-color=${t.accent}
background-color=${t.background}
width=420
height=110
padding=10
margin=10
border-size=2
border-radius=0
anchor=top-right
layer=overlay
default-timeout=5000
max-visible=5
font=JetBrainsMono Nerd Font 10
'';
in
pkgs.runCommand "omarchy-theme-${name}" { } ''
mkdir -p $out/backgrounds
cp ${hyprlandConf} $out/hyprland.conf
cp ${hyprlockConf} $out/hyprlock.conf
cp ${waybarCss} $out/waybar.css
cp ${swayosdCss} $out/swayosd.css
cp ${wlogoutCss} $out/wlogout.css
cp ${rofiRasi} $out/rofi.rasi
cp ${alacrittyToml} $out/alacritty.toml
cp ${makoIni} $out/mako.ini
${concatMapStrings (b: ''
cp ${pkgs.fetchurl {
url = "https://raw.githubusercontent.com/omacom/omarchy/v3.8.4/themes/${name}/backgrounds/${b.file}";
hash = b.hash;
}} $out/backgrounds/${b.file}
'') bgs}
'';
themesTree = pkgs.linkFarm "omarchy-themes"
(mapAttrsToList (n: t: { name = n; path = themeDir n t; }) themes);
omarchyDots = pkgs.runCommand "omarchy-dots" { } ''
mkdir -p $out
cp -r ${./omarchy/hypr} $out/hypr
cp -r ${./omarchy/waybar} $out/waybar
cp -r ${./omarchy/rofi} $out/rofi
cp -r ${./omarchy/wlogout} $out/wlogout
cp -r ${./omarchy/swayosd} $out/swayosd
cp -r ${./omarchy/alacritty} $out/alacritty
cp -r ${themesTree} $out/themes
'';
omarchyBin = pkgs.runCommand "omarchy-bin" { } ''
mkdir -p $out/bin
cp ${./omarchy/bin}/* $out/bin/
chmod +x $out/bin/*
'';
polkitAgent = pkgs.writeShellScriptBin "omarchy-polkit-agent" ''
exec ${pkgs.polkit_gnome}/libexec/polkit-gnome-authentication-agent-1
'';
in
{
programs.hyprland = {
enable = true;
systemd.setPath.enable = true;
};
# Hyprland is the default login session. i3 stays enabled (configs/desktop-light.nix)
# and remains selectable in lightdm as a fallback.
services.displayManager.defaultSession = "hyprland";
# Hyprland's own portal should be the default (desktop-light.nix sets gtk).
xdg.portal = {
config.common.default = mkForce "hyprland";
extraPortals = [ pkgs.xdg-desktop-portal-hyprland ];
};
environment.systemPackages = with pkgs; [
omarchyBin
polkitAgent
waybar rofi wlogout hyprlock hypridle swayosd mako clipse
wl-clipboard wl-clip-persist grim slurp hyprpicker
brightnessctl pamixer playerctl alacritty swaybg jq
gnome-calculator pavucontrol nautilus
nerd-fonts.jetbrains-mono
];
# Link the read-only config into ~/.config, seed the mutable theme state, and
# resolve the active theme/background symlinks. Runs on every switch/boot.
system.activationScripts.omarchy-dots = {
deps = [ "users" ];
text = ''
set -eu
export PATH=${lib.makeBinPath [ pkgs.coreutils pkgs.findutils pkgs.bash ]}:$PATH
install -d -m0755 -o ${user} -g users ${home}/.config ${home}/.local/share ${current}
ln -sfnT ${omarchyDots}/hypr ${home}/.config/hypr
ln -sfnT ${omarchyDots}/waybar ${home}/.config/waybar
ln -sfnT ${omarchyDots}/rofi ${home}/.config/rofi
ln -sfnT ${omarchyDots}/wlogout ${home}/.config/wlogout
ln -sfnT ${omarchyDots}/swayosd ${home}/.config/swayosd
ln -sfnT ${omarchyDots}/alacritty ${home}/.config/alacritty
ln -sfnT ${omarchyDots} ${omarchyPath}
[ -f ${current}/theme.name ] || printf '%s\n' ${defaultTheme} > ${current}/theme.name
chown -R ${user}:users ${home}/.config/omarchy
HOME=${home} OMARCHY_PATH=${omarchyPath} ${omarchyBin}/bin/omarchy-theme-apply
chown -h ${user}:users ${current}/theme ${current}/background 2>/dev/null || true
'';
};
}
+17
View File
@@ -0,0 +1,17 @@
# Alacritty — imports the active Omarchy theme palette.
[general]
import = ["~/.config/omarchy/current/theme/alacritty.toml"]
live_config_reload = true
[font]
size = 12
[font.normal]
family = "JetBrainsMono Nerd Font"
style = "Regular"
[window]
padding = { x = 8, y = 8 }
[env]
TERM = "xterm-256color"
@@ -0,0 +1,31 @@
#!/usr/bin/env bash
# Screenshot helper: region | window | output. Saves under ~/Pictures/Screenshots
# and copies to the clipboard.
set -euo pipefail
mode="${1:-region}"
dir="$HOME/Pictures/Screenshots"
mkdir -p "$dir"
file="$dir/$(date +%Y-%m-%d_%H-%M-%S).png"
case "$mode" in
region)
geom="$(slurp)" || exit 0
grim -g "$geom" "$file"
;;
window)
geom="$(hyprctl activewindow -j | jq -r '"\(.at[0]),\(.at[1]) \(.size[0])x\(.size[1])"')"
grim -g "$geom" "$file"
;;
output)
grim "$file"
;;
*)
echo "Usage: omarchy-capture-screenshot [region|window|output]" >&2
exit 1
;;
esac
wl-copy <"$file" 2>/dev/null || true
command -v notify-send >/dev/null && notify-send -u low "Screenshot saved" "$file" || true
exit 0
+62
View File
@@ -0,0 +1,62 @@
#!/usr/bin/env bash
# rofi-based Omarchy menu. Replaces Omarchy v3's walker-driven omarchy-menu.
# Usage: omarchy-menu [system|theme|background|capture|keybindings]
set -euo pipefail
OMARCHY_PATH="${OMARCHY_PATH:-$HOME/.local/share/omarchy}"
CURRENT="$HOME/.config/omarchy/current"
PICK=(rofi -dmenu -i -p "" -theme-str 'window { width: 22%; } listview { lines: 8; }')
menu_main() {
local choice
choice="$(printf '%s\n' Apps Themes Backgrounds Capture System Keybindings | "${PICK[@]}")" || exit 0
case "$choice" in
Apps) rofi -show drun -show-icons ;;
Themes) menu_theme ;;
Backgrounds) omarchy-theme-bg-next ;;
Capture) menu_capture ;;
System) menu_system ;;
Keybindings) menu_keybindings ;;
esac
}
menu_system() {
local choice
choice="$(printf '%s\n' Lock Logout Suspend Reboot Shutdown | "${PICK[@]}")" || exit 0
case "$choice" in
Lock) omarchy-system-lock ;;
Logout) hyprctl dispatch exit ;;
Suspend) systemctl suspend ;;
Reboot) systemctl reboot ;;
Shutdown) systemctl poweroff ;;
esac
}
menu_theme() {
local choice
choice="$(find "$OMARCHY_PATH/themes" -maxdepth 1 -mindepth 1 -type d -printf '%f\n' | sort | "${PICK[@]}")" || exit 0
[ -n "$choice" ] && omarchy-theme-set "$choice"
}
menu_capture() {
local choice
choice="$(printf '%s\n' Region Window Output | "${PICK[@]}")" || exit 0
case "$choice" in
Region) omarchy-capture-screenshot region ;;
Window) omarchy-capture-screenshot window ;;
Output) omarchy-capture-screenshot output ;;
esac
}
menu_keybindings() {
alacritty -e less ~/.config/hypr/bindings.conf
}
case "${1:-}" in
system) menu_system ;;
theme) menu_theme ;;
background) omarchy-theme-bg-next ;;
capture) menu_capture ;;
keybindings) menu_keybindings ;;
"" | *) menu_main ;;
esac
@@ -0,0 +1,4 @@
#!/usr/bin/env bash
# Reload waybar (re-reads config + style).
pkill -SIGUSR2 waybar 2>/dev/null || true
exit 0
+13
View File
@@ -0,0 +1,13 @@
#!/usr/bin/env bash
# Lock the session with hyprlock, then blank the display.
set -euo pipefail
if ! pidof hyprlock >/dev/null; then
( hyprlock; hyprctl dispatch dpms on ) &
fi
hyprctl switchxkblayout all 0 >/dev/null 2>&1 || true
(
sleep 3
pidof hyprlock >/dev/null || exit 0
hyprctl dispatch dpms off >/dev/null 2>&1 || true
) &
exit 0
+33
View File
@@ -0,0 +1,33 @@
#!/usr/bin/env bash
# Resolve ~/.config/omarchy/current/{theme,background} symlinks from the
# persisted theme.name / background.name state files. Only manages symlinks;
# restarting clients (swaybg/waybar/hyprland) is the caller's job.
#
# Safe to run as root (system activation) or as the user: honour $HOME.
set -euo pipefail
OMARCHY_PATH="${OMARCHY_PATH:-$HOME/.local/share/omarchy}"
CURRENT="$HOME/.config/omarchy/current"
THEMES="$OMARCHY_PATH/themes"
mkdir -p "$CURRENT"
# --- theme ---
name="$(cat "$CURRENT/theme.name" 2>/dev/null || true)"
if [ -z "$name" ] || [ ! -d "$THEMES/$name" ]; then
name="$(find "$THEMES" -maxdepth 1 -mindepth 1 -type d -printf '%f\n' | sort | head -n1)"
printf '%s\n' "$name" >"$CURRENT/theme.name"
fi
ln -sfn "$THEMES/$name" "$CURRENT/theme"
# --- background ---
bg="$(cat "$CURRENT/background.name" 2>/dev/null || true)"
if [ -z "$bg" ] || [ ! -e "$THEMES/$name/backgrounds/$bg" ]; then
bg="$(find "$THEMES/$name/backgrounds" -maxdepth 1 -type f -printf '%f\n' 2>/dev/null | sort | head -n1)"
printf '%s\n' "$bg" >"$CURRENT/background.name"
fi
if [ -n "$bg" ]; then
ln -sfn "$THEMES/$name/backgrounds/$bg" "$CURRENT/background"
fi
exit 0
+29
View File
@@ -0,0 +1,29 @@
#!/usr/bin/env bash
# Cycle to the next background for the current theme.
set -euo pipefail
OMARCHY_PATH="${OMARCHY_PATH:-$HOME/.local/share/omarchy}"
CURRENT="$HOME/.config/omarchy/current"
name="$(cat "$CURRENT/theme.name" 2>/dev/null || true)"
theme="$OMARCHY_PATH/themes/$name"
[ -d "$theme/backgrounds" ] || { echo "No backgrounds for theme '$name'" >&2; exit 1; }
mapfile -t backgrounds < <(find "$theme/backgrounds" -maxdepth 1 -type f -printf '%f\n' | sort)
total=${#backgrounds[@]}
[ "$total" -gt 0 ] || { echo "No backgrounds found" >&2; exit 1; }
cur="$(cat "$CURRENT/background.name" 2>/dev/null || true)"
idx=-1
for i in "${!backgrounds[@]}"; do
[ "${backgrounds[$i]}" = "$cur" ] && { idx=$i; break; }
done
next=$(( (idx + 1) % total ))
printf '%s\n' "${backgrounds[$next]}" >"$CURRENT/background.name"
omarchy-theme-apply
pkill -x swaybg 2>/dev/null || true
sleep 0.1
setsid swaybg -i "$CURRENT/background" -m fill >/dev/null 2>&1 &
exit 0
+23
View File
@@ -0,0 +1,23 @@
#!/usr/bin/env bash
# Set the background for the current theme to a given image path.
set -euo pipefail
OMARCHY_PATH="${OMARCHY_PATH:-$HOME/.local/share/omarchy}"
CURRENT="$HOME/.config/omarchy/current"
[ -n "${1:-}" ] && [ -f "$1" ] || { echo "Usage: omarchy-theme-bg-set <path-to-image>" >&2; exit 1; }
bg="$(realpath "$1")"
name="$(cat "$CURRENT/theme.name" 2>/dev/null || true)"
if [ -n "$name" ] && [ "$(dirname "$bg")" = "$OMARCHY_PATH/themes/$name/backgrounds" ]; then
basename "$bg" >"$CURRENT/background.name"
ln -sfn "$bg" "$CURRENT/background"
else
rm -f "$CURRENT/background.name"
ln -sfn "$bg" "$CURRENT/background"
fi
pkill -x swaybg 2>/dev/null || true
sleep 0.1
setsid swaybg -i "$CURRENT/background" -m fill >/dev/null 2>&1 &
exit 0
@@ -0,0 +1,9 @@
#!/usr/bin/env bash
# Print the current theme name (pretty).
set -euo pipefail
CURRENT="$HOME/.config/omarchy/current"
if [ -f "$CURRENT/theme.name" ]; then
sed -E 's/(^|-)([a-z])/\1\u\2/g; s/-/ /g' "$CURRENT/theme.name"
else
echo "Unknown"
fi
+36
View File
@@ -0,0 +1,36 @@
#!/usr/bin/env bash
# Set the active Omarchy theme (name or "<theme>" from the menu).
set -euo pipefail
OMARCHY_PATH="${OMARCHY_PATH:-$HOME/.local/share/omarchy}"
CURRENT="$HOME/.config/omarchy/current"
if [ -z "${1:-}" ]; then
echo "Usage: omarchy-theme-set <theme-name>" >&2
exit 1
fi
# Normalise: strip markup, lowercase, spaces -> dashes
name="$(printf '%s' "$1" | sed -E 's/<[^>]+>//g' | tr '[:upper:]' '[:lower:]' | tr ' ' '-')"
if [ ! -d "$OMARCHY_PATH/themes/$name" ]; then
echo "Theme '$name' does not exist" >&2
exit 1
fi
printf '%s\n' "$name" >"$CURRENT/theme.name"
# Start each theme on its first background
find "$OMARCHY_PATH/themes/$name/backgrounds" -maxdepth 1 -type f -printf '%f\n' | sort | head -n1 \
>"$CURRENT/background.name"
omarchy-theme-apply
# Restart clients so the new colours/wallpaper take effect
pkill -x swaybg 2>/dev/null || true
sleep 0.1
setsid swaybg -i "$CURRENT/background" -m fill >/dev/null 2>&1 &
pkill -SIGUSR2 waybar 2>/dev/null || true
hyprctl reload >/dev/null 2>&1 || true
command -v notify-send >/dev/null && notify-send -u low "Theme: $name" || true
exit 0
+13
View File
@@ -0,0 +1,13 @@
#!/usr/bin/env bash
# Toggle the waybar on/off (marker file read by the session autostart).
set -euo pipefail
CURRENT="$HOME/.config/omarchy/current"
mkdir -p "$CURRENT"
if [ -e "$CURRENT/waybar-off" ]; then
rm -f "$CURRENT/waybar-off"
setsid waybar >/dev/null 2>&1 &
else
touch "$CURRENT/waybar-off"
pkill -x waybar 2>/dev/null || true
fi
exit 0
@@ -0,0 +1,3 @@
#!/usr/bin/env bash
# Exit 0 if waybar should be running (used by the Hyprland exec-once line).
[ ! -e "$HOME/.config/omarchy/current/waybar-off" ]
+14
View File
@@ -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
+116
View File
@@ -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
+27
View File
@@ -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
}
+18
View File
@@ -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
}
+15
View File
@@ -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
+44
View File
@@ -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
}
+28
View File
@@ -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
}
+131
View File
@@ -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
}
+10
View File
@@ -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
+26
View File
@@ -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
+12
View File
@@ -0,0 +1,12 @@
configuration {
modi: "drun,run,window";
show-icons: true;
icon-theme: "Papirus";
drun-display-format: "{name}";
display-drun: " Apps";
display-run: " Run";
display-window: " Windows";
font: "JetBrainsMono Nerd Font 12";
}
@theme "~/.config/omarchy/current/theme/rofi.rasi"
+3
View File
@@ -0,0 +1,3 @@
[server]
max_volume = 100
show_percentage = true
+15
View File
@@ -0,0 +1,15 @@
@import "../omarchy/current/theme/swayosd.css";
* {
font-family: 'JetBrainsMono Nerd Font';
border-radius: 0;
}
window {
background-color: @background;
border: 2px solid @border-color;
}
label {
color: @label;
}
+117
View File
@@ -0,0 +1,117 @@
{
"reload_style_on_change": true,
"layer": "top",
"position": "top",
"spacing": 0,
"height": 26,
"modules-left": ["custom/omarchy", "hyprland/workspaces"],
"modules-center": ["clock"],
"modules-right": ["tray", "bluetooth", "network", "pulseaudio", "cpu", "battery"],
"custom/omarchy": {
"format": "\uf0c9",
"on-click": "omarchy-menu",
"on-click-right": "alacritty",
"tooltip-format": "Omarchy Menu\n\nSuper + Alt + Space"
},
"hyprland/workspaces": {
"on-click": "activate",
"format": "{icon}",
"format-icons": {
"default": "<span size='small'></span>",
"1": "1",
"2": "2",
"3": "3",
"4": "4",
"5": "5",
"6": "6",
"7": "7",
"8": "8",
"9": "9",
"10": "0",
"active": "󱓻"
},
"persistent-workspaces": {
"1": [],
"2": [],
"3": [],
"4": [],
"5": []
}
},
"clock": {
"format": "{:%A %H:%M}",
"format-alt": "{:%d %B W%V %Y}",
"tooltip": false
},
"cpu": {
"interval": 5,
"format": "󰍛",
"on-click": "alacritty -e btop"
},
"network": {
"format-icons": ["󰤯", "󰤟", "󰤢", "󰤥", "󰤨"],
"format": "{icon}",
"format-wifi": "{icon}",
"format-ethernet": "󰀂",
"format-disconnected": "󰤮",
"tooltip-format-wifi": "{essid} ({frequency} GHz)",
"tooltip-format-ethernet": "Connected",
"tooltip-format-disconnected": "Disconnected",
"interval": 3,
"spacing": 1,
"on-click": "nm-connection-editor"
},
"battery": {
"interval": 5,
"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}%",
"states": {
"warning": 20,
"critical": 10
},
"on-click": "omarchy-menu system"
},
"bluetooth": {
"format": "󰂯",
"format-off": "󰂲",
"format-disabled": "󰂲",
"format-connected": "󰂱",
"tooltip-format": "Devices connected: {num_connections}",
"on-click": "blueman-manager"
},
"pulseaudio": {
"format": "{icon}",
"on-click": "pavucontrol",
"on-click-right": "pamixer -t",
"tooltip-format": "Playing at {volume}%",
"scroll-step": 5,
"format-muted": "󰝟",
"format-icons": {
"headphone": "󰋋",
"headset": "󰋎",
"default": ["󰕿", "󰖀", "󰕾"]
}
},
"tray": {
"icon-size": 12,
"spacing": 17
}
}
+63
View File
@@ -0,0 +1,63 @@
@import "../omarchy/current/theme/waybar.css";
* {
background-color: @background;
color: @foreground;
border: none;
border-radius: 0;
min-height: 0;
font-family: 'JetBrainsMono Nerd Font';
font-size: 12px;
}
.modules-left {
margin-left: 8px;
}
.modules-right {
margin-right: 8px;
}
#workspaces button {
all: initial;
padding: 0 6px;
margin: 0 1.5px;
min-width: 9px;
}
#workspaces button.empty {
opacity: 0.5;
}
#cpu,
#battery,
#pulseaudio,
#custom-omarchy {
min-width: 12px;
margin: 0 7.5px;
}
#tray {
margin-right: 16px;
}
#bluetooth {
margin-right: 17px;
}
#network {
margin-right: 13px;
}
tooltip {
padding: 2px;
}
#clock {
margin-left: 8.75px;
}
.hidden {
opacity: 0;
}
+32
View File
@@ -0,0 +1,32 @@
[
{
"label": "lock",
"action": "hyprlock",
"text": "Lock",
"keybind": "l"
},
{
"label": "logout",
"action": "hyprctl dispatch exit",
"text": "Logout",
"keybind": "e"
},
{
"label": "suspend",
"action": "systemctl suspend",
"text": "Suspend",
"keybind": "s"
},
{
"label": "reboot",
"action": "systemctl reboot",
"text": "Reboot",
"keybind": "r"
},
{
"label": "shutdown",
"action": "systemctl poweroff",
"text": "Shutdown",
"keybind": "p"
}
]
+27
View File
@@ -0,0 +1,27 @@
@import "../omarchy/current/theme/wlogout.css";
* {
background-image: none;
font-family: 'JetBrainsMono Nerd Font';
font-size: 20px;
}
window {
background-color: @background;
}
button {
color: @foreground;
background-color: @background;
border: 2px solid @foreground;
border-radius: 0;
margin: 8px;
padding: 24px;
}
button:focus,
button:active,
button:hover {
background-color: @accent;
color: @background;
}
+1
View File
@@ -235,6 +235,7 @@ in
imports = [ imports = [
./hardware-configuration.nix ./hardware-configuration.nix
../../configs/desktop.nix ../../configs/desktop.nix
../../configs/omarchy.nix
../../configs/qemu.nix ../../configs/qemu.nix
../../configs/metrics/straylight.nix ../../configs/metrics/straylight.nix
]; ];