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 = [
|
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
|
||||||
];
|
];
|
||||||
|
|||||||
Reference in New Issue
Block a user