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,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
|
||||
'';
|
||||
};
|
||||
}
|
||||
@@ -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
|
||||
@@ -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
|
||||
@@ -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
|
||||
@@ -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
|
||||
@@ -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
|
||||
@@ -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
|
||||
@@ -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
|
||||
@@ -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" ]
|
||||
@@ -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
|
||||
@@ -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"
|
||||
@@ -0,0 +1,3 @@
|
||||
[server]
|
||||
max_volume = 100
|
||||
show_percentage = true
|
||||
@@ -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;
|
||||
}
|
||||
@@ -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
|
||||
}
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
@@ -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"
|
||||
}
|
||||
]
|
||||
@@ -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;
|
||||
}
|
||||
@@ -235,6 +235,7 @@ in
|
||||
imports = [
|
||||
./hardware-configuration.nix
|
||||
../../configs/desktop.nix
|
||||
../../configs/omarchy.nix
|
||||
../../configs/qemu.nix
|
||||
../../configs/metrics/straylight.nix
|
||||
];
|
||||
|
||||
Reference in New Issue
Block a user